diff --git a/3rdParty/MarchingCubes/CMakePackage.txt b/3rdParty/MarchingCubes/CMakePackage.txt
deleted file mode 100644
index b4e619a03839520bde16837d806f9dc5269be71a..0000000000000000000000000000000000000000
--- a/3rdParty/MarchingCubes/CMakePackage.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-GET_FILENAME_COMPONENT( CURRENT_DIR  ${CMAKE_CURRENT_LIST_FILE} PATH) 
-COLLECT_PACKAGE_DATA_WITH_OPTION(${CURRENT_DIR} ALL_SOURCES outOption outSourceGroupName)
-
-IF(${outOption})
-   list(APPEND VF_COMPILER_DEFINITION MC_CUBES)
-ENDIF()
diff --git a/3rdParty/MarchingCubes/MarchingCubes.h b/3rdParty/MarchingCubes/MarchingCubes.h
deleted file mode 100644
index e03d151d7a27859c07ac17e4d92fbf1c9379864a..0000000000000000000000000000000000000000
--- a/3rdParty/MarchingCubes/MarchingCubes.h
+++ /dev/null
@@ -1,1640 +0,0 @@
-#ifndef MARCHINGCUBES_H
-#define MARCHINGCUBES_H
-/**
-* @file    MarchingCubes.h
-* @author  Thomas Lewiner <thomas.lewiner@polytechnique.org>
-* @author  Math Dept, PUC-Rio
-* @version 0.2
-* @date    12/08/2002
-*
-* @brief   MarchingCubes Algorithm
-*/
-//________________________________________________
-
-#include <MarchingCubes/McTypes.h>
-#include <MarchingCubes/MatrixWrapper.h>
-#include <MarchingCubes/Matrix3DWrapper.h>
-#include <MarchingCubes/Matrix4DWrapper.h>
-#include <MarchingCubes/McLookUpTable.h>
-#include <MarchingCubes/McPly.h>
-
-#include <cmath>
-#include <ctime>
-#include <cfloat>
-#include <iostream>
-
-namespace McCubes{
-//_____________________________________________________________________________
-/** Marching Cubes algorithm wrapper */
-/** \class MarchingCubes
-  * \brief Marching Cubes algorithm.
-  */
-template<typename DataWrapper = MatrixWrapper<real> >
-class MarchingCubes
-//-----------------------------------------------------------------------------
-{
-public:
-   //nested classes
-   //-----------------------------------------------------------------------------
-   // Vertex structure
-   /** \struct Vertex "MarchingCubes.h" MarchingCubes
-   * Position and normal of a vertex
-   * \brief vertex structure
-   * \param x X coordinate
-   * \param y Y coordinate
-   * \param z Z coordinate
-   * \param nx X component of the normal
-   * \param ny Y component of the normal
-   * \param nz Z component of the normal
-   */
-   typedef struct Vertex
-   {
-      real  x,  y,  z ;  /**< Vertex coordinates */
-      real nx, ny, nz ;  /**< Vertex normal */
-   } Vertex ;
-
-   //-----------------------------------------------------------------------------
-   // Triangle structure
-   /** \struct Triangle "MarchingCubes.h" MarchingCubes
-   * Indices of the oriented triange vertices
-   * \brief triangle structure
-   * \param v1 First vertex index
-   * \param v2 Second vertex index
-   * \param v3 Third vertex index
-   */
-   typedef struct Triangle
-   {
-      int v1,v2,v3 ;  /**< Triangle vertices */
-   } Triangle ;
-   //_____________________________________________________________________________
-
-public :
-   // Constructors
-  /**
-   * Main and default constructor
-   * \brief constructor
-   * \param size_x width  of the grid
-   * \param size_y depth  of the grid
-   * \param size_z height of the grid
-   */
-  MarchingCubes ( const int size_x = -1, const int size_y = -1, const int size_z = -1 ) ;
-  MarchingCubes ( const DataWrapper& dataWrapper );
-  /** Destructor */
-  ~MarchingCubes() ;
-
-//-----------------------------------------------------------------------------
-// Accessors
-public :
-  /** accesses the number of vertices of the generated mesh */
-  inline const int nverts() const { return _nverts ; }
-  /** accesses the number of triangles of the generated mesh */
-  inline const int ntrigs() const { return _ntrigs ; }
-  /** accesses a specific vertex of the generated mesh */
-  inline Vertex   * vert( const int i ) const { if( i < 0  || i >= _nverts ) return ( Vertex *)NULL ; return _vertices  + i ; }
-  /** accesses a specific triangle of the generated mesh */
-  inline Triangle * trig( const int i ) const { if( i < 0  || i >= _ntrigs ) return (Triangle*)NULL ; return _triangles + i ; }
-
-  /** accesses the vertex buffer of the generated mesh */
-  inline Vertex   *vertices () { return _vertices  ; }
-  /** accesses the triangle buffer of the generated mesh */
-  inline Triangle *triangles() { return _triangles ; }
-
-  /**  accesses the width  of the grid */
-  inline const int size_x() const { return dataWrapper.getNX1(); /*_size_x ;*/ }
-  /**  accesses the depth  of the grid */
-  inline const int size_y() const { return dataWrapper.getNX2(); /*_size_y ;*/ }
-  /**  accesses the height of the grid */
-  inline const int size_z() const { return dataWrapper.getNX3(); /*_size_z ;*/ }
-
-  /**
-   * changes the size of the grid
-   * \param size_x width  of the grid
-   * \param size_y depth  of the grid
-   * \param size_z height of the grid
-   */
-  inline void set_resolution( const int size_x, const int size_y, const int size_z )
-  {
-     dataWrapper.resize(size_x, size_y, size_z);
-     //throw UbException("MarchingCubes::set_resolution disabled by CAB");
-     //_size_x = size_x ;  _size_y = size_y ;  _size_z = size_z ;
-  }
-  /**
-   * selects wether the algorithm will use the enhanced topologically controlled lookup table or the original MarchingCubes
-   * \param originalMC true for the original Marching Cubes
-   */
-  inline void set_method    ( const bool originalMC = false ) { _originalMC = originalMC ; }
-  /**
-   * selects to use data from another class
-   * \param data is the pointer to the external data, allocated as a size_x*size_y*size_z vector running in x first
-   */
-  inline void set_ext_data  ( real *data )
-  {
-     throw UbException(UB_EXARGS, "disabled by CAB");
-     //if( !_ext_data ) delete [] _data ;  _ext_data = data != NULL ;  if( _ext_data ) _data = data ;
-  }
-  /**
-   * selects to allocate data
-   */
-  inline void set_int_data  ()
-  {
-     throw UbException(UB_EXARGS,"disabled by CAB");
-     //_ext_data = false ;  _data = NULL ;
-  }
-
-  // Data access
-  /**
-   * accesses a specific cube of the grid
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  //MODIFIED BY CAB
-  inline const real get_data  ( const int& i, const int& j, const int& k ) const
-  {
-     return dataWrapper.getData(i,j,k);
-     //return _data[ i + j*_size_x + k*_size_x*_size_y] ;
-  }
-  /**
-   * sets a specific cube of the grid
-   * \param val new value for the cube
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  //MODIFIED BY CAB
-  inline void  set_data  ( const real& val, const int& i, const int& j, const int& k )
-  {
-     dataWrapper.setData(val,i,j,k);
-     //_data[ i + j*_size_x + k*_size_x*_size_y] = val ;
-  }
-
-  // Data initialization
-  /** inits temporary structures (must set sizes before call) : the grid and the vertex index per cube */
-  void init_temps () ;
-  /** inits all structures (must set sizes before call) : the temporary structures and the mesh buffers */
-  void init_all   () ;
-  /** clears temporary structures : the grid and the main */
-  void clean_temps() ;
-  /** clears all structures : the temporary structures and the mesh buffers */
-  void clean_all  () ;
-
-
-//-----------------------------------------------------------------------------
-// Exportation
-public :
-  /**
-   * PLY exportation of the generated mesh
-   * \param fn  name of the PLY file to create
-   * \param bin if true, the PLY will be written in binary mode
-   */
-  void writePLY( const char *fn, bool bin = false ) ;
-
-  /**
-   * VRML / Open Inventor exportation of the generated mesh
-   * \param fn  name of the IV file to create
-   */
-  void writeIV ( const char *fn ) ;
-
-  /**
-   * ISO exportation of the input grid
-   * \param fn  name of the ISO file to create
-   */
-  void writeISO( const char *fn ) ;
-
-
-  void writeUCD( std::string filename );
-  void writeUCDwithNormals( std::string filename );
-
-//-----------------------------------------------------------------------------
-// Algorithm
-public :
-  /**
-   * Main algorithm : must be called after init_all
-   * \param iso isovalue
-   */
-  void run( real iso = (real)0.0 ) ;
-
-protected :
-  /** tesselates one cube */
-  void process_cube ()             ;
-  /** tests if the components of the tesselation of the cube should be connected by the interior of an ambiguous face */
-  bool test_face    ( schar face ) ;
-  /** tests if the components of the tesselation of the cube should be connected through the interior of the cube */
-  bool test_interior( schar s )    ;
-
-
-//-----------------------------------------------------------------------------
-// Operations
-protected :
-  /**
-   * computes almost all the vertices of the mesh by interpolation along the cubes edges
-   * \param iso isovalue
-   */
-  void compute_intersection_points( real iso ) ;
-
-  /**
-   * routine to add a triangle to the mesh
-   * \param trig the code for the triangle as a sequence of edges index
-   * \param n    the number of triangles to produce
-   * \param v12  the index of the interior vertex to use, if necessary
-   */
-  void add_triangle ( const char* trig, char n, int v12 = -1 ) ;
-
-  /** tests and eventually doubles the vertex buffer capacity for a new vertex insertion */
-  void test_vertex_addition() ;
-  /** adds a vertex on the current horizontal edge */
-  int add_x_vertex() ;
-  /** adds a vertex on the current longitudinal edge */
-  int add_y_vertex() ;
-  /** adds a vertex on the current vertical edge */
-  int add_z_vertex() ;
-  /** adds a vertex inside the current cube */
-  int add_c_vertex() ;
-
-  /**
-   * interpolates the horizontal gradient of the implicit function at the lower vertex of the specified cube
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  real get_x_grad( const int i, const int j, const int k ) const ;
-  /**
-   * interpolates the longitudinal gradient of the implicit function at the lower vertex of the specified cube
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  real get_y_grad( const int i, const int j, const int k ) const ;
-  /**
-   * interpolates the vertical gradient of the implicit function at the lower vertex of the specified cube
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  real get_z_grad( const int i, const int j, const int k ) const ;
-
-  /**
-   * accesses the pre-computed vertex index on the lower horizontal edge of a specific cube
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  inline int   get_x_vert( const int i, const int j, const int k ) const { return _x_verts[ i + j*dataWrapper.getNX1() + k*dataWrapper.getNX1()*dataWrapper.getNX2()] ; }
-  /**
-   * accesses the pre-computed vertex index on the lower longitudinal edge of a specific cube
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  inline int   get_y_vert( const int i, const int j, const int k ) const { return _y_verts[ i + j*dataWrapper.getNX1() + k*dataWrapper.getNX1()*dataWrapper.getNX2()] ; }
-  /**
-   * accesses the pre-computed vertex index on the lower vertical edge of a specific cube
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  inline int   get_z_vert( const int i, const int j, const int k ) const { return _z_verts[ i + j*dataWrapper.getNX1() + k*dataWrapper.getNX1()*dataWrapper.getNX2()] ; }
-
-  /**
-   * sets the pre-computed vertex index on the lower horizontal edge of a specific cube
-   * \param val the index of the new vertex
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  inline void  set_x_vert( const int val, const int i, const int j, const int k ) { _x_verts[ i + j*dataWrapper.getNX1() + k*dataWrapper.getNX1()*dataWrapper.getNX2()] = val ; }
-  /**
-   * sets the pre-computed vertex index on the lower longitudinal edge of a specific cube
-   * \param val the index of the new vertex
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  inline void  set_y_vert( const int val, const int i, const int j, const int k ) { _y_verts[ i + j*dataWrapper.getNX1() + k*dataWrapper.getNX1()*dataWrapper.getNX2()] = val ; }
-  /**
-   * sets the pre-computed vertex index on the lower vertical edge of a specific cube
-   * \param val the index of the new vertex
-   * \param i abscisse of the cube
-   * \param j ordinate of the cube
-   * \param k height of the cube
-   */
-  inline void  set_z_vert( const int val, const int i, const int j, const int k ) { _z_verts[ i + j*dataWrapper.getNX1() + k*dataWrapper.getNX1()*dataWrapper.getNX2()] = val ; }
-
-  /** prints cube for debug */
-  void print_cube(std::ostream& os) ;
-
-//-----------------------------------------------------------------------------
-// Elements
-protected :
-  bool      _originalMC ;   /**< selects wether the algorithm will use the enhanced topologically controlled lookup table or the original MarchingCubes */
-//  bool      _ext_data   ;   /**< selects wether to allocate data or use data from another class */
-
-//folgendes ist nun alles folgenden dataWrapper:
-//   int       _size_x     ;  /**< width  of the grid */
-//   int       _size_y     ;  /**< depth  of the grid */
-//   int       _size_z     ;  /**< height of the grid */
-//real     *_data       ;  /**< implicit function values sampled on the grid */
-  DataWrapper   dataWrapper;
-
-  int      *_x_verts    ;  /**< pre-computed vertex indices on the lower horizontal   edge of each cube */
-  int      *_y_verts    ;  /**< pre-computed vertex indices on the lower longitudinal edge of each cube */
-  int      *_z_verts    ;  /**< pre-computed vertex indices on the lower vertical     edge of each cube */
-
-  int       _nverts     ;  /**< number of allocated vertices  in the vertex   buffer */
-  int       _ntrigs     ;  /**< number of allocated triangles in the triangle buffer */
-  int       _Nverts     ;  /**< size of the vertex   buffer */
-  int       _Ntrigs     ;  /**< size of the triangle buffer */
-  Vertex   *_vertices   ;  /**< vertex   buffer */
-  Triangle *_triangles  ;  /**< triangle buffer */
-
-  int       _i          ;  /**< abscisse of the active cube */
-  int       _j          ;  /**< height of the active cube */
-  int       _k          ;  /**< ordinate of the active cube */
-
-  real      _cube[8]    ;  /**< values of the implicit function on the active cube */
-  uchar     _lut_entry  ;  /**< cube sign representation in [0..255] */
-  uchar     _case       ;  /**< case of the active cube in [0..15] */
-  uchar     _config     ;  /**< configuration of the active cube */
-  uchar     _subconfig  ;  /**< subconfiguration of the active cube */
-
-private:
-   MarchingCubes ( const MarchingCubes & );                //no copy allowed 
-   const MarchingCubes& operator=( const MarchingCubes& ); //no copy allowed
-};
-//_____________________________________________________________________________
-
-
-// step size of the arrays of vertices and triangles
-static const int ALLOC_SIZE = 65536;
-
-//_____________________________________________________________________________
-// print cube for debug
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::print_cube(std::ostream& os)
-{ 
-   os<<_cube[0]<<","<<_cube[1]<<","<<_cube[2]<<","<<_cube[3]<<","
-     <<_cube[4]<<","<<_cube[5]<<","<<_cube[6]<<","<<_cube[7]; 
-}
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-// Constructors
-
-template<typename DataWrapper >
-MarchingCubes< DataWrapper >::MarchingCubes( const int size_x /*= -1*/, const int size_y /*= -1*/, const int size_z /*= -1*/ ) :
-_originalMC(false),
-//_ext_data  (false),
-// _size_x    (size_x),
-// _size_y    (size_y),
-// _size_z    (size_z),
-//_data      ((real *)NULL),
-_x_verts   (( int *)NULL),
-_y_verts   (( int *)NULL),
-_z_verts   (( int *)NULL),
-_nverts    (0),
-_ntrigs    (0),
-_Nverts    (0),
-_Ntrigs    (0),
-_vertices  (( Vertex *)NULL),
-_triangles ((Triangle*)NULL)
-{
-   this->dataWrapper = DataWrapper(size_x,size_y,size_z);
-}
-
-template<typename DataWrapper >
-MarchingCubes< DataWrapper >::MarchingCubes ( const DataWrapper& dataWrapper ) :
-_originalMC(false),
-//_ext_data  (false),
-// _size_x    (size_x),
-// _size_y    (size_y),
-// _size_z    (size_z),
-//_data      ((real *)NULL),
-_x_verts   (( int *)NULL),
-_y_verts   (( int *)NULL),
-_z_verts   (( int *)NULL),
-_nverts    (0),
-_ntrigs    (0),
-_Nverts    (0),
-_Ntrigs    (0),
-_vertices  (( Vertex *)NULL),
-_triangles ((Triangle*)NULL)
-{
-   this->dataWrapper = dataWrapper;
-}
-
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-// Destructor
-template<typename DataWrapper >
-MarchingCubes<DataWrapper >::~MarchingCubes()
-//-----------------------------------------------------------------------------
-{
-   clean_all() ;
-}
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-// main algorithm
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::run( real iso )
-//-----------------------------------------------------------------------------
-{
-   //printf("Marching Cubes begin: cpu %ld\n", clock() ) ;
-
-   compute_intersection_points( iso ) ;
-
-   for( _k = dataWrapper.getMinX3(); _k < dataWrapper.getMaxX3(); _k++ )
-      for( _j = dataWrapper.getMinX2(); _j < dataWrapper.getMaxX2(); _j++ )
-         for( _i = dataWrapper.getMinX1(); _i < dataWrapper.getMaxX1(); _i++ )
-         {
-            _lut_entry = 0 ;
-            for( int p = 0 ; p < 8 ; ++p )
-            {
-               _cube[p] = get_data( _i+((p^(p>>1))&1), _j+((p>>1)&1), _k+((p>>2)&1) ) - iso ;
-               if( std::fabs( _cube[p] ) < FLT_EPSILON ) _cube[p] = FLT_EPSILON ;
-               if( _cube[p] > 0 ) _lut_entry += 1 << p ;
-            }
-            /*
-            if( ( _cube[0] = get_data( _i , _j , _k ) ) > 0 ) _lut_entry +=   1 ;
-            if( ( _cube[1] = get_data(_i+1, _j , _k ) ) > 0 ) _lut_entry +=   2 ;
-            if( ( _cube[2] = get_data(_i+1,_j+1, _k ) ) > 0 ) _lut_entry +=   4 ;
-            if( ( _cube[3] = get_data( _i ,_j+1, _k ) ) > 0 ) _lut_entry +=   8 ;
-            if( ( _cube[4] = get_data( _i , _j ,_k+1) ) > 0 ) _lut_entry +=  16 ;
-            if( ( _cube[5] = get_data(_i+1, _j ,_k+1) ) > 0 ) _lut_entry +=  32 ;
-            if( ( _cube[6] = get_data(_i+1,_j+1,_k+1) ) > 0 ) _lut_entry +=  64 ;
-            if( ( _cube[7] = get_data( _i ,_j+1,_k+1) ) > 0 ) _lut_entry += 128 ;
-            */
-            process_cube( ) ;
-         }
-
-    //     printf("Marching Cubes end: cpu %ld\n", clock() ) ;
-}
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-// init temporary structures (must set sizes before call)
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::init_temps()
-//-----------------------------------------------------------------------------
-{
-//    if( !_ext_data )
-//       _data    = new real [_size_x * _size_y * _size_z] ;
-   _x_verts = new int  [dataWrapper.getNX1() * dataWrapper.getNX2() * dataWrapper.getNX3()] ;
-   _y_verts = new int  [dataWrapper.getNX1() * dataWrapper.getNX2() * dataWrapper.getNX3()] ;
-   _z_verts = new int  [dataWrapper.getNX1() * dataWrapper.getNX2() * dataWrapper.getNX3()] ;
-
-   memset( _x_verts, -1, dataWrapper.getNX1() * dataWrapper.getNX2() * dataWrapper.getNX3() * sizeof( int ) ) ;
-   memset( _y_verts, -1, dataWrapper.getNX1() * dataWrapper.getNX2() * dataWrapper.getNX3() * sizeof( int ) ) ;
-   memset( _z_verts, -1, dataWrapper.getNX1() * dataWrapper.getNX2() * dataWrapper.getNX3() * sizeof( int ) ) ;
-}
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-// init all structures (must set sizes before call)
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::init_all ()
-//-----------------------------------------------------------------------------
-{
-   init_temps() ;
-
-   _nverts = _ntrigs = 0 ;
-   _Nverts = _Ntrigs = ALLOC_SIZE ;
-   _vertices  = new Vertex  [_Nverts] ;
-   _triangles = new Triangle[_Ntrigs] ;
-}
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-// clean temporary structures
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::clean_temps()
-//-----------------------------------------------------------------------------
-{
-//    if( !_ext_data )
-//       delete [] _data;
-   delete [] _x_verts;
-   delete [] _y_verts;
-   delete [] _z_verts;
-
-//    if( !_ext_data )
-//       _data     = (real*)NULL ;
-   _x_verts  = (int*)NULL ;
-   _y_verts  = (int*)NULL ;
-   _z_verts  = (int*)NULL ;
-}
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-// clean all structures
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::clean_all()
-//-----------------------------------------------------------------------------
-{
-   clean_temps() ;
-   delete [] _vertices  ;
-   delete [] _triangles ;
-   _vertices  = (Vertex   *)NULL ;
-   _triangles = (Triangle *)NULL ;
-   _nverts = _ntrigs = 0 ;
-   _Nverts = _Ntrigs = 0 ;
-
-   //_size_x = _size_y = _size_z = -1 ;
-}
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-//_____________________________________________________________________________
-
-
-//_____________________________________________________________________________
-// Compute the intersection points
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::compute_intersection_points( real iso )
-//-----------------------------------------------------------------------------
-{
-   for( _k = 0 ; _k < dataWrapper.getNX3() ; _k++ )
-      for( _j = 0 ; _j < dataWrapper.getNX2() ; _j++ )
-         for( _i = 0 ; _i < dataWrapper.getNX1() ; _i++ )
-         {
-            _cube[0] = get_data( _i, _j, _k ) - iso ;
-            if( _i < dataWrapper.getNX1() - 1 ) _cube[1] = get_data(_i+1, _j , _k ) - iso ;
-            else                                _cube[1] = _cube[0] ;
-
-            if( _j < dataWrapper.getNX2() - 1 ) _cube[3] = get_data( _i ,_j+1, _k ) - iso ;
-            else                                _cube[3] = _cube[0] ;
-
-            if( _k < dataWrapper.getNX3() - 1 ) _cube[4] = get_data( _i , _j ,_k+1) - iso ;
-            else                                _cube[4] = _cube[0] ;
-
-            if( std::fabs( _cube[0] ) < FLT_EPSILON ) _cube[0] = FLT_EPSILON ;
-            if( std::fabs( _cube[1] ) < FLT_EPSILON ) _cube[1] = FLT_EPSILON ;
-            if( std::fabs( _cube[3] ) < FLT_EPSILON ) _cube[3] = FLT_EPSILON ;
-            if( std::fabs( _cube[4] ) < FLT_EPSILON ) _cube[4] = FLT_EPSILON ;
-
-            if( _cube[0] < 0 )
-            {
-               if( _cube[1] > 0 ) set_x_vert( add_x_vertex( ), _i,_j,_k ) ;
-               if( _cube[3] > 0 ) set_y_vert( add_y_vertex( ), _i,_j,_k ) ;
-               if( _cube[4] > 0 ) set_z_vert( add_z_vertex( ), _i,_j,_k ) ;
-            }
-            else
-            {
-               if( _cube[1] < 0 ) set_x_vert( add_x_vertex( ), _i,_j,_k ) ;
-               if( _cube[3] < 0 ) set_y_vert( add_y_vertex( ), _i,_j,_k ) ;
-               if( _cube[4] < 0 ) set_z_vert( add_z_vertex( ), _i,_j,_k ) ;
-            }
-         }
-}
-//_____________________________________________________________________________
-
-
-
-
-
-//_____________________________________________________________________________
-// Test a face
-// if face>0 return true if the face contains a part of the surface
-template<typename DataWrapper >
-bool MarchingCubes<DataWrapper >::test_face( schar face )
-//-----------------------------------------------------------------------------
-{
-   real A,B,C,D ;
-
-   switch( face )
-   {
-   case -1 : case 1 :  A = _cube[0] ;  B = _cube[4] ;  C = _cube[5] ;  D = _cube[1] ;  break ;
-   case -2 : case 2 :  A = _cube[1] ;  B = _cube[5] ;  C = _cube[6] ;  D = _cube[2] ;  break ;
-   case -3 : case 3 :  A = _cube[2] ;  B = _cube[6] ;  C = _cube[7] ;  D = _cube[3] ;  break ;
-   case -4 : case 4 :  A = _cube[3] ;  B = _cube[7] ;  C = _cube[4] ;  D = _cube[0] ;  break ;
-   case -5 : case 5 :  A = _cube[0] ;  B = _cube[3] ;  C = _cube[2] ;  D = _cube[1] ;  break ;
-   case -6 : case 6 :  A = _cube[4] ;  B = _cube[7] ;  C = _cube[6] ;  D = _cube[5] ;  break ;
-   default : 
-      std::cerr<<" MarchingCubes<DataWrapper >::test_face ["<<__LINE__<<"]:: Invalid face code "<< face <<std::endl;
-      print_cube(std::cerr);  
-      A = B = C = D = 0 ;
-   };
-
-   if( std::fabs( A*C - B*D ) < FLT_EPSILON )
-      return face >= 0 ;
-   return face * A * ( A*C - B*D ) >= 0  ;  // face and A invert signs
-}
-//_____________________________________________________________________________
-
-
-
-
-
-//_____________________________________________________________________________
-// Test the interior of a cube
-// if s == 7, return true  if the interior is empty
-// if s ==-7, return false if the interior is empty
-template<typename DataWrapper >
-bool MarchingCubes<DataWrapper >::test_interior( schar s )
-//-----------------------------------------------------------------------------
-{
-   real t, At=0, Bt=0, Ct=0, Dt=0, a, b ;
-   char  test =  0 ;
-   char  edge = -1 ; // reference edge of the triangulation
-
-   switch( _case )
-   {
-   case  4 :
-   case 10 :
-      a = ( _cube[4] - _cube[0] ) * ( _cube[6] - _cube[2] ) - ( _cube[7] - _cube[3] ) * ( _cube[5] - _cube[1] ) ;
-      b =  _cube[2] * ( _cube[4] - _cube[0] ) + _cube[0] * ( _cube[6] - _cube[2] )
-         - _cube[1] * ( _cube[7] - _cube[3] ) - _cube[3] * ( _cube[5] - _cube[1] ) ;
-      t = - b / (2*a) ;
-      if( t<0 || t>1 ) return s>0 ;
-
-      At = _cube[0] + ( _cube[4] - _cube[0] ) * t ;
-      Bt = _cube[3] + ( _cube[7] - _cube[3] ) * t ;
-      Ct = _cube[2] + ( _cube[6] - _cube[2] ) * t ;
-      Dt = _cube[1] + ( _cube[5] - _cube[1] ) * t ;
-      break ;
-
-   case  6 :
-   case  7 :
-   case 12 :
-   case 13 :
-      switch( _case )
-      {
-      case  6 : edge = test6 [_config][2] ; break ;
-      case  7 : edge = test7 [_config][4] ; break ;
-      case 12 : edge = test12[_config][3] ; break ;
-      case 13 : edge = tiling13_5_1[_config][_subconfig][0] ; break ;
-      }
-      switch( edge )
-      {
-      case  0 :
-         t  = _cube[0] / ( _cube[0] - _cube[1] ) ;
-         At = 0 ;
-         Bt = _cube[3] + ( _cube[2] - _cube[3] ) * t ;
-         Ct = _cube[7] + ( _cube[6] - _cube[7] ) * t ;
-         Dt = _cube[4] + ( _cube[5] - _cube[4] ) * t ;
-         break ;
-      case  1 :
-         t  = _cube[1] / ( _cube[1] - _cube[2] ) ;
-         At = 0 ;
-         Bt = _cube[0] + ( _cube[3] - _cube[0] ) * t ;
-         Ct = _cube[4] + ( _cube[7] - _cube[4] ) * t ;
-         Dt = _cube[5] + ( _cube[6] - _cube[5] ) * t ;
-         break ;
-      case  2 :
-         t  = _cube[2] / ( _cube[2] - _cube[3] ) ;
-         At = 0 ;
-         Bt = _cube[1] + ( _cube[0] - _cube[1] ) * t ;
-         Ct = _cube[5] + ( _cube[4] - _cube[5] ) * t ;
-         Dt = _cube[6] + ( _cube[7] - _cube[6] ) * t ;
-         break ;
-      case  3 :
-         t  = _cube[3] / ( _cube[3] - _cube[0] ) ;
-         At = 0 ;
-         Bt = _cube[2] + ( _cube[1] - _cube[2] ) * t ;
-         Ct = _cube[6] + ( _cube[5] - _cube[6] ) * t ;
-         Dt = _cube[7] + ( _cube[4] - _cube[7] ) * t ;
-         break ;
-      case  4 :
-         t  = _cube[4] / ( _cube[4] - _cube[5] ) ;
-         At = 0 ;
-         Bt = _cube[7] + ( _cube[6] - _cube[7] ) * t ;
-         Ct = _cube[3] + ( _cube[2] - _cube[3] ) * t ;
-         Dt = _cube[0] + ( _cube[1] - _cube[0] ) * t ;
-         break ;
-      case  5 :
-         t  = _cube[5] / ( _cube[5] - _cube[6] ) ;
-         At = 0 ;
-         Bt = _cube[4] + ( _cube[7] - _cube[4] ) * t ;
-         Ct = _cube[0] + ( _cube[3] - _cube[0] ) * t ;
-         Dt = _cube[1] + ( _cube[2] - _cube[1] ) * t ;
-         break ;
-      case  6 :
-         t  = _cube[6] / ( _cube[6] - _cube[7] ) ;
-         At = 0 ;
-         Bt = _cube[5] + ( _cube[4] - _cube[5] ) * t ;
-         Ct = _cube[1] + ( _cube[0] - _cube[1] ) * t ;
-         Dt = _cube[2] + ( _cube[3] - _cube[2] ) * t ;
-         break ;
-      case  7 :
-         t  = _cube[7] / ( _cube[7] - _cube[4] ) ;
-         At = 0 ;
-         Bt = _cube[6] + ( _cube[5] - _cube[6] ) * t ;
-         Ct = _cube[2] + ( _cube[1] - _cube[2] ) * t ;
-         Dt = _cube[3] + ( _cube[0] - _cube[3] ) * t ;
-         break ;
-      case  8 :
-         t  = _cube[0] / ( _cube[0] - _cube[4] ) ;
-         At = 0 ;
-         Bt = _cube[3] + ( _cube[7] - _cube[3] ) * t ;
-         Ct = _cube[2] + ( _cube[6] - _cube[2] ) * t ;
-         Dt = _cube[1] + ( _cube[5] - _cube[1] ) * t ;
-         break ;
-      case  9 :
-         t  = _cube[1] / ( _cube[1] - _cube[5] ) ;
-         At = 0 ;
-         Bt = _cube[0] + ( _cube[4] - _cube[0] ) * t ;
-         Ct = _cube[3] + ( _cube[7] - _cube[3] ) * t ;
-         Dt = _cube[2] + ( _cube[6] - _cube[2] ) * t ;
-         break ;
-      case 10 :
-         t  = _cube[2] / ( _cube[2] - _cube[6] ) ;
-         At = 0 ;
-         Bt = _cube[1] + ( _cube[5] - _cube[1] ) * t ;
-         Ct = _cube[0] + ( _cube[4] - _cube[0] ) * t ;
-         Dt = _cube[3] + ( _cube[7] - _cube[3] ) * t ;
-         break ;
-      case 11 :
-         t  = _cube[3] / ( _cube[3] - _cube[7] ) ;
-         At = 0 ;
-         Bt = _cube[2] + ( _cube[6] - _cube[2] ) * t ;
-         Ct = _cube[1] + ( _cube[5] - _cube[1] ) * t ;
-         Dt = _cube[0] + ( _cube[4] - _cube[0] ) * t ;
-         break ;
-      default : 
-         std::cerr<<" MarchingCubes<DataWrapper >::test_interior ["<<__LINE__<<"]: Invalid edge "<< edge <<std::endl;
-         print_cube(std::cerr);  
-         break;
-      }
-      break ;
-
-   default : 
-      std::cerr<<" MarchingCubes<DataWrapper >::test_interior ["<<__LINE__<<"]: Invalid ambiguous case "<< _case <<std::endl;
-      print_cube(std::cerr);  
-      break;
-   }
-
-   if( At >= 0 ) test ++ ;
-   if( Bt >= 0 ) test += 2 ;
-   if( Ct >= 0 ) test += 4 ;
-   if( Dt >= 0 ) test += 8 ;
-   switch( test )
-   {
-   case  0 : return s>0 ;
-   case  1 : return s>0 ;
-   case  2 : return s>0 ;
-   case  3 : return s>0 ;
-   case  4 : return s>0 ;
-   case  5 : if( At * Ct - Bt * Dt <  FLT_EPSILON ) return s>0 ; break ;
-   case  6 : return s>0 ;
-   case  7 : return s<0 ;
-   case  8 : return s>0 ;
-   case  9 : return s>0 ;
-   case 10 : if( At * Ct - Bt * Dt >= FLT_EPSILON ) return s>0 ; break ;
-   case 11 : return s<0 ;
-   case 12 : return s>0 ;
-   case 13 : return s<0 ;
-   case 14 : return s<0 ;
-   case 15 : return s<0 ;
-   }
-
-   return s<0 ;
-}
-//_____________________________________________________________________________
-
-
-
-
-//_____________________________________________________________________________
-// Process a unit cube
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::process_cube( )
-//-----------------------------------------------------------------------------
-{
-   if( _originalMC )
-   {
-      char nt = 0 ;
-      while( casesClassic[_lut_entry][3*nt] != -1 ) nt++ ;
-      add_triangle( casesClassic[_lut_entry], nt ) ;
-      return ;
-   }
-
-   int   v12 = -1 ;
-   _case   = cases[_lut_entry][0] ;
-   _config = cases[_lut_entry][1] ;
-   _subconfig = 0 ;
-
-   switch( _case )
-   {
-   case  0 :
-      break ;
-
-   case  1 :
-      add_triangle( tiling1[_config], 1 ) ;
-      break ;
-
-   case  2 :
-      add_triangle( tiling2[_config], 2 ) ;
-      break ;
-
-   case  3 :
-      if( test_face( test3[_config]) )
-         add_triangle( tiling3_2[_config], 4 ) ; // 3.2
-      else
-         add_triangle( tiling3_1[_config], 2 ) ; // 3.1
-      break ;
-
-   case  4 :
-      if( test_interior( test4[_config]) )
-         add_triangle( tiling4_1[_config], 2 ) ; // 4.1.1
-      else
-         add_triangle( tiling4_2[_config], 6 ) ; // 4.1.2
-      break ;
-
-   case  5 :
-      add_triangle( tiling5[_config], 3 ) ;
-      break ;
-
-   case  6 :
-      if( test_face( test6[_config][0]) )
-         add_triangle( tiling6_2[_config], 5 ) ; // 6.2
-      else
-      {
-         if( test_interior( test6[_config][1]) )
-            add_triangle( tiling6_1_1[_config], 3 ) ; // 6.1.1
-         else
-            add_triangle( tiling6_1_2[_config], 7 ) ; // 6.1.2
-      }
-      break ;
-
-   case  7 :
-      if( test_face( test7[_config][0] ) ) _subconfig +=  1 ;
-      if( test_face( test7[_config][1] ) ) _subconfig +=  2 ;
-      if( test_face( test7[_config][2] ) ) _subconfig +=  4 ;
-      switch( _subconfig )
-      {
-      case 0 :
-         add_triangle( tiling7_1[_config], 3 ) ; break ;
-      case 1 :
-         add_triangle( tiling7_2[_config][0], 5 ) ; break ;
-      case 2 :
-         add_triangle( tiling7_2[_config][1], 5 ) ; break ;
-      case 3 :
-         v12 = add_c_vertex() ;
-         add_triangle( tiling7_3[_config][0], 9, v12 ) ; break ;
-      case 4 :
-         add_triangle( tiling7_2[_config][2], 5 ) ; break ;
-      case 5 :
-         v12 = add_c_vertex() ;
-         add_triangle( tiling7_3[_config][1], 9, v12 ) ; break ;
-      case 6 :
-         v12 = add_c_vertex() ;
-         add_triangle( tiling7_3[_config][2], 9, v12 ) ; break ;
-      case 7 :
-         if( test_interior( test7[_config][3]) )
-            add_triangle( tiling7_4_2[_config], 9 ) ;
-         else
-            add_triangle( tiling7_4_1[_config], 5 ) ;
-         break ;
-      };
-      break ;
-
-   case  8 :
-      add_triangle( tiling8[_config], 2 ) ;
-      break ;
-
-   case  9 :
-      add_triangle( tiling9[_config], 4 ) ;
-      break ;
-
-   case 10 :
-      if( test_face( test10[_config][0]) )
-      {
-         if( test_face( test10[_config][1]) )
-            add_triangle( tiling10_1_1_[_config], 4 ) ; // 10.1.1
-         else
-         {
-            v12 = add_c_vertex() ;
-            add_triangle( tiling10_2[_config], 8, v12 ) ; // 10.2
-         }
-      }
-      else
-      {
-         if( test_face( test10[_config][1]) )
-         {
-            v12 = add_c_vertex() ;
-            add_triangle( tiling10_2_[_config], 8, v12 ) ; // 10.2
-         }
-         else
-         {
-            if( test_interior( test10[_config][2]) )
-               add_triangle( tiling10_1_1[_config], 4 ) ; // 10.1.1
-            else
-               add_triangle( tiling10_1_2[_config], 8 ) ; // 10.1.2
-         }
-      }
-      break ;
-
-   case 11 :
-      add_triangle( tiling11[_config], 4 ) ;
-      break ;
-
-   case 12 :
-      if( test_face( test12[_config][0]) )
-      {
-         if( test_face( test12[_config][1]) )
-            add_triangle( tiling12_1_1_[_config], 4 ) ; // 12.1.1
-         else
-         {
-            v12 = add_c_vertex() ;
-            add_triangle( tiling12_2[_config], 8, v12 ) ; // 12.2
-         }
-      }
-      else
-      {
-         if( test_face( test12[_config][1]) )
-         {
-            v12 = add_c_vertex() ;
-            add_triangle( tiling12_2_[_config], 8, v12 ) ; // 12.2
-         }
-         else
-         {
-            if( test_interior( test12[_config][2]) )
-               add_triangle( tiling12_1_1[_config], 4 ) ; // 12.1.1
-            else
-               add_triangle( tiling12_1_2[_config], 8 ) ; // 12.1.2
-         }
-      }
-      break ;
-
-   case 13 :
-      if( test_face( test13[_config][0] ) ) _subconfig +=  1 ;
-      if( test_face( test13[_config][1] ) ) _subconfig +=  2 ;
-      if( test_face( test13[_config][2] ) ) _subconfig +=  4 ;
-      if( test_face( test13[_config][3] ) ) _subconfig +=  8 ;
-      if( test_face( test13[_config][4] ) ) _subconfig += 16 ;
-      if( test_face( test13[_config][5] ) ) _subconfig += 32 ;
-      switch( subconfig13[_subconfig] )
-      {
-      case 0 :/* 13.1 */
-         add_triangle( tiling13_1[_config], 4 ) ; break ;
-
-      case 1 :/* 13.2 */
-         add_triangle( tiling13_2[_config][0], 6 ) ; break ;
-      case 2 :/* 13.2 */
-         add_triangle( tiling13_2[_config][1], 6 ) ; break ;
-      case 3 :/* 13.2 */
-         add_triangle( tiling13_2[_config][2], 6 ) ; break ;
-      case 4 :/* 13.2 */
-         add_triangle( tiling13_2[_config][3], 6 ) ; break ;
-      case 5 :/* 13.2 */
-         add_triangle( tiling13_2[_config][4], 6 ) ; break ;
-      case 6 :/* 13.2 */
-         add_triangle( tiling13_2[_config][5], 6 ) ; break ;
-
-      case 7 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][0], 10, v12 ) ; break ;
-      case 8 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][1], 10, v12 ) ; break ;
-      case 9 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][2], 10, v12 ) ; break ;
-      case 10 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][3], 10, v12 ) ; break ;
-      case 11 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][4], 10, v12 ) ; break ;
-      case 12 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][5], 10, v12 ) ; break ;
-      case 13 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][6], 10, v12 ) ; break ;
-      case 14 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][7], 10, v12 ) ; break ;
-      case 15 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][8], 10, v12 ) ; break ;
-      case 16 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][9], 10, v12 ) ; break ;
-      case 17 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][10], 10, v12 ) ; break ;
-      case 18 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3[_config][11], 10, v12 ) ; break ;
-
-      case 19 :/* 13.4 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_4[_config][0], 12, v12 ) ; break ;
-      case 20 :/* 13.4 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_4[_config][1], 12, v12 ) ; break ;
-      case 21 :/* 13.4 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_4[_config][2], 12, v12 ) ; break ;
-      case 22 :/* 13.4 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_4[_config][3], 12, v12 ) ; break ;
-
-      case 23 :/* 13.5 */
-         _subconfig = 0 ;
-         if( test_interior( test13[_config][6] ) )
-            add_triangle( tiling13_5_1[_config][0], 6 ) ;
-         else
-            add_triangle( tiling13_5_2[_config][0], 10 ) ;
-         break ;
-      case 24 :/* 13.5 */
-         _subconfig = 1 ;
-         if( test_interior( test13[_config][6] ) )
-            add_triangle( tiling13_5_1[_config][1], 6 ) ;
-         else
-            add_triangle( tiling13_5_2[_config][1], 10 ) ;
-         break ;
-      case 25 :/* 13.5 */
-         _subconfig = 2 ;
-         if( test_interior( test13[_config][6] ) )
-            add_triangle( tiling13_5_1[_config][2], 6 ) ;
-         else
-            add_triangle( tiling13_5_2[_config][2], 10 ) ;
-         break ;
-      case 26 :/* 13.5 */
-         _subconfig = 3 ;
-         if( test_interior( test13[_config][6] ) )
-            add_triangle( tiling13_5_1[_config][3], 6 ) ;
-         else
-            add_triangle( tiling13_5_2[_config][3], 10 ) ;
-         break ;
-
-      case 27 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][0], 10, v12 ) ; break ;
-      case 28 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][1], 10, v12 ) ; break ;
-      case 29 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][2], 10, v12 ) ; break ;
-      case 30 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][3], 10, v12 ) ; break ;
-      case 31 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][4], 10, v12 ) ; break ;
-      case 32 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][5], 10, v12 ) ; break ;
-      case 33 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][6], 10, v12 ) ; break ;
-      case 34 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][7], 10, v12 ) ; break ;
-      case 35 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][8], 10, v12 ) ; break ;
-      case 36 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][9], 10, v12 ) ; break ;
-      case 37 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][10], 10, v12 ) ; break ;
-      case 38 :/* 13.3 */
-         v12 = add_c_vertex() ;
-         add_triangle( tiling13_3_[_config][11], 10, v12 ) ; break ;
-
-      case 39 :/* 13.2 */
-         add_triangle( tiling13_2_[_config][0], 6 ) ; break ;
-      case 40 :/* 13.2 */
-         add_triangle( tiling13_2_[_config][1], 6 ) ; break ;
-      case 41 :/* 13.2 */
-         add_triangle( tiling13_2_[_config][2], 6 ) ; break ;
-      case 42 :/* 13.2 */
-         add_triangle( tiling13_2_[_config][3], 6 ) ; break ;
-      case 43 :/* 13.2 */
-         add_triangle( tiling13_2_[_config][4], 6 ) ; break ;
-      case 44 :/* 13.2 */
-         add_triangle( tiling13_2_[_config][5], 6 ) ; break ;
-
-      case 45 :/* 13.1 */
-         add_triangle( tiling13_1_[_config], 4 ) ; break ;
-
-      default :
-         std::cerr<<" MarchingCubes<DataWrapper >::process_cube ["<<__LINE__<<"]: Impossible case 13?"<<std::endl;
-         print_cube(std::cerr);  
-      }
-      break ;
-
-   case 14 :
-      add_triangle( tiling14[_config], 4 ) ;
-      break ;
-   };
-}
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-// Adding triangles
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::add_triangle( const char* trig, char n, int v12 )
-//-----------------------------------------------------------------------------
-{
-   int    tv[3] ;
-
-   for( int t = 0 ; t < 3*n ; t++ )
-   {
-      switch( trig[t] )
-      {
-      case  0 : tv[ t % 3 ] = get_x_vert( _i , _j , _k ) ; break ;
-      case  1 : tv[ t % 3 ] = get_y_vert(_i+1, _j , _k ) ; break ;
-      case  2 : tv[ t % 3 ] = get_x_vert( _i ,_j+1, _k ) ; break ;
-      case  3 : tv[ t % 3 ] = get_y_vert( _i , _j , _k ) ; break ;
-      case  4 : tv[ t % 3 ] = get_x_vert( _i , _j ,_k+1) ; break ;
-      case  5 : tv[ t % 3 ] = get_y_vert(_i+1, _j ,_k+1) ; break ;
-      case  6 : tv[ t % 3 ] = get_x_vert( _i ,_j+1,_k+1) ; break ;
-      case  7 : tv[ t % 3 ] = get_y_vert( _i , _j ,_k+1) ; break ;
-      case  8 : tv[ t % 3 ] = get_z_vert( _i , _j , _k ) ; break ;
-      case  9 : tv[ t % 3 ] = get_z_vert(_i+1, _j , _k ) ; break ;
-      case 10 : tv[ t % 3 ] = get_z_vert(_i+1,_j+1, _k ) ; break ;
-      case 11 : tv[ t % 3 ] = get_z_vert( _i ,_j+1, _k ) ; break ;
-      case 12 : tv[ t % 3 ] = v12 ; break ;
-      default : break ;
-      }
-
-      if( tv[t%3] == -1 )
-      {
-         std::cerr<<"Marching Cubes::add_triangle  ["<<__LINE__<<"]: invalid triangle "<<_ntrigs+1<<std::endl;
-         print_cube(std::cerr) ;
-      }
-
-      if( t%3 == 2 )
-      {
-         if( _ntrigs >= _Ntrigs )
-         {
-            Triangle *temp = _triangles ;
-            _triangles = new Triangle[ 2*_Ntrigs ] ;
-            memcpy( _triangles, temp, _Ntrigs*sizeof(Triangle) ) ;
-            delete[] temp ;
-            //std::cout<<_Ntrigs <<" allocated triangles"<<std::endl;
-            _Ntrigs *= 2 ;
-         }
-
-         Triangle *T = _triangles + _ntrigs++ ;
-         T->v1    = tv[0] ;
-         T->v2    = tv[1] ;
-         T->v3    = tv[2] ;
-      }
-   }
-}
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-// Calculating gradient
-
-template<typename DataWrapper >
-real MarchingCubes<DataWrapper >::get_x_grad( const int i, const int j, const int k ) const
-//-----------------------------------------------------------------------------
-{
-   if( i > 0 )
-   {
-      if ( i < dataWrapper.getNX1() - 1 )
-         return ( get_data( i+1, j, k ) - get_data( i-1, j, k ) ) / 2 ;
-      else
-         return get_data( i, j, k ) - get_data( i-1, j, k ) ;
-   }
-   else
-      return get_data( i+1, j, k ) - get_data( i, j, k ) ;
-}
-//-----------------------------------------------------------------------------
-
-template<typename DataWrapper >
-real MarchingCubes<DataWrapper >::get_y_grad( const int i, const int j, const int k ) const
-//-----------------------------------------------------------------------------
-{
-   if( j > 0 )
-   {
-      if ( j < dataWrapper.getNX2() - 1 )
-         return ( get_data( i, j+1, k ) - get_data( i, j-1, k ) ) / 2 ;
-      else
-         return get_data( i, j, k ) - get_data( i, j-1, k ) ;
-   }
-   else
-      return get_data( i, j+1, k ) - get_data( i, j, k ) ;
-}
-//-----------------------------------------------------------------------------
-
-template<typename DataWrapper >
-real MarchingCubes<DataWrapper >::get_z_grad( const int i, const int j, const int k ) const
-//-----------------------------------------------------------------------------
-{
-   if( k > 0 )
-   {
-      if ( k < dataWrapper.getNX3() - 1 )
-         return ( get_data( i, j, k+1 ) - get_data( i, j, k-1 ) ) / 2 ;
-      else
-         return get_data( i, j, k ) - get_data( i, j, k-1 ) ;
-   }
-   else
-      return get_data( i, j, k+1 ) - get_data( i, j, k ) ;
-}
-//_____________________________________________________________________________
-
-
-//_____________________________________________________________________________
-// Adding vertices
-
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::test_vertex_addition()
-{
-   if( _nverts >= _Nverts )
-   {
-      Vertex *temp = _vertices ;
-      _vertices = new Vertex[ _Nverts*2 ] ;
-      memcpy( _vertices, temp, _Nverts*sizeof(Vertex) ) ;
-      delete[] temp ;
-      //std::cout<<_Nverts<<" allocated vertices"<<std::endl;
-      _Nverts *= 2 ;
-   }
-}
-
-
-template<typename DataWrapper >
-int MarchingCubes<DataWrapper >::add_x_vertex( )
-//-----------------------------------------------------------------------------
-{
-   test_vertex_addition() ;
-   Vertex *vert = _vertices + _nverts++ ;
-
-   real u = ( _cube[0] ) / ( _cube[0] - _cube[1] ) ;
-
-   vert->x      = (real)_i+u;
-   vert->y      = (real) _j ;
-   vert->z      = (real) _k ;
-
-   vert->nx = (1-u)*get_x_grad(_i,_j,_k) + u*get_x_grad(_i+1,_j,_k) ;
-   vert->ny = (1-u)*get_y_grad(_i,_j,_k) + u*get_y_grad(_i+1,_j,_k) ;
-   vert->nz = (1-u)*get_z_grad(_i,_j,_k) + u*get_z_grad(_i+1,_j,_k) ;
-
-   u = (real) sqrt( vert->nx * vert->nx + vert->ny * vert->ny +vert->nz * vert->nz ) ;
-   if( u > 0 )
-   {
-      vert->nx /= u ;
-      vert->ny /= u ;
-      vert->nz /= u ;
-   }
-
-
-   return _nverts-1 ;
-}
-//-----------------------------------------------------------------------------
-
-template<typename DataWrapper >
-int MarchingCubes<DataWrapper >::add_y_vertex( )
-//-----------------------------------------------------------------------------
-{
-   test_vertex_addition() ;
-   Vertex *vert = _vertices + _nverts++ ;
-
-   real u = ( _cube[0] ) / ( _cube[0] - _cube[3] ) ;
-
-   vert->x      = (real) _i ;
-   vert->y      = (real)_j+u;
-   vert->z      = (real) _k ;
-
-   vert->nx = (1-u)*get_x_grad(_i,_j,_k) + u*get_x_grad(_i,_j+1,_k) ;
-   vert->ny = (1-u)*get_y_grad(_i,_j,_k) + u*get_y_grad(_i,_j+1,_k) ;
-   vert->nz = (1-u)*get_z_grad(_i,_j,_k) + u*get_z_grad(_i,_j+1,_k) ;
-
-   u = (real) sqrt( vert->nx * vert->nx + vert->ny * vert->ny +vert->nz * vert->nz ) ;
-   if( u > 0 )
-   {
-      vert->nx /= u ;
-      vert->ny /= u ;
-      vert->nz /= u ;
-   }
-
-   return _nverts-1 ;
-}
-//-----------------------------------------------------------------------------
-
-template<typename DataWrapper >
-int MarchingCubes<DataWrapper >::add_z_vertex( )
-//-----------------------------------------------------------------------------
-{
-   test_vertex_addition() ;
-   Vertex *vert = _vertices + _nverts++ ;
-
-   real u = ( _cube[0] ) / ( _cube[0] - _cube[4] ) ;
-
-   vert->x      = (real) _i ;
-   vert->y      = (real) _j ;
-   vert->z      = (real)_k+u;
-
-   vert->nx = (1-u)*get_x_grad(_i,_j,_k) + u*get_x_grad(_i,_j,_k+1) ;
-   vert->ny = (1-u)*get_y_grad(_i,_j,_k) + u*get_y_grad(_i,_j,_k+1) ;
-   vert->nz = (1-u)*get_z_grad(_i,_j,_k) + u*get_z_grad(_i,_j,_k+1) ;
-
-   u = (real) sqrt( vert->nx * vert->nx + vert->ny * vert->ny +vert->nz * vert->nz ) ;
-   if( u > 0 )
-   {
-      vert->nx /= u ;
-      vert->ny /= u ;
-      vert->nz /= u ;
-   }
-
-   return _nverts-1 ;
-}
-
-
-template<typename DataWrapper >
-int MarchingCubes<DataWrapper >::add_c_vertex( )
-//-----------------------------------------------------------------------------
-{
-   test_vertex_addition() ;
-   Vertex *vert = _vertices + _nverts++ ;
-
-   real u = 0 ;
-   int   vid ;
-
-   vert->x = vert->y = vert->z =  vert->nx = vert->ny = vert->nz = 0 ;
-
-   // Computes the average of the intersection points of the cube
-   vid = get_x_vert( _i , _j , _k ) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_y_vert(_i+1, _j , _k ) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_x_vert( _i ,_j+1, _k ) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_y_vert( _i , _j , _k ) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_x_vert( _i , _j ,_k+1) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_y_vert(_i+1, _j ,_k+1) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_x_vert( _i ,_j+1,_k+1) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_y_vert( _i , _j ,_k+1) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_z_vert( _i , _j , _k ) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_z_vert(_i+1, _j , _k ) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_z_vert(_i+1,_j+1, _k ) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-   vid = get_z_vert( _i ,_j+1, _k ) ;
-   if( vid != -1 ) { ++u ; const Vertex &v = _vertices[vid] ; vert->x += v.x ;  vert->y += v.y ;  vert->z += v.z ;  vert->nx += v.nx ; vert->ny += v.ny ; vert->nz += v.nz ; }
-
-   vert->x  /= u ;
-   vert->y  /= u ;
-   vert->z  /= u ;
-
-   u = (real) sqrt( vert->nx * vert->nx + vert->ny * vert->ny +vert->nz * vert->nz ) ;
-   if( u > 0 )
-   {
-      vert->nx /= u ;
-      vert->ny /= u ;
-      vert->nz /= u ;
-   }
-
-   return _nverts-1 ;
-}
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-//_____________________________________________________________________________
-
-
-
-
-//_____________________________________________________________________________
-// Grid exportation
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::writeISO(const char *fn )
-//-----------------------------------------------------------------------------
-{
-   unsigned char buf[sizeof(float)] ;
-
-   FILE *fp = fopen( fn, "wb" ) ;
-
-   // header
-   * (int*) buf = dataWrapper.getNX1() ;
-   fwrite(buf, sizeof(float), 1, fp);
-   * (int*) buf = dataWrapper.getNX2() ;
-   fwrite(buf, sizeof(float), 1, fp);
-   * (int*) buf = dataWrapper.getNX3();
-   fwrite(buf, sizeof(float), 1, fp);
-
-   * (float*) buf = -1.0f ;
-   fwrite(buf, sizeof(float), 1, fp);
-   * (float*) buf =  1.0f ;
-   fwrite(buf, sizeof(float), 1, fp);
-   * (float*) buf = -1.0f ;
-   fwrite(buf, sizeof(float), 1, fp);
-   * (float*) buf =  1.0f ;
-   fwrite(buf, sizeof(float), 1, fp);
-   * (float*) buf = -1.0f ;
-   fwrite(buf, sizeof(float), 1, fp);
-   * (float*) buf =  1.0f ;
-   fwrite(buf, sizeof(float), 1, fp);
-
-   for( int i = 0 ; i < dataWrapper.getNX1() ; i++ )
-   {
-      for( int j = 0 ; j < dataWrapper.getNX2() ; j++ )
-      {
-         for( int k = 0 ; k < dataWrapper.getNX3() ; k++ )
-         {
-            * (float*) buf = (float)get_data( i,j,k ) ;
-            fwrite(buf, sizeof(float), 1, fp);
-         }
-      }
-   }
-
-   fclose(fp) ;
-}
-//_____________________________________________________________________________
-
-
-
-
-
-//_____________________________________________________________________________
-// PLY exportation
-
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::writePLY(const char *fn, bool bin )
-//-----------------------------------------------------------------------------
-{
-
-   typedef struct PlyFace {
-      unsigned char nverts;    /* number of Vertex indices in list */
-      int *verts;              /* Vertex index list */
-   } PlyFace;
-
-
-   PlyProperty vert_props[]  = { /* list of property information for a PlyVertex */
-      {"x", Float32, Float32, offsetof( Vertex,x ), 0, 0, 0, 0},
-      {"y", Float32, Float32, offsetof( Vertex,y ), 0, 0, 0, 0},
-      {"z", Float32, Float32, offsetof( Vertex,z ), 0, 0, 0, 0},
-      {"nx", Float32, Float32, offsetof( Vertex,nx ), 0, 0, 0, 0},
-      {"ny", Float32, Float32, offsetof( Vertex,ny ), 0, 0, 0, 0},
-      {"nz", Float32, Float32, offsetof( Vertex,nz ), 0, 0, 0, 0}
-   };
-
-   PlyProperty face_props[]  = { /* list of property information for a PlyFace */
-      {"vertex_indices", Int32, Int32, offsetof( PlyFace,verts ),
-      1, Uint8, Uint8, offsetof( PlyFace,nverts )},
-   };
-
-
-   PlyFile    *ply;
-   FILE       *fp = fopen( fn, "w" );
-
-   int          i ;
-   PlyFace     face ;
-   int         verts[3] ;
-   char       *elem_names[]  = { "vertex", "face" };
-   std::cout<<"McCubes.MarchingCubes<DataWrapper >.writePLY ("<<fn<<")...";
-   ply = write_ply ( fp, 2, elem_names, bin? PLY_BINARY_LE : PLY_ASCII );
-
-   /* describe what properties go into the PlyVertex elements */
-   describe_element_ply ( ply, "vertex", _nverts );
-   describe_property_ply ( ply, &vert_props[0] );
-   describe_property_ply ( ply, &vert_props[1] );
-   describe_property_ply ( ply, &vert_props[2] );
-   describe_property_ply ( ply, &vert_props[3] );
-   describe_property_ply ( ply, &vert_props[4] );
-   describe_property_ply ( ply, &vert_props[5] );
-
-   /* describe PlyFace properties (just list of PlyVertex indices) */
-   describe_element_ply ( ply, "face", _ntrigs );
-   describe_property_ply ( ply, &face_props[0] );
-
-   header_complete_ply ( ply );
-
-   /* set up and write the PlyVertex elements */
-   put_element_setup_ply ( ply, "vertex" );
-   for ( i = 0; i < _nverts; i++ )
-      put_element_ply ( ply, ( void * ) &(_vertices[i]) );
-   std::cout<<_nverts<<" vertices written\n";
-
-   /* set up and write the PlyFace elements */
-   put_element_setup_ply ( ply, "face" );
-   face.nverts = 3 ;
-   face.verts  = verts ;
-   for ( i = 0; i < _ntrigs; i++ )
-   {
-      face.verts[0] = _triangles[i].v1 ;
-      face.verts[1] = _triangles[i].v2 ;
-      face.verts[2] = _triangles[i].v3 ;
-      put_element_ply ( ply, ( void * ) &face );
-   }
-   std::cout<<_ntrigs<<" triangles written\n";
-   
-   close_ply ( ply );
-   free_ply ( ply );
-   fclose( fp ) ;
-}
-//_____________________________________________________________________________
-
-//_____________________________________________________________________________
-// Open Inventor / VRML 1.0 ascii exportation
-template<typename DataWrapper >
-void MarchingCubes<DataWrapper >::writeIV(const char *fn )
-//-----------------------------------------------------------------------------
-{
-   FILE *fp = fopen( fn, "w" ) ;
-   int   i ;
-
-   std::cout<<"Marching Cubes::exportIV("<<fn<<")...";
-
-   fprintf( fp, "#Inventor V2.1 ascii \n\nSeparator { \n    ShapeHints {\n        vertexOrdering  COUNTERCLOCKWISE\n        shapeType       UNKNOWN_SHAPE_TYPE\n        creaseAngle     0.0\n    }\n Coordinate3 { \n point [  \n" ) ;
-   for ( i = 0; i < _nverts; i++ )
-      fprintf( fp, " %f %f %f,\n", _vertices[i].x, _vertices[i].y, _vertices[i].z ) ;
-   std::cout<<_nverts<<" vertices written\n";
-
-   fprintf( fp, "\n ] \n} \nNormal { \nvector [ \n" ) ;
-   for ( i = 0; i < _nverts; i++ )
-      fprintf( fp, " %f %f %f,\n", _vertices[i].nx, _vertices[i].ny, _vertices[i].nz ) ;
-
-   fprintf( fp, "\n ] \n} \nIndexedFaceSet { \ncoordIndex [ \n" ) ;
-   for ( i = 0; i < _ntrigs; i++ )
-      fprintf( fp, "%d, %d, %d, -1,\n", _triangles[i].v1, _triangles[i].v2, _triangles[i].v3 ) ;
-
-   fprintf( fp, " ] \n } \n } \n" ) ;
-   fclose( fp ) ;
-   std::cout<<_ntrigs<<" triangles written\n";
-}
-
-/*=======================================================================*/
-template<typename DataWrapper >
-void MarchingCubes< DataWrapper >::writeUCD( std::string filename )
-{
-   std::cout<<"MarchingCubes::writeUCD("<<filename<<")...";
-
-   //Dreiecke in UCD Datei schreiben
-   std::ofstream out(filename.c_str());
-   if(!out) throw UbException(UB_EXARGS,"couldn't open "+filename);
-
-   out<<"# UCD-File containing triangulated geometry data"<<std::endl;
-   out<<this->nverts()<<" "<<this->ntrigs()<<" 0 0 0"<<std::endl;
-
-   int count = 1;
-   for(int k=0;k<this->nverts();k++) 
-      out<<count++<<" "<<_vertices[k].x<<" "<<_vertices[k].y<<" "<<_vertices[k].z<<std::endl;
-
-   count = 1;
-   for(int k=0;k<this->ntrigs();k++)
-      out<<count++<<" "<<"1"<<" tri "<<_triangles[k].v1+1<<" " <<_triangles[k].v2+1<<" "<<_triangles[k].v3+1<<std::endl;
-
-   out.flush();
-   out.close();
-   std::cout<<"done\n";
-
-}
-
-template<typename DataWrapper >
-void MarchingCubes< DataWrapper >::writeUCDwithNormals( std::string filename)
-{
-   std::cout<<"MarchingCubes::writeUCDwithNormals("<<filename<<")...";
-
-   //Dreiecke in UCD Datei schreiben
-   std::ofstream out(filename.c_str());
-   if(!out) throw UbException(UB_EXARGS,"couldn't open "+filename);
-
-   out<<"# UCD-File containing triangulated geometry data an vertex normals"<<std::endl;
-   out<<2*this->nverts()<<" "<<this->ntrigs()+this->nverts()<<" 0 0 0"<<std::endl;
-
-   int count = 1;
-   for(int k=0;k<this->nverts();k++) out<<count++<<" "<<_vertices[k].x+_vertices[k].nx<<" "<<_vertices[k].y+_vertices[k].ny<<" "<<_vertices[k].z+_vertices[k].nz<<std::endl;
-   for(int k=0;k<this->nverts();k++) out<<count++<<" "<<_vertices[k].x+_vertices[k].nx<<" "<<_vertices[k].y+_vertices[k].ny<<" "<<_vertices[k].z+_vertices[k].nz<<std::endl;
-
-   count = 1;
-   for(int k=0;k<this->ntrigs();k++)
-      out<<count++<<" "<<"1"<<" tri "<<_triangles[k].v1+1<<" " <<_triangles[k].v2+1<<" "<<_triangles[k].v3+1<<std::endl;
-
-   for(int k=0;k<this->nverts();k++)
-      out<<count++<<" "<< "1"<<" line "<<k+1<<" " <<this->nverts()+k+1<<" "<<std::endl;
-
-   out.flush();
-   out.close();
-   std::cout<<"done\n";
-}
-
-} //namespace McCubes
-
-#endif // _MARCHINGCUBES_H_
diff --git a/3rdParty/MarchingCubes/Matrix3DWrapper.h b/3rdParty/MarchingCubes/Matrix3DWrapper.h
deleted file mode 100644
index 159b5d53c416032ec0ff2f2672fb962036ea2449..0000000000000000000000000000000000000000
--- a/3rdParty/MarchingCubes/Matrix3DWrapper.h
+++ /dev/null
@@ -1,126 +0,0 @@
-//  _    ___      __              __________      _     __
-// | |  / (_)____/ /___  ______ _/ / ____/ /_  __(_)___/ /____
-// | | / / / ___/ __/ / / / __ `/ / /_  / / / / / / __  / ___/
-// | |/ / / /  / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__  )
-// |___/_/_/   \__/\__,_/\__,_/_/_/   /_/\__,_/_/\__,_/____/
-//
-#ifndef MATRIX3DWRAPPER_H
-#define MATRIX3DWRAPPER_H
-
-//extension by CAB
-#include <vector>
-#include <string>
-#include <fstream>
-
-#include <basics/utilities/UbException.h>
-#include <MarchingCubes/McTypes.h>
-
-//neu: matrix muss lediglich double operator()(int x1, int x2, int x3) ueberladen, dann kann man sie verwenden!!
-
-//////////////////////////////////////////////////////////////////////////
-//Matrix3DWrapper-Wrapper
-//   CbUniformMatrix3D<double> data(10,8,5);
-//   for(int x3=0; x3<data.getNX3(); x3++)
-//    for(int x2=0; x2<data.getNX2(); x2++)
-//      for(int x1=0; x1<data.getNX1(); x1++)
-//        data(x1,x2,x3) = x1;
-//
-//   Matrix3DWrapper< CbUniformMatrix3D<double> > wrapper(&data);
-//   MarchingCubes< Matrix3DWrapper< CbUniformMatrix3D<double> > > mc( wrapper );
-//
-//   mc.init_all();
-//   mc.run(3.5);
-//   mc.writeUCD("c:/temp/triangles.inp");
-//   mc.clean_all();
-
-namespace McCubes{
-
-template< typename Matrix3D >
-class Matrix3DWrapper
-{
-public:
-   Matrix3DWrapper()
-      :  matrix(NULL)
-       , minX1(-1), minX2(-1), minX3(-1)
-       , maxX1(-1), maxX2(-1), maxX3(-1)
-       , nx1(-1)  , nx2(-1)  , nx3(-1)
-   {
-      //wird benoetigt, damit MarchingCubes generell eine membervariabel erstellen kann
-   }
-   /*==========================================================*/
-   Matrix3DWrapper( Matrix3D* matrix)
-      : matrix(matrix)
-   {
-      nx1 = (int)matrix->getNX1();
-      nx2 = (int)matrix->getNX2();
-      nx3 = (int)matrix->getNX3();
-
-      minX1 = minX2 = minX3 = 0;
-      maxX1 = nx1-1;
-      maxX2 = nx2-1;
-      maxX3 = nx3-1;
-   }
-   /*==========================================================*/
-   Matrix3DWrapper( Matrix3D* matrix, const int& n1, const int& nx2, const int& nx3)
-      : matrix(matrix)
-      , nx1(nx1), nx2(nx2), nx3(nx3)
-   {
-      minX1 = minX2 = minX3 = 0;
-      maxX1 = nx1-1;
-      maxX2 = nx2-1;
-      maxX3 = nx3-1;
-   }
-   /*==========================================================*/
-   Matrix3DWrapper( Matrix3D* matrix, const int& minX1, const int& minX2, const int& minX3
-                                    , const int& maxX1, const int& maxX2, const int& maxX3 )
-      :  matrix(matrix)
-       , minX1(minX1), minX2(minX2), minX3(minX3)
-       , maxX1(maxX1), maxX2(maxX2), maxX3(maxX3)
-   {
-      nx1 = matrix->getNX1();
-      nx2 = matrix->getNX2();
-      nx3 = matrix->getNX3();
-
-      if(minX1<0 || minX2<0 || minX3<0 || maxX1>=nx1 || maxX2>=nx2 || maxX3>=nx3)
-         throw UbException(UB_EXARGS,"range error");
-   }
-   /*==========================================================*/
-   //wenn man z.B. matrixX1 von[0..10] geht und man nur den bereich 1..9 fuer MC
-   //verwenden moechte -> minX1=1 und maxX2=2
-   Matrix3DWrapper( Matrix3D* matrix, const int& minX1, const int& minX2, const int& minX3
-                                    , const int& maxX1, const int& maxX2, const int& maxX3
-                                    , const int& n1   , const int& nx2  , const int& nx3   )
-      :   matrix(matrix)
-        , minX1(minX1), minX2(minX2), minX3(minX3)
-        , maxX1(maxX1), maxX2(maxX2), maxX3(maxX3)
-        , nx1(n1)     , nx2(nx2)    , nx3(nx3)
-   {
-      if(minX1<0 || minX2<0 || minX3<0 || maxX1>=nx1 || maxX2>=nx2 || maxX3>=nx3)
-         throw UbException(UB_EXARGS,"range error");
-   }
-   /*==========================================================*/
-   inline real getData(const int& x1, const int& x2, const int& x3 ) const
-   {
-      return static_cast<real>( (*matrix)(x1, x2, x3) );
-   }
-   /*==========================================================*/
-   inline int getMinX1() const { return minX1; }  
-   inline int getMinX2() const { return minX2; }  
-   inline int getMinX3() const { return minX3; }  
-
-   inline int getMaxX1() const { return maxX1; }  
-   inline int getMaxX2() const { return maxX2; }  
-   inline int getMaxX3() const { return maxX3; }  
-
-   inline int getNX1()   const { return nx1;   }  
-   inline int getNX2()   const { return nx2;   }  
-   inline int getNX3()   const { return nx3;   }  
-
-protected:
-   Matrix3D* matrix;
-   int minX1, minX2, minX3, maxX1, maxX2, maxX3, nx1, nx2, nx3;
-};
-
-} //namespace McCubes
-
-#endif //MATRIX3DWRAPPER_H
diff --git a/3rdParty/MarchingCubes/Matrix4DWrapper.h b/3rdParty/MarchingCubes/Matrix4DWrapper.h
deleted file mode 100644
index dda3e3fb92e386c817940e54b113831823a13179..0000000000000000000000000000000000000000
--- a/3rdParty/MarchingCubes/Matrix4DWrapper.h
+++ /dev/null
@@ -1,131 +0,0 @@
-//  _    ___      __              __________      _     __
-// | |  / (_)____/ /___  ______ _/ / ____/ /_  __(_)___/ /____
-// | | / / / ___/ __/ / / / __ `/ / /_  / / / / / / __  / ___/
-// | |/ / / /  / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__  )
-// |___/_/_/   \__/\__,_/\__,_/_/_/   /_/\__,_/_/\__,_/____/
-//
-#ifndef MATRIX4DWRAPPER_H
-#define MATRIX4DWRAPPER_H
-
-//extension by CAB
-#include <vector>
-#include <string>
-#include <fstream>
-
-#include <basics/utilities/UbException.h>
-#include <MarchingCubes/McTypes.h>
-
-//neu: matrix muss lediglich double operator()(int x1, int x2, int x3, int x4) ueberladen, dann kann man sie verwenden!!
-
-//////////////////////////////////////////////////////////////////////////
-//Matrix4DWrapper-Wrapper
-//example:
-//   int indexForDataValue = 1;
-//   CbUniformMatrix4D<double> data(10,8,5,2);
-//   for(int x3=0; x3<data.getNX3(); x3++)
-//    for(int x2=0; x2<data.getNX2(); x2++)
-//      for(int x1=0; x1<data.getNX1(); x1++)
-//        data(x1,x2,x3,indexForDataValue) = x1;
-//
-//   Matrix4DWrapper< CbUniformMatrix4D<double> > wrapper(&data,indexForDataValue);
-//   MarchingCubes< Matrix4DWrapper< CbUniformMatrix4D<double> > > mc( wrapper );
-//
-//   mc.init_all();
-//   mc.run(3.5);
-//   mc.writeUCD("c:/temp/triangles.inp");
-//   mc.clean_all();
-
-namespace McCubes{
-
-template< typename Matrix4D >
-class Matrix4DWrapper
-{
-public:
-   Matrix4DWrapper() 
-      :  valIndex(-1), matrix(NULL)
-       , minX1(-1), minX2(-1), minX3(-1)
-       , maxX1(-1), maxX2(-1), maxX3(-1)
-       , nx1(-1)  , nx2(-1)  , nx3(-1)
-   {
-      //wird benoetigt, damit MarchingCubes generell eine membervariabel erstellen kann
-   }
-   /*==========================================================*/
-   Matrix4DWrapper( Matrix4D* matrix, const int& valIndex,const int& n1, const int& nx2, const int& nx3)
-      :  valIndex(valIndex), matrix(matrix)
-       , nx1(nx1), nx2(nx2), nx3(nx3)
-   {
-      minX1 = minX2 = minX3 = 0;
-      maxX1 = nx1-1;
-      maxX2 = nx2-1;
-      maxX3 = nx3-1;
-   }
-   /*==========================================================*/
-   Matrix4DWrapper( Matrix4D* matrix, const int& valIndex)
-      : valIndex(valIndex), matrix(matrix)
-   {
-      nx1 = matrix->getNX1();
-      nx2 = matrix->getNX2();
-      nx3 = matrix->getNX3();
-
-      minX1 = minX2 = minX3 = 0;
-      maxX1 = nx1-1;
-      maxX2 = nx2-1;
-      maxX3 = nx3-1;
-   }
-   /*==========================================================*/
-   //wenn man z.B. matrixX1 von[0..10] geht und man nur den bereich 1..9 fuer MC
-   //verwenden moechte -> minX1=1 und maxX2=2
-   Matrix4DWrapper( Matrix4D* matrix, const int& valIndex, const int& minX1, const int& minX2, const int& minX3,
-                                                           const int& maxX1, const int& maxX2, const int& maxX3)
-       :  valIndex(valIndex), matrix(matrix)
-        , minX1(minX1), minX2(minX2), minX3(minX3)
-        , maxX1(maxX1), maxX2(maxX2), maxX3(maxX3)
-   {
-      nx1 = matrix->getNX1();
-      nx2 = matrix->getNX2();
-      nx3 = matrix->getNX3();
-
-      if(minX1<0 || minX2<0 || minX3<0 || maxX1>=nx1 || maxX2>=nx2 || maxX3>=nx3)
-         throw UbException(UB_EXARGS,"range error");
-   }
-   /*==========================================================*/
-   //wenn man z.B. matrixX1 von[0..10] geht und man nur den bereich 1..9 fuer MC
-   //verwenden moechte -> minX1=1 und maxX2=2
-   Matrix4DWrapper( Matrix4D* matrix, const int& valIndex, const int& minX1, const int& minX2, const int& minX3
-                                                         , const int& maxX1, const int& maxX2, const int& maxX3
-                                                         , const int& n1   , const int& nx2  , const int& nx3   )
-      :  valIndex(valIndex), matrix(matrix)
-       , minX1(minX1), minX2(minX2), minX3(minX3)
-       , maxX1(maxX1), maxX2(maxX2), maxX3(maxX3)
-       , nx1(nx1)    , nx2(nx2)    , nx3(nx3)
-   {
-      if(minX1<0 || minX2<0 || minX3<0 || maxX1>=nx1 || maxX2>=nx2 || maxX3>=nx3)
-         throw UbException(UB_EXARGS,"range error");
-   }
-   /*==========================================================*/
-   inline real getData(const int& x1, const int& x2, const int& x3 ) const
-   {
-      return static_cast<real>( (*matrix)(x1, x2, x3, valIndex) );
-   }
-   /*==========================================================*/
-   inline int getMinX1() const { return minX1; }  
-   inline int getMinX2() const { return minX2; }  
-   inline int getMinX3() const { return minX3; }  
-
-   inline int getMaxX1() const { return maxX1; }  
-   inline int getMaxX2() const { return maxX2; }  
-   inline int getMaxX3() const { return maxX3; }  
-
-   inline int getNX1()   const { return nx1;   }  
-   inline int getNX2()   const { return nx2;   }  
-   inline int getNX3()   const { return nx3;   }  
-
-protected:
-   int valIndex;
-   Matrix4D* matrix;
-   int minX1, minX2, minX3, maxX1, maxX2, maxX3, nx1, nx2, nx3;
-};
-
-} //namespace McCubes
-
-#endif //MATRIX4DWRAPPER_H
diff --git a/3rdParty/MarchingCubes/MatrixWrapper.h b/3rdParty/MarchingCubes/MatrixWrapper.h
deleted file mode 100644
index c787fa77ffd59014f6a542a66916c9784aa6c7d0..0000000000000000000000000000000000000000
--- a/3rdParty/MarchingCubes/MatrixWrapper.h
+++ /dev/null
@@ -1,131 +0,0 @@
-//  _    ___      __              __________      _     __
-// | |  / (_)____/ /___  ______ _/ / ____/ /_  __(_)___/ /____
-// | | / / / ___/ __/ / / / __ `/ / /_  / / / / / / __  / ___/
-// | |/ / / /  / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__  )
-// |___/_/_/   \__/\__,_/\__,_/_/_/   /_/\__,_/_/\__,_/____/
-//
-#ifndef MATRIXWRAPPER_H
-#define MATRIXWRAPPER_H
-
-//extension by CAB
-#include <vector>
-#include <string>
-#include <fstream>
-
-#include <basics/utilities/UbException.h>
-
-#include <MarchingCubes/McTypes.h>
-
-//////////////////////////////////////////////////////////////////////////
-//Standard-Wrapper
-//   MarchingCubes<DataWrapper> mc( 10,8,5 );
-//   for(int z=0; z<mc.size_z(); z++)
-//    for(int y=0; y<mc.size_y(); y++)
-//      for(int x=0; x<mc.size_x(); x++)
-//        mc.set_data(x,x,y,z);
-//
-//   mc.init_all();
-//   mc.run(3.5);
-//   mc.writeUCD("c:/temp/triangles.inp");
-//   mc.clean_all();
-
-namespace McCubes{
-
-template< typename T=real >
-class MatrixWrapper
-{
-public:
-   typedef T                                                   value_type;
-   typedef typename std::vector< value_type >::reference       reference;
-   typedef typename std::vector< value_type >::const_reference const_reference;
-   typedef typename std::vector< value_type >::pointer         pointer;
-   typedef typename std::vector< value_type >::const_pointer   const_pointer;
-
-public:
-   MatrixWrapper() : nx1(-1), nx2(-1), nx3(-1)
-   {
-   }
-   /*==========================================================*/
-   MatrixWrapper(const int& nx1, const int& nx2, const int& nx3, const T& initVal=T())
-   {
-      this->resize(nx1,nx2,nx3,initVal);
-   }
-   /*=======================================================================*/
-   reference operator() (const int& x1, const int& x2, const int& x3)
-   {
-      #ifdef _DEBUG
-         return this->data.at(x1 + x2*nx1 + x3*nx1*nx2);
-      #else
-         return this->data[x1 + x2*nx1 + x3*nx1*nx2];
-      #endif
-   }
-   /*=======================================================================*/
-   const_reference operator() (const int& x1, const int& x2, const int& x3)	const
-   {
-      #ifdef _DEBUG
-         return this->data.at(x1 + x2*nx1 + x3*nx1*nx2);
-      #else
-         return this->data[x1 + x2*nx1 + x3*nx1*nx2];
-      #endif
-   }
-   /*==========================================================*/
-   inline void setData( const T& val, const int& x1, const int& x2, const int& x3 )
-   {
-      #ifdef _DEBUG
-         this->data.at(x1 + x2*nx1 + x3*nx1*nx2) = val;
-      #else
-         this->data[x1 + x2*nx1 + x3*nx1*nx2] = val;
-      #endif
-   }
-   /*==========================================================*/
-   inline value_type getData(const int& x1, const int& x2, const int& x3 ) const
-   {
-      #ifdef _DEBUG
-         return this->data.at(x1 + x2*nx1 + x3*nx1*nx2);
-      #else
-         return this->data[x1 + x2*nx1 + x3*nx1*nx2];
-      #endif
-   }
-   /*==========================================================*/
-   inline void resize(const int& nx1, const int& nx2, const int& nx3)
-   {
-      if(nx1>0 && nx2>0 && nx3>0)
-      {
-         this->nx1 = nx1;
-         this->nx2 = nx2;
-         this->nx3 = nx3;
-         this->data.resize(nx1*nx2*nx3);
-      }
-   }
-   /*==========================================================*/
-   inline void resize(const int& nx1, const int& nx2, const int& nx3, const T& initVal)
-   {
-      if(nx1>0 && nx2>0 && nx3>0)
-      {
-         this->nx1 = nx1;
-         this->nx2 = nx2;
-         this->nx3 = nx3;
-         this->data.resize(nx1*nx2*nx3,initVal);
-      }
-   }
-   /*==========================================================*/
-   inline int getMinX1() const { return 0;     }  
-   inline int getMinX2() const { return 0;     }  
-   inline int getMinX3() const { return 0;     }  
-
-   inline int getMaxX1() const { return nx1-1; }  
-   inline int getMaxX2() const { return nx2-1; }  
-   inline int getMaxX3() const { return nx3-1; }  
-
-   inline int getNX1()   const { return nx1;   }  
-   inline int getNX2()   const { return nx2;   }  
-   inline int getNX3()   const { return nx3;   }  
-
-protected:
-   std::vector<T> data;
-   int nx1, nx2, nx3;
-};
-
-} //namespace McCubes
-
-#endif //MATRIXWRAPPER_H
diff --git a/3rdParty/MarchingCubes/McLookUpTable.h b/3rdParty/MarchingCubes/McLookUpTable.h
deleted file mode 100644
index 00983bb1b1147f56d3565201fab6a7909530219b..0000000000000000000000000000000000000000
--- a/3rdParty/MarchingCubes/McLookUpTable.h
+++ /dev/null
@@ -1,2320 +0,0 @@
-/**
- * @file    LookUpTable.h
- * @author  Thomas Lewiner <thomas.lewiner@polytechnique.org>
- * @author  Math Dept, PUC-Rio
- * @version 0.2
- * @date    12/08/2002
- *
- * @brief   LookUpTable for the MarchingCubes 33 Algorithm
- */
-//________________________________________________
-
-
-
-#ifndef MCLOOKUPTABLE_H
-#define MCLOOKUPTABLE_H
-
-namespace McCubes{ 
-
-//_____________________________________________________________________________
-/**
- * \brief case mapping
- * For each of the possible vertex states listed in this table there is a
- * specific triangulation of the edge intersection points.  The table lists
- * all of them in the form of 0-5 edge triples with the list terminated by
- * the invalid value -1.  For example: case[3] list the 2 triangles
- * formed when cube[0] and cube[1] are inside of the surface, but the rest of
- * the cube is not.
- *
- * Cube description:
- *         7 ________ 6           _____6__             ________
- *         /|       /|         7/|       /|          /|       /|
- *       /  |     /  |        /  |     /5 |        /  6     /  |
- *   4 /_______ /    |      /__4____ /    10     /_______3/    |
- *    |     |  |5    |     |    11  |     |     |     |  |   2 |
- *    |    3|__|_____|2    |     |__|__2__|     | 4   |__|_____|
- *    |    /   |    /      8   3/   9    /      |    /   |    /
- *    |  /     |  /        |  /     |  /1       |  /     5  /
- *    |/_______|/          |/___0___|/          |/_1_____|/
- *   0          1        0          1
- */
-//-----------------------------------------------------------------------------
-static const char cases[256][2] = {
-/*   0:                          */  {  0, -1 },
-/*   1: 0,                       */  {  1,  0 },
-/*   2:    1,                    */  {  1,  1 },
-/*   3: 0, 1,                    */  {  2,  0 },
-/*   4:       2,                 */  {  1,  2 },
-/*   5: 0,    2,                 */  {  3,  0 },
-/*   6:    1, 2,                 */  {  2,  3 },
-/*   7: 0, 1, 2,                 */  {  5,  0 },
-/*   8:          3,              */  {  1,  3 },
-/*   9: 0,       3,              */  {  2,  1 },
-/*  10:    1,    3,              */  {  3,  3 },
-/*  11: 0, 1,    3,              */  {  5,  1 },
-/*  12:       2, 3,              */  {  2,  5 },
-/*  13: 0,    2, 3,              */  {  5,  4 },
-/*  14:    1, 2, 3,              */  {  5,  9 },
-/*  15: 0, 1, 2, 3,              */  {  8,  0 },
-/*  16:             4,           */  {  1,  4 },
-/*  17: 0,          4,           */  {  2,  2 },
-/*  18:    1,       4,           */  {  3,  4 },
-/*  19: 0, 1,       4,           */  {  5,  2 },
-/*  20:       2,    4,           */  {  4,  2 },
-/*  21: 0,    2,    4,           */  {  6,  2 },
-/*  22:    1, 2,    4,           */  {  6,  9 },
-/*  23: 0, 1, 2,    4,           */  { 11,  0 },
-/*  24:          3, 4,           */  {  3,  8 },
-/*  25: 0,       3, 4,           */  {  5,  5 },
-/*  26:    1,    3, 4,           */  {  7,  3 },
-/*  27: 0, 1,    3, 4,           */  {  9,  1 },
-/*  28:       2, 3, 4,           */  {  6, 16 },
-/*  29: 0,    2, 3, 4,           */  { 14,  3 },
-/*  30:    1, 2, 3, 4,           */  { 12, 12 },
-/*  31: 0, 1, 2, 3, 4,           */  {  5, 24 },
-/*  32:                5,        */  {  1,  5 },
-/*  33: 0,             5,        */  {  3,  1 },
-/*  34:    1,          5,        */  {  2,  4 },
-/*  35: 0, 1,          5,        */  {  5,  3 },
-/*  36:       2,       5,        */  {  3,  6 },
-/*  37: 0,    2,       5,        */  {  7,  0 },
-/*  38:    1, 2,       5,        */  {  5, 10 },
-/*  39: 0, 1, 2,       5,        */  {  9,  0 },
-/*  40:          3,    5,        */  {  4,  3 },
-/*  41: 0,       3,    5,        */  {  6,  4 },
-/*  42:    1,    3,    5,        */  {  6, 11 },
-/*  43: 0, 1,    3,    5,        */  { 14,  1 },
-/*  44:       2, 3,    5,        */  {  6, 17 },
-/*  45: 0,    2, 3,    5,        */  { 12,  4 },
-/*  46:    1, 2, 3,    5,        */  { 11,  6 },
-/*  47: 0, 1, 2, 3,    5,        */  {  5, 25 },
-/*  48:             4, 5,        */  {  2,  8 },
-/*  49: 0,          4, 5,        */  {  5,  7 },
-/*  50:    1,       4, 5,        */  {  5, 12 },
-/*  51: 0, 1,       4, 5,        */  {  8,  1 },
-/*  52:       2,    4, 5,        */  {  6, 18 },
-/*  53: 0,    2,    4, 5,        */  { 12,  5 },
-/*  54:    1, 2,    4, 5,        */  { 14,  7 },
-/*  55: 0, 1, 2,    4, 5,        */  {  5, 28 },
-/*  56:          3, 4, 5,        */  {  6, 21 },
-/*  57: 0,       3, 4, 5,        */  { 11,  4 },
-/*  58:    1,    3, 4, 5,        */  { 12, 15 },
-/*  59: 0, 1,    3, 4, 5,        */  {  5, 30 },
-/*  60:       2, 3, 4, 5,        */  { 10,  5 },
-/*  61: 0,    2, 3, 4, 5,        */  {  6, 32 },
-/*  62:    1, 2, 3, 4, 5,        */  {  6, 39 },
-/*  63: 0, 1, 2, 3, 4, 5,        */  {  2, 12 },
-/*  64:                   6,     */  {  1,  6 },
-/*  65: 0,                6,     */  {  4,  0 },
-/*  66:    1,             6,     */  {  3,  5 },
-/*  67: 0, 1,             6,     */  {  6,  0 },
-/*  68:       2,          6,     */  {  2,  6 },
-/*  69: 0,    2,          6,     */  {  6,  3 },
-/*  70:    1, 2,          6,     */  {  5, 11 },
-/*  71: 0, 1, 2,          6,     */  { 14,  0 },
-/*  72:          3,       6,     */  {  3,  9 },
-/*  73: 0,       3,       6,     */  {  6,  5 },
-/*  74:    1,    3,       6,     */  {  7,  4 },
-/*  75: 0, 1,    3,       6,     */  { 12,  1 },
-/*  76:       2, 3,       6,     */  {  5, 14 },
-/*  77: 0,    2, 3,       6,     */  { 11,  3 },
-/*  78:    1, 2, 3,       6,     */  {  9,  4 },
-/*  79: 0, 1, 2, 3,       6,     */  {  5, 26 },
-/*  80:             4,    6,     */  {  3, 10 },
-/*  81: 0,          4,    6,     */  {  6,  6 },
-/*  82:    1,       4,    6,     */  {  7,  5 },
-/*  83: 0, 1,       4,    6,     */  { 12,  2 },
-/*  84:       2,    4,    6,     */  {  6, 19 },
-/*  85: 0,    2,    4,    6,     */  { 10,  1 },
-/*  86:    1, 2,    4,    6,     */  { 12, 13 },
-/*  87: 0, 1, 2,    4,    6,     */  {  6, 24 },
-/*  88:          3, 4,    6,     */  {  7,  7 },
-/*  89: 0,       3, 4,    6,     */  { 12,  9 },
-/*  90:    1,    3, 4,    6,     */  { 13,  1 },
-/*  91: 0, 1,    3, 4,    6,     */  {  7,  9 },
-/*  92:       2, 3, 4,    6,     */  { 12, 20 },
-/*  93: 0,    2, 3, 4,    6,     */  {  6, 33 },
-/*  94:    1, 2, 3, 4,    6,     */  {  7, 13 },
-/*  95: 0, 1, 2, 3, 4,    6,     */  {  3, 12 },
-/*  96:                5, 6,     */  {  2, 10 },
-/*  97: 0,             5, 6,     */  {  6,  7 },
-/*  98:    1,          5, 6,     */  {  5, 13 },
-/*  99: 0, 1,          5, 6,     */  { 11,  2 },
-/* 100:       2,       5, 6,     */  {  5, 16 },
-/* 101: 0,    2,       5, 6,     */  { 12,  7 },
-/* 102:    1, 2,       5, 6,     */  {  8,  3 },
-/* 103: 0, 1, 2,       5, 6,     */  {  5, 29 },
-/* 104:          3,    5, 6,     */  {  6, 22 },
-/* 105: 0,       3,    5, 6,     */  { 10,  2 },
-/* 106:    1,    3,    5, 6,     */  { 12, 17 },
-/* 107: 0, 1,    3,    5, 6,     */  {  6, 27 },
-/* 108:       2, 3,    5, 6,     */  { 14,  9 },
-/* 109: 0,    2, 3,    5, 6,     */  {  6, 34 },
-/* 110:    1, 2, 3,    5, 6,     */  {  5, 39 },
-/* 111: 0, 1, 2, 3,    5, 6,     */  {  2, 14 },
-/* 112:             4, 5, 6,     */  {  5, 20 },
-/* 113: 0,          4, 5, 6,     */  { 14,  5 },
-/* 114:    1,       4, 5, 6,     */  {  9,  5 },
-/* 115: 0, 1,       4, 5, 6,     */  {  5, 32 },
-/* 116:       2,    4, 5, 6,     */  { 11, 10 },
-/* 117: 0,    2,    4, 5, 6,     */  {  6, 35 },
-/* 118:    1, 2,    4, 5, 6,     */  {  5, 41 },
-/* 119: 0, 1, 2,    4, 5, 6,     */  {  2, 16 },
-/* 120:          3, 4, 5, 6,     */  { 12, 23 },
-/* 121: 0,       3, 4, 5, 6,     */  {  6, 37 },
-/* 122:    1,    3, 4, 5, 6,     */  {  7, 14 },
-/* 123: 0, 1,    3, 4, 5, 6,     */  {  3, 16 },
-/* 124:       2, 3, 4, 5, 6,     */  {  6, 46 },
-/* 125: 0,    2, 3, 4, 5, 6,     */  {  4,  6 },
-/* 126:    1, 2, 3, 4, 5, 6,     */  {  3, 21 },
-/* 127: 0, 1, 2, 3, 4, 5, 6,     */  {  1,  8 },
-/* 128:                      7,  */  {  1,  7 },
-/* 129: 0,                   7,  */  {  3,  2 },
-/* 130:    1,                7,  */  {  4,  1 },
-/* 131: 0, 1,                7,  */  {  6,  1 },
-/* 132:       2,             7,  */  {  3,  7 },
-/* 133: 0,    2,             7,  */  {  7,  1 },
-/* 134:    1, 2,             7,  */  {  6, 10 },
-/* 135: 0, 1, 2,             7,  */  { 12,  0 },
-/* 136:          3,          7,  */  {  2,  7 },
-/* 137: 0,       3,          7,  */  {  5,  6 },
-/* 138:    1,    3,          7,  */  {  6, 12 },
-/* 139: 0, 1,    3,          7,  */  { 11,  1 },
-/* 140:       2, 3,          7,  */  {  5, 15 },
-/* 141: 0,    2, 3,          7,  */  {  9,  2 },
-/* 142:    1, 2, 3,          7,  */  { 14,  6 },
-/* 143: 0, 1, 2, 3,          7,  */  {  5, 27 },
-/* 144:             4,       7,  */  {  2,  9 },
-/* 145: 0,          4,       7,  */  {  5,  8 },
-/* 146:    1,       4,       7,  */  {  6, 13 },
-/* 147: 0, 1,       4,       7,  */  { 14,  2 },
-/* 148:       2,    4,       7,  */  {  6, 20 },
-/* 149: 0,    2,    4,       7,  */  { 12,  6 },
-/* 150:    1, 2,    4,       7,  */  { 10,  3 },
-/* 151: 0, 1, 2,    4,       7,  */  {  6, 25 },
-/* 152:          3, 4,       7,  */  {  5, 18 },
-/* 153: 0,       3, 4,       7,  */  {  8,  2 },
-/* 154:    1,    3, 4,       7,  */  { 12, 16 },
-/* 155: 0, 1,    3, 4,       7,  */  {  5, 31 },
-/* 156:       2, 3, 4,       7,  */  { 11,  9 },
-/* 157: 0,    2, 3, 4,       7,  */  {  5, 34 },
-/* 158:    1, 2, 3, 4,       7,  */  {  6, 40 },
-/* 159: 0, 1, 2, 3, 4,       7,  */  {  2, 13 },
-/* 160:                5,    7,  */  {  3, 11 },
-/* 161: 0,             5,    7,  */  {  7,  2 },
-/* 162:    1,          5,    7,  */  {  6, 14 },
-/* 163: 0, 1,          5,    7,  */  { 12,  3 },
-/* 164:       2,       5,    7,  */  {  7,  6 },
-/* 165: 0,    2,       5,    7,  */  { 13,  0 },
-/* 166:    1, 2,       5,    7,  */  { 12, 14 },
-/* 167: 0, 1, 2,       5,    7,  */  {  7,  8 },
-/* 168:          3,    5,    7,  */  {  6, 23 },
-/* 169: 0,       3,    5,    7,  */  { 12, 10 },
-/* 170:    1,    3,    5,    7,  */  { 10,  4 },
-/* 171: 0, 1,    3,    5,    7,  */  {  6, 28 },
-/* 172:       2, 3,    5,    7,  */  { 12, 21 },
-/* 173: 0,    2, 3,    5,    7,  */  {  7, 10 },
-/* 174:    1, 2, 3,    5,    7,  */  {  6, 41 },
-/* 175: 0, 1, 2, 3,    5,    7,  */  {  3, 13 },
-/* 176:             4, 5,    7,  */  {  5, 21 },
-/* 177: 0,          4, 5,    7,  */  {  9,  3 },
-/* 178:    1,       4, 5,    7,  */  { 11,  8 },
-/* 179: 0, 1,       4, 5,    7,  */  {  5, 33 },
-/* 180:       2,    4, 5,    7,  */  { 12, 22 },
-/* 181: 0,    2,    4, 5,    7,  */  {  7, 11 },
-/* 182:    1, 2,    4, 5,    7,  */  {  6, 42 },
-/* 183: 0, 1, 2,    4, 5,    7,  */  {  3, 14 },
-/* 184:          3, 4, 5,    7,  */  { 14, 11 },
-/* 185: 0,       3, 4, 5,    7,  */  {  5, 36 },
-/* 186:    1,    3, 4, 5,    7,  */  {  6, 44 },
-/* 187: 0, 1,    3, 4, 5,    7,  */  {  2, 17 },
-/* 188:       2, 3, 4, 5,    7,  */  {  6, 47 },
-/* 189: 0,    2, 3, 4, 5,    7,  */  {  3, 18 },
-/* 190:    1, 2, 3, 4, 5,    7,  */  {  4,  7 },
-/* 191: 0, 1, 2, 3, 4, 5,    7,  */  {  1,  9 },
-/* 192:                   6, 7,  */  {  2, 11 },
-/* 193: 0,                6, 7,  */  {  6,  8 },
-/* 194:    1,             6, 7,  */  {  6, 15 },
-/* 195: 0, 1,             6, 7,  */  { 10,  0 },
-/* 196:       2,          6, 7,  */  {  5, 17 },
-/* 197: 0,    2,          6, 7,  */  { 12,  8 },
-/* 198:    1, 2,          6, 7,  */  { 11,  7 },
-/* 199: 0, 1, 2,          6, 7,  */  {  6, 26 },
-/* 200:          3,       6, 7,  */  {  5, 19 },
-/* 201: 0,       3,       6, 7,  */  { 14,  4 },
-/* 202:    1,    3,       6, 7,  */  { 12, 18 },
-/* 203: 0, 1,    3,       6, 7,  */  {  6, 29 },
-/* 204:       2, 3,       6, 7,  */  {  8,  4 },
-/* 205: 0,    2, 3,       6, 7,  */  {  5, 35 },
-/* 206:    1, 2, 3,       6, 7,  */  {  5, 40 },
-/* 207: 0, 1, 2, 3,       6, 7,  */  {  2, 15 },
-/* 208:             4,    6, 7,  */  {  5, 22 },
-/* 209: 0,          4,    6, 7,  */  { 11,  5 },
-/* 210:    1,       4,    6, 7,  */  { 12, 19 },
-/* 211: 0, 1,       4,    6, 7,  */  {  6, 30 },
-/* 212:       2,    4,    6, 7,  */  { 14, 10 },
-/* 213: 0,    2,    4,    6, 7,  */  {  6, 36 },
-/* 214:    1, 2,    4,    6, 7,  */  {  6, 43 },
-/* 215: 0, 1, 2,    4,    6, 7,  */  {  4,  4 },
-/* 216:          3, 4,    6, 7,  */  {  9,  7 },
-/* 217: 0,       3, 4,    6, 7,  */  {  5, 37 },
-/* 218:    1,    3, 4,    6, 7,  */  {  7, 15 },
-/* 219: 0, 1,    3, 4,    6, 7,  */  {  3, 17 },
-/* 220:       2, 3, 4,    6, 7,  */  {  5, 44 },
-/* 221: 0,    2, 3, 4,    6, 7,  */  {  2, 19 },
-/* 222:    1, 2, 3, 4,    6, 7,  */  {  3, 22 },
-/* 223: 0, 1, 2, 3, 4,    6, 7,  */  {  1, 10 },
-/* 224:                5, 6, 7,  */  {  5, 23 },
-/* 225: 0,             5, 6, 7,  */  { 12, 11 },
-/* 226:    1,          5, 6, 7,  */  { 14,  8 },
-/* 227: 0, 1,          5, 6, 7,  */  {  6, 31 },
-/* 228:       2,       5, 6, 7,  */  {  9,  6 },
-/* 229: 0,    2,       5, 6, 7,  */  {  7, 12 },
-/* 230:    1, 2,       5, 6, 7,  */  {  5, 42 },
-/* 231: 0, 1, 2,       5, 6, 7,  */  {  3, 15 },
-/* 232:          3,    5, 6, 7,  */  { 11, 11 },
-/* 233: 0,       3,    5, 6, 7,  */  {  6, 38 },
-/* 234:    1,    3,    5, 6, 7,  */  {  6, 45 },
-/* 235: 0, 1,    3,    5, 6, 7,  */  {  4,  5 },
-/* 236:       2, 3,    5, 6, 7,  */  {  5, 45 },
-/* 237: 0,    2, 3,    5, 6, 7,  */  {  3, 19 },
-/* 238:    1, 2, 3,    5, 6, 7,  */  {  2, 21 },
-/* 239: 0, 1, 2, 3,    5, 6, 7,  */  {  1, 11 },
-/* 240:             4, 5, 6, 7,  */  {  8,  5 },
-/* 241: 0,          4, 5, 6, 7,  */  {  5, 38 },
-/* 242:    1,       4, 5, 6, 7,  */  {  5, 43 },
-/* 243: 0, 1,       4, 5, 6, 7,  */  {  2, 18 },
-/* 244:       2,    4, 5, 6, 7,  */  {  5, 46 },
-/* 245: 0,    2,    4, 5, 6, 7,  */  {  3, 20 },
-/* 246:    1, 2,    4, 5, 6, 7,  */  {  2, 22 },
-/* 247: 0, 1, 2,    4, 5, 6, 7,  */  {  1, 12 },
-/* 248:          3, 4, 5, 6, 7,  */  {  5, 47 },
-/* 249: 0,       3, 4, 5, 6, 7,  */  {  2, 20 },
-/* 250:    1,    3, 4, 5, 6, 7,  */  {  3, 23 },
-/* 251: 0, 1,    3, 4, 5, 6, 7,  */  {  1, 13 },
-/* 252:       2, 3, 4, 5, 6, 7,  */  {  2, 23 },
-/* 253: 0,    2, 3, 4, 5, 6, 7,  */  {  1, 14 },
-/* 254:    1, 2, 3, 4, 5, 6, 7,  */  {  1, 15 },
-/* 255: 0, 1, 2, 3, 4, 5, 6, 7,  */  {  0, -1 }
-};
-//_____________________________________________________________________________
-
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 1
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling1[16][3] = {
-/*   1: 0,                       */  {  0,  8,  3 },
-/*   2:    1,                    */  {  0,  1,  9 },
-/*   4:       2,                 */  {  1,  2, 10 },
-/*   8:          3,              */  {  3, 11,  2 },
-/*  16:             4,           */  {  4,  7,  8 },
-/*  32:                5,        */  {  9,  5,  4 },
-/*  64:                   6,     */  { 10,  6,  5 },
-/* 128:                      7,  */  {  7,  6, 11 },
-/* 127: 0, 1, 2, 3, 4, 5, 6,     */  {  7, 11,  6 },
-/* 191: 0, 1, 2, 3, 4, 5,    7,  */  { 10,  5,  6 },
-/* 223: 0, 1, 2, 3, 4,    6, 7,  */  {  9,  4,  5 },
-/* 239: 0, 1, 2, 3,    5, 6, 7,  */  {  4,  8,  7 },
-/* 247: 0, 1, 2,    4, 5, 6, 7,  */  {  3,  2, 11 },
-/* 251: 0, 1,    3, 4, 5, 6, 7,  */  {  1, 10,  2 },
-/* 253: 0,    2, 3, 4, 5, 6, 7,  */  {  0,  9,  1 },
-/* 254:    1, 2, 3, 4, 5, 6, 7,  */  {  0,  3,  8 }
-};
-//_____________________________________________________________________________
-
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling2[24][6] = {
-/*   3: 0, 1,                    */  {  1,  8,  3,  9,  8,  1 },
-/*   9: 0,       3,              */  {  0, 11,  2,  8, 11,  0 },
-/*  17: 0,          4,           */  {  4,  3,  0,  7,  3,  4 },
-/*   6:    1, 2,                 */  {  9,  2, 10,  0,  2,  9 },
-/*  34:    1,          5,        */  {  0,  5,  4,  1,  5,  0 },
-/*  12:       2, 3,              */  {  3, 10,  1, 11, 10,  3 },
-/*  68:       2,          6,     */  {  1,  6,  5,  2,  6,  1 },
-/* 136:          3,          7,  */  {  7,  2,  3,  6,  2,  7 },
-/*  48:             4, 5,        */  {  9,  7,  8,  5,  7,  9 },
-/* 144:             4,       7,  */  {  6,  8,  4, 11,  8,  6 },
-/*  96:                5, 6,     */  { 10,  4,  9,  6,  4, 10 },
-/* 192:                   6, 7,  */  { 11,  5, 10,  7,  5, 11 },
-/*  63: 0, 1, 2, 3, 4, 5,        */  { 11, 10,  5,  7, 11,  5 },
-/* 159: 0, 1, 2, 3, 4,       7,  */  { 10,  9,  4,  6, 10,  4 },
-/* 111: 0, 1, 2, 3,    5, 6,     */  {  6,  4,  8, 11,  6,  8 },
-/* 207: 0, 1, 2, 3,       6, 7,  */  {  9,  8,  7,  5,  9,  7 },
-/* 119: 0, 1, 2,    4, 5, 6,     */  {  7,  3,  2,  6,  7,  2 },
-/* 187: 0, 1,    3, 4, 5,    7,  */  {  1,  5,  6,  2,  1,  6 },
-/* 243: 0, 1,       4, 5, 6, 7,  */  {  3,  1, 10, 11,  3, 10 },
-/* 221: 0,    2, 3, 4,    6, 7,  */  {  0,  4,  5,  1,  0,  5 },
-/* 249: 0,       3, 4, 5, 6, 7,  */  {  9, 10,  2,  0,  9,  2 },
-/* 238:    1, 2, 3,    5, 6, 7,  */  {  4,  0,  3,  7,  4,  3 },
-/* 246:    1, 2,    4, 5, 6, 7,  */  {  0,  2, 11,  8,  0, 11 },
-/* 252:       2, 3, 4, 5, 6, 7,  */  {  1,  3,  8,  9,  1,  8 }
-};
-//_____________________________________________________________________________
-
-//_____________________________________________________________________________
-/**
- * \brief test table for case 3
- * One face to test
- * When the test on the specified face is positive : 4 first triangles
- * When the test on the specified face is negative : 2 last triangles
- *
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char test3[24] = {
-/*   5: 0,    2,                 */    5,
-/*  33: 0,             5,        */    1,
-/* 129: 0,                   7,  */    4,
-/*  10:    1,    3,              */    5,
-/*  18:    1,       4,           */    1,
-/*  66:    1,             6,     */    2,
-/*  36:       2,       5,        */    2,
-/* 132:       2,             7,  */    3,
-/*  24:          3, 4,           */    4,
-/*  72:          3,       6,     */    3,
-/*  80:             4,    6,     */    6,
-/* 160:                5,    7,  */    6,
-/*  95: 0, 1, 2, 3, 4,    6,     */   -6,
-/* 175: 0, 1, 2, 3,    5,    7,  */   -6,
-/* 183: 0, 1, 2,    4, 5,    7,  */   -3,
-/* 231: 0, 1, 2,       5, 6, 7,  */   -4,
-/* 123: 0, 1,    3, 4, 5, 6,     */   -3,
-/* 219: 0, 1,    3, 4,    6, 7,  */   -2,
-/* 189: 0,    2, 3, 4, 5,    7,  */   -2,
-/* 237: 0,    2, 3,    5, 6, 7,  */   -1,
-/* 245: 0,    2,    4, 5, 6, 7,  */   -5,
-/* 126:    1, 2, 3, 4, 5, 6,     */   -4,
-/* 222:    1, 2, 3, 4,    6, 7,  */   -1,
-/* 250:    1,    3, 4, 5, 6, 7,  */   -5
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 3.1
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling3_1[24][6] = {
-/*   5: 0,    2,                 */  {  0,  8,  3,  1,  2, 10 },
-/*  33: 0,             5,        */  {  9,  5,  4,  0,  8,  3 },
-/* 129: 0,                   7,  */  {  3,  0,  8, 11,  7,  6 },
-/*  10:    1,    3,              */  {  1,  9,  0,  2,  3, 11 },
-/*  18:    1,       4,           */  {  0,  1,  9,  8,  4,  7 },
-/*  66:    1,             6,     */  {  9,  0,  1,  5, 10,  6 },
-/*  36:       2,       5,        */  {  1,  2, 10,  9,  5,  4 },
-/* 132:       2,             7,  */  { 10,  1,  2,  6, 11,  7 },
-/*  24:          3, 4,           */  {  8,  4,  7,  3, 11,  2 },
-/*  72:          3,       6,     */  {  2,  3, 11, 10,  6,  5 },
-/*  80:             4,    6,     */  {  5, 10,  6,  4,  7,  8 },
-/* 160:                5,    7,  */  {  4,  9,  5,  7,  6, 11 },
-/*  95: 0, 1, 2, 3, 4,    6,     */  {  5,  9,  4, 11,  6,  7 },
-/* 175: 0, 1, 2, 3,    5,    7,  */  {  6, 10,  5,  8,  7,  4 },
-/* 183: 0, 1, 2,    4, 5,    7,  */  { 11,  3,  2,  5,  6, 10 },
-/* 231: 0, 1, 2,       5, 6, 7,  */  {  7,  4,  8,  2, 11,  3 },
-/* 123: 0, 1,    3, 4, 5, 6,     */  {  2,  1, 10,  7, 11,  6 },
-/* 219: 0, 1,    3, 4,    6, 7,  */  { 10,  2,  1,  4,  5,  9 },
-/* 189: 0,    2, 3, 4, 5,    7,  */  {  1,  0,  9,  6, 10,  5 },
-/* 237: 0,    2, 3,    5, 6, 7,  */  {  9,  1,  0,  7,  4,  8 },
-/* 245: 0,    2,    4, 5, 6, 7,  */  {  0,  9,  1, 11,  3,  2 },
-/* 126:    1, 2, 3, 4, 5, 6,     */  {  8,  0,  3,  6,  7, 11 },
-/* 222:    1, 2, 3, 4,    6, 7,  */  {  4,  5,  9,  3,  8,  0 },
-/* 250:    1,    3, 4, 5, 6, 7,  */  {  3,  8,  0, 10,  2,  1 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 3.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling3_2[24][12] = {
-/*   5: 0,    2,                 */  { 10,  3,  2, 10,  8,  3, 10,  1,  0,  8, 10,  0 },
-/*  33: 0,             5,        */  {  3,  4,  8,  3,  5,  4,  3,  0,  9,  5,  3,  9 },
-/* 129: 0,                   7,  */  {  6,  8,  7,  6,  0,  8,  6, 11,  3,  0,  6,  3 },
-/*  10:    1,    3,              */  { 11,  0,  3, 11,  9,  0, 11,  2,  1,  9, 11,  1 },
-/*  18:    1,       4,           */  {  7,  9,  4,  7,  1,  9,  7,  8,  0,  1,  7,  0 },
-/*  66:    1,             6,     */  {  6,  1, 10,  6,  0,  1,  9,  0,  6,  9,  6,  5 },
-/*  36:       2,       5,        */  {  4, 10,  5,  4,  2, 10,  4,  9,  1,  2,  4,  1 },
-/* 132:       2,             7,  */  {  7,  2, 11,  7,  1,  2,  7,  6, 10,  1,  7, 10 },
-/*  24:          3, 4,           */  {  2,  7, 11,  2,  4,  7,  2,  3,  8,  4,  2,  8 },
-/*  72:          3,       6,     */  {  5, 11,  6,  5,  3, 11,  5, 10,  2,  3,  5,  2 },
-/*  80:             4,    6,     */  {  8,  6,  7,  8, 10,  6,  8,  4,  5, 10,  8,  5 },
-/* 160:                5,    7,  */  { 11,  5,  6, 11,  9,  5, 11,  7,  4,  9, 11,  4 },
-/*  95: 0, 1, 2, 3, 4,    6,     */  {  6,  5, 11,  5,  9, 11,  4,  7, 11,  4, 11,  9 },
-/* 175: 0, 1, 2, 3,    5,    7,  */  {  7,  6,  8,  6, 10,  8,  5,  4,  8,  5,  8, 10 },
-/* 183: 0, 1, 2,    4, 5,    7,  */  {  6, 11,  5, 11,  3,  5,  2, 10,  5,  2,  5,  3 },
-/* 231: 0, 1, 2,       5, 6, 7,  */  { 11,  7,  2,  7,  4,  2,  8,  3,  2,  8,  2,  4 },
-/* 123: 0, 1,    3, 4, 5, 6,     */  { 11,  2,  7,  2,  1,  7, 10,  6,  7, 10,  7,  1 },
-/* 219: 0, 1,    3, 4,    6, 7,  */  {  5, 10,  4, 10,  2,  4,  1,  9,  4,  1,  4,  2 },
-/* 189: 0,    2, 3, 4, 5,    7,  */  { 10,  1,  6,  1,  0,  6,  6,  0,  9,  5,  6,  9 },
-/* 237: 0,    2, 3,    5, 6, 7,  */  {  4,  9,  7,  9,  1,  7,  0,  8,  7,  0,  7,  1 },
-/* 245: 0,    2,    4, 5, 6, 7,  */  {  3,  0, 11,  0,  9, 11,  1,  2, 11,  1, 11,  9 },
-/* 126:    1, 2, 3, 4, 5, 6,     */  {  7,  8,  6,  8,  0,  6,  3, 11,  6,  3,  6,  0 },
-/* 222:    1, 2, 3, 4,    6, 7,  */  {  8,  4,  3,  4,  5,  3,  9,  0,  3,  9,  3,  5 },
-/* 250:    1,    3, 4, 5, 6, 7,  */  {  2,  3, 10,  3,  8, 10,  0,  1, 10,  0, 10,  8 }
-};
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-/**
- * \brief test table for case 4
- * Interior to test
- * When the test on the interior is negative : 2 first triangles
- * When the test on the interior is positive : 6 last triangles
- *
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char test4[8] = {
-/*  65: 0,                6,     */   7,
-/* 130:    1,                7,  */   7,
-/*  20:       2,    4,           */   7,
-/*  40:          3,    5,        */   7,
-/* 215: 0, 1, 2,    4,    6, 7,  */  -7,
-/* 235: 0, 1,    3,    5, 6, 7,  */  -7,
-/* 125: 0,    2, 3, 4, 5, 6,     */  -7,
-/* 190:    1, 2, 3, 4, 5,    7,  */  -7
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 4.1
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling4_1[8][6] = {
-/*  65: 0,                6,     */  {  0,  8,  3,  5, 10,  6 },
-/* 130:    1,                7,  */  {  0,  1,  9, 11,  7,  6 },
-/*  20:       2,    4,           */  {  1,  2, 10,  8,  4,  7 },
-/*  40:          3,    5,        */  {  9,  5,  4,  2,  3, 11 },
-/* 215: 0, 1, 2,    4,    6, 7,  */  {  4,  5,  9, 11,  3,  2 },
-/* 235: 0, 1,    3,    5, 6, 7,  */  { 10,  2,  1,  7,  4,  8 },
-/* 125: 0,    2, 3, 4, 5, 6,     */  {  9,  1,  0,  6,  7, 11 },
-/* 190:    1, 2, 3, 4, 5,    7,  */  {  3,  8,  0,  6, 10,  5 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 4.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling4_2[8][18] = {
-/*  65: 0,                6,     */  {  8,  5,  0,  5,  8,  6,  3,  6,  8,  6,  3, 10,  0, 10,  3, 10,  0,  5 },
-/* 130:    1,                7,  */  {  9,  6,  1,  6,  9,  7,  0,  7,  9,  7,  0, 11,  1, 11,  0, 11,  1,  6 },
-/*  20:       2,    4,           */  { 10,  7,  2,  7, 10,  4,  1,  4, 10,  4,  1,  8,  2,  8,  1,  8,  2,  7 },
-/*  40:          3,    5,        */  { 11,  4,  3,  4, 11,  5,  2,  5, 11,  5,  2,  9,  3,  9,  2,  9,  3,  4 },
-/* 215: 0, 1, 2,    4,    6, 7,  */  {  3,  4, 11,  5, 11,  4, 11,  5,  2,  9,  2,  5,  2,  9,  3,  4,  3,  9 },
-/* 235: 0, 1,    3,    5, 6, 7,  */  {  2,  7, 10,  4, 10,  7, 10,  4,  1,  8,  1,  4,  1,  8,  2,  7,  2,  8 },
-/* 125: 0,    2, 3, 4, 5, 6,     */  {  1,  6,  9,  7,  9,  6,  9,  7,  0, 11,  0,  7,  0, 11,  1,  6,  1, 11 },
-/* 190:    1, 2, 3, 4, 5,    7,  */  {  0,  5,  8,  6,  8,  5,  8,  6,  3, 10,  3,  6,  3, 10,  0,  5,  0, 10 }
-};
-//_____________________________________________________________________________
-
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 5
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling5[48][9] = {
-/*   7: 0, 1, 2,                 */  {  2,  8,  3,  2, 10,  8, 10,  9,  8 },
-/*  11: 0, 1,    3,              */  {  1, 11,  2,  1,  9, 11,  9,  8, 11 },
-/*  19: 0, 1,       4,           */  {  4,  1,  9,  4,  7,  1,  7,  3,  1 },
-/*  35: 0, 1,          5,        */  {  8,  5,  4,  8,  3,  5,  3,  1,  5 },
-/*  13: 0,    2, 3,              */  {  0, 10,  1,  0,  8, 10,  8, 11, 10 },
-/*  25: 0,       3, 4,           */  { 11,  4,  7, 11,  2,  4,  2,  0,  4 },
-/* 137: 0,       3,          7,  */  {  7,  0,  8,  7,  6,  0,  6,  2,  0 },
-/*  49: 0,          4, 5,        */  {  9,  3,  0,  9,  5,  3,  5,  7,  3 },
-/* 145: 0,          4,       7,  */  {  3,  6, 11,  3,  0,  6,  0,  4,  6 },
-/*  14:    1, 2, 3,              */  {  3,  9,  0,  3, 11,  9, 11, 10,  9 },
-/*  38:    1, 2,       5,        */  {  5,  2, 10,  5,  4,  2,  4,  0,  2 },
-/*  70:    1, 2,          6,     */  {  9,  6,  5,  9,  0,  6,  0,  2,  6 },
-/*  50:    1,       4, 5,        */  {  0,  7,  8,  0,  1,  7,  1,  5,  7 },
-/*  98:    1,          5, 6,     */  { 10,  0,  1, 10,  6,  0,  6,  4,  0 },
-/*  76:       2, 3,       6,     */  {  6,  3, 11,  6,  5,  3,  5,  1,  3 },
-/* 140:       2, 3,          7,  */  { 10,  7,  6, 10,  1,  7,  1,  3,  7 },
-/* 100:       2,       5, 6,     */  {  1,  4,  9,  1,  2,  4,  2,  6,  4 },
-/* 196:       2,          6, 7,  */  { 11,  1,  2, 11,  7,  1,  7,  5,  1 },
-/* 152:          3, 4,       7,  */  {  8,  2,  3,  8,  4,  2,  4,  6,  2 },
-/* 200:          3,       6, 7,  */  {  2,  5, 10,  2,  3,  5,  3,  7,  5 },
-/* 112:             4, 5, 6,     */  {  7, 10,  6,  7,  8, 10,  8,  9, 10 },
-/* 176:             4, 5,    7,  */  {  6,  9,  5,  6, 11,  9, 11,  8,  9 },
-/* 208:             4,    6, 7,  */  {  5,  8,  4,  5, 10,  8, 10, 11,  8 },
-/* 224:                5, 6, 7,  */  {  4, 11,  7,  4,  9, 11,  9, 10, 11 },
-/*  31: 0, 1, 2, 3, 4,           */  {  4,  7, 11,  4, 11,  9,  9, 11, 10 },
-/*  47: 0, 1, 2, 3,    5,        */  {  5,  4,  8,  5,  8, 10, 10,  8, 11 },
-/*  79: 0, 1, 2, 3,       6,     */  {  6,  5,  9,  6,  9, 11, 11,  9,  8 },
-/* 143: 0, 1, 2, 3,          7,  */  {  7,  6, 10,  7, 10,  8,  8, 10,  9 },
-/*  55: 0, 1, 2,    4, 5,        */  {  2, 10,  5,  2,  5,  3,  3,  5,  7 },
-/* 103: 0, 1, 2,       5, 6,     */  {  8,  3,  2,  8,  2,  4,  4,  2,  6 },
-/*  59: 0, 1,    3, 4, 5,        */  { 11,  2,  1, 11,  1,  7,  7,  1,  5 },
-/* 155: 0, 1,    3, 4,       7,  */  {  1,  9,  4,  1,  4,  2,  2,  4,  6 },
-/* 115: 0, 1,       4, 5, 6,     */  { 10,  6,  7, 10,  7,  1,  1,  7,  3 },
-/* 179: 0, 1,       4, 5,    7,  */  {  6, 11,  3,  6,  3,  5,  5,  3,  1 },
-/* 157: 0,    2, 3, 4,       7,  */  { 10,  1,  0, 10,  0,  6,  6,  0,  4 },
-/* 205: 0,    2, 3,       6, 7,  */  {  0,  8,  7,  0,  7,  1,  1,  7,  5 },
-/* 185: 0,       3, 4, 5,    7,  */  {  9,  5,  6,  9,  6,  0,  0,  6,  2 },
-/* 217: 0,       3, 4,    6, 7,  */  {  5, 10,  2,  5,  2,  4,  4,  2,  0 },
-/* 241: 0,          4, 5, 6, 7,  */  {  3,  0,  9,  3,  9, 11, 11,  9, 10 },
-/* 110:    1, 2, 3,    5, 6,     */  {  3, 11,  6,  3,  6,  0,  0,  6,  4 },
-/* 206:    1, 2, 3,       6, 7,  */  {  9,  0,  3,  9,  3,  5,  5,  3,  7 },
-/* 118:    1, 2,    4, 5, 6,     */  {  7,  8,  0,  7,  0,  6,  6,  0,  2 },
-/* 230:    1, 2,       5, 6, 7,  */  { 11,  7,  4, 11,  4,  2,  2,  4,  0 },
-/* 242:    1,       4, 5, 6, 7,  */  {  0,  1, 10,  0, 10,  8,  8, 10, 11 },
-/* 220:       2, 3, 4,    6, 7,  */  {  8,  4,  5,  8,  5,  3,  3,  5,  1 },
-/* 236:       2, 3,    5, 6, 7,  */  {  4,  9,  1,  4,  1,  7,  7,  1,  3 },
-/* 244:       2,    4, 5, 6, 7,  */  {  1,  2, 11,  1, 11,  9,  9, 11,  8 },
-/* 248:          3, 4, 5, 6, 7,  */  {  2,  3,  8,  2,  8, 10, 10,  8,  9 }
-};
-//_____________________________________________________________________________
-
-
-//_____________________________________________________________________________
-/**
- * \brief test table for case 6
- * 1 face to test + eventually the interior
- * When the test on the specified face is positive : 5 first triangles
- * When the test on the specified face is negative :
- * - if the test on the interior is negative : 3 middle triangles
- * - if the test on the interior is positive : 8 last triangles
- * The support edge for the interior test is marked as the 3rd column.
- *
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char test6[48][3] = {
-/*  67: 0, 1,             6,     */  {  2,  7,  10  },
-/* 131: 0, 1,                7,  */  {  4,  7,  11  },
-/*  21: 0,    2,    4,           */  {  5,  7,   1  },
-/*  69: 0,    2,          6,     */  {  5,  7,   3  },
-/*  41: 0,       3,    5,        */  {  1,  7,   9  },
-/*  73: 0,       3,       6,     */  {  3,  7,  10  },
-/*  81: 0,          4,    6,     */  {  6,  7,   5  },
-/*  97: 0,             5, 6,     */  {  1,  7,   8  },
-/* 193: 0,                6, 7,  */  {  4,  7,   8  },
-/*  22:    1, 2,    4,           */  {  1,  7,   8  },
-/* 134:    1, 2,             7,  */  {  3,  7,  11  },
-/*  42:    1,    3,    5,        */  {  5,  7,   2  },
-/* 138:    1,    3,          7,  */  {  5,  7,   0  },
-/* 146:    1,       4,       7,  */  {  1,  7,   9  },
-/* 162:    1,          5,    7,  */  {  6,  7,   6  },
-/* 194:    1,             6, 7,  */  {  2,  7,   9  },
-/*  28:       2, 3, 4,           */  {  4,  7,   8  },
-/*  44:       2, 3,    5,        */  {  2,  7,   9  },
-/*  52:       2,    4, 5,        */  {  2,  7,  10  },
-/*  84:       2,    4,    6,     */  {  6,  7,   7  },
-/* 148:       2,    4,       7,  */  {  3,  7,  10  },
-/*  56:          3, 4, 5,        */  {  4,  7,  11  },
-/* 104:          3,    5, 6,     */  {  3,  7,  11  },
-/* 168:          3,    5,    7,  */  {  6,  7,   4  },
-/*  87: 0, 1, 2,    4,    6,     */  { -6, -7,   4  },
-/* 151: 0, 1, 2,    4,       7,  */  { -3, -7,  11  },
-/* 199: 0, 1, 2,          6, 7,  */  { -4, -7,  11  },
-/* 107: 0, 1,    3,    5, 6,     */  { -3, -7,  10  },
-/* 171: 0, 1,    3,    5,    7,  */  { -6, -7,   7  },
-/* 203: 0, 1,    3,       6, 7,  */  { -2, -7,  10  },
-/* 211: 0, 1,       4,    6, 7,  */  { -2, -7,   9  },
-/* 227: 0, 1,          5, 6, 7,  */  { -4, -7,   8  },
-/*  61: 0,    2, 3, 4, 5,        */  { -2, -7,   9  },
-/*  93: 0,    2, 3, 4,    6,     */  { -6, -7,   6  },
-/* 109: 0,    2, 3,    5, 6,     */  { -1, -7,   9  },
-/* 117: 0,    2,    4, 5, 6,     */  { -5, -7,   0  },
-/* 213: 0,    2,    4,    6, 7,  */  { -5, -7,   2  },
-/* 121: 0,       3, 4, 5, 6,     */  { -3, -7,  11  },
-/* 233: 0,       3,    5, 6, 7,  */  { -1, -7,   8  },
-/*  62:    1, 2, 3, 4, 5,        */  { -4, -7,   8  },
-/* 158:    1, 2, 3, 4,       7,  */  { -1, -7,   8  },
-/* 174:    1, 2, 3,    5,    7,  */  { -6, -7,   5  },
-/* 182:    1, 2,    4, 5,    7,  */  { -3, -7,  10  },
-/* 214:    1, 2,    4,    6, 7,  */  { -1, -7,   9  },
-/* 186:    1,    3, 4, 5,    7,  */  { -5, -7,   3  },
-/* 234:    1,    3,    5, 6, 7,  */  { -5, -7,   1  },
-/* 124:       2, 3, 4, 5, 6,     */  { -4, -7,  11  },
-/* 188:       2, 3, 4, 5,    7,  */  { -2, -7,  10  }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 6.1.1
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling6_1_1[48][9] = {
-/*  67: 0, 1,             6,     */  {  6,  5, 10,  3,  1,  8,  9,  8,  1 },
-/* 131: 0, 1,                7,  */  { 11,  7,  6,  9,  3,  1,  3,  9,  8 },
-/*  21: 0,    2,    4,           */  {  1,  2, 10,  7,  0,  4,  0,  7,  3 },
-/*  69: 0,    2,          6,     */  {  3,  0,  8,  5,  2,  6,  2,  5,  1 },
-/*  41: 0,       3,    5,        */  {  5,  4,  9,  2,  0, 11,  8, 11,  0 },
-/*  73: 0,       3,       6,     */  { 10,  6,  5,  8,  2,  0,  2,  8, 11 },
-/*  81: 0,          4,    6,     */  { 10,  6,  5,  0,  4,  3,  7,  3,  4 },
-/*  97: 0,             5, 6,     */  {  3,  0,  8,  6,  4, 10,  9, 10,  4 },
-/* 193: 0,                6, 7,  */  {  8,  3,  0, 10,  7,  5,  7, 10, 11 },
-/*  22:    1, 2,    4,           */  {  8,  4,  7, 10,  0,  2,  0, 10,  9 },
-/* 134:    1, 2,             7,  */  {  7,  6, 11,  0,  2,  9, 10,  9,  2 },
-/*  42:    1,    3,    5,        */  {  2,  3, 11,  4,  1,  5,  1,  4,  0 },
-/* 138:    1,    3,          7,  */  {  0,  1,  9,  6,  3,  7,  3,  6,  2 },
-/* 146:    1,       4,       7,  */  {  9,  0,  1, 11,  4,  6,  4, 11,  8 },
-/* 162:    1,          5,    7,  */  { 11,  7,  6,  1,  5,  0,  4,  0,  5 },
-/* 194:    1,             6, 7,  */  {  0,  1,  9,  7,  5, 11, 10, 11,  5 },
-/*  28:       2, 3, 4,           */  {  4,  7,  8,  1,  3, 10, 11, 10,  3 },
-/*  44:       2, 3,    5,        */  {  9,  5,  4, 11,  1,  3,  1, 11, 10 },
-/*  52:       2,    4, 5,        */  { 10,  1,  2,  8,  5,  7,  5,  8,  9 },
-/*  84:       2,    4,    6,     */  {  8,  4,  7,  2,  6,  1,  5,  1,  6 },
-/* 148:       2,    4,       7,  */  {  1,  2, 10,  4,  6,  8, 11,  8,  6 },
-/*  56:          3, 4, 5,        */  {  2,  3, 11,  5,  7,  9,  8,  9,  7 },
-/* 104:          3,    5, 6,     */  { 11,  2,  3,  9,  6,  4,  6,  9, 10 },
-/* 168:          3,    5,    7,  */  {  9,  5,  4,  3,  7,  2,  6,  2,  7 },
-/*  87: 0, 1, 2,    4,    6,     */  {  4,  5,  9,  2,  7,  3,  7,  2,  6 },
-/* 151: 0, 1, 2,    4,       7,  */  {  3,  2, 11,  4,  6,  9, 10,  9,  6 },
-/* 199: 0, 1, 2,          6, 7,  */  { 11,  3,  2,  9,  7,  5,  7,  9,  8 },
-/* 107: 0, 1,    3,    5, 6,     */  { 10,  2,  1,  8,  6,  4,  6,  8, 11 },
-/* 171: 0, 1,    3,    5,    7,  */  {  7,  4,  8,  1,  6,  2,  6,  1,  5 },
-/* 203: 0, 1,    3,       6, 7,  */  {  2,  1, 10,  7,  5,  8,  9,  8,  5 },
-/* 211: 0, 1,       4,    6, 7,  */  {  4,  5,  9,  3,  1, 11, 10, 11,  1 },
-/* 227: 0, 1,          5, 6, 7,  */  {  8,  7,  4, 10,  3,  1,  3, 10, 11 },
-/*  61: 0,    2, 3, 4, 5,        */  {  9,  1,  0, 11,  5,  7,  5, 11, 10 },
-/*  93: 0,    2, 3, 4,    6,     */  {  6,  7, 11,  0,  5,  1,  5,  0,  4 },
-/* 109: 0,    2, 3,    5, 6,     */  {  1,  0,  9,  6,  4, 11,  8, 11,  4 },
-/* 117: 0,    2,    4, 5, 6,     */  {  9,  1,  0,  7,  3,  6,  2,  6,  3 },
-/* 213: 0,    2,    4,    6, 7,  */  { 11,  3,  2,  5,  1,  4,  0,  4,  1 },
-/* 121: 0,       3, 4, 5, 6,     */  { 11,  6,  7,  9,  2,  0,  2,  9, 10 },
-/* 233: 0,       3,    5, 6, 7,  */  {  7,  4,  8,  2,  0, 10,  9, 10,  0 },
-/*  62:    1, 2, 3, 4, 5,        */  {  0,  3,  8,  5,  7, 10, 11, 10,  7 },
-/* 158:    1, 2, 3, 4,       7,  */  {  8,  0,  3, 10,  4,  6,  4, 10,  9 },
-/* 174:    1, 2, 3,    5,    7,  */  {  5,  6, 10,  3,  4,  0,  4,  3,  7 },
-/* 182:    1, 2,    4, 5,    7,  */  {  5,  6, 10,  0,  2,  8, 11,  8,  2 },
-/* 214:    1, 2,    4,    6, 7,  */  {  9,  4,  5, 11,  0,  2,  0, 11,  8 },
-/* 186:    1,    3, 4, 5,    7,  */  {  8,  0,  3,  6,  2,  5,  1,  5,  2 },
-/* 234:    1,    3,    5, 6, 7,  */  { 10,  2,  1,  4,  0,  7,  3,  7,  0 },
-/* 124:       2, 3, 4, 5, 6,     */  {  6,  7, 11,  1,  3,  9,  8,  9,  3 },
-/* 188:       2, 3, 4, 5,    7,  */  { 10,  5,  6,  8,  1,  3,  1,  8,  9 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 6.1.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling6_1_2[48][21] = {
-/*  67: 0, 1,             6,     */  {  1, 10,  3,  6,  3, 10,  3,  6,  8,  5,  8,  6,  8,  5,  9,  1,  9,  5, 10,  1,  5 },
-/* 131: 0, 1,                7,  */  {  1, 11,  3, 11,  1,  6,  9,  6,  1,  6,  9,  7,  8,  7,  9,  7,  8,  3,  7,  3, 11 },
-/*  21: 0,    2,    4,           */  {  4,  1,  0,  1,  4, 10,  7, 10,  4, 10,  7,  2,  3,  2,  7,  2,  3,  0,  2,  0,  1 },
-/*  69: 0,    2,          6,     */  {  6,  3,  2,  3,  6,  8,  5,  8,  6,  8,  5,  0,  1,  0,  5,  0,  1,  2,  0,  2,  3 },
-/*  41: 0,       3,    5,        */  {  0,  9,  2,  5,  2,  9,  2,  5, 11,  4, 11,  5, 11,  4,  8,  0,  8,  4,  9,  0,  4 },
-/*  73: 0,       3,       6,     */  {  0, 10,  2, 10,  0,  5,  8,  5,  0,  5,  8,  6, 11,  6,  8,  6, 11,  2,  6,  2, 10 },
-/*  81: 0,          4,    6,     */  {  4,  5,  0, 10,  0,  5,  0, 10,  3,  6,  3, 10,  3,  6,  7,  4,  7,  6,  5,  4,  6 },
-/*  97: 0,             5, 6,     */  {  4,  8,  6,  3,  6,  8,  6,  3, 10,  0, 10,  3, 10,  0,  9,  4,  9,  0,  8,  4,  0 },
-/* 193: 0,                6, 7,  */  {  5,  8,  7,  8,  5,  0, 10,  0,  5,  0, 10,  3, 11,  3, 10,  3, 11,  7,  3,  7,  8 },
-/*  22:    1, 2,    4,           */  {  2,  8,  0,  8,  2,  7, 10,  7,  2,  7, 10,  4,  9,  4, 10,  4,  9,  0,  4,  0,  8 },
-/* 134:    1, 2,             7,  */  {  2, 11,  0,  7,  0, 11,  0,  7,  9,  6,  9,  7,  9,  6, 10,  2, 10,  6, 11,  2,  6 },
-/*  42:    1,    3,    5,        */  {  5,  2,  1,  2,  5, 11,  4, 11,  5, 11,  4,  3,  0,  3,  4,  3,  0,  1,  3,  1,  2 },
-/* 138:    1,    3,          7,  */  {  7,  0,  3,  0,  7,  9,  6,  9,  7,  9,  6,  1,  2,  1,  6,  1,  2,  3,  1,  3,  0 },
-/* 146:    1,       4,       7,  */  {  6,  9,  4,  9,  6,  1, 11,  1,  6,  1, 11,  0,  8,  0, 11,  0,  8,  4,  0,  4,  9 },
-/* 162:    1,          5,    7,  */  {  5,  6,  1, 11,  1,  6,  1, 11,  0,  7,  0, 11,  0,  7,  4,  5,  4,  7,  6,  5,  7 },
-/* 194:    1,             6, 7,  */  {  5,  9,  7,  0,  7,  9,  7,  0, 11,  1, 11,  0, 11,  1, 10,  5, 10,  1,  9,  5,  1 },
-/*  28:       2, 3, 4,           */  {  3,  8,  1,  4,  1,  8,  1,  4, 10,  7, 10,  4, 10,  7, 11,  3, 11,  7,  8,  3,  7 },
-/*  44:       2, 3,    5,        */  {  3,  9,  1,  9,  3,  4, 11,  4,  3,  4, 11,  5, 10,  5, 11,  5, 10,  1,  5,  1,  9 },
-/*  52:       2,    4, 5,        */  {  7, 10,  5, 10,  7,  2,  8,  2,  7,  2,  8,  1,  9,  1,  8,  1,  9,  5,  1,  5, 10 },
-/*  84:       2,    4,    6,     */  {  6,  7,  2,  8,  2,  7,  2,  8,  1,  4,  1,  8,  1,  4,  5,  6,  5,  4,  7,  6,  4 },
-/* 148:       2,    4,       7,  */  {  6, 10,  4,  1,  4, 10,  4,  1,  8,  2,  8,  1,  8,  2, 11,  6, 11,  2, 10,  6,  2 },
-/*  56:          3, 4, 5,        */  {  7, 11,  5,  2,  5, 11,  5,  2,  9,  3,  9,  2,  9,  3,  8,  7,  8,  3, 11,  7,  3 },
-/* 104:          3,    5, 6,     */  {  4, 11,  6, 11,  4,  3,  9,  3,  4,  3,  9,  2, 10,  2,  9,  2, 10,  6,  2,  6, 11 },
-/* 168:          3,    5,    7,  */  {  7,  4,  3,  9,  3,  4,  3,  9,  2,  5,  2,  9,  2,  5,  6,  7,  6,  5,  4,  7,  5 },
-/*  87: 0, 1, 2,    4,    6,     */  {  3,  4,  7,  4,  3,  9,  2,  9,  3,  9,  2,  5,  6,  5,  2,  5,  6,  7,  5,  7,  4 },
-/* 151: 0, 1, 2,    4,       7,  */  {  6, 11,  4,  3,  4, 11,  4,  3,  9,  2,  9,  3,  9,  2, 10,  6, 10,  2, 11,  6,  2 },
-/* 199: 0, 1, 2,          6, 7,  */  {  5, 11,  7, 11,  5,  2,  9,  2,  5,  2,  9,  3,  8,  3,  9,  3,  8,  7,  3,  7, 11 },
-/* 107: 0, 1,    3,    5, 6,     */  {  4, 10,  6, 10,  4,  1,  8,  1,  4,  1,  8,  2, 11,  2,  8,  2, 11,  6,  2,  6, 10 },
-/* 171: 0, 1,    3,    5,    7,  */  {  2,  7,  6,  7,  2,  8,  1,  8,  2,  8,  1,  4,  5,  4,  1,  4,  5,  6,  4,  6,  7 },
-/* 203: 0, 1,    3,       6, 7,  */  {  5, 10,  7,  2,  7, 10,  7,  2,  8,  1,  8,  2,  8,  1,  9,  5,  9,  1, 10,  5,  1 },
-/* 211: 0, 1,       4,    6, 7,  */  {  1,  9,  3,  4,  3,  9,  3,  4, 11,  5, 11,  4, 11,  5, 10,  1, 10,  5,  9,  1,  5 },
-/* 227: 0, 1,          5, 6, 7,  */  {  1,  8,  3,  8,  1,  4, 10,  4,  1,  4, 10,  7, 11,  7, 10,  7, 11,  3,  7,  3,  8 },
-/*  61: 0,    2, 3, 4, 5,        */  {  7,  9,  5,  9,  7,  0, 11,  0,  7,  0, 11,  1, 10,  1, 11,  1, 10,  5,  1,  5,  9 },
-/*  93: 0,    2, 3, 4,    6,     */  {  1,  6,  5,  6,  1, 11,  0, 11,  1, 11,  0,  7,  4,  7,  0,  7,  4,  5,  7,  5,  6 },
-/* 109: 0,    2, 3,    5, 6,     */  {  4,  9,  6,  1,  6,  9,  6,  1, 11,  0, 11,  1, 11,  0,  8,  4,  8,  0,  9,  4,  0 },
-/* 117: 0,    2,    4, 5, 6,     */  {  3,  0,  7,  9,  7,  0,  7,  9,  6,  1,  6,  9,  6,  1,  2,  3,  2,  1,  0,  3,  1 },
-/* 213: 0,    2,    4,    6, 7,  */  {  1,  2,  5, 11,  5,  2,  5, 11,  4,  3,  4, 11,  4,  3,  0,  1,  0,  3,  2,  1,  3 },
-/* 121: 0,       3, 4, 5, 6,     */  {  0, 11,  2, 11,  0,  7,  9,  7,  0,  7,  9,  6, 10,  6,  9,  6, 10,  2,  6,  2, 11 },
-/* 233: 0,       3,    5, 6, 7,  */  {  0,  8,  2,  7,  2,  8,  2,  7, 10,  4, 10,  7, 10,  4,  9,  0,  9,  4,  8,  0,  4 },
-/*  62:    1, 2, 3, 4, 5,        */  {  7,  8,  5,  0,  5,  8,  5,  0, 10,  3, 10,  0, 10,  3, 11,  7, 11,  3,  8,  7,  3 },
-/* 158:    1, 2, 3, 4,       7,  */  {  6,  8,  4,  8,  6,  3, 10,  3,  6,  3, 10,  0,  9,  0, 10,  0,  9,  4,  0,  4,  8 },
-/* 174:    1, 2, 3,    5,    7,  */  {  0,  5,  4,  5,  0, 10,  3, 10,  0, 10,  3,  6,  7,  6,  3,  6,  7,  4,  6,  4,  5 },
-/* 182:    1, 2,    4, 5,    7,  */  {  2, 10,  0,  5,  0, 10,  0,  5,  8,  6,  8,  5,  8,  6, 11,  2, 11,  6, 10,  2,  6 },
-/* 214:    1, 2,    4,    6, 7,  */  {  2,  9,  0,  9,  2,  5, 11,  5,  2,  5, 11,  4,  8,  4, 11,  4,  8,  0,  4,  0,  9 },
-/* 186:    1,    3, 4, 5,    7,  */  {  2,  3,  6,  8,  6,  3,  6,  8,  5,  0,  5,  8,  5,  0,  1,  2,  1,  0,  3,  2,  0 },
-/* 234:    1,    3,    5, 6, 7,  */  {  0,  1,  4, 10,  4,  1,  4, 10,  7,  2,  7, 10,  7,  2,  3,  0,  3,  2,  1,  0,  2 },
-/* 124:       2, 3, 4, 5, 6,     */  {  3, 11,  1,  6,  1, 11,  1,  6,  9,  7,  9,  6,  9,  7,  8,  3,  8,  7, 11,  3,  7 },
-/* 188:       2, 3, 4, 5,    7,  */  {  3, 10,  1, 10,  3,  6,  8,  6,  3,  6,  8,  5,  9,  5,  8,  5,  9,  1,  5,  1, 10 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 6.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling6_2[48][15] = {
-/*  67: 0, 1,             6,     */  {  1, 10,  3,  6,  3, 10,  3,  6,  8,  5,  8,  6,  8,  5,  9 },
-/* 131: 0, 1,                7,  */  {  1, 11,  3, 11,  1,  6,  9,  6,  1,  6,  9,  7,  8,  7,  9 },
-/*  21: 0,    2,    4,           */  {  4,  1,  0,  1,  4, 10,  7, 10,  4, 10,  7,  2,  3,  2,  7 },
-/*  69: 0,    2,          6,     */  {  6,  3,  2,  3,  6,  8,  5,  8,  6,  8,  5,  0,  1,  0,  5 },
-/*  41: 0,       3,    5,        */  {  0,  9,  2,  5,  2,  9,  2,  5, 11,  4, 11,  5, 11,  4,  8 },
-/*  73: 0,       3,       6,     */  {  0, 10,  2, 10,  0,  5,  8,  5,  0,  5,  8,  6, 11,  6,  8 },
-/*  81: 0,          4,    6,     */  {  4,  5,  0, 10,  0,  5,  0, 10,  3,  6,  3, 10,  3,  6,  7 },
-/*  97: 0,             5, 6,     */  {  4,  8,  6,  3,  6,  8,  6,  3, 10,  0, 10,  3, 10,  0,  9 },
-/* 193: 0,                6, 7,  */  {  5,  8,  7,  8,  5,  0, 10,  0,  5,  0, 10,  3, 11,  3, 10 },
-/*  22:    1, 2,    4,           */  {  2,  8,  0,  8,  2,  7, 10,  7,  2,  7, 10,  4,  9,  4, 10 },
-/* 134:    1, 2,             7,  */  {  2, 11,  0,  7,  0, 11,  0,  7,  9,  6,  9,  7,  9,  6, 10 },
-/*  42:    1,    3,    5,        */  {  5,  2,  1,  2,  5, 11,  4, 11,  5, 11,  4,  3,  0,  3,  4 },
-/* 138:    1,    3,          7,  */  {  7,  0,  3,  0,  7,  9,  6,  9,  7,  9,  6,  1,  2,  1,  6 },
-/* 146:    1,       4,       7,  */  {  6,  9,  4,  9,  6,  1, 11,  1,  6,  1, 11,  0,  8,  0, 11 },
-/* 162:    1,          5,    7,  */  {  5,  6,  1, 11,  1,  6,  1, 11,  0,  7,  0, 11,  0,  7,  4 },
-/* 194:    1,             6, 7,  */  {  5,  9,  7,  0,  7,  9,  7,  0, 11,  1, 11,  0, 11,  1, 10 },
-/*  28:       2, 3, 4,           */  {  3,  8,  1,  4,  1,  8,  1,  4, 10,  7, 10,  4, 10,  7, 11 },
-/*  44:       2, 3,    5,        */  {  3,  9,  1,  9,  3,  4, 11,  4,  3,  4, 11,  5, 10,  5, 11 },
-/*  52:       2,    4, 5,        */  {  7, 10,  5, 10,  7,  2,  8,  2,  7,  2,  8,  1,  9,  1,  8 },
-/*  84:       2,    4,    6,     */  {  6,  7,  2,  8,  2,  7,  2,  8,  1,  4,  1,  8,  1,  4,  5 },
-/* 148:       2,    4,       7,  */  {  6, 10,  4,  1,  4, 10,  4,  1,  8,  2,  8,  1,  8,  2, 11 },
-/*  56:          3, 4, 5,        */  {  7, 11,  5,  2,  5, 11,  5,  2,  9,  3,  9,  2,  9,  3,  8 },
-/* 104:          3,    5, 6,     */  {  4, 11,  6, 11,  4,  3,  9,  3,  4,  3,  9,  2, 10,  2,  9 },
-/* 168:          3,    5,    7,  */  {  7,  4,  3,  9,  3,  4,  3,  9,  2,  5,  2,  9,  2,  5,  6 },
-/*  87: 0, 1, 2,    4,    6,     */  {  3,  4,  7,  4,  3,  9,  2,  9,  3,  9,  2,  5,  6,  5,  2 },
-/* 151: 0, 1, 2,    4,       7,  */  {  6, 11,  4,  3,  4, 11,  4,  3,  9,  2,  9,  3,  9,  2, 10 },
-/* 199: 0, 1, 2,          6, 7,  */  {  5, 11,  7, 11,  5,  2,  9,  2,  5,  2,  9,  3,  8,  3,  9 },
-/* 107: 0, 1,    3,    5, 6,     */  {  4, 10,  6, 10,  4,  1,  8,  1,  4,  1,  8,  2, 11,  2,  8 },
-/* 171: 0, 1,    3,    5,    7,  */  {  2,  7,  6,  7,  2,  8,  1,  8,  2,  8,  1,  4,  5,  4,  1 },
-/* 203: 0, 1,    3,       6, 7,  */  {  5, 10,  7,  2,  7, 10,  7,  2,  8,  1,  8,  2,  8,  1,  9 },
-/* 211: 0, 1,       4,    6, 7,  */  {  1,  9,  3,  4,  3,  9,  3,  4, 11,  5, 11,  4, 11,  5, 10 },
-/* 227: 0, 1,          5, 6, 7,  */  {  1,  8,  3,  8,  1,  4, 10,  4,  1,  4, 10,  7, 11,  7, 10 },
-/*  61: 0,    2, 3, 4, 5,        */  {  7,  9,  5,  9,  7,  0, 11,  0,  7,  0, 11,  1, 10,  1, 11 },
-/*  93: 0,    2, 3, 4,    6,     */  {  1,  6,  5,  6,  1, 11,  0, 11,  1, 11,  0,  7,  4,  7,  0 },
-/* 109: 0,    2, 3,    5, 6,     */  {  4,  9,  6,  1,  6,  9,  6,  1, 11,  0, 11,  1, 11,  0,  8 },
-/* 117: 0,    2,    4, 5, 6,     */  {  3,  0,  7,  9,  7,  0,  7,  9,  6,  1,  6,  9,  6,  1,  2 },
-/* 213: 0,    2,    4,    6, 7,  */  {  1,  2,  5, 11,  5,  2,  5, 11,  4,  3,  4, 11,  4,  3,  0 },
-/* 121: 0,       3, 4, 5, 6,     */  {  0, 11,  2, 11,  0,  7,  9,  7,  0,  7,  9,  6, 10,  6,  9 },
-/* 233: 0,       3,    5, 6, 7,  */  {  0,  8,  2,  7,  2,  8,  2,  7, 10,  4, 10,  7, 10,  4,  9 },
-/*  62:    1, 2, 3, 4, 5,        */  {  7,  8,  5,  0,  5,  8,  5,  0, 10,  3, 10,  0, 10,  3, 11 },
-/* 158:    1, 2, 3, 4,       7,  */  {  6,  8,  4,  8,  6,  3, 10,  3,  6,  3, 10,  0,  9,  0, 10 },
-/* 174:    1, 2, 3,    5,    7,  */  {  0,  5,  4,  5,  0, 10,  3, 10,  0, 10,  3,  6,  7,  6,  3 },
-/* 182:    1, 2,    4, 5,    7,  */  {  2, 10,  0,  5,  0, 10,  0,  5,  8,  6,  8,  5,  8,  6, 11 },
-/* 214:    1, 2,    4,    6, 7,  */  {  2,  9,  0,  9,  2,  5, 11,  5,  2,  5, 11,  4,  8,  4, 11 },
-/* 186:    1,    3, 4, 5,    7,  */  {  2,  3,  6,  8,  6,  3,  6,  8,  5,  0,  5,  8,  5,  0,  1 },
-/* 234:    1,    3,    5, 6, 7,  */  {  0,  1,  4, 10,  4,  1,  4, 10,  7,  2,  7, 10,  7,  2,  3 },
-/* 124:       2, 3, 4, 5, 6,     */  {  3, 11,  1,  6,  1, 11,  1,  6,  9,  7,  9,  6,  9,  7,  8 },
-/* 188:       2, 3, 4, 5,    7,  */  {  3, 10,  1, 10,  3,  6,  8,  6,  3,  6,  8,  5,  9,  5,  8 }
-};
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-/**
- * \brief test table for case 7
- * 3 faces to test + eventually the interior
- * When the tests on the 3 specified faces are positive :
- * - if the test on the interior is positive : 5 first triangles
- * - if the test on the interior is negative : 9 next triangles
- * When the tests on the first  and the second specified faces are positive : 9 next triangles
- * When the tests on the first  and the third  specified faces are positive : 9 next triangles
- * When the tests on the second and the third  specified faces are positive : 9 next triangles
- * When the test on the first  specified face is positive : 5 next triangles
- * When the test on the second specified face is positive : 5 next triangles
- * When the test on the third  specified face is positive : 5 next triangles
- * When the tests on the 3 specified faces are negative : 3 last triangles
- * The support edge for the interior test is marked as the 5th column.
- *
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char test7[16][5] = {
-/*  37: 0,    2,       5,        */  {  1,  2,  5,  7,   1 },
-/* 133: 0,    2,             7,  */  {  3,  4,  5,  7,   3 },
-/* 161: 0,             5,    7,  */  {  4,  1,  6,  7,   4 },
-/*  26:    1,    3, 4,           */  {  4,  1,  5,  7,   0 },
-/*  74:    1,    3,       6,     */  {  2,  3,  5,  7,   2 },
-/*  82:    1,       4,    6,     */  {  1,  2,  6,  7,   5 },
-/* 164:       2,       5,    7,  */  {  2,  3,  6,  7,   6 },
-/*  88:          3, 4,    6,     */  {  3,  4,  6,  7,   7 },
-/* 167: 0, 1, 2,       5,    7,  */  { -3, -4, -6, -7,   7 },
-/*  91: 0, 1,    3, 4,    6,     */  { -2, -3, -6, -7,   6 },
-/* 173: 0,    2, 3,    5,    7,  */  { -1, -2, -6, -7,   5 },
-/* 181: 0,    2,    4, 5,    7,  */  { -2, -3, -5, -7,   2 },
-/* 229: 0,    2,       5, 6, 7,  */  { -4, -1, -5, -7,   0 },
-/*  94:    1, 2, 3, 4,    6,     */  { -4, -1, -6, -7,   4 },
-/* 122:    1,    3, 4, 5, 6,     */  { -3, -4, -5, -7,   3 },
-/* 218:    1,    3, 4,    6, 7,  */  { -1, -2, -5, -7,   1 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 7.1
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling7_1[16][9] = {
-/*  37: 0,    2,       5,        */  {  9,  5,  4, 10,  1,  2,  8,  3,  0 },
-/* 133: 0,    2,             7,  */  { 11,  7,  6,  8,  3,  0, 10,  1,  2 },
-/* 161: 0,             5,    7,  */  {  3,  0,  8,  5,  4,  9,  7,  6, 11 },
-/*  26:    1,    3, 4,           */  {  8,  4,  7,  9,  0,  1, 11,  2,  3 },
-/*  74:    1,    3,       6,     */  { 10,  6,  5, 11,  2,  3,  9,  0,  1 },
-/*  82:    1,       4,    6,     */  {  0,  1,  9,  6,  5, 10,  4,  7,  8 },
-/* 164:       2,       5,    7,  */  {  1,  2, 10,  7,  6, 11,  5,  4,  9 },
-/*  88:          3, 4,    6,     */  {  2,  3, 11,  4,  7,  8,  6,  5, 10 },
-/* 167: 0, 1, 2,       5,    7,  */  { 11,  3,  2,  8,  7,  4, 10,  5,  6 },
-/*  91: 0, 1,    3, 4,    6,     */  { 10,  2,  1, 11,  6,  7,  9,  4,  5 },
-/* 173: 0,    2, 3,    5,    7,  */  {  9,  1,  0, 10,  5,  6,  8,  7,  4 },
-/* 181: 0,    2,    4, 5,    7,  */  {  5,  6, 10,  3,  2, 11,  1,  0,  9 },
-/* 229: 0,    2,       5, 6, 7,  */  {  7,  4,  8,  1,  0,  9,  3,  2, 11 },
-/*  94:    1, 2, 3, 4,    6,     */  {  8,  0,  3,  9,  4,  5, 11,  6,  7 },
-/* 122:    1,    3, 4, 5, 6,     */  {  6,  7, 11,  0,  3,  8,  2,  1, 10 },
-/* 218:    1,    3, 4,    6, 7,  */  {  4,  5,  9,  2,  1, 10,  0,  3,  8 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 7.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling7_2[16][3][15] = {
-/*  37: 0,    2,       5,        */  {
- /* 1,0 */ {  1,  2, 10,  3,  4,  8,  4,  3,  5,  0,  5,  3,  5,  0,  9 },
- /* 0,1 */ {  3,  0,  8,  9,  1,  4,  2,  4,  1,  4,  2,  5, 10,  5,  2 },
- /* 1,1 */ {  9,  5,  4,  0, 10,  1, 10,  0,  8, 10,  8,  2,  3,  2,  8 }
-},
-/* 133: 0,    2,             7,  */  {
- /* 1,0 */ {  3,  0,  8,  1,  6, 10,  6,  1,  7,  2,  7,  1,  7,  2, 11 },
- /* 0,1 */ {  1,  2, 10, 11,  3,  6,  0,  6,  3,  6,  0,  7,  8,  7,  0 },
- /* 1,1 */ { 11,  7,  6,  2,  8,  3,  8,  2, 10,  8, 10,  0,  1,  0, 10 }
-},
-/* 161: 0,             5,    7,  */  {
- /* 1,0 */ {  9,  5,  4, 11,  3,  6,  0,  6,  3,  6,  0,  7,  8,  7,  0 },
- /* 0,1 */ { 11,  7,  6,  3,  4,  8,  4,  3,  5,  0,  5,  3,  5,  0,  9 },
- /* 1,1 */ {  3,  0,  8,  4,  9,  7, 11,  7,  9,  5, 11,  9, 11,  5,  6 }
-},
-/*  26:    1,    3, 4,           */  {
- /* 1,0 */ {  0,  1,  9,  2,  7, 11,  7,  2,  4,  3,  4,  2,  4,  3,  8 },
- /* 0,1 */ {  2,  3, 11,  8,  0,  7,  1,  7,  0,  7,  1,  4,  9,  4,  1 },
- /* 1,1 */ {  8,  4,  7,  3,  9,  0,  9,  3, 11,  9, 11,  1,  2,  1, 11 }
-},
-/*  74:    1,    3,       6,     */  {
- /* 1,0 */ {  2,  3, 11,  0,  5,  9,  5,  0,  6,  1,  6,  0,  6,  1, 10 },
- /* 0,1 */ {  0,  1,  9, 10,  2,  5,  3,  5,  2,  5,  3,  6, 11,  6,  3 },
- /* 1,1 */ {  6,  5, 10,  1, 11,  2, 11,  1,  9, 11,  9,  3,  0,  3,  9 }
-},
-/*  82:    1,       4,    6,     */  {
- /* 1,0 */ {  6,  5, 10,  8,  0,  7,  1,  7,  0,  7,  1,  4,  9,  4,  1 },
- /* 0,1 */ {  8,  4,  7,  0,  5,  9,  5,  0,  6,  1,  6,  0,  6,  1, 10 },
- /* 1,1 */ {  0,  1,  9,  5, 10,  4,  8,  4, 10,  6,  8, 10,  8,  6,  7 }
-},
-/* 164:       2,       5,    7,  */  {
- /* 1,0 */ { 11,  7,  6,  9,  1,  4,  2,  4,  1,  4,  2,  5, 10,  5,  2 },
- /* 0,1 */ {  9,  5,  4,  1,  6, 10,  6,  1,  7,  2,  7,  1,  7,  2, 11 },
- /* 1,1 */ {  1,  2, 10,  6, 11,  5,  9,  5, 11,  7,  9, 11,  9,  7,  4 }
-},
-/*  88:          3, 4,    6,     */  {
- /* 1,0 */ {  8,  4,  7, 10,  2,  5,  3,  5,  2,  5,  3,  6, 11,  6,  3 },
- /* 0,1 */ {  6,  5, 10,  2,  7, 11,  7,  2,  4,  3,  4,  2,  4,  3,  8 },
- /* 1,1 */ {  2,  3, 11,  7,  8,  6, 10,  6,  8,  4, 10,  8, 10,  4,  5 }
-},
-/* 167: 0, 1, 2,       5,    7,  */  {
- /* 1,0 */ {  7,  4,  8,  5,  2, 10,  2,  5,  3,  6,  3,  5,  3,  6, 11 },
- /* 0,1 */ { 10,  5,  6, 11,  7,  2,  4,  2,  7,  2,  4,  3,  8,  3,  4 },
- /* 1,1 */ { 11,  3,  2,  6,  8,  7,  8,  6, 10,  8, 10,  4,  5,  4, 10 }
-},
-/*  91: 0, 1,    3, 4,    6,     */  {
- /* 1,0 */ {  6,  7, 11,  4,  1,  9,  1,  4,  2,  5,  2,  4,  2,  5, 10 },
- /* 0,1 */ {  4,  5,  9, 10,  6,  1,  7,  1,  6,  1,  7,  2, 11,  2,  7 },
- /* 1,1 */ { 10,  2,  1,  5, 11,  6, 11,  5,  9, 11,  9,  7,  4,  7,  9 }
-},
-/* 173: 0,    2, 3,    5,    7,  */  {
- /* 1,0 */ { 10,  5,  6,  7,  0,  8,  0,  7,  1,  4,  1,  7,  1,  4,  9 },
- /* 0,1 */ {  7,  4,  8,  9,  5,  0,  6,  0,  5,  0,  6,  1, 10,  1,  6 },
- /* 1,1 */ {  9,  1,  0,  4, 10,  5, 10,  4,  8, 10,  8,  6,  7,  6,  8 }
-},
-/* 181: 0,    2,    4, 5,    7,  */  {
- /* 1,0 */ { 11,  3,  2,  9,  5,  0,  6,  0,  5,  0,  6,  1, 10,  1,  6 },
- /* 0,1 */ {  9,  1,  0,  5,  2, 10,  2,  5,  3,  6,  3,  5,  3,  6, 11 },
- /* 1,1 */ { 10,  5,  6,  2, 11,  1,  9,  1, 11,  3,  9, 11,  9,  3,  0 }
-},
-/* 229: 0,    2,       5, 6, 7,  */  {
- /* 1,0 */ {  9,  1,  0, 11,  7,  2,  4,  2,  7,  2,  4,  3,  8,  3,  4 },
- /* 0,1 */ { 11,  3,  2,  7,  0,  8,  0,  7,  1,  4,  1,  7,  1,  4,  9 },
- /* 1,1 */ {  7,  4,  8,  0,  9,  3, 11,  3,  9,  1, 11,  9, 11,  1,  2 }
-},
-/*  94:    1, 2, 3, 4,    6,     */  {
- /* 1,0 */ {  4,  5,  9,  6,  3, 11,  3,  6,  0,  7,  0,  6,  0,  7,  8 },
- /* 0,1 */ {  6,  7, 11,  8,  4,  3,  5,  3,  4,  3,  5,  0,  9,  0,  5 },
- /* 1,1 */ {  8,  0,  3,  7,  9,  4,  9,  7, 11,  9, 11,  5,  6,  5, 11 }
-},
-/* 122:    1,    3, 4, 5, 6,     */  {
- /* 1,0 */ {  8,  0,  3, 10,  6,  1,  7,  1,  6,  1,  7,  2, 11,  2,  7 },
- /* 0,1 */ { 10,  2,  1,  6,  3, 11,  3,  6,  0,  7,  0,  6,  0,  7,  8 },
- /* 1,1 */ {  6,  7, 11,  3,  8,  2, 10,  2,  8,  0, 10,  8, 10,  0,  1 }
-},
-/* 218:    1,    3, 4,    6, 7,  */  {
- /* 1,0 */ { 10,  2,  1,  8,  4,  3,  5,  3,  4,  3,  5,  0,  9,  0,  5 },
- /* 0,1 */ {  8,  0,  3,  4,  1,  9,  1,  4,  2,  5,  2,  4,  2,  5, 10 },
- /* 1,1 */ {  4,  5,  9,  1, 10,  0,  8,  0, 10,  2,  8, 10,  8,  2,  3 } }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 7.3
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling7_3[16][3][27] = {
-/*  37: 0,    2,       5,        */  {
- /* 1,0 */ { 12,  2, 10, 12, 10,  5, 12,  5,  4, 12,  4,  8, 12,  8,  3, 12,  3,  0, 12,  0,  9, 12,  9,  1, 12,  1,  2 },
- /* 0,1 */ { 12,  5,  4, 12,  4,  8, 12,  8,  3, 12,  3,  2, 12,  2, 10, 12, 10,  1, 12,  1,  0, 12,  0,  9, 12,  9,  5 },
- /* 1,1 */ {  5,  4, 12, 10,  5, 12,  2, 10, 12,  3,  2, 12,  8,  3, 12,  0,  8, 12,  1,  0, 12,  9,  1, 12,  4,  9, 12 }
-},
-/* 133: 0,    2,             7,  */  {
- /* 1,0 */ { 12,  0,  8, 12,  8,  7, 12,  7,  6, 12,  6, 10, 12, 10,  1, 12,  1,  2, 12,  2, 11, 12, 11,  3, 12,  3,  0 },
- /* 0,1 */ { 12,  7,  6, 12,  6, 10, 12, 10,  1, 12,  1,  0, 12,  0,  8, 12,  8,  3, 12,  3,  2, 12,  2, 11, 12, 11,  7 },
- /* 1,1 */ {  7,  6, 12,  8,  7, 12,  0,  8, 12,  1,  0, 12, 10,  1, 12,  2, 10, 12,  3,  2, 12, 11,  3, 12,  6, 11, 12 }
-},
-/* 161: 0,             5,    7,  */  {
- /* 1,0 */ {  9,  5, 12,  0,  9, 12,  3,  0, 12, 11,  3, 12,  6, 11, 12,  7,  6, 12,  8,  7, 12,  4,  8, 12,  5,  4, 12 },
- /* 0,1 */ {  3,  0, 12, 11,  3, 12,  6, 11, 12,  5,  6, 12,  9,  5, 12,  4,  9, 12,  7,  4, 12,  8,  7, 12,  0,  8, 12 },
- /* 1,1 */ { 12,  3,  0, 12,  0,  9, 12,  9,  5, 12,  5,  6, 12,  6, 11, 12, 11,  7, 12,  7,  4, 12,  4,  8, 12,  8,  3 }
-},
-/*  26:    1,    3, 4,           */  {
- /* 1,0 */ { 12,  1,  9, 12,  9,  4, 12,  4,  7, 12,  7, 11, 12, 11,  2, 12,  2,  3, 12,  3,  8, 12,  8,  0, 12,  0,  1 },
- /* 0,1 */ { 12,  4,  7, 12,  7, 11, 12, 11,  2, 12,  2,  1, 12,  1,  9, 12,  9,  0, 12,  0,  3, 12,  3,  8, 12,  8,  4 },
- /* 1,1 */ {  4,  7, 12,  9,  4, 12,  1,  9, 12,  2,  1, 12, 11,  2, 12,  3, 11, 12,  0,  3, 12,  8,  0, 12,  7,  8, 12 }
-},
-/*  74:    1,    3,       6,     */  {
- /* 1,0 */ { 12,  3, 11, 12, 11,  6, 12,  6,  5, 12,  5,  9, 12,  9,  0, 12,  0,  1, 12,  1, 10, 12, 10,  2, 12,  2,  3 },
- /* 0,1 */ { 12,  6,  5, 12,  5,  9, 12,  9,  0, 12,  0,  3, 12,  3, 11, 12, 11,  2, 12,  2,  1, 12,  1, 10, 12, 10,  6 },
- /* 1,1 */ {  6,  5, 12, 11,  6, 12,  3, 11, 12,  0,  3, 12,  9,  0, 12,  1,  9, 12,  2,  1, 12, 10,  2, 12,  5, 10, 12 }
-},
-/*  82:    1,       4,    6,     */  {
- /* 1,0 */ { 10,  6, 12,  1, 10, 12,  0,  1, 12,  8,  0, 12,  7,  8, 12,  4,  7, 12,  9,  4, 12,  5,  9, 12,  6,  5, 12 },
- /* 0,1 */ {  0,  1, 12,  8,  0, 12,  7,  8, 12,  6,  7, 12, 10,  6, 12,  5, 10, 12,  4,  5, 12,  9,  4, 12,  1,  9, 12 },
- /* 1,1 */ { 12,  0,  1, 12,  1, 10, 12, 10,  6, 12,  6,  7, 12,  7,  8, 12,  8,  4, 12,  4,  5, 12,  5,  9, 12,  9,  0 }
-},
-/* 164:       2,       5,    7,  */  {
- /* 1,0 */ { 11,  7, 12,  2, 11, 12,  1,  2, 12,  9,  1, 12,  4,  9, 12,  5,  4, 12, 10,  5, 12,  6, 10, 12,  7,  6, 12 },
- /* 0,1 */ {  1,  2, 12,  9,  1, 12,  4,  9, 12,  7,  4, 12, 11,  7, 12,  6, 11, 12,  5,  6, 12, 10,  5, 12,  2, 10, 12 },
- /* 1,1 */ { 12,  1,  2, 12,  2, 11, 12, 11,  7, 12,  7,  4, 12,  4,  9, 12,  9,  5, 12,  5,  6, 12,  6, 10, 12, 10,  1 }
-},
-/*  88:          3, 4,    6,     */  {
- /* 1,0 */ {  8,  4, 12,  3,  8, 12,  2,  3, 12, 10,  2, 12,  5, 10, 12,  6,  5, 12, 11,  6, 12,  7, 11, 12,  4,  7, 12 },
- /* 0,1 */ {  2,  3, 12, 10,  2, 12,  5, 10, 12,  4,  5, 12,  8,  4, 12,  7,  8, 12,  6,  7, 12, 11,  6, 12,  3, 11, 12 },
- /* 1,1 */ { 12,  2,  3, 12,  3,  8, 12,  8,  4, 12,  4,  5, 12,  5, 10, 12, 10,  6, 12,  6,  7, 12,  7, 11, 12, 11,  2 }
-},
-/* 167: 0, 1, 2,       5,    7,  */  {
- /* 1,0 */ { 12,  4,  8, 12,  8,  3, 12,  3,  2, 12,  2, 10, 12, 10,  5, 12,  5,  6, 12,  6, 11, 12, 11,  7, 12,  7,  4 },
- /* 0,1 */ { 12,  3,  2, 12,  2, 10, 12, 10,  5, 12,  5,  4, 12,  4,  8, 12,  8,  7, 12,  7,  6, 12,  6, 11, 12, 11,  3 },
- /* 1,1 */ {  3,  2, 12,  8,  3, 12,  4,  8, 12,  5,  4, 12, 10,  5, 12,  6, 10, 12,  7,  6, 12, 11,  7, 12,  2, 11, 12 }
-},
-/*  91: 0, 1,    3, 4,    6,     */  {
- /* 1,0 */ { 12,  7, 11, 12, 11,  2, 12,  2,  1, 12,  1,  9, 12,  9,  4, 12,  4,  5, 12,  5, 10, 12, 10,  6, 12,  6,  7 },
- /* 0,1 */ { 12,  2,  1, 12,  1,  9, 12,  9,  4, 12,  4,  7, 12,  7, 11, 12, 11,  6, 12,  6,  5, 12,  5, 10, 12, 10,  2 },
- /* 1,1 */ {  2,  1, 12, 11,  2, 12,  7, 11, 12,  4,  7, 12,  9,  4, 12,  5,  9, 12,  6,  5, 12, 10,  6, 12,  1, 10, 12 }
-},
-/* 173: 0,    2, 3,    5,    7,  */  {
- /* 1,0 */ { 12,  6, 10, 12, 10,  1, 12,  1,  0, 12,  0,  8, 12,  8,  7, 12,  7,  4, 12,  4,  9, 12,  9,  5, 12,  5,  6 },
- /* 0,1 */ { 12,  1,  0, 12,  0,  8, 12,  8,  7, 12,  7,  6, 12,  6, 10, 12, 10,  5, 12,  5,  4, 12,  4,  9, 12,  9,  1 },
- /* 1,1 */ {  1,  0, 12, 10,  1, 12,  6, 10, 12,  7,  6, 12,  8,  7, 12,  4,  8, 12,  5,  4, 12,  9,  5, 12,  0,  9, 12 }
-},
-/* 181: 0,    2,    4, 5,    7,  */  {
- /* 1,0 */ { 11,  3, 12,  6, 11, 12,  5,  6, 12,  9,  5, 12,  0,  9, 12,  1,  0, 12, 10,  1, 12,  2, 10, 12,  3,  2, 12 },
- /* 0,1 */ {  5,  6, 12,  9,  5, 12,  0,  9, 12,  3,  0, 12, 11,  3, 12,  2, 11, 12,  1,  2, 12, 10,  1, 12,  6, 10, 12 },
- /* 1,1 */ { 12,  5,  6, 12,  6, 11, 12, 11,  3, 12,  3,  0, 12,  0,  9, 12,  9,  1, 12,  1,  2, 12,  2, 10, 12, 10,  5 }
-},
-/* 229: 0,    2,       5, 6, 7,  */  {
- /* 1,0 */ {  9,  1, 12,  4,  9, 12,  7,  4, 12, 11,  7, 12,  2, 11, 12,  3,  2, 12,  8,  3, 12,  0,  8, 12,  1,  0, 12 },
- /* 0,1 */ {  7,  4, 12, 11,  7, 12,  2, 11, 12,  1,  2, 12,  9,  1, 12,  0,  9, 12,  3,  0, 12,  8,  3, 12,  4,  8, 12 },
- /* 1,1 */ { 12,  7,  4, 12,  4,  9, 12,  9,  1, 12,  1,  2, 12,  2, 11, 12, 11,  3, 12,  3,  0, 12,  0,  8, 12,  8,  7 }
-},
-/*  94:    1, 2, 3, 4,    6,     */  {
- /* 1,0 */ { 12,  5,  9, 12,  9,  0, 12,  0,  3, 12,  3, 11, 12, 11,  6, 12,  6,  7, 12,  7,  8, 12,  8,  4, 12,  4,  5 },
- /* 0,1 */ { 12,  0,  3, 12,  3, 11, 12, 11,  6, 12,  6,  5, 12,  5,  9, 12,  9,  4, 12,  4,  7, 12,  7,  8, 12,  8,  0 },
- /* 1,1 */ {  0,  3, 12,  9,  0, 12,  5,  9, 12,  6,  5, 12, 11,  6, 12,  7, 11, 12,  4,  7, 12,  8,  4, 12,  3,  8, 12 }
-},
-/* 122:    1,    3, 4, 5, 6,     */  {
- /* 1,0 */ {  8,  0, 12,  7,  8, 12,  6,  7, 12, 10,  6, 12,  1, 10, 12,  2,  1, 12, 11,  2, 12,  3, 11, 12,  0,  3, 12 },
- /* 0,1 */ {  6,  7, 12, 10,  6, 12,  1, 10, 12,  0,  1, 12,  8,  0, 12,  3,  8, 12,  2,  3, 12, 11,  2, 12,  7, 11, 12 },
- /* 1,1 */ { 12,  6,  7, 12,  7,  8, 12,  8,  0, 12,  0,  1, 12,  1, 10, 12, 10,  2, 12,  2,  3, 12,  3, 11, 12, 11,  6 }
-},
-/* 218:    1,    3, 4,    6, 7,  */  {
- /* 1,0 */ { 10,  2, 12,  5, 10, 12,  4,  5, 12,  8,  4, 12,  3,  8, 12,  0,  3, 12,  9,  0, 12,  1,  9, 12,  2,  1, 12 },
- /* 0,1 */ {  4,  5, 12,  8,  4, 12,  3,  8, 12,  2,  3, 12, 10,  2, 12,  1, 10, 12,  0,  1, 12,  9,  0, 12,  5,  9, 12 },
- /* 1,1 */ { 12,  4,  5, 12,  5, 10, 12, 10,  2, 12,  2,  3, 12,  3,  8, 12,  8,  0, 12,  0,  1, 12,  1,  9, 12,  9,  4 } }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 7.4.1
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling7_4_1[16][15] = {
-/*  37: 0,    2,       5,        */  {  3,  4,  8,  4,  3, 10,  2, 10,  3,  4, 10,  5,  9,  1,  0 },
-/* 133: 0,    2,             7,  */  {  1,  6, 10,  6,  1,  8,  0,  8,  1,  6,  8,  7, 11,  3,  2 },
-/* 161: 0,             5,    7,  */  { 11,  3,  6,  9,  6,  3,  6,  9,  5,  0,  9,  3,  7,  4,  8 },
-/*  26:    1,    3, 4,           */  {  2,  7, 11,  7,  2,  9,  1,  9,  2,  7,  9,  4,  8,  0,  3 },
-/*  74:    1,    3,       6,     */  {  0,  5,  9,  5,  0, 11,  3, 11,  0,  5, 11,  6, 10,  2,  1 },
-/*  82:    1,       4,    6,     */  {  8,  0,  7, 10,  7,  0,  7, 10,  6,  1, 10,  0,  4,  5,  9 },
-/* 164:       2,       5,    7,  */  {  9,  1,  4, 11,  4,  1,  4, 11,  7,  2, 11,  1,  5,  6, 10 },
-/*  88:          3, 4,    6,     */  { 10,  2,  5,  8,  5,  2,  5,  8,  4,  3,  8,  2,  6,  7, 11 },
-/* 167: 0, 1, 2,       5,    7,  */  {  5,  2, 10,  2,  5,  8,  4,  8,  5,  2,  8,  3, 11,  7,  6 },
-/*  91: 0, 1,    3, 4,    6,     */  {  4,  1,  9,  1,  4, 11,  7, 11,  4,  1, 11,  2, 10,  6,  5 },
-/* 173: 0,    2, 3,    5,    7,  */  {  7,  0,  8,  0,  7, 10,  6, 10,  7,  0, 10,  1,  9,  5,  4 },
-/* 181: 0,    2,    4, 5,    7,  */  {  9,  5,  0, 11,  0,  5,  0, 11,  3,  6, 11,  5,  1,  2, 10 },
-/* 229: 0,    2,       5, 6, 7,  */  { 11,  7,  2,  9,  2,  7,  2,  9,  1,  4,  9,  7,  3,  0,  8 },
-/*  94:    1, 2, 3, 4,    6,     */  {  6,  3, 11,  3,  6,  9,  5,  9,  6,  3,  9,  0,  8,  4,  7 },
-/* 122:    1,    3, 4, 5, 6,     */  { 10,  6,  1,  8,  1,  6,  1,  8,  0,  7,  8,  6,  2,  3, 11 },
-/* 218:    1,    3, 4,    6, 7,  */  {  8,  4,  3, 10,  3,  4,  3, 10,  2,  5, 10,  4,  0,  1,  9 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 7.4.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling7_4_2[16][27] = {
-/*  37: 0,    2,       5,        */  {   9,  4,  8,  4,  9,  5, 10,  5,  9,  1, 10,  9, 10,  1,  2,  0,  2,  1,  2,  0,  3,  8,  3,  0,  9,  8,  0 },
-/* 133: 0,    2,             7,  */  {  11,  6, 10,  6, 11,  7,  8,  7, 11,  3,  8, 11,  8,  3,  0,  2,  0,  3,  0,  2,  1, 10,  1,  2, 11, 10,  2 },
-/* 161: 0,             5,    7,  */  {  11,  3,  8,  0,  8,  3,  8,  0,  9,  8,  9,  4,  5,  4,  9,  4,  5,  7,  6,  7,  5,  7,  6, 11,  7, 11,  8 },
-/*  26:    1,    3, 4,           */  {   8,  7, 11,  7,  8,  4,  9,  4,  8,  0,  9,  8,  9,  0,  1,  3,  1,  0,  1,  3,  2, 11,  2,  3,  8, 11,  3 },
-/*  74:    1,    3,       6,     */  {  10,  5,  9,  5, 10,  6, 11,  6, 10,  2, 11, 10, 11,  2,  3,  1,  3,  2,  3,  1,  0,  9,  0,  1, 10,  9,  1 },
-/*  82:    1,       4,    6,     */  {   8,  0,  9,  1,  9,  0,  9,  1, 10,  9, 10,  5,  6,  5, 10,  5,  6,  4,  7,  4,  6,  4,  7,  8,  4,  8,  9 },
-/* 164:       2,       5,    7,  */  {   9,  1, 10,  2, 10,  1, 10,  2, 11, 10, 11,  6,  7,  6, 11,  6,  7,  5,  4,  5,  7,  5,  4,  9,  5,  9, 10 },
-/*  88:          3, 4,    6,     */  {  10,  2, 11,  3, 11,  2, 11,  3,  8, 11,  8,  7,  4,  7,  8,  7,  4,  6,  5,  6,  4,  6,  5, 10,  6, 10, 11 },
-/* 167: 0, 1, 2,       5,    7,  */  {  11,  2, 10,  2, 11,  3,  8,  3, 11,  7,  8, 11,  8,  7,  4,  6,  4,  7,  4,  6,  5, 10,  5,  6, 11, 10,  6 },
-/*  91: 0, 1,    3, 4,    6,     */  {  10,  1,  9,  1, 10,  2, 11,  2, 10,  6, 11, 10, 11,  6,  7,  5,  7,  6,  7,  5,  4,  9,  4,  5, 10,  9,  5 },
-/* 173: 0,    2, 3,    5,    7,  */  {   9,  0,  8,  0,  9,  1, 10,  1,  9,  5, 10,  9, 10,  5,  6,  4,  6,  5,  6,  4,  7,  8,  7,  4,  9,  8,  4 },
-/* 181: 0,    2,    4, 5,    7,  */  {   9,  5, 10,  6, 10,  5, 10,  6, 11, 10, 11,  2,  3,  2, 11,  2,  3,  1,  0,  1,  3,  1,  0,  9,  1,  9, 10 },
-/* 229: 0,    2,       5, 6, 7,  */  {  11,  7,  8,  4,  8,  7,  8,  4,  9,  8,  9,  0,  1,  0,  9,  0,  1,  3,  2,  3,  1,  3,  2, 11,  3, 11,  8 },
-/*  94:    1, 2, 3, 4,    6,     */  {   8,  3, 11,  3,  8,  0,  9,  0,  8,  4,  9,  8,  9,  4,  5,  7,  5,  4,  5,  7,  6, 11,  6,  7,  8, 11,  7 },
-/* 122:    1,    3, 4, 5, 6,     */  {  10,  6, 11,  7, 11,  6, 11,  7,  8, 11,  8,  3,  0,  3,  8,  3,  0,  2,  1,  2,  0,  2,  1, 10,  2, 10, 11 },
-/* 218:    1,    3, 4,    6, 7,  */  {   8,  4,  9,  5,  9,  4,  9,  5, 10,  9, 10,  1,  2,  1, 10,  1,  2,  0,  3,  0,  2,  0,  3,  8,  0,  8,  9 }
-};
-//_____________________________________________________________________________
-
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 8
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling8[6][6] = {
-/*  15: 0, 1, 2, 3,              */  { 9,  8, 10, 10,  8, 11 },
-/*  51: 0, 1,       4, 5,        */  { 1,  5,  3,  3,  5,  7 },
-/* 153: 0,       3, 4,       7,  */  { 0,  4,  2,  4,  6,  2 },
-/* 102:    1, 2,       5, 6,     */  { 0,  2,  4,  4,  2,  6 },
-/* 204:       2, 3,       6, 7,  */  { 1,  3,  5,  3,  7,  5 },
-/* 240:             4, 5, 6, 7,  */  { 9, 10,  8, 10, 11,  8 }
-};
-//_____________________________________________________________________________
-
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 9
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling9[8][12] = {
-/*  39: 0, 1, 2,       5,        */  {  2, 10,  5,  3,  2,  5,  3,  5,  4,  3,  4,  8 },
-/*  27: 0, 1,    3, 4,           */  {  4,  7, 11,  9,  4, 11,  9, 11,  2,  9,  2,  1 },
-/* 141: 0,    2, 3,          7,  */  { 10,  7,  6,  1,  7, 10,  1,  8,  7,  1,  0,  8 },
-/* 177: 0,          4, 5,    7,  */  {  3,  6, 11,  0,  6,  3,  0,  5,  6,  0,  9,  5 },
-/*  78:    1, 2, 3,       6,     */  {  3, 11,  6,  0,  3,  6,  0,  6,  5,  0,  5,  9 },
-/* 114:    1,       4, 5, 6,     */  { 10,  6,  7,  1, 10,  7,  1,  7,  8,  1,  8,  0 },
-/* 228:       2,       5, 6, 7,  */  {  4, 11,  7,  9, 11,  4,  9,  2, 11,  9,  1,  2 },
-/* 216:          3, 4,    6, 7,  */  {  2,  5, 10,  3,  5,  2,  3,  4,  5,  3,  8,  4 }
-};
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-/**
- * \brief test table for case 10
- * 2 faces to test + eventually the interior
- * When the tests on both specified faces are positive : 4 middle triangles (1)
- * When the test on the first  specified face is positive : 8 first triangles
- * When the test on the second specified face is positive : 8 next triangles
- * When the tests on both specified faces are negative :
- * - if the test on the interior is negative : 4 middle triangles
- * - if the test on the interior is positive : 8 last triangles
- *
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char test10[6][3] = {
-/* 195: 0, 1,             6, 7,  */  {  2,  4,  7 },
-/*  85: 0,    2,    4,    6,     */  {  5,  6,  7 },
-/* 105: 0,       3,    5, 6,     */  {  1,  3,  7 },
-/* 150:    1, 2,    4,       7,  */  {  1,  3,  7 },
-/* 170:    1,    3,    5,    7,  */  {  5,  6,  7 },
-/*  60:       2, 3, 4, 5,        */  {  2,  4,  7 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 10.1.1
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling10_1_1[6][12] = {
-/* 195: 0, 1,             6, 7,  */  {  5, 10,  7, 11,  7, 10,  8,  1,  9,  1,  8,  3 },
-/*  85: 0,    2,    4,    6,     */  {  1,  2,  5,  6,  5,  2,  4,  3,  0,  3,  4,  7 },
-/* 105: 0,       3,    5, 6,     */  { 11,  0,  8,  0, 11,  2,  4,  9,  6, 10,  6,  9 },
-/* 150:    1, 2,    4,       7,  */  {  9,  0, 10,  2, 10,  0,  6,  8,  4,  8,  6, 11 },
-/* 170:    1,    3,    5,    7,  */  {  7,  2,  3,  2,  7,  6,  0,  1,  4,  5,  4,  1 },
-/*  60:       2, 3, 4, 5,        */  {  7,  9,  5,  9,  7,  8, 10,  1, 11,  3, 11,  1 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 10.1.1 inverted
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling10_1_1_[6][12] = {
-/* 195: 0, 1,             6, 7,  */  {  5,  9,  7,  8,  7,  9, 11,  1, 10,  1, 11,  3 },
-/*  85: 0,    2,    4,    6,     */  {  3,  2,  7,  6,  7,  2,  4,  1,  0,  1,  4,  5 },
-/* 105: 0,       3,    5, 6,     */  { 10,  0,  9,  0, 10,  2,  4,  8,  6, 11,  6,  8 },
-/* 150:    1, 2,    4,       7,  */  {  8,  0, 11,  2, 11,  0,  6,  9,  4,  9,  6, 10 },
-/* 170:    1,    3,    5,    7,  */  {  5,  2,  1,  2,  5,  6,  0,  3,  4,  7,  4,  3 },
-/*  60:       2, 3, 4, 5,        */  {  7, 10,  5, 10,  7, 11,  9,  1,  8,  3,  8,  1 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 10.1.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling10_1_2[6][24] = {
-/* 195: 0, 1,             6, 7,  */  {  3, 11,  7,  3,  7,  8,  9,  8,  7,  5,  9,  7,  9,  5, 10,  9, 10,  1,  3,  1, 10, 11,  3, 10 },
-/*  85: 0,    2,    4,    6,     */  {  7,  6,  5,  7,  5,  4,  0,  4,  5,  1,  0,  5,  0,  1,  2,  0,  2,  3,  7,  3,  2,  6,  7,  2 },
-/* 105: 0,       3,    5, 6,     */  { 11,  2, 10,  6, 11, 10, 11,  6,  4, 11,  4,  8,  0,  8,  4,  9,  0,  4,  0,  9, 10,  0, 10,  2 },
-/* 150:    1, 2,    4,       7,  */  { 11,  2, 10, 11, 10,  6,  4,  6, 10,  9,  4, 10,  4,  9,  0,  4,  0,  8, 11,  8,  0,  2, 11,  0 },
-/* 170:    1,    3,    5,    7,  */  {  7,  6,  5,  4,  7,  5,  7,  4,  0,  7,  0,  3,  2,  3,  0,  1,  2,  0,  2,  1,  5,  2,  5,  6 },
-/*  60:       2, 3, 4, 5,        */  {  7,  8,  3, 11,  7,  3,  7, 11, 10,  7, 10,  5,  9,  5, 10,  1,  9, 10,  9,  1,  3,  9,  3,  8 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 10.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling10_2[6][24] = {
-/* 195: 0, 1,             6, 7,  */  { 12,  5,  9, 12,  9,  8, 12,  8,  3, 12,  3,  1, 12,  1, 10, 12, 10, 11, 12, 11,  7, 12,  7,  5 },
-/*  85: 0,    2,    4,    6,     */  { 12,  1,  0, 12,  0,  4, 12,  4,  7, 12,  7,  3, 12,  3,  2, 12,  2,  6, 12,  6,  5, 12,  5,  1 },
-/* 105: 0,       3,    5, 6,     */  {  4,  8, 12,  6,  4, 12, 10,  6, 12,  9, 10, 12,  0,  9, 12,  2,  0, 12, 11,  2, 12,  8, 11, 12 },
-/* 150:    1, 2,    4,       7,  */  { 12,  9,  4, 12,  4,  6, 12,  6, 11, 12, 11,  8, 12,  8,  0, 12,  0,  2, 12,  2, 10, 12, 10,  9 },
-/* 170:    1,    3,    5,    7,  */  {  0,  3, 12,  4,  0, 12,  5,  4, 12,  1,  5, 12,  2,  1, 12,  6,  2, 12,  7,  6, 12,  3,  7, 12 },
-/*  60:       2, 3, 4, 5,        */  { 10,  5, 12, 11, 10, 12,  3, 11, 12,  1,  3, 12,  9,  1, 12,  8,  9, 12,  7,  8, 12,  5,  7, 12 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 10.2 inverted
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling10_2_[6][24] = {
-/* 195: 0, 1,             6, 7,  */  {  8,  7, 12,  9,  8, 12,  1,  9, 12,  3,  1, 12, 11,  3, 12, 10, 11, 12,  5, 10, 12,  7,  5, 12 },
-/*  85: 0,    2,    4,    6,     */  {  4,  5, 12,  0,  4, 12,  3,  0, 12,  7,  3, 12,  6,  7, 12,  2,  6, 12,  1,  2, 12,  5,  1, 12 },
-/* 105: 0,       3,    5, 6,     */  { 12, 11,  6, 12,  6,  4, 12,  4,  9, 12,  9, 10, 12, 10,  2, 12,  2,  0, 12,  0,  8, 12,  8, 11 },
-/* 150:    1, 2,    4,       7,  */  {  6, 10, 12,  4,  6, 12,  8,  4, 12, 11,  8, 12,  2, 11, 12,  0,  2, 12,  9,  0, 12, 10,  9, 12 },
-/* 170:    1,    3,    5,    7,  */  { 12,  7,  4, 12,  4,  0, 12,  0,  1, 12,  1,  5, 12,  5,  6, 12,  6,  2, 12,  2,  3, 12,  3,  7 },
-/*  60:       2, 3, 4, 5,        */  { 12,  7, 11, 12, 11, 10, 12, 10,  1, 12,  1,  3, 12,  3,  8, 12,  8,  9, 12,  9,  5, 12,  5,  7 }
-};
-//_____________________________________________________________________________
-
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 11
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling11[12][12] = {
-/*  23: 0, 1, 2,    4,           */  { 2, 10,  9,  2,  9,  7,  2,  7,  3,  7,  9,  4 },
-/* 139: 0, 1,    3,          7,  */  { 1,  6,  2,  1,  8,  6,  1,  9,  8,  8,  7,  6 },
-/*  99: 0, 1,          5, 6,     */  { 8,  3,  1,  8,  1,  6,  8,  6,  4,  6,  1, 10 },
-/*  77: 0,    2, 3,       6,     */  { 0,  8, 11,  0, 11,  5,  0,  5,  1,  5, 11,  6 },
-/*  57: 0,       3, 4, 5,        */  { 9,  5,  7,  9,  7,  2,  9,  2,  0,  2,  7, 11 },
-/* 209: 0,          4,    6, 7,  */  { 5,  0,  4,  5, 11,  0,  5, 10, 11, 11,  3,  0 },
-/*  46:    1, 2, 3,    5,        */  { 5,  4,  0,  5,  0, 11,  5, 11, 10, 11,  0,  3 },
-/* 198:    1, 2,          6, 7,  */  { 9,  7,  5,  9,  2,  7,  9,  0,  2,  2, 11,  7 },
-/* 178:    1,       4, 5,    7,  */  { 0, 11,  8,  0,  5, 11,  0,  1,  5,  5,  6, 11 },
-/* 156:       2, 3, 4,       7,  */  { 8,  1,  3,  8,  6,  1,  8,  4,  6,  6, 10,  1 },
-/* 116:       2,    4, 5, 6,     */  { 1,  2,  6,  1,  6,  8,  1,  8,  9,  8,  6,  7 },
-/* 232:          3,    5, 6, 7,  */  { 2,  9, 10,  2,  7,  9,  2,  3,  7,  7,  4,  9 }
-};
-//_____________________________________________________________________________
-
-
-//_____________________________________________________________________________
-/**
- * \brief test table for case 12
- * 2 faces to test + eventually the interior
- * When the tests on both specified faces are positive : 4 middle triangles (1)
- * When the test on the first  specified face is positive : 8 first triangles
- * When the test on the second specified face is positive : 8 next triangles
- * When the tests on both specified faces are negative :
- * - if the test on the interior is negative : 4 middle triangles
- * - if the test on the interior is positive : 8 last triangles
- * The support edge for the interior test is marked as the 4th column.
- *
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char test12[24][4] = {
-/* 135: 0, 1, 2,             7,  */  {  4,  3,  7,  11 },
-/*  75: 0, 1,    3,       6,     */  {  3,  2,  7,  10 },
-/*  83: 0, 1,       4,    6,     */  {  2,  6,  7,   5 },
-/* 163: 0, 1,          5,    7,  */  {  6,  4,  7,   7 },
-/*  45: 0,    2, 3,    5,        */  {  2,  1,  7,   9 },
-/*  53: 0,    2,    4, 5,        */  {  5,  2,  7,   1 },
-/* 149: 0,    2,    4,       7,  */  {  5,  3,  7,   2 },
-/* 101: 0,    2,       5, 6,     */  {  5,  1,  7,   0 },
-/* 197: 0,    2,          6, 7,  */  {  5,  4,  7,   3 },
-/*  89: 0,       3, 4,    6,     */  {  6,  3,  7,   6 },
-/* 169: 0,       3,    5,    7,  */  {  1,  6,  7,   4 },
-/* 225: 0,             5, 6, 7,  */  {  1,  4,  7,   8 },
-/*  30:    1, 2, 3, 4,           */  {  4,  1,  7,   8 },
-/*  86:    1, 2,    4,    6,     */  {  6,  1,  7,   4 },
-/* 166:    1, 2,       5,    7,  */  {  3,  6,  7,   6 },
-/*  58:    1,    3, 4, 5,        */  {  4,  5,  7,   3 },
-/* 154:    1,    3, 4,       7,  */  {  1,  5,  7,   0 },
-/* 106:    1,    3,    5, 6,     */  {  3,  5,  7,   2 },
-/* 202:    1,    3,       6, 7,  */  {  2,  5,  7,   1 },
-/* 210:    1,       4,    6, 7,  */  {  1,  2,  7,   9 },
-/*  92:       2, 3, 4,    6,     */  {  4,  6,  7,   7 },
-/* 172:       2, 3,    5,    7,  */  {  6,  2,  7,   5 },
-/* 180:       2,    4, 5,    7,  */  {  2,  3,  7,  10 },
-/* 120:          3, 4, 5, 6,     */  {  3,  4,  7,  11 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 12.1.1
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling12_1_1[24][12] = {
-/* 135: 0, 1, 2,             7,  */  {  7,  6, 11, 10,  3,  2,  3, 10,  8,  9,  8, 10 },
-/*  75: 0, 1,    3,       6,     */  {  6,  5, 10,  9,  2,  1,  2,  9, 11,  8, 11,  9 },
-/*  83: 0, 1,       4,    6,     */  { 10,  6,  5,  7,  9,  4,  9,  7,  1,  3,  1,  7 },
-/* 163: 0, 1,          5,    7,  */  {  7,  6, 11,  4,  8,  5,  3,  5,  8,  5,  3,  1 },
-/*  45: 0,    2, 3,    5,        */  {  5,  4,  9,  8,  1,  0,  1,  8, 10, 11, 10,  8 },
-/*  53: 0,    2,    4, 5,        */  {  1,  2, 10,  0,  9,  3,  5,  3,  9,  3,  5,  7 },
-/* 149: 0,    2,    4,       7,  */  { 10,  1,  2,  0, 11,  3, 11,  0,  6,  4,  6,  0 },
-/* 101: 0,    2,       5, 6,     */  {  8,  3,  0,  2,  9,  1,  9,  2,  4,  6,  4,  2 },
-/* 197: 0,    2,          6, 7,  */  {  3,  0,  8,  2, 11,  1,  7,  1, 11,  1,  7,  5 },
-/*  89: 0,       3, 4,    6,     */  {  6,  5, 10,  7, 11,  4,  2,  4, 11,  4,  2,  0 },
-/* 169: 0,       3,    5,    7,  */  {  9,  5,  4,  6,  8,  7,  8,  6,  0,  2,  0,  6 },
-/* 225: 0,             5, 6, 7,  */  {  8,  3,  0,  7,  4, 11,  9, 11,  4, 11,  9, 10 },
-/*  30:    1, 2, 3, 4,           */  {  4,  7,  8, 11,  0,  3,  0, 11,  9, 10,  9, 11 },
-/*  86:    1, 2,    4,    6,     */  {  4,  7,  8,  5,  9,  6,  0,  6,  9,  6,  0,  2 },
-/* 166:    1, 2,       5,    7,  */  { 11,  7,  6,  4, 10,  5, 10,  4,  2,  0,  2,  4 },
-/*  58:    1,    3, 4, 5,        */  { 11,  2,  3,  1,  8,  0,  8,  1,  7,  5,  7,  1 },
-/* 154:    1,    3, 4,       7,  */  {  0,  1,  9,  3,  8,  2,  4,  2,  8,  2,  4,  6 },
-/* 106:    1,    3,    5, 6,     */  {  2,  3, 11,  1, 10,  0,  6,  0, 10,  0,  6,  4 },
-/* 202:    1,    3,       6, 7,  */  {  9,  0,  1,  3, 10,  2, 10,  3,  5,  7,  5,  3 },
-/* 210:    1,       4,    6, 7,  */  {  9,  0,  1,  4,  5,  8, 10,  8,  5,  8, 10, 11 },
-/*  92:       2, 3, 4,    6,     */  {  8,  4,  7,  5, 11,  6, 11,  5,  3,  1,  3,  5 },
-/* 172:       2, 3,    5,    7,  */  {  5,  4,  9,  6, 10,  7,  1,  7, 10,  7,  1,  3 },
-/* 180:       2,    4, 5,    7,  */  { 10,  1,  2,  5,  6,  9, 11,  9,  6,  9, 11,  8 },
-/* 120:          3, 4, 5, 6,     */  { 11,  2,  3,  6,  7, 10,  8, 10,  7, 10,  8,  9 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 12.1.1 inverted
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling12_1_1_[24][12] = {
-/* 135: 0, 1, 2,             7,  */  {  3,  2, 11, 10,  7,  6,  7, 10,  8,  9,  8, 10 },
-/*  75: 0, 1,    3,       6,     */  {  2,  1, 10,  9,  6,  5,  6,  9, 11,  8, 11,  9 },
-/*  83: 0, 1,       4,    6,     */  {  9,  4,  5,  7, 10,  6, 10,  7,  1,  3,  1,  7 },
-/* 163: 0, 1,          5,    7,  */  {  7,  4,  8,  6, 11,  5,  3,  5, 11,  5,  3,  1 },
-/*  45: 0,    2, 3,    5,        */  {  1,  0,  9,  8,  5,  4,  5,  8, 10, 11, 10,  8 },
-/*  53: 0,    2,    4, 5,        */  {  1,  0,  9,  2, 10,  3,  5,  3, 10,  3,  5,  7 },
-/* 149: 0,    2,    4,       7,  */  { 11,  3,  2,  0, 10,  1, 10,  0,  6,  4,  6,  0 },
-/* 101: 0,    2,       5, 6,     */  {  9,  1,  0,  2,  8,  3,  8,  2,  4,  6,  4,  2 },
-/* 197: 0,    2,          6, 7,  */  {  3,  2, 11,  0,  8,  1,  7,  1,  8,  1,  7,  5 },
-/*  89: 0,       3, 4,    6,     */  {  6,  7, 11,  5, 10,  4,  2,  4, 10,  4,  2,  0 },
-/* 169: 0,       3,    5,    7,  */  {  8,  7,  4,  6,  9,  5,  9,  6,  0,  2,  0,  6 },
-/* 225: 0,             5, 6, 7,  */  {  8,  7,  4,  3,  0, 11,  9, 11,  0, 11,  9, 10 },
-/*  30:    1, 2, 3, 4,           */  {  0,  3,  8, 11,  4,  7,  4, 11,  9, 10,  9, 11 },
-/*  86:    1, 2,    4,    6,     */  {  4,  5,  9,  7,  8,  6,  0,  6,  8,  6,  0,  2 },
-/* 166:    1, 2,       5,    7,  */  { 10,  5,  6,  4, 11,  7, 11,  4,  2,  0,  2,  4 },
-/*  58:    1,    3, 4, 5,        */  {  8,  0,  3,  1, 11,  2, 11,  1,  7,  5,  7,  1 },
-/* 154:    1,    3, 4,       7,  */  {  0,  3,  8,  1,  9,  2,  4,  2,  9,  2,  4,  6 },
-/* 106:    1,    3,    5, 6,     */  {  2,  1, 10,  3, 11,  0,  6,  0, 11,  0,  6,  4 },
-/* 202:    1,    3,       6, 7,  */  { 10,  2,  1,  3,  9,  0,  9,  3,  5,  7,  5,  3 },
-/* 210:    1,       4,    6, 7,  */  {  9,  4,  5,  0,  1,  8, 10,  8,  1,  8, 10, 11 },
-/*  92:       2, 3, 4,    6,     */  { 11,  6,  7,  5,  8,  4,  8,  5,  3,  1,  3,  5 },
-/* 172:       2, 3,    5,    7,  */  {  5,  6, 10,  4,  9,  7,  1,  7,  9,  7,  1,  3 },
-/* 180:       2,    4, 5,    7,  */  { 10,  5,  6,  1,  2,  9, 11,  9,  2,  9, 11,  8 },
-/* 120:          3, 4, 5, 6,     */  { 11,  6,  7,  2,  3, 10,  8, 10,  3, 10,  8,  9 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 12.1.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling12_1_2[24][24] = {
-/* 135: 0, 1, 2,             7,  */  {  7,  3, 11,  3,  7,  8,  9,  8,  7,  6,  9,  7,  9,  6, 10,  2, 10,  6, 11,  2,  6,  2, 11,  3 },
-/*  75: 0, 1,    3,       6,     */  {  6,  2, 10,  2,  6, 11,  8, 11,  6,  5,  8,  6,  8,  5,  9,  1,  9,  5, 10,  1,  5,  1, 10,  2 },
-/*  83: 0, 1,       4,    6,     */  { 10,  9,  5,  9, 10,  1,  3,  1, 10,  6,  3, 10,  3,  6,  7,  4,  7,  6,  5,  4,  6,  4,  5,  9 },
-/* 163: 0, 1,          5,    7,  */  {  7,  8, 11,  3, 11,  8, 11,  3,  1, 11,  1,  6,  5,  6,  1,  6,  5,  4,  6,  4,  7,  8,  7,  4 },
-/*  45: 0,    2, 3,    5,        */  {  5,  1,  9,  1,  5, 10, 11, 10,  5,  4, 11,  5, 11,  4,  8,  0,  8,  4,  9,  0,  4,  0,  9,  1 },
-/*  53: 0,    2,    4, 5,        */  {  1,  9, 10,  5, 10,  9, 10,  5,  7, 10,  7,  2,  3,  2,  7,  2,  3,  0,  2,  0,  1,  9,  1,  0 },
-/* 149: 0,    2,    4,       7,  */  { 10, 11,  2, 11, 10,  6,  4,  6, 10,  1,  4, 10,  4,  1,  0,  3,  0,  1,  2,  3,  1,  3,  2, 11 },
-/* 101: 0,    2,       5, 6,     */  {  8,  9,  0,  9,  8,  4,  6,  4,  8,  3,  6,  8,  6,  3,  2,  1,  2,  3,  0,  1,  3,  1,  0,  9 },
-/* 197: 0,    2,          6, 7,  */  {  3, 11,  8,  7,  8, 11,  8,  7,  5,  8,  5,  0,  1,  0,  5,  0,  1,  2,  0,  2,  3, 11,  3,  2 },
-/*  89: 0,       3, 4,    6,     */  {  6, 11, 10,  2, 10, 11, 10,  2,  0, 10,  0,  5,  4,  5,  0,  5,  4,  7,  5,  7,  6, 11,  6,  7 },
-/* 169: 0,       3,    5,    7,  */  {  9,  8,  4,  8,  9,  0,  2,  0,  9,  5,  2,  9,  2,  5,  6,  7,  6,  5,  4,  7,  5,  7,  4,  8 },
-/* 225: 0,             5, 6, 7,  */  {  8,  4,  0,  9,  0,  4,  0,  9, 10,  0, 10,  3, 11,  3, 10,  3, 11,  7,  3,  7,  8,  4,  8,  7 },
-/*  30:    1, 2, 3, 4,           */  {  4,  0,  8,  0,  4,  9, 10,  9,  4,  7, 10,  4, 10,  7, 11,  3, 11,  7,  8,  3,  7,  3,  8,  0 },
-/*  86:    1, 2,    4,    6,     */  {  4,  9,  8,  0,  8,  9,  8,  0,  2,  8,  2,  7,  6,  7,  2,  7,  6,  5,  7,  5,  4,  9,  4,  5 },
-/* 166:    1, 2,       5,    7,  */  { 11, 10,  6, 10, 11,  2,  0,  2, 11,  7,  0, 11,  0,  7,  4,  5,  4,  7,  6,  5,  7,  5,  6, 10 },
-/*  58:    1,    3, 4, 5,        */  { 11,  8,  3,  8, 11,  7,  5,  7, 11,  2,  5, 11,  5,  2,  1,  0,  1,  2,  3,  0,  2,  0,  3,  8 },
-/* 154:    1,    3, 4,       7,  */  {  0,  8,  9,  4,  9,  8,  9,  4,  6,  9,  6,  1,  2,  1,  6,  1,  2,  3,  1,  3,  0,  8,  0,  3 },
-/* 106:    1,    3,    5, 6,     */  {  2, 10, 11,  6, 11, 10, 11,  6,  4, 11,  4,  3,  0,  3,  4,  3,  0,  1,  3,  1,  2, 10,  2,  1 },
-/* 202:    1,    3,       6, 7,  */  {  9, 10,  1, 10,  9,  5,  7,  5,  9,  0,  7,  9,  7,  0,  3,  2,  3,  0,  1,  2,  0,  2,  1, 10 },
-/* 210:    1,       4,    6, 7,  */  {  9,  5,  1, 10,  1,  5,  1, 10, 11,  1, 11,  0,  8,  0, 11,  0,  8,  4,  0,  4,  9,  5,  9,  4 },
-/*  92:       2, 3, 4,    6,     */  {  8, 11,  7, 11,  8,  3,  1,  3,  8,  4,  1,  8,  1,  4,  5,  6,  5,  4,  7,  6,  4,  6,  7, 11 },
-/* 172:       2, 3,    5,    7,  */  {  5, 10,  9,  1,  9, 10,  9,  1,  3,  9,  3,  4,  7,  4,  3,  4,  7,  6,  4,  6,  5, 10,  5,  6 },
-/* 180:       2,    4, 5,    7,  */  { 10,  6,  2, 11,  2,  6,  2, 11,  8,  2,  8,  1,  9,  1,  8,  1,  9,  5,  1,  5, 10,  6, 10,  5 },
-/* 120:          3, 4, 5, 6,     */  { 11,  7,  3,  8,  3,  7,  3,  8,  9,  3,  9,  2, 10,  2,  9,  2, 10,  6,  2,  6, 11,  7, 11,  6 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 12.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling12_2[24][24] = {
-/* 135: 0, 1, 2,             7,  */  {   9,  8, 12, 10,  9, 12,  2, 10, 12,  3,  2, 12, 11,  3, 12,  6, 11, 12,  7,  6, 12,  8,  7, 12 },
-/*  75: 0, 1,    3,       6,     */  {   8, 11, 12,  9,  8, 12,  1,  9, 12,  2,  1, 12, 10,  2, 12,  5, 10, 12,  6,  5, 12, 11,  6, 12 },
-/*  83: 0, 1,       4,    6,     */  {   3,  1, 12,  7,  3, 12,  4,  7, 12,  9,  4, 12,  5,  9, 12,  6,  5, 12, 10,  6, 12,  1, 10, 12 },
-/* 163: 0, 1,          5,    7,  */  {  12,  3,  1, 12,  1,  5, 12,  5,  6, 12,  6, 11, 12, 11,  7, 12,  7,  4, 12,  4,  8, 12,  8,  3 },
-/*  45: 0,    2, 3,    5,        */  {  11, 10, 12,  8, 11, 12,  0,  8, 12,  1,  0, 12,  9,  1, 12,  4,  9, 12,  5,  4, 12, 10,  5, 12 },
-/*  53: 0,    2,    4, 5,        */  {  12,  5,  7, 12,  7,  3, 12,  3,  2, 12,  2, 10, 12, 10,  1, 12,  1,  0, 12,  0,  9, 12,  9,  5 },
-/* 149: 0,    2,    4,       7,  */  {   4,  6, 12,  0,  4, 12,  1,  0, 12, 10,  1, 12,  2, 10, 12,  3,  2, 12, 11,  3, 12,  6, 11, 12 },
-/* 101: 0,    2,       5, 6,     */  {   6,  4, 12,  2,  6, 12,  3,  2, 12,  8,  3, 12,  0,  8, 12,  1,  0, 12,  9,  1, 12,  4,  9, 12 },
-/* 197: 0,    2,          6, 7,  */  {  12,  7,  5, 12,  5,  1, 12,  1,  0, 12,  0,  8, 12,  8,  3, 12,  3,  2, 12,  2, 11, 12, 11,  7 },
-/*  89: 0,       3, 4,    6,     */  {  12,  2,  0, 12,  0,  4, 12,  4,  5, 12,  5, 10, 12, 10,  6, 12,  6,  7, 12,  7, 11, 12, 11,  2 },
-/* 169: 0,       3,    5,    7,  */  {   2,  0, 12,  6,  2, 12,  7,  6, 12,  8,  7, 12,  4,  8, 12,  5,  4, 12,  9,  5, 12,  0,  9, 12 },
-/* 225: 0,             5, 6, 7,  */  {  12,  9, 10, 12, 10, 11, 12, 11,  7, 12,  7,  4, 12,  4,  8, 12,  8,  3, 12,  3,  0, 12,  0,  9 },
-/*  30:    1, 2, 3, 4,           */  {  10,  9, 12, 11, 10, 12,  7, 11, 12,  4,  7, 12,  8,  4, 12,  3,  8, 12,  0,  3, 12,  9,  0, 12 },
-/*  86:    1, 2,    4,    6,     */  {  12,  0,  2, 12,  2,  6, 12,  6,  7, 12,  7,  8, 12,  8,  4, 12,  4,  5, 12,  5,  9, 12,  9,  0 },
-/* 166:    1, 2,       5,    7,  */  {   0,  2, 12,  4,  0, 12,  5,  4, 12, 10,  5, 12,  6, 10, 12,  7,  6, 12, 11,  7, 12,  2, 11, 12 },
-/*  58:    1,    3, 4, 5,        */  {   5,  7, 12,  1,  5, 12,  0,  1, 12,  8,  0, 12,  3,  8, 12,  2,  3, 12, 11,  2, 12,  7, 11, 12 },
-/* 154:    1,    3, 4,       7,  */  {  12,  4,  6, 12,  6,  2, 12,  2,  3, 12,  3,  8, 12,  8,  0, 12,  0,  1, 12,  1,  9, 12,  9,  4 },
-/* 106:    1,    3,    5, 6,     */  {  12,  6,  4, 12,  4,  0, 12,  0,  1, 12,  1, 10, 12, 10,  2, 12,  2,  3, 12,  3, 11, 12, 11,  6 },
-/* 202:    1,    3,       6, 7,  */  {   7,  5, 12,  3,  7, 12,  2,  3, 12, 10,  2, 12,  1, 10, 12,  0,  1, 12,  9,  0, 12,  5,  9, 12 },
-/* 210:    1,       4,    6, 7,  */  {  12, 10, 11, 12, 11,  8, 12,  8,  0, 12,  0,  1, 12,  1,  9, 12,  9,  4, 12,  4,  5, 12,  5, 10 },
-/*  92:       2, 3, 4,    6,     */  {   1,  3, 12,  5,  1, 12,  6,  5, 12, 11,  6, 12,  7, 11, 12,  4,  7, 12,  8,  4, 12,  3,  8, 12 },
-/* 172:       2, 3,    5,    7,  */  {  12,  1,  3, 12,  3,  7, 12,  7,  4, 12,  4,  9, 12,  9,  5, 12,  5,  6, 12,  6, 10, 12, 10,  1 },
-/* 180:       2,    4, 5,    7,  */  {  12, 11,  8, 12,  8,  9, 12,  9,  1, 12,  1,  2, 12,  2, 10, 12, 10,  5, 12,  5,  6, 12,  6, 11 },
-/* 120:          3, 4, 5, 6,     */  {  12,  8,  9, 12,  9, 10, 12, 10,  2, 12,  2,  3, 12,  3, 11, 12, 11,  6, 12,  6,  7, 12,  7,  8 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 12.2 inverted
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling12_2_[24][24] = {
-/* 135: 0, 1, 2,             7,  */  { 12,  2, 11, 12, 11,  7, 12,  7,  6, 12,  6, 10, 12, 10,  9, 12,  9,  8, 12,  8,  3, 12,  3,  2 },
-/*  75: 0, 1,    3,       6,     */  { 12,  1, 10, 12, 10,  6, 12,  6,  5, 12,  5,  9, 12,  9,  8, 12,  8, 11, 12, 11,  2, 12,  2,  1 },
-/*  83: 0, 1,       4,    6,     */  { 12,  4,  5, 12,  5, 10, 12, 10,  6, 12,  6,  7, 12,  7,  3, 12,  3,  1, 12,  1,  9, 12,  9,  4 },
-/* 163: 0, 1,          5,    7,  */  {  7,  6, 12,  8,  7, 12,  4,  8, 12,  5,  4, 12,  1,  5, 12,  3,  1, 12, 11,  3, 12,  6, 11, 12 },
-/*  45: 0,    2, 3,    5,        */  { 12,  0,  9, 12,  9,  5, 12,  5,  4, 12,  4,  8, 12,  8, 11, 12, 11, 10, 12, 10,  1, 12,  1,  0 },
-/*  53: 0,    2,    4, 5,        */  {  1,  2, 12,  9,  1, 12,  0,  9, 12,  3,  0, 12,  7,  3, 12,  5,  7, 12, 10,  5, 12,  2, 10, 12 },
-/* 149: 0,    2,    4,       7,  */  { 12,  1,  2, 12,  2, 11, 12, 11,  3, 12,  3,  0, 12,  0,  4, 12,  4,  6, 12,  6, 10, 12, 10,  1 },
-/* 101: 0,    2,       5, 6,     */  { 12,  3,  0, 12,  0,  9, 12,  9,  1, 12,  1,  2, 12,  2,  6, 12,  6,  4, 12,  4,  8, 12,  8,  3 },
-/* 197: 0,    2,          6, 7,  */  {  3,  0, 12, 11,  3, 12,  2, 11, 12,  1,  2, 12,  5,  1, 12,  7,  5, 12,  8,  7, 12,  0,  8, 12 },
-/*  89: 0,       3, 4,    6,     */  {  6,  5, 12, 11,  6, 12,  7, 11, 12,  4,  7, 12,  0,  4, 12,  2,  0, 12, 10,  2, 12,  5, 10, 12 },
-/* 169: 0,       3,    5,    7,  */  { 12,  7,  4, 12,  4,  9, 12,  9,  5, 12,  5,  6, 12,  6,  2, 12,  2,  0, 12,  0,  8, 12,  8,  7 },
-/* 225: 0,             5, 6, 7,  */  {  8,  7, 12,  0,  8, 12,  3,  0, 12, 11,  3, 12, 10, 11, 12,  9, 10, 12,  4,  9, 12,  7,  4, 12 },
-/*  30:    1, 2, 3, 4,           */  { 12,  7,  8, 12,  8,  0, 12,  0,  3, 12,  3, 11, 12, 11, 10, 12, 10,  9, 12,  9,  4, 12,  4,  7 },
-/*  86:    1, 2,    4,    6,     */  {  4,  7, 12,  9,  4, 12,  5,  9, 12,  6,  5, 12,  2,  6, 12,  0,  2, 12,  8,  0, 12,  7,  8, 12 },
-/* 166:    1, 2,       5,    7,  */  { 12,  5,  6, 12,  6, 11, 12, 11,  7, 12,  7,  4, 12,  4,  0, 12,  0,  2, 12,  2, 10, 12, 10,  5 },
-/*  58:    1,    3, 4, 5,        */  { 12,  0,  3, 12,  3, 11, 12, 11,  2, 12,  2,  1, 12,  1,  5, 12,  5,  7, 12,  7,  8, 12,  8,  0 },
-/* 154:    1,    3, 4,       7,  */  {  0,  3, 12,  9,  0, 12,  1,  9, 12,  2,  1, 12,  6,  2, 12,  4,  6, 12,  8,  4, 12,  3,  8, 12 },
-/* 106:    1,    3,    5, 6,     */  {  2,  1, 12, 11,  2, 12,  3, 11, 12,  0,  3, 12,  4,  0, 12,  6,  4, 12, 10,  6, 12,  1, 10, 12 },
-/* 202:    1,    3,       6, 7,  */  { 12,  2,  1, 12,  1,  9, 12,  9,  0, 12,  0,  3, 12,  3,  7, 12,  7,  5, 12,  5, 10, 12, 10,  2 },
-/* 210:    1,       4,    6, 7,  */  {  9,  0, 12,  5,  9, 12,  4,  5, 12,  8,  4, 12, 11,  8, 12, 10, 11, 12,  1, 10, 12,  0,  1, 12 },
-/*  92:       2, 3, 4,    6,     */  { 12,  6,  7, 12,  7,  8, 12,  8,  4, 12,  4,  5, 12,  5,  1, 12,  1,  3, 12,  3, 11, 12, 11,  6 },
-/* 172:       2, 3,    5,    7,  */  {  5,  4, 12, 10,  5, 12,  6, 10, 12,  7,  6, 12,  3,  7, 12,  1,  3, 12,  9,  1, 12,  4,  9, 12 },
-/* 180:       2,    4, 5,    7,  */  { 10,  1, 12,  6, 10, 12,  5,  6, 12,  9,  5, 12,  8,  9, 12, 11,  8, 12,  2, 11, 12,  1,  2, 12 },
-/* 120:          3, 4, 5, 6,     */  { 11,  2, 12,  7, 11, 12,  6,  7, 12, 10,  6, 12,  9, 10, 12,  8,  9, 12,  3,  8, 12,  2,  3, 12 }
-};
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-/**
- * \brief test table for case 13
- * All faces are to be tested
- *
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13: face test */
-static const char test13[2][7] = {
-/* 165: 0,    2,       5,    7,  */  { 1,2,3,4,5,6,7 },
-/*  90:    1,    3, 4,    6,     */  { 2,3,4,1,5,6,7 },
-};
-
-
-
-//_____________________________________________________________________________
-/**
- * \brief subconfiguration table for case 13
- * Hard-coded tests for the subconfiguration determination
- *
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13: sub configs */
-static const char subconfig13[64] = {
-/*  0: 0,0,0,0,0,0 */   0,
-/*  1: 1,0,0,0,0,0 */   1,
-/*  2: 0,1,0,0,0,0 */   2,
-/*  3: 1,1,0,0,0,0 */   7,
-/*  4: 0,0,1,0,0,0 */   3,
-/*  5: 1,0,1,0,0,0 */  -1,
-/*  6: 0,1,1,0,0,0 */  11,
-/*  7: 1,1,1,0,0,0 */  -1,
-/*  8: 0,0,0,1,0,0 */   4,
-/*  9: 1,0,0,1,0,0 */   8,
-/* 10: 0,1,0,1,0,0 */  -1,
-/* 11: 1,1,0,1,0,0 */  -1,
-/* 12: 0,0,1,1,0,0 */  14,
-/* 13: 1,0,1,1,0,0 */  -1,
-/* 14: 0,1,1,1,0,0 */  -1,
-/* 15: 1,1,1,1,0,0 */  -1,
-/* 16: 0,0,0,0,1,0 */   5,
-/* 17: 1,0,0,0,1,0 */   9,
-/* 18: 0,1,0,0,1,0 */  12,
-/* 19: 1,1,0,0,1,0 */  23,
-/* 20: 0,0,1,0,1,0 */  15,
-/* 21: 1,0,1,0,1,0 */  -1,
-/* 22: 0,1,1,0,1,0 */  21,
-/* 23: 1,1,1,0,1,0 */  38,
-/* 24: 0,0,0,1,1,0 */  17,
-/* 25: 1,0,0,1,1,0 */  20,
-/* 26: 0,1,0,1,1,0 */  -1,
-/* 27: 1,1,0,1,1,0 */  36,
-/* 28: 0,0,1,1,1,0 */  26,
-/* 29: 1,0,1,1,1,0 */  33,
-/* 30: 0,1,1,1,1,0 */  30,
-/* 31: 1,1,1,1,1,0 */  44,
-/* 32: 0,0,0,0,0,1 */   6,
-/* 33: 1,0,0,0,0,1 */  10,
-/* 34: 0,1,0,0,0,1 */  13,
-/* 35: 1,1,0,0,0,1 */  19,
-/* 36: 0,0,1,0,0,1 */  16,
-/* 37: 1,0,1,0,0,1 */  -1,
-/* 38: 0,1,1,0,0,1 */  25,
-/* 39: 1,1,1,0,0,1 */  37,
-/* 40: 0,0,0,1,0,1 */  18,
-/* 41: 1,0,0,1,0,1 */  24,
-/* 42: 0,1,0,1,0,1 */  -1,
-/* 43: 1,1,0,1,0,1 */  35,
-/* 44: 0,0,1,1,0,1 */  22,
-/* 45: 1,0,1,1,0,1 */  32,
-/* 46: 0,1,1,1,0,1 */  29,
-/* 47: 1,1,1,1,0,1 */  43,
-/* 48: 0,0,0,0,1,1 */  -1,
-/* 49: 1,0,0,0,1,1 */  -1,
-/* 50: 0,1,0,0,1,1 */  -1,
-/* 51: 1,1,0,0,1,1 */  34,
-/* 52: 0,0,1,0,1,1 */  -1,
-/* 53: 1,0,1,0,1,1 */  -1,
-/* 54: 0,1,1,0,1,1 */  28,
-/* 55: 1,1,1,0,1,1 */  42,
-/* 56: 0,0,0,1,1,1 */  -1,
-/* 57: 1,0,0,1,1,1 */  31,
-/* 58: 0,1,0,1,1,1 */  -1,
-/* 59: 1,1,0,1,1,1 */  41,
-/* 60: 0,0,1,1,1,1 */  27,
-/* 61: 1,0,1,1,1,1 */  40,
-/* 62: 0,1,1,1,1,1 */  39,
-/* 63: 1,1,1,1,1,1 */  45,
-};
-
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 13.1
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13.1 */
-static const char tiling13_1[2][12] = {
-/* 165: 0,    2,       5,    7,  */  { 11,  7,  6,  1,  2, 10,  8,  3,  0,  9,  5, 4 },
-/*  90:    1,    3, 4,    6,     */  {  8,  4,  7,  2,  3, 11,  9,  0,  1, 10,  6, 5 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 13.1 inverted
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13.1 */
-static const char tiling13_1_[2][12] = {
-/* 165: 0,    2,       5,    7,  */  { 7,  4,  8, 11,  3,  2,  1,  0,  9,  5,  6, 10 },
-/*  90:    1,    3, 4,    6,     */  { 6,  7, 11, 10,  2,  1,  0,  3,  8,  4,  5,  9 }
-};
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 13.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13.2 */
-static const char tiling13_2[2][6][18] = {
-/* 165: 0,    2,       5,    7,  */  {
- /* 1 */ { 1,  2, 10, 11,  7,  6,  3,  4,  8,  4,  3,  5,  0,  5,  3,  5,  0,  9 },
- /* 2 */ { 8,  3,  0, 11,  7,  6,  9,  1,  4,  2,  4,  1,  4,  2,  5, 10,  5,  2 },
- /* 3 */ { 9,  5,  4,  8,  3,  0,  1,  6, 10,  6,  1,  7,  2,  7,  1,  7,  2, 11 },
- /* 4 */ { 9,  5,  4,  1,  2, 10, 11,  3,  6,  0,  6,  3,  6,  0,  7,  8,  7,  0 },
- /* 5 */ { 9,  5,  4, 11,  7,  6,  0, 10,  1, 10,  0,  8, 10,  8,  2,  3,  2,  8 },
- /* 6 */ { 1,  2, 10,  3,  0,  8,  4,  9,  7, 11,  7,  9,  5, 11,  9, 11,  5,  6 }
-},
-/*  90:    1,    3, 4,    6,     */  {
- /* 1 */ { 2,  3, 11,  8,  4,  7,  0,  5,  9,  5,  0,  6,  1,  6,  0,  6,  1, 10 },
- /* 2 */ { 9,  0,  1,  8,  4,  7, 10,  2,  5,  3,  5,  2,  5,  3,  6, 11,  6,  3 },
- /* 3 */ { 6,  5, 10,  9,  0,  1,  2,  7, 11,  7,  2,  4,  3,  4,  2,  4,  3,  8 },
- /* 4 */ { 6,  5, 10,  2,  3, 11,  8,  0,  7,  1,  7,  0,  7,  1,  4,  9,  4,  1 },
- /* 5 */ { 6,  5, 10,  8,  4,  7,  1, 11,  2, 11,  1,  9, 11,  9,  3,  0,  3,  9 },
- /* 6 */ { 2,  3, 11,  0,  1,  9,  5, 10,  4,  8,  4, 10,  6,  8, 10,  8,  6,  7 }
-} };
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 13.2 inverted
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13.2 */
-static const char tiling13_2_[2][6][18] = {
-/* 165: 0,    2,       5,    7,  */  {
- /* 1 */ { 10,  5,  6, 11,  3,  2,  7,  0,  8,  0,  7,  1,  4,  1,  7,  1,  4,  9 },
- /* 2 */ { 11,  3,  2,  7,  4,  8,  9,  5,  0,  6,  0,  5,  0,  6,  1, 10,  1,  6 },
- /* 3 */ {  1,  0,  9,  7,  4,  8,  5,  2, 10,  2,  5,  3,  6,  3,  5,  3,  6, 11 },
- /* 4 */ { 10,  5,  6,  1,  0,  9, 11,  7,  2,  4,  2,  7,  2,  4,  3,  8,  3,  4 },
- /* 5 */ { 10,  5,  6,  7,  4,  8,  2, 11,  1,  9,  1, 11,  3,  9, 11,  9,  3,  0 },
- /* 6 */ { 11,  3,  2,  9,  1,  0,  4, 10,  5, 10,  4,  8, 10,  8,  6,  7,  6,  8 }
-},
-/*  90:    1,    3, 4,    6,     */  {
- /* 1 */ {  6,  7, 11,  8,  0,  3,  4,  1,  9,  1,  4,  2,  5,  2,  4,  2,  5, 10 },
- /* 2 */ {  8,  0,  3,  4,  5,  9, 10,  6,  1,  7,  1,  6,  1,  7,  2, 11,  2,  7 },
- /* 3 */ {  2,  1, 10,  4,  5,  9,  6,  3, 11,  3,  6,  0,  7,  0,  6,  0,  7,  8 },
- /* 4 */ {  6,  7, 11,  2,  1, 10,  8,  4,  3,  5,  3,  4,  3,  5,  0,  9,  0,  5 },
- /* 5 */ {  6,  7, 11,  4,  5,  9,  3,  8,  2, 10,  2,  8,  0, 10,  8, 10,  0,  1 },
- /* 6 */ {  8,  0,  3, 10,  2,  1,  5, 11,  6, 11,  5,  9, 11,  9,  7,  4,  7,  9 }
-} };
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 13.3
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13.3 */
-static const char tiling13_3[2][12][30] = {
-/* 165: 0,    2,       5,    7,  */  {
- /* 1,2 */ { 11,  7,  6, 12,  2, 10, 12, 10,  5, 12,  5,  4, 12,  4,  8, 12,  8,  3, 12,  3,  0, 12,  0,  9, 12,  9,  1, 12,  1,  2 },
- /* 1,4 */ {  1,  2, 10,  9,  5, 12,  0,  9, 12,  3,  0, 12, 11,  3, 12,  6, 11, 12,  7,  6, 12,  8,  7, 12,  4,  8, 12,  5,  4, 12 },
- /* 1,5 */ { 11,  7,  6, 12,  5,  4, 12,  4,  8, 12,  8,  3, 12,  3,  2, 12,  2, 10, 12, 10,  1, 12,  1,  0, 12,  0,  9, 12,  9,  5 },
- /* 1,6 */ {  1,  2, 10, 12,  3,  0, 12,  0,  9, 12,  9,  5, 12,  5,  6, 12,  6, 11, 12, 11,  7, 12,  7,  4, 12,  4,  8, 12,  8,  3 },
- /* 2,3 */ {  8,  3,  0, 11,  7, 12,  2, 11, 12,  1,  2, 12,  9,  1, 12,  4,  9, 12,  5,  4, 12, 10,  5, 12,  6, 10, 12,  7,  6, 12 },
- /* 2,5 */ { 11,  7,  6,  5,  4, 12, 10,  5, 12,  2, 10, 12,  3,  2, 12,  8,  3, 12,  0,  8, 12,  1,  0, 12,  9,  1, 12,  4,  9, 12 },
- /* 2,6 */ {  8,  3,  0,  1,  2, 12,  9,  1, 12,  4,  9, 12,  7,  4, 12, 11,  7, 12,  6, 11, 12,  5,  6, 12, 10,  5, 12,  2, 10, 12 },
- /* 3,4 */ {  9,  5,  4, 12,  0,  8, 12,  8,  7, 12,  7,  6, 12,  6, 10, 12, 10,  1, 12,  1,  2, 12,  2, 11, 12, 11,  3, 12,  3,  0 },
- /* 3,5 */ {  9,  5,  4, 12,  7,  6, 12,  6, 10, 12, 10,  1, 12,  1,  0, 12,  0,  8, 12,  8,  3, 12,  3,  2, 12,  2, 11, 12, 11,  7 },
- /* 3,6 */ {  8,  3,  0, 12,  1,  2, 12,  2, 11, 12, 11,  7, 12,  7,  4, 12,  4,  9, 12,  9,  5, 12,  5,  6, 12,  6, 10, 12, 10,  1 },
- /* 4,5 */ {  9,  5,  4,  7,  6, 12,  8,  7, 12,  0,  8, 12,  1,  0, 12, 10,  1, 12,  2, 10, 12,  3,  2, 12, 11,  3, 12,  6, 11, 12 },
- /* 4,6 */ {  1,  2, 10,  3,  0, 12, 11,  3, 12,  6, 11, 12,  5,  6, 12,  9,  5, 12,  4,  9, 12,  7,  4, 12,  8,  7, 12,  0,  8, 12 }
-},
-/*  90:    1,    3, 4,    6,     */  {
- /* 1,2 */ {  8,  4,  7, 12,  3, 11, 12, 11,  6, 12,  6,  5, 12,  5,  9, 12,  9,  0, 12,  0,  1, 12,  1, 10, 12, 10,  2, 12,  2,  3 },
- /* 1,4 */ {  2,  3, 11, 10,  6, 12,  1, 10, 12,  0,  1, 12,  8,  0, 12,  7,  8, 12,  4,  7, 12,  9,  4, 12,  5,  9, 12,  6,  5, 12 },
- /* 1,5 */ {  8,  4,  7, 12,  6,  5, 12,  5,  9, 12,  9,  0, 12,  0,  3, 12,  3, 11, 12, 11,  2, 12,  2,  1, 12,  1, 10, 12, 10,  6 },
- /* 1,6 */ {  2,  3, 11, 12,  0,  1, 12,  1, 10, 12, 10,  6, 12,  6,  7, 12,  7,  8, 12,  8,  4, 12,  4,  5, 12,  5,  9, 12,  9,  0 },
- /* 2,3 */ {  0,  1,  9,  8,  4, 12,  3,  8, 12,  2,  3, 12, 10,  2, 12,  5, 10, 12,  6,  5, 12, 11,  6, 12,  7, 11, 12,  4,  7, 12 },
- /* 2,5 */ {  8,  4,  7,  6,  5, 12, 11,  6, 12,  3, 11, 12,  0,  3, 12,  9,  0, 12,  1,  9, 12,  2,  1, 12, 10,  2, 12,  5, 10, 12 },
- /* 2,6 */ {  9,  0,  1,  2,  3, 12, 10,  2, 12,  5, 10, 12,  4,  5, 12,  8,  4, 12,  7,  8, 12,  6,  7, 12, 11,  6, 12,  3, 11, 12 },
- /* 3,4 */ {  6,  5, 10, 12,  1,  9, 12,  9,  4, 12,  4,  7, 12,  7, 11, 12, 11,  2, 12,  2,  3, 12,  3,  8, 12,  8,  0, 12,  0,  1 },
- /* 3,5 */ {  6,  5, 10, 12,  4,  7, 12,  7, 11, 12, 11,  2, 12,  2,  1, 12,  1,  9, 12,  9,  0, 12,  0,  3, 12,  3,  8, 12,  8,  4 },
- /* 3,6 */ {  9,  0,  1, 12,  2,  3, 12,  3,  8, 12,  8,  4, 12,  4,  5, 12,  5, 10, 12, 10,  6, 12,  6,  7, 12,  7, 11, 12, 11,  2 },
- /* 4,5 */ {  6,  5, 10,  4,  7, 12,  9,  4, 12,  1,  9, 12,  2,  1, 12, 11,  2, 12,  3, 11, 12,  0,  3, 12,  8,  0, 12,  7,  8, 12 },
- /* 4,6 */ {  2,  3, 11,  0,  1, 12,  8,  0, 12,  7,  8, 12,  6,  7, 12, 10,  6, 12,  5, 10, 12,  4,  5, 12,  9,  4, 12,  1,  9, 12 }
-} };
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 13.3, inverted
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13.3 */
-static const char tiling13_3_[2][12][30] = {
-/* 165: 0,    2,       5,    7,  */  {
- /* 1,2 */ {  3,  2, 11,  8,  7, 12,  0,  8, 12,  1,  0, 12, 10,  1, 12,  6, 10, 12,  5,  6, 12,  9,  5, 12,  4,  9, 12,  7,  4, 12 },
- /* 1,4 */ {  5,  6, 10, 12,  2, 11, 12, 11,  7, 12,  7,  4, 12,  4,  9, 12,  9,  1, 12,  1,  0, 12,  0,  8, 12,  8,  3, 12,  3,  2 },
- /* 1,5 */ { 10,  5,  6, 12,  7,  4, 12,  4,  9, 12,  9,  1, 12,  1,  2, 12,  2, 11, 12, 11,  3, 12,  3,  0, 12,  0,  8, 12,  8,  7 },
- /* 1,6 */ { 11,  3,  2, 12,  1,  0, 12,  0,  8, 12,  8,  7, 12,  7,  6, 12,  6, 10, 12, 10,  5, 12,  5,  4, 12,  4,  9, 12,  9,  1 },
- /* 2,3 */ {  7,  4,  8, 11,  3, 12,  6, 11, 12,  5,  6, 12,  9,  5, 12,  0,  9, 12,  1,  0, 12, 10,  1, 12,  2, 10, 12,  3,  2, 12 },
- /* 2,5 */ {  7,  4,  8,  5,  6, 12,  9,  5, 12,  0,  9, 12,  3,  0, 12, 11,  3, 12,  2, 11, 12,  1,  2, 12, 10,  1, 12,  6, 10, 12 },
- /* 2,6 */ { 11,  3,  2,  1,  0, 12, 10,  1, 12,  6, 10, 12,  7,  6, 12,  8,  7, 12,  4,  8, 12,  5,  4, 12,  9,  5, 12,  0,  9, 12 },
- /* 3,4 */ {  1,  0,  9, 12,  4,  8, 12,  8,  3, 12,  3,  2, 12,  2, 10, 12, 10,  5, 12,  5,  6, 12,  6, 11, 12, 11,  7, 12,  7,  4 },
- /* 3,5 */ {  7,  4,  8, 12,  5,  6, 12,  6, 11, 12, 11,  3, 12,  3,  0, 12,  0,  9, 12,  9,  1, 12,  1,  2, 12,  2, 10, 12, 10,  5 },
- /* 3,6 */ {  1,  0,  9, 12,  3,  2, 12,  2, 10, 12, 10,  5, 12,  5,  4, 12,  4,  8, 12,  8,  7, 12,  7,  6, 12,  6, 11, 12, 11,  3 },
- /* 4,5 */ { 10,  5,  6,  7,  4, 12, 11,  7, 12,  2, 11, 12,  1,  2, 12,  9,  1, 12,  0,  9, 12,  3,  0, 12,  8,  3, 12,  4,  8, 12 },
- /* 4,6 */ {  9,  1,  0,  3,  2, 12,  8,  3, 12,  4,  8, 12,  5,  4, 12, 10,  5, 12,  6, 10, 12,  7,  6, 12, 11,  7, 12,  2, 11, 12 }
-},
-/*  90:    1,    3, 4,    6,     */  {
- /* 1,2 */ {  0,  3,  8,  9,  4, 12,  1,  9, 12,  2,  1, 12, 11,  2, 12,  7, 11, 12,  6,  7, 12, 10,  6, 12,  5, 10, 12,  4,  5, 12 },
- /* 1,4 */ { 11,  6,  7, 12,  3,  8, 12,  8,  4, 12,  4,  5, 12,  5, 10, 12, 10,  2, 12,  2,  1, 12,  1,  9, 12,  9,  0, 12,  0,  3 },
- /* 1,5 */ {  6,  7, 11, 12,  4,  5, 12,  5, 10, 12, 10,  2, 12,  2,  3, 12,  3,  8, 12,  8,  0, 12,  0,  1, 12,  1,  9, 12,  9,  4 },
- /* 1,6 */ {  8,  0,  3, 12,  2,  1, 12,  1,  9, 12,  9,  4, 12,  4,  7, 12,  7, 11, 12, 11,  6, 12,  6,  5, 12,  5, 10, 12, 10,  2 },
- /* 2,3 */ {  4,  5,  9,  8,  0, 12,  7,  8, 12,  6,  7, 12, 10,  6, 12,  1, 10, 12,  2,  1, 12, 11,  2, 12,  3, 11, 12,  0,  3, 12 },
- /* 2,5 */ {  4,  5,  9,  6,  7, 12, 10,  6, 12,  1, 10, 12,  0,  1, 12,  8,  0, 12,  3,  8, 12,  2,  3, 12, 11,  2, 12,  7, 11, 12 },
- /* 2,6 */ {  8,  0,  3,  2,  1, 12, 11,  2, 12,  7, 11, 12,  4,  7, 12,  9,  4, 12,  5,  9, 12,  6,  5, 12, 10,  6, 12,  1, 10, 12 },
- /* 3,4 */ {  2,  1, 10, 12,  5,  9, 12,  9,  0, 12,  0,  3, 12,  3, 11, 12, 11,  6, 12,  6,  7, 12,  7,  8, 12,  8,  4, 12,  4,  5 },
- /* 3,5 */ {  4,  5,  9, 12,  6,  7, 12,  7,  8, 12,  8,  0, 12,  0,  1, 12,  1, 10, 12, 10,  2, 12,  2,  3, 12,  3, 11, 12, 11,  6 },
- /* 3,6 */ {  2,  1, 10, 12,  0,  3, 12,  3, 11, 12, 11,  6, 12,  6,  5, 12,  5,  9, 12,  9,  4, 12,  4,  7, 12,  7,  8, 12,  8,  0 },
- /* 4,5 */ {  6,  7, 11,  4,  5, 12,  8,  4, 12,  3,  8, 12,  2,  3, 12, 10,  2, 12,  1, 10, 12,  0,  1, 12,  9,  0, 12,  5,  9, 12 },
- /* 4,6 */ { 10,  2,  1,  0,  3, 12,  9,  0, 12,  5,  9, 12,  6,  5, 12, 11,  6, 12,  7, 11, 12,  4,  7, 12,  8,  4, 12,  3,  8, 12 }
-} };
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 13.4
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13.4 */
-static const char tiling13_4[2][4][36] = {
-/* 165: 0,    2,       5,    7,  */  {
-/* 1,2,6 */  { 12,  2, 10, 12, 10,  5, 12,  5,  6, 12,  6, 11, 12, 11,  7, 12,  7,  4, 12,  4,  8, 12,  8,  3, 12,  3,  0, 12,  0,  9, 12,  9,  1, 12,  1,  2 },
-/* 1,4,5 */  { 11,  3, 12,  6, 11, 12,  7,  6, 12,  8,  7, 12,  4,  8, 12,  5,  4, 12,  9,  5, 12,  0,  9, 12,  1,  0, 12, 10,  1, 12,  2, 10, 12,  3,  2, 12 },
-/* 2,3,5 */  {  9,  1, 12,  4,  9, 12,  5,  4, 12, 10,  5, 12,  6, 10, 12,  7,  6, 12, 11,  7, 12,  2, 11, 12,  3,  2, 12,  8,  3, 12,  0,  8, 12,  1,  0, 12 },
-/* 3,4,6 */  { 12,  0,  8, 12,  8,  7, 12,  7,  4, 12,  4,  9, 12,  9,  5, 12,  5,  6, 12,  6, 10, 12, 10,  1, 12,  1,  2, 12,  2, 11, 12, 11,  3, 12,  3,  0 }
-},
-/*  90:    1,    3, 4,    6,     */  {
-/* 1,2,6 */  { 12,  3, 11, 12, 11,  6, 12,  6,  7, 12,  7,  8, 12,  8,  4, 12,  4,  5, 12,  5,  9, 12,  9,  0, 12,  0,  1, 12,  1, 10, 12, 10,  2, 12,  2,  3 },
-/* 1,4,5 */  {  8,  0, 12,  7,  8, 12,  4,  7, 12,  9,  4, 12,  5,  9, 12,  6,  5, 12, 10,  6, 12,  1, 10, 12,  2,  1, 12, 11,  2, 12,  3, 11, 12,  0,  3, 12 },
-/* 2,3,5 */  { 10,  2, 12,  5, 10, 12,  6,  5, 12, 11,  6, 12,  7, 11, 12,  4,  7, 12,  8,  4, 12,  3,  8, 12,  0,  3, 12,  9,  0, 12,  1,  9, 12,  2,  1, 12 },
-/* 3,4,6 */  { 12,  1,  9, 12,  9,  4, 12,  4,  5, 12,  5, 10, 12, 10,  6, 12,  6,  7, 12,  7, 11, 12, 11,  2, 12,  2,  3, 12,  3,  8, 12,  8,  0, 12,  0,  1 }
-} };
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 13.5.1
- * The support edge for the interior test is marked as the 1st column.
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13.5.1 */
-static const char tiling13_5_1[2][4][18] = {
-/* 165: 0,    2,       5,    7,  */  {
-/* 1,2,5 */  {  7,  6, 11,  1,  0,  9, 10,  3,  2,  3, 10,  5,  3,  5,  8,  4,  8, 5 },
-/* 1,4,6 */  {  1,  2, 10,  7,  4,  8,  3,  0, 11,  6, 11,  0,  9,  6,  0,  6,  9, 5 },
-/* 2,3,6 */  {  3,  0,  8,  5,  6, 10,  1,  2,  9,  4,  9,  2, 11,  4,  2,  4, 11, 7 },
-/* 3,4,5 */  {  5,  4,  9,  3,  2, 11,  8,  1,  0,  1,  8,  7,  1,  7, 10,  6, 10, 7 }
-},
-/*  90:    1,    3, 4,    6,     */  {
-/* 1,2,5 */  {  4,  7,  8,  2,  1, 10, 11,  0,  3,  0, 11,  6,  0,  6,  9,  5,  9, 6 },
-/* 1,4,6 */  {  2,  3, 11,  4,  5,  9,  0,  1,  8,  7,  8,  1, 10,  7,  1,  7, 10, 6 },
-/* 2,3,6 */  {  0,  1,  9,  6,  7, 11,  2,  3, 10,  5, 10,  3,  8,  5,  3,  5,  8, 4 },
-/* 3,4,5 */  {  6,  5, 10,  0,  3,  8,  9,  2,  1,  2,  9,  4,  2,  4, 11,  7, 11, 4 }
-} };
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 13.5.2
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-/* 13.5.2 */
-static const char tiling13_5_2[2][4][30] = {
-/* 165: 0,    2,       5,    7,  */  {
-/* 1,2,5 */  { 1,  0,  9,  7,  4,  8,  7,  8,  3,  7,  3, 11,  2, 11,  3, 11,  2, 10, 11, 10,  6,  5,  6, 10,  6,  5,  7,  4,  7, 5 },
-/* 1,4,6 */  { 7,  4,  8, 11,  3,  2,  6, 11,  2, 10,  6,  2,  6, 10,  5,  9,  5, 10,  1,  9, 10,  9,  1,  0,  2,  0,  1,  0,  2, 3 },
-/* 2,3,6 */  { 5,  6, 10,  9,  1,  0,  4,  9,  0,  8,  4,  0,  4,  8,  7, 11,  7,  8,  3, 11,  8, 11,  3,  2,  0,  2,  3,  2,  0, 1 },
-/* 3,4,5 */  { 3,  2, 11,  5,  6, 10,  5, 10,  1,  5,  1,  9,  0,  9,  1,  9,  0,  8,  9,  8,  4,  4,  8,  7,  4,  7,  5,  6,  5, 7 }
-},
-/*  90:    1,    3, 4,    6,     */  {
-/* 1,2,5 */  { 2,  1, 10,  4,  5,  9,  4,  9,  0,  4,  0,  8,  3,  8,  0,  8,  3, 11,  8, 11,  7,  6,  7, 11,  7,  6,  4,  5,  4, 6 },
-/* 1,4,6 */  { 4,  5,  9,  8,  0,  3,  7,  8,  3, 11,  7,  3,  7, 11,  6, 10,  6, 11,  2, 10, 11, 10,  2,  1,  3,  1,  2,  1,  3, 0 },
-/* 2,3,6 */  { 6,  7, 11, 10,  2,  1,  5, 10,  1,  9,  5,  1,  5,  9,  4,  8,  4,  9,  0,  8,  9,  8,  0,  3,  1,  3,  0,  3,  1, 2 },
-/* 3,4,5 */  { 0,  3,  8,  6,  7, 11,  6, 11,  2,  6,  2, 10,  1, 10,  2, 10,  1,  9, 10,  9,  5,  5,  9,  4,  5,  4,  6,  7,  6, 4 }
-} };
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-/**
- * \brief tiling table for case 14
- * For each of the case above, the specific triangulation of the edge
- * intersection points is given.
- * When a case is ambiguous, there is an auxiliary table that contains
- * the face number to test and the tiling table contains the specific
- * triangulations depending on the results
- * A minus sign means to invert the result of the test.
- */
-//-----------------------------------------------------------------------------
-static const char tiling14[12][12] = {
-/*  71: 0, 1, 2,          6,     */  {  5,  9,  8,  5,  8,  2,  5,  2,  6,  3,  2,  8 },
-/*  43: 0, 1,    3,    5,        */  {  2,  1,  5,  2,  5,  8,  2,  8, 11,  4,  8,  5 },
-/* 147: 0, 1,       4,       7,  */  {  9,  4,  6,  9,  6,  3,  9,  3,  1, 11,  3,  6 },
-/*  29: 0,    2, 3, 4,           */  {  1, 11, 10,  1,  4, 11,  1,  0,  4,  7, 11,  4 },
-/* 201: 0,       3,       6, 7,  */  {  8,  2,  0,  8,  5,  2,  8,  7,  5, 10,  2,  5 },
-/* 113: 0,          4, 5, 6,     */  {  0,  7,  3,  0, 10,  7,  0,  9, 10,  6,  7, 10 },
-/* 142:    1, 2, 3,          7,  */  {  0,  3,  7,  0,  7, 10,  0, 10,  9,  6, 10,  7 },
-/*  54:    1, 2,    4, 5,        */  {  8,  0,  2,  8,  2,  5,  8,  5,  7, 10,  5,  2 },
-/* 226:    1,          5, 6, 7,  */  {  1, 10, 11,  1, 11,  4,  1,  4,  0,  7,  4, 11 },
-/* 108:       2, 3,    5, 6,     */  {  9,  6,  4,  9,  3,  6,  9,  1,  3, 11,  6,  3 },
-/* 212:       2,    4,    6, 7,  */  {  2,  5,  1,  2,  8,  5,  2, 11,  8,  4,  5,  8 },
-/* 184:          3, 4, 5,    7,  */  {  5,  8,  9,  5,  2,  8,  5,  6,  2,  3,  8,  2 }
-};
-//_____________________________________________________________________________
-
-
-
-//_____________________________________________________________________________
-/**
- * \brief original Marching Cubes implementation
- * For each of the possible vertex states listed in this table there is a
- * specific triangulation of the edge intersection points.  The table lists
- * all of them in the form of 0-5 edge triples with the list terminated by
- * the invalid value -1.  For example: casesClassic[3] list the 2 triangles
- * formed when cube[0] and cube[1] are inside of the surface, but the rest of
- * the cube is not.
- */
-//-----------------------------------------------------------------------------
-static const char casesClassic[256][16] = {
-/*   0:                          */  { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*   1: 0,                       */  {  0,  8,  3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*   2:    1,                    */  {  0,  1,  9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*   3: 0, 1,                    */  {  1,  8,  3,  9,  8,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*   4:       2,                 */  {  1,  2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*   5: 0,    2,                 */  {  0,  8,  3,  1,  2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*   6:    1, 2,                 */  {  9,  2, 10,  0,  2,  9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*   7: 0, 1, 2,                 */  {  2,  8,  3,  2, 10,  8, 10,  9,  8, -1, -1, -1, -1, -1, -1, -1 },
-/*   8:          3,              */  {  3, 11,  2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*   9: 0,       3,              */  {  0, 11,  2,  8, 11,  0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  10:    1,    3,              */  {  1,  9,  0,  2,  3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  11: 0, 1,    3,              */  {  1, 11,  2,  1,  9, 11,  9,  8, 11, -1, -1, -1, -1, -1, -1, -1 },
-/*  12:       2, 3,              */  {  3, 10,  1, 11, 10,  3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  13: 0,    2, 3,              */  {  0, 10,  1,  0,  8, 10,  8, 11, 10, -1, -1, -1, -1, -1, -1, -1 },
-/*  14:    1, 2, 3,              */  {  3,  9,  0,  3, 11,  9, 11, 10,  9, -1, -1, -1, -1, -1, -1, -1 },
-/*  15: 0, 1, 2, 3,              */  {  9,  8, 10, 10,  8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  16:             4,           */  {  4,  7,  8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  17: 0,          4,           */  {  4,  3,  0,  7,  3,  4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  18:    1,       4,           */  {  0,  1,  9,  8,  4,  7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  19: 0, 1,       4,           */  {  4,  1,  9,  4,  7,  1,  7,  3,  1, -1, -1, -1, -1, -1, -1, -1 },
-/*  20:       2,    4,           */  {  1,  2, 10,  8,  4,  7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  21: 0,    2,    4,           */  {  3,  4,  7,  3,  0,  4,  1,  2, 10, -1, -1, -1, -1, -1, -1, -1 },
-/*  22:    1, 2,    4,           */  {  9,  2, 10,  9,  0,  2,  8,  4,  7, -1, -1, -1, -1, -1, -1, -1 },
-/*  23: 0, 1, 2,    4,           */  {  2, 10,  9,  2,  9,  7,  2,  7,  3,  7,  9,  4, -1, -1, -1, -1 },
-/*  24:          3, 4,           */  {  8,  4,  7,  3, 11,  2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  25: 0,       3, 4,           */  { 11,  4,  7, 11,  2,  4,  2,  0,  4, -1, -1, -1, -1, -1, -1, -1 },
-/*  26:    1,    3, 4,           */  {  9,  0,  1,  8,  4,  7,  2,  3, 11, -1, -1, -1, -1, -1, -1, -1 },
-/*  27: 0, 1,    3, 4,           */  {  4,  7, 11,  9,  4, 11,  9, 11,  2,  9,  2,  1, -1, -1, -1, -1 },
-/*  28:       2, 3, 4,           */  {  3, 10,  1,  3, 11, 10,  7,  8,  4, -1, -1, -1, -1, -1, -1, -1 },
-/*  29: 0,    2, 3, 4,           */  {  1, 11, 10,  1,  4, 11,  1,  0,  4,  7, 11,  4, -1, -1, -1, -1 },
-/*  30:    1, 2, 3, 4,           */  {  4,  7,  8,  9,  0, 11,  9, 11, 10, 11,  0,  3, -1, -1, -1, -1 },
-/*  31: 0, 1, 2, 3, 4,           */  {  4,  7, 11,  4, 11,  9,  9, 11, 10, -1, -1, -1, -1, -1, -1, -1 },
-/*  32:                5,        */  {  9,  5,  4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  33: 0,             5,        */  {  9,  5,  4,  0,  8,  3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  34:    1,          5,        */  {  0,  5,  4,  1,  5,  0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  35: 0, 1,          5,        */  {  8,  5,  4,  8,  3,  5,  3,  1,  5, -1, -1, -1, -1, -1, -1, -1 },
-/*  36:       2,       5,        */  {  1,  2, 10,  9,  5,  4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  37: 0,    2,       5,        */  {  3,  0,  8,  1,  2, 10,  4,  9,  5, -1, -1, -1, -1, -1, -1, -1 },
-/*  38:    1, 2,       5,        */  {  5,  2, 10,  5,  4,  2,  4,  0,  2, -1, -1, -1, -1, -1, -1, -1 },
-/*  39: 0, 1, 2,       5,        */  {  2, 10,  5,  3,  2,  5,  3,  5,  4,  3,  4,  8, -1, -1, -1, -1 },
-/*  40:          3,    5,        */  {  9,  5,  4,  2,  3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  41: 0,       3,    5,        */  {  0, 11,  2,  0,  8, 11,  4,  9,  5, -1, -1, -1, -1, -1, -1, -1 },
-/*  42:    1,    3,    5,        */  {  0,  5,  4,  0,  1,  5,  2,  3, 11, -1, -1, -1, -1, -1, -1, -1 },
-/*  43: 0, 1,    3,    5,        */  {  2,  1,  5,  2,  5,  8,  2,  8, 11,  4,  8,  5, -1, -1, -1, -1 },
-/*  44:       2, 3,    5,        */  { 10,  3, 11, 10,  1,  3,  9,  5,  4, -1, -1, -1, -1, -1, -1, -1 },
-/*  45: 0,    2, 3,    5,        */  {  4,  9,  5,  0,  8,  1,  8, 10,  1,  8, 11, 10, -1, -1, -1, -1 },
-/*  46:    1, 2, 3,    5,        */  {  5,  4,  0,  5,  0, 11,  5, 11, 10, 11,  0,  3, -1, -1, -1, -1 },
-/*  47: 0, 1, 2, 3,    5,        */  {  5,  4,  8,  5,  8, 10, 10,  8, 11, -1, -1, -1, -1, -1, -1, -1 },
-/*  48:             4, 5,        */  {  9,  7,  8,  5,  7,  9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  49: 0,          4, 5,        */  {  9,  3,  0,  9,  5,  3,  5,  7,  3, -1, -1, -1, -1, -1, -1, -1 },
-/*  50:    1,       4, 5,        */  {  0,  7,  8,  0,  1,  7,  1,  5,  7, -1, -1, -1, -1, -1, -1, -1 },
-/*  51: 0, 1,       4, 5,        */  {  1,  5,  3,  3,  5,  7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  52:       2,    4, 5,        */  {  9,  7,  8,  9,  5,  7, 10,  1,  2, -1, -1, -1, -1, -1, -1, -1 },
-/*  53: 0,    2,    4, 5,        */  { 10,  1,  2,  9,  5,  0,  5,  3,  0,  5,  7,  3, -1, -1, -1, -1 },
-/*  54:    1, 2,    4, 5,        */  {  8,  0,  2,  8,  2,  5,  8,  5,  7, 10,  5,  2, -1, -1, -1, -1 },
-/*  55: 0, 1, 2,    4, 5,        */  {  2, 10,  5,  2,  5,  3,  3,  5,  7, -1, -1, -1, -1, -1, -1, -1 },
-/*  56:          3, 4, 5,        */  {  7,  9,  5,  7,  8,  9,  3, 11,  2, -1, -1, -1, -1, -1, -1, -1 },
-/*  57: 0,       3, 4, 5,        */  {  9,  5,  7,  9,  7,  2,  9,  2,  0,  2,  7, 11, -1, -1, -1, -1 },
-/*  58:    1,    3, 4, 5,        */  {  2,  3, 11,  0,  1,  8,  1,  7,  8,  1,  5,  7, -1, -1, -1, -1 },
-/*  59: 0, 1,    3, 4, 5,        */  { 11,  2,  1, 11,  1,  7,  7,  1,  5, -1, -1, -1, -1, -1, -1, -1 },
-/*  60:       2, 3, 4, 5,        */  {  9,  5,  8,  8,  5,  7, 10,  1,  3, 10,  3, 11, -1, -1, -1, -1 },
-/*  61: 0,    2, 3, 4, 5,        */  {  5,  7,  0,  5,  0,  9,  7, 11,  0,  1,  0, 10, 11, 10,  0, -1 },
-/*  62:    1, 2, 3, 4, 5,        */  { 11, 10,  0, 11,  0,  3, 10,  5,  0,  8,  0,  7,  5,  7,  0, -1 },
-/*  63: 0, 1, 2, 3, 4, 5,        */  { 11, 10,  5,  7, 11,  5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  64:                   6,     */  { 10,  6,  5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  65: 0,                6,     */  {  0,  8,  3,  5, 10,  6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  66:    1,             6,     */  {  9,  0,  1,  5, 10,  6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  67: 0, 1,             6,     */  {  1,  8,  3,  1,  9,  8,  5, 10,  6, -1, -1, -1, -1, -1, -1, -1 },
-/*  68:       2,          6,     */  {  1,  6,  5,  2,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  69: 0,    2,          6,     */  {  1,  6,  5,  1,  2,  6,  3,  0,  8, -1, -1, -1, -1, -1, -1, -1 },
-/*  70:    1, 2,          6,     */  {  9,  6,  5,  9,  0,  6,  0,  2,  6, -1, -1, -1, -1, -1, -1, -1 },
-/*  71: 0, 1, 2,          6,     */  {  5,  9,  8,  5,  8,  2,  5,  2,  6,  3,  2,  8, -1, -1, -1, -1 },
-/*  72:          3,       6,     */  {  2,  3, 11, 10,  6,  5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  73: 0,       3,       6,     */  { 11,  0,  8, 11,  2,  0, 10,  6,  5, -1, -1, -1, -1, -1, -1, -1 },
-/*  74:    1,    3,       6,     */  {  0,  1,  9,  2,  3, 11,  5, 10,  6, -1, -1, -1, -1, -1, -1, -1 },
-/*  75: 0, 1,    3,       6,     */  {  5, 10,  6,  1,  9,  2,  9, 11,  2,  9,  8, 11, -1, -1, -1, -1 },
-/*  76:       2, 3,       6,     */  {  6,  3, 11,  6,  5,  3,  5,  1,  3, -1, -1, -1, -1, -1, -1, -1 },
-/*  77: 0,    2, 3,       6,     */  {  0,  8, 11,  0, 11,  5,  0,  5,  1,  5, 11,  6, -1, -1, -1, -1 },
-/*  78:    1, 2, 3,       6,     */  {  3, 11,  6,  0,  3,  6,  0,  6,  5,  0,  5,  9, -1, -1, -1, -1 },
-/*  79: 0, 1, 2, 3,       6,     */  {  6,  5,  9,  6,  9, 11, 11,  9,  8, -1, -1, -1, -1, -1, -1, -1 },
-/*  80:             4,    6,     */  {  5, 10,  6,  4,  7,  8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  81: 0,          4,    6,     */  {  4,  3,  0,  4,  7,  3,  6,  5, 10, -1, -1, -1, -1, -1, -1, -1 },
-/*  82:    1,       4,    6,     */  {  1,  9,  0,  5, 10,  6,  8,  4,  7, -1, -1, -1, -1, -1, -1, -1 },
-/*  83: 0, 1,       4,    6,     */  { 10,  6,  5,  1,  9,  7,  1,  7,  3,  7,  9,  4, -1, -1, -1, -1 },
-/*  84:       2,    4,    6,     */  {  6,  1,  2,  6,  5,  1,  4,  7,  8, -1, -1, -1, -1, -1, -1, -1 },
-/*  85: 0,    2,    4,    6,     */  {  1,  2,  5,  5,  2,  6,  3,  0,  4,  3,  4,  7, -1, -1, -1, -1 },
-/*  86:    1, 2,    4,    6,     */  {  8,  4,  7,  9,  0,  5,  0,  6,  5,  0,  2,  6, -1, -1, -1, -1 },
-/*  87: 0, 1, 2,    4,    6,     */  {  7,  3,  9,  7,  9,  4,  3,  2,  9,  5,  9,  6,  2,  6,  9, -1 },
-/*  88:          3, 4,    6,     */  {  3, 11,  2,  7,  8,  4, 10,  6,  5, -1, -1, -1, -1, -1, -1, -1 },
-/*  89: 0,       3, 4,    6,     */  {  5, 10,  6,  4,  7,  2,  4,  2,  0,  2,  7, 11, -1, -1, -1, -1 },
-/*  90:    1,    3, 4,    6,     */  {  0,  1,  9,  4,  7,  8,  2,  3, 11,  5, 10,  6, -1, -1, -1, -1 },
-/*  91: 0, 1,    3, 4,    6,     */  {  9,  2,  1,  9, 11,  2,  9,  4, 11,  7, 11,  4,  5, 10,  6, -1 },
-/*  92:       2, 3, 4,    6,     */  {  8,  4,  7,  3, 11,  5,  3,  5,  1,  5, 11,  6, -1, -1, -1, -1 },
-/*  93: 0,    2, 3, 4,    6,     */  {  5,  1, 11,  5, 11,  6,  1,  0, 11,  7, 11,  4,  0,  4, 11, -1 },
-/*  94:    1, 2, 3, 4,    6,     */  {  0,  5,  9,  0,  6,  5,  0,  3,  6, 11,  6,  3,  8,  4,  7, -1 },
-/*  95: 0, 1, 2, 3, 4,    6,     */  {  6,  5,  9,  6,  9, 11,  4,  7,  9,  7, 11,  9, -1, -1, -1, -1 },
-/*  96:                5, 6,     */  { 10,  4,  9,  6,  4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/*  97: 0,             5, 6,     */  {  4, 10,  6,  4,  9, 10,  0,  8,  3, -1, -1, -1, -1, -1, -1, -1 },
-/*  98:    1,          5, 6,     */  { 10,  0,  1, 10,  6,  0,  6,  4,  0, -1, -1, -1, -1, -1, -1, -1 },
-/*  99: 0, 1,          5, 6,     */  {  8,  3,  1,  8,  1,  6,  8,  6,  4,  6,  1, 10, -1, -1, -1, -1 },
-/* 100:       2,       5, 6,     */  {  1,  4,  9,  1,  2,  4,  2,  6,  4, -1, -1, -1, -1, -1, -1, -1 },
-/* 101: 0,    2,       5, 6,     */  {  3,  0,  8,  1,  2,  9,  2,  4,  9,  2,  6,  4, -1, -1, -1, -1 },
-/* 102:    1, 2,       5, 6,     */  {  0,  2,  4,  4,  2,  6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 103: 0, 1, 2,       5, 6,     */  {  8,  3,  2,  8,  2,  4,  4,  2,  6, -1, -1, -1, -1, -1, -1, -1 },
-/* 104:          3,    5, 6,     */  { 10,  4,  9, 10,  6,  4, 11,  2,  3, -1, -1, -1, -1, -1, -1, -1 },
-/* 105: 0,       3,    5, 6,     */  {  0,  8,  2,  2,  8, 11,  4,  9, 10,  4, 10,  6, -1, -1, -1, -1 },
-/* 106:    1,    3,    5, 6,     */  {  3, 11,  2,  0,  1,  6,  0,  6,  4,  6,  1, 10, -1, -1, -1, -1 },
-/* 107: 0, 1,    3,    5, 6,     */  {  6,  4,  1,  6,  1, 10,  4,  8,  1,  2,  1, 11,  8, 11,  1, -1 },
-/* 108:       2, 3,    5, 6,     */  {  9,  6,  4,  9,  3,  6,  9,  1,  3, 11,  6,  3, -1, -1, -1, -1 },
-/* 109: 0,    2, 3,    5, 6,     */  {  8, 11,  1,  8,  1,  0, 11,  6,  1,  9,  1,  4,  6,  4,  1, -1 },
-/* 110:    1, 2, 3,    5, 6,     */  {  3, 11,  6,  3,  6,  0,  0,  6,  4, -1, -1, -1, -1, -1, -1, -1 },
-/* 111: 0, 1, 2, 3,    5, 6,     */  {  6,  4,  8, 11,  6,  8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 112:             4, 5, 6,     */  {  7, 10,  6,  7,  8, 10,  8,  9, 10, -1, -1, -1, -1, -1, -1, -1 },
-/* 113: 0,          4, 5, 6,     */  {  0,  7,  3,  0, 10,  7,  0,  9, 10,  6,  7, 10, -1, -1, -1, -1 },
-/* 114:    1,       4, 5, 6,     */  { 10,  6,  7,  1, 10,  7,  1,  7,  8,  1,  8,  0, -1, -1, -1, -1 },
-/* 115: 0, 1,       4, 5, 6,     */  { 10,  6,  7, 10,  7,  1,  1,  7,  3, -1, -1, -1, -1, -1, -1, -1 },
-/* 116:       2,    4, 5, 6,     */  {  1,  2,  6,  1,  6,  8,  1,  8,  9,  8,  6,  7, -1, -1, -1, -1 },
-/* 117: 0,    2,    4, 5, 6,     */  {  2,  6,  9,  2,  9,  1,  6,  7,  9,  0,  9,  3,  7,  3,  9, -1 },
-/* 118:    1, 2,    4, 5, 6,     */  {  7,  8,  0,  7,  0,  6,  6,  0,  2, -1, -1, -1, -1, -1, -1, -1 },
-/* 119: 0, 1, 2,    4, 5, 6,     */  {  7,  3,  2,  6,  7,  2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 120:          3, 4, 5, 6,     */  {  2,  3, 11, 10,  6,  8, 10,  8,  9,  8,  6,  7, -1, -1, -1, -1 },
-/* 121: 0,       3, 4, 5, 6,     */  {  2,  0,  7,  2,  7, 11,  0,  9,  7,  6,  7, 10,  9, 10,  7, -1 },
-/* 122:    1,    3, 4, 5, 6,     */  {  1,  8,  0,  1,  7,  8,  1, 10,  7,  6,  7, 10,  2,  3, 11, -1 },
-/* 123: 0, 1,    3, 4, 5, 6,     */  { 11,  2,  1, 11,  1,  7, 10,  6,  1,  6,  7,  1, -1, -1, -1, -1 },
-/* 124:       2, 3, 4, 5, 6,     */  {  8,  9,  6,  8,  6,  7,  9,  1,  6, 11,  6,  3,  1,  3,  6, -1 },
-/* 125: 0,    2, 3, 4, 5, 6,     */  {  0,  9,  1, 11,  6,  7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 126:    1, 2, 3, 4, 5, 6,     */  {  7,  8,  0,  7,  0,  6,  3, 11,  0, 11,  6,  0, -1, -1, -1, -1 },
-/* 127: 0, 1, 2, 3, 4, 5, 6,     */  {  7, 11,  6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 128:                      7,  */  {  7,  6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 129: 0,                   7,  */  {  3,  0,  8, 11,  7,  6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 130:    1,                7,  */  {  0,  1,  9, 11,  7,  6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 131: 0, 1,                7,  */  {  8,  1,  9,  8,  3,  1, 11,  7,  6, -1, -1, -1, -1, -1, -1, -1 },
-/* 132:       2,             7,  */  { 10,  1,  2,  6, 11,  7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 133: 0,    2,             7,  */  {  1,  2, 10,  3,  0,  8,  6, 11,  7, -1, -1, -1, -1, -1, -1, -1 },
-/* 134:    1, 2,             7,  */  {  2,  9,  0,  2, 10,  9,  6, 11,  7, -1, -1, -1, -1, -1, -1, -1 },
-/* 135: 0, 1, 2,             7,  */  {  6, 11,  7,  2, 10,  3, 10,  8,  3, 10,  9,  8, -1, -1, -1, -1 },
-/* 136:          3,          7,  */  {  7,  2,  3,  6,  2,  7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 137: 0,       3,          7,  */  {  7,  0,  8,  7,  6,  0,  6,  2,  0, -1, -1, -1, -1, -1, -1, -1 },
-/* 138:    1,    3,          7,  */  {  2,  7,  6,  2,  3,  7,  0,  1,  9, -1, -1, -1, -1, -1, -1, -1 },
-/* 139: 0, 1,    3,          7,  */  {  1,  6,  2,  1,  8,  6,  1,  9,  8,  8,  7,  6, -1, -1, -1, -1 },
-/* 140:       2, 3,          7,  */  { 10,  7,  6, 10,  1,  7,  1,  3,  7, -1, -1, -1, -1, -1, -1, -1 },
-/* 141: 0,    2, 3,          7,  */  { 10,  7,  6,  1,  7, 10,  1,  8,  7,  1,  0,  8, -1, -1, -1, -1 },
-/* 142:    1, 2, 3,          7,  */  {  0,  3,  7,  0,  7, 10,  0, 10,  9,  6, 10,  7, -1, -1, -1, -1 },
-/* 143: 0, 1, 2, 3,          7,  */  {  7,  6, 10,  7, 10,  8,  8, 10,  9, -1, -1, -1, -1, -1, -1, -1 },
-/* 144:             4,       7,  */  {  6,  8,  4, 11,  8,  6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 145: 0,          4,       7,  */  {  3,  6, 11,  3,  0,  6,  0,  4,  6, -1, -1, -1, -1, -1, -1, -1 },
-/* 146:    1,       4,       7,  */  {  8,  6, 11,  8,  4,  6,  9,  0,  1, -1, -1, -1, -1, -1, -1, -1 },
-/* 147: 0, 1,       4,       7,  */  {  9,  4,  6,  9,  6,  3,  9,  3,  1, 11,  3,  6, -1, -1, -1, -1 },
-/* 148:       2,    4,       7,  */  {  6,  8,  4,  6, 11,  8,  2, 10,  1, -1, -1, -1, -1, -1, -1, -1 },
-/* 149: 0,    2,    4,       7,  */  {  1,  2, 10,  3,  0, 11,  0,  6, 11,  0,  4,  6, -1, -1, -1, -1 },
-/* 150:    1, 2,    4,       7,  */  {  4, 11,  8,  4,  6, 11,  0,  2,  9,  2, 10,  9, -1, -1, -1, -1 },
-/* 151: 0, 1, 2,    4,       7,  */  { 10,  9,  3, 10,  3,  2,  9,  4,  3, 11,  3,  6,  4,  6,  3, -1 },
-/* 152:          3, 4,       7,  */  {  8,  2,  3,  8,  4,  2,  4,  6,  2, -1, -1, -1, -1, -1, -1, -1 },
-/* 153: 0,       3, 4,       7,  */  {  0,  4,  2,  4,  6,  2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 154:    1,    3, 4,       7,  */  {  1,  9,  0,  2,  3,  4,  2,  4,  6,  4,  3,  8, -1, -1, -1, -1 },
-/* 155: 0, 1,    3, 4,       7,  */  {  1,  9,  4,  1,  4,  2,  2,  4,  6, -1, -1, -1, -1, -1, -1, -1 },
-/* 156:       2, 3, 4,       7,  */  {  8,  1,  3,  8,  6,  1,  8,  4,  6,  6, 10,  1, -1, -1, -1, -1 },
-/* 157: 0,    2, 3, 4,       7,  */  { 10,  1,  0, 10,  0,  6,  6,  0,  4, -1, -1, -1, -1, -1, -1, -1 },
-/* 158:    1, 2, 3, 4,       7,  */  {  4,  6,  3,  4,  3,  8,  6, 10,  3,  0,  3,  9, 10,  9,  3, -1 },
-/* 159: 0, 1, 2, 3, 4,       7,  */  { 10,  9,  4,  6, 10,  4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 160:                5,    7,  */  {  4,  9,  5,  7,  6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 161: 0,             5,    7,  */  {  0,  8,  3,  4,  9,  5, 11,  7,  6, -1, -1, -1, -1, -1, -1, -1 },
-/* 162:    1,          5,    7,  */  {  5,  0,  1,  5,  4,  0,  7,  6, 11, -1, -1, -1, -1, -1, -1, -1 },
-/* 163: 0, 1,          5,    7,  */  { 11,  7,  6,  8,  3,  4,  3,  5,  4,  3,  1,  5, -1, -1, -1, -1 },
-/* 164:       2,       5,    7,  */  {  9,  5,  4, 10,  1,  2,  7,  6, 11, -1, -1, -1, -1, -1, -1, -1 },
-/* 165: 0,    2,       5,    7,  */  {  6, 11,  7,  1,  2, 10,  0,  8,  3,  4,  9,  5, -1, -1, -1, -1 },
-/* 166:    1, 2,       5,    7,  */  {  7,  6, 11,  5,  4, 10,  4,  2, 10,  4,  0,  2, -1, -1, -1, -1 },
-/* 167: 0, 1, 2,       5,    7,  */  {  3,  4,  8,  3,  5,  4,  3,  2,  5, 10,  5,  2, 11,  7,  6, -1 },
-/* 168:          3,    5,    7,  */  {  7,  2,  3,  7,  6,  2,  5,  4,  9, -1, -1, -1, -1, -1, -1, -1 },
-/* 169: 0,       3,    5,    7,  */  {  9,  5,  4,  0,  8,  6,  0,  6,  2,  6,  8,  7, -1, -1, -1, -1 },
-/* 170:    1,    3,    5,    7,  */  {  3,  6,  2,  3,  7,  6,  1,  5,  0,  5,  4,  0, -1, -1, -1, -1 },
-/* 171: 0, 1,    3,    5,    7,  */  {  6,  2,  8,  6,  8,  7,  2,  1,  8,  4,  8,  5,  1,  5,  8, -1 },
-/* 172:       2, 3,    5,    7,  */  {  9,  5,  4, 10,  1,  6,  1,  7,  6,  1,  3,  7, -1, -1, -1, -1 },
-/* 173: 0,    2, 3,    5,    7,  */  {  1,  6, 10,  1,  7,  6,  1,  0,  7,  8,  7,  0,  9,  5,  4, -1 },
-/* 174:    1, 2, 3,    5,    7,  */  {  4,  0, 10,  4, 10,  5,  0,  3, 10,  6, 10,  7,  3,  7, 10, -1 },
-/* 175: 0, 1, 2, 3,    5,    7,  */  {  7,  6, 10,  7, 10,  8,  5,  4, 10,  4,  8, 10, -1, -1, -1, -1 },
-/* 176:             4, 5,    7,  */  {  6,  9,  5,  6, 11,  9, 11,  8,  9, -1, -1, -1, -1, -1, -1, -1 },
-/* 177: 0,          4, 5,    7,  */  {  3,  6, 11,  0,  6,  3,  0,  5,  6,  0,  9,  5, -1, -1, -1, -1 },
-/* 178:    1,       4, 5,    7,  */  {  0, 11,  8,  0,  5, 11,  0,  1,  5,  5,  6, 11, -1, -1, -1, -1 },
-/* 179: 0, 1,       4, 5,    7,  */  {  6, 11,  3,  6,  3,  5,  5,  3,  1, -1, -1, -1, -1, -1, -1, -1 },
-/* 180:       2,    4, 5,    7,  */  {  1,  2, 10,  9,  5, 11,  9, 11,  8, 11,  5,  6, -1, -1, -1, -1 },
-/* 181: 0,    2,    4, 5,    7,  */  {  0, 11,  3,  0,  6, 11,  0,  9,  6,  5,  6,  9,  1,  2, 10, -1 },
-/* 182:    1, 2,    4, 5,    7,  */  { 11,  8,  5, 11,  5,  6,  8,  0,  5, 10,  5,  2,  0,  2,  5, -1 },
-/* 183: 0, 1, 2,    4, 5,    7,  */  {  6, 11,  3,  6,  3,  5,  2, 10,  3, 10,  5,  3, -1, -1, -1, -1 },
-/* 184:          3, 4, 5,    7,  */  {  5,  8,  9,  5,  2,  8,  5,  6,  2,  3,  8,  2, -1, -1, -1, -1 },
-/* 185: 0,       3, 4, 5,    7,  */  {  9,  5,  6,  9,  6,  0,  0,  6,  2, -1, -1, -1, -1, -1, -1, -1 },
-/* 186:    1,    3, 4, 5,    7,  */  {  1,  5,  8,  1,  8,  0,  5,  6,  8,  3,  8,  2,  6,  2,  8, -1 },
-/* 187: 0, 1,    3, 4, 5,    7,  */  {  1,  5,  6,  2,  1,  6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 188:       2, 3, 4, 5,    7,  */  {  1,  3,  6,  1,  6, 10,  3,  8,  6,  5,  6,  9,  8,  9,  6, -1 },
-/* 189: 0,    2, 3, 4, 5,    7,  */  { 10,  1,  0, 10,  0,  6,  9,  5,  0,  5,  6,  0, -1, -1, -1, -1 },
-/* 190:    1, 2, 3, 4, 5,    7,  */  {  0,  3,  8,  5,  6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 191: 0, 1, 2, 3, 4, 5,    7,  */  { 10,  5,  6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 192:                   6, 7,  */  { 11,  5, 10,  7,  5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 193: 0,                6, 7,  */  { 11,  5, 10, 11,  7,  5,  8,  3,  0, -1, -1, -1, -1, -1, -1, -1 },
-/* 194:    1,             6, 7,  */  {  5, 11,  7,  5, 10, 11,  1,  9,  0, -1, -1, -1, -1, -1, -1, -1 },
-/* 195: 0, 1,             6, 7,  */  { 10,  7,  5, 10, 11,  7,  9,  8,  1,  8,  3,  1, -1, -1, -1, -1 },
-/* 196:       2,          6, 7,  */  { 11,  1,  2, 11,  7,  1,  7,  5,  1, -1, -1, -1, -1, -1, -1, -1 },
-/* 197: 0,    2,          6, 7,  */  {  0,  8,  3,  1,  2,  7,  1,  7,  5,  7,  2, 11, -1, -1, -1, -1 },
-/* 198:    1, 2,          6, 7,  */  {  9,  7,  5,  9,  2,  7,  9,  0,  2,  2, 11,  7, -1, -1, -1, -1 },
-/* 199: 0, 1, 2,          6, 7,  */  {  7,  5,  2,  7,  2, 11,  5,  9,  2,  3,  2,  8,  9,  8,  2, -1 },
-/* 200:          3,       6, 7,  */  {  2,  5, 10,  2,  3,  5,  3,  7,  5, -1, -1, -1, -1, -1, -1, -1 },
-/* 201: 0,       3,       6, 7,  */  {  8,  2,  0,  8,  5,  2,  8,  7,  5, 10,  2,  5, -1, -1, -1, -1 },
-/* 202:    1,    3,       6, 7,  */  {  9,  0,  1,  5, 10,  3,  5,  3,  7,  3, 10,  2, -1, -1, -1, -1 },
-/* 203: 0, 1,    3,       6, 7,  */  {  9,  8,  2,  9,  2,  1,  8,  7,  2, 10,  2,  5,  7,  5,  2, -1 },
-/* 204:       2, 3,       6, 7,  */  {  1,  3,  5,  3,  7,  5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 205: 0,    2, 3,       6, 7,  */  {  0,  8,  7,  0,  7,  1,  1,  7,  5, -1, -1, -1, -1, -1, -1, -1 },
-/* 206:    1, 2, 3,       6, 7,  */  {  9,  0,  3,  9,  3,  5,  5,  3,  7, -1, -1, -1, -1, -1, -1, -1 },
-/* 207: 0, 1, 2, 3,       6, 7,  */  {  9,  8,  7,  5,  9,  7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 208:             4,    6, 7,  */  {  5,  8,  4,  5, 10,  8, 10, 11,  8, -1, -1, -1, -1, -1, -1, -1 },
-/* 209: 0,          4,    6, 7,  */  {  5,  0,  4,  5, 11,  0,  5, 10, 11, 11,  3,  0, -1, -1, -1, -1 },
-/* 210:    1,       4,    6, 7,  */  {  0,  1,  9,  8,  4, 10,  8, 10, 11, 10,  4,  5, -1, -1, -1, -1 },
-/* 211: 0, 1,       4,    6, 7,  */  { 10, 11,  4, 10,  4,  5, 11,  3,  4,  9,  4,  1,  3,  1,  4, -1 },
-/* 212:       2,    4,    6, 7,  */  {  2,  5,  1,  2,  8,  5,  2, 11,  8,  4,  5,  8, -1, -1, -1, -1 },
-/* 213: 0,    2,    4,    6, 7,  */  {  0,  4, 11,  0, 11,  3,  4,  5, 11,  2, 11,  1,  5,  1, 11, -1 },
-/* 214:    1, 2,    4,    6, 7,  */  {  0,  2,  5,  0,  5,  9,  2, 11,  5,  4,  5,  8, 11,  8,  5, -1 },
-/* 215: 0, 1, 2,    4,    6, 7,  */  {  9,  4,  5,  2, 11,  3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 216:          3, 4,    6, 7,  */  {  2,  5, 10,  3,  5,  2,  3,  4,  5,  3,  8,  4, -1, -1, -1, -1 },
-/* 217: 0,       3, 4,    6, 7,  */  {  5, 10,  2,  5,  2,  4,  4,  2,  0, -1, -1, -1, -1, -1, -1, -1 },
-/* 218:    1,    3, 4,    6, 7,  */  {  3, 10,  2,  3,  5, 10,  3,  8,  5,  4,  5,  8,  0,  1,  9, -1 },
-/* 219: 0, 1,    3, 4,    6, 7,  */  {  5, 10,  2,  5,  2,  4,  1,  9,  2,  9,  4,  2, -1, -1, -1, -1 },
-/* 220:       2, 3, 4,    6, 7,  */  {  8,  4,  5,  8,  5,  3,  3,  5,  1, -1, -1, -1, -1, -1, -1, -1 },
-/* 221: 0,    2, 3, 4,    6, 7,  */  {  0,  4,  5,  1,  0,  5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 222:    1, 2, 3, 4,    6, 7,  */  {  8,  4,  5,  8,  5,  3,  9,  0,  5,  0,  3,  5, -1, -1, -1, -1 },
-/* 223: 0, 1, 2, 3, 4,    6, 7,  */  {  9,  4,  5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 224:                5, 6, 7,  */  {  4, 11,  7,  4,  9, 11,  9, 10, 11, -1, -1, -1, -1, -1, -1, -1 },
-/* 225: 0,             5, 6, 7,  */  {  0,  8,  3,  4,  9,  7,  9, 11,  7,  9, 10, 11, -1, -1, -1, -1 },
-/* 226:    1,          5, 6, 7,  */  {  1, 10, 11,  1, 11,  4,  1,  4,  0,  7,  4, 11, -1, -1, -1, -1 },
-/* 227: 0, 1,          5, 6, 7,  */  {  3,  1,  4,  3,  4,  8,  1, 10,  4,  7,  4, 11, 10, 11,  4, -1 },
-/* 228:       2,       5, 6, 7,  */  {  4, 11,  7,  9, 11,  4,  9,  2, 11,  9,  1,  2, -1, -1, -1, -1 },
-/* 229: 0,    2,       5, 6, 7,  */  {  9,  7,  4,  9, 11,  7,  9,  1, 11,  2, 11,  1,  0,  8,  3, -1 },
-/* 230:    1, 2,       5, 6, 7,  */  { 11,  7,  4, 11,  4,  2,  2,  4,  0, -1, -1, -1, -1, -1, -1, -1 },
-/* 231: 0, 1, 2,       5, 6, 7,  */  { 11,  7,  4, 11,  4,  2,  8,  3,  4,  3,  2,  4, -1, -1, -1, -1 },
-/* 232:          3,    5, 6, 7,  */  {  2,  9, 10,  2,  7,  9,  2,  3,  7,  7,  4,  9, -1, -1, -1, -1 },
-/* 233: 0,       3,    5, 6, 7,  */  {  9, 10,  7,  9,  7,  4, 10,  2,  7,  8,  7,  0,  2,  0,  7, -1 },
-/* 234:    1,    3,    5, 6, 7,  */  {  3,  7, 10,  3, 10,  2,  7,  4, 10,  1, 10,  0,  4,  0, 10, -1 },
-/* 235: 0, 1,    3,    5, 6, 7,  */  {  1, 10,  2,  8,  7,  4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 236:       2, 3,    5, 6, 7,  */  {  4,  9,  1,  4,  1,  7,  7,  1,  3, -1, -1, -1, -1, -1, -1, -1 },
-/* 237: 0,    2, 3,    5, 6, 7,  */  {  4,  9,  1,  4,  1,  7,  0,  8,  1,  8,  7,  1, -1, -1, -1, -1 },
-/* 238:    1, 2, 3,    5, 6, 7,  */  {  4,  0,  3,  7,  4,  3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 239: 0, 1, 2, 3,    5, 6, 7,  */  {  4,  8,  7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 240:             4, 5, 6, 7,  */  {  9, 10,  8, 10, 11,  8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 241: 0,          4, 5, 6, 7,  */  {  3,  0,  9,  3,  9, 11, 11,  9, 10, -1, -1, -1, -1, -1, -1, -1 },
-/* 242:    1,       4, 5, 6, 7,  */  {  0,  1, 10,  0, 10,  8,  8, 10, 11, -1, -1, -1, -1, -1, -1, -1 },
-/* 243: 0, 1,       4, 5, 6, 7,  */  {  3,  1, 10, 11,  3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 244:       2,    4, 5, 6, 7,  */  {  1,  2, 11,  1, 11,  9,  9, 11,  8, -1, -1, -1, -1, -1, -1, -1 },
-/* 245: 0,    2,    4, 5, 6, 7,  */  {  3,  0,  9,  3,  9, 11,  1,  2,  9,  2, 11,  9, -1, -1, -1, -1 },
-/* 246:    1, 2,    4, 5, 6, 7,  */  {  0,  2, 11,  8,  0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 247: 0, 1, 2,    4, 5, 6, 7,  */  {  3,  2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 248:          3, 4, 5, 6, 7,  */  {  2,  3,  8,  2,  8, 10, 10,  8,  9, -1, -1, -1, -1, -1, -1, -1 },
-/* 249: 0,       3, 4, 5, 6, 7,  */  {  9, 10,  2,  0,  9,  2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 250:    1,    3, 4, 5, 6, 7,  */  {  2,  3,  8,  2,  8, 10,  0,  1,  8,  1, 10,  8, -1, -1, -1, -1 },
-/* 251: 0, 1,    3, 4, 5, 6, 7,  */  {  1, 10,  2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 252:       2, 3, 4, 5, 6, 7,  */  {  1,  3,  8,  9,  1,  8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 253: 0,    2, 3, 4, 5, 6, 7,  */  {  0,  9,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 254:    1, 2, 3, 4, 5, 6, 7,  */  {  0,  3,  8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
-/* 255: 0, 1, 2, 3, 4, 5, 6, 7,  */  { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }
-};
-//_____________________________________________________________________________
-
-} //namespace McCubes
-
-#endif // _LOOKUPTABLE_H_
diff --git a/3rdParty/MarchingCubes/McPly.cpp b/3rdParty/MarchingCubes/McPly.cpp
deleted file mode 100644
index e56d01d7db4fda45646ff3ca7ad2138d322fece2..0000000000000000000000000000000000000000
--- a/3rdParty/MarchingCubes/McPly.cpp
+++ /dev/null
@@ -1,3320 +0,0 @@
-/*
-
-The interface routines for reading and writing PLY polygon files.
-
-Greg Turk
-
----------------------------------------------------------------
-
-A PLY file contains a single polygonal _object_.
-
-An object is composed of lists of _elements_.  Typical elements are
-vertices, faces, edges and materials.
-
-Each type of element for a given object has one or more _properties_
-associated with the element type.  For instance, a vertex element may
-have as properties the floating-point values x,y,z and the three unsigned
-chars representing red, green and blue.
-
------------------------------------------------------------------------
-
-Copyright (c) 1998 Georgia Institute of Technology.  All rights reserved.
-
-Permission to use, copy, modify and distribute this software and its
-documentation for any purpose is hereby granted without fee, provided
-that the above copyright notice and this permission notice appear in
-all copies of this software and that you do not sell the software.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
-EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
-WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-*/
-
-#include "./McPly.h"
-#include <iostream>
-#include <cstdio>
-
-namespace McCubes{
-
-const char *type_names[]      = {  /* names of scalar types */
-"invalid",
-"int8", "int16", "int32", "uint8", "uint16", "uint32", "float32", "float64"
-};
-
-const char *old_type_names[]  = {  /* old names of types for backward compatability */
-"invalid",
-"char", "short", "int", "uchar", "ushort", "uint", "float", "double"
-};
-
-int   ply_type_size[]   = {
-0, 1, 2, 4, 1, 2, 4, 4, 8
-};
-
-#define NO_OTHER_PROPS  -1
-
-#define DONT_STORE_PROP  0
-#define STORE_PROP       1
-
-#define OTHER_PROP       0
-#define NAMED_PROP       1
-
-/* returns 1 if strings are equal, 0 if not */
-int           equal_strings( const char * , const char * );
-
-/* find an element in a plyfile's list */
-PlyElement   *find_element( PlyFile * , const char * );
-
-/* find a property in an element's list */
-PlyProperty  *find_property( PlyElement * , const char * , int * );
-
-/* write to a file the word describing a PLY file data type */
-void          write_scalar_type( FILE * , int );
-
-/* read a line from a file and break it up into separate words */
-char*        *get_words( FILE * , int * , char ** );
-
-/* write an item to a file */
-void          write_binary_item( FILE * , int, unsigned int, double, int );
-void          write_ascii_item( FILE * , int, unsigned int, double, int );
-
-/* add information to a PLY file descriptor */
-void          add_element( PlyFile * , char ** , int );
-void          add_property( PlyFile * , char ** , int );
-void          add_comment( PlyFile * , const char * );
-void          add_obj_info( PlyFile * , const char * );
-
-/* copy a property */
-void          copy_property( PlyProperty * , PlyProperty * );
-
-/* store a value into where a pointer and a type specify */
-void          store_item( char * , int, int, unsigned int, double );
-
-/* return the value of a stored item */
-void          get_stored_item( void * , int, int * , unsigned int * , double * );
-
-/* return the value stored in an item, given ptr to it and its type */
-double        get_item_value( const char * , int );
-
-/* get binary or ascii item and store it according to ptr and type */
-void          get_ascii_item( const char * , int, int * , unsigned int * , double * );
-void          get_binary_item( FILE * , int, int * , unsigned int * , double * );
-
-/* get a bunch of elements from a file */
-void          ascii_get_element( PlyFile * , char * );
-void          binary_get_element( PlyFile * , char * );
-
-/* memory allocation */
-static char  *my_alloc( int, int, const char * );
-
-
-/*************/
-/*  Writing  */
-/*************/
-
-
-/******************************************************************************
-Given a file pointer, get ready to write PLY data to the file.
-
-Entry:
-fp         - the given file pointer
-nelems     - number of elements in object
-elem_names - list of element names
-file_type  - file type, either ascii or binary
-
-Exit:
-returns a pointer to a PlyFile, used to refer to this file, or NULL if error
-******************************************************************************/
-
-PlyFile *ply_write( FILE *fp, int nelems, char **elem_names, int file_type )
-{
-  int         i;
-  PlyFile    *plyfile;
-  PlyElement *elem;
-
-  /* check for NULL file pointer */
-  if ( fp == NULL )
-    return ( NULL );
-
-  /* create a record for this object */
-
-  plyfile = ( PlyFile *  ) myalloc ( sizeof ( PlyFile ) );
-  plyfile->file_type = file_type;
-  plyfile->num_comments = 0;
-  plyfile->num_obj_info = 0;
-  plyfile->num_elem_types = nelems;
-  plyfile->version = 1.0;
-  plyfile->fp = fp;
-  plyfile->other_elems = NULL;
-
-  /* tuck aside the names of the elements */
-
-  plyfile->elems = ( PlyElement *  *  ) myalloc ( sizeof ( PlyElement *  ) * nelems );
-  for ( i = 0; i < nelems; i++ )
-  {
-    elem = ( PlyElement *  ) myalloc ( sizeof ( PlyElement ) );
-    plyfile->elems[i] = elem;
-    elem->name = strdup ( elem_names[i] );
-    elem->num = 0;
-    elem->nprops = 0;
-  }
-
-  /* return pointer to the file descriptor */
-  return ( plyfile );
-}
-
-
-/******************************************************************************
-Open a polygon file for writing.
-
-Entry:
-filename   - name of file to read from
-nelems     - number of elements in object
-elem_names - list of element names
-file_type  - file type, either ascii or binary
-
-Exit:
-returns a file identifier, used to refer to this file, or NULL if error
-******************************************************************************/
-
-PlyFile *open_for_writing_ply( const char *filename, int nelems, char **elem_names, int file_type )
-{
-  PlyFile  *plyfile;
-  char     *name;
-  FILE     *fp;
-
-  /* tack on the extension .ply, if necessary */
-
-  name = ( char * ) myalloc ( sizeof ( char ) * ( (int)strlen ( filename ) + 5 ) );
-  strcpy ( name, filename );
-  if ( strlen ( name ) < 4 || strcmp ( name + strlen ( name ) - 4, ".ply" ) != 0 )
-    strcat ( name, ".ply" );
-
-  /* open the file for writing */
-
-  fp = fopen ( name, "w" );
-  if ( fp == NULL )
-  {
-    return ( NULL );
-  }
-
-  /* create the actual PlyFile structure */
-
-  plyfile = ply_write ( fp, nelems, elem_names, file_type );
-  if ( plyfile == NULL )
-    return ( NULL );
-
-  /* return pointer to the file descriptor */
-  return ( plyfile );
-}
-
-
-/******************************************************************************
-Describe an element, including its properties and how many will be written
-to the file.
-
-Entry:
-plyfile   - file identifier
-elem_name - name of element that information is being specified about
-nelems    - number of elements of this type to be written
-nprops    - number of properties contained in the element
-prop_list - list of properties
-******************************************************************************/
-
-void element_layout_ply( PlyFile *plyfile, const char *elem_name, int nelems, int nprops, PlyProperty *prop_list )
-{
-  int           i;
-  PlyElement   *elem;
-  PlyProperty  *prop;
-
-  /* look for appropriate element */
-  elem = find_element ( plyfile, elem_name );
-  if ( elem == NULL )
-  {
-    fprintf( stderr,"element_layout_ply: can't find element '%s'\n",elem_name );
-    exit ( -1 );
-  }
-
-  elem->num = nelems;
-
-  /* copy the list of properties */
-
-  elem->nprops = nprops;
-  elem->props = ( PlyProperty *  *  ) myalloc ( sizeof ( PlyProperty *  ) * nprops );
-  elem->store_prop = ( char * ) myalloc ( sizeof ( char ) * nprops );
-
-  for ( i = 0; i < nprops; i++ )
-  {
-    prop = ( PlyProperty *  ) myalloc ( sizeof ( PlyProperty ) );
-    elem->props[i] = prop;
-    elem->store_prop[i] = NAMED_PROP;
-    copy_property ( prop, &prop_list[i] );
-  }
-}
-
-
-/******************************************************************************
-Describe a property of an element.
-
-Entry:
-plyfile   - file identifier
-elem_name - name of element that information is being specified about
-prop      - the new property
-******************************************************************************/
-
-void ply_describe_property( PlyFile *plyfile, const char *elem_name, PlyProperty *prop )
-{
-  PlyElement   *elem;
-  PlyProperty  *elem_prop;
-
-  /* look for appropriate element */
-  elem = find_element ( plyfile, elem_name );
-  if ( elem == NULL )
-  {
-    fprintf( stderr, "ply_describe_property: can't find element '%s'\n",
-    elem_name );
-    return;
-  }
-
-  /* create room for new property */
-
-  if ( elem->nprops == 0 )
-  {
-    elem->props = ( PlyProperty *  *  ) myalloc ( sizeof ( PlyProperty *  ) );
-    elem->store_prop = ( char * ) myalloc ( sizeof ( char ) );
-    elem->nprops = 1;
-  }
-  else
-  {
-    elem->nprops++;
-    elem->props = ( PlyProperty *  *  )
-    realloc ( elem->props, sizeof ( PlyProperty *  ) * elem->nprops );
-    elem->store_prop = ( char * )
-    realloc ( elem->store_prop, sizeof ( char ) * elem->nprops );
-  }
-
-  /* copy the new property */
-
-  elem_prop = ( PlyProperty *  ) myalloc ( sizeof ( PlyProperty ) );
-  elem->props[elem->nprops - 1] = elem_prop;
-  elem->store_prop[elem->nprops - 1] = NAMED_PROP;
-  copy_property ( elem_prop, prop );
-}
-
-
-/******************************************************************************
-State how many of a given element will be written.
-
-Entry:
-plyfile   - file identifier
-elem_name - name of element that information is being specified about
-nelems    - number of elements of this type to be written
-******************************************************************************/
-
-void element_count_ply( PlyFile *plyfile, const char *elem_name, int nelems )
-{
-  PlyElement *elem;
-
-  /* look for appropriate element */
-  elem = find_element ( plyfile, elem_name );
-  if ( elem == NULL )
-  {
-    fprintf( stderr,"element_count_ply: can't find element '%s'\n",elem_name );
-    exit ( -1 );
-  }
-
-  elem->num = nelems;
-}
-
-
-/******************************************************************************
-Signal that we've described everything a PLY file's header and that the
-header should be written to the file.
-
-Entry:
-plyfile - file identifier
-******************************************************************************/
-
-void header_complete_ply( PlyFile *plyfile )
-{
-  int           i,j;
-  FILE         *fp  = plyfile->fp;
-  PlyElement   *elem;
-  PlyProperty  *prop;
-
-  fprintf ( fp, "ply\n" );
-
-  switch ( plyfile->file_type )
-  {
-    case PLY_ASCII:
-      fprintf ( fp, "format ascii 1.0\n" );
-      break;
-    case PLY_BINARY_BE:
-      fprintf ( fp, "format binary_big_endian 1.0\n" );
-      break;
-    case PLY_BINARY_LE:
-      fprintf ( fp, "format binary_little_endian 1.0\n" );
-      break;
-    default:
-      fprintf ( stderr, "ply_header_complete: bad file type = %d\n",
-      plyfile->file_type );
-      exit ( -1 );
-  }
-
-  /* write out the comments */
-
-  for ( i = 0; i < plyfile->num_comments; i++ )
-    fprintf ( fp, "comment %s\n", plyfile->comments[i] );
-
-  /* write out object information */
-
-  for ( i = 0; i < plyfile->num_obj_info; i++ )
-    fprintf ( fp, "obj_info %s\n", plyfile->obj_info[i] );
-
-  /* write out information about each element */
-
-  for ( i = 0; i < plyfile->num_elem_types; i++ )
-  {
-    elem = plyfile->elems[i];
-    fprintf ( fp, "element %s %d\n", elem->name, elem->num );
-
-    /* write out each property */
-    for ( j = 0; j < elem->nprops; j++ )
-    {
-      prop = elem->props[j];
-      if ( prop->is_list == PLY_LIST )
-      {
-        fprintf ( fp, "property list " );
-        write_scalar_type ( fp, prop->count_external );
-        fprintf ( fp, " " );
-        write_scalar_type ( fp, prop->external_type );
-        fprintf ( fp, " %s\n", prop->name );
-      }
-      else if ( prop->is_list == PLY_STRING )
-      {
-        fprintf ( fp, "property string" );
-        fprintf ( fp, " %s\n", prop->name );
-      }
-      else
-      {
-        fprintf ( fp, "property " );
-        write_scalar_type ( fp, prop->external_type );
-        fprintf ( fp, " %s\n", prop->name );
-      }
-    }
-  }
-
-  fprintf ( fp, "end_header\n" );
-}
-
-
-/******************************************************************************
-Specify which elements are going to be written.  This should be called
-before a call to the routine ply_put_element().
-
-Entry:
-plyfile   - file identifier
-elem_name - name of element we're talking about
-******************************************************************************/
-
-void put_element_setup_ply( PlyFile *plyfile, const char *elem_name )
-{
-  PlyElement *elem;
-
-  elem = find_element ( plyfile, elem_name );
-  if ( elem == NULL )
-  {
-    fprintf( stderr, "put_element_setup_ply: can't find element '%s'\n", elem_name );
-    exit ( -1 );
-  }
-
-  plyfile->which_elem = elem;
-}
-
-
-/******************************************************************************
-Write an element to the file.  This routine assumes that we're
-writing the type of element specified in the last call to the routine
-put_element_setup_ply().
-
-Entry:
-plyfile  - file identifier
-elem_ptr - pointer to the element
-******************************************************************************/
-
-void put_element_ply( PlyFile *plyfile, void *elem_ptr )
-{
-  int           j,k;
-  FILE         *fp  = plyfile->fp;
-  PlyElement   *elem;
-  PlyProperty  *prop;
-  char         *item;
-  char         *elem_data;
-  char*        *item_ptr;
-  int           list_count;
-  int           item_size;
-  int           int_val;
-  unsigned int uint_val;
-  double  double_val;
-  char*  *other_ptr;
-
-  elem = plyfile->which_elem;
-  elem_data = ( char * ) elem_ptr;
-  other_ptr = ( char * *  ) ( ( ( char * ) elem_ptr ) + elem->other_offset );
-
-  /* write out either to an ascii or binary file */
-
-  if ( plyfile->file_type == PLY_ASCII )
-  {
-    /* write an ascii file */
-
-    /* write out each property of the element */
-    for ( j = 0; j < elem->nprops; j++ )
-    {
-      prop = elem->props[j];
-
-      if ( elem->store_prop[j] == OTHER_PROP )
-        elem_data = *other_ptr;
-      else
-        elem_data = ( char * ) elem_ptr;
-
-      if ( prop->is_list == PLY_LIST )
-      {
-        /* list */
-        item = elem_data + prop->count_offset;
-        get_stored_item ( ( void * ) item, prop->count_internal,
-        &int_val, &uint_val, &double_val );
-        write_ascii_item ( fp, int_val, uint_val, double_val,
-        prop->count_external );
-        list_count = uint_val;
-        item_ptr = ( char * *  ) ( elem_data + prop->offset );
-        item = item_ptr[0];
-        item_size = ply_type_size[prop->internal_type];
-        for ( k = 0; k < list_count; k++ )
-        {
-          get_stored_item ( ( void * ) item, prop->internal_type,
-          &int_val, &uint_val, &double_val );
-          write_ascii_item ( fp, int_val, uint_val, double_val,
-          prop->external_type );
-          item += item_size;
-        }
-      }
-      else if ( prop->is_list == PLY_STRING )
-      {
-        /* string */
-        char*  *str;
-        item = elem_data + prop->offset;
-        str = ( char * *  ) item;
-        fprintf ( fp, "\"%s\"", *str );
-      }
-      else
-      {
-        /* scalar */
-        item = elem_data + prop->offset;
-        get_stored_item ( ( void * ) item, prop->internal_type,
-        &int_val, &uint_val, &double_val );
-        write_ascii_item ( fp, int_val, uint_val, double_val,
-        prop->external_type );
-      }
-    }
-
-    fprintf ( fp, "\n" );
-  }
-  else
-  {
-    /* write a binary file */
-
-    /* write out each property of the element */
-    for ( j = 0; j < elem->nprops; j++ )
-    {
-      prop = elem->props[j];
-      if ( elem->store_prop[j] == OTHER_PROP )
-        elem_data = *other_ptr;
-      else
-        elem_data = ( char * ) elem_ptr;
-      if ( prop->is_list == PLY_LIST )
-      {
-        /* list */
-        item = elem_data + prop->count_offset;
-        item_size = ply_type_size[prop->count_internal];
-        get_stored_item ( ( void * ) item, prop->count_internal,
-        &int_val, &uint_val, &double_val );
-        write_binary_item ( fp, int_val, uint_val, double_val,
-        prop->count_external );
-        list_count = uint_val;
-        item_ptr = ( char * *  ) ( elem_data + prop->offset );
-        item = item_ptr[0];
-        item_size = ply_type_size[prop->internal_type];
-        for ( k = 0; k < list_count; k++ )
-        {
-          get_stored_item ( ( void * ) item, prop->internal_type,
-          &int_val, &uint_val, &double_val );
-          write_binary_item ( fp, int_val, uint_val, double_val,
-          prop->external_type );
-          item += item_size;
-        }
-      }
-      else if ( prop->is_list == PLY_STRING )
-      {
-        /* string */
-        int     len;
-        char*  *str;
-        item = elem_data + prop->offset;
-        str = ( char * *  ) item;
-
-        /* write the length */
-        len = (int)strlen( *str ) + 1;
-        fwrite ( &len, sizeof( int ), 1, fp );
-
-        /* write the string, including the null character */
-        fwrite ( *str, len, 1, fp );
-      }
-      else
-      {
-        /* scalar */
-        item = elem_data + prop->offset;
-        item_size = ply_type_size[prop->internal_type];
-        get_stored_item ( ( void * ) item, prop->internal_type,
-        &int_val, &uint_val, &double_val );
-        write_binary_item ( fp, int_val, uint_val, double_val,
-        prop->external_type );
-      }
-    }
-  }
-}
-
-
-
-
-
-
-/*************/
-/*  Reading  */
-/*************/
-
-
-
-/******************************************************************************
-Given a file pointer, get ready to read PLY data from the file.
-
-Entry:
-fp - the given file pointer
-
-Exit:
-nelems     - number of elements in object
-elem_names - list of element names
-returns a pointer to a PlyFile, used to refer to this file, or NULL if error
-******************************************************************************/
-
-PlyFile *ply_read( FILE *fp, int *nelems, char ***elem_names )
-{
-  int         i,j;
-  PlyFile    *plyfile;
-  int         nwords;
-  char*      *words;
-  int         found_format  = 0;
-  char*      *elist;
-  PlyElement *elem;
-  char       *orig_line;
-
-  /* check for NULL file pointer */
-  if ( fp == NULL )
-    return ( NULL );
-
-  /* create record for this object */
-
-  plyfile = ( PlyFile *  ) myalloc ( sizeof ( PlyFile ) );
-  plyfile->num_elem_types = 0;
-  plyfile->comments = NULL;
-  plyfile->num_comments = 0;
-  plyfile->obj_info = NULL;
-  plyfile->num_obj_info = 0;
-  plyfile->fp = fp;
-  plyfile->other_elems = NULL;
-  plyfile->rule_list = NULL;
-
-  /* read and parse the file's header */
-
-  words = get_words ( plyfile->fp, &nwords, &orig_line );
-  if ( !words || !equal_strings ( words[0], "ply" ) )
-    return ( NULL );
-
-  while ( words )
-  {
-    /* parse words */
-
-    if ( equal_strings ( words[0], "format" ) )
-    {
-      if ( nwords != 3 )
-        return ( NULL );
-      if ( equal_strings ( words[1], "ascii" ) )
-        plyfile->file_type = PLY_ASCII;
-      else if ( equal_strings ( words[1], "binary_big_endian" ) )
-        plyfile->file_type = PLY_BINARY_BE;
-      else if ( equal_strings ( words[1], "binary_little_endian" ) )
-        plyfile->file_type = PLY_BINARY_LE;
-      else
-        return ( NULL );
-      plyfile->version = ( float ) atof ( words[2] );
-      found_format = 1;
-    }
-    else if ( equal_strings ( words[0], "element" ) )
-      add_element ( plyfile, words, nwords );
-    else if ( equal_strings ( words[0], "property" ) )
-      add_property ( plyfile, words, nwords );
-    else if ( equal_strings ( words[0], "comment" ) )
-      add_comment ( plyfile, orig_line );
-    else if ( equal_strings ( words[0], "obj_info" ) )
-      add_obj_info ( plyfile, orig_line );
-    else if ( equal_strings ( words[0], "end_header" ) )
-      break;
-
-    /* free up words space */
-    free ( words );
-
-    words = get_words ( plyfile->fp, &nwords, &orig_line );
-  }
-
-  /* create tags for each property of each element, to be used */
-  /* later to say whether or not to store each property for the user */
-
-  for ( i = 0; i < plyfile->num_elem_types; i++ )
-  {
-    elem = plyfile->elems[i];
-    elem->store_prop = ( char * ) myalloc ( sizeof ( char ) * elem->nprops );
-    for ( j = 0; j < elem->nprops; j++ )
-      elem->store_prop[j] = DONT_STORE_PROP;
-    elem->other_offset = NO_OTHER_PROPS; /* no "other" props by default */
-  }
-
-  /* set return values about the elements */
-
-  elist = ( char * *  ) myalloc ( sizeof ( char * ) * plyfile->num_elem_types );
-  for ( i = 0; i < plyfile->num_elem_types; i++ )
-    elist[i] = strdup ( plyfile->elems[i]->name );
-
-  *elem_names = elist;
-  *nelems = plyfile->num_elem_types;
-
-  /* return a pointer to the file's information */
-
-  return ( plyfile );
-}
-
-
-/******************************************************************************
-Open a polygon file for reading.
-
-Entry:
-filename - name of file to read from
-
-Exit:
-nelems     - number of elements in object
-elem_names - list of element names
-file_type  - file type, either ascii or binary
-version    - version number of PLY file
-returns a file identifier, used to refer to this file, or NULL if error
-******************************************************************************/
-
-PlyFile *ply_open_for_reading( const char *filename, int *nelems, char ***elem_names, int *file_type, float *version )
-{
-  FILE     *fp;
-  PlyFile  *plyfile;
-  char     *name;
-
-  /* tack on the extension .ply, if necessary */
-
-  name = ( char * ) myalloc ( sizeof ( char ) * ( (int)strlen ( filename ) + 5 ) );
-  strcpy ( name, filename );
-  if ( strlen ( name ) < 4 || strcmp ( name + strlen ( name ) - 4, ".ply" ) != 0 )
-    strcat ( name, ".ply" );
-
-  /* open the file for reading */
-
-  fp = fopen ( name, "r" );
-  if ( fp == NULL )
-    return ( NULL );
-
-  /* create the PlyFile data structure */
-
-  plyfile = ply_read ( fp, nelems, elem_names );
-
-  /* determine the file type and version */
-
-  *file_type = plyfile->file_type;
-  *version = plyfile->version;
-
-  /* return a pointer to the file's information */
-
-  return ( plyfile );
-}
-
-
-/******************************************************************************
-Get information about a particular element.
-
-Entry:
-plyfile   - file identifier
-elem_name - name of element to get information about
-
-Exit:
-nelems   - number of elements of this type in the file
-nprops   - number of properties
-returns a list of properties, or NULL if the file doesn't contain that elem
-******************************************************************************/
-
-PlyProperty **get_element_description_ply( PlyFile *plyfile, const char *elem_name, int *nelems, int *nprops )
-{
-  int             i;
-  PlyElement     *elem;
-  PlyProperty    *prop;
-  PlyProperty*   *prop_list;
-
-  /* find information about the element */
-  elem = find_element ( plyfile, elem_name );
-  if ( elem == NULL )
-    return ( NULL );
-
-  *nelems = elem->num;
-  *nprops = elem->nprops;
-
-  /* make a copy of the element's property list */
-  prop_list = ( PlyProperty *  *  ) myalloc ( sizeof ( PlyProperty *  ) * elem->nprops );
-  for ( i = 0; i < elem->nprops; i++ )
-  {
-    prop = ( PlyProperty *  ) myalloc ( sizeof ( PlyProperty ) );
-    copy_property ( prop, elem->props[i] );
-    prop_list[i] = prop;
-  }
-
-  /* return this duplicate property list */
-  return ( prop_list );
-}
-
-
-/******************************************************************************
-Specify which properties of an element are to be returned.  This should be
-called before a call to the routine get_element_ply().
-
-Entry:
-plyfile   - file identifier
-elem_name - which element we're talking about
-nprops    - number of properties
-prop_list - list of properties
-******************************************************************************/
-
-void get_element_setup_ply( PlyFile *plyfile, const char *elem_name, int nprops, PlyProperty *prop_list )
-{
-  int           i;
-  PlyElement   *elem;
-  PlyProperty  *prop;
-  int           index;
-
-  /* find information about the element */
-  elem = find_element ( plyfile, elem_name );
-  plyfile->which_elem = elem;
-
-  /* deposit the property information into the element's description */
-  for ( i = 0; i < nprops; i++ )
-  {
-    /* look for actual property */
-    prop = find_property ( elem, prop_list[i].name, &index );
-    if ( prop == NULL )
-    {
-      fprintf ( stderr, "Warning:  Can't find property '%s' in element '%s'\n",
-      prop_list[i].name, elem_name );
-      continue;
-    }
-
-    /* store its description */
-    prop->internal_type = prop_list[i].internal_type;
-    prop->offset = prop_list[i].offset;
-    prop->count_internal = prop_list[i].count_internal;
-    prop->count_offset = prop_list[i].count_offset;
-
-    /* specify that the user wants this property */
-    elem->store_prop[index] = STORE_PROP;
-  }
-}
-
-
-/******************************************************************************
-Specify a property of an element that is to be returned.  This should be
-called (usually multiple times) before a call to the routine ply_get_element().
-This routine should be used in preference to the less flexible old routine
-called ply_get_element_setup().
-
-Entry:
-plyfile   - file identifier
-elem_name - which element we're talking about
-prop      - property to add to those that will be returned
-******************************************************************************/
-
-void ply_get_property( PlyFile *plyfile, const char *elem_name, PlyProperty *prop )
-{
-  PlyElement   *elem;
-  PlyProperty  *prop_ptr;
-  int           index;
-
-  /* find information about the element */
-  elem = find_element ( plyfile, elem_name );
-  plyfile->which_elem = elem;
-
-  /* deposit the property information into the element's description */
-
-  prop_ptr = find_property ( elem, prop->name, &index );
-  if ( prop_ptr == NULL )
-  {
-    fprintf ( stderr, "Warning:  Can't find property '%s' in element '%s'\n",
-    prop->name, elem_name );
-    return;
-  }
-  prop_ptr->internal_type = prop->internal_type;
-  prop_ptr->offset = prop->offset;
-  prop_ptr->count_internal = prop->count_internal;
-  prop_ptr->count_offset = prop->count_offset;
-
-  /* specify that the user wants this property */
-  elem->store_prop[index] = STORE_PROP;
-}
-
-
-/******************************************************************************
-Read one element from the file.  This routine assumes that we're reading
-the type of element specified in the last call to the routine
-ply_get_element_setup().
-
-Entry:
-plyfile  - file identifier
-elem_ptr - pointer to location where the element information should be put
-******************************************************************************/
-
-void ply_get_element( PlyFile *plyfile, void *elem_ptr )
-{
-  if ( plyfile->file_type == PLY_ASCII )
-    ascii_get_element ( plyfile, ( char * ) elem_ptr );
-  else
-    binary_get_element ( plyfile, ( char * ) elem_ptr );
-}
-
-
-/******************************************************************************
-Extract the comments from the header information of a PLY file.
-
-Entry:
-plyfile - file identifier
-
-Exit:
-num_comments - number of comments returned
-returns a pointer to a list of comments
-******************************************************************************/
-
-char **get_comments_ply( PlyFile *plyfile, int *num_comments )
-{
-  *num_comments = plyfile->num_comments;
-  return ( plyfile->comments );
-}
-
-
-/******************************************************************************
-Extract the object information (arbitrary text) from the header information
-of a PLY file.
-
-Entry:
-plyfile - file identifier
-
-Exit:
-num_obj_info - number of lines of text information returned
-returns a pointer to a list of object info lines
-******************************************************************************/
-
-char **get_obj_info_ply( PlyFile *plyfile, int *num_obj_info )
-{
-  *num_obj_info = plyfile->num_obj_info;
-  return ( plyfile->obj_info );
-}
-
-
-/******************************************************************************
-ake ready for "other" properties of an element-- those properties that
-the user has not explicitly asked for, but that are to be stashed away
-in a special structure to be carried along with the element's other
-information.
-
-Entry:
-plyfile - file identifier
-elem    - element for which we want to save away other properties
-******************************************************************************/
-
-void setup_other_props( PlyFile *plyfile, PlyElement *elem )
-{
-  int           i;
-  PlyProperty  *prop;
-  int           size  = 0;
-  int           type_size;
-
-  /* Examine each property in decreasing order of size. */
-  /* We do this so that all data types will be aligned by */
-  /* word, half-word, or whatever within the structure. */
-
-  for ( type_size = 8; type_size > 0; type_size /= 2 )
-  {
-    /* add up the space taken by each property, and save this information */
-    /* away in the property descriptor */
-
-    for ( i = 0; i < elem->nprops; i++ )
-    {
-      /* don't bother with properties we've been asked to store explicitly */
-      if ( elem->store_prop[i] )
-        continue;
-
-      prop = elem->props[i];
-
-      /* internal types will be same as external */
-      prop->internal_type = prop->external_type;
-      prop->count_internal = prop->count_external;
-
-      /* list case */
-      if ( prop->is_list == PLY_LIST )
-      {
-        /* pointer to list */
-        if ( type_size == sizeof ( void * ) )
-        {
-          prop->offset = size;
-          size += sizeof ( void * );    /* always use size of a pointer here */
-        }
-
-        /* count of number of list elements */
-        if ( type_size == ply_type_size[prop->count_external] )
-        {
-          prop->count_offset = size;
-          size += ply_type_size[prop->count_external];
-        }
-      }
-      /* string */
-      else if ( prop->is_list == PLY_STRING )
-      {
-        /* pointer to string */
-        if ( type_size == sizeof ( char * ) )
-        {
-          prop->offset = size;
-          size += sizeof ( char * );
-        }
-      }
-      /* scalar */
-      else if ( type_size == ply_type_size[prop->external_type] )
-      {
-        prop->offset = size;
-        size += ply_type_size[prop->external_type];
-      }
-    }
-  }
-
-  /* save the size for the other_props structure */
-  elem->other_size = size;
-}
-
-
-/******************************************************************************
-Specify that we want the "other" properties of an element to be tucked
-away within the user's structure.
-
-Entry:
-plyfile - file identifier
-elem    - the element that we want to store other_props in
-offset  - offset to where other_props will be stored inside user's structure
-
-Exit:
-returns pointer to structure containing description of other_props
-******************************************************************************/
-
-static PlyOtherProp *get_other_properties( PlyFile *plyfile, PlyElement *elem, int offset )
-{
-  int           i;
-  PlyOtherProp *other;
-  PlyProperty  *prop;
-  int           nprops;
-
-  /* remember that this is the "current" element */
-  plyfile->which_elem = elem;
-
-  /* save the offset to where to store the other_props */
-  elem->other_offset = offset;
-
-  /* place the appropriate pointers, etc. in the element's property list */
-  setup_other_props ( plyfile, elem );
-
-  /* create structure for describing other_props */
-  other = ( PlyOtherProp *  ) myalloc ( sizeof ( PlyOtherProp ) );
-  other->name = strdup ( elem->name );
-#if 0
-if (elem->other_offset == NO_OTHER_PROPS) {
-other->size = 0;
-other->props = NULL;
-other->nprops = 0;
-return (other);
-}
-#endif
-  other->size = elem->other_size;
-  other->props = ( PlyProperty *  *  ) myalloc ( sizeof( PlyProperty ) * elem->nprops );
-
-  /* save descriptions of each "other" property */
-  nprops = 0;
-  for ( i = 0; i < elem->nprops; i++ )
-  {
-    if ( elem->store_prop[i] )
-      continue;
-    prop = ( PlyProperty *  ) myalloc ( sizeof ( PlyProperty ) );
-    copy_property ( prop, elem->props[i] );
-    other->props[nprops] = prop;
-    nprops++;
-  }
-  other->nprops = nprops;
-
-  /* set other_offset pointer appropriately if there are NO other properties */
-  if ( other->nprops == 0 )
-  {
-    elem->other_offset = NO_OTHER_PROPS;
-  }
-
-  /* return structure */
-  return ( other );
-}
-
-
-/******************************************************************************
-Specify that we want the "other" properties of an element to be tucked
-away within the user's structure.  The user needn't be concerned for how
-these properties are stored.
-
-Entry:
-plyfile   - file identifier
-elem_name - name of element that we want to store other_props in
-offset    - offset to where other_props will be stored inside user's structure
-
-Exit:
-returns pointer to structure containing description of other_props
-******************************************************************************/
-
-PlyOtherProp *ply_get_other_properties( PlyFile *plyfile, const char *elem_name, int offset )
-{
-  PlyElement   *elem;
-  PlyOtherProp *other;
-
-  /* find information about the element */
-  elem = find_element ( plyfile, elem_name );
-  if ( elem == NULL )
-  {
-    fprintf ( stderr, "ply_get_other_properties: Can't find element '%s'\n",
-    elem_name );
-    return ( NULL );
-  }
-
-  other = get_other_properties ( plyfile, elem, offset );
-  return ( other );
-}
-
-
-
-
-/*************************/
-/*  Other Element Stuff  */
-/*************************/
-
-
-
-
-
-/******************************************************************************
-Grab all the data for the current element that a user does not want to
-explicitly read in.  Stores this in the PLY object's data structure.
-
-Entry:
-plyfile - pointer to file
-
-Exit:
-returns pointer to ALL the "other" element data for this PLY file
-******************************************************************************/
-
-PlyOtherElems *get_other_element_ply( PlyFile *plyfile )
-{
-  int             i;
-  PlyElement     *elem;
-  char           *elem_name;
-  int             elem_count;
-  PlyOtherElems  *other_elems;
-  OtherElem      *other;
-
-  elem = plyfile->which_elem;
-  elem_name = elem->name;
-  elem_count = elem->num;
-
-  /* create room for the new "other" element, initializing the */
-  /* other data structure if necessary */
-
-  if ( plyfile->other_elems == NULL )
-  {
-    plyfile->other_elems = ( PlyOtherElems *  ) myalloc ( sizeof ( PlyOtherElems ) );
-    other_elems = plyfile->other_elems;
-    other_elems->other_list = ( OtherElem *  ) myalloc ( sizeof ( OtherElem ) );
-    other = &( other_elems->other_list[0] );
-    other_elems->num_elems = 1;
-  }
-  else
-  {
-    other_elems = plyfile->other_elems;
-    other_elems->other_list = ( OtherElem *  ) realloc ( other_elems->other_list,
-    sizeof ( OtherElem ) * other_elems->num_elems + 1 );
-    other = &( other_elems->other_list[other_elems->num_elems] );
-    other_elems->num_elems++;
-  }
-
-  /* count of element instances in file */
-  other->elem_count = elem_count;
-
-  /* save name of element */
-  other->elem_name = strdup ( elem_name );
-
-  /* create a list to hold all the current elements */
-  other->other_data = ( OtherData *  *  )
-  malloc ( sizeof ( OtherData *  ) * other->elem_count );
-
-  /* set up for getting elements */
-  other->other_props = ply_get_other_properties ( plyfile, elem_name,
-  offsetof( OtherData,other_props ) );
-
-  /* grab all these elements */
-  for ( i = 0; i < other->elem_count; i++ )
-  {
-    /* grab and element from the file */
-    other->other_data[i] = ( OtherData *  ) malloc ( sizeof ( OtherData ) );
-    ply_get_element ( plyfile, ( void * ) other->other_data[i] );
-  }
-
-  /* return pointer to the other elements data */
-  return ( other_elems );
-}
-
-
-/******************************************************************************
-Write out the "other" elements specified for this PLY file.
-
-Entry:
-plyfile - pointer to PLY file to write out other elements for
-******************************************************************************/
-
-void put_other_elements_ply( PlyFile *plyfile )
-{
-  int         i,j;
-  OtherElem  *other;
-
-  /* make sure we have other elements to write */
-  if ( plyfile->other_elems == NULL )
-    return;
-
-  /* write out the data for each "other" element */
-
-  for ( i = 0; i < plyfile->other_elems->num_elems; i++ )
-  {
-    other = &( plyfile->other_elems->other_list[i] );
-    put_element_setup_ply ( plyfile, other->elem_name );
-
-    /* write out each instance of the current element */
-    for ( j = 0; j < other->elem_count; j++ )
-      put_element_ply ( plyfile, ( void * ) other->other_data[j] );
-  }
-}
-
-
-/******************************************************************************
-Free up storage used by an "other" elements data structure.
-
-Entry:
-other_elems - data structure to free up
-******************************************************************************/
-
-void free_other_elements_ply( PlyOtherElems *other_elems )
-{
-}
-
-
-
-/*******************/
-/*  Miscellaneous  */
-/*******************/
-
-
-
-/******************************************************************************
-Close a PLY file.
-
-Entry:
-plyfile - identifier of file to close
-******************************************************************************/
-
-void ply_close( PlyFile *plyfile )
-{
-  fclose ( plyfile->fp );
-
-  /* free up memory associated with the PLY file */
-  free ( plyfile );
-}
-
-
-/******************************************************************************
-Get version number and file type of a PlyFile.
-
-Entry:
-ply - pointer to PLY file
-
-Exit:
-version - version of the file
-file_type - PLY_ASCII, PLY_BINARY_BE, or PLY_BINARY_LE
-******************************************************************************/
-
-void get_info_ply( PlyFile *ply, float *version, int *file_type )
-{
-  if ( ply == NULL )
-    return;
-
-  *version = ply->version;
-  *file_type = ply->file_type;
-}
-
-
-/******************************************************************************
-Compare two strings.  Returns 1 if they are the same, 0 if not.
-******************************************************************************/
-
-int equal_strings( const char *s1, const char *s2 )
-{
-  while ( *s1 && *s2 )
-    if ( *s1++ != *s2++ )
-      return ( 0 );
-
-  if ( *s1 != *s2 )
-    return ( 0 );
-  else
-    return ( 1 );
-}
-
-
-/******************************************************************************
-Re-create the command line that was used to invoke this program.
-
-Entry:
-argc - number of words in argv
-argv - array of words in command line
-******************************************************************************/
-
-char *recreate_command_line( int argc, char *argv[] )
-{
-  int   i;
-  char *line;
-  int   len = 0;
-
-  /* count total number of characters needed, including separating spaces */
-  for ( i = 0; i < argc; i++ )
-    len += (int)strlen( argv[i] ) + 1;
-
-  /* create empty line */
-  line = ( char * ) malloc ( sizeof( char ) * len );
-  line[0] = '\0';
-
-  /* repeatedly append argv */
-  for ( i = 0; i < argc; i++ )
-  {
-    strcat ( line, argv[i] );
-    if ( i != argc - 1 )
-      strcat ( line, " " );
-  }
-
-  return ( line );
-}
-
-
-/******************************************************************************
-Find an element from the element list of a given PLY object.
-
-Entry:
-plyfile - file id for PLY file
-element - name of element we're looking for
-
-Exit:
-returns the element, or NULL if not found
-******************************************************************************/
-
-PlyElement *find_element( PlyFile *plyfile, const char *element )
-{
-  int i;
-
-  for ( i = 0; i < plyfile->num_elem_types; i++ )
-    if ( equal_strings ( element, plyfile->elems[i]->name ) )
-      return ( plyfile->elems[i] );
-
-  return ( NULL );
-}
-
-
-/******************************************************************************
-Find a property in the list of properties of a given element.
-
-Entry:
-elem      - pointer to element in which we want to find the property
-prop_name - name of property to find
-
-Exit:
-index - index to position in list
-returns a pointer to the property, or NULL if not found
-******************************************************************************/
-
-PlyProperty *find_property( PlyElement *elem, const char *prop_name, int *index )
-{
-  int i;
-
-  for ( i = 0; i < elem->nprops; i++ )
-    if ( equal_strings ( prop_name, elem->props[i]->name ) )
-    {
-      *index = i;
-      return ( elem->props[i] );
-    }
-
-  *index = -1;
-  return ( NULL );
-}
-
-
-/******************************************************************************
-Read an element from an ascii file.
-
-Entry:
-plyfile  - file identifier
-elem_ptr - pointer to element
-******************************************************************************/
-
-void ascii_get_element( PlyFile *plyfile, char *elem_ptr )
-{
-  int           j,k;
-  PlyElement   *elem=NULL;
-  PlyProperty  *prop=NULL;
-  char*        *words=NULL;
-  int           nwords;
-  int           which_word;
-  char         *elem_data=NULL,*item=NULL;
-  char         *item_ptr=NULL;
-  int           item_size;
-  int           int_val;
-  unsigned int uint_val;
-  double  double_val;
-  int     list_count;
-  int     store_it;
-  char*  *store_array=NULL;
-  char   *orig_line=NULL;
-  char   *other_data=NULL;
-  int     other_flag;
-
-  /* the kind of element we're reading currently */
-  elem = plyfile->which_elem;
-
-  /* do we need to setup for other_props? */
-
-  if ( elem->other_offset != NO_OTHER_PROPS )
-  {
-    char*  *ptr;
-    other_flag = 1;
-    /* make room for other_props */
-    other_data = ( char * ) myalloc ( elem->other_size );
-    /* store pointer in user's structure to the other_props */
-    ptr = ( char * *  ) ( elem_ptr + elem->other_offset );
-    *ptr = other_data;
-  }
-  else
-    other_flag = 0;
-
-  /* read in the element */
-
-  words = get_words ( plyfile->fp, &nwords, &orig_line );
-  if ( words == NULL )
-  {
-    fprintf ( stderr, "ply_get_element: unexpected end of file\n" );
-    exit ( -1 );
-  }
-
-  which_word = 0;
-
-  for ( j = 0; j < elem->nprops; j++ )
-  {
-    prop = elem->props[j];
-    store_it = ( elem->store_prop[j] | other_flag );
-
-    /* store either in the user's structure or in other_props */
-    if ( elem->store_prop[j] )
-      elem_data = elem_ptr;
-    else
-      elem_data = other_data;
-
-    if ( prop->is_list == PLY_LIST )
-    {
-      /* a list */
-
-      /* get and store the number of items in the list */
-      get_ascii_item ( words[which_word++], prop->count_external,
-      &int_val, &uint_val, &double_val );
-      if ( store_it )
-      {
-        item = elem_data + prop->count_offset;
-        store_item( item, prop->count_internal, int_val, uint_val, double_val );
-      }
-
-      /* allocate space for an array of items and store a ptr to the array */
-      list_count = int_val;
-      item_size = ply_type_size[prop->internal_type];
-      store_array = ( char * *  ) ( elem_data + prop->offset );
-
-      if ( list_count == 0 )
-      {
-        if ( store_it )
-          *store_array = NULL;
-      }
-      else
-      {
-        if ( store_it )
-        {
-          item_ptr = ( char * ) myalloc ( sizeof ( char ) * item_size * list_count );
-          item = item_ptr;
-          *store_array = item_ptr;
-        }
-
-        /* read items and store them into the array */
-        for ( k = 0; k < list_count; k++ )
-        {
-          get_ascii_item ( words[which_word++], prop->external_type,
-          &int_val, &uint_val, &double_val );
-          if ( store_it )
-          {
-            store_item ( item, prop->internal_type,
-            int_val, uint_val, double_val );
-            item += item_size;
-          }
-        }
-      }
-    }
-    else if ( prop->is_list == PLY_STRING )
-    {
-      /* a string */
-      if ( store_it )
-      {
-        char   *str;
-        char*  *str_ptr;
-        str = strdup ( words[which_word++] );
-        item = elem_data + prop->offset;
-        str_ptr = ( char * *  ) item;
-        *str_ptr = str;
-      }
-      else
-      {
-        which_word++;
-      }
-    }
-    else
-    {
-      /* a scalar */
-      get_ascii_item ( words[which_word++], prop->external_type,
-      &int_val, &uint_val, &double_val );
-      if ( store_it )
-      {
-        item = elem_data + prop->offset;
-        store_item ( item, prop->internal_type, int_val, uint_val, double_val );
-      }
-    }
-  }
-
-  free ( words );
-}
-
-
-/******************************************************************************
-Read an element from a binary file.
-
-Entry:
-plyfile  - file identifier
-elem_ptr - pointer to an element
-******************************************************************************/
-
-void binary_get_element( PlyFile *plyfile, char *elem_ptr )
-{
-  int           j,k;
-  PlyElement   *elem= NULL;
-  PlyProperty  *prop= NULL;
-  FILE         *fp  = plyfile->fp;
-  char         *elem_data;
-  char         *item = NULL;
-  char         *item_ptr= NULL;
-  int           item_size;
-  int           int_val;
-  unsigned int uint_val;
-  double  double_val;
-  int     list_count;
-  int     store_it;
-  char*  *store_array= NULL;
-  char   *other_data= NULL;
-  int     other_flag;
-
-  /* the kind of element we're reading currently */
-  elem = plyfile->which_elem;
-
-  /* do we need to setup for other_props? */
-
-  if ( elem->other_offset != NO_OTHER_PROPS )
-  {
-    char*  *ptr;
-    other_flag = 1;
-    /* make room for other_props */
-    other_data = ( char * ) myalloc ( elem->other_size );
-    /* store pointer in user's structure to the other_props */
-    ptr = ( char * *  ) ( elem_ptr + elem->other_offset );
-    *ptr = other_data;
-  }
-  else
-    other_flag = 0;
-
-  /* read in a number of elements */
-
-  for ( j = 0; j < elem->nprops; j++ )
-  {
-    prop = elem->props[j];
-    store_it = ( elem->store_prop[j] | other_flag );
-
-    /* store either in the user's structure or in other_props */
-    if ( elem->store_prop[j] )
-      elem_data = elem_ptr;
-    else
-      elem_data = other_data;
-
-    if ( prop->is_list == PLY_LIST )
-    {
-      /* list */
-
-      /* get and store the number of items in the list */
-      get_binary_item ( fp, prop->count_external,
-      &int_val, &uint_val, &double_val );
-      if ( store_it )
-      {
-        item = elem_data + prop->count_offset;
-        store_item( item, prop->count_internal, int_val, uint_val, double_val );
-      }
-
-      /* allocate space for an array of items and store a ptr to the array */
-      list_count = int_val;
-      item_size = ply_type_size[prop->internal_type];
-      store_array = ( char * *  ) ( elem_data + prop->offset );
-      if ( list_count == 0 )
-      {
-        if ( store_it )
-          *store_array = NULL;
-      }
-      else
-      {
-        if ( store_it )
-        {
-          item_ptr = ( char * ) myalloc ( sizeof ( char ) * item_size * list_count );
-          item = item_ptr;
-          *store_array = item_ptr;
-        }
-
-        /* read items and store them into the array */
-        for ( k = 0; k < list_count; k++ )
-        {
-          get_binary_item ( fp, prop->external_type,
-          &int_val, &uint_val, &double_val );
-          if ( store_it )
-          {
-            store_item ( item, prop->internal_type,
-            int_val, uint_val, double_val );
-            item += item_size;
-          }
-        }
-      }
-    }
-    else if ( prop->is_list == PLY_STRING )
-    {
-      /* string */
-      int   len;
-      char *str;
-      fread ( &len, sizeof( int ), 1, fp );
-      str = ( char * ) myalloc ( len );
-      fread ( str, len, 1, fp );
-      if ( store_it )
-      {
-        char*  *str_ptr;
-        item = elem_data + prop->offset;
-        str_ptr = ( char * *  ) item;
-        *str_ptr = str;
-      }
-    }
-    else
-    {
-      /* scalar */
-      get_binary_item ( fp, prop->external_type,
-      &int_val, &uint_val, &double_val );
-      if ( store_it )
-      {
-        item = elem_data + prop->offset;
-        store_item ( item, prop->internal_type, int_val, uint_val, double_val );
-      }
-    }
-  }
-}
-
-
-/******************************************************************************
-Write to a file the word that represents a PLY data type.
-
-Entry:
-fp   - file pointer
-code - code for type
-******************************************************************************/
-
-void write_scalar_type( FILE *fp, int code )
-{
-  /* make sure this is a valid code */
-
-  if ( code <= StartType || code >= EndType )
-  {
-    fprintf ( stderr, "write_scalar_type: bad data code = %d\n", code );
-    exit ( -1 );
-  }
-
-  /* write the code to a file */
-
-  fprintf ( fp, "%s", type_names[code] );
-}
-
-
-/******************************************************************************
-Get a text line from a file and break it up into words.
-
-IMPORTANT: The calling routine should call "free" on the returned pointer once
-finished with it.
-
-Entry:
-fp - file to read from
-
-Exit:
-nwords    - number of words returned
-orig_line - the original line of characters
-returns a list of words from the line, or NULL if end-of-file
-******************************************************************************/
-
-char **get_words( FILE *fp, int *nwords, char **orig_line )
-{
-#define BIG_STRING 4096
-  static char str[BIG_STRING];
-  static char str_copy[BIG_STRING];
-  char*      *words;
-  int         max_words = 10;
-  int         num_words = 0;
-  char       *ptr,*ptr2;
-  char       *result;
-
-  words = ( char * *  ) myalloc ( sizeof ( char * ) * max_words );
-
-  /* read in a line */
-  result = fgets ( str, BIG_STRING, fp );
-  if ( result == NULL )
-  {
-    *nwords = 0;
-    *orig_line = NULL;
-    return ( NULL );
-  }
-
-  /* convert line-feed and tabs into spaces */
-  /* (this guarentees that there will be a space before the */
-  /*  null character at the end of the string) */
-
-  str[BIG_STRING - 2] = ' ';
-  str[BIG_STRING - 1] = '\0';
-
-  for ( ptr = str, ptr2 = str_copy; *ptr != '\0'; ptr++, ptr2++ )
-  {
-    *ptr2 = *ptr;
-    if ( *ptr == '\t' )
-    {
-      *ptr = ' ';
-      *ptr2 = ' ';
-    }
-    else if ( *ptr == '\n' )
-    {
-      *ptr = ' ';
-      *ptr2 = ' ';
-      break;
-    }
-    else if ( *ptr == '\r' )
-    {
-      *ptr = ' ';
-      *ptr2 = '\0';
-    }
-  }
-
-  /* find the words in the line */
-
-  ptr = str;
-  while ( *ptr != '\0' )
-  {
-    /* jump over leading spaces */
-    while ( *ptr == ' ' )
-      ptr++;
-
-    /* break if we reach the end */
-    if ( *ptr == '\0' )
-      break;
-
-    /* allocate more room for words if necessary */
-    if ( num_words >= max_words )
-    {
-      max_words += 10;
-      words = ( char * *  ) realloc ( words, sizeof ( char * ) * max_words );
-    }
-
-    if ( *ptr == '\"' )
-    {
-      /* a quote indidicates that we have a string */
-
-      /* skip over leading quote */
-      ptr++;
-
-      /* save pointer to beginning of word */
-      words[num_words++] = ptr;
-
-      /* find trailing quote or end of line */
-      while ( *ptr != '\"' && *ptr != '\0' )
-        ptr++;
-
-      /* replace quote with a null character to mark the end of the word */
-      /* if we are not already at the end of the line */
-      if ( *ptr != '\0' )
-        *ptr++ = '\0';
-    }
-    else
-    {
-      /* non-string */
-
-      /* save pointer to beginning of word */
-      words[num_words++] = ptr;
-
-      /* jump over non-spaces */
-      while ( *ptr != ' ' )
-        ptr++;
-
-      /* place a null character here to mark the end of the word */
-      *ptr++ = '\0';
-    }
-  }
-
-  /* return the list of words */
-  *nwords = num_words;
-  *orig_line = str_copy;
-  return ( words );
-}
-
-
-/******************************************************************************
-Return the value of an item, given a pointer to it and its type.
-
-Entry:
-item - pointer to item
-type - data type that "item" points to
-
-Exit:
-returns a double-precision float that contains the value of the item
-******************************************************************************/
-
-double get_item_value( const char *item, int type )
-{
-  unsigned char *puchar;
-  char       *pchar;
-  short int  *pshort;
-  unsigned short int *pushort;
-  int  *pint;
-  unsigned int *puint;
-  float  *pfloat;
-  double *pdouble;
-  int     int_value;
-  unsigned int uint_value;
-  double  double_value;
-
-  switch ( type )
-  {
-    case Int8:
-      pchar = ( char * ) item;
-      int_value = *pchar;
-      return ( ( double ) int_value );
-    case Uint8:
-      puchar = ( unsigned char * ) item;
-      int_value = *puchar;
-      return ( ( double ) int_value );
-    case Int16:
-      pshort = ( short int * ) item;
-      int_value = *pshort;
-      return ( ( double ) int_value );
-    case Uint16:
-      pushort = ( unsigned short int * ) item;
-      int_value = *pushort;
-      return ( ( double ) int_value );
-    case Int32:
-      pint = ( int * ) item;
-      int_value = *pint;
-      return ( ( double ) int_value );
-    case Uint32:
-      puint = ( unsigned int * ) item;
-      uint_value = *puint;
-      return ( ( double ) uint_value );
-    case Float32:
-      pfloat = ( float * ) item;
-      double_value = *pfloat;
-      return ( double_value );
-    case Float64:
-      pdouble = ( double * ) item;
-      double_value = *pdouble;
-      return ( double_value );
-    default:
-      fprintf ( stderr, "get_item_value: bad type = %d\n", type );
-      exit ( -1 );
-  }
-
-  return ( 0.0 );  /* never actually gets here */
-}
-
-
-/******************************************************************************
-Write out an item to a file as raw binary bytes.
-
-Entry:
-fp         - file to write to
-int_val    - integer version of item
-uint_val   - unsigned integer version of item
-double_val - double-precision float version of item
-type       - data type to write out
-******************************************************************************/
-
-void write_binary_item( FILE *fp, int int_val, unsigned int uint_val, double double_val, int type )
-{
-  unsigned char uchar_val;
-  char  char_val;
-  unsigned short ushort_val;
-  short short_val;
-  float float_val;
-
-  switch ( type )
-  {
-    case Int8:
-      char_val = int_val;
-      fwrite ( &char_val, 1, 1, fp );
-      break;
-    case Int16:
-      short_val = int_val;
-      fwrite ( &short_val, 2, 1, fp );
-      break;
-    case Int32:
-      fwrite ( &int_val, 4, 1, fp );
-      break;
-    case Uint8:
-      uchar_val = uint_val;
-      fwrite ( &uchar_val, 1, 1, fp );
-      break;
-    case Uint16:
-      ushort_val = uint_val;
-      fwrite ( &ushort_val, 2, 1, fp );
-      break;
-    case Uint32:
-      fwrite ( &uint_val, 4, 1, fp );
-      break;
-    case Float32:
-      float_val = ( float ) double_val;
-      fwrite ( &float_val, 4, 1, fp );
-      break;
-    case Float64:
-      fwrite ( &double_val, 8, 1, fp );
-      break;
-    default:
-      fprintf ( stderr, "write_binary_item: bad type = %d\n", type );
-      exit ( -1 );
-  }
-}
-
-
-/******************************************************************************
-Write out an item to a file as ascii characters.
-
-Entry:
-fp         - file to write to
-int_val    - integer version of item
-uint_val   - unsigned integer version of item
-double_val - double-precision float version of item
-type       - data type to write out
-******************************************************************************/
-
-void write_ascii_item( FILE *fp, int int_val, unsigned int uint_val, double double_val, int type )
-{
-  switch ( type )
-  {
-    case Int8:
-    case Int16:
-    case Int32:
-      fprintf ( fp, "%d ", int_val );
-      break;
-    case Uint8:
-    case Uint16:
-    case Uint32:
-      fprintf ( fp, "%u ", uint_val );
-      break;
-    case Float32:
-    case Float64:
-      fprintf ( fp, "%12f ", double_val );
-      break;
-    default:
-      fprintf ( stderr, "write_ascii_item: bad type = %d\n", type );
-      exit ( -1 );
-  }
-}
-
-
-/******************************************************************************
-Get the value of an item that is in memory, and place the result
-into an integer, an unsigned integer and a double.
-
-Entry:
-ptr  - pointer to the item
-type - data type supposedly in the item
-
-Exit:
-int_val    - integer value
-uint_val   - unsigned integer value
-double_val - double-precision floating point value
-******************************************************************************/
-
-void get_stored_item( void *ptr, int type, int *int_val, unsigned int *uint_val, double *double_val )
-{
-  switch ( type )
-  {
-    case Int8:
-      *int_val = *( ( char * ) ptr );
-      *uint_val = *int_val;
-      *double_val = *int_val;
-      break;
-    case Uint8:
-      *uint_val = *( ( unsigned char * ) ptr );
-      *int_val = *uint_val;
-      *double_val = *uint_val;
-      break;
-    case Int16:
-      *int_val = *( ( short int * ) ptr );
-      *uint_val = *int_val;
-      *double_val = *int_val;
-      break;
-    case Uint16:
-      *uint_val = *( ( unsigned short int * ) ptr );
-      *int_val = *uint_val;
-      *double_val = *uint_val;
-      break;
-    case Int32:
-      *int_val = *( ( int * ) ptr );
-      *uint_val = *int_val;
-      *double_val = *int_val;
-      break;
-    case Uint32:
-      *uint_val = *( ( unsigned int * ) ptr );
-      *int_val = *uint_val;
-      *double_val = *uint_val;
-      break;
-    case Float32:
-      *double_val = *( ( float * ) ptr );
-      *int_val = ( int ) *double_val;
-      *uint_val = ( unsigned int ) *double_val;
-      break;
-    case Float64:
-      *double_val = *( ( double * ) ptr );
-      *int_val = ( int ) *double_val;
-      *uint_val = ( unsigned int ) *double_val;
-      break;
-    default:
-      fprintf ( stderr, "get_stored_item: bad type = %d\n", type );
-      exit ( -1 );
-  }
-}
-
-
-/******************************************************************************
-Get the value of an item from a binary file, and place the result
-into an integer, an unsigned integer and a double.
-
-Entry:
-fp   - file to get item from
-type - data type supposedly in the word
-
-Exit:
-int_val    - integer value
-uint_val   - unsigned integer value
-double_val - double-precision floating point value
-******************************************************************************/
-
-void get_binary_item( FILE *fp, int type, int *int_val, unsigned int *uint_val, double *double_val )
-{
-  char  c[8];
-  void *ptr;
-
-  ptr = ( void * ) c;
-
-  switch ( type )
-  {
-    case Int8:
-      fread ( ptr, 1, 1, fp );
-      *int_val = *( ( char * ) ptr );
-      *uint_val = *int_val;
-      *double_val = *int_val;
-      break;
-    case Uint8:
-      fread ( ptr, 1, 1, fp );
-      *uint_val = *( ( unsigned char * ) ptr );
-      *int_val = *uint_val;
-      *double_val = *uint_val;
-      break;
-    case Int16:
-      fread ( ptr, 2, 1, fp );
-      *int_val = *( ( short int * ) ptr );
-      *uint_val = *int_val;
-      *double_val = *int_val;
-      break;
-    case Uint16:
-      fread ( ptr, 2, 1, fp );
-      *uint_val = *( ( unsigned short int * ) ptr );
-      *int_val = *uint_val;
-      *double_val = *uint_val;
-      break;
-    case Int32:
-      fread ( ptr, 4, 1, fp );
-      *int_val = *( ( int * ) ptr );
-      *uint_val = *int_val;
-      *double_val = *int_val;
-      break;
-    case Uint32:
-      fread ( ptr, 4, 1, fp );
-      *uint_val = *( ( unsigned int * ) ptr );
-      *int_val = *uint_val;
-      *double_val = *uint_val;
-      break;
-    case Float32:
-      fread ( ptr, 4, 1, fp );
-      *double_val = *( ( float * ) ptr );
-      *int_val = ( int ) *double_val;
-      *uint_val = ( unsigned int ) *double_val;
-      break;
-    case Float64:
-      fread ( ptr, 8, 1, fp );
-      *double_val = *( ( double * ) ptr );
-      *int_val = ( int ) *double_val;
-      *uint_val = ( unsigned int ) *double_val;
-      break;
-    default:
-      fprintf ( stderr, "get_binary_item: bad type = %d\n", type );
-      exit ( -1 );
-  }
-}
-
-
-/******************************************************************************
-Extract the value of an item from an ascii word, and place the result
-into an integer, an unsigned integer and a double.
-
-Entry:
-word - word to extract value from
-type - data type supposedly in the word
-
-Exit:
-int_val    - integer value
-uint_val   - unsigned integer value
-double_val - double-precision floating point value
-******************************************************************************/
-
-void get_ascii_item( const char *word, int type, int *int_val, unsigned int *uint_val, double *double_val )
-{
-  switch ( type )
-  {
-    case Int8:
-    case Uint8:
-    case Int16:
-    case Uint16:
-    case Int32:
-      *int_val = atoi ( word );
-      *uint_val = *int_val;
-      *double_val = *int_val;
-      break;
-
-    case Uint32:
-      *uint_val = strtoul ( word, ( char * *  ) NULL, 10 );
-      *int_val = *uint_val;
-      *double_val = *uint_val;
-      break;
-
-    case Float32:
-    case Float64:
-      *double_val = atof ( word );
-      *int_val = ( int ) *double_val;
-      *uint_val = ( unsigned int ) *double_val;
-      break;
-
-    default:
-      fprintf ( stderr, "get_ascii_item: bad type = %d\n", type );
-      exit ( -1 );
-  }
-}
-
-
-/******************************************************************************
-Store a value into a place being pointed to, guided by a data type.
-
-Entry:
-item       - place to store value
-type       - data type
-int_val    - integer version of value
-uint_val   - unsigned integer version of value
-double_val - double version of value
-
-Exit:
-item - pointer to stored value
-******************************************************************************/
-
-void store_item( char *item, int type, int int_val, unsigned int uint_val, double double_val )
-{
-  unsigned char *puchar;
-  short int  *pshort;
-  unsigned short int *pushort;
-  int  *pint;
-  unsigned int *puint;
-  float  *pfloat;
-  double *pdouble;
-
-  switch ( type )
-  {
-    case Int8:
-      *item = int_val;
-      break;
-    case Uint8:
-      puchar = ( unsigned char * ) item;
-      *puchar = uint_val;
-      break;
-    case Int16:
-      pshort = ( short * ) item;
-      *pshort = int_val;
-      break;
-    case Uint16:
-      pushort = ( unsigned short * ) item;
-      *pushort = uint_val;
-      break;
-    case Int32:
-      pint = ( int * ) item;
-      *pint = int_val;
-      break;
-    case Uint32:
-      puint = ( unsigned int * ) item;
-      *puint = uint_val;
-      break;
-    case Float32:
-      pfloat = ( float * ) item;
-      *pfloat = ( float ) double_val;
-      break;
-    case Float64:
-      pdouble = ( double * ) item;
-      *pdouble = double_val;
-      break;
-    default:
-      fprintf ( stderr, "store_item: bad type = %d\n", type );
-      exit ( -1 );
-  }
-}
-
-
-/******************************************************************************
-Add an element to a PLY file descriptor.
-
-Entry:
-plyfile - PLY file descriptor
-words   - list of words describing the element
-nwords  - number of words in the list
-******************************************************************************/
-
-void add_element( PlyFile *plyfile, char **words, int nwords )
-{
-  PlyElement *elem;
-
-  /* create the new element */
-  elem = ( PlyElement *  ) myalloc ( sizeof ( PlyElement ) );
-  elem->name = strdup ( words[1] );
-  elem->num = atoi ( words[2] );
-  elem->nprops = 0;
-
-  /* make room for new element in the object's list of elements */
-  if ( plyfile->num_elem_types == 0 )
-    plyfile->elems = ( PlyElement *  *  ) myalloc ( sizeof ( PlyElement *  ) );
-  else
-    plyfile->elems = ( PlyElement *  *  ) realloc ( plyfile->elems,
-    sizeof ( PlyElement *  ) * ( plyfile->num_elem_types + 1 ) );
-
-  /* add the new element to the object's list */
-  plyfile->elems[plyfile->num_elem_types] = elem;
-  plyfile->num_elem_types++;
-}
-
-
-/******************************************************************************
-Return the type of a property, given the name of the property.
-
-Entry:
-name - name of property type
-
-Exit:
-returns integer code for property, or 0 if not found
-******************************************************************************/
-
-int get_prop_type( const char *type_name )
-{
-  int i;
-
-  /* try to match the type name */
-  for ( i = StartType + 1; i < EndType; i++ )
-    if ( equal_strings ( type_name, type_names[i] ) )
-      return ( i );
-
-  /* see if we can match an old type name */
-  for ( i = StartType + 1; i < EndType; i++ )
-    if ( equal_strings ( type_name, old_type_names[i] ) )
-      return ( i );
-
-  /* if we get here, we didn't find the type */
-  return ( 0 );
-}
-
-
-/******************************************************************************
-Add a property to a PLY file descriptor.
-
-Entry:
-plyfile - PLY file descriptor
-words   - list of words describing the property
-nwords  - number of words in the list
-******************************************************************************/
-
-void add_property( PlyFile *plyfile, char **words, int nwords )
-{
-  PlyProperty  *prop;
-  PlyElement   *elem;
-
-  /* create the new property */
-
-  prop = ( PlyProperty *  ) myalloc ( sizeof ( PlyProperty ) );
-
-  if ( equal_strings ( words[1], "list" ) )
-  {
-    /* list */
-    prop->count_external = get_prop_type ( words[2] );
-    prop->external_type = get_prop_type ( words[3] );
-    prop->name = strdup ( words[4] );
-    prop->is_list = PLY_LIST;
-  }
-  else if ( equal_strings ( words[1], "string" ) )
-  {
-    /* string */
-    prop->count_external = Int8;
-    prop->external_type = Int8;
-    prop->name = strdup ( words[2] );
-    prop->is_list = PLY_STRING;
-  }
-  else
-  {
-    /* scalar */
-    prop->external_type = get_prop_type ( words[1] );
-    prop->name = strdup ( words[2] );
-    prop->is_list = PLY_SCALAR;
-  }
-
-  /* add this property to the list of properties of the current element */
-
-  elem = plyfile->elems[plyfile->num_elem_types - 1];
-
-  if ( elem->nprops == 0 )
-    elem->props = ( PlyProperty *  *  ) myalloc ( sizeof ( PlyProperty *  ) );
-  else
-    elem->props = ( PlyProperty *  *  ) realloc ( elem->props,
-    sizeof ( PlyProperty *  ) * ( elem->nprops + 1 ) );
-
-  elem->props[elem->nprops] = prop;
-  elem->nprops++;
-}
-
-
-/******************************************************************************
-Add a comment to a PLY file descriptor.
-
-Entry:
-plyfile - PLY file descriptor
-line    - line containing comment
-******************************************************************************/
-
-void add_comment( PlyFile *plyfile, const char *line )
-{
-  int i;
-
-  /* skip over "comment" and leading spaces and tabs */
-  i = 7;
-  while ( line[i] == ' ' || line[i] == '\t' )
-    i++;
-
-  append_comment_ply ( plyfile, &line[i] );
-}
-
-
-/******************************************************************************
-Add a some object information to a PLY file descriptor.
-
-Entry:
-plyfile - PLY file descriptor
-line    - line containing text info
-******************************************************************************/
-
-void add_obj_info( PlyFile *plyfile, const char *line )
-{
-  int i;
-
-  /* skip over "obj_info" and leading spaces and tabs */
-  i = 8;
-  while ( line[i] == ' ' || line[i] == '\t' )
-    i++;
-
-  append_obj_info_ply ( plyfile, &line[i] );
-}
-
-
-/******************************************************************************
-Copy a property.
-******************************************************************************/
-
-void copy_property( PlyProperty *dest, PlyProperty *src )
-{
-  dest->name = strdup ( src->name );
-  dest->external_type = src->external_type;
-  dest->internal_type = src->internal_type;
-  dest->offset = src->offset;
-
-  dest->is_list = src->is_list;
-  dest->count_external = src->count_external;
-  dest->count_internal = src->count_internal;
-  dest->count_offset = src->count_offset;
-}
-
-
-/******************************************************************************
-Allocate some memory.
-
-Entry:
-size  - amount of memory requested (in bytes)
-lnum  - line number from which memory was requested
-fname - file name from which memory was requested
-******************************************************************************/
-
-static char *my_alloc( int size, int lnum, const char *fname )
-{
-  char *ptr;
-
-  ptr = ( char * ) malloc ( size );
-
-  if ( ptr == 0 )
-  {
-    fprintf( stderr, "Memory allocation bombed on line %d in %s\n", lnum, fname );
-  }
-
-  return ( ptr );
-}
-
-
-/**** NEW STUFF ****/
-/**** NEW STUFF ****/
-/**** NEW STUFF ****/
-/**** NEW STUFF ****/
-
-
-
-/******************************************************************************
-Given a file pointer, get ready to read PLY data from the file.
-
-Entry:
-fp - the given file pointer
-
-Exit:
-nelems     - number of elements in object
-elem_names - list of element names
-returns a pointer to a PlyFile, used to refer to this file, or NULL if error
-******************************************************************************/
-
-PlyFile *read_ply( FILE *fp )
-{
-  PlyFile  *ply;
-  int       num_elems;
-  char*    *elem_names;
-
-  ply = ply_read ( fp, &num_elems, &elem_names );
-
-  return ( ply );
-}
-
-
-/******************************************************************************
-Given a file pointer, get ready to write PLY data to the file.
-
-Entry:
-fp         - the given file pointer
-nelems     - number of elements in object
-elem_names - list of element names
-file_type  - file type, either ascii or binary
-
-Exit:
-returns a pointer to a PlyFile, used to refer to this file, or NULL if error
-******************************************************************************/
-
-PlyFile *write_ply( FILE *fp, int nelems, char **elem_names, int file_type )
-{
-  PlyFile  *ply;
-
-  ply = ply_write ( fp, nelems, elem_names, file_type );
-
-  return ( ply );
-}
-
-
-/******************************************************************************
-Return a list of the names of the elements in a particular PLY file.
-
-Entry:
-ply - PLY file whose element name list we want
-
-Exit:
-num_elems  - the number of element names in the list
-returns the list of names
-******************************************************************************/
-
-char **get_element_list_ply( PlyFile *ply, int *num_elems )
-{
-  int     i;
-  char*  *elist;
-
-  /* create the list of element names */
-
-  elist = ( char * *  ) myalloc ( sizeof ( char * ) * ply->num_elem_types );
-  for ( i = 0; i < ply->num_elem_types; i++ )
-    elist[i] = strdup ( ply->elems[i]->name );
-
-  /* return the number of elements and the list of element names */
-  *num_elems = ply->num_elem_types;
-  return ( elist );
-}
-
-
-/******************************************************************************
-Append a comment to a PLY file.
-
-Entry:
-ply     - file to append comment to
-comment - the comment to append
-******************************************************************************/
-
-void append_comment_ply( PlyFile *ply, const char *comment )
-{
-  /* (re)allocate space for new comment */
-  if ( ply->num_comments == 0 )
-    ply->comments = ( char * *  ) myalloc ( sizeof ( char * ) );
-  else
-    ply->comments = ( char * *  ) realloc ( ply->comments,
-    sizeof ( char * ) * ( ply->num_comments + 1 ) );
-
-  /* add comment to list */
-  ply->comments[ply->num_comments] = strdup ( comment );
-  ply->num_comments++;
-}
-
-
-/******************************************************************************
-Copy the comments from one PLY file to another.
-
-Entry:
-out_ply - destination file to copy comments to
-in_ply  - the source of the comments
-******************************************************************************/
-
-void copy_comments_ply( PlyFile *out_ply, PlyFile *in_ply )
-{
-  int i;
-
-  for ( i = 0; i < in_ply->num_comments; i++ )
-    append_comment_ply ( out_ply, in_ply->comments[i] );
-}
-
-
-/******************************************************************************
-Append object information (arbitrary text) to a PLY file.
-
-Entry:
-ply      - file to append object info to
-obj_info - the object info to append
-******************************************************************************/
-
-void append_obj_info_ply( PlyFile *ply, const char *obj_info )
-{
-  /* (re)allocate space for new info */
-  if ( ply->num_obj_info == 0 )
-    ply->obj_info = ( char * *  ) myalloc ( sizeof ( char * ) );
-  else
-    ply->obj_info = ( char * *  ) realloc ( ply->obj_info,
-    sizeof ( char * ) * ( ply->num_obj_info + 1 ) );
-
-  /* add info to list */
-  ply->obj_info[ply->num_obj_info] = strdup ( obj_info );
-  ply->num_obj_info++;
-}
-
-
-/******************************************************************************
-Copy the object information from one PLY file to another.
-
-Entry:
-out_ply - destination file to copy object information to
-in_ply  - the source of the object information
-******************************************************************************/
-
-void copy_obj_info_ply( PlyFile *out_ply, PlyFile *in_ply )
-{
-  int i;
-
-  for ( i = 0; i < in_ply->num_obj_info; i++ )
-    append_obj_info_ply ( out_ply, in_ply->obj_info[i] );
-}
-
-
-/******************************************************************************
-Close a PLY file.
-
-Entry:
-plyfile - identifier of file to close
-******************************************************************************/
-
-void close_ply( PlyFile *plyfile )
-{
-  fclose ( plyfile->fp );
-}
-
-
-/******************************************************************************
-Free the memory used by a PLY file.
-
-Entry:
-plyfile - identifier of file
-******************************************************************************/
-
-void free_ply( PlyFile *plyfile )
-{
-  /* free up memory associated with the PLY file */
-  free ( plyfile );
-}
-
-
-/******************************************************************************
-Specify the index of the next element to be read in from a PLY file.
-
-Entry:
-ply - file to read from
-index - index of the element to be read
-
-Exit:
-elem_count - the number of elements in the file
-returns pointer to the name of this next element
-******************************************************************************/
-
-char *setup_element_read_ply( PlyFile *ply, int index, int *elem_count )
-{
-  PlyElement *elem;
-
-  if ( index < 0 || index > ply->num_elem_types )
-  {
-    fprintf ( stderr, "Warning:  No element with index %d\n", index );
-    return ( 0 );
-  }
-
-  elem = ply->elems[index];
-
-  /* set this to be the current element */
-  ply->which_elem = elem;
-
-  /* return the number of such elements in the file and the element's name */
-  *elem_count = elem->num;
-  return ( elem->name );
-}
-
-
-/******************************************************************************
-Read one element from the file.  This routine assumes that we're reading
-the type of element specified in the last call to the routine
-setup_element_read_ply().
-
-Entry:
-plyfile  - file identifier
-elem_ptr - pointer to location where the element information should be put
-******************************************************************************/
-
-void get_element_ply( PlyFile *plyfile, void *elem_ptr )
-{
-  if ( plyfile->file_type == PLY_ASCII )
-    ascii_get_element ( plyfile, ( char * ) elem_ptr );
-  else
-    binary_get_element ( plyfile, ( char * ) elem_ptr );
-}
-
-
-/******************************************************************************
-Specify one of several properties of the current element that is to be
-read from a file.  This should be called (usually multiple times) before a
-call to the routine get_element_ply().
-
-Entry:
-plyfile - file identifier
-prop    - property to add to those that will be returned
-
-Exit:
-0 if the property has not been found
-1 if the property has been found
-******************************************************************************/
-
-int setup_property_ply( PlyFile *plyfile, PlyProperty *prop )
-{
-  PlyElement   *elem;
-  PlyProperty  *prop_ptr;
-  int           index;
-
-  elem = plyfile->which_elem;
-
-  /* deposit the property information into the element's description */
-
-  prop_ptr = find_property ( elem, prop->name, &index );
-  if ( prop_ptr == NULL )
-  {
-    fprintf ( stderr, "Warning:  Can't find property '%s' in element '%s'\n",
-    prop->name, elem->name );
-    return 0;
-  }
-  prop_ptr->internal_type = prop->internal_type;
-  prop_ptr->offset = prop->offset;
-  prop_ptr->count_internal = prop->count_internal;
-  prop_ptr->count_offset = prop->count_offset;
-
-  /* specify that the user wants this property */
-  elem->store_prop[index] = STORE_PROP;
-  return 1 ;
-}
-
-
-/******************************************************************************
-Specify that we want the "other" properties of the current element to be tucked
-away within the user's structure.
-
-Entry:
-plyfile - file identifier
-offset  - offset to where other_props will be stored inside user's structure
-
-Exit:
-returns pointer to structure containing description of other_props
-******************************************************************************/
-
-PlyOtherProp *get_other_properties_ply( PlyFile *plyfile, int offset )
-{
-  PlyOtherProp *other;
-
-  other = get_other_properties ( plyfile, plyfile->which_elem, offset );
-  return ( other );
-}
-
-
-/******************************************************************************
-Describe which element is to be written next and state how many of them will
-be written.
-
-Entry:
-plyfile   - file identifier
-elem_name - name of element that information is being described
-nelems    - number of elements of this type to be written
-******************************************************************************/
-
-void describe_element_ply( PlyFile *plyfile, char *elem_name, int nelems )
-{
-  PlyElement *elem;
-
-  /* look for appropriate element */
-  elem = find_element ( plyfile, elem_name );
-  if ( elem == NULL )
-  {
-    fprintf( stderr,"describe_element_ply: can't find element '%s'\n",elem_name );
-    exit ( -1 );
-  }
-
-  elem->num = nelems;
-
-  /* now this element is the current element */
-  plyfile->which_elem = elem;
-}
-
-
-/******************************************************************************
-Describe a property of an element.
-
-Entry:
-plyfile   - file identifier
-prop      - the new property
-******************************************************************************/
-
-void describe_property_ply( PlyFile *plyfile, PlyProperty *prop )
-{
-  PlyElement   *elem;
-  PlyProperty  *elem_prop;
-
-  elem = plyfile->which_elem;
-
-  /* create room for new property */
-
-  if ( elem->nprops == 0 )
-  {
-    elem->props = ( PlyProperty *  *  ) myalloc ( sizeof ( PlyProperty *  ) );
-    elem->store_prop = ( char * ) myalloc ( sizeof ( char ) );
-    elem->nprops = 1;
-  }
-  else
-  {
-    elem->nprops++;
-    elem->props = ( PlyProperty *  *  )
-    realloc ( elem->props, sizeof ( PlyProperty *  ) * elem->nprops );
-    elem->store_prop = ( char * )
-    realloc ( elem->store_prop, sizeof ( char ) * elem->nprops );
-  }
-
-  /* copy the new property */
-
-  elem_prop = ( PlyProperty *  ) myalloc ( sizeof ( PlyProperty ) );
-  elem->props[elem->nprops - 1] = elem_prop;
-  elem->store_prop[elem->nprops - 1] = NAMED_PROP;
-  copy_property ( elem_prop, prop );
-}
-
-
-/******************************************************************************
-Describe what the "other" properties are that are to be stored, and where
-they are in an element.
-******************************************************************************/
-
-void describe_other_properties_ply( PlyFile *plyfile, PlyOtherProp *other, int offset )
-{
-  int           i;
-  PlyElement   *elem;
-  PlyProperty  *prop;
-
-  /* look for appropriate element */
-  elem = find_element ( plyfile, other->name );
-  if ( elem == NULL )
-  {
-    fprintf( stderr, "describe_other_properties_ply: can't find element '%s'\n",
-    other->name );
-    return;
-  }
-
-  /* create room for other properties */
-
-  if ( elem->nprops == 0 )
-  {
-    elem->props = ( PlyProperty *  *  )
-    myalloc ( sizeof ( PlyProperty *  ) * other->nprops );
-    elem->store_prop = ( char * ) myalloc ( sizeof ( char ) * other->nprops );
-    elem->nprops = 0;
-  }
-  else
-  {
-    int newsize;
-    newsize = elem->nprops + other->nprops;
-    elem->props = ( PlyProperty *  *  )
-    realloc ( elem->props, sizeof ( PlyProperty *  ) * newsize );
-    elem->store_prop = ( char * )
-    realloc ( elem->store_prop, sizeof ( char ) * newsize );
-  }
-
-  /* copy the other properties */
-
-  for ( i = 0; i < other->nprops; i++ )
-  {
-    prop = ( PlyProperty *  ) myalloc ( sizeof ( PlyProperty ) );
-    copy_property ( prop, other->props[i] );
-    elem->props[elem->nprops] = prop;
-    elem->store_prop[elem->nprops] = OTHER_PROP;
-    elem->nprops++;
-  }
-
-  /* save other info about other properties */
-  elem->other_size = other->size;
-  elem->other_offset = offset;
-}
-
-
-/******************************************************************************
-Pass along a pointer to "other" elements that we want to save in a given
-PLY file.  These other elements were presumably read from another PLY file.
-
-Entry:
-plyfile     - file pointer in which to store this other element info
-other_elems - info about other elements that we want to store
-******************************************************************************/
-
-void describe_other_elements_ply( PlyFile *plyfile, PlyOtherElems *other_elems )
-{
-  int         i;
-  OtherElem  *other;
-
-  /* ignore this call if there is no other element */
-  if ( other_elems == NULL )
-    return;
-
-  /* save pointer to this information */
-  plyfile->other_elems = other_elems;
-
-  /* describe the other properties of this element */
-
-  for ( i = 0; i < other_elems->num_elems; i++ )
-  {
-    other = &( other_elems->other_list[i] );
-    element_count_ply ( plyfile, other->elem_name, other->elem_count );
-    describe_other_properties_ply ( plyfile, other->other_props,
-    offsetof( OtherData,other_props ) );
-  }
-}
-
-
-
-/**** Property Propagation Rules ****/
-
-
-typedef struct RuleName {
-int code;
-const char *name;
-} RuleName;
-
-const RuleName  rule_name_list[]  = {
-{AVERAGE_RULE, "avg"},
-{RANDOM_RULE, "rnd"},
-{MINIMUM_RULE, "max"},
-{MAXIMUM_RULE, "min"},
-{MAJORITY_RULE, "major"},
-{SAME_RULE, "same"},
-{-1, "end_marker"},
-};
-
-
-
-/******************************************************************************
-Initialize the property propagation rules for an element.  Default is to
-use averaging (AVERAGE_RULE) for creating all new properties.
-
-Entry:
-ply       - PLY object that this is for
-elem_name - name of the element that we're making the rules for
-
-Exit:
-returns pointer to the default rules
-******************************************************************************/
-
-PlyPropRules *init_rule_ply( PlyFile *ply, char *elem_name )
-{
-  int           i,j;
-  PlyElement   *elem;
-  PlyPropRules *rules;
-  PlyRuleList  *list;
-  int           found_prop;
-
-  elem = find_element ( ply, elem_name );
-  if ( elem == NULL )
-  {
-    fprintf ( stderr, "init_rule_ply: Can't find element '%s'\n", elem_name );
-    exit ( -1 );
-  }
-
-  rules = ( PlyPropRules *  ) myalloc ( sizeof ( PlyPropRules ) );
-  rules->elem = elem;
-  rules->rule_list = ( int * ) myalloc ( sizeof( int ) * elem->nprops );
-  rules->max_props = 0;
-  rules->nprops = 0;
-
-  /* default is to use averaging rule */
-  for ( i = 0; i < elem->nprops; i++ )
-    rules->rule_list[i] = AVERAGE_RULE;
-
-  /* see if there are other rules we should use */
-
-  if ( ply->rule_list == NULL )
-    return ( rules );
-
-  /* try to match the element, property and rule name */
-
-  for ( list = ply->rule_list; list != NULL; list = list->next )
-  {
-    if ( !equal_strings ( list->element, elem->name ) )
-      continue;
-
-    found_prop = 0;
-
-    for ( i = 0; i < elem->nprops; i++ )
-      if ( equal_strings ( list->property, elem->props[i]->name ) )
-      {
-        found_prop = 1;
-
-        /* look for matching rule name */
-        for ( j = 0; rule_name_list[j].code != -1; j++ )
-          if ( equal_strings ( list->name, rule_name_list[j].name ) )
-          {
-            rules->rule_list[i] = rule_name_list[j].code;
-            break;
-          }
-      }
-
-    if ( !found_prop )
-    {
-      fprintf ( stderr, "Can't find property '%s' for rule '%s'\n",
-      list->property, list->name );
-      continue;
-    }
-  }
-
-  return ( rules );
-}
-
-
-/******************************************************************************
-odify a property propagation rule.
-
-Entry:
-rules - rules for the element
-prop_name - name of the property whose rule we're modifying
-rule_type - type of rule (MAXIMUM_RULE, MINIMUM_RULE, MAJORITY_RULE, etc.)
-******************************************************************************/
-
-void modify_rule_ply( PlyPropRules *rules, char *prop_name, int rule_type )
-{
-  int         i;
-  PlyElement *elem  = rules->elem;
-
-  /* find the property and modify its rule type */
-
-  for ( i = 0; i < elem->nprops; i++ )
-    if ( equal_strings ( elem->props[i]->name, prop_name ) )
-    {
-      rules->rule_list[i] = rule_type;
-      return;
-    }
-
-  /* we didn't find the property if we get here */
-  fprintf ( stderr, "modify_rule_ply: Can't find property '%s'\n", prop_name );
-  exit ( -1 );
-}
-
-
-/******************************************************************************
-Begin to create a set of properties from a set of propagation rules.
-
-Entry:
-ply   - PLY object whose rules we're preparing to use
-rules - rules for the element
-******************************************************************************/
-
-void start_props_ply( PlyFile *ply, PlyPropRules *rules )
-{
-  /*  PlyElement *elem  = rules->elem; */
-
-  /* save pointer to the rules in the PLY object */
-  ply->current_rules = rules;
-
-  /* get ready for new sets of properties to combine */
-  rules->nprops = 0;
-}
-
-
-/******************************************************************************
-Remember a set of properties and their weights for creating a new set of
-properties.
-
-Entry:
-weight      - weights for this set of properties
-other_props - the properties to use
-******************************************************************************/
-
-void weight_props_ply( PlyFile *ply, float weight, void *other_props )
-{
-  PlyPropRules *rules = ply->current_rules;
-
-  /* allocate space for properties and weights, if necessary */
-  if ( rules->max_props == 0 )
-  {
-    rules->max_props = 6;
-    rules->props = ( void * *  ) myalloc ( sizeof ( void * ) * rules->max_props );
-    rules->weights = ( float * ) myalloc ( sizeof ( float ) * rules->max_props );
-  }
-  if ( rules->nprops == rules->max_props )
-  {
-    rules->max_props *= 2;
-    rules->props = ( void * *  ) realloc ( rules->props,
-    sizeof ( void * ) * rules->max_props );
-    rules->weights = ( float * ) realloc ( rules->weights,
-    sizeof ( float ) * rules->max_props );
-  }
-
-  /* remember these new properties and their weights */
-
-  rules->props[rules->nprops] = other_props;
-  rules->weights[rules->nprops] = weight;
-  rules->nprops++;
-}
-
-
-/******************************************************************************
-Return a pointer to a new set of properties that have been created using
-a specified set of property combination rules and a given collection of
-"other" properties.
-
-Exit:
-returns a pointer to the new properties
-******************************************************************************/
-
-void *get_new_props_ply( PlyFile *ply )
-{
-  int             i,j;
-  static double  *vals;
-  static int      max_vals  = 0;
-  PlyPropRules   *rules     = ply->current_rules;
-  PlyElement     *elem      = rules->elem;
-  PlyProperty    *prop;
-  char           *data;
-  char           *new_data;
-  void           *ptr;
-  int             offset;
-  int             type;
-  double          double_val;
-  int             int_val;
-  unsigned int uint_val;
-  int random_pick;
-
-  /* return NULL if we've got no "other" properties */
-  if ( elem->other_size == 0 )
-  {
-    return ( NULL );
-  }
-
-  /* create room for combined other properties */
-  new_data = ( char * ) myalloc ( sizeof ( char ) * elem->other_size );
-
-  /* make sure there is enough room to store values we're to combine */
-
-  if ( max_vals == 0 )
-  {
-    max_vals = rules->nprops;
-    vals = ( double * ) myalloc ( sizeof ( double ) * rules->nprops );
-  }
-  if ( rules->nprops >= max_vals )
-  {
-    max_vals = rules->nprops;
-    vals = ( double * ) realloc ( vals, sizeof ( double ) * rules->nprops );
-  }
-
-  /* in case we need a random choice */
-  random_pick = ( int ) floor ( (double)rules->nprops ); //* drand48());
-
-  /* calculate the combination for each "other" property of the element */
-
-  for ( i = 0; i < elem->nprops; i++ )
-  {
-    /* don't bother with properties we've been asked to store explicitly */
-    if ( elem->store_prop[i] )
-      continue;
-
-    prop = elem->props[i];
-    offset = prop->offset;
-    type = prop->external_type;
-
-    /* collect together all the values we're to combine */
-
-    for ( j = 0; j < rules->nprops; j++ )
-    {
-      data = ( char * ) rules->props[j];
-      ptr = ( void * ) ( data + offset );
-      get_stored_item ( ( void * ) ptr, type, &int_val, &uint_val, &double_val );
-      vals[j] = double_val;
-    }
-
-    /* calculate the combined value */
-
-    switch ( rules->rule_list[i] )
-    {
-      case AVERAGE_RULE:
-        {
-        double  sum         = 0;
-        double  weight_sum  = 0;
-        for ( j = 0; j < rules->nprops; j++ )
-        {
-          sum += vals[j] * rules->weights[j];
-          weight_sum += rules->weights[j];
-        }
-        double_val = sum / weight_sum;
-        break;
-      }
-      case MINIMUM_RULE:
-        {
-        double_val = vals[0];
-        for ( j = 1; j < rules->nprops; j++ )
-          if ( double_val > vals[j] )
-            double_val = vals[j];
-        break;
-      }
-      case MAXIMUM_RULE:
-        {
-        double_val = vals[0];
-        for ( j = 1; j < rules->nprops; j++ )
-          if ( double_val < vals[j] )
-            double_val = vals[j];
-        break;
-      }
-      case RANDOM_RULE:
-        {
-        double_val = vals[random_pick];
-        break;
-      }
-      case SAME_RULE:
-        {
-        double_val = vals[0];
-        for ( j = 1; j < rules->nprops; j++ )
-          if ( double_val != vals[j] )
-          {
-            fprintf ( stderr,
-            "get_new_props_ply: Error combining properties that should be the same.\n" );
-            exit ( -1 );
-          }
-        break;
-      }
-      default:
-        fprintf ( stderr, "get_new_props_ply: Bad rule = %d\n",
-        rules->rule_list[i] );
-        exit ( -1 );
-    }
-
-    /* store the combined value */
-
-    int_val = ( int ) double_val;
-    uint_val = ( unsigned int ) double_val;
-    ptr = ( void * ) ( new_data + offset );
-    store_item ( ( char * ) ptr, type, int_val, uint_val, double_val );
-  }
-
-  return ( ( void * ) new_data );
-}
-
-
-/******************************************************************************
-Set the list of user-specified property combination rules.
-******************************************************************************/
-
-void set_prop_rules_ply( PlyFile *ply, PlyRuleList *prop_rules )
-{
-  ply->rule_list = prop_rules;
-}
-
-
-/******************************************************************************
-Append a property rule to a growing list of user-specified rules.
-
-Entry:
-rule_list - current rule list
-name      - name of property combination rule
-property  - "element.property" says which property the rule affects
-
-Exit:
-returns pointer to the new rule list
-******************************************************************************/
-
-PlyRuleList* append_prop_rule( PlyRuleList *rule_list, char *name, char *property )
-{
-  PlyRuleList  *rule;
-  PlyRuleList  *rule_ptr;
-  char         *str,*str2;
-  char         *ptr;
-
-  /* find . */
-  str = strdup ( property );
-  for ( ptr = str; *ptr != '\0' && *ptr != '.'; ptr++ )
-    ;
-
-  /* split string at . */
-  if ( *ptr == '.' )
-  {
-    *ptr = '\0';
-    str2 = ptr + 1;
-  }
-  else
-  {
-    fprintf ( stderr, "Can't find property '%s' for rule '%s'\n",
-    property, name );
-    return ( rule_list );
-  }
-
-  rule = ( PlyRuleList *  ) malloc ( sizeof ( PlyRuleList ) );
-  rule->name = name;
-  rule->element = str;
-  rule->property = str2;
-  rule->next = NULL;
-
-  /* either start rule list or append to it */
-
-  if ( rule_list == NULL )
-    rule_list = rule;
-  else
-  {
-    /* append new rule to current list */
-    rule_ptr = rule_list;
-    while ( rule_ptr->next != NULL )
-      rule_ptr = rule_ptr->next;
-    rule_ptr->next = rule;
-  }
-
-  /* return pointer to list */
-
-  return ( rule_list );
-}
-
-
-/******************************************************************************
-See if a name matches the name of any property combination rules.
-
-Entry:
-name - name of rule we're trying to match
-
-Exit:
-returns 1 if we find a match, 0 if not
-******************************************************************************/
-
-int matches_rule_name( char* name )
-{
-  int i;
-
-  for ( i = 0; rule_name_list[i].code != -1; i++ )
-    if ( equal_strings ( rule_name_list[i].name, name ) )
-      return ( 1 );
-
-  return ( 0 );
-}
-
-} //namespace
diff --git a/3rdParty/MarchingCubes/McPly.h b/3rdParty/MarchingCubes/McPly.h
deleted file mode 100644
index 1005323892b76c19c590b86f96ed6c81aacf4ae8..0000000000000000000000000000000000000000
--- a/3rdParty/MarchingCubes/McPly.h
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
-
-Header for PLY polygon files.
-
-- Greg Turk
-
-A PLY file contains a single polygonal _object_.
-
-An object is composed of lists of _elements_.  Typical elements are
-vertices, faces, edges and materials.
-
-Each type of element for a given object has one or more _properties_
-associated with the element type.  For instance, a vertex element may
-have as properties three floating-point values x,y,z and three unsigned
-chars for red, green and blue.
-
------------------------------------------------------------------------
-
-Copyright (c) 1998 Georgia Institute of Technology.  All rights reserved.
-
-Permission to use, copy, modify and distribute this software and its
-documentation for any purpose is hereby granted without fee, provided
-that the above copyright notice and this permission notice appear in
-all copies of this software and that you do not sell the software.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
-EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
-WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-*/
-#ifndef MCPLY_H
-#define MCPLY_H
-
-#include <cmath>
-#include <string>
-#include <cstring>
-#include <cstring>
-#include <cstdlib>
-
-namespace McCubes{ 
-
-static const int PLY_ASCII     =  1;  // ascii PLY file 
-static const int PLY_BINARY_BE =  2;  // binary PLY file, big endian 
-static const int PLY_BINARY_LE =  3;  // binary PLY file, little endian 
-
-static const int PLY_OKAY      =  0;  // ply routine worked okay 
-static const int PLY_ERROR     = -1;  // error in ply routine 
-
-/* scalar data types supported by PLY format */
-
-static const int StartType  = 0;
-static const int Int8       = 1;
-static const int Int16      = 2;
-static const int Int32      = 3;
-static const int Uint8      = 4;
-static const int Uint16     = 5;
-static const int Uint32     = 6;
-static const int Float32    = 7;
-static const int Float64    = 8;
-static const int EndType    = 9;
-
-static const int PLY_SCALAR =  0;
-static const int PLY_LIST   =  1;
-static const int PLY_STRING =  2;
-
-
-typedef struct PlyProperty {    /* description of a property */
-
-char *name;                   /* property name */
-int external_type;            /* file's data type */
-int internal_type;            /* program's data type */
-int offset;                   /* offset bytes of prop in a struct */
-
-int is_list;                  /* 0 = scalar, 1 = list, 2 = char string */
-int count_external;           /* file's count type */
-int count_internal;           /* program's count type */
-int count_offset;             /* offset byte for list count */
-
-} PlyProperty;
-
-typedef struct PlyElement {     /* description of an element */
-char *name;                   /* element name */
-int num;                      /* number of elements in this object */
-int size;                     /* size of element (bytes) or -1 if variable */
-int nprops;                   /* number of properties for this element */
-PlyProperty **props;          /* list of properties in the file */
-char *store_prop;             /* flags: property wanted by user? */
-int other_offset;             /* offset to un-asked-for props, or -1 if none*/
-int other_size;               /* size of other_props structure */
-} PlyElement;
-
-typedef struct PlyOtherProp {   /* describes other properties in an element */
-char *name;                   /* element name */
-int size;                     /* size of other_props */
-int nprops;                   /* number of properties in other_props */
-PlyProperty **props;          /* list of properties in other_props */
-} PlyOtherProp;
-
-typedef struct OtherData { /* for storing other_props for an other element */
-void *other_props;
-} OtherData;
-
-typedef struct OtherElem {     /* data for one "other" element */
-char *elem_name;             /* names of other elements */
-int elem_count;              /* count of instances of each element */
-OtherData **other_data;      /* actual property data for the elements */
-PlyOtherProp *other_props;   /* description of the property data */
-} OtherElem;
-
-typedef struct PlyOtherElems {  /* "other" elements, not interpreted by user */
-int num_elems;                /* number of other elements */
-OtherElem *other_list;        /* list of data for other elements */
-} PlyOtherElems;
-
-static const int AVERAGE_RULE  = 1;
-static const int MAJORITY_RULE = 2;
-static const int MINIMUM_RULE  = 3;
-static const int MAXIMUM_RULE  = 4;
-static const int SAME_RULE     = 5;
-static const int RANDOM_RULE   = 6;
-
-typedef struct PlyPropRules {   /* rules for combining "other" properties */
-PlyElement *elem;      /* element whose rules we are making */
-int *rule_list;        /* types of rules (AVERAGE_PLY, MAJORITY_PLY, etc.) */
-int nprops;            /* number of properties we're combining so far */
-int max_props;         /* maximum number of properties we have room for now */
-void **props;          /* list of properties we're combining */
-float *weights;        /* list of weights of the properties */
-} PlyPropRules;
-
-typedef struct PlyRuleList {
-char *name;                  /* name of the rule */
-char *element;               /* name of element that rule applies to */
-char *property;              /* name of property that rule applies to */
-struct PlyRuleList *next;    /* pointer for linked list of rules */
-} PlyRuleList;
-
-typedef struct PlyFile {        /* description of PLY file */
-FILE *fp;                     /* file pointer */
-int file_type;                /* ascii or binary */
-float version;                /* version number of file */
-int num_elem_types;           /* number of element types of object */
-PlyElement **elems;           /* list of elements */
-int num_comments;             /* number of comments */
-char **comments;              /* list of comments */
-int num_obj_info;             /* number of items of object information */
-char **obj_info;              /* list of object info items */
-PlyElement *which_elem;       /* element we're currently reading or writing */
-PlyOtherElems *other_elems;   /* "other" elements from a PLY file */
-PlyPropRules *current_rules;  /* current propagation rules */
-PlyRuleList *rule_list;       /* rule list from user */
-} PlyFile;
-
-// memory allocation 
-//extern char *my_alloc();
-#define myalloc(mem_size) my_alloc((mem_size), __LINE__, __FILE__)
-
-
-// old routines 
-
-#if 0
-extern PlyFile *ply_write(FILE *, int, char **, int);
-extern PlyFile *ply_read(FILE *, int *, char ***);
-extern PlyFile *ply_open_for_reading( const char *, int *, char ***, int *, float *);
-extern void ply_close(PlyFile *);
-extern PlyOtherProp *ply_get_other_properties(PlyFile *, const char *, int);
-#endif
-
-extern void     ply_describe_property( PlyFile * , const char * , PlyProperty * );
-extern void     ply_get_property( PlyFile * , const char * , PlyProperty * );
-extern void     ply_get_element( PlyFile * , void * );
-
-
-//--- delcaration of routines ---
-
-PlyOtherElems  *get_other_element_ply( PlyFile * );
-
-PlyFile        *read_ply( FILE * );
-PlyFile        *write_ply( FILE * , int, char ** , int );
-extern PlyFile *open_for_writing_ply( const char * , int, char ** , int );
-void            close_ply( PlyFile * );
-void            free_ply( PlyFile * );
-
-void            get_info_ply( PlyFile * , float * , int * );
-void            free_other_elements_ply( PlyOtherElems * );
-
-void            append_comment_ply( PlyFile *, const char * );
-void            append_obj_info_ply( PlyFile * , const char * );
-void            copy_comments_ply( PlyFile * , PlyFile * );
-void            copy_obj_info_ply( PlyFile * , PlyFile * );
-char*          *get_comments_ply( PlyFile * , int * );
-char*          *get_obj_info_ply( PlyFile * , int * );
-
-char*          *get_element_list_ply( PlyFile * , int * );
-int             setup_property_ply( PlyFile * , PlyProperty * );
-void            get_element_ply( PlyFile * , void * );
-char           *setup_element_read_ply( PlyFile * , int, int * );
-PlyOtherProp   *get_other_properties_ply( PlyFile * , int );
-
-void            element_count_ply( PlyFile * , const char * , int );
-void            describe_element_ply( PlyFile * , const char * , int );
-void            describe_property_ply( PlyFile * , PlyProperty * );
-void            describe_other_properties_ply( PlyFile * , PlyOtherProp * , int );
-void            describe_other_elements_ply( PlyFile * , PlyOtherElems * );
-void            get_element_setup_ply( PlyFile * , const char * , int, PlyProperty * );
-PlyProperty*   *get_element_description_ply( PlyFile * , const char * , int * , int * );
-void            element_layout_ply( PlyFile * , const char * , int, int, PlyProperty * );
-
-void            header_complete_ply( PlyFile * );
-void            put_element_setup_ply( PlyFile * ,const  char * );
-void            put_element_ply( PlyFile * , void * );
-void            put_other_elements_ply( PlyFile * );
-
-PlyPropRules   *init_rule_ply( PlyFile * , const char * );
-void            modify_rule_ply( PlyPropRules * , const char * , int );
-void            start_props_ply( PlyFile * , PlyPropRules * );
-void            weight_props_ply( PlyFile * , float, void * );
-void           *get_new_props_ply( PlyFile * );
-void            set_prop_rules_ply( PlyFile * , PlyRuleList * );
-PlyRuleList    *append_prop_rule( PlyRuleList * , const char * , const char * );
-int             matches_rule_name( const char * );
-
-int             equal_strings( const char * , const char * );
-char           *recreate_command_line( int, char *argv[] );
-
-} //namespace McCubes
-
-#endif // PLY_H__ 
-
diff --git a/3rdParty/MarchingCubes/McTypes.h b/3rdParty/MarchingCubes/McTypes.h
deleted file mode 100644
index f2303476e6fcb62f22e5ae82f30c090db1871a88..0000000000000000000000000000000000000000
--- a/3rdParty/MarchingCubes/McTypes.h
+++ /dev/null
@@ -1,37 +0,0 @@
-//  _    ___      __              __________      _     __
-// | |  / (_)____/ /___  ______ _/ / ____/ /_  __(_)___/ /____
-// | | / / / ___/ __/ / / / __ `/ / /_  / / / / / / __  / ___/
-// | |/ / / /  / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__  )
-// |___/_/_/   \__/\__,_/\__,_/_/_/   /_/\__,_/_/\__,_/____/
-//
-#ifndef MCTYPES_H
-#define MCTYPES_H
-
-//extension by CAB
-#include <vector>
-#include <string>
-#include <fstream>
-
-#include <basics/utilities/UbException.h>
-#include <basics/container/CbArray3D.h>
-#include <basics/container/CbArray4D.h>
-
-namespace McCubes
-{ 
-
-   #if !defined(WIN32) || defined(__CYGWIN__)
-   #pragma interface
-   #endif // WIN32
-
-   //_____________________________________________________________________________
-   // types
-   /** unsigned char alias */
-   typedef unsigned char   uchar;
-   /** signed char alias */
-   typedef   signed char   schar;
-   /** isovalue alias */
-   typedef          double real;
-
-} //namespace McCubes
-
-#endif //MCTYPES_H
diff --git a/3rdParty/MarchingCubes/McWrapper.h b/3rdParty/MarchingCubes/McWrapper.h
deleted file mode 100644
index b36a2a7ea93e30e8be039e91d8984ebc34d237e1..0000000000000000000000000000000000000000
--- a/3rdParty/MarchingCubes/McWrapper.h
+++ /dev/null
@@ -1,305 +0,0 @@
-// _    ___      __              __________      _     __
-//| |  / (_)____/ /___  ______ _/ / ____/ /_  __(_)___/ /____
-//| | / / / ___/ __/ / / / __ `/ / /_  / / / / / / __  / ___/
-//| |/ / / /  / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__  )
-//|___/_/_/   \__/\__,_/\__,_/_/_/   /_/\__,_/_/\__,_/____/
-//
-//#ifndef MCWRAPPER_H
-//#define MCWRAPPER_H
-//
-//extension by CAB
-//#include <vector>
-//#include <string>
-//#include <fstream>
-//
-//#include <basics/utilities/UbException.h>
-//#include <basics/container/CbUniformMatrix3D.h>
-//#include <basics/container/CbUniformMatrix4D.h>
-//
-//#include <3rdParty/MarchingCubes/McTypes.h>
-//
-//namespace McCubes{
-//
-//////////////////////////////////////////////////////////////////////////
-//Standard-Wrapper
-//  MarchingCubes<DataWrapper> mc( 10,8,5 );
-//  for(int z=0; z<mc.size_z(); z++)
-//   for(int y=0; y<mc.size_y(); y++)
-//     for(int x=0; x<mc.size_x(); x++)
-//       mc.set_data(x,x,y,z);
-//
-//  //mc.set_method(false) //<-MC methode, STD=false
-//  mc.init_all();
-//
-//  mc.run(3.5);
-//  mc.writeUCD("c:/temp/triangles.inp");
-//  mc.clean_all();
-
-//template< typename T=real >
-//class McDataWrapper
-//{
-//public:
-//   typedef T                                                   value_type;
-//   typedef typename std::vector< value_type >::reference       reference;
-//   typedef typename std::vector< value_type >::const_reference const_reference;
-//   typedef typename std::vector< value_type >::pointer         pointer;
-//   typedef typename std::vector< value_type >::const_pointer   const_pointer;
-//
-//public:
-//   McDataWrapper() : size_x1(-1), size_x2(-1), size_x3(-1)
-//   {
-//   }
-//   /*==========================================================*/
-//   McDataWrapper(const int& size_x1, const int& size_x2, const int& size_x3, const T& initVal=T())
-//   {
-//      this->resize(size_x1,size_x2,size_x3,initVal);
-//   }
-//   /*=======================================================================*/
-//   reference operator() (const int& x1, const int& x2, const int& x3)
-//   {
-//      #ifdef _DEBUG
-//         return this->data.at(x1 + x2*size_x1 + x3*size_x1*size_x2);
-//      #else
-//         return this->data[x1 + x2*size_x1 + x3*size_x1*size_x2];
-//      #endif
-//   }
-//   /*=======================================================================*/
-//   const_reference operator() (const int& x1, const int& x2, const int& x3)	const
-//   {
-//      #ifdef _DEBUG
-//         return this->data.at(x1 + x2*size_x1 + x3*size_x1*size_x2);
-//      #else
-//         return this->data[x1 + x2*size_x1 + x3*size_x1*size_x2];
-//      #endif
-//   }
-//   /*==========================================================*/
-//   inline void setData( const T& val, const int& x1, const int& x2, const int& x3 )
-//   {
-//      #ifdef _DEBUG
-//         this->data.at(x1 + x2*size_x1 + x3*size_x1*size_x2) = val;
-//      #else
-//         this->data[x1 + x2*size_x1 + x3*size_x1*size_x2] = val;
-//      #endif
-//   }
-//   /*==========================================================*/
-//   inline value_type getData(const int& x1, const int& x2, const int& x3 ) const
-//   {
-//      #ifdef _DEBUG
-//         return this->data.at(x1 + x2*size_x1 + x3*size_x1*size_x2);
-//      #else
-//         return this->data[x1 + x2*size_x1 + x3*size_x1*size_x2];
-//      #endif
-//   }
-//   /*==========================================================*/
-//   inline void resize(const int& size_x1, const int& size_x2, const int& size_x3)
-//   {
-//      if(size_x1>0 && size_x2>0 && size_x3>0)
-//      {
-//         this->size_x1 = size_x1;
-//         this->size_x2 = size_x2;
-//         this->size_x3 = size_x3;
-//         this->data.resize(size_x1*size_x2*size_x3);
-//      }
-//   }
-//   /*==========================================================*/
-//   inline void resize(const int& size_x1, const int& size_x2, const int& size_x3, const T& initVal)
-//   {
-//      if(size_x1>0 && size_x2>0 && size_x3>0)
-//      {
-//         this->size_x1 = size_x1;
-//         this->size_x2 = size_x2;
-//         this->size_x3 = size_x3;
-//         this->data.resize(size_x1*size_x2*size_x3,initVal);
-//      }
-//   }
-//   /*==========================================================*/
-//   int getNX1() const { return size_x1; }
-//   int getNX2() const { return size_x2; }
-//   int getNX3() const { return size_x3; }
-//
-//protected:
-//   std::vector<T> data;
-//   int size_x1, size_x2, size_x3;
-//};
-//
-//////////////////////////////////////////////////////////////////////////
-//Matrix4DWrapper-Wrapper
-//example:
-//  int indexForDataValue = 1;
-//  CbUniformMatrix4D<double> data(10,8,5,2);
-//  for(int x3=0; x3<data.getNX3(); x3++)
-//   for(int x2=0; x2<data.getNX2(); x2++)
-//     for(int x1=0; x1<data.getNX1(); x1++)
-//       data(x1,x2,x3,indexForDataValue) = x1;
-//
-//  Matrix4DWrapper< CbUniformMatrix4D<double> > wrapper(&data,indexForDataValue);
-//  MarchingCubes< Matrix4DWrapper< CbUniformMatrix4D<double> > > mc( wrapper );
-//
-//  mc.init_all();
-//  mc.run(3.5);
-//  mc.writeUCD("c:/temp/triangles.inp");
-//  mc.clean_all();
-//template< typename Matrix4D >
-//class Matrix4DWrapper
-//{
-//public:
-//   typedef typename Matrix4D::value_type value_type;
-//
-//public:
-//   Matrix4DWrapper() : valIndex(-1), matrix(NULL), minX1(-1), minX2(-1), minX3(-1), maxX1(-1), maxX2(-1), maxX3(-1)
-//   {
-//      //wird benoetigt, damit MarchingCubes generell eine membervariabel erstellen kann
-//   }
-//   /*==========================================================*/
-//   //fuer beliebige matrizen
-//   Matrix4DWrapper( Matrix4D* matrix, const int& valIndex)
-//      : valIndex(valIndex), matrix(matrix)
-//   {
-//
-//   }
-//   /*==========================================================*/
-//   Matrix4DWrapper( Matrix4D* matrix, const int& valIndex,const int& n1, const int& nx2, const int& nx3)
-//      : valIndex(valIndex), matrix(matrix), nx1(nx1), nx2(nx2), nx3(nx3)
-//   {
-//      minX1 = minX2 = minX3 = 0;
-//      maxX1 = nx1-1;
-//      maxX2 = nx2-1;
-//      maxX3 = nx3-1;
-//   }
-//   /*==========================================================*/
-//   //wenn man z.B. matrixX1 von[0..10] geht und man nur den bereich 1..9 fuer MC
-//   //verwenden moechte -> minX1=1 und maxX2=2
-//   Matrix4DWrapper( Matrix4D* matrix, const int& valIndex, const int& minX1, const int& minX2, const int& minX3,
-//                                                           const int& maxX1, const int& maxX2, const int& maxX3)
-//       : valIndex(valIndex), matrix(matrix), minX1(minX1), minX2(minX2), minX3(minX3), maxX1(maxX1), maxX2(maxX2), maxX3(maxX3)
-//   {
-//      nx1 = matrix->getNX1()-1;
-//      nx2 = matrix->getNX2()-1;
-//      nx3 = matrix->getNX3()-1;
-//
-//      if(minX1<0 || minX2<0 || minX3<0 || maxX1>=nx1 || maxX2>=nx2 || maxX3>=nx3)
-//         throw UbException(UB_EXARGS,"range error");
-//   }
-//   /*==========================================================*/
-//   inline void setData( const real& val, const int& x1, const int& x2, const int& x3 )
-//   {
-//      (*matrix)(minX1+x1, minX2+x2, minX3+x3, valIndex) = static_cast<value_type>(val);
-//   }
-//   /*==========================================================*/
-//   inline value_type getData(const int& x1, const int& x2, const int& x3 ) const
-//   {
-//      return (*matrix)(minX1+x1, minX2+x2, minX3+x3, valIndex);
-//   }
-//   /*==========================================================*/
-//   inline void resize(const int& size_x1, const int& size_x2, const int& size_x3)
-//   {
-//      throw UbException("Matrix4DWrapper::resize(int,int,int) - mit diesem wrapper nicht erlaubt");
-//   }
-//   /*==========================================================*/
-//   inline int getMinX1() const { return minX1; }  
-//   inline int getMinX2() const { return minX2; }  
-//   inline int getMinX3() const { return minX3; }  
-//
-//   inline int getMaxX1() const { return maxX1; }  
-//   inline int getMaxX2() const { return maxX2; }  
-//   inline int getMaxX3() const { return maxX3; }  
-//
-//   inline int getNX1()   const { nx1; }  
-//   inline int getNX2()   const { nx2; }  
-//   inline int getNX3()   const { nx3; }  
-//
-//protected:
-//   int valIndex;
-//   Matrix4D* matrix;
-//   int minX1, minX2, minX3, maxX1, maxX2, maxX3, nx1, nx2, nx3;
-//};
-//
-//////////////////////////////////////////////////////////////////////////
-//Matrix3DWrapper-Wrapper
-//  CbUniformMatrix3D<double> data(10,8,5);
-//  for(int x3=0; x3<data.getNX3(); x3++)
-//   for(int x2=0; x2<data.getNX2(); x2++)
-//     for(int x1=0; x1<data.getNX1(); x1++)
-//       data(x1,x2,x3) = x1;
-//
-//  Matrix3DWrapper< CbUniformMatrix3D<double> > wrapper(&data);
-//  MarchingCubes< Matrix3DWrapper< CbUniformMatrix3D<double> > > mc( wrapper );
-//
-//  mc.init_all();
-//  mc.run(3.5);
-//  mc.writeUCD("c:/temp/triangles.inp");
-//  mc.clean_all();
-//template< typename Matrix3D >
-//class Matrix3DWrapper
-//{
-//public:
-//   typedef typename Matrix3D::value_type value_type;
-//
-//public:
-//   Matrix3DWrapper() : matrix(NULL), minX1(-1), minX2(-1), minX3(-1), maxX1(-1), maxX2(-1), maxX3(-1)
-//   {
-//      //wird benoetigt, damit MarchingCubes generell eine membervariabel erstellen kann
-//   }
-//   /*==========================================================*/
-//   Matrix3DWrapper( Matrix3D* matrix)
-//      : matrix(matrix)
-//   {
-//      minX1 = minX2 = minX3 = 0;
-//      maxX1 = matrix->getNX1();
-//      maxX2 = matrix->getNX2();
-//      maxX3 = matrix->getNX3();
-//
-//      minX1 = minX2 = minX3 = 0;
-//      maxX1 = nx1-1;
-//      maxX2 = nx2-1;
-//      maxX3 = nx3-1;
-//
-//   }
-//   /*==========================================================*/
-//   Matrix3DWrapper( Matrix3D* matrix, const int& minX1, const int& minX2, const int& minX3
-//                                    , const int& maxX1, const int& maxX2, const int& maxX3 )
-//      : matrix(matrix), minX1(minX1), minX2(minX2), minX3(minX3), maxX1(maxX1), maxX2(maxX2), maxX3(maxX3)
-//   {
-//
-//   }
-//   /*==========================================================*/
-//   Matrix3DWrapper(const int& size_x1, const int& size_x2, const int& size_x3)
-//   {
-//      throw UbException("Matrix3DWrapper(int,int,int) - mit diesem wrapper nicht erlaubt");
-//   }
-//   /*==========================================================*/
-//   inline void setData( const real& val, const int& x1, const int& x2, const int& x3 )
-//   {
-//      (*matrix)(minX1+x1, minX2+x2, minX3+x3) = static_cast<value_type>(val);
-//   }
-//   /*==========================================================*/
-//   inline value_type getData(const int& x1, const int& x2, const int& x3 ) const
-//   {
-//      return (*matrix)(minX1+x1, minX2+x2, minX3+x3);
-//   }
-//   /*==========================================================*/
-//   inline void resize(const int& size_x1, const int& size_x2, const int& size_x3)
-//   {
-//      throw UbException("Matrix3DWrapper::resize(int,int,int) - mit diesem wrapper nicht erlaubt");
-//   }
-//   /*==========================================================*/
-//   inline int getMinX1() const { return minX1; }  
-//   inline int getMinX2() const { return minX2; }  
-//   inline int getMinX3() const { return minX3; }  
-//
-//   inline int getMaxX1() const { return maxX1; }  
-//   inline int getMaxX2() const { return maxX2; }  
-//   inline int getMaxX3() const { return maxX3; }  
-//
-//   inline int getNX1()   const { nx1; }  
-//   inline int getNX2()   const { nx2; }  
-//   inline int getNX3()   const { nx3; }  
-//
-//protected:
-//   Matrix3D* matrix;
-//   int minX1, minX2, minX3, maxX1, maxX2, maxX3, nx1, nx2, nx3;
-//};
-//
-//} //namespace McCubes
-//
-//#endif //MCWRAPPER_H
diff --git a/3rdParty/jsoncpp/.clang-format b/3rdParty/jsoncpp/.clang-format
deleted file mode 100644
index dd51247d50a52b0cb596e16e587b4bd30ca34893..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/.clang-format
+++ /dev/null
@@ -1,47 +0,0 @@
----
-# BasedOnStyle:  LLVM
-AccessModifierOffset: -2
-ConstructorInitializerIndentWidth: 4
-AlignEscapedNewlinesLeft: false
-AlignTrailingComments: true
-AllowAllParametersOfDeclarationOnNextLine: true
-AllowShortIfStatementsOnASingleLine: false
-AllowShortLoopsOnASingleLine: false
-AlwaysBreakTemplateDeclarations: false
-AlwaysBreakBeforeMultilineStrings: false
-BreakBeforeBinaryOperators: false
-BreakBeforeTernaryOperators: true
-BreakConstructorInitializersBeforeComma: false
-BinPackParameters: false
-ColumnLimit:     80
-ConstructorInitializerAllOnOneLineOrOnePerLine: false
-DerivePointerBinding: false
-ExperimentalAutoDetectBinPacking: false
-IndentCaseLabels: false
-MaxEmptyLinesToKeep: 1
-NamespaceIndentation: None
-ObjCSpaceBeforeProtocolList: true
-PenaltyBreakBeforeFirstCallParameter: 19
-PenaltyBreakComment: 60
-PenaltyBreakString: 1000
-PenaltyBreakFirstLessLess: 120
-PenaltyExcessCharacter: 1000000
-PenaltyReturnTypeOnItsOwnLine: 60
-PointerBindsToType: true
-SpacesBeforeTrailingComments: 1
-Cpp11BracedListStyle: false
-Standard:        Cpp03
-IndentWidth:     2
-TabWidth:        8
-UseTab:          Never
-BreakBeforeBraces: Attach
-IndentFunctionDeclarationAfterType: false
-SpacesInParentheses: false
-SpacesInAngles:  false
-SpaceInEmptyParentheses: false
-SpacesInCStyleCastParentheses: false
-SpaceAfterControlStatementKeyword: true
-SpaceBeforeAssignmentOperators: true
-ContinuationIndentWidth: 4
-...
-
diff --git a/3rdParty/jsoncpp/.gitattributes b/3rdParty/jsoncpp/.gitattributes
deleted file mode 100644
index 22d2b7a455a38a4c3eee4fda602a586f396ab811..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/.gitattributes
+++ /dev/null
@@ -1,11 +0,0 @@
-*           text=auto
-*.h         text
-*.cpp       text
-*.json      text
-*.in        text
-*.sh        eol=lf
-*.bat       eol=crlf
-*.vcproj    eol=crlf
-*.vcxproj   eol=crlf
-*.sln       eol=crlf
-devtools/agent_vm* eol=crlf
diff --git a/3rdParty/jsoncpp/.travis.yml b/3rdParty/jsoncpp/.travis.yml
deleted file mode 100644
index 028e91a28cd8d712277a07f940d5c51412d23d9a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/.travis.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-# Build matrix / environment variable are explained on:
-# http://about.travis-ci.org/docs/user/build-configuration/
-# This file can be validated on:
-# http://lint.travis-ci.org/
-# See also
-# http://stackoverflow.com/questions/22111549/travis-ci-with-clang-3-4-and-c11/30925448#30925448
-# to allow C++11, though we are not yet building with -std=c++11
-
-before_install: pyenv global 3.5
-install:
-- if [[ $TRAVIS_OS_NAME == osx ]]; then
-     brew update;
-     brew install python3 ninja;
-     python3 -m venv venv;
-     source venv/bin/activate;
-  elif [[ $TRAVIS_OS_NAME == linux ]]; then
-     wget https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-linux.zip;
-     unzip -q ninja-linux.zip -d build;
-  fi
-- pip3 install meson
-# /usr/bin/gcc is 4.6 always, but gcc-X.Y is available.
-- if [[ $CXX = g++ ]]; then export CXX="g++-4.9" CC="gcc-4.9"; fi
-# /usr/bin/clang has a conflict with gcc, so use clang-X.Y.
-- if [[ $CXX = clang++ ]]; then export CXX="clang++-3.5" CC="clang-3.5"; fi
-- echo ${PATH}
-- ls /usr/local
-- ls /usr/local/bin
-- export PATH="${PWD}"/build:/usr/local/bin:/usr/bin:${PATH}
-- echo ${CXX}
-- ${CXX} --version
-- which valgrind
-addons:
-  apt:
-    sources:
-    - ubuntu-toolchain-r-test
-    - llvm-toolchain-precise-3.5
-    packages:
-    - gcc-4.9
-    - g++-4.9
-    - clang-3.5
-    - valgrind
-os:
-  - linux
-language: cpp
-compiler:
-  - gcc
-  - clang
-script: ./travis.sh
-env:
-  matrix:
-    - LIB_TYPE=static BUILD_TYPE=release
-    - LIB_TYPE=shared BUILD_TYPE=debug
-notifications:
-  email: false
-dist: trusty
-sudo: false
diff --git a/3rdParty/jsoncpp/AUTHORS b/3rdParty/jsoncpp/AUTHORS
deleted file mode 100644
index 5747e61c1b28fefbb5099192b039744c80019c51..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/AUTHORS
+++ /dev/null
@@ -1,111 +0,0 @@
-Baptiste Lepilleur <blep@users.sourceforge.net>
-
-Aaron Jacobs <aaronjjacobs@gmail.com>
-Aaron Jacobs <jacobsa@google.com>
-Adam Boseley <ABoseley@agjunction.com>
-Adam Boseley <adam.boseley@gmail.com>
-Aleksandr Derbenev <13alexac@gmail.com>
-Alexander Gazarov <DrMetallius@users.noreply.github.com>
-Alexander V. Brezgin <abrezgin@appliedtech.ru>
-Alexandr Brezgin <albrezgin@mail.ru>
-Alexey Kruchinin <alexey@mopals.com>
-Anton Indrawan <anton.indrawan@gmail.com>
-Baptiste Jonglez <git@bitsofnetworks.org>
-Baptiste Lepilleur <baptiste.lepilleur@gmail.com>
-Baruch Siach <baruch@tkos.co.il>
-Ben Boeckel <mathstuf@gmail.com>
-Benjamin Knecht <bknecht@logitech.com>
-Bernd Kuhls <bernd.kuhls@t-online.de>
-Billy Donahue <billydonahue@google.com>
-Braden McDorman <bmcdorman@gmail.com>
-Brandon Myers <bmyers1788@gmail.com>
-Brendan Drew <brendan.drew@daqri.com>
-chason <cxchao802@gmail.com>
-Chris Gilling <cgilling@iparadigms.com>
-Christopher Dawes <christopher.dawes.1981@googlemail.com>
-Christopher Dunn <cdunn2001@gmail.com>
-Chuck Atkins <chuck.atkins@kitware.com>
-Cody P Schafer <dev@codyps.com>
-Connor Manning <connor@hobu.co>
-Cory Quammen <cory.quammen@kitware.com>
-Cristóvão B da Cruz e Silva <CrisXed@gmail.com>
-Daniel Krügler <daniel.kruegler@gmail.com>
-Dani-Hub <daniel.kruegler@googlemail.com>
-Dan Liu <gzliudan>
-datadiode <datadiode@users.noreply.github.com>
-datadiode <jochen.neubeck@vodafone.de>
-David Seifert <soap@gentoo.org>
-David West <david-west@idexx.com>
-dawesc <chris.dawes@eftlab.co.uk>
-Dmitry Marakasov <amdmi3@amdmi3.ru>
-dominicpezzuto <dom@dompezzuto.com>
-Don Milham <dmilham@gmail.com>
-drgler <daniel.kruegler@gmail.com>
-ds283 <D.Seery@sussex.ac.uk>
-Egor Tensin <Egor.Tensin@gmail.com>
-eightnoteight <mr.eightnoteight@gmail.com>
-Evince <baneyue@gmail.com>
-filipjs <filipjs@users.noreply.github.com>
-findblar <ft@finbarr.ca>
-Florian Meier <florian.meier@koalo.de>
-Gaëtan Lehmann <gaetan.lehmann@gmail.com>
-Gaurav <g.gupta@samsung.com>
-Gergely Nagy <ngg@ngg.hu>
-Gida Pataki <gida.pataki@prezi.com>
-I3ck <buckmartin@buckmartin.de>
-Iñaki Baz Castillo <ibc@aliax.net>
-Jacco <jacco@geul.net>
-Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
-Jonas Platte <mail@jonasplatte.de>
-Jörg Krause <joerg.krause@embedded.rocks>
-Keith Lea <keith@whamcitylights.com>
-Kevin Grant <kbradleygrant@gmail.com>
-Kirill V. Lyadvinsky <jia3ep@gmail.com>
-Kirill V. Lyadvinsky <mail@codeatcpp.com>
-Kobi Gurkan <kobigurk@gmail.com>
-Magnus Bjerke Vik <mbvett@gmail.com>
-Malay Shah <malays@users.sourceforge.net>
-Mara Kim <hacker.root@gmail.com>
-Marek Kotewicz <marek.kotewicz@gmail.com>
-Mark Lakata <mark@lakata.org>
-Mark Zeren <mzeren@vmware.com>
-Martin Buck <buckmartin@buckmartin.de>
-Martyn Gigg <martyn.gigg@gmail.com>
-Mattes D <github@xoft.cz>
-Matthias Loy <matthias.loy@hbm.com>
-Merlyn Morgan-Graham <kavika@gmail.com>
-Michael Shields <mshields@google.com>
-Michał Górny <mgorny@gentoo.org>
-Mike Naberezny <mike@naberezny.com>
-mloy <matthias.loy@googlemail.com>
-Motti <lanzkron@gmail.com>
-nnkur <nnkur@mail.ru>
-Omkar Wagh <owagh@owaghlinux.ny.tower-research.com>
-paulo <paulobrizolara@users.noreply.github.com>
-pavel.pimenov <pavel.pimenov@gmail.com>
-Paweł Bylica <chfast@gmail.com>
-Péricles Lopes Machado <pericles.raskolnikoff@gmail.com>
-Peter Spiess-Knafl <psk@autistici.org>
-pffang <pffang@vip.qq.com>
-Rémi Verschelde <remi@verschelde.fr>
-renu555 <renu.tyagi@samsung.com>
-Robert Dailey <rcdailey@gmail.com>
-Sam Clegg <sbc@chromium.org>
-selaselah <selah@outlook.com>
-Sergiy80 <sil2004@gmail.com>
-sergzub <sergzub@gmail.com>
-Stefan Schweter <stefan@schweter.it>
-Steffen Kieß <Steffen.Kiess@ipvs.uni-stuttgart.de>
-Steven Hahn <hahnse@ornl.gov>
-Stuart Eichert <stuart@fivemicro.com>
-SuperManitu <supermanitu@gmail.com>
-Techwolf <dring@g33kworld.net>
-Tengiz Sharafiev <btolfa+github@gmail.com>
-Tomasz Maciejewski <tmaciejewsk@gmail.com>
-Vicente Olivert Riera <Vincent.Riera@imgtec.com>
-xiaoyur347 <xiaoyur347@gmail.com>
-ycqiu <429148848@qq.com>
-yiqiju <fred_ju@selinc.com>
-Yu Xiaolei <dreifachstein@gmail.com>
-
-Google Inc.
diff --git a/3rdParty/jsoncpp/CMakeLists.txt b/3rdParty/jsoncpp/CMakeLists.txt
deleted file mode 100644
index 7337b69f1c794b6769eb6214c7c841d4346513cd..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/CMakeLists.txt
+++ /dev/null
@@ -1,157 +0,0 @@
-# vim: et ts=4 sts=4 sw=4 tw=0
-
-CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
-PROJECT(jsoncpp)
-ENABLE_TESTING()
-
-OPTION(JSONCPP_WITH_TESTS "Compile and (for jsoncpp_check) run JsonCpp test executables" OFF)
-OPTION(JSONCPP_WITH_POST_BUILD_UNITTEST "Automatically run unit-tests as a post build step" OFF)
-OPTION(JSONCPP_WITH_WARNING_AS_ERROR "Force compilation to fail if a warning occurs" OFF)
-OPTION(JSONCPP_WITH_STRICT_ISO "Issue all the warnings demanded by strict ISO C and ISO C++" ON)
-OPTION(JSONCPP_WITH_PKGCONFIG_SUPPORT "Generate and install .pc files" OFF)
-OPTION(JSONCPP_WITH_CMAKE_PACKAGE "Generate and install cmake package files" OFF)
-
-# Ensures that CMAKE_BUILD_TYPE is visible in cmake-gui on Unix
-IF(NOT WIN32)
-    IF(NOT CMAKE_BUILD_TYPE)
-        SET(CMAKE_BUILD_TYPE Release CACHE STRING
-            "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage."
-            FORCE)
-    ENDIF()
-ENDIF()
-
-# Enable runtime search path support for dynamic libraries on OSX
-IF(APPLE)
-    SET(CMAKE_MACOSX_RPATH 1)
-ENDIF()
-
-# Adhere to GNU filesystem layout conventions
-INCLUDE(GNUInstallDirs)
-
-SET(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the library name for a debug build")
-
-# Set variable named ${VAR_NAME} to value ${VALUE}
-FUNCTION(set_using_dynamic_name VAR_NAME VALUE)
-    SET( "${VAR_NAME}" "${VALUE}" PARENT_SCOPE)
-ENDFUNCTION()
-
-# Extract major, minor, patch from version text
-# Parse a version string "X.Y.Z" and outputs
-# version parts in ${OUPUT_PREFIX}_MAJOR, _MINOR, _PATCH.
-# If parse succeeds then ${OUPUT_PREFIX}_FOUND is TRUE.
-MACRO(jsoncpp_parse_version VERSION_TEXT OUPUT_PREFIX)
-    SET(VERSION_REGEX "[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9_]+)?")
-    IF( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} )
-        STRING(REGEX MATCHALL "[0-9]+|-([A-Za-z0-9_]+)" VERSION_PARTS ${VERSION_TEXT})
-        LIST(GET VERSION_PARTS 0 ${OUPUT_PREFIX}_MAJOR)
-        LIST(GET VERSION_PARTS 1 ${OUPUT_PREFIX}_MINOR)
-        LIST(GET VERSION_PARTS 2 ${OUPUT_PREFIX}_PATCH)
-        set_using_dynamic_name( "${OUPUT_PREFIX}_FOUND" TRUE )
-    ELSE( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} )
-        set_using_dynamic_name( "${OUPUT_PREFIX}_FOUND" FALSE )
-    ENDIF()
-ENDMACRO()
-
-# Read out version from "version" file
-#FILE(STRINGS "version" JSONCPP_VERSION)
-#SET( JSONCPP_VERSION_MAJOR X )
-#SET( JSONCPP_VERSION_MINOR Y )
-#SET( JSONCPP_VERSION_PATCH Z )
-SET( JSONCPP_VERSION 1.8.3 )
-jsoncpp_parse_version( ${JSONCPP_VERSION} JSONCPP_VERSION )
-#IF(NOT JSONCPP_VERSION_FOUND)
-#    MESSAGE(FATAL_ERROR "Failed to parse version string properly. Expect X.Y.Z")
-#ENDIF(NOT JSONCPP_VERSION_FOUND)
-SET( JSONCPP_SOVERSION 19 )
-SET( JSONCPP_USE_SECURE_MEMORY "0" CACHE STRING "-D...=1 to use memory-wiping allocator for STL" )
-
-MESSAGE(STATUS "JsonCpp Version: ${JSONCPP_VERSION_MAJOR}.${JSONCPP_VERSION_MINOR}.${JSONCPP_VERSION_PATCH}")
-# File version.h is only regenerated on CMake configure step
-CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/src/lib_json/version.h.in"
-                "${PROJECT_SOURCE_DIR}/include/json/version.h"
-                NEWLINE_STYLE UNIX )
-CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/version.in"
-                "${PROJECT_SOURCE_DIR}/version"
-                NEWLINE_STYLE UNIX )
-
-MACRO(UseCompilationWarningAsError)
-    IF(MSVC)
-        # Only enabled in debug because some old versions of VS STL generate
-        # warnings when compiled in release configuration.
-        SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /WX ")
-    ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
-        IF(JSONCPP_WITH_STRICT_ISO)
-            SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors")
-        ENDIF()
-    ENDIF()
-ENDMACRO()
-
-# Include our configuration header
-INCLUDE_DIRECTORIES( ${jsoncpp_SOURCE_DIR}/include )
-
-IF(MSVC)
-    # Only enabled in debug because some old versions of VS STL generate
-    # unreachable code warning when compiled in release configuration.
-    SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4 ")
-ENDIF()
-
-# Require C++11 support, prefer ISO C++ over GNU variants,
-# as relying solely on ISO C++ is more portable.
-SET(CMAKE_CXX_STANDARD 11)
-SET(CMAKE_CXX_STANDARD_REQUIRED ON)
-SET(CMAKE_CXX_EXTENSIONS OFF)
-
-IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-    # using regular Clang or AppleClang
-    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Werror=conversion -Werror=sign-compare")
-ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-    # using GCC
-    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra")
-    # not yet ready for -Wsign-conversion
-
-    IF(JSONCPP_WITH_STRICT_ISO)
-        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
-    ENDIF()
-    IF(JSONCPP_WITH_WARNING_AS_ERROR)
-        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=conversion")
-    ENDIF()
-ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
-    # using Intel compiler
-    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra -Werror=conversion")
-
-    IF(JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR)
-        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
-    ENDIF()
-ENDIF()
-
-FIND_PROGRAM(CCACHE_FOUND ccache)
-IF(CCACHE_FOUND)
-    SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
-    SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
-ENDIF(CCACHE_FOUND)
-
-IF(JSONCPP_WITH_WARNING_AS_ERROR)
-    UseCompilationWarningAsError()
-ENDIF()
-
-IF(JSONCPP_WITH_PKGCONFIG_SUPPORT)
-    CONFIGURE_FILE(
-        "pkg-config/jsoncpp.pc.in"
-        "pkg-config/jsoncpp.pc"
-        @ONLY)
-    INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkg-config/jsoncpp.pc"
-        DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
-ENDIF()
-
-IF(JSONCPP_WITH_CMAKE_PACKAGE)
-        INSTALL(EXPORT jsoncpp
-                DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/jsoncpp
-                FILE        jsoncppConfig.cmake)
-ENDIF()
-
-# Build the different applications
-ADD_SUBDIRECTORY( src )
-
-#install the includes
-ADD_SUBDIRECTORY( include )
diff --git a/3rdParty/jsoncpp/LICENSE b/3rdParty/jsoncpp/LICENSE
deleted file mode 100644
index 89280a6c48a9db51559700d34c849b49e1c49ad1..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/LICENSE
+++ /dev/null
@@ -1,55 +0,0 @@
-The JsonCpp library's source code, including accompanying documentation, 
-tests and demonstration applications, are licensed under the following
-conditions...
-
-Baptiste Lepilleur and The JsonCpp Authors explicitly disclaim copyright in all 
-jurisdictions which recognize such a disclaimer. In such jurisdictions, 
-this software is released into the Public Domain.
-
-In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
-2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur and
-The JsonCpp Authors, and is released under the terms of the MIT License (see below).
-
-In jurisdictions which recognize Public Domain property, the user of this 
-software may choose to accept it either as 1) Public Domain, 2) under the 
-conditions of the MIT License (see below), or 3) under the terms of dual 
-Public Domain/MIT License conditions described here, as they choose.
-
-The MIT License is about as close to Public Domain as a license can get, and is
-described in clear, concise terms at:
-
-   http://en.wikipedia.org/wiki/MIT_License
-   
-The full text of the MIT License follows:
-
-========================================================================
-Copyright (c) 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use, copy,
-modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-========================================================================
-(END LICENSE TEXT)
-
-The MIT license is compatible with both the GPL and commercial
-software, affording one all of the rights of Public Domain with the
-minor nuisance of being required to keep the above copyright notice
-and license text in the source code. Note also that by accepting the
-Public Domain "license" you can re-license your copy using whatever
-license you like.
diff --git a/3rdParty/jsoncpp/README.md b/3rdParty/jsoncpp/README.md
deleted file mode 100644
index 833274205cb007f195a1ccfdc479beb1fa5a3d22..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/README.md
+++ /dev/null
@@ -1,135 +0,0 @@
-# JsonCpp
-
-[![badge](https://img.shields.io/badge/conan.io-jsoncpp%2F1.8.0-green.svg?logo=data:image/png;base64%2CiVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAA1VBMVEUAAABhlctjlstkl8tlmMtlmMxlmcxmmcxnmsxpnMxpnM1qnc1sn85voM91oM11oc1xotB2oc56pNF6pNJ2ptJ8ptJ8ptN9ptN8p9N5qNJ9p9N9p9R8qtOBqdSAqtOAqtR%2BrNSCrNJ/rdWDrNWCsNWCsNaJs9eLs9iRvNuVvdyVv9yXwd2Zwt6axN6dxt%2Bfx%2BChyeGiyuGjyuCjyuGly%2BGlzOKmzOGozuKoz%2BKqz%2BOq0OOv1OWw1OWw1eWx1eWy1uay1%2Baz1%2Baz1%2Bez2Oe02Oe12ee22ujUGwH3AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfgBQkREyOxFIh/AAAAiklEQVQI12NgAAMbOwY4sLZ2NtQ1coVKWNvoc/Eq8XDr2wB5Ig62ekza9vaOqpK2TpoMzOxaFtwqZua2Bm4makIM7OzMAjoaCqYuxooSUqJALjs7o4yVpbowvzSUy87KqSwmxQfnsrPISyFzWeWAXCkpMaBVIC4bmCsOdgiUKwh3JojLgAQ4ZCE0AMm2D29tZwe6AAAAAElFTkSuQmCC)](http://www.conan.io/source/jsoncpp/1.8.0/theirix/ci)
-
-[JSON][json-org] is a lightweight data-interchange format. It can represent
-numbers, strings, ordered sequences of values, and collections of name/value
-pairs.
-
-[json-org]: http://json.org/
-
-JsonCpp is a C++ library that allows manipulating JSON values, including
-serialization and deserialization to and from strings. It can also preserve
-existing comment in unserialization/serialization steps, making it a convenient
-format to store user input files.
-
-
-## Documentation
-
-[JsonCpp documentation][JsonCpp-documentation] is generated using [Doxygen][].
-
-[JsonCpp-documentation]: http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html
-[Doxygen]: http://www.doxygen.org
-
-
-## A note on backward-compatibility
-
-* `1.y.z` is built with C++11.
-* `0.y.z` can be used with older compilers.
-* Major versions maintain binary-compatibility.
-
-## Contributing to JsonCpp
-
-### Building and testing with Meson/Ninja
-Thanks to David Seifert (@SoapGentoo), we (the maintainers) now use [meson](http://mesonbuild.com/) and [ninja](https://ninja-build.org/) to build for debugging, as well as for continuous integration (see [`travis.sh`](travis.sh) ). Other systems may work, but minor things like version strings might break.
-
-First, install both meson (which requires Python3) and ninja.
-If you wish to install to a directory other than /usr/local, set an environment variable called DESTDIR with the desired path:
-    DESTDIR=/path/to/install/dir
-
-Then,
-
-    cd jsoncpp/
-    BUILD_TYPE=debug
-    #BUILD_TYPE=release
-    LIB_TYPE=shared
-    #LIB_TYPE=static
-    meson --buildtype ${BUILD_TYPE} --default-library ${LIB_TYPE} . build-${LIB_TYPE}
-    ninja -v -C build-${LIB_TYPE} test
-    cd build-${LIB_TYPE}
-    sudo ninja install
-
-### Building and testing with other build systems
-See https://github.com/open-source-parsers/jsoncpp/wiki/Building
-
-### Running the tests manually
-
-You need to run tests manually only if you are troubleshooting an issue.
-
-In the instructions below, replace `path/to/jsontest` with the path of the
-`jsontest` executable that was compiled on your platform.
-
-    cd test
-    # This will run the Reader/Writer tests
-    python runjsontests.py path/to/jsontest
-
-    # This will run the Reader/Writer tests, using JSONChecker test suite
-    # (http://www.json.org/JSON_checker/).
-    # Notes: not all tests pass: JsonCpp is too lenient (for example,
-    # it allows an integer to start with '0'). The goal is to improve
-    # strict mode parsing to get all tests to pass.
-    python runjsontests.py --with-json-checker path/to/jsontest
-
-    # This will run the unit tests (mostly Value)
-    python rununittests.py path/to/test_lib_json
-
-    # You can run the tests using valgrind:
-    python rununittests.py --valgrind path/to/test_lib_json
-
-### Building the documentation
-
-Run the Python script `doxybuild.py` from the top directory:
-
-    python doxybuild.py --doxygen=$(which doxygen) --open --with-dot
-
-See `doxybuild.py --help` for options.
-
-### Adding a reader/writer test
-
-To add a test, you need to create two files in test/data:
-
-* a `TESTNAME.json` file, that contains the input document in JSON format.
-* a `TESTNAME.expected` file, that contains a flatened representation of the
-  input document.
-
-The `TESTNAME.expected` file format is as follows:
-
-* Each line represents a JSON element of the element tree represented by the
-  input document.
-* Each line has two parts: the path to access the element separated from the
-  element value by `=`. Array and object values are always empty (i.e.
-  represented by either `[]` or `{}`).
-* Element path `.` represents the root element, and is used to separate object
-  members. `[N]` is used to specify the value of an array element at index `N`.
-
-See the examples `test_complex_01.json` and `test_complex_01.expected` to better understand element paths.
-
-### Understanding reader/writer test output
-
-When a test is run, output files are generated beside the input test files. Below is a short description of the content of each file:
-
-* `test_complex_01.json`: input JSON document.
-* `test_complex_01.expected`: flattened JSON element tree used to check if
-  parsing was corrected.
-* `test_complex_01.actual`: flattened JSON element tree produced by `jsontest`
-  from reading `test_complex_01.json`.
-* `test_complex_01.rewrite`: JSON document written by `jsontest` using the
-  `Json::Value` parsed from `test_complex_01.json` and serialized using
-  `Json::StyledWritter`.
-* `test_complex_01.actual-rewrite`: flattened JSON element tree produced by
-  `jsontest` from reading `test_complex_01.rewrite`.
-* `test_complex_01.process-output`: `jsontest` output, typically useful for
-  understanding parsing errors.
-
-## Using JsonCpp in your project
-
-### Amalgamated source
-https://github.com/open-source-parsers/jsoncpp/wiki/Amalgamated
-
-### Other ways
-If you have trouble, see the Wiki, or post a question as an Issue.
-
-## License
-
-See the `LICENSE` file for details. In summary, JsonCpp is licensed under the
-MIT license, or public domain if desired and recognized in your jurisdiction.
diff --git a/3rdParty/jsoncpp/amalgamate.py b/3rdParty/jsoncpp/amalgamate.py
deleted file mode 100644
index a8ab3894c632845ee620e8f8eef3e35301d56eec..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/amalgamate.py
+++ /dev/null
@@ -1,155 +0,0 @@
-"""Amalgate json-cpp library sources into a single source and header file.
-
-Works with python2.6+ and python3.4+.
-
-Example of invocation (must be invoked from json-cpp top directory):
-python amalgate.py
-"""
-import os
-import os.path
-import sys
-
-class AmalgamationFile:
-    def __init__(self, top_dir):
-        self.top_dir = top_dir
-        self.blocks = []
-
-    def add_text(self, text):
-        if not text.endswith("\n"):
-            text += "\n"
-        self.blocks.append(text)
-
-    def add_file(self, relative_input_path, wrap_in_comment=False):
-        def add_marker(prefix):
-            self.add_text("")
-            self.add_text("// " + "/"*70)
-            self.add_text("// %s of content of file: %s" % (prefix, relative_input_path.replace("\\","/")))
-            self.add_text("// " + "/"*70)
-            self.add_text("")
-        add_marker("Beginning")
-        f = open(os.path.join(self.top_dir, relative_input_path), "rt")
-        content = f.read()
-        if wrap_in_comment:
-            content = "/*\n" + content + "\n*/"
-        self.add_text(content)
-        f.close()
-        add_marker("End")
-        self.add_text("\n\n\n\n")
-
-    def get_value(self):
-        return "".join(self.blocks).replace("\r\n","\n")
-
-    def write_to(self, output_path):
-        output_dir = os.path.dirname(output_path)
-        if output_dir and not os.path.isdir(output_dir):
-            os.makedirs(output_dir)
-        f = open(output_path, "wb")
-        f.write(str.encode(self.get_value(), 'UTF-8'))
-        f.close()
-
-def amalgamate_source(source_top_dir=None,
-                       target_VF_SRC_DIR=None,
-                       header_include_path=None):
-    """Produces amalgated source.
-       Parameters:
-           source_top_dir: top-directory
-           target_VF_SRC_DIR: output .cpp path
-           header_include_path: generated header path relative to target_VF_SRC_DIR.
-    """
-    print("Amalgating header...")
-    header = AmalgamationFile(source_top_dir)
-    header.add_text("/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/).")
-    header.add_text('/// It is intended to be used with #include "%s"' % header_include_path)
-    header.add_file("LICENSE", wrap_in_comment=True)
-    header.add_text("#ifndef JSON_AMALGATED_H_INCLUDED")
-    header.add_text("# define JSON_AMALGATED_H_INCLUDED")
-    header.add_text("/// If defined, indicates that the source file is amalgated")
-    header.add_text("/// to prevent private header inclusion.")
-    header.add_text("#define JSON_IS_AMALGAMATION")
-    header.add_file("include/json/version.h")
-    #header.add_file("include/json/allocator.h") # Not available here.
-    header.add_file("include/json/config.h")
-    header.add_file("include/json/forwards.h")
-    header.add_file("include/json/features.h")
-    header.add_file("include/json/value.h")
-    header.add_file("include/json/reader.h")
-    header.add_file("include/json/writer.h")
-    header.add_file("include/json/assertions.h")
-    header.add_text("#endif //ifndef JSON_AMALGATED_H_INCLUDED")
-
-    target_header_path = os.path.join(os.path.dirname(target_VF_SRC_DIR), header_include_path)
-    print("Writing amalgated header to %r" % target_header_path)
-    header.write_to(target_header_path)
-
-    base, ext = os.path.splitext(header_include_path)
-    forward_header_include_path = base + "-forwards" + ext
-    print("Amalgating forward header...")
-    header = AmalgamationFile(source_top_dir)
-    header.add_text("/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/).")
-    header.add_text('/// It is intended to be used with #include "%s"' % forward_header_include_path)
-    header.add_text("/// This header provides forward declaration for all JsonCpp types.")
-    header.add_file("LICENSE", wrap_in_comment=True)
-    header.add_text("#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED")
-    header.add_text("# define JSON_FORWARD_AMALGATED_H_INCLUDED")
-    header.add_text("/// If defined, indicates that the source file is amalgated")
-    header.add_text("/// to prevent private header inclusion.")
-    header.add_text("#define JSON_IS_AMALGAMATION")
-    header.add_file("include/json/config.h")
-    header.add_file("include/json/forwards.h")
-    header.add_text("#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED")
-
-    target_forward_header_path = os.path.join(os.path.dirname(target_VF_SRC_DIR),
-                                               forward_header_include_path)
-    print("Writing amalgated forward header to %r" % target_forward_header_path)
-    header.write_to(target_forward_header_path)
-
-    print("Amalgating source...")
-    source = AmalgamationFile(source_top_dir)
-    source.add_text("/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/).")
-    source.add_text('/// It is intended to be used with #include "%s"' % header_include_path)
-    source.add_file("LICENSE", wrap_in_comment=True)
-    source.add_text("")
-    source.add_text('#include "%s"' % header_include_path)
-    source.add_text("""
-#ifndef JSON_IS_AMALGAMATION
-#error "Compile with -I PATH_TO_JSON_DIRECTORY"
-#endif
-""")
-    source.add_text("")
-    lib_json = "src/lib_json"
-    source.add_file(os.path.join(lib_json, "json_tool.h"))
-    source.add_file(os.path.join(lib_json, "json_reader.cpp"))
-    source.add_file(os.path.join(lib_json, "json_valueiterator.inl"))
-    source.add_file(os.path.join(lib_json, "json_value.cpp"))
-    source.add_file(os.path.join(lib_json, "json_writer.cpp"))
-
-    print("Writing amalgated source to %r" % target_VF_SRC_DIR)
-    source.write_to(target_VF_SRC_DIR)
-
-def main():
-    usage = """%prog [options]
-Generate a single amalgated source and header file from the sources.
-"""
-    from optparse import OptionParser
-    parser = OptionParser(usage=usage)
-    parser.allow_interspersed_args = False
-    parser.add_option("-s", "--source", dest="target_VF_SRC_DIR", action="store", default="dist/jsoncpp.cpp",
-        help="""Output .cpp source path. [Default: %default]""")
-    parser.add_option("-i", "--include", dest="header_include_path", action="store", default="json/json.h",
-        help="""Header include path. Used to include the header from the amalgated source file. [Default: %default]""")
-    parser.add_option("-t", "--top-dir", dest="top_dir", action="store", default=os.getcwd(),
-        help="""Source top-directory. [Default: %default]""")
-    parser.enable_interspersed_args()
-    options, args = parser.parse_args()
-
-    msg = amalgamate_source(source_top_dir=options.top_dir,
-                             target_VF_SRC_DIR=options.target_VF_SRC_DIR,
-                             header_include_path=options.header_include_path)
-    if msg:
-        sys.stderr.write(msg + "\n")
-        sys.exit(1)
-    else:
-        print("Source succesfully amalagated")
-
-if __name__ == "__main__":
-    main()
diff --git a/3rdParty/jsoncpp/appveyor.yml b/3rdParty/jsoncpp/appveyor.yml
deleted file mode 100644
index 5d497de1492d4ebc17fcaa8e0127351ead1bca3c..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/appveyor.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-clone_folder: c:\projects\jsoncpp
-
-environment:
-  matrix:
-    - CMAKE_GENERATOR: Visual Studio 12 2013
-    - CMAKE_GENERATOR: Visual Studio 12 2013 Win64
-    - CMAKE_GENERATOR: Visual Studio 14 2015
-    - CMAKE_GENERATOR: Visual Studio 14 2015 Win64
-
-build_script:
-  - cmake --version
-  - cd c:\projects\jsoncpp
-  - cmake -G "%CMAKE_GENERATOR%" -DCMAKE_INSTALL_PREFIX=%CD:\=/%/install -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON .
-  - cmake --build . --config Release --target install
-
-deploy:
-    provider: GitHub
-    auth_token:
-        secure: K2Tp1q8pIZ7rs0Ot24ZMWuwr12Ev6Tc6QkhMjGQxoQG3ng1pXtgPasiJ45IDXGdg
-    on:
-        branch: master
-        appveyor_repo_tag: true
diff --git a/3rdParty/jsoncpp/dev.makefile b/3rdParty/jsoncpp/dev.makefile
deleted file mode 100644
index 7e4b3fb787f6f39e332244680487806e63e3115d..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/dev.makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-# This is only for jsoncpp developers/contributors.
-# We use this to sign releases, generate documentation, etc.
-VER?=$(shell cat version)
-
-default:
-	@echo "VER=${VER}"
-sign: jsoncpp-${VER}.tar.gz
-	gpg --armor --detach-sign $<
-	gpg --verify $<.asc
-	# Then upload .asc to the release.
-jsoncpp-%.tar.gz:
-	curl https://github.com/open-source-parsers/jsoncpp/archive/$*.tar.gz -o $@
-dox:
-	python doxybuild.py --doxygen=$$(which doxygen) --in doc/web_doxyfile.in
-	rsync -va -c --delete dist/doxygen/jsoncpp-api-html-${VER}/ ../jsoncpp-docs/doxygen/
-	# Then 'git add -A' and 'git push' in jsoncpp-docs.
-build:
-	mkdir -p build/debug
-	cd build/debug; cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_SHARED_LIBS=ON -G "Unix Makefiles" ../..
-	make -C build/debug
-
-# Currently, this depends on include/json/version.h generated
-# by cmake.
-test-amalgamate:
-	python2.7 amalgamate.py
-	python3.4 amalgamate.py
-	cd dist; gcc -I. -c jsoncpp.cpp
-
-valgrind:
-	valgrind --error-exitcode=42 --leak-check=full ./build/debug/src/test_lib_json/jsoncpp_test
-
-clean:
-	\rm -rf *.gz *.asc dist/
-
-.PHONY: build
diff --git a/3rdParty/jsoncpp/devtools/__init__.py b/3rdParty/jsoncpp/devtools/__init__.py
deleted file mode 100644
index 4a51e651425aa7f3c9cbbb285e90c3579c1f779b..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/devtools/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-# Copyright 2010 Baptiste Lepilleur and The JsonCpp Authors
-# Distributed under MIT license, or public domain if desired and
-# recognized in your jurisdiction.
-# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-# module
diff --git a/3rdParty/jsoncpp/devtools/agent_vmw7.json b/3rdParty/jsoncpp/devtools/agent_vmw7.json
deleted file mode 100644
index cd7b777fe5d4610886f3fd57c6948ab79b9e836e..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/devtools/agent_vmw7.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-    "cmake_variants" : [
-        {"name": "generator",
-         "generators": [
-            {"generator": [
-                "Visual Studio 7 .NET 2003",
-                "Visual Studio 9 2008",
-                "Visual Studio 9 2008 Win64",
-                "Visual Studio 10",
-                "Visual Studio 10 Win64",
-                "Visual Studio 11",
-                "Visual Studio 11 Win64"
-                ]
-            },
-            {"generator": ["MinGW Makefiles"],
-             "env_prepend": [{"path": "c:/wut/prg/MinGW/bin"}]
-            }
-         ]
-        },
-        {"name": "shared_dll",
-         "variables": [
-            ["BUILD_SHARED_LIBS=true"],
-            ["BUILD_SHARED_LIBS=false"]
-          ]
-        },
-        {"name": "build_type",
-         "build_types": [
-            "debug",
-            "release"
-            ]
-        }
-    ]
-}
diff --git a/3rdParty/jsoncpp/devtools/agent_vmxp.json b/3rdParty/jsoncpp/devtools/agent_vmxp.json
deleted file mode 100644
index f82a0773a2f1f5545f94a315b950efc713ebee37..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/devtools/agent_vmxp.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-    "cmake_variants" : [
-        {"name": "generator",
-         "generators": [
-            {"generator": [
-                "Visual Studio 6",
-                "Visual Studio 7",
-                "Visual Studio 8 2005"
-                ]
-            }
-         ]
-        },
-        {"name": "shared_dll",
-         "variables": [
-            ["BUILD_SHARED_LIBS=true"],
-            ["BUILD_SHARED_LIBS=false"]
-          ]
-        },
-        {"name": "build_type",
-         "build_types": [
-            "debug",
-            "release"
-            ]
-        }
-    ]
-}
diff --git a/3rdParty/jsoncpp/devtools/antglob.py b/3rdParty/jsoncpp/devtools/antglob.py
deleted file mode 100644
index 98437658ce0b7b966132beab4535cbfe5c385f9a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/devtools/antglob.py
+++ /dev/null
@@ -1,205 +0,0 @@
-#!/usr/bin/env python
-# encoding: utf-8
-# Copyright 2009 Baptiste Lepilleur and The JsonCpp Authors
-# Distributed under MIT license, or public domain if desired and
-# recognized in your jurisdiction.
-# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-from __future__ import print_function
-from dircache import listdir
-import re
-import fnmatch
-import os.path
-
-
-# These fnmatch expressions are used by default to prune the directory tree
-# while doing the recursive traversal in the glob_impl method of glob function.
-prune_dirs = '.git .bzr .hg .svn _MTN _darcs CVS SCCS '
-
-# These fnmatch expressions are used by default to exclude files and dirs
-# while doing the recursive traversal in the glob_impl method of glob function.
-##exclude_pats = prune_pats + '*~ #*# .#* %*% ._* .gitignore .cvsignore vssver.scc .DS_Store'.split()
-
-# These ant_glob expressions are used by default to exclude files and dirs and also prune the directory tree
-# while doing the recursive traversal in the glob_impl method of glob function.
-default_excludes = '''
-**/*~
-**/#*#
-**/.#*
-**/%*%
-**/._*
-**/CVS
-**/CVS/**
-**/.cvsignore
-**/SCCS
-**/SCCS/**
-**/vssver.scc
-**/.svn
-**/.svn/**
-**/.git
-**/.git/**
-**/.gitignore
-**/.bzr
-**/.bzr/**
-**/.hg
-**/.hg/**
-**/_MTN
-**/_MTN/**
-**/_darcs
-**/_darcs/**
-**/.DS_Store '''
-
-DIR = 1
-FILE = 2
-DIR_LINK = 4
-FILE_LINK = 8
-LINKS = DIR_LINK | FILE_LINK
-ALL_NO_LINK = DIR | FILE
-ALL = DIR | FILE | LINKS
-
-_ANT_RE = re.compile(r'(/\*\*/)|(\*\*/)|(/\*\*)|(\*)|(/)|([^\*/]*)')
-
-def ant_pattern_to_re(ant_pattern):
-    """Generates a regular expression from the ant pattern.
-    Matching convention:
-    **/a: match 'a', 'dir/a', 'dir1/dir2/a'
-    a/**/b: match 'a/b', 'a/c/b', 'a/d/c/b'
-    *.py: match 'script.py' but not 'a/script.py'
-    """
-    rex = ['^']
-    next_pos = 0
-    sep_rex = r'(?:/|%s)' % re.escape(os.path.sep)
-##    print 'Converting', ant_pattern
-    for match in _ANT_RE.finditer(ant_pattern):
-##        print 'Matched', match.group()
-##        print match.start(0), next_pos
-        if match.start(0) != next_pos:
-            raise ValueError("Invalid ant pattern")
-        if match.group(1): # /**/
-            rex.append(sep_rex + '(?:.*%s)?' % sep_rex)
-        elif match.group(2): # **/
-            rex.append('(?:.*%s)?' % sep_rex)
-        elif match.group(3): # /**
-            rex.append(sep_rex + '.*')
-        elif match.group(4): # *
-            rex.append('[^/%s]*' % re.escape(os.path.sep))
-        elif match.group(5): # /
-            rex.append(sep_rex)
-        else: # somepath
-            rex.append(re.escape(match.group(6)))
-        next_pos = match.end()
-    rex.append('$')
-    return re.compile(''.join(rex))
-
-def _as_list(l):
-    if isinstance(l, basestring):
-        return l.split()
-    return l
-
-def glob(dir_path,
-         includes = '**/*',
-         excludes = default_excludes,
-         entry_type = FILE,
-         prune_dirs = prune_dirs,
-         max_depth = 25):
-    include_filter = [ant_pattern_to_re(p) for p in _as_list(includes)]
-    exclude_filter = [ant_pattern_to_re(p) for p in _as_list(excludes)]
-    prune_dirs = [p.replace('/',os.path.sep) for p in _as_list(prune_dirs)]
-    dir_path = dir_path.replace('/',os.path.sep)
-    entry_type_filter = entry_type
-
-    def is_pruned_dir(dir_name):
-        for pattern in prune_dirs:
-            if fnmatch.fnmatch(dir_name, pattern):
-                return True
-        return False
-
-    def apply_filter(full_path, filter_rexs):
-        """Return True if at least one of the filter regular expression match full_path."""
-        for rex in filter_rexs:
-            if rex.match(full_path):
-                return True
-        return False
-
-    def glob_impl(root_dir_path):
-        child_dirs = [root_dir_path]
-        while child_dirs:
-            dir_path = child_dirs.pop()
-            for entry in listdir(dir_path):
-                full_path = os.path.join(dir_path, entry)
-##                print 'Testing:', full_path,
-                is_dir = os.path.isdir(full_path)
-                if is_dir and not is_pruned_dir(entry): # explore child directory ?
-##                    print '===> marked for recursion',
-                    child_dirs.append(full_path)
-                included = apply_filter(full_path, include_filter)
-                rejected = apply_filter(full_path, exclude_filter)
-                if not included or rejected: # do not include entry ?
-##                    print '=> not included or rejected'
-                    continue
-                link = os.path.islink(full_path)
-                is_file = os.path.isfile(full_path)
-                if not is_file and not is_dir:
-##                    print '=> unknown entry type'
-                    continue
-                if link:
-                    entry_type = is_file and FILE_LINK or DIR_LINK
-                else:
-                    entry_type = is_file and FILE or DIR
-##                print '=> type: %d' % entry_type, 
-                if (entry_type & entry_type_filter) != 0:
-##                    print ' => KEEP'
-                    yield os.path.join(dir_path, entry)
-##                else:
-##                    print ' => TYPE REJECTED'
-    return list(glob_impl(dir_path))
-
-
-if __name__ == "__main__":
-    import unittest
-
-    class AntPatternToRETest(unittest.TestCase):
-##        def test_conversion(self):
-##            self.assertEqual('^somepath$', ant_pattern_to_re('somepath').pattern)
-
-        def test_matching(self):
-            test_cases = [ ('path',
-                             ['path'],
-                             ['somepath', 'pathsuffix', '/path', '/path']),
-                           ('*.py',
-                             ['source.py', 'source.ext.py', '.py'],
-                             ['path/source.py', '/.py', 'dir.py/z', 'z.pyc', 'z.c']),
-                           ('**/path',
-                             ['path', '/path', '/a/path', 'c:/a/path', '/a/b/path', '//a/path', '/a/path/b/path'],
-                             ['path/', 'a/path/b', 'dir.py/z', 'somepath', 'pathsuffix', 'a/somepath']),
-                           ('path/**',
-                             ['path/a', 'path/path/a', 'path//'],
-                             ['path', 'somepath/a', 'a/path', 'a/path/a', 'pathsuffix/a']),
-                           ('/**/path',
-                             ['/path', '/a/path', '/a/b/path/path', '/path/path'],
-                             ['path', 'path/', 'a/path', '/pathsuffix', '/somepath']),
-                           ('a/b',
-                             ['a/b'],
-                             ['somea/b', 'a/bsuffix', 'a/b/c']),
-                           ('**/*.py',
-                             ['script.py', 'src/script.py', 'a/b/script.py', '/a/b/script.py'],
-                             ['script.pyc', 'script.pyo', 'a.py/b']),
-                           ('src/**/*.py',
-                             ['src/a.py', 'src/dir/a.py'],
-                             ['a/src/a.py', '/src/a.py']),
-                           ]
-            for ant_pattern, accepted_matches, rejected_matches in list(test_cases):
-                def local_path(paths):
-                    return [ p.replace('/',os.path.sep) for p in paths ]
-                test_cases.append((ant_pattern, local_path(accepted_matches), local_path(rejected_matches)))
-            for ant_pattern, accepted_matches, rejected_matches in test_cases:
-                rex = ant_pattern_to_re(ant_pattern)
-                print('ant_pattern:', ant_pattern, ' => ', rex.pattern)
-                for accepted_match in accepted_matches:
-                    print('Accepted?:', accepted_match)
-                    self.assertTrue(rex.match(accepted_match) is not None)
-                for rejected_match in rejected_matches:
-                    print('Rejected?:', rejected_match)
-                    self.assertTrue(rex.match(rejected_match) is None)
-
-    unittest.main()
diff --git a/3rdParty/jsoncpp/devtools/batchbuild.py b/3rdParty/jsoncpp/devtools/batchbuild.py
deleted file mode 100644
index 0eb0690e8c6d73ad1ee8b3631cef7f991547f489..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/devtools/batchbuild.py
+++ /dev/null
@@ -1,278 +0,0 @@
-from __future__ import print_function
-import collections
-import itertools
-import json
-import os
-import os.path
-import re
-import shutil
-import string
-import subprocess
-import sys
-import cgi
-
-class BuildDesc:
-    def __init__(self, prepend_envs=None, variables=None, build_type=None, generator=None):
-        self.prepend_envs = prepend_envs or [] # [ { "var": "value" } ]
-        self.variables = variables or []
-        self.build_type = build_type
-        self.generator = generator
-
-    def merged_with(self, build_desc):
-        """Returns a new BuildDesc by merging field content.
-           Prefer build_desc fields to self fields for single valued field.
-        """
-        return BuildDesc(self.prepend_envs + build_desc.prepend_envs,
-                          self.variables + build_desc.variables,
-                          build_desc.build_type or self.build_type,
-                          build_desc.generator or self.generator)
-
-    def env(self):
-        environ = os.environ.copy()
-        for values_by_name in self.prepend_envs:
-            for var, value in list(values_by_name.items()):
-                var = var.upper()
-                if type(value) is unicode:
-                    value = value.encode(sys.getdefaultencoding())
-                if var in environ:
-                    environ[var] = value + os.pathsep + environ[var]
-                else:
-                    environ[var] = value
-        return environ
-
-    def cmake_args(self):
-        args = ["-D%s" % var for var in self.variables]
-        # skip build type for Visual Studio solution as it cause warning
-        if self.build_type and 'Visual' not in self.generator:
-            args.append("-DCMAKE_BUILD_TYPE=%s" % self.build_type)
-        if self.generator:
-            args.extend(['-G', self.generator])
-        return args
-
-    def __repr__(self):
-        return "BuildDesc(%s, build_type=%s)" %  (" ".join(self.cmake_args()), self.build_type)
-
-class BuildData:
-    def __init__(self, desc, work_dir, source_dir):
-        self.desc = desc
-        self.work_dir = work_dir
-        self.source_dir = source_dir
-        self.cmake_log_path = os.path.join(work_dir, 'batchbuild_cmake.log')
-        self.build_log_path = os.path.join(work_dir, 'batchbuild_build.log')
-        self.cmake_succeeded = False
-        self.build_succeeded = False
-
-    def execute_build(self):
-        print('Build %s' % self.desc)
-        self._make_new_work_dir()
-        self.cmake_succeeded = self._generate_makefiles()
-        if self.cmake_succeeded:
-            self.build_succeeded = self._build_using_makefiles()
-        return self.build_succeeded
-
-    def _generate_makefiles(self):
-        print('  Generating makefiles: ', end=' ')
-        cmd = ['cmake'] + self.desc.cmake_args() + [os.path.abspath(self.source_dir)]
-        succeeded = self._execute_build_subprocess(cmd, self.desc.env(), self.cmake_log_path)
-        print('done' if succeeded else 'FAILED')
-        return succeeded
-
-    def _build_using_makefiles(self):
-        print('  Building:', end=' ')
-        cmd = ['cmake', '--build', self.work_dir]
-        if self.desc.build_type:
-            cmd += ['--config', self.desc.build_type]
-        succeeded = self._execute_build_subprocess(cmd, self.desc.env(), self.build_log_path)
-        print('done' if succeeded else 'FAILED')
-        return succeeded
-
-    def _execute_build_subprocess(self, cmd, env, log_path):
-        process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=self.work_dir,
-                                    env=env)
-        stdout, _ = process.communicate()
-        succeeded = (process.returncode == 0)
-        with open(log_path, 'wb') as flog:
-            log = ' '.join(cmd) + '\n' + stdout + '\nExit code: %r\n' % process.returncode
-            flog.write(fix_eol(log))
-        return succeeded
-
-    def _make_new_work_dir(self):
-        if os.path.isdir(self.work_dir):
-            print('  Removing work directory', self.work_dir)
-            shutil.rmtree(self.work_dir, ignore_errors=True)
-        if not os.path.isdir(self.work_dir):
-            os.makedirs(self.work_dir)
-
-def fix_eol(stdout):
-    """Fixes wrong EOL produced by cmake --build on Windows (\r\r\n instead of \r\n).
-    """
-    return re.sub('\r*\n', os.linesep, stdout)
-
-def load_build_variants_from_config(config_path):
-    with open(config_path, 'rb') as fconfig:
-        data = json.load(fconfig)
-    variants = data[ 'cmake_variants' ]
-    build_descs_by_axis = collections.defaultdict(list)
-    for axis in variants:
-        axis_name = axis["name"]
-        build_descs = []
-        if "generators" in axis:
-            for generator_data in axis["generators"]:
-                for generator in generator_data["generator"]:
-                    build_desc = BuildDesc(generator=generator,
-                                            prepend_envs=generator_data.get("env_prepend"))
-                    build_descs.append(build_desc)
-        elif "variables" in axis:
-            for variables in axis["variables"]:
-                build_desc = BuildDesc(variables=variables)
-                build_descs.append(build_desc)
-        elif "build_types" in axis:
-            for build_type in axis["build_types"]:
-                build_desc = BuildDesc(build_type=build_type)
-                build_descs.append(build_desc)
-        build_descs_by_axis[axis_name].extend(build_descs)
-    return build_descs_by_axis
-
-def generate_build_variants(build_descs_by_axis):
-    """Returns a list of BuildDesc generated for the partial BuildDesc for each axis."""
-    axis_names = list(build_descs_by_axis.keys())
-    build_descs = []
-    for axis_name, axis_build_descs in list(build_descs_by_axis.items()):
-        if len(build_descs):
-            # for each existing build_desc and each axis build desc, create a new build_desc
-            new_build_descs = []
-            for prototype_build_desc, axis_build_desc in itertools.product(build_descs, axis_build_descs):
-                new_build_descs.append(prototype_build_desc.merged_with(axis_build_desc))
-            build_descs = new_build_descs
-        else:
-            build_descs = axis_build_descs
-    return build_descs
-
-HTML_TEMPLATE = string.Template('''<html>
-<head>
-    <title>$title</title>
-    <style type="text/css">
-    td.failed {background-color:#f08080;}
-    td.ok {background-color:#c0eec0;}
-    </style>
-</head>
-<body>
-<table border="1">
-<thead>
-    <tr>
-        <th>Variables</th>
-        $th_vars
-    </tr>
-    <tr>
-        <th>Build type</th>
-        $th_build_types
-    </tr>
-</thead>
-<tbody>
-$tr_builds
-</tbody>
-</table>
-</body></html>''')
-
-def generate_html_report(html_report_path, builds):
-    report_dir = os.path.dirname(html_report_path)
-    # Vertical axis: generator
-    # Horizontal: variables, then build_type
-    builds_by_generator = collections.defaultdict(list)
-    variables = set()
-    build_types_by_variable = collections.defaultdict(set)
-    build_by_pos_key = {} # { (generator, var_key, build_type): build }
-    for build in builds:
-        builds_by_generator[build.desc.generator].append(build)
-        var_key = tuple(sorted(build.desc.variables))
-        variables.add(var_key)
-        build_types_by_variable[var_key].add(build.desc.build_type)
-        pos_key = (build.desc.generator, var_key, build.desc.build_type)
-        build_by_pos_key[pos_key] = build
-    variables = sorted(variables)
-    th_vars = []
-    th_build_types = []
-    for variable in variables:
-        build_types = sorted(build_types_by_variable[variable])
-        nb_build_type = len(build_types_by_variable[variable])
-        th_vars.append('<th colspan="%d">%s</th>' % (nb_build_type, cgi.escape(' '.join(variable))))
-        for build_type in build_types:
-            th_build_types.append('<th>%s</th>' % cgi.escape(build_type))
-    tr_builds = []
-    for generator in sorted(builds_by_generator):
-        tds = [ '<td>%s</td>\n' % cgi.escape(generator) ]
-        for variable in variables:
-            build_types = sorted(build_types_by_variable[variable])
-            for build_type in build_types:
-                pos_key = (generator, variable, build_type)
-                build = build_by_pos_key.get(pos_key)
-                if build:
-                    cmake_status = 'ok' if build.cmake_succeeded else 'FAILED'
-                    build_status = 'ok' if build.build_succeeded else 'FAILED'
-                    cmake_log_url = os.path.relpath(build.cmake_log_path, report_dir)
-                    build_log_url = os.path.relpath(build.build_log_path, report_dir)
-                    td = '<td class="%s"><a href="%s" class="%s">CMake: %s</a>' % (                        build_status.lower(), cmake_log_url, cmake_status.lower(), cmake_status)
-                    if build.cmake_succeeded:
-                        td += '<br><a href="%s" class="%s">Build: %s</a>' % (                            build_log_url, build_status.lower(), build_status)
-                    td += '</td>'
-                else:
-                    td = '<td></td>'
-                tds.append(td)
-        tr_builds.append('<tr>%s</tr>' % '\n'.join(tds))
-    html = HTML_TEMPLATE.substitute(        title='Batch build report',
-        th_vars=' '.join(th_vars),
-        th_build_types=' '.join(th_build_types),
-        tr_builds='\n'.join(tr_builds))
-    with open(html_report_path, 'wt') as fhtml:
-        fhtml.write(html)
-    print('HTML report generated in:', html_report_path)
-
-def main():
-    usage = r"""%prog WORK_DIR SOURCE_DIR CONFIG_JSON_PATH [CONFIG2_JSON_PATH...]
-Build a given CMake based project located in SOURCE_DIR with multiple generators/options.dry_run
-as described in CONFIG_JSON_PATH building in WORK_DIR.
-
-Example of call:
-python devtools\batchbuild.py e:\buildbots\jsoncpp\build . devtools\agent_vmw7.json
-"""
-    from optparse import OptionParser
-    parser = OptionParser(usage=usage)
-    parser.allow_interspersed_args = True
-#    parser.add_option('-v', '--verbose', dest="verbose", action='store_true',
-#        help="""Be verbose.""")
-    parser.enable_interspersed_args()
-    options, args = parser.parse_args()
-    if len(args) < 3:
-        parser.error("Missing one of WORK_DIR SOURCE_DIR CONFIG_JSON_PATH.")
-    work_dir = args[0]
-    source_dir = args[1].rstrip('/\\')
-    config_paths = args[2:]
-    for config_path in config_paths:
-        if not os.path.isfile(config_path):
-            parser.error("Can not read: %r" % config_path)
-
-    # generate build variants
-    build_descs = []
-    for config_path in config_paths:
-        build_descs_by_axis = load_build_variants_from_config(config_path)
-        build_descs.extend(generate_build_variants(build_descs_by_axis))
-    print('Build variants (%d):' % len(build_descs))
-    # assign build directory for each variant
-    if not os.path.isdir(work_dir):
-        os.makedirs(work_dir)
-    builds = []
-    with open(os.path.join(work_dir, 'matrix-dir-map.txt'), 'wt') as fmatrixmap:
-        for index, build_desc in enumerate(build_descs):
-            build_desc_work_dir = os.path.join(work_dir, '%03d' % (index+1))
-            builds.append(BuildData(build_desc, build_desc_work_dir, source_dir))
-            fmatrixmap.write('%s: %s\n' % (build_desc_work_dir, build_desc))
-    for build in builds:
-        build.execute_build()
-    html_report_path = os.path.join(work_dir, 'batchbuild-report.html')
-    generate_html_report(html_report_path, builds)
-    print('Done')
-
-
-if __name__ == '__main__':
-    main()
-
diff --git a/3rdParty/jsoncpp/devtools/fixeol.py b/3rdParty/jsoncpp/devtools/fixeol.py
deleted file mode 100644
index 45252a07d9237ca41a7042d5c7af9b747fb4dad8..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/devtools/fixeol.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright 2010 Baptiste Lepilleur and The JsonCpp Authors
-# Distributed under MIT license, or public domain if desired and
-# recognized in your jurisdiction.
-# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-from __future__ import print_function
-import os.path
-import sys
-
-def fix_source_eol(path, is_dry_run = True, verbose = True, eol = '\n'):
-    """Makes sure that all sources have the specified eol sequence (default: unix)."""
-    if not os.path.isfile(path):
-        raise ValueError('Path "%s" is not a file' % path)
-    try:
-        f = open(path, 'rb')
-    except IOError as msg:
-        print("%s: I/O Error: %s" % (file, str(msg)), file=sys.stderr)
-        return False
-    try:
-        raw_lines = f.readlines()
-    finally:
-        f.close()
-    fixed_lines = [line.rstrip('\r\n') + eol for line in raw_lines]
-    if raw_lines != fixed_lines:
-        print('%s =>' % path, end=' ')
-        if not is_dry_run:
-            f = open(path, "wb")
-            try:
-                f.writelines(fixed_lines)
-            finally:
-                f.close()
-        if verbose:
-            print(is_dry_run and ' NEED FIX' or ' FIXED')
-    return True
-##    
-##    
-##
-##def _do_fix(is_dry_run = True):
-##    from waftools import antglob
-##    python_sources = antglob.glob('.',
-##        includes = '**/*.py **/wscript **/wscript_build',
-##        excludes = antglob.default_excludes + './waf.py',
-##        prune_dirs = antglob.prune_dirs + 'waf-* ./build')
-##    for path in python_sources:
-##        _fix_python_source(path, is_dry_run)
-##
-##    cpp_sources = antglob.glob('.',
-##        includes = '**/*.cpp **/*.h **/*.inl',
-##        prune_dirs = antglob.prune_dirs + 'waf-* ./build')
-##    for path in cpp_sources:
-##        _fix_source_eol(path, is_dry_run)
-##
-##
-##def dry_fix(context):
-##    _do_fix(is_dry_run = True)
-##
-##def fix(context):
-##    _do_fix(is_dry_run = False)
-##
-##def shutdown():
-##    pass
-##
-##def check(context):
-##    # Unit tests are run when "check" target is used
-##    ut = UnitTest.unit_test()
-##    ut.change_to_testfile_dir = True
-##    ut.want_to_see_test_output = True
-##    ut.want_to_see_test_error = True
-##    ut.run()
-##    ut.print_results()
diff --git a/3rdParty/jsoncpp/devtools/licenseupdater.py b/3rdParty/jsoncpp/devtools/licenseupdater.py
deleted file mode 100644
index 36bdb5c09b61c984087e41f33c6a9ec63aa0739d..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/devtools/licenseupdater.py
+++ /dev/null
@@ -1,94 +0,0 @@
-"""Updates the license text in source file.
-"""
-from __future__ import print_function
-
-# An existing license is found if the file starts with the string below,
-# and ends with the first blank line.
-LICENSE_BEGIN = "// Copyright "
-
-BRIEF_LICENSE = LICENSE_BEGIN + """2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-""".replace('\r\n','\n')
-
-def update_license(path, dry_run, show_diff):
-    """Update the license statement in the specified file.
-    Parameters:
-      path: path of the C++ source file to update.
-      dry_run: if True, just print the path of the file that would be updated,
-               but don't change it.
-      show_diff: if True, print the path of the file that would be modified,
-                 as well as the change made to the file. 
-    """
-    with open(path, 'rt') as fin:
-        original_text = fin.read().replace('\r\n','\n')
-        newline = fin.newlines and fin.newlines[0] or '\n'
-    if not original_text.startswith(LICENSE_BEGIN):
-        # No existing license found => prepend it
-        new_text = BRIEF_LICENSE + original_text
-    else:
-        license_end_index = original_text.index('\n\n') # search first blank line
-        new_text = BRIEF_LICENSE + original_text[license_end_index+2:]
-    if original_text != new_text:
-        if not dry_run:
-            with open(path, 'wb') as fout:
-                fout.write(new_text.replace('\n', newline))
-        print('Updated', path)
-        if show_diff:
-            import difflib
-            print('\n'.join(difflib.unified_diff(original_text.split('\n'),
-                                                   new_text.split('\n'))))
-        return True
-    return False
-
-def update_license_in_source_directories(source_dirs, dry_run, show_diff):
-    """Updates license text in C++ source files found in directory source_dirs.
-    Parameters:
-      source_dirs: list of directory to scan for C++ sources. Directories are
-                   scanned recursively.
-      dry_run: if True, just print the path of the file that would be updated,
-               but don't change it.
-      show_diff: if True, print the path of the file that would be modified,
-                 as well as the change made to the file. 
-    """
-    from devtools import antglob
-    prune_dirs = antglob.prune_dirs + 'scons-local* ./build* ./libs ./dist'
-    for source_dir in source_dirs:
-        cpp_sources = antglob.glob(source_dir,
-            includes = '''**/*.h **/*.cpp **/*.inl''',
-            prune_dirs = prune_dirs)
-        for source in cpp_sources:
-            update_license(source, dry_run, show_diff)
-
-def main():
-    usage = """%prog DIR [DIR2...]
-Updates license text in sources of the project in source files found
-in the directory specified on the command-line.
-
-Example of call:
-python devtools\licenseupdater.py include src -n --diff
-=> Show change that would be made to the sources.
-
-python devtools\licenseupdater.py include src
-=> Update license statement on all sources in directories include/ and src/.
-"""
-    from optparse import OptionParser
-    parser = OptionParser(usage=usage)
-    parser.allow_interspersed_args = False
-    parser.add_option('-n', '--dry-run', dest="dry_run", action='store_true', default=False,
-        help="""Only show what files are updated, do not update the files""")
-    parser.add_option('--diff', dest="show_diff", action='store_true', default=False,
-        help="""On update, show change made to the file.""")
-    parser.enable_interspersed_args()
-    options, args = parser.parse_args()
-    update_license_in_source_directories(args, options.dry_run, options.show_diff)
-    print('Done')
-
-if __name__ == '__main__':
-    import sys
-    import os.path
-    sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-    main()
-
diff --git a/3rdParty/jsoncpp/devtools/tarball.py b/3rdParty/jsoncpp/devtools/tarball.py
deleted file mode 100644
index 27a9b6f4975d27534b065192c69d9e444556aa67..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/devtools/tarball.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2010 Baptiste Lepilleur and The JsonCpp Authors
-# Distributed under MIT license, or public domain if desired and
-# recognized in your jurisdiction.
-# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-from contextlib import closing
-import os
-import tarfile
-
-TARGZ_DEFAULT_COMPRESSION_LEVEL = 9
-
-def make_tarball(tarball_path, sources, base_dir, prefix_dir=''):
-    """Parameters:
-    tarball_path: output path of the .tar.gz file
-    sources: list of sources to include in the tarball, relative to the current directory
-    base_dir: if a source file is in a sub-directory of base_dir, then base_dir is stripped
-        from path in the tarball.
-    prefix_dir: all files stored in the tarball be sub-directory of prefix_dir. Set to ''
-        to make them child of root.
-    """
-    base_dir = os.path.normpath(os.path.abspath(base_dir))
-    def archive_name(path):
-        """Makes path relative to base_dir."""
-        path = os.path.normpath(os.path.abspath(path))
-        common_path = os.path.commonprefix((base_dir, path))
-        archive_name = path[len(common_path):]
-        if os.path.isabs(archive_name):
-            archive_name = archive_name[1:]
-        return os.path.join(prefix_dir, archive_name)
-    def visit(tar, dirname, names):
-        for name in names:
-            path = os.path.join(dirname, name)
-            if os.path.isfile(path):
-                path_in_tar = archive_name(path)
-                tar.add(path, path_in_tar)
-    compression = TARGZ_DEFAULT_COMPRESSION_LEVEL
-    with closing(tarfile.TarFile.open(tarball_path, 'w:gz',
-            compresslevel=compression)) as tar:
-        for source in sources:
-            VF_SRC_DIR = source
-            if os.path.isdir(source):
-                for dirpath, dirnames, filenames in os.walk(VF_SRC_DIR):
-                    visit(tar, dirpath, filenames)
-            else:
-                path_in_tar = archive_name(VF_SRC_DIR)
-                tar.add(VF_SRC_DIR, path_in_tar)      # filename, arcname
-
-def decompress(tarball_path, base_dir):
-    """Decompress the gzipped tarball into directory base_dir.
-    """
-    with closing(tarfile.TarFile.open(tarball_path)) as tar:
-        tar.extractall(base_dir)
diff --git a/3rdParty/jsoncpp/doxybuild.py b/3rdParty/jsoncpp/doxybuild.py
deleted file mode 100644
index f18c9c0697ba989f7c749720dda1a2d00c4378e8..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/doxybuild.py
+++ /dev/null
@@ -1,189 +0,0 @@
-"""Script to generate doxygen documentation.
-"""
-from __future__ import print_function
-from __future__ import unicode_literals
-from devtools import tarball
-from contextlib import contextmanager
-import subprocess
-import traceback
-import re
-import os
-import sys
-import shutil
-
-@contextmanager
-def cd(newdir):
-    """
-    http://stackoverflow.com/questions/431684/how-do-i-cd-in-python
-    """
-    prevdir = os.getcwd()
-    os.chdir(newdir)
-    try:
-        yield
-    finally:
-        os.chdir(prevdir)
-
-def find_program(*filenames):
-    """find a program in folders path_lst, and sets env[var]
-    @param filenames: a list of possible names of the program to search for
-    @return: the full path of the filename if found, or '' if filename could not be found
-"""
-    paths = os.environ.get('PATH', '').split(os.pathsep)
-    suffixes = ('win32' in sys.platform) and '.exe .com .bat .cmd' or ''
-    for filename in filenames:
-        for name in [filename+ext for ext in suffixes.split(' ')]:
-            for directory in paths:
-                full_path = os.path.join(directory, name)
-                if os.path.isfile(full_path):
-                    return full_path
-    return ''
-
-def do_subst_in_file(targetfile, sourcefile, dict):
-    """Replace all instances of the keys of dict with their values.
-    For example, if dict is {'%VERSION%': '1.2345', '%BASE%': 'MyProg'},
-    then all instances of %VERSION% in the file will be replaced with 1.2345 etc.
-    """
-    with open(sourcefile, 'r') as f:
-        contents = f.read()
-    for (k,v) in list(dict.items()):
-        v = v.replace('\\','\\\\') 
-        contents = re.sub(k, v, contents)
-    with open(targetfile, 'w') as f:
-        f.write(contents)
-
-def getstatusoutput(cmd):
-    """cmd is a list.
-    """
-    try:
-        process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-        output, _ = process.communicate()
-        status = process.returncode
-    except:
-        status = -1
-        output = traceback.format_exc()
-    return status, output
-
-def run_cmd(cmd, silent=False):
-    """Raise exception on failure.
-    """
-    info = 'Running: %r in %r' %(' '.join(cmd), os.getcwd())
-    print(info)
-    sys.stdout.flush()
-    if silent:
-        status, output = getstatusoutput(cmd)
-    else:
-        status, output = subprocess.call(cmd), ''
-    if status:
-        msg = 'Error while %s ...\n\terror=%d, output="""%s"""' %(info, status, output)
-        raise Exception(msg)
-
-def assert_is_exe(path):
-    if not path:
-        raise Exception('path is empty.')
-    if not os.path.isfile(path):
-        raise Exception('%r is not a file.' %path)
-    if not os.access(path, os.X_OK):
-        raise Exception('%r is not executable by this user.' %path)
-
-def run_doxygen(doxygen_path, config_file, working_dir, is_silent):
-    assert_is_exe(doxygen_path)
-    config_file = os.path.abspath(config_file)
-    with cd(working_dir):
-        cmd = [doxygen_path, config_file]
-        run_cmd(cmd, is_silent)
-
-def build_doc(options,  make_release=False):
-    if make_release:
-        options.make_tarball = True
-        options.with_dot = True
-        options.with_html_help = True
-        options.with_uml_look = True
-        options.open = False
-        options.silent = True
-
-    version = open('version', 'rt').read().strip()
-    output_dir = 'dist/doxygen' # relative to doc/doxyfile location.
-    if not os.path.isdir(output_dir):
-        os.makedirs(output_dir)
-    top_dir = os.path.abspath('.')
-    html_output_dirname = 'jsoncpp-api-html-' + version
-    tarball_path = os.path.join('dist', html_output_dirname + '.tar.gz')
-    warning_log_path = os.path.join(output_dir, '../jsoncpp-doxygen-warning.log')
-    html_output_path = os.path.join(output_dir, html_output_dirname)
-    def yesno(bool):
-        return bool and 'YES' or 'NO'
-    subst_keys = {
-        '%JSONCPP_VERSION%': version,
-        '%DOC_TOPDIR%': '',
-        '%TOPDIR%': top_dir,
-        '%HTML_OUTPUT%': os.path.join('..', output_dir, html_output_dirname),
-        '%HAVE_DOT%': yesno(options.with_dot),
-        '%DOT_PATH%': os.path.split(options.dot_path)[0],
-        '%HTML_HELP%': yesno(options.with_html_help),
-        '%UML_LOOK%': yesno(options.with_uml_look),
-        '%WARNING_LOG_PATH%': os.path.join('..', warning_log_path)
-        }
-
-    if os.path.isdir(output_dir):
-        print('Deleting directory:', output_dir)
-        shutil.rmtree(output_dir)
-    if not os.path.isdir(output_dir):
-        os.makedirs(output_dir)
-
-    do_subst_in_file('doc/doxyfile', options.doxyfile_input_path, subst_keys)
-    run_doxygen(options.doxygen_path, 'doc/doxyfile', 'doc', is_silent=options.silent)
-    if not options.silent:
-        print(open(warning_log_path, 'r').read())
-    index_path = os.path.abspath(os.path.join('doc', subst_keys['%HTML_OUTPUT%'], 'index.html'))
-    print('Generated documentation can be found in:')
-    print(index_path)
-    if options.open:
-        import webbrowser
-        webbrowser.open('file://' + index_path)
-    if options.make_tarball:
-        print('Generating doc tarball to', tarball_path)
-        tarball_sources = [
-            output_dir,
-            'README.md',
-            'LICENSE',
-            'NEWS.txt',
-            'version'
-            ]
-        tarball_basedir = os.path.join(output_dir, html_output_dirname)
-        tarball.make_tarball(tarball_path, tarball_sources, tarball_basedir, html_output_dirname)
-    return tarball_path, html_output_dirname
-
-def main():
-    usage = """%prog
-    Generates doxygen documentation in build/doxygen.
-    Optionaly makes a tarball of the documentation to dist/.
-
-    Must be started in the project top directory.    
-    """
-    from optparse import OptionParser
-    parser = OptionParser(usage=usage)
-    parser.allow_interspersed_args = False
-    parser.add_option('--with-dot', dest="with_dot", action='store_true', default=False,
-        help="""Enable usage of DOT to generate collaboration diagram""")
-    parser.add_option('--dot', dest="dot_path", action='store', default=find_program('dot'),
-        help="""Path to GraphViz dot tool. Must be full qualified path. [Default: %default]""")
-    parser.add_option('--doxygen', dest="doxygen_path", action='store', default=find_program('doxygen'),
-        help="""Path to Doxygen tool. [Default: %default]""")
-    parser.add_option('--in', dest="doxyfile_input_path", action='store', default='doc/doxyfile.in',
-        help="""Path to doxygen inputs. [Default: %default]""")
-    parser.add_option('--with-html-help', dest="with_html_help", action='store_true', default=False,
-        help="""Enable generation of Microsoft HTML HELP""")
-    parser.add_option('--no-uml-look', dest="with_uml_look", action='store_false', default=True,
-        help="""Generates DOT graph without UML look [Default: False]""")
-    parser.add_option('--open', dest="open", action='store_true', default=False,
-        help="""Open the HTML index in the web browser after generation""")
-    parser.add_option('--tarball', dest="make_tarball", action='store_true', default=False,
-        help="""Generates a tarball of the documentation in dist/ directory""")
-    parser.add_option('-s', '--silent', dest="silent", action='store_true', default=False,
-        help="""Hides doxygen output""")
-    parser.enable_interspersed_args()
-    options, args = parser.parse_args()
-    build_doc(options)
-
-if __name__ == '__main__':
-    main()
diff --git a/3rdParty/jsoncpp/include/CMakeLists.txt b/3rdParty/jsoncpp/include/CMakeLists.txt
deleted file mode 100644
index cc866f173d736930233b331c964d3d0f5edf77e6..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-FILE(GLOB INCLUDE_FILES "json/*.h")
-INSTALL(FILES ${INCLUDE_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/json)
diff --git a/3rdParty/jsoncpp/include/json/allocator.h b/3rdParty/jsoncpp/include/json/allocator.h
deleted file mode 100644
index 9c7e573aef6a73a207123be14d563ac1043a8612..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/allocator.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef CPPTL_JSON_ALLOCATOR_H_INCLUDED
-#define CPPTL_JSON_ALLOCATOR_H_INCLUDED
-
-#include <cstring>
-#include <memory>
-
-#pragma pack(push, 8)
-
-namespace Json {
-template<typename T>
-class SecureAllocator {
-	public:
-		// Type definitions
-		using value_type      = T;
-		using pointer         = T*;
-		using const_pointer   = const T*;
-		using reference       = T&;
-		using const_reference = const T&;
-		using size_type       = std::size_t;
-		using difference_type = std::ptrdiff_t;
-
-		/**
-		 * Allocate memory for N items using the standard allocator.
-		 */
-		pointer allocate(size_type n) {
-			// allocate using "global operator new"
-			return static_cast<pointer>(::operator new(n * sizeof(T)));
-		}
-
-		/**
-		 * Release memory which was allocated for N items at pointer P.
-		 *
-		 * The memory block is filled with zeroes before being released.
-		 * The pointer argument is tagged as "volatile" to prevent the
-		 * compiler optimizing out this critical step.
-		 */
-		void deallocate(volatile pointer p, size_type n) {
-			std::memset(p, 0, n * sizeof(T));
-			// free using "global operator delete"
-			::operator delete(p);
-		}
-
-		/**
-		 * Construct an item in-place at pointer P.
-		 */
-		template<typename... Args>
-		void construct(pointer p, Args&&... args) {
-			// construct using "placement new" and "perfect forwarding"
-			::new (static_cast<void*>(p)) T(std::forward<Args>(args)...);
-		}
-
-		size_type max_size() const {
-			return size_t(-1) / sizeof(T);
-		}
-
-		pointer address( reference x ) const {
-			return std::addressof(x);
-		}
-
-		const_pointer address( const_reference x ) const {
-			return std::addressof(x);
-		}
-
-		/**
-		 * Destroy an item in-place at pointer P.
-		 */
-		void destroy(pointer p) {
-			// destroy using "explicit destructor"
-			p->~T();
-		}
-
-		// Boilerplate
-		SecureAllocator() {}
-		template<typename U> SecureAllocator(const SecureAllocator<U>&) {}
-		template<typename U> struct rebind { using other = SecureAllocator<U>; };
-};
-
-
-template<typename T, typename U>
-bool operator==(const SecureAllocator<T>&, const SecureAllocator<U>&) {
-	return true;
-}
-
-template<typename T, typename U>
-bool operator!=(const SecureAllocator<T>&, const SecureAllocator<U>&) {
-	return false;
-}
-
-} //namespace Json
-
-#pragma pack(pop)
-
-#endif // CPPTL_JSON_ALLOCATOR_H_INCLUDED
diff --git a/3rdParty/jsoncpp/include/json/assertions.h b/3rdParty/jsoncpp/include/json/assertions.h
deleted file mode 100644
index 1cca28d959bcfd3c8a9574af41e92eccd874ac9a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/assertions.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED
-#define CPPTL_JSON_ASSERTIONS_H_INCLUDED
-
-#include <stdlib.h>
-#include <sstream>
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "config.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-
-/** It should not be possible for a maliciously designed file to
- *  cause an abort() or seg-fault, so these macros are used only
- *  for pre-condition violations and internal logic errors.
- */
-#if JSON_USE_EXCEPTION
-
-// @todo <= add detail about condition in exception
-# define JSON_ASSERT(condition)                                                \
-  {if (!(condition)) {Json::throwLogicError( "assert json failed" );}}
-
-# define JSON_FAIL_MESSAGE(message)                                            \
-  {                                                                            \
-    JSONCPP_OSTRINGSTREAM oss; oss << message;                                    \
-    Json::throwLogicError(oss.str());                                          \
-    abort();                                                                   \
-  }
-
-#else // JSON_USE_EXCEPTION
-
-# define JSON_ASSERT(condition) assert(condition)
-
-// The call to assert() will show the failure message in debug builds. In
-// release builds we abort, for a core-dump or debugger.
-# define JSON_FAIL_MESSAGE(message)                                            \
-  {                                                                            \
-    JSONCPP_OSTRINGSTREAM oss; oss << message;                                    \
-    assert(false && oss.str().c_str());                                        \
-    abort();                                                                   \
-  }
-
-
-#endif
-
-#define JSON_ASSERT_MESSAGE(condition, message)                                \
-  if (!(condition)) {                                                          \
-    JSON_FAIL_MESSAGE(message);                                                \
-  }
-
-#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED
diff --git a/3rdParty/jsoncpp/include/json/autolink.h b/3rdParty/jsoncpp/include/json/autolink.h
deleted file mode 100644
index b2c0f0024fc83efb16e9fc4664ea3f2afe3e85bb..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/autolink.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef JSON_AUTOLINK_H_INCLUDED
-#define JSON_AUTOLINK_H_INCLUDED
-
-#include "config.h"
-
-#ifdef JSON_IN_CPPTL
-#include <cpptl/cpptl_autolink.h>
-#endif
-
-#if !defined(JSON_NO_AUTOLINK) && !defined(JSON_DLL_BUILD) &&                  \
-    !defined(JSON_IN_CPPTL)
-#define CPPTL_AUTOLINK_NAME "json"
-#undef CPPTL_AUTOLINK_DLL
-#ifdef JSON_DLL
-#define CPPTL_AUTOLINK_DLL
-#endif
-#include "autolink.h"
-#endif
-
-#endif // JSON_AUTOLINK_H_INCLUDED
diff --git a/3rdParty/jsoncpp/include/json/config.h b/3rdParty/jsoncpp/include/json/config.h
deleted file mode 100644
index c83e78a3f21515abeb02351653e66f2fd17ce461..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/config.h
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef JSON_CONFIG_H_INCLUDED
-#define JSON_CONFIG_H_INCLUDED
-#include <stddef.h>
-#include <string> //typedef String
-#include <stdint.h> //typedef int64_t, uint64_t
-
-/// If defined, indicates that json library is embedded in CppTL library.
-//# define JSON_IN_CPPTL 1
-
-/// If defined, indicates that json may leverage CppTL library
-//#  define JSON_USE_CPPTL 1
-/// If defined, indicates that cpptl vector based map should be used instead of
-/// std::map
-/// as Value container.
-//#  define JSON_USE_CPPTL_SMALLMAP 1
-
-// If non-zero, the library uses exceptions to report bad input instead of C
-// assertion macros. The default is to use exceptions.
-#ifndef JSON_USE_EXCEPTION
-#define JSON_USE_EXCEPTION 1
-#endif
-
-/// If defined, indicates that the source file is amalgated
-/// to prevent private header inclusion.
-/// Remarks: it is automatically defined in the generated amalgated header.
-// #define JSON_IS_AMALGAMATION
-
-#ifdef JSON_IN_CPPTL
-#include <cpptl/config.h>
-#ifndef JSON_USE_CPPTL
-#define JSON_USE_CPPTL 1
-#endif
-#endif
-
-#ifdef JSON_IN_CPPTL
-#define JSON_API CPPTL_API
-#elif defined(JSON_DLL_BUILD)
-#if defined(_MSC_VER) || defined(__MINGW32__)
-#define JSON_API __declspec(dllexport)
-#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
-#endif // if defined(_MSC_VER)
-#elif defined(JSON_DLL)
-#if defined(_MSC_VER) || defined(__MINGW32__)
-#define JSON_API __declspec(dllimport)
-#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
-#endif // if defined(_MSC_VER)
-#endif // ifdef JSON_IN_CPPTL
-#if !defined(JSON_API)
-#define JSON_API
-#endif
-
-// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for
-// integer
-// Storages, and 64 bits integer support is disabled.
-// #define JSON_NO_INT64 1
-
-#if defined(_MSC_VER) // MSVC
-#  if _MSC_VER <= 1200 // MSVC 6
-    // Microsoft Visual Studio 6 only support conversion from __int64 to double
-    // (no conversion from unsigned __int64).
-#    define JSON_USE_INT64_DOUBLE_CONVERSION 1
-    // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255'
-    // characters in the debug information)
-    // All projects I've ever seen with VS6 were using this globally (not bothering
-    // with pragma push/pop).
-#    pragma warning(disable : 4786)
-#  endif // MSVC 6
-
-#  if _MSC_VER >= 1500 // MSVC 2008
-    /// Indicates that the following function is deprecated.
-#    define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
-#  endif
-
-#endif // defined(_MSC_VER)
-
-// In c++11 the override keyword allows you to explicity define that a function
-// is intended to override the base-class version.  This makes the code more
-// managable and fixes a set of common hard-to-find bugs.
-#if __cplusplus >= 201103L
-# define JSONCPP_OVERRIDE override
-# define JSONCPP_NOEXCEPT noexcept
-#elif defined(_MSC_VER) && _MSC_VER > 1600 && _MSC_VER < 1900
-# define JSONCPP_OVERRIDE override
-# define JSONCPP_NOEXCEPT throw()
-#elif defined(_MSC_VER) && _MSC_VER >= 1900
-# define JSONCPP_OVERRIDE override
-# define JSONCPP_NOEXCEPT noexcept
-#else
-# define JSONCPP_OVERRIDE
-# define JSONCPP_NOEXCEPT throw()
-#endif
-
-#ifndef JSON_HAS_RVALUE_REFERENCES
-
-#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010
-#define JSON_HAS_RVALUE_REFERENCES 1
-#endif // MSVC >= 2010
-
-#ifdef __clang__
-#if __has_feature(cxx_rvalue_references)
-#define JSON_HAS_RVALUE_REFERENCES 1
-#endif  // has_feature
-
-#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc)
-#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)
-#define JSON_HAS_RVALUE_REFERENCES 1
-#endif  // GXX_EXPERIMENTAL
-
-#endif // __clang__ || __GNUC__
-
-#endif // not defined JSON_HAS_RVALUE_REFERENCES
-
-#ifndef JSON_HAS_RVALUE_REFERENCES
-#define JSON_HAS_RVALUE_REFERENCES 0
-#endif
-
-#ifdef __clang__
-#  if __has_extension(attribute_deprecated_with_message)
-#    define JSONCPP_DEPRECATED(message)  __attribute__ ((deprecated(message)))
-#  endif
-#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc)
-#  if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
-#    define JSONCPP_DEPRECATED(message)  __attribute__ ((deprecated(message)))
-#  elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
-#    define JSONCPP_DEPRECATED(message)  __attribute__((__deprecated__))
-#  endif  // GNUC version
-#endif // __clang__ || __GNUC__
-
-#if !defined(JSONCPP_DEPRECATED)
-#define JSONCPP_DEPRECATED(message)
-#endif // if !defined(JSONCPP_DEPRECATED)
-
-#if __GNUC__ >= 6
-#  define JSON_USE_INT64_DOUBLE_CONVERSION 1
-#endif
-
-#if !defined(JSON_IS_AMALGAMATION)
-
-# include "version.h"
-
-# if JSONCPP_USING_SECURE_MEMORY
-#  include "allocator.h" //typedef Allocator
-# endif
-
-#endif // if !defined(JSON_IS_AMALGAMATION)
-
-namespace Json {
-typedef int Int;
-typedef unsigned int UInt;
-#if defined(JSON_NO_INT64)
-typedef int LargestInt;
-typedef unsigned int LargestUInt;
-#undef JSON_HAS_INT64
-#else                 // if defined(JSON_NO_INT64)
-// For Microsoft Visual use specific types as long long is not supported
-#if defined(_MSC_VER) // Microsoft Visual Studio
-typedef __int64 Int64;
-typedef unsigned __int64 UInt64;
-#else                 // if defined(_MSC_VER) // Other platforms, use long long
-typedef int64_t Int64;
-typedef uint64_t UInt64;
-#endif // if defined(_MSC_VER)
-typedef Int64 LargestInt;
-typedef UInt64 LargestUInt;
-#define JSON_HAS_INT64
-#endif // if defined(JSON_NO_INT64)
-#if JSONCPP_USING_SECURE_MEMORY
-#define JSONCPP_STRING        std::basic_string<char, std::char_traits<char>, Json::SecureAllocator<char> >
-#define JSONCPP_OSTRINGSTREAM std::basic_ostringstream<char, std::char_traits<char>, Json::SecureAllocator<char> >
-#define JSONCPP_OSTREAM       std::basic_ostream<char, std::char_traits<char>>
-#define JSONCPP_ISTRINGSTREAM std::basic_istringstream<char, std::char_traits<char>, Json::SecureAllocator<char> >
-#define JSONCPP_ISTREAM       std::istream
-#else
-#define JSONCPP_STRING        std::string
-#define JSONCPP_OSTRINGSTREAM std::ostringstream
-#define JSONCPP_OSTREAM       std::ostream
-#define JSONCPP_ISTRINGSTREAM std::istringstream
-#define JSONCPP_ISTREAM       std::istream
-#endif // if JSONCPP_USING_SECURE_MEMORY
-} // end namespace Json
-
-#endif // JSON_CONFIG_H_INCLUDED
diff --git a/3rdParty/jsoncpp/include/json/features.h b/3rdParty/jsoncpp/include/json/features.h
deleted file mode 100644
index 72eb6a8a01f8194a1d862f4979d219dcf62d93d1..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/features.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef CPPTL_JSON_FEATURES_H_INCLUDED
-#define CPPTL_JSON_FEATURES_H_INCLUDED
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "forwards.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-
-#pragma pack(push, 8)
-
-namespace Json {
-
-/** \brief Configuration passed to reader and writer.
- * This configuration object can be used to force the Reader or Writer
- * to behave in a standard conforming way.
- */
-class JSON_API Features {
-public:
-  /** \brief A configuration that allows all features and assumes all strings
-   * are UTF-8.
-   * - C & C++ comments are allowed
-   * - Root object can be any JSON value
-   * - Assumes Value strings are encoded in UTF-8
-   */
-  static Features all();
-
-  /** \brief A configuration that is strictly compatible with the JSON
-   * specification.
-   * - Comments are forbidden.
-   * - Root object must be either an array or an object value.
-   * - Assumes Value strings are encoded in UTF-8
-   */
-  static Features strictMode();
-
-  /** \brief Initialize the configuration like JsonConfig::allFeatures;
-   */
-  Features();
-
-  /// \c true if comments are allowed. Default: \c true.
-  bool allowComments_;
-
-  /// \c true if root must be either an array or an object value. Default: \c
-  /// false.
-  bool strictRoot_;
-
-  /// \c true if dropped null placeholders are allowed. Default: \c false.
-  bool allowDroppedNullPlaceholders_;
-
-  /// \c true if numeric object key are allowed. Default: \c false.
-  bool allowNumericKeys_;
-};
-
-} // namespace Json
-
-#pragma pack(pop)
-
-#endif // CPPTL_JSON_FEATURES_H_INCLUDED
diff --git a/3rdParty/jsoncpp/include/json/forwards.h b/3rdParty/jsoncpp/include/json/forwards.h
deleted file mode 100644
index 70bbe191c9d1cb286742f4fefb618f60296cf4df..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/forwards.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef JSON_FORWARDS_H_INCLUDED
-#define JSON_FORWARDS_H_INCLUDED
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "config.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-
-namespace Json {
-
-// writer.h
-class FastWriter;
-class StyledWriter;
-
-// reader.h
-class Reader;
-
-// features.h
-class Features;
-
-// value.h
-typedef unsigned int ArrayIndex;
-class StaticString;
-class Path;
-class PathArgument;
-class Value;
-class ValueIteratorBase;
-class ValueIterator;
-class ValueConstIterator;
-
-} // namespace Json
-
-#endif // JSON_FORWARDS_H_INCLUDED
diff --git a/3rdParty/jsoncpp/include/json/json.h b/3rdParty/jsoncpp/include/json/json.h
deleted file mode 100644
index 3d2798a6c71ca46efbaeec512e2ca470c0d54f71..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/json.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef JSON_JSON_H_INCLUDED
-#define JSON_JSON_H_INCLUDED
-
-#include "autolink.h"
-#include "value.h"
-#include "reader.h"
-#include "writer.h"
-#include "features.h"
-
-#endif // JSON_JSON_H_INCLUDED
diff --git a/3rdParty/jsoncpp/include/json/reader.h b/3rdParty/jsoncpp/include/json/reader.h
deleted file mode 100644
index 82859fda1af16019330c2ebfbe7d52723fb8061d..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/reader.h
+++ /dev/null
@@ -1,411 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef CPPTL_JSON_READER_H_INCLUDED
-#define CPPTL_JSON_READER_H_INCLUDED
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "features.h"
-#include "value.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <deque>
-#include <iosfwd>
-#include <stack>
-#include <string>
-#include <istream>
-
-// Disable warning C4251: <data member>: <type> needs to have dll-interface to
-// be used by...
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(push)
-#pragma warning(disable : 4251)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-#pragma pack(push, 8)
-
-namespace Json {
-
-/** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a
- *Value.
- *
- * \deprecated Use CharReader and CharReaderBuilder.
- */
-class JSONCPP_DEPRECATED("Use CharReader and CharReaderBuilder instead") JSON_API Reader {
-public:
-  typedef char Char;
-  typedef const Char* Location;
-
-  /** \brief An error tagged with where in the JSON text it was encountered.
-   *
-   * The offsets give the [start, limit) range of bytes within the text. Note
-   * that this is bytes, not codepoints.
-   *
-   */
-  struct StructuredError {
-    ptrdiff_t offset_start;
-    ptrdiff_t offset_limit;
-    JSONCPP_STRING message;
-  };
-
-  /** \brief Constructs a Reader allowing all features
-   * for parsing.
-   */
-  Reader();
-
-  /** \brief Constructs a Reader allowing the specified feature set
-   * for parsing.
-   */
-  Reader(const Features& features);
-
-  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
-   * document.
-   * \param document UTF-8 encoded string containing the document to read.
-   * \param root [out] Contains the root value of the document if it was
-   *             successfully parsed.
-   * \param collectComments \c true to collect comment and allow writing them
-   * back during
-   *                        serialization, \c false to discard comments.
-   *                        This parameter is ignored if
-   * Features::allowComments_
-   *                        is \c false.
-   * \return \c true if the document was successfully parsed, \c false if an
-   * error occurred.
-   */
-  bool
-  parse(const std::string& document, Value& root, bool collectComments = true);
-
-  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
-   document.
-   * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the
-   document to read.
-   * \param endDoc Pointer on the end of the UTF-8 encoded string of the
-   document to read.
-   *               Must be >= beginDoc.
-   * \param root [out] Contains the root value of the document if it was
-   *             successfully parsed.
-   * \param collectComments \c true to collect comment and allow writing them
-   back during
-   *                        serialization, \c false to discard comments.
-   *                        This parameter is ignored if
-   Features::allowComments_
-   *                        is \c false.
-   * \return \c true if the document was successfully parsed, \c false if an
-   error occurred.
-   */
-  bool parse(const char* beginDoc,
-             const char* endDoc,
-             Value& root,
-             bool collectComments = true);
-
-  /// \brief Parse from input stream.
-  /// \see Json::operator>>(std::istream&, Json::Value&).
-  bool parse(JSONCPP_ISTREAM& is, Value& root, bool collectComments = true);
-
-  /** \brief Returns a user friendly string that list errors in the parsed
-   * document.
-   * \return Formatted error message with the list of errors with their location
-   * in
-   *         the parsed document. An empty string is returned if no error
-   * occurred
-   *         during parsing.
-   * \deprecated Use getFormattedErrorMessages() instead (typo fix).
-   */
-  JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.")
-  JSONCPP_STRING getFormatedErrorMessages() const;
-
-  /** \brief Returns a user friendly string that list errors in the parsed
-   * document.
-   * \return Formatted error message with the list of errors with their location
-   * in
-   *         the parsed document. An empty string is returned if no error
-   * occurred
-   *         during parsing.
-   */
-  JSONCPP_STRING getFormattedErrorMessages() const;
-
-  /** \brief Returns a vector of structured erros encounted while parsing.
-   * \return A (possibly empty) vector of StructuredError objects. Currently
-   *         only one error can be returned, but the caller should tolerate
-   * multiple
-   *         errors.  This can occur if the parser recovers from a non-fatal
-   *         parse error and then encounters additional errors.
-   */
-  std::vector<StructuredError> getStructuredErrors() const;
-
-  /** \brief Add a semantic error message.
-   * \param value JSON Value location associated with the error
-   * \param message The error message.
-   * \return \c true if the error was successfully added, \c false if the
-   * Value offset exceeds the document size.
-   */
-  bool pushError(const Value& value, const JSONCPP_STRING& message);
-
-  /** \brief Add a semantic error message with extra context.
-   * \param value JSON Value location associated with the error
-   * \param message The error message.
-   * \param extra Additional JSON Value location to contextualize the error
-   * \return \c true if the error was successfully added, \c false if either
-   * Value offset exceeds the document size.
-   */
-  bool pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra);
-
-  /** \brief Return whether there are any errors.
-   * \return \c true if there are no errors to report \c false if
-   * errors have occurred.
-   */
-  bool good() const;
-
-private:
-  enum TokenType {
-    tokenEndOfStream = 0,
-    tokenObjectBegin,
-    tokenObjectEnd,
-    tokenArrayBegin,
-    tokenArrayEnd,
-    tokenString,
-    tokenNumber,
-    tokenTrue,
-    tokenFalse,
-    tokenNull,
-    tokenArraySeparator,
-    tokenMemberSeparator,
-    tokenComment,
-    tokenError
-  };
-
-  class Token {
-  public:
-    TokenType type_;
-    Location start_;
-    Location end_;
-  };
-
-  class ErrorInfo {
-  public:
-    Token token_;
-    JSONCPP_STRING message_;
-    Location extra_;
-  };
-
-  typedef std::deque<ErrorInfo> Errors;
-
-  bool readToken(Token& token);
-  void skipSpaces();
-  bool match(Location pattern, int patternLength);
-  bool readComment();
-  bool readCStyleComment();
-  bool readCppStyleComment();
-  bool readString();
-  void readNumber();
-  bool readValue();
-  bool readObject(Token& token);
-  bool readArray(Token& token);
-  bool decodeNumber(Token& token);
-  bool decodeNumber(Token& token, Value& decoded);
-  bool decodeString(Token& token);
-  bool decodeString(Token& token, JSONCPP_STRING& decoded);
-  bool decodeDouble(Token& token);
-  bool decodeDouble(Token& token, Value& decoded);
-  bool decodeUnicodeCodePoint(Token& token,
-                              Location& current,
-                              Location end,
-                              unsigned int& unicode);
-  bool decodeUnicodeEscapeSequence(Token& token,
-                                   Location& current,
-                                   Location end,
-                                   unsigned int& unicode);
-  bool addError(const JSONCPP_STRING& message, Token& token, Location extra = 0);
-  bool recoverFromError(TokenType skipUntilToken);
-  bool addErrorAndRecover(const JSONCPP_STRING& message,
-                          Token& token,
-                          TokenType skipUntilToken);
-  void skipUntilSpace();
-  Value& currentValue();
-  Char getNextChar();
-  void
-  getLocationLineAndColumn(Location location, int& line, int& column) const;
-  JSONCPP_STRING getLocationLineAndColumn(Location location) const;
-  void addComment(Location begin, Location end, CommentPlacement placement);
-  void skipCommentTokens(Token& token);
-
-  static bool containsNewLine(Location begin, Location end);
-  static JSONCPP_STRING normalizeEOL(Location begin, Location end);
-
-  typedef std::stack<Value*> Nodes;
-  Nodes nodes_;
-  Errors errors_;
-  JSONCPP_STRING document_;
-  Location begin_;
-  Location end_;
-  Location current_;
-  Location lastValueEnd_;
-  Value* lastValue_;
-  JSONCPP_STRING commentsBefore_;
-  Features features_;
-  bool collectComments_;
-};  // Reader
-
-/** Interface for reading JSON from a char array.
- */
-class JSON_API CharReader {
-public:
-  virtual ~CharReader() {}
-  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
-   document.
-   * The document must be a UTF-8 encoded string containing the document to read.
-   *
-   * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the
-   document to read.
-   * \param endDoc Pointer on the end of the UTF-8 encoded string of the
-   document to read.
-   *        Must be >= beginDoc.
-   * \param root [out] Contains the root value of the document if it was
-   *             successfully parsed.
-   * \param errs [out] Formatted error messages (if not NULL)
-   *        a user friendly string that lists errors in the parsed
-   * document.
-   * \return \c true if the document was successfully parsed, \c false if an
-   error occurred.
-   */
-  virtual bool parse(
-      char const* beginDoc, char const* endDoc,
-      Value* root, JSONCPP_STRING* errs) = 0;
-
-  class JSON_API Factory {
-  public:
-    virtual ~Factory() {}
-    /** \brief Allocate a CharReader via operator new().
-     * \throw std::exception if something goes wrong (e.g. invalid settings)
-     */
-    virtual CharReader* newCharReader() const = 0;
-  };  // Factory
-};  // CharReader
-
-/** \brief Build a CharReader implementation.
-
-Usage:
-\code
-  using namespace Json;
-  CharReaderBuilder builder;
-  builder["collectComments"] = false;
-  Value value;
-  JSONCPP_STRING errs;
-  bool ok = parseFromStream(builder, std::cin, &value, &errs);
-\endcode
-*/
-class JSON_API CharReaderBuilder : public CharReader::Factory {
-public:
-  // Note: We use a Json::Value so that we can add data-members to this class
-  // without a major version bump.
-  /** Configuration of this builder.
-    These are case-sensitive.
-    Available settings (case-sensitive):
-    - `"collectComments": false or true`
-      - true to collect comment and allow writing them
-        back during serialization, false to discard comments.
-        This parameter is ignored if allowComments is false.
-    - `"allowComments": false or true`
-      - true if comments are allowed.
-    - `"strictRoot": false or true`
-      - true if root must be either an array or an object value
-    - `"allowDroppedNullPlaceholders": false or true`
-      - true if dropped null placeholders are allowed. (See StreamWriterBuilder.)
-    - `"allowNumericKeys": false or true`
-      - true if numeric object keys are allowed.
-    - `"allowSingleQuotes": false or true`
-      - true if '' are allowed for strings (both keys and values)
-    - `"stackLimit": integer`
-      - Exceeding stackLimit (recursive depth of `readValue()`) will
-        cause an exception.
-      - This is a security issue (seg-faults caused by deeply nested JSON),
-        so the default is low.
-    - `"failIfExtra": false or true`
-      - If true, `parse()` returns false when extra non-whitespace trails
-        the JSON value in the input string.
-    - `"rejectDupKeys": false or true`
-      - If true, `parse()` returns false when a key is duplicated within an object.
-    - `"allowSpecialFloats": false or true`
-      - If true, special float values (NaNs and infinities) are allowed 
-        and their values are lossfree restorable.
-
-    You can examine 'settings_` yourself
-    to see the defaults. You can also write and read them just like any
-    JSON Value.
-    \sa setDefaults()
-    */
-  Json::Value settings_;
-
-  CharReaderBuilder();
-  ~CharReaderBuilder() JSONCPP_OVERRIDE;
-
-  CharReader* newCharReader() const JSONCPP_OVERRIDE;
-
-  /** \return true if 'settings' are legal and consistent;
-   *   otherwise, indicate bad settings via 'invalid'.
-   */
-  bool validate(Json::Value* invalid) const;
-
-  /** A simple way to update a specific setting.
-   */
-  Value& operator[](JSONCPP_STRING key);
-
-  /** Called by ctor, but you can use this to reset settings_.
-   * \pre 'settings' != NULL (but Json::null is fine)
-   * \remark Defaults:
-   * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults
-   */
-  static void setDefaults(Json::Value* settings);
-  /** Same as old Features::strictMode().
-   * \pre 'settings' != NULL (but Json::null is fine)
-   * \remark Defaults:
-   * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode
-   */
-  static void strictMode(Json::Value* settings);
-};
-
-/** Consume entire stream and use its begin/end.
-  * Someday we might have a real StreamReader, but for now this
-  * is convenient.
-  */
-bool JSON_API parseFromStream(
-    CharReader::Factory const&,
-    JSONCPP_ISTREAM&,
-    Value* root, std::string* errs);
-
-/** \brief Read from 'sin' into 'root'.
-
- Always keep comments from the input JSON.
-
- This can be used to read a file into a particular sub-object.
- For example:
- \code
- Json::Value root;
- cin >> root["dir"]["file"];
- cout << root;
- \endcode
- Result:
- \verbatim
- {
- "dir": {
-     "file": {
-     // The input stream JSON would be nested here.
-     }
- }
- }
- \endverbatim
- \throw std::exception on parse error.
- \see Json::operator<<()
-*/
-JSON_API JSONCPP_ISTREAM& operator>>(JSONCPP_ISTREAM&, Value&);
-
-} // namespace Json
-
-#pragma pack(pop)
-
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(pop)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-#endif // CPPTL_JSON_READER_H_INCLUDED
diff --git a/3rdParty/jsoncpp/include/json/value.h b/3rdParty/jsoncpp/include/json/value.h
deleted file mode 100644
index 2e533142f88d1fb07893a33fedf4355d49fc197a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/value.h
+++ /dev/null
@@ -1,888 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef CPPTL_JSON_H_INCLUDED
-#define CPPTL_JSON_H_INCLUDED
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "forwards.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <string>
-#include <vector>
-#include <exception>
-
-#ifndef JSON_USE_CPPTL_SMALLMAP
-#include <map>
-#else
-#include <cpptl/smallmap.h>
-#endif
-#ifdef JSON_USE_CPPTL
-#include <cpptl/forwards.h>
-#endif
-
-//Conditional NORETURN attribute on the throw functions would:
-// a) suppress false positives from static code analysis
-// b) possibly improve optimization opportunities.
-#if !defined(JSONCPP_NORETURN)
-#  if defined(_MSC_VER)
-#    define JSONCPP_NORETURN __declspec(noreturn)
-#  elif defined(__GNUC__)
-#    define JSONCPP_NORETURN __attribute__ ((__noreturn__))
-#  else
-#    define JSONCPP_NORETURN
-#  endif
-#endif
-
-// Disable warning C4251: <data member>: <type> needs to have dll-interface to
-// be used by...
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(push)
-#pragma warning(disable : 4251)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-#pragma pack(push, 8)
-
-/** \brief JSON (JavaScript Object Notation).
- */
-namespace Json {
-
-/** Base class for all exceptions we throw.
- *
- * We use nothing but these internally. Of course, STL can throw others.
- */
-class JSON_API Exception : public std::exception {
-public:
-  Exception(JSONCPP_STRING const& msg);
-  ~Exception() JSONCPP_NOEXCEPT JSONCPP_OVERRIDE;
-  char const* what() const JSONCPP_NOEXCEPT JSONCPP_OVERRIDE;
-protected:
-  JSONCPP_STRING msg_;
-};
-
-/** Exceptions which the user cannot easily avoid.
- *
- * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input
- *
- * \remark derived from Json::Exception
- */
-class JSON_API RuntimeError : public Exception {
-public:
-  RuntimeError(JSONCPP_STRING const& msg);
-};
-
-/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros.
- *
- * These are precondition-violations (user bugs) and internal errors (our bugs).
- *
- * \remark derived from Json::Exception
- */
-class JSON_API LogicError : public Exception {
-public:
-  LogicError(JSONCPP_STRING const& msg);
-};
-
-/// used internally
-JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg);
-/// used internally
-JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg);
-
-/** \brief Type of the value held by a Value object.
- */
-enum ValueType {
-  nullValue = 0, ///< 'null' value
-  intValue,      ///< signed integer value
-  uintValue,     ///< unsigned integer value
-  realValue,     ///< double value
-  stringValue,   ///< UTF-8 string value
-  booleanValue,  ///< bool value
-  arrayValue,    ///< array value (ordered list)
-  objectValue    ///< object value (collection of name/value pairs).
-};
-
-enum CommentPlacement {
-  commentBefore = 0,      ///< a comment placed on the line before a value
-  commentAfterOnSameLine, ///< a comment just after a value on the same line
-  commentAfter, ///< a comment on the line after a value (only make sense for
-  /// root value)
-  numberOfCommentPlacement
-};
-
-//# ifdef JSON_USE_CPPTL
-//   typedef CppTL::AnyEnumerator<const char *> EnumMemberNames;
-//   typedef CppTL::AnyEnumerator<const Value &> EnumValues;
-//# endif
-
-/** \brief Lightweight wrapper to tag static string.
- *
- * Value constructor and objectValue member assignement takes advantage of the
- * StaticString and avoid the cost of string duplication when storing the
- * string or the member name.
- *
- * Example of usage:
- * \code
- * Json::Value aValue( StaticString("some text") );
- * Json::Value object;
- * static const StaticString code("code");
- * object[code] = 1234;
- * \endcode
- */
-class JSON_API StaticString {
-public:
-  explicit StaticString(const char* czstring) : c_str_(czstring) {}
-
-  operator const char*() const { return c_str_; }
-
-  const char* c_str() const { return c_str_; }
-
-private:
-  const char* c_str_;
-};
-
-/** \brief Represents a <a HREF="http://www.json.org">JSON</a> value.
- *
- * This class is a discriminated union wrapper that can represents a:
- * - signed integer [range: Value::minInt - Value::maxInt]
- * - unsigned integer (range: 0 - Value::maxUInt)
- * - double
- * - UTF-8 string
- * - boolean
- * - 'null'
- * - an ordered list of Value
- * - collection of name/value pairs (javascript object)
- *
- * The type of the held value is represented by a #ValueType and
- * can be obtained using type().
- *
- * Values of an #objectValue or #arrayValue can be accessed using operator[]()
- * methods.
- * Non-const methods will automatically create the a #nullValue element
- * if it does not exist.
- * The sequence of an #arrayValue will be automatically resized and initialized
- * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue.
- *
- * The get() methods can be used to obtain default value in the case the
- * required element does not exist.
- *
- * It is possible to iterate over the list of a #objectValue values using
- * the getMemberNames() method.
- *
- * \note #Value string-length fit in size_t, but keys must be < 2^30.
- * (The reason is an implementation detail.) A #CharReader will raise an
- * exception if a bound is exceeded to avoid security holes in your app,
- * but the Value API does *not* check bounds. That is the responsibility
- * of the caller.
- */
-class JSON_API Value {
-  friend class ValueIteratorBase;
-public:
-  typedef std::vector<JSONCPP_STRING> Members;
-  typedef ValueIterator iterator;
-  typedef ValueConstIterator const_iterator;
-  typedef Json::UInt UInt;
-  typedef Json::Int Int;
-#if defined(JSON_HAS_INT64)
-  typedef Json::UInt64 UInt64;
-  typedef Json::Int64 Int64;
-#endif // defined(JSON_HAS_INT64)
-  typedef Json::LargestInt LargestInt;
-  typedef Json::LargestUInt LargestUInt;
-  typedef Json::ArrayIndex ArrayIndex;
-
-  // Required for boost integration, e. g. BOOST_TEST
-  typedef std::string value_type;
-
-  static const Value& null;  ///< We regret this reference to a global instance; prefer the simpler Value().
-  static const Value& nullRef;  ///< just a kludge for binary-compatibility; same as null
-  static Value const& nullSingleton(); ///< Prefer this to null or nullRef.
-
-  /// Minimum signed integer value that can be stored in a Json::Value.
-  static const LargestInt minLargestInt;
-  /// Maximum signed integer value that can be stored in a Json::Value.
-  static const LargestInt maxLargestInt;
-  /// Maximum unsigned integer value that can be stored in a Json::Value.
-  static const LargestUInt maxLargestUInt;
-
-  /// Minimum signed int value that can be stored in a Json::Value.
-  static const Int minInt;
-  /// Maximum signed int value that can be stored in a Json::Value.
-  static const Int maxInt;
-  /// Maximum unsigned int value that can be stored in a Json::Value.
-  static const UInt maxUInt;
-
-#if defined(JSON_HAS_INT64)
-  /// Minimum signed 64 bits int value that can be stored in a Json::Value.
-  static const Int64 minInt64;
-  /// Maximum signed 64 bits int value that can be stored in a Json::Value.
-  static const Int64 maxInt64;
-  /// Maximum unsigned 64 bits int value that can be stored in a Json::Value.
-  static const UInt64 maxUInt64;
-#endif // defined(JSON_HAS_INT64)
-
-private:
-#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
-  class CZString {
-  public:
-    enum DuplicationPolicy {
-      noDuplication = 0,
-      duplicate,
-      duplicateOnCopy
-    };
-    CZString(ArrayIndex index);
-    CZString(char const* str, unsigned length, DuplicationPolicy allocate);
-    CZString(CZString const& other);
-#if JSON_HAS_RVALUE_REFERENCES
-    CZString(CZString&& other);
-#endif
-    ~CZString();
-    CZString& operator=(const CZString& other);
-
-#if JSON_HAS_RVALUE_REFERENCES
-    CZString& operator=(CZString&& other);
-#endif
-
-    bool operator<(CZString const& other) const;
-    bool operator==(CZString const& other) const;
-    ArrayIndex index() const;
-    //const char* c_str() const; ///< \deprecated
-    char const* data() const;
-    unsigned length() const;
-    bool isStaticString() const;
-
-  private:
-    void swap(CZString& other);
-
-    struct StringStorage {
-      unsigned policy_: 2;
-      unsigned length_: 30; // 1GB max
-    };
-
-    char const* cstr_;  // actually, a prefixed string, unless policy is noDup
-    union {
-      ArrayIndex index_;
-      StringStorage storage_;
-    };
-  };
-
-public:
-#ifndef JSON_USE_CPPTL_SMALLMAP
-  typedef std::map<CZString, Value> ObjectValues;
-#else
-  typedef CppTL::SmallMap<CZString, Value> ObjectValues;
-#endif // ifndef JSON_USE_CPPTL_SMALLMAP
-#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
-
-public:
-  /** \brief Create a default Value of the given type.
-
-    This is a very useful constructor.
-    To create an empty array, pass arrayValue.
-    To create an empty object, pass objectValue.
-    Another Value can then be set to this one by assignment.
-This is useful since clear() and resize() will not alter types.
-
-    Examples:
-\code
-Json::Value null_value; // null
-Json::Value arr_value(Json::arrayValue); // []
-Json::Value obj_value(Json::objectValue); // {}
-\endcode
-  */
-  Value(ValueType type = nullValue);
-  Value(Int value);
-  Value(UInt value);
-#if defined(JSON_HAS_INT64)
-  Value(Int64 value);
-  Value(UInt64 value);
-#endif // if defined(JSON_HAS_INT64)
-  Value(double value);
-  Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.)
-  Value(const char* begin, const char* end); ///< Copy all, incl zeroes.
-  /** \brief Constructs a value from a static string.
-
-   * Like other value string constructor but do not duplicate the string for
-   * internal storage. The given string must remain alive after the call to this
-   * constructor.
-   * \note This works only for null-terminated strings. (We cannot change the
-   *   size of this class, so we have nowhere to store the length,
-   *   which might be computed later for various operations.)
-   *
-   * Example of usage:
-   * \code
-   * static StaticString foo("some text");
-   * Json::Value aValue(foo);
-   * \endcode
-   */
-  Value(const StaticString& value);
-  Value(const JSONCPP_STRING& value); ///< Copy data() til size(). Embedded zeroes too.
-#ifdef JSON_USE_CPPTL
-  Value(const CppTL::ConstString& value);
-#endif
-  Value(bool value);
-  /// Deep copy.
-  Value(const Value& other);
-#if JSON_HAS_RVALUE_REFERENCES
-  /// Move constructor
-  Value(Value&& other);
-#endif
-  ~Value();
-
-  /// Deep copy, then swap(other).
-  /// \note Over-write existing comments. To preserve comments, use #swapPayload().
-  Value& operator=(Value other);
-
-  /// Swap everything.
-  void swap(Value& other);
-  /// Swap values but leave comments and source offsets in place.
-  void swapPayload(Value& other);
-
-  /// copy everything.
-  void copy(const Value& other);
-  /// copy values but leave comments and source offsets in place.
-  void copyPayload(const Value& other);
-
-  ValueType type() const;
-
-  /// Compare payload only, not comments etc.
-  bool operator<(const Value& other) const;
-  bool operator<=(const Value& other) const;
-  bool operator>=(const Value& other) const;
-  bool operator>(const Value& other) const;
-  bool operator==(const Value& other) const;
-  bool operator!=(const Value& other) const;
-  int compare(const Value& other) const;
-
-  const char* asCString() const; ///< Embedded zeroes could cause you trouble!
-#if JSONCPP_USING_SECURE_MEMORY
-  unsigned getCStringLength() const; //Allows you to understand the length of the CString
-#endif
-  JSONCPP_STRING asString() const; ///< Embedded zeroes are possible.
-  /** Get raw char* of string-value.
-   *  \return false if !string. (Seg-fault if str or end are NULL.)
-   */
-  bool getString(
-      char const** begin, char const** end) const;
-#ifdef JSON_USE_CPPTL
-  CppTL::ConstString asConstString() const;
-#endif
-  Int asInt() const;
-  UInt asUInt() const;
-#if defined(JSON_HAS_INT64)
-  Int64 asInt64() const;
-  UInt64 asUInt64() const;
-#endif // if defined(JSON_HAS_INT64)
-  LargestInt asLargestInt() const;
-  LargestUInt asLargestUInt() const;
-  float asFloat() const;
-  double asDouble() const;
-  bool asBool() const;
-
-  bool isNull() const;
-  bool isBool() const;
-  bool isInt() const;
-  bool isInt64() const;
-  bool isUInt() const;
-  bool isUInt64() const;
-  bool isIntegral() const;
-  bool isDouble() const;
-  bool isNumeric() const;
-  bool isString() const;
-  bool isArray() const;
-  bool isObject() const;
-
-  bool isConvertibleTo(ValueType other) const;
-
-  /// Number of values in array or object
-  ArrayIndex size() const;
-
-  /// \brief Return true if empty array, empty object, or null;
-  /// otherwise, false.
-  bool empty() const;
-
-  /// Return isNull()
-  bool operator!() const;
-
-  /// Remove all object members and array elements.
-  /// \pre type() is arrayValue, objectValue, or nullValue
-  /// \post type() is unchanged
-  void clear();
-
-  /// Resize the array to size elements.
-  /// New elements are initialized to null.
-  /// May only be called on nullValue or arrayValue.
-  /// \pre type() is arrayValue or nullValue
-  /// \post type() is arrayValue
-  void resize(ArrayIndex size);
-
-  /// Access an array element (zero based index ).
-  /// If the array contains less than index element, then null value are
-  /// inserted
-  /// in the array so that its size is index+1.
-  /// (You may need to say 'value[0u]' to get your compiler to distinguish
-  ///  this from the operator[] which takes a string.)
-  Value& operator[](ArrayIndex index);
-
-  /// Access an array element (zero based index ).
-  /// If the array contains less than index element, then null value are
-  /// inserted
-  /// in the array so that its size is index+1.
-  /// (You may need to say 'value[0u]' to get your compiler to distinguish
-  ///  this from the operator[] which takes a string.)
-  Value& operator[](int index);
-
-  /// Access an array element (zero based index )
-  /// (You may need to say 'value[0u]' to get your compiler to distinguish
-  ///  this from the operator[] which takes a string.)
-  const Value& operator[](ArrayIndex index) const;
-
-  /// Access an array element (zero based index )
-  /// (You may need to say 'value[0u]' to get your compiler to distinguish
-  ///  this from the operator[] which takes a string.)
-  const Value& operator[](int index) const;
-
-  /// If the array contains at least index+1 elements, returns the element
-  /// value,
-  /// otherwise returns defaultValue.
-  Value get(ArrayIndex index, const Value& defaultValue) const;
-  /// Return true if index < size().
-  bool isValidIndex(ArrayIndex index) const;
-  /// \brief Append value to array at the end.
-  ///
-  /// Equivalent to jsonvalue[jsonvalue.size()] = value;
-  Value& append(const Value& value);
-
-#if JSON_HAS_RVALUE_REFERENCES
-  Value& append(Value&& value);
-#endif
-
-  /// Access an object value by name, create a null member if it does not exist.
-  /// \note Because of our implementation, keys are limited to 2^30 -1 chars.
-  ///  Exceeding that will cause an exception.
-  Value& operator[](const char* key);
-  /// Access an object value by name, returns null if there is no member with
-  /// that name.
-  const Value& operator[](const char* key) const;
-  /// Access an object value by name, create a null member if it does not exist.
-  /// \param key may contain embedded nulls.
-  Value& operator[](const JSONCPP_STRING& key);
-  /// Access an object value by name, returns null if there is no member with
-  /// that name.
-  /// \param key may contain embedded nulls.
-  const Value& operator[](const JSONCPP_STRING& key) const;
-  /** \brief Access an object value by name, create a null member if it does not
-   exist.
-
-   * If the object has no entry for that name, then the member name used to store
-   * the new entry is not duplicated.
-   * Example of use:
-   * \code
-   * Json::Value object;
-   * static const StaticString code("code");
-   * object[code] = 1234;
-   * \endcode
-   */
-  Value& operator[](const StaticString& key);
-#ifdef JSON_USE_CPPTL
-  /// Access an object value by name, create a null member if it does not exist.
-  Value& operator[](const CppTL::ConstString& key);
-  /// Access an object value by name, returns null if there is no member with
-  /// that name.
-  const Value& operator[](const CppTL::ConstString& key) const;
-#endif
-  /// Return the member named key if it exist, defaultValue otherwise.
-  /// \note deep copy
-  Value get(const char* key, const Value& defaultValue) const;
-  /// Return the member named key if it exist, defaultValue otherwise.
-  /// \note deep copy
-  /// \note key may contain embedded nulls.
-  Value get(const char* begin, const char* end, const Value& defaultValue) const;
-  /// Return the member named key if it exist, defaultValue otherwise.
-  /// \note deep copy
-  /// \param key may contain embedded nulls.
-  Value get(const JSONCPP_STRING& key, const Value& defaultValue) const;
-#ifdef JSON_USE_CPPTL
-  /// Return the member named key if it exist, defaultValue otherwise.
-  /// \note deep copy
-  Value get(const CppTL::ConstString& key, const Value& defaultValue) const;
-#endif
-  /// Most general and efficient version of isMember()const, get()const,
-  /// and operator[]const
-  /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
-  Value const* find(char const* begin, char const* end) const;
-  /// Most general and efficient version of object-mutators.
-  /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
-  /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue.
-  Value const* demand(char const* begin, char const* end);
-  /// \brief Remove and return the named member.
-  ///
-  /// Do nothing if it did not exist.
-  /// \return the removed Value, or null.
-  /// \pre type() is objectValue or nullValue
-  /// \post type() is unchanged
-  /// \deprecated
-  void removeMember(const char* key);
-  /// Same as removeMember(const char*)
-  /// \param key may contain embedded nulls.
-  /// \deprecated
-  void removeMember(const JSONCPP_STRING& key);
-  /// Same as removeMember(const char* begin, const char* end, Value* removed),
-  /// but 'key' is null-terminated.
-  bool removeMember(const char* key, Value* removed);
-  /** \brief Remove the named map member.
-
-      Update 'removed' iff removed.
-      \param key may contain embedded nulls.
-      \return true iff removed (no exceptions)
-  */
-  bool removeMember(JSONCPP_STRING const& key, Value* removed);
-  /// Same as removeMember(JSONCPP_STRING const& key, Value* removed)
-  bool removeMember(const char* begin, const char* end, Value* removed);
-  /** \brief Remove the indexed array element.
-
-      O(n) expensive operations.
-      Update 'removed' iff removed.
-      \return true iff removed (no exceptions)
-  */
-  bool removeIndex(ArrayIndex i, Value* removed);
-
-  /// Return true if the object has a member named key.
-  /// \note 'key' must be null-terminated.
-  bool isMember(const char* key) const;
-  /// Return true if the object has a member named key.
-  /// \param key may contain embedded nulls.
-  bool isMember(const JSONCPP_STRING& key) const;
-  /// Same as isMember(JSONCPP_STRING const& key)const
-  bool isMember(const char* begin, const char* end) const;
-#ifdef JSON_USE_CPPTL
-  /// Return true if the object has a member named key.
-  bool isMember(const CppTL::ConstString& key) const;
-#endif
-
-  /// \brief Return a list of the member names.
-  ///
-  /// If null, return an empty list.
-  /// \pre type() is objectValue or nullValue
-  /// \post if type() was nullValue, it remains nullValue
-  Members getMemberNames() const;
-
-  //# ifdef JSON_USE_CPPTL
-  //      EnumMemberNames enumMemberNames() const;
-  //      EnumValues enumValues() const;
-  //# endif
-
-  /// \deprecated Always pass len.
-  JSONCPP_DEPRECATED("Use setComment(JSONCPP_STRING const&) instead.")
-  void setComment(const char* comment, CommentPlacement placement);
-  /// Comments must be //... or /* ... */
-  void setComment(const char* comment, size_t len, CommentPlacement placement);
-  /// Comments must be //... or /* ... */
-  void setComment(const JSONCPP_STRING& comment, CommentPlacement placement);
-  bool hasComment(CommentPlacement placement) const;
-  /// Include delimiters and embedded newlines.
-  JSONCPP_STRING getComment(CommentPlacement placement) const;
-
-  JSONCPP_STRING toStyledString() const;
-
-  const_iterator begin() const;
-  const_iterator end() const;
-
-  iterator begin();
-  iterator end();
-
-  // Accessors for the [start, limit) range of bytes within the JSON text from
-  // which this value was parsed, if any.
-  void setOffsetStart(ptrdiff_t start);
-  void setOffsetLimit(ptrdiff_t limit);
-  ptrdiff_t getOffsetStart() const;
-  ptrdiff_t getOffsetLimit() const;
-
-private:
-  void initBasic(ValueType type, bool allocated = false);
-
-  Value& resolveReference(const char* key);
-  Value& resolveReference(const char* key, const char* end);
-
-  struct CommentInfo {
-    CommentInfo();
-    ~CommentInfo();
-
-    void setComment(const char* text, size_t len);
-
-    char* comment_;
-  };
-
-  // struct MemberNamesTransform
-  //{
-  //   typedef const char *result_type;
-  //   const char *operator()( const CZString &name ) const
-  //   {
-  //      return name.c_str();
-  //   }
-  //};
-
-  union ValueHolder {
-    LargestInt int_;
-    LargestUInt uint_;
-    double real_;
-    bool bool_;
-    char* string_;  // actually ptr to unsigned, followed by str, unless !allocated_
-    ObjectValues* map_;
-  } value_;
-  ValueType type_ : 8;
-  unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless.
-                               // If not allocated_, string_ must be null-terminated.
-  CommentInfo* comments_;
-
-  // [start, limit) byte offsets in the source JSON text from which this Value
-  // was extracted.
-  ptrdiff_t start_;
-  ptrdiff_t limit_;
-};
-
-/** \brief Experimental and untested: represents an element of the "path" to
- * access a node.
- */
-class JSON_API PathArgument {
-public:
-  friend class Path;
-
-  PathArgument();
-  PathArgument(ArrayIndex index);
-  PathArgument(const char* key);
-  PathArgument(const JSONCPP_STRING& key);
-
-private:
-  enum Kind {
-    kindNone = 0,
-    kindIndex,
-    kindKey
-  };
-  JSONCPP_STRING key_;
-  ArrayIndex index_;
-  Kind kind_;
-};
-
-/** \brief Experimental and untested: represents a "path" to access a node.
- *
- * Syntax:
- * - "." => root node
- * - ".[n]" => elements at index 'n' of root node (an array value)
- * - ".name" => member named 'name' of root node (an object value)
- * - ".name1.name2.name3"
- * - ".[0][1][2].name1[3]"
- * - ".%" => member name is provided as parameter
- * - ".[%]" => index is provied as parameter
- */
-class JSON_API Path {
-public:
-  Path(const JSONCPP_STRING& path,
-       const PathArgument& a1 = PathArgument(),
-       const PathArgument& a2 = PathArgument(),
-       const PathArgument& a3 = PathArgument(),
-       const PathArgument& a4 = PathArgument(),
-       const PathArgument& a5 = PathArgument());
-
-  const Value& resolve(const Value& root) const;
-  Value resolve(const Value& root, const Value& defaultValue) const;
-  /// Creates the "path" to access the specified node and returns a reference on
-  /// the node.
-  Value& make(Value& root) const;
-
-private:
-  typedef std::vector<const PathArgument*> InArgs;
-  typedef std::vector<PathArgument> Args;
-
-  void makePath(const JSONCPP_STRING& path, const InArgs& in);
-  void addPathInArg(const JSONCPP_STRING& path,
-                    const InArgs& in,
-                    InArgs::const_iterator& itInArg,
-                    PathArgument::Kind kind);
-  void invalidPath(const JSONCPP_STRING& path, int location);
-
-  Args args_;
-};
-
-/** \brief base class for Value iterators.
- *
- */
-class JSON_API ValueIteratorBase {
-public:
-  typedef std::bidirectional_iterator_tag iterator_category;
-  typedef unsigned int size_t;
-  typedef int difference_type;
-  typedef ValueIteratorBase SelfType;
-
-  bool operator==(const SelfType& other) const { return isEqual(other); }
-
-  bool operator!=(const SelfType& other) const { return !isEqual(other); }
-
-  difference_type operator-(const SelfType& other) const {
-    return other.computeDistance(*this);
-  }
-
-  /// Return either the index or the member name of the referenced value as a
-  /// Value.
-  Value key() const;
-
-  /// Return the index of the referenced Value, or -1 if it is not an arrayValue.
-  UInt index() const;
-
-  /// Return the member name of the referenced Value, or "" if it is not an
-  /// objectValue.
-  /// \note Avoid `c_str()` on result, as embedded zeroes are possible.
-  JSONCPP_STRING name() const;
-
-  /// Return the member name of the referenced Value. "" if it is not an
-  /// objectValue.
-  /// \deprecated This cannot be used for UTF-8 strings, since there can be embedded nulls.
-  JSONCPP_DEPRECATED("Use `key = name();` instead.")
-  char const* memberName() const;
-  /// Return the member name of the referenced Value, or NULL if it is not an
-  /// objectValue.
-  /// \note Better version than memberName(). Allows embedded nulls.
-  char const* memberName(char const** end) const;
-
-protected:
-  Value& deref() const;
-
-  void increment();
-
-  void decrement();
-
-  difference_type computeDistance(const SelfType& other) const;
-
-  bool isEqual(const SelfType& other) const;
-
-  void copy(const SelfType& other);
-
-private:
-  Value::ObjectValues::iterator current_;
-  // Indicates that iterator is for a null value.
-  bool isNull_;
-
-public:
-  // For some reason, BORLAND needs these at the end, rather
-  // than earlier. No idea why.
-  ValueIteratorBase();
-  explicit ValueIteratorBase(const Value::ObjectValues::iterator& current);
-};
-
-/** \brief const iterator for object and array value.
- *
- */
-class JSON_API ValueConstIterator : public ValueIteratorBase {
-  friend class Value;
-
-public:
-  typedef const Value value_type;
-  //typedef unsigned int size_t;
-  //typedef int difference_type;
-  typedef const Value& reference;
-  typedef const Value* pointer;
-  typedef ValueConstIterator SelfType;
-
-  ValueConstIterator();
-  ValueConstIterator(ValueIterator const& other);
-
-private:
-/*! \internal Use by Value to create an iterator.
- */
-  explicit ValueConstIterator(const Value::ObjectValues::iterator& current);
-public:
-  SelfType& operator=(const ValueIteratorBase& other);
-
-  SelfType operator++(int) {
-    SelfType temp(*this);
-    ++*this;
-    return temp;
-  }
-
-  SelfType operator--(int) {
-    SelfType temp(*this);
-    --*this;
-    return temp;
-  }
-
-  SelfType& operator--() {
-    decrement();
-    return *this;
-  }
-
-  SelfType& operator++() {
-    increment();
-    return *this;
-  }
-
-  reference operator*() const { return deref(); }
-
-  pointer operator->() const { return &deref(); }
-};
-
-/** \brief Iterator for object and array value.
- */
-class JSON_API ValueIterator : public ValueIteratorBase {
-  friend class Value;
-
-public:
-  typedef Value value_type;
-  typedef unsigned int size_t;
-  typedef int difference_type;
-  typedef Value& reference;
-  typedef Value* pointer;
-  typedef ValueIterator SelfType;
-
-  ValueIterator();
-  explicit ValueIterator(const ValueConstIterator& other);
-  ValueIterator(const ValueIterator& other);
-
-private:
-/*! \internal Use by Value to create an iterator.
- */
-  explicit ValueIterator(const Value::ObjectValues::iterator& current);
-public:
-  SelfType& operator=(const SelfType& other);
-
-  SelfType operator++(int) {
-    SelfType temp(*this);
-    ++*this;
-    return temp;
-  }
-
-  SelfType operator--(int) {
-    SelfType temp(*this);
-    --*this;
-    return temp;
-  }
-
-  SelfType& operator--() {
-    decrement();
-    return *this;
-  }
-
-  SelfType& operator++() {
-    increment();
-    return *this;
-  }
-
-  reference operator*() const { return deref(); }
-
-  pointer operator->() const { return &deref(); }
-};
-
-} // namespace Json
-
-
-namespace std {
-/// Specialize std::swap() for Json::Value.
-template<>
-inline void swap(Json::Value& a, Json::Value& b) { a.swap(b); }
-}
-
-#pragma pack(pop)
-
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(pop)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-#endif // CPPTL_JSON_H_INCLUDED
diff --git a/3rdParty/jsoncpp/include/json/version.h b/3rdParty/jsoncpp/include/json/version.h
deleted file mode 100644
index b1d2a5ff416cb1d8e776d91048aefcf66305ed47..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/version.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// DO NOT EDIT. This file (and "version") is generated by CMake.
-// Run CMake configure step to update it.
-#ifndef JSON_VERSION_H_INCLUDED
-# define JSON_VERSION_H_INCLUDED
-
-# define JSONCPP_VERSION_STRING "1.8.3"
-# define JSONCPP_VERSION_MAJOR 1
-# define JSONCPP_VERSION_MINOR 8
-# define JSONCPP_VERSION_PATCH 3
-# define JSONCPP_VERSION_QUALIFIER
-# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8))
-
-#ifdef JSONCPP_USING_SECURE_MEMORY
-#undef JSONCPP_USING_SECURE_MEMORY
-#endif
-#define JSONCPP_USING_SECURE_MEMORY 0
-// If non-zero, the library zeroes any memory that it has allocated before
-// it frees its memory.
-
-#endif // JSON_VERSION_H_INCLUDED
diff --git a/3rdParty/jsoncpp/include/json/writer.h b/3rdParty/jsoncpp/include/json/writer.h
deleted file mode 100644
index 5280016ce5049364f27c5416a78417c1fff2e1c7..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/include/json/writer.h
+++ /dev/null
@@ -1,357 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef JSON_WRITER_H_INCLUDED
-#define JSON_WRITER_H_INCLUDED
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "value.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <vector>
-#include <string>
-#include <ostream>
-
-// Disable warning C4251: <data member>: <type> needs to have dll-interface to
-// be used by...
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) && defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4251)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-#pragma pack(push, 8)
-
-namespace Json {
-
-class Value;
-
-/**
-
-Usage:
-\code
-  using namespace Json;
-  void writeToStdout(StreamWriter::Factory const& factory, Value const& value) {
-    std::unique_ptr<StreamWriter> const writer(
-      factory.newStreamWriter());
-    writer->write(value, &std::cout);
-    std::cout << std::endl;  // add lf and flush
-  }
-\endcode
-*/
-class JSON_API StreamWriter {
-protected:
-  JSONCPP_OSTREAM* sout_;  // not owned; will not delete
-public:
-  StreamWriter();
-  virtual ~StreamWriter();
-  /** Write Value into document as configured in sub-class.
-      Do not take ownership of sout, but maintain a reference during function.
-      \pre sout != NULL
-      \return zero on success (For now, we always return zero, so check the stream instead.)
-      \throw std::exception possibly, depending on configuration
-   */
-  virtual int write(Value const& root, JSONCPP_OSTREAM* sout) = 0;
-
-  /** \brief A simple abstract factory.
-   */
-  class JSON_API Factory {
-  public:
-    virtual ~Factory();
-    /** \brief Allocate a CharReader via operator new().
-     * \throw std::exception if something goes wrong (e.g. invalid settings)
-     */
-    virtual StreamWriter* newStreamWriter() const = 0;
-  };  // Factory
-};  // StreamWriter
-
-/** \brief Write into stringstream, then return string, for convenience.
- * A StreamWriter will be created from the factory, used, and then deleted.
- */
-JSONCPP_STRING JSON_API writeString(StreamWriter::Factory const& factory, Value const& root);
-
-
-/** \brief Build a StreamWriter implementation.
-
-Usage:
-\code
-  using namespace Json;
-  Value value = ...;
-  StreamWriterBuilder builder;
-  builder["commentStyle"] = "None";
-  builder["indentation"] = "   ";  // or whatever you like
-  std::unique_ptr<Json::StreamWriter> writer(
-      builder.newStreamWriter());
-  writer->write(value, &std::cout);
-  std::cout << std::endl;  // add lf and flush
-\endcode
-*/
-class JSON_API StreamWriterBuilder : public StreamWriter::Factory {
-public:
-  // Note: We use a Json::Value so that we can add data-members to this class
-  // without a major version bump.
-  /** Configuration of this builder.
-    Available settings (case-sensitive):
-    - "commentStyle": "None" or "All"
-    - "indentation":  "<anything>"
-    - "enableYAMLCompatibility": false or true
-      - slightly change the whitespace around colons
-    - "dropNullPlaceholders": false or true
-      - Drop the "null" string from the writer's output for nullValues.
-        Strictly speaking, this is not valid JSON. But when the output is being
-        fed to a browser's Javascript, it makes for smaller output and the
-        browser can handle the output just fine.
-    - "useSpecialFloats": false or true
-      - If true, outputs non-finite floating point values in the following way:
-        NaN values as "NaN", positive infinity as "Infinity", and negative infinity
-        as "-Infinity".
-
-    You can examine 'settings_` yourself
-    to see the defaults. You can also write and read them just like any
-    JSON Value.
-    \sa setDefaults()
-    */
-  Json::Value settings_;
-
-  StreamWriterBuilder();
-  ~StreamWriterBuilder() JSONCPP_OVERRIDE;
-
-  /**
-   * \throw std::exception if something goes wrong (e.g. invalid settings)
-   */
-  StreamWriter* newStreamWriter() const JSONCPP_OVERRIDE;
-
-  /** \return true if 'settings' are legal and consistent;
-   *   otherwise, indicate bad settings via 'invalid'.
-   */
-  bool validate(Json::Value* invalid) const;
-  /** A simple way to update a specific setting.
-   */
-  Value& operator[](JSONCPP_STRING key);
-
-  /** Called by ctor, but you can use this to reset settings_.
-   * \pre 'settings' != NULL (but Json::null is fine)
-   * \remark Defaults:
-   * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults
-   */
-  static void setDefaults(Json::Value* settings);
-};
-
-/** \brief Abstract class for writers.
- * \deprecated Use StreamWriter. (And really, this is an implementation detail.)
- */
-class JSONCPP_DEPRECATED("Use StreamWriter instead") JSON_API Writer {
-public:
-  virtual ~Writer();
-
-  virtual JSONCPP_STRING write(const Value& root) = 0;
-};
-
-/** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> format
- *without formatting (not human friendly).
- *
- * The JSON document is written in a single line. It is not intended for 'human'
- *consumption,
- * but may be usefull to support feature such as RPC where bandwith is limited.
- * \sa Reader, Value
- * \deprecated Use StreamWriterBuilder.
- */
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable:4996) // Deriving from deprecated class
-#endif
-class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API FastWriter : public Writer {
-public:
-  FastWriter();
-  ~FastWriter() JSONCPP_OVERRIDE {}
-
-  void enableYAMLCompatibility();
-
-  /** \brief Drop the "null" string from the writer's output for nullValues.
-   * Strictly speaking, this is not valid JSON. But when the output is being
-   * fed to a browser's Javascript, it makes for smaller output and the
-   * browser can handle the output just fine.
-   */
-  void dropNullPlaceholders();
-
-  void omitEndingLineFeed();
-
-public: // overridden from Writer
-  JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE;
-
-private:
-  void writeValue(const Value& value);
-
-  JSONCPP_STRING document_;
-  bool yamlCompatiblityEnabled_;
-  bool dropNullPlaceholders_;
-  bool omitEndingLineFeed_;
-};
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
- *human friendly way.
- *
- * The rules for line break and indent are as follow:
- * - Object value:
- *     - if empty then print {} without indent and line break
- *     - if not empty the print '{', line break & indent, print one value per
- *line
- *       and then unindent and line break and print '}'.
- * - Array value:
- *     - if empty then print [] without indent and line break
- *     - if the array contains no object value, empty array or some other value
- *types,
- *       and all the values fit on one lines, then print the array on a single
- *line.
- *     - otherwise, it the values do not fit on one line, or the array contains
- *       object or non empty array, then print one value per line.
- *
- * If the Value have comments then they are outputed according to their
- *#CommentPlacement.
- *
- * \sa Reader, Value, Value::setComment()
- * \deprecated Use StreamWriterBuilder.
- */
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable:4996) // Deriving from deprecated class
-#endif
-class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API StyledWriter : public Writer {
-public:
-  StyledWriter();
-  ~StyledWriter() JSONCPP_OVERRIDE {}
-
-public: // overridden from Writer
-  /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
-   * \param root Value to serialize.
-   * \return String containing the JSON document that represents the root value.
-   */
-  JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE;
-
-private:
-  void writeValue(const Value& value);
-  void writeArrayValue(const Value& value);
-  bool isMultineArray(const Value& value);
-  void pushValue(const JSONCPP_STRING& value);
-  void writeIndent();
-  void writeWithIndent(const JSONCPP_STRING& value);
-  void indent();
-  void unindent();
-  void writeCommentBeforeValue(const Value& root);
-  void writeCommentAfterValueOnSameLine(const Value& root);
-  bool hasCommentForValue(const Value& value);
-  static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text);
-
-  typedef std::vector<JSONCPP_STRING> ChildValues;
-
-  ChildValues childValues_;
-  JSONCPP_STRING document_;
-  JSONCPP_STRING indentString_;
-  unsigned int rightMargin_;
-  unsigned int indentSize_;
-  bool addChildValues_;
-};
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
- human friendly way,
-     to a stream rather than to a string.
- *
- * The rules for line break and indent are as follow:
- * - Object value:
- *     - if empty then print {} without indent and line break
- *     - if not empty the print '{', line break & indent, print one value per
- line
- *       and then unindent and line break and print '}'.
- * - Array value:
- *     - if empty then print [] without indent and line break
- *     - if the array contains no object value, empty array or some other value
- types,
- *       and all the values fit on one lines, then print the array on a single
- line.
- *     - otherwise, it the values do not fit on one line, or the array contains
- *       object or non empty array, then print one value per line.
- *
- * If the Value have comments then they are outputed according to their
- #CommentPlacement.
- *
- * \sa Reader, Value, Value::setComment()
- * \deprecated Use StreamWriterBuilder.
- */
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable:4996) // Deriving from deprecated class
-#endif
-class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API StyledStreamWriter {
-public:
-/**
- * \param indentation Each level will be indented by this amount extra.
- */
-  StyledStreamWriter(JSONCPP_STRING indentation = "\t");
-  ~StyledStreamWriter() {}
-
-public:
-  /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
-   * \param out Stream to write to. (Can be ostringstream, e.g.)
-   * \param root Value to serialize.
-   * \note There is no point in deriving from Writer, since write() should not
-   * return a value.
-   */
-  void write(JSONCPP_OSTREAM& out, const Value& root);
-
-private:
-  void writeValue(const Value& value);
-  void writeArrayValue(const Value& value);
-  bool isMultineArray(const Value& value);
-  void pushValue(const JSONCPP_STRING& value);
-  void writeIndent();
-  void writeWithIndent(const JSONCPP_STRING& value);
-  void indent();
-  void unindent();
-  void writeCommentBeforeValue(const Value& root);
-  void writeCommentAfterValueOnSameLine(const Value& root);
-  bool hasCommentForValue(const Value& value);
-  static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text);
-
-  typedef std::vector<JSONCPP_STRING> ChildValues;
-
-  ChildValues childValues_;
-  JSONCPP_OSTREAM* document_;
-  JSONCPP_STRING indentString_;
-  unsigned int rightMargin_;
-  JSONCPP_STRING indentation_;
-  bool addChildValues_ : 1;
-  bool indented_ : 1;
-};
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-#if defined(JSON_HAS_INT64)
-JSONCPP_STRING JSON_API valueToString(Int value);
-JSONCPP_STRING JSON_API valueToString(UInt value);
-#endif // if defined(JSON_HAS_INT64)
-JSONCPP_STRING JSON_API valueToString(LargestInt value);
-JSONCPP_STRING JSON_API valueToString(LargestUInt value);
-JSONCPP_STRING JSON_API valueToString(double value);
-JSONCPP_STRING JSON_API valueToString(bool value);
-JSONCPP_STRING JSON_API valueToQuotedString(const char* value);
-
-/// \brief Output using the StyledStreamWriter.
-/// \see Json::operator>>()
-JSON_API JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM&, const Value& root);
-
-} // namespace Json
-
-#pragma pack(pop)
-
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(pop)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-#endif // JSON_WRITER_H_INCLUDED
diff --git a/3rdParty/jsoncpp/makerelease.py b/3rdParty/jsoncpp/makerelease.py
deleted file mode 100644
index ba2e9aa4007ea50bcc82d7fcb52baf087ff7ecc7..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/makerelease.py
+++ /dev/null
@@ -1,390 +0,0 @@
-# Copyright 2010 Baptiste Lepilleur and The JsonCpp Authors
-# Distributed under MIT license, or public domain if desired and
-# recognized in your jurisdiction.
-# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-"""Tag the sandbox for release, make source and doc tarballs.
-
-Requires Python 2.6
-
-Example of invocation (use to test the script):
-python makerelease.py --platform=msvc6,msvc71,msvc80,msvc90,mingw -ublep 0.6.0 0.7.0-dev
-
-When testing this script:
-python makerelease.py --force --retag --platform=msvc6,msvc71,msvc80,mingw -ublep test-0.6.0 test-0.6.1-dev
-
-Example of invocation when doing a release:
-python makerelease.py 0.5.0 0.6.0-dev
-
-Note: This was for Subversion. Now that we are in GitHub, we do not
-need to build versioned tarballs anymore, so makerelease.py is defunct.
-"""
-
-from __future__ import print_function
-import os.path
-import subprocess
-import sys
-import doxybuild
-import subprocess
-import xml.etree.ElementTree as ElementTree
-import shutil
-import urllib2
-import tempfile
-import os
-import time
-from devtools import antglob, fixeol, tarball
-import amalgamate
-
-SVN_ROOT = 'https://jsoncpp.svn.sourceforge.net/svnroot/jsoncpp/'
-SVN_TAG_ROOT = SVN_ROOT + 'tags/jsoncpp'
-SCONS_LOCAL_URL = 'http://sourceforge.net/projects/scons/files/scons-local/1.2.0/scons-local-1.2.0.tar.gz/download'
-SOURCEFORGE_PROJECT = 'jsoncpp'
-
-def set_version(version):
-    with open('version','wb') as f:
-        f.write(version.strip())
-
-def rmdir_if_exist(dir_path):
-    if os.path.isdir(dir_path):
-        shutil.rmtree(dir_path)
-
-class SVNError(Exception):
-    pass
-
-def svn_command(command, *args):
-    cmd = ['svn', '--non-interactive', command] + list(args)
-    print('Running:', ' '.join(cmd))
-    process = subprocess.Popen(cmd,
-                                stdout=subprocess.PIPE,
-                                stderr=subprocess.STDOUT)
-    stdout = process.communicate()[0]
-    if process.returncode:
-        error = SVNError('SVN command failed:\n' + stdout)
-        error.returncode = process.returncode
-        raise error
-    return stdout
-
-def check_no_pending_commit():
-    """Checks that there is no pending commit in the sandbox."""
-    stdout = svn_command('status', '--xml')
-    etree = ElementTree.fromstring(stdout)
-    msg = []
-    for entry in etree.getiterator('entry'):
-        path = entry.get('path')
-        status = entry.find('wc-status').get('item')
-        if status != 'unversioned' and path != 'version':
-            msg.append('File "%s" has pending change (status="%s")' % (path, status))
-    if msg:
-        msg.insert(0, 'Pending change to commit found in sandbox. Commit them first!')
-    return '\n'.join(msg)
-
-def svn_join_url(base_url, suffix):
-    if not base_url.endswith('/'):
-        base_url += '/'
-    if suffix.startswith('/'):
-        suffix = suffix[1:]
-    return base_url + suffix
-
-def svn_check_if_tag_exist(tag_url):
-    """Checks if a tag exist.
-    Returns: True if the tag exist, False otherwise.
-    """
-    try:
-        list_stdout = svn_command('list', tag_url)
-    except SVNError as e:
-        if e.returncode != 1 or not str(e).find('tag_url'):
-            raise e
-        # otherwise ignore error, meaning tag does not exist
-        return False
-    return True
-
-def svn_commit(message):
-    """Commit the sandbox, providing the specified comment.
-    """
-    svn_command('ci', '-m', message)
-
-def svn_tag_sandbox(tag_url, message):
-    """Makes a tag based on the sandbox revisions.
-    """
-    svn_command('copy', '-m', message, '.', tag_url)
-
-def svn_remove_tag(tag_url, message):
-    """Removes an existing tag.
-    """
-    svn_command('delete', '-m', message, tag_url)
-
-def svn_export(tag_url, export_dir):
-    """Exports the tag_url revision to export_dir.
-       Target directory, including its parent is created if it does not exist.
-       If the directory export_dir exist, it is deleted before export proceed.
-    """
-    rmdir_if_exist(export_dir)
-    svn_command('export', tag_url, export_dir)
-
-def fix_sources_eol(dist_dir):
-    """Set file EOL for tarball distribution.
-    """
-    print('Preparing exported source file EOL for distribution...')
-    prune_dirs = antglob.prune_dirs + 'scons-local* ./build* ./libs ./dist'
-    win_sources = antglob.glob(dist_dir, 
-        includes = '**/*.sln **/*.vcproj',
-        prune_dirs = prune_dirs)
-    unix_sources = antglob.glob(dist_dir,
-        includes = '''**/*.h **/*.cpp **/*.inl **/*.txt **/*.dox **/*.py **/*.html **/*.in
-        sconscript *.json *.expected AUTHORS LICENSE''',
-        excludes = antglob.default_excludes + 'scons.py sconsign.py scons-*',
-        prune_dirs = prune_dirs)
-    for path in win_sources:
-        fixeol.fix_source_eol(path, is_dry_run = False, verbose = True, eol = '\r\n')
-    for path in unix_sources:
-        fixeol.fix_source_eol(path, is_dry_run = False, verbose = True, eol = '\n')
-
-def download(url, target_path):
-    """Download file represented by url to target_path.
-    """
-    f = urllib2.urlopen(url)
-    try:
-        data = f.read()
-    finally:
-        f.close()
-    fout = open(target_path, 'wb')
-    try:
-        fout.write(data)
-    finally:
-        fout.close()
-
-def check_compile(distcheck_top_dir, platform):
-    cmd = [sys.executable, 'scons.py', 'platform=%s' % platform, 'check']
-    print('Running:', ' '.join(cmd))
-    log_path = os.path.join(distcheck_top_dir, 'build-%s.log' % platform)
-    flog = open(log_path, 'wb')
-    try:
-        process = subprocess.Popen(cmd,
-                                    stdout=flog,
-                                    stderr=subprocess.STDOUT,
-                                    cwd=distcheck_top_dir)
-        stdout = process.communicate()[0]
-        status = (process.returncode == 0)
-    finally:
-        flog.close()
-    return (status, log_path)
-
-def write_tempfile(content, **kwargs):
-    fd, path = tempfile.mkstemp(**kwargs)
-    f = os.fdopen(fd, 'wt')
-    try:
-        f.write(content)
-    finally:
-        f.close()
-    return path
-
-class SFTPError(Exception):
-    pass
-
-def run_sftp_batch(userhost, sftp, batch, retry=0):
-    path = write_tempfile(batch, suffix='.sftp', text=True)
-    # psftp -agent -C blep,jsoncpp@web.sourceforge.net -batch -b batch.sftp -bc
-    cmd = [sftp, '-agent', '-C', '-batch', '-b', path, '-bc', userhost]
-    error = None
-    for retry_index in range(0, max(1,retry)):
-        heading = retry_index == 0 and 'Running:' or 'Retrying:'
-        print(heading, ' '.join(cmd))
-        process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-        stdout = process.communicate()[0]
-        if process.returncode != 0:
-            error = SFTPError('SFTP batch failed:\n' + stdout)
-        else:
-            break
-    if error:
-        raise error
-    return stdout
-
-def sourceforge_web_synchro(sourceforge_project, doc_dir,
-                             user=None, sftp='sftp'):
-    """Notes: does not synchronize sub-directory of doc-dir.
-    """
-    userhost = '%s,%s@web.sourceforge.net' % (user, sourceforge_project)
-    stdout = run_sftp_batch(userhost, sftp, """
-cd htdocs
-dir
-exit
-""")
-    existing_paths = set()
-    collect = 0
-    for line in stdout.split('\n'):
-        line = line.strip()
-        if not collect and line.endswith('> dir'):
-            collect = True
-        elif collect and line.endswith('> exit'):
-            break
-        elif collect == 1:
-            collect = 2
-        elif collect == 2:
-            path = line.strip().split()[-1:]
-            if path and path[0] not in ('.', '..'):
-                existing_paths.add(path[0])
-    upload_paths = set([os.path.basename(p) for p in antglob.glob(doc_dir)])
-    paths_to_remove = existing_paths - upload_paths
-    if paths_to_remove:
-        print('Removing the following file from web:')
-        print('\n'.join(paths_to_remove))
-        stdout = run_sftp_batch(userhost, sftp, """cd htdocs
-rm %s
-exit""" % ' '.join(paths_to_remove))
-    print('Uploading %d files:' % len(upload_paths))
-    batch_size = 10
-    upload_paths = list(upload_paths)
-    start_time = time.time()
-    for index in range(0,len(upload_paths),batch_size):
-        paths = upload_paths[index:index+batch_size]
-        file_per_sec = (time.time() - start_time) / (index+1)
-        remaining_files = len(upload_paths) - index
-        remaining_sec = file_per_sec * remaining_files
-        print('%d/%d, ETA=%.1fs' % (index+1, len(upload_paths), remaining_sec))
-        run_sftp_batch(userhost, sftp, """cd htdocs
-lcd %s
-mput %s
-exit""" % (doc_dir, ' '.join(paths)), retry=3)
-
-def sourceforge_release_tarball(sourceforge_project, paths, user=None, sftp='sftp'):
-    userhost = '%s,%s@frs.sourceforge.net' % (user, sourceforge_project)
-    run_sftp_batch(userhost, sftp, """
-mput %s
-exit
-""" % (' '.join(paths),))
-
-
-def main():
-    usage = """%prog release_version next_dev_version
-Update 'version' file to release_version and commit.
-Generates the document tarball.
-Tags the sandbox revision with release_version.
-Update 'version' file to next_dev_version and commit.
-
-Performs an svn export of tag release version, and build a source tarball.    
-
-Must be started in the project top directory.
-
-Warning: --force should only be used when developping/testing the release script.
-"""
-    from optparse import OptionParser
-    parser = OptionParser(usage=usage)
-    parser.allow_interspersed_args = False
-    parser.add_option('--dot', dest="dot_path", action='store', default=doxybuild.find_program('dot'),
-        help="""Path to GraphViz dot tool. Must be full qualified path. [Default: %default]""")
-    parser.add_option('--doxygen', dest="doxygen_path", action='store', default=doxybuild.find_program('doxygen'),
-        help="""Path to Doxygen tool. [Default: %default]""")
-    parser.add_option('--force', dest="ignore_pending_commit", action='store_true', default=False,
-        help="""Ignore pending commit. [Default: %default]""")
-    parser.add_option('--retag', dest="retag_release", action='store_true', default=False,
-        help="""Overwrite release existing tag if it exist. [Default: %default]""")
-    parser.add_option('-p', '--platforms', dest="platforms", action='store', default='',
-        help="""Comma separated list of platform passed to scons for build check.""")
-    parser.add_option('--no-test', dest="no_test", action='store_true', default=False,
-        help="""Skips build check.""")
-    parser.add_option('--no-web', dest="no_web", action='store_true', default=False,
-        help="""Do not update web site.""")
-    parser.add_option('-u', '--upload-user', dest="user", action='store',
-                      help="""Sourceforge user for SFTP documentation upload.""")
-    parser.add_option('--sftp', dest='sftp', action='store', default=doxybuild.find_program('psftp', 'sftp'),
-                      help="""Path of the SFTP compatible binary used to upload the documentation.""")
-    parser.enable_interspersed_args()
-    options, args = parser.parse_args()
-
-    if len(args) != 2:
-        parser.error('release_version missing on command-line.')
-    release_version = args[0]
-    next_version = args[1]
-
-    if not options.platforms and not options.no_test:
-        parser.error('You must specify either --platform or --no-test option.')
-
-    if options.ignore_pending_commit:
-        msg = ''
-    else:
-        msg = check_no_pending_commit()
-    if not msg:
-        print('Setting version to', release_version)
-        set_version(release_version)
-        svn_commit('Release ' + release_version)
-        tag_url = svn_join_url(SVN_TAG_ROOT, release_version)
-        if svn_check_if_tag_exist(tag_url):
-            if options.retag_release:
-                svn_remove_tag(tag_url, 'Overwriting previous tag')
-            else:
-                print('Aborting, tag %s already exist. Use --retag to overwrite it!' % tag_url)
-                sys.exit(1)
-        svn_tag_sandbox(tag_url, 'Release ' + release_version)
-
-        print('Generated doxygen document...')
-##        doc_dirname = r'jsoncpp-api-html-0.5.0'
-##        doc_tarball_path = r'e:\prg\vc\Lib\jsoncpp-trunk\dist\jsoncpp-api-html-0.5.0.tar.gz'
-        doc_tarball_path, doc_dirname = doxybuild.build_doc(options, make_release=True)
-        doc_distcheck_dir = 'dist/doccheck'
-        tarball.decompress(doc_tarball_path, doc_distcheck_dir)
-        doc_distcheck_top_dir = os.path.join(doc_distcheck_dir, doc_dirname)
-        
-        export_dir = 'dist/export'
-        svn_export(tag_url, export_dir)
-        fix_sources_eol(export_dir)
-        
-        source_dir = 'jsoncpp-src-' + release_version
-        source_tarball_path = 'dist/%s.tar.gz' % source_dir
-        print('Generating source tarball to', source_tarball_path)
-        tarball.make_tarball(source_tarball_path, [export_dir], export_dir, prefix_dir=source_dir)
-
-        amalgamation_tarball_path = 'dist/%s-amalgamation.tar.gz' % source_dir
-        print('Generating amalgamation source tarball to', amalgamation_tarball_path)
-        amalgamation_dir = 'dist/amalgamation'
-        amalgamate.amalgamate_source(export_dir, '%s/jsoncpp.cpp' % amalgamation_dir, 'json/json.h')
-        amalgamation_source_dir = 'jsoncpp-src-amalgamation' + release_version
-        tarball.make_tarball(amalgamation_tarball_path, [amalgamation_dir],
-                              amalgamation_dir, prefix_dir=amalgamation_source_dir)
-
-        # Decompress source tarball, download and install scons-local
-        distcheck_dir = 'dist/distcheck'
-        distcheck_top_dir = distcheck_dir + '/' + source_dir
-        print('Decompressing source tarball to', distcheck_dir)
-        rmdir_if_exist(distcheck_dir)
-        tarball.decompress(source_tarball_path, distcheck_dir)
-        scons_local_path = 'dist/scons-local.tar.gz'
-        print('Downloading scons-local to', scons_local_path)
-        download(SCONS_LOCAL_URL, scons_local_path)
-        print('Decompressing scons-local to', distcheck_top_dir)
-        tarball.decompress(scons_local_path, distcheck_top_dir)
-
-        # Run compilation
-        print('Compiling decompressed tarball')
-        all_build_status = True
-        for platform in options.platforms.split(','):
-            print('Testing platform:', platform)
-            build_status, log_path = check_compile(distcheck_top_dir, platform)
-            print('see build log:', log_path)
-            print(build_status and '=> ok' or '=> FAILED')
-            all_build_status = all_build_status and build_status
-        if not build_status:
-            print('Testing failed on at least one platform, aborting...')
-            svn_remove_tag(tag_url, 'Removing tag due to failed testing')
-            sys.exit(1)
-        if options.user:
-            if not options.no_web:
-                print('Uploading documentation using user', options.user)
-                sourceforge_web_synchro(SOURCEFORGE_PROJECT, doc_distcheck_top_dir, user=options.user, sftp=options.sftp)
-                print('Completed documentation upload')
-            print('Uploading source and documentation tarballs for release using user', options.user)
-            sourceforge_release_tarball(SOURCEFORGE_PROJECT,
-                                         [source_tarball_path, doc_tarball_path],
-                                         user=options.user, sftp=options.sftp)
-            print('Source and doc release tarballs uploaded')
-        else:
-            print('No upload user specified. Web site and download tarbal were not uploaded.')
-            print('Tarball can be found at:', doc_tarball_path)
-
-        # Set next version number and commit            
-        set_version(next_version)
-        svn_commit('Released ' + release_version)
-    else:
-        sys.stderr.write(msg + '\n')
- 
-if __name__ == '__main__':
-    main()
diff --git a/3rdParty/jsoncpp/meson.build b/3rdParty/jsoncpp/meson.build
deleted file mode 100644
index 8f0bfaf1144d4c2c71d6a517782e227b558571bc..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/meson.build
+++ /dev/null
@@ -1,103 +0,0 @@
-project(
-  'jsoncpp',
-  'cpp',
-  version : '1.8.3',
-  default_options : [
-    'buildtype=release',
-    'warning_level=1'],
-  license : 'Public Domain',
-  meson_version : '>= 0.41.1')
-
-jsoncpp_ver_arr = meson.project_version().split('.')
-jsoncpp_major_version = jsoncpp_ver_arr[0]
-jsoncpp_minor_version = jsoncpp_ver_arr[1]
-jsoncpp_patch_version = jsoncpp_ver_arr[2]
-
-jsoncpp_cdata = configuration_data()
-jsoncpp_cdata.set('JSONCPP_VERSION', meson.project_version())
-jsoncpp_cdata.set('JSONCPP_VERSION_MAJOR', jsoncpp_major_version)
-jsoncpp_cdata.set('JSONCPP_VERSION_MINOR', jsoncpp_minor_version)
-jsoncpp_cdata.set('JSONCPP_VERSION_PATCH', jsoncpp_patch_version)
-jsoncpp_cdata.set('JSONCPP_USE_SECURE_MEMORY',0)
-
-jsoncpp_gen_sources = configure_file(
-  input : 'src/lib_json/version.h.in',
-  output : 'version.h',
-  configuration : jsoncpp_cdata,
-  install : true,
-  install_dir : join_paths(get_option('prefix'), get_option('includedir'), 'json')
-)
-
-jsoncpp_headers = [
-  'include/json/allocator.h',
-  'include/json/assertions.h',
-  'include/json/autolink.h',
-  'include/json/config.h',
-  'include/json/features.h',
-  'include/json/forwards.h',
-  'include/json/json.h',
-  'include/json/reader.h',
-  'include/json/value.h',
-  'include/json/writer.h']
-jsoncpp_include_directories = include_directories('include')
-
-install_headers(
-  jsoncpp_headers,
-  subdir : 'json')
-
-jsoncpp_lib = library(
-  'jsoncpp',
-  [ jsoncpp_gen_sources,
-    jsoncpp_headers,
-    'src/lib_json/json_tool.h',
-    'src/lib_json/json_reader.cpp',
-    'src/lib_json/json_value.cpp',
-    'src/lib_json/json_writer.cpp'],
-  soversion : 19,
-  install : true,
-  include_directories : jsoncpp_include_directories)
-
-import('pkgconfig').generate(
-  libraries : jsoncpp_lib,
-  version : meson.project_version(),
-  name : 'jsoncpp',
-  filebase : 'jsoncpp',
-  description : 'A C++ library for interacting with JSON')
-
-# for libraries bundling jsoncpp
-jsoncpp_dep = declare_dependency(
-  include_directories : jsoncpp_include_directories,
-  link_with : jsoncpp_lib,
-  version : meson.project_version(),
-  sources : jsoncpp_gen_sources)
-
-# tests
-python = import('python3').find_python()
-
-jsoncpp_test = executable(
-  'jsoncpp_test',
-  [ 'src/test_lib_json/jsontest.cpp',
-    'src/test_lib_json/jsontest.h',
-    'src/test_lib_json/main.cpp'],
-  include_directories : jsoncpp_include_directories,
-  link_with : jsoncpp_lib,
-  install : false)
-test(
-  'unittest_jsoncpp_test',
-  jsoncpp_test)
-
-jsontestrunner = executable(
-  'jsontestrunner',
-  'src/jsontestrunner/main.cpp',
-  include_directories : jsoncpp_include_directories,
-  link_with : jsoncpp_lib,
-  install : false)
-test(
-  'unittest_jsontestrunner',
-  python,
-  args : [
-    '-B',
-    join_paths(meson.current_source_dir(), 'test/runjsontests.py'),
-    jsontestrunner,
-    join_paths(meson.current_source_dir(), 'test/data')]
-  )
diff --git a/3rdParty/jsoncpp/pkg-config/jsoncpp.pc.in b/3rdParty/jsoncpp/pkg-config/jsoncpp.pc.in
deleted file mode 100644
index dea51f5125a2d75dfc56ca2d46612754fb24acf9..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/pkg-config/jsoncpp.pc.in
+++ /dev/null
@@ -1,9 +0,0 @@
-libdir=@CMAKE_INSTALL_FULL_LIBDIR@
-includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
-
-Name: jsoncpp
-Description: A C++ library for interacting with JSON
-Version: @JSONCPP_VERSION@
-URL: https://github.com/open-source-parsers/jsoncpp
-Libs: -L${libdir} -ljsoncpp
-Cflags: -I${includedir}
diff --git a/3rdParty/jsoncpp/src/CMakeLists.txt b/3rdParty/jsoncpp/src/CMakeLists.txt
deleted file mode 100644
index ca8ac15e28a882513d24b05eb2b23ac6f8ba752b..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-ADD_SUBDIRECTORY(lib_json)
-IF(JSONCPP_WITH_TESTS)
-    ADD_SUBDIRECTORY(jsontestrunner)
-    ADD_SUBDIRECTORY(test_lib_json)
-ENDIF()
diff --git a/3rdParty/jsoncpp/src/jsontestrunner/CMakeLists.txt b/3rdParty/jsoncpp/src/jsontestrunner/CMakeLists.txt
deleted file mode 100644
index 20d01e6268813808476e5696db2054e95cb37628..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/jsontestrunner/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-FIND_PACKAGE(PythonInterp 2.6)
-
-ADD_EXECUTABLE(jsontestrunner_exe
-               main.cpp
-               )
-
-IF(BUILD_SHARED_LIBS)
-    ADD_DEFINITIONS( -DJSON_DLL )
-    TARGET_LINK_LIBRARIES(jsontestrunner_exe jsoncpp_lib)
-ELSE(BUILD_SHARED_LIBS)
-    TARGET_LINK_LIBRARIES(jsontestrunner_exe jsoncpp_lib_static)
-ENDIF()
-
-SET_TARGET_PROPERTIES(jsontestrunner_exe PROPERTIES OUTPUT_NAME jsontestrunner_exe)
-
-IF(PYTHONINTERP_FOUND)
-    # Run end to end parser/writer tests
-    SET(TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../test)
-    SET(RUNJSONTESTS_PATH ${TEST_DIR}/runjsontests.py)
-    ADD_CUSTOM_TARGET(jsoncpp_readerwriter_tests
-                      "${PYTHON_EXECUTABLE}" -B "${RUNJSONTESTS_PATH}" $<TARGET_FILE:jsontestrunner_exe> "${TEST_DIR}/data"
-                      DEPENDS jsontestrunner_exe jsoncpp_test
-                      )
-    ADD_CUSTOM_TARGET(jsoncpp_check DEPENDS jsoncpp_readerwriter_tests)
-ENDIF()
diff --git a/3rdParty/jsoncpp/src/jsontestrunner/main.cpp b/3rdParty/jsoncpp/src/jsontestrunner/main.cpp
deleted file mode 100644
index d24d7cfb71126ad70d611a8b31e433fdfaba0be9..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/jsontestrunner/main.cpp
+++ /dev/null
@@ -1,331 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-
-/* This executable is used for testing parser/writer using real JSON files.
- */
-
-#include <json/json.h>
-#include <algorithm> // sort
-#include <sstream>
-#include <stdio.h>
-
-#if defined(_MSC_VER) && _MSC_VER >= 1310
-#pragma warning(disable : 4996) // disable fopen deprecation warning
-#endif
-
-struct Options
-{
-  JSONCPP_STRING path;
-  Json::Features features;
-  bool parseOnly;
-  typedef JSONCPP_STRING (*writeFuncType)(Json::Value const&);
-  writeFuncType write;
-};
-
-static JSONCPP_STRING normalizeFloatingPointStr(double value) {
-  char buffer[32];
-#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__)
-  sprintf_s(buffer, sizeof(buffer), "%.16g", value);
-#else
-  snprintf(buffer, sizeof(buffer), "%.16g", value);
-#endif
-  buffer[sizeof(buffer) - 1] = 0;
-  JSONCPP_STRING s(buffer);
-  JSONCPP_STRING::size_type index = s.find_last_of("eE");
-  if (index != JSONCPP_STRING::npos) {
-    JSONCPP_STRING::size_type hasSign =
-        (s[index + 1] == '+' || s[index + 1] == '-') ? 1 : 0;
-    JSONCPP_STRING::size_type exponentStartIndex = index + 1 + hasSign;
-    JSONCPP_STRING normalized = s.substr(0, exponentStartIndex);
-    JSONCPP_STRING::size_type indexDigit =
-        s.find_first_not_of('0', exponentStartIndex);
-    JSONCPP_STRING exponent = "0";
-    if (indexDigit !=
-        JSONCPP_STRING::npos) // There is an exponent different from 0
-    {
-      exponent = s.substr(indexDigit);
-    }
-    return normalized + exponent;
-  }
-  return s;
-}
-
-static JSONCPP_STRING readInputTestFile(const char* path) {
-  FILE* file = fopen(path, "rb");
-  if (!file)
-    return JSONCPP_STRING("");
-  fseek(file, 0, SEEK_END);
-  long const size = ftell(file);
-  unsigned long const usize = static_cast<unsigned long>(size);
-  fseek(file, 0, SEEK_SET);
-  JSONCPP_STRING text;
-  char* buffer = new char[size + 1];
-  buffer[size] = 0;
-  if (fread(buffer, 1, usize, file) == usize)
-    text = buffer;
-  fclose(file);
-  delete[] buffer;
-  return text;
-}
-
-static void
-printValueTree(FILE* fout, Json::Value& value, const JSONCPP_STRING& path = ".") {
-  if (value.hasComment(Json::commentBefore)) {
-    fprintf(fout, "%s\n", value.getComment(Json::commentBefore).c_str());
-  }
-  switch (value.type()) {
-  case Json::nullValue:
-    fprintf(fout, "%s=null\n", path.c_str());
-    break;
-  case Json::intValue:
-    fprintf(fout,
-            "%s=%s\n",
-            path.c_str(),
-            Json::valueToString(value.asLargestInt()).c_str());
-    break;
-  case Json::uintValue:
-    fprintf(fout,
-            "%s=%s\n",
-            path.c_str(),
-            Json::valueToString(value.asLargestUInt()).c_str());
-    break;
-  case Json::realValue:
-    fprintf(fout,
-            "%s=%s\n",
-            path.c_str(),
-            normalizeFloatingPointStr(value.asDouble()).c_str());
-    break;
-  case Json::stringValue:
-    fprintf(fout, "%s=\"%s\"\n", path.c_str(), value.asString().c_str());
-    break;
-  case Json::booleanValue:
-    fprintf(fout, "%s=%s\n", path.c_str(), value.asBool() ? "true" : "false");
-    break;
-  case Json::arrayValue: {
-    fprintf(fout, "%s=[]\n", path.c_str());
-    Json::ArrayIndex size = value.size();
-    for (Json::ArrayIndex index = 0; index < size; ++index) {
-      static char buffer[16];
-#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__)
-      sprintf_s(buffer, sizeof(buffer), "[%d]", index);
-#else
-      snprintf(buffer, sizeof(buffer), "[%d]", index);
-#endif
-      printValueTree(fout, value[index], path + buffer);
-    }
-  } break;
-  case Json::objectValue: {
-    fprintf(fout, "%s={}\n", path.c_str());
-    Json::Value::Members members(value.getMemberNames());
-    std::sort(members.begin(), members.end());
-    JSONCPP_STRING suffix = *(path.end() - 1) == '.' ? "" : ".";
-    for (Json::Value::Members::iterator it = members.begin();
-         it != members.end();
-         ++it) {
-      const JSONCPP_STRING name = *it;
-      printValueTree(fout, value[name], path + suffix + name);
-    }
-  } break;
-  default:
-    break;
-  }
-
-  if (value.hasComment(Json::commentAfter)) {
-    fprintf(fout, "%s\n", value.getComment(Json::commentAfter).c_str());
-  }
-}
-
-static int parseAndSaveValueTree(const JSONCPP_STRING& input,
-                                 const JSONCPP_STRING& actual,
-                                 const JSONCPP_STRING& kind,
-                                 const Json::Features& features,
-                                 bool parseOnly,
-                                 Json::Value* root)
-{
-  Json::Reader reader(features);
-  bool parsingSuccessful = reader.parse(input.data(), input.data() + input.size(), *root);
-  if (!parsingSuccessful) {
-    printf("Failed to parse %s file: \n%s\n",
-           kind.c_str(),
-           reader.getFormattedErrorMessages().c_str());
-    return 1;
-  }
-  if (!parseOnly) {
-    FILE* factual = fopen(actual.c_str(), "wt");
-    if (!factual) {
-      printf("Failed to create %s actual file.\n", kind.c_str());
-      return 2;
-    }
-    printValueTree(factual, *root);
-    fclose(factual);
-  }
-  return 0;
-}
-// static JSONCPP_STRING useFastWriter(Json::Value const& root) {
-//   Json::FastWriter writer;
-//   writer.enableYAMLCompatibility();
-//   return writer.write(root);
-// }
-static JSONCPP_STRING useStyledWriter(
-    Json::Value const& root)
-{
-  Json::StyledWriter writer;
-  return writer.write(root);
-}
-static JSONCPP_STRING useStyledStreamWriter(
-    Json::Value const& root)
-{
-  Json::StyledStreamWriter writer;
-  JSONCPP_OSTRINGSTREAM sout;
-  writer.write(sout, root);
-  return sout.str();
-}
-static JSONCPP_STRING useBuiltStyledStreamWriter(
-    Json::Value const& root)
-{
-  Json::StreamWriterBuilder builder;
-  return Json::writeString(builder, root);
-}
-static int rewriteValueTree(
-    const JSONCPP_STRING& rewritePath,
-    const Json::Value& root,
-    Options::writeFuncType write,
-    JSONCPP_STRING* rewrite)
-{
-  *rewrite = write(root);
-  FILE* fout = fopen(rewritePath.c_str(), "wt");
-  if (!fout) {
-    printf("Failed to create rewrite file: %s\n", rewritePath.c_str());
-    return 2;
-  }
-  fprintf(fout, "%s\n", rewrite->c_str());
-  fclose(fout);
-  return 0;
-}
-
-static JSONCPP_STRING removeSuffix(const JSONCPP_STRING& path,
-                                const JSONCPP_STRING& extension) {
-  if (extension.length() >= path.length())
-    return JSONCPP_STRING("");
-  JSONCPP_STRING suffix = path.substr(path.length() - extension.length());
-  if (suffix != extension)
-    return JSONCPP_STRING("");
-  return path.substr(0, path.length() - extension.length());
-}
-
-static void printConfig() {
-// Print the configuration used to compile JsonCpp
-#if defined(JSON_NO_INT64)
-  printf("JSON_NO_INT64=1\n");
-#else
-  printf("JSON_NO_INT64=0\n");
-#endif
-}
-
-static int printUsage(const char* argv[]) {
-  printf("Usage: %s [--strict] input-json-file", argv[0]);
-  return 3;
-}
-
-static int parseCommandLine(
-    int argc, const char* argv[], Options* opts)
-{
-  opts->parseOnly = false;
-  opts->write = &useStyledWriter;
-  if (argc < 2) {
-    return printUsage(argv);
-  }
-  int index = 1;
-  if (JSONCPP_STRING(argv[index]) == "--json-checker") {
-    opts->features = Json::Features::strictMode();
-    opts->parseOnly = true;
-    ++index;
-  }
-  if (JSONCPP_STRING(argv[index]) == "--json-config") {
-    printConfig();
-    return 3;
-  }
-  if (JSONCPP_STRING(argv[index]) == "--json-writer") {
-    ++index;
-    JSONCPP_STRING const writerName(argv[index++]);
-    if (writerName == "StyledWriter") {
-      opts->write = &useStyledWriter;
-    } else if (writerName == "StyledStreamWriter") {
-      opts->write = &useStyledStreamWriter;
-    } else if (writerName == "BuiltStyledStreamWriter") {
-      opts->write = &useBuiltStyledStreamWriter;
-    } else {
-      printf("Unknown '--json-writer %s'\n", writerName.c_str());
-      return 4;
-    }
-  }
-  if (index == argc || index + 1 < argc) {
-    return printUsage(argv);
-  }
-  opts->path = argv[index];
-  return 0;
-}
-static int runTest(Options const& opts)
-{
-  int exitCode = 0;
-
-  JSONCPP_STRING input = readInputTestFile(opts.path.c_str());
-  if (input.empty()) {
-    printf("Failed to read input or empty input: %s\n", opts.path.c_str());
-    return 3;
-  }
-
-  JSONCPP_STRING basePath = removeSuffix(opts.path, ".json");
-  if (!opts.parseOnly && basePath.empty()) {
-    printf("Bad input path. Path does not end with '.expected':\n%s\n",
-            opts.path.c_str());
-    return 3;
-  }
-
-  JSONCPP_STRING const actualPath = basePath + ".actual";
-  JSONCPP_STRING const rewritePath = basePath + ".rewrite";
-  JSONCPP_STRING const rewriteActualPath = basePath + ".actual-rewrite";
-
-  Json::Value root;
-  exitCode = parseAndSaveValueTree(
-      input, actualPath, "input",
-      opts.features, opts.parseOnly, &root);
-  if (exitCode || opts.parseOnly) {
-    return exitCode;
-  }
-  JSONCPP_STRING rewrite;
-  exitCode = rewriteValueTree(rewritePath, root, opts.write, &rewrite);
-  if (exitCode) {
-    return exitCode;
-  }
-  Json::Value rewriteRoot;
-  exitCode = parseAndSaveValueTree(
-      rewrite, rewriteActualPath, "rewrite",
-      opts.features, opts.parseOnly, &rewriteRoot);
-  if (exitCode) {
-    return exitCode;
-  }
-  return 0;
-}
-int main(int argc, const char* argv[]) {
-  Options opts;
-  try {
-  int exitCode = parseCommandLine(argc, argv, &opts);
-  if (exitCode != 0) {
-    printf("Failed to parse command-line.");
-    return exitCode;
-  }
-    return runTest(opts);
-  }
-  catch (const std::exception& e) {
-    printf("Unhandled exception:\n%s\n", e.what());
-    return 1;
-  }
-}
-
-#pragma GCC diagnostic pop
diff --git a/3rdParty/jsoncpp/src/lib_json/CMakeLists.txt b/3rdParty/jsoncpp/src/lib_json/CMakeLists.txt
deleted file mode 100644
index d7369e7ed24a260b09871c08f58aacd5ab0c73d1..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/lib_json/CMakeLists.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-IF( CMAKE_COMPILER_IS_GNUCXX )
-    #Get compiler version.
-    EXECUTE_PROCESS( COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
-                     OUTPUT_VARIABLE GNUCXX_VERSION )
-
-    #-Werror=* was introduced -after- GCC 4.1.2
-    IF( GNUCXX_VERSION VERSION_GREATER 4.1.2 )
-        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=strict-aliasing")
-    ENDIF()
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
-
-INCLUDE(CheckIncludeFileCXX)
-INCLUDE(CheckTypeSize)
-INCLUDE(CheckStructHasMember)
-INCLUDE(CheckCXXSymbolExists)
-
-check_include_file_cxx(clocale HAVE_CLOCALE)
-check_cxx_symbol_exists(localeconv clocale HAVE_LOCALECONV)
-
-IF(CMAKE_VERSION VERSION_LESS 3.0.0)
-    # The "LANGUAGE CXX" parameter is not supported in CMake versions below 3,
-    # so the C compiler and header has to be used.
-    check_include_file(locale.h HAVE_LOCALE_H)
-    SET(CMAKE_EXTRA_INCLUDE_FILES locale.h)
-    check_type_size("struct lconv" LCONV_SIZE)
-    UNSET(CMAKE_EXTRA_INCLUDE_FILES)
-    check_struct_has_member("struct lconv" decimal_point locale.h HAVE_DECIMAL_POINT)
-ELSE()
-    SET(CMAKE_EXTRA_INCLUDE_FILES clocale)
-    check_type_size(lconv LCONV_SIZE LANGUAGE CXX)
-    UNSET(CMAKE_EXTRA_INCLUDE_FILES)
-    check_struct_has_member(lconv decimal_point clocale HAVE_DECIMAL_POINT LANGUAGE CXX)
-ENDIF()
-
-IF(NOT (HAVE_CLOCALE AND HAVE_LCONV_SIZE AND HAVE_DECIMAL_POINT AND HAVE_LOCALECONV))
-    MESSAGE(WARNING "Locale functionality is not supported")
-    ADD_DEFINITIONS(-DJSONCPP_NO_LOCALE_SUPPORT)
-ENDIF()
-
-SET( JSONCPP_INCLUDE_DIR ../../include )
-
-SET( PUBLIC_HEADERS
-    ${JSONCPP_INCLUDE_DIR}/json/config.h
-    ${JSONCPP_INCLUDE_DIR}/json/forwards.h
-    ${JSONCPP_INCLUDE_DIR}/json/features.h
-    ${JSONCPP_INCLUDE_DIR}/json/value.h
-    ${JSONCPP_INCLUDE_DIR}/json/reader.h
-    ${JSONCPP_INCLUDE_DIR}/json/writer.h
-    ${JSONCPP_INCLUDE_DIR}/json/assertions.h
-    ${JSONCPP_INCLUDE_DIR}/json/version.h
-    )
-
-SOURCE_GROUP( "Public API" FILES ${PUBLIC_HEADERS} )
-
-SET(jsoncpp_sources
-                json_tool.h
-                json_reader.cpp
-                json_valueiterator.inl
-                json_value.cpp
-                json_writer.cpp
-                version.h.in)
-
-# Install instructions for this target
-IF(JSONCPP_WITH_CMAKE_PACKAGE)
-    SET(INSTALL_EXPORT EXPORT jsoncpp)
-ELSE(JSONCPP_WITH_CMAKE_PACKAGE)
-    SET(INSTALL_EXPORT)
-ENDIF()
-
-IF(BUILD_SHARED_LIBS)
-    ADD_DEFINITIONS( -DJSON_DLL_BUILD )
-    ADD_LIBRARY(jsoncpp SHARED ${PUBLIC_HEADERS} ${jsoncpp_sources})
-	groupTarget(jsoncpp ${thirdPartyFolder})
-    SET_TARGET_PROPERTIES( jsoncpp PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_SOVERSION})
-    SET_TARGET_PROPERTIES( jsoncpp PROPERTIES OUTPUT_NAME jsoncpp
-                           DEBUG_OUTPUT_NAME jsoncpp${DEBUG_LIBNAME_SUFFIX} )
-
-    # Set library's runtime search path on OSX
-    IF(APPLE)
-        SET_TARGET_PROPERTIES( jsoncpp PROPERTIES INSTALL_RPATH "@loader_path/." )
-    ENDIF()
-
-    INSTALL( TARGETS jsoncpp ${INSTALL_EXPORT}
-             RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-             LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-
-    IF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
-        TARGET_INCLUDE_DIRECTORIES( jsoncpp PUBLIC
-                                   $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
-                                   $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/${JSONCPP_INCLUDE_DIR}>)
-    ENDIF()
-
-ELSE()
-    ADD_LIBRARY(jsoncpp STATIC ${PUBLIC_HEADERS} ${jsoncpp_sources})
-	groupTarget(jsoncpp ${thirdPartyFolder})
-    SET_TARGET_PROPERTIES( jsoncpp PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_SOVERSION})
-    # avoid name clashes on windows as the shared import lib is also named jsoncpp.lib
-    if (NOT DEFINED STATIC_SUFFIX AND BUILD_SHARED_LIBS)
-      set (STATIC_SUFFIX "_static")
-    endif ()
-    set_target_properties (jsoncpp PROPERTIES OUTPUT_NAME jsoncpp${STATIC_SUFFIX}
-                                                         DEBUG_OUTPUT_NAME jsoncpp${STATIC_SUFFIX}${DEBUG_LIBNAME_SUFFIX})
-
-    INSTALL( TARGETS jsoncpp ${INSTALL_EXPORT}
-             RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-             LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-	
-
-    IF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
-        TARGET_INCLUDE_DIRECTORIES( jsoncpp PUBLIC
-                                $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
-                                $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/${JSONCPP_INCLUDE_DIR}>
-                                )
-    ENDIF()
-
-ENDIF()
diff --git a/3rdParty/jsoncpp/src/lib_json/json_reader.cpp b/3rdParty/jsoncpp/src/lib_json/json_reader.cpp
deleted file mode 100644
index b4c4dcd4465faed7aedc058b14fcee0ca429ef03..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/lib_json/json_reader.cpp
+++ /dev/null
@@ -1,2060 +0,0 @@
-// Copyright 2007-2011 Baptiste Lepilleur and The JsonCpp Authors
-// Copyright (C) 2016 InfoTeCS JSC. All rights reserved.
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include <json/assertions.h>
-#include <json/reader.h>
-#include <json/value.h>
-#include "json_tool.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <utility>
-#include <cstdio>
-#include <cassert>
-#include <cstring>
-#include <istream>
-#include <sstream>
-#include <memory>
-#include <set>
-#include <limits>
-
-#if defined(_MSC_VER)
-#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above 
-#define snprintf sprintf_s
-#elif _MSC_VER >= 1900 // VC++ 14.0 and above
-#define snprintf std::snprintf
-#else
-#define snprintf _snprintf
-#endif
-#elif defined(__ANDROID__) || defined(__QNXNTO__)
-#define snprintf snprintf
-#elif __cplusplus >= 201103L
-#if !defined(__MINGW32__) && !defined(__CYGWIN__)
-#define snprintf std::snprintf
-#endif
-#endif
-
-#if defined(__QNXNTO__)
-#define sscanf std::sscanf
-#endif
-
-#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0
-// Disable warning about strdup being deprecated.
-#pragma warning(disable : 4996)
-#endif
-
-// Define JSONCPP_DEPRECATED_STACK_LIMIT as an appropriate integer at compile time to change the stack limit
-#if !defined(JSONCPP_DEPRECATED_STACK_LIMIT)
-#define JSONCPP_DEPRECATED_STACK_LIMIT 1000
-#endif
-
-static size_t const stackLimit_g = JSONCPP_DEPRECATED_STACK_LIMIT; // see readValue()
-
-namespace Json {
-
-#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520)
-typedef std::unique_ptr<CharReader> CharReaderPtr;
-#else
-typedef std::auto_ptr<CharReader>   CharReaderPtr;
-#endif
-
-// Implementation of class Features
-// ////////////////////////////////
-
-Features::Features()
-    : allowComments_(true), strictRoot_(false),
-      allowDroppedNullPlaceholders_(false), allowNumericKeys_(false) {}
-
-Features Features::all() { return Features(); }
-
-Features Features::strictMode() {
-  Features features;
-  features.allowComments_ = false;
-  features.strictRoot_ = true;
-  features.allowDroppedNullPlaceholders_ = false;
-  features.allowNumericKeys_ = false;
-  return features;
-}
-
-// Implementation of class Reader
-// ////////////////////////////////
-
-bool Reader::containsNewLine(Reader::Location begin, Reader::Location end) {
-  for (; begin < end; ++begin)
-    if (*begin == '\n' || *begin == '\r')
-      return true;
-  return false;
-}
-
-// Class Reader
-// //////////////////////////////////////////////////////////////////
-
-Reader::Reader()
-    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
-      lastValue_(), commentsBefore_(), features_(Features::all()),
-      collectComments_() {}
-
-Reader::Reader(const Features& features)
-    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
-      lastValue_(), commentsBefore_(), features_(features), collectComments_() {
-}
-
-bool
-Reader::parse(const std::string& document, Value& root, bool collectComments) {
-  document_.assign(document.begin(), document.end());
-  const char* begin = document_.c_str();
-  const char* end = begin + document_.length();
-  return parse(begin, end, root, collectComments);
-}
-
-bool Reader::parse(std::istream& sin, Value& root, bool collectComments) {
-  // std::istream_iterator<char> begin(sin);
-  // std::istream_iterator<char> end;
-  // Those would allow streamed input from a file, if parse() were a
-  // template function.
-
-  // Since JSONCPP_STRING is reference-counted, this at least does not
-  // create an extra copy.
-  JSONCPP_STRING doc;
-  std::getline(sin, doc, (char)EOF);
-  return parse(doc.data(), doc.data() + doc.size(), root, collectComments);
-}
-
-bool Reader::parse(const char* beginDoc,
-                   const char* endDoc,
-                   Value& root,
-                   bool collectComments) {
-  if (!features_.allowComments_) {
-    collectComments = false;
-  }
-
-  begin_ = beginDoc;
-  end_ = endDoc;
-  collectComments_ = collectComments;
-  current_ = begin_;
-  lastValueEnd_ = 0;
-  lastValue_ = 0;
-  commentsBefore_.clear();
-  errors_.clear();
-  while (!nodes_.empty())
-    nodes_.pop();
-  nodes_.push(&root);
-
-  bool successful = readValue();
-  Token token;
-  skipCommentTokens(token);
-  if (collectComments_ && !commentsBefore_.empty())
-    root.setComment(commentsBefore_, commentAfter);
-  if (features_.strictRoot_) {
-    if (!root.isArray() && !root.isObject()) {
-      // Set error location to start of doc, ideally should be first token found
-      // in doc
-      token.type_ = tokenError;
-      token.start_ = beginDoc;
-      token.end_ = endDoc;
-      addError(
-          "A valid JSON document must be either an array or an object value.",
-          token);
-      return false;
-    }
-  }
-  return successful;
-}
-
-bool Reader::readValue() {
-  // readValue() may call itself only if it calls readObject() or ReadArray().
-  // These methods execute nodes_.push() just before and nodes_.pop)() just after calling readValue(). 
-  // parse() executes one nodes_.push(), so > instead of >=.
-  if (nodes_.size() > stackLimit_g) throwRuntimeError("Exceeded stackLimit in readValue().");
-
-  Token token;
-  skipCommentTokens(token);
-  bool successful = true;
-
-  if (collectComments_ && !commentsBefore_.empty()) {
-    currentValue().setComment(commentsBefore_, commentBefore);
-    commentsBefore_.clear();
-  }
-
-  switch (token.type_) {
-  case tokenObjectBegin:
-    successful = readObject(token);
-    currentValue().setOffsetLimit(current_ - begin_);
-    break;
-  case tokenArrayBegin:
-    successful = readArray(token);
-    currentValue().setOffsetLimit(current_ - begin_);
-    break;
-  case tokenNumber:
-    successful = decodeNumber(token);
-    break;
-  case tokenString:
-    successful = decodeString(token);
-    break;
-  case tokenTrue:
-    {
-    Value v(true);
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenFalse:
-    {
-    Value v(false);
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenNull:
-    {
-    Value v;
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenArraySeparator:
-  case tokenObjectEnd:
-  case tokenArrayEnd:
-    if (features_.allowDroppedNullPlaceholders_) {
-      // "Un-read" the current token and mark the current value as a null
-      // token.
-      current_--;
-      Value v;
-      currentValue().swapPayload(v);
-      currentValue().setOffsetStart(current_ - begin_ - 1);
-      currentValue().setOffsetLimit(current_ - begin_);
-      break;
-    } // Else, fall through...
-  default:
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    return addError("Syntax error: value, object or array expected.", token);
-  }
-
-  if (collectComments_) {
-    lastValueEnd_ = current_;
-    lastValue_ = &currentValue();
-  }
-
-  return successful;
-}
-
-void Reader::skipCommentTokens(Token& token) {
-  if (features_.allowComments_) {
-    do {
-      readToken(token);
-    } while (token.type_ == tokenComment);
-  } else {
-    readToken(token);
-  }
-}
-
-bool Reader::readToken(Token& token) {
-  skipSpaces();
-  token.start_ = current_;
-  Char c = getNextChar();
-  bool ok = true;
-  switch (c) {
-  case '{':
-    token.type_ = tokenObjectBegin;
-    break;
-  case '}':
-    token.type_ = tokenObjectEnd;
-    break;
-  case '[':
-    token.type_ = tokenArrayBegin;
-    break;
-  case ']':
-    token.type_ = tokenArrayEnd;
-    break;
-  case '"':
-    token.type_ = tokenString;
-    ok = readString();
-    break;
-  case '/':
-    token.type_ = tokenComment;
-    ok = readComment();
-    break;
-  case '0':
-  case '1':
-  case '2':
-  case '3':
-  case '4':
-  case '5':
-  case '6':
-  case '7':
-  case '8':
-  case '9':
-  case '-':
-    token.type_ = tokenNumber;
-    readNumber();
-    break;
-  case 't':
-    token.type_ = tokenTrue;
-    ok = match("rue", 3);
-    break;
-  case 'f':
-    token.type_ = tokenFalse;
-    ok = match("alse", 4);
-    break;
-  case 'n':
-    token.type_ = tokenNull;
-    ok = match("ull", 3);
-    break;
-  case ',':
-    token.type_ = tokenArraySeparator;
-    break;
-  case ':':
-    token.type_ = tokenMemberSeparator;
-    break;
-  case 0:
-    token.type_ = tokenEndOfStream;
-    break;
-  default:
-    ok = false;
-    break;
-  }
-  if (!ok)
-    token.type_ = tokenError;
-  token.end_ = current_;
-  return true;
-}
-
-void Reader::skipSpaces() {
-  while (current_ != end_) {
-    Char c = *current_;
-    if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
-      ++current_;
-    else
-      break;
-  }
-}
-
-bool Reader::match(Location pattern, int patternLength) {
-  if (end_ - current_ < patternLength)
-    return false;
-  int index = patternLength;
-  while (index--)
-    if (current_[index] != pattern[index])
-      return false;
-  current_ += patternLength;
-  return true;
-}
-
-bool Reader::readComment() {
-  Location commentBegin = current_ - 1;
-  Char c = getNextChar();
-  bool successful = false;
-  if (c == '*')
-    successful = readCStyleComment();
-  else if (c == '/')
-    successful = readCppStyleComment();
-  if (!successful)
-    return false;
-
-  if (collectComments_) {
-    CommentPlacement placement = commentBefore;
-    if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
-      if (c != '*' || !containsNewLine(commentBegin, current_))
-        placement = commentAfterOnSameLine;
-    }
-
-    addComment(commentBegin, current_, placement);
-  }
-  return true;
-}
-
-JSONCPP_STRING Reader::normalizeEOL(Reader::Location begin, Reader::Location end) {
-  JSONCPP_STRING normalized;
-  normalized.reserve(static_cast<size_t>(end - begin));
-  Reader::Location current = begin;
-  while (current != end) {
-    char c = *current++;
-    if (c == '\r') {
-      if (current != end && *current == '\n')
-         // convert dos EOL
-         ++current;
-      // convert Mac EOL
-      normalized += '\n';
-    } else {
-      normalized += c;
-    }
-  }
-  return normalized;
-}
-
-void
-Reader::addComment(Location begin, Location end, CommentPlacement placement) {
-  assert(collectComments_);
-  const JSONCPP_STRING& normalized = normalizeEOL(begin, end);
-  if (placement == commentAfterOnSameLine) {
-    assert(lastValue_ != 0);
-    lastValue_->setComment(normalized, placement);
-  } else {
-    commentsBefore_ += normalized;
-  }
-}
-
-bool Reader::readCStyleComment() {
-  while ((current_ + 1) < end_) {
-    Char c = getNextChar();
-    if (c == '*' && *current_ == '/')
-      break;
-  }
-  return getNextChar() == '/';
-}
-
-bool Reader::readCppStyleComment() {
-  while (current_ != end_) {
-    Char c = getNextChar();
-    if (c == '\n')
-      break;
-    if (c == '\r') {
-      // Consume DOS EOL. It will be normalized in addComment.
-      if (current_ != end_ && *current_ == '\n')
-        getNextChar();
-      // Break on Moc OS 9 EOL.
-      break;
-    }
-  }
-  return true;
-}
-
-void Reader::readNumber() {
-  const char *p = current_;
-  char c = '0'; // stopgap for already consumed character
-  // integral part
-  while (c >= '0' && c <= '9')
-    c = (current_ = p) < end_ ? *p++ : '\0';
-  // fractional part
-  if (c == '.') {
-    c = (current_ = p) < end_ ? *p++ : '\0';
-    while (c >= '0' && c <= '9')
-      c = (current_ = p) < end_ ? *p++ : '\0';
-  }
-  // exponential part
-  if (c == 'e' || c == 'E') {
-    c = (current_ = p) < end_ ? *p++ : '\0';
-    if (c == '+' || c == '-')
-      c = (current_ = p) < end_ ? *p++ : '\0';
-    while (c >= '0' && c <= '9')
-      c = (current_ = p) < end_ ? *p++ : '\0';
-  }
-}
-
-bool Reader::readString() {
-  Char c = '\0';
-  while (current_ != end_) {
-    c = getNextChar();
-    if (c == '\\')
-      getNextChar();
-    else if (c == '"')
-      break;
-  }
-  return c == '"';
-}
-
-bool Reader::readObject(Token& tokenStart) {
-  Token tokenName;
-  JSONCPP_STRING name;
-  Value init(objectValue);
-  currentValue().swapPayload(init);
-  currentValue().setOffsetStart(tokenStart.start_ - begin_);
-  while (readToken(tokenName)) {
-    bool initialTokenOk = true;
-    while (tokenName.type_ == tokenComment && initialTokenOk)
-      initialTokenOk = readToken(tokenName);
-    if (!initialTokenOk)
-      break;
-    if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
-      return true;
-    name.clear();
-    if (tokenName.type_ == tokenString) {
-      if (!decodeString(tokenName, name))
-        return recoverFromError(tokenObjectEnd);
-    } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
-      Value numberName;
-      if (!decodeNumber(tokenName, numberName))
-        return recoverFromError(tokenObjectEnd);
-      name = JSONCPP_STRING(numberName.asCString());
-    } else {
-      break;
-    }
-
-    Token colon;
-    if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
-      return addErrorAndRecover(
-          "Missing ':' after object member name", colon, tokenObjectEnd);
-    }
-    Value& value = currentValue()[name];
-    nodes_.push(&value);
-    bool ok = readValue();
-    nodes_.pop();
-    if (!ok) // error already set
-      return recoverFromError(tokenObjectEnd);
-
-    Token comma;
-    if (!readToken(comma) ||
-        (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
-         comma.type_ != tokenComment)) {
-      return addErrorAndRecover(
-          "Missing ',' or '}' in object declaration", comma, tokenObjectEnd);
-    }
-    bool finalizeTokenOk = true;
-    while (comma.type_ == tokenComment && finalizeTokenOk)
-      finalizeTokenOk = readToken(comma);
-    if (comma.type_ == tokenObjectEnd)
-      return true;
-  }
-  return addErrorAndRecover(
-      "Missing '}' or object member name", tokenName, tokenObjectEnd);
-}
-
-bool Reader::readArray(Token& tokenStart) {
-  Value init(arrayValue);
-  currentValue().swapPayload(init);
-  currentValue().setOffsetStart(tokenStart.start_ - begin_);
-  skipSpaces();
-  if (current_ != end_ && *current_ == ']') // empty array
-  {
-    Token endArray;
-    readToken(endArray);
-    return true;
-  }
-  int index = 0;
-  for (;;) {
-    Value& value = currentValue()[index++];
-    nodes_.push(&value);
-    bool ok = readValue();
-    nodes_.pop();
-    if (!ok) // error already set
-      return recoverFromError(tokenArrayEnd);
-
-    Token token;
-    // Accept Comment after last item in the array.
-    ok = readToken(token);
-    while (token.type_ == tokenComment && ok) {
-      ok = readToken(token);
-    }
-    bool badTokenType =
-        (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd);
-    if (!ok || badTokenType) {
-      return addErrorAndRecover(
-          "Missing ',' or ']' in array declaration", token, tokenArrayEnd);
-    }
-    if (token.type_ == tokenArrayEnd)
-      break;
-  }
-  return true;
-}
-
-bool Reader::decodeNumber(Token& token) {
-  Value decoded;
-  if (!decodeNumber(token, decoded))
-    return false;
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool Reader::decodeNumber(Token& token, Value& decoded) {
-  // Attempts to parse the number as an integer. If the number is
-  // larger than the maximum supported value of an integer then
-  // we decode the number as a double.
-  Location current = token.start_;
-  bool isNegative = *current == '-';
-  if (isNegative)
-    ++current;
-  // TODO: Help the compiler do the div and mod at compile time or get rid of them.
-  Value::LargestUInt maxIntegerValue =
-      isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1
-                 : Value::maxLargestUInt;
-  Value::LargestUInt threshold = maxIntegerValue / 10;
-  Value::LargestUInt value = 0;
-  while (current < token.end_) {
-    Char c = *current++;
-    if (c < '0' || c > '9')
-      return decodeDouble(token, decoded);
-    Value::UInt digit(static_cast<Value::UInt>(c - '0'));
-    if (value >= threshold) {
-      // We've hit or exceeded the max value divided by 10 (rounded down). If
-      // a) we've only just touched the limit, b) this is the last digit, and
-      // c) it's small enough to fit in that rounding delta, we're okay.
-      // Otherwise treat this number as a double to avoid overflow.
-      if (value > threshold || current != token.end_ ||
-          digit > maxIntegerValue % 10) {
-        return decodeDouble(token, decoded);
-      }
-    }
-    value = value * 10 + digit;
-  }
-  if (isNegative && value == maxIntegerValue)
-    decoded = Value::minLargestInt;
-  else if (isNegative)
-    decoded = -Value::LargestInt(value);
-  else if (value <= Value::LargestUInt(Value::maxInt))
-    decoded = Value::LargestInt(value);
-  else
-    decoded = value;
-  return true;
-}
-
-bool Reader::decodeDouble(Token& token) {
-  Value decoded;
-  if (!decodeDouble(token, decoded))
-    return false;
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool Reader::decodeDouble(Token& token, Value& decoded) {
-  double value = 0;
-  JSONCPP_STRING buffer(token.start_, token.end_);
-  JSONCPP_ISTRINGSTREAM is(buffer);
-  if (!(is >> value))
-    return addError("'" + JSONCPP_STRING(token.start_, token.end_) +
-                        "' is not a number.",
-                    token);
-  decoded = value;
-  return true;
-}
-
-bool Reader::decodeString(Token& token) {
-  JSONCPP_STRING decoded_string;
-  if (!decodeString(token, decoded_string))
-    return false;
-  Value decoded(decoded_string);
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool Reader::decodeString(Token& token, JSONCPP_STRING& decoded) {
-  decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2));
-  Location current = token.start_ + 1; // skip '"'
-  Location end = token.end_ - 1;       // do not include '"'
-  while (current != end) {
-    Char c = *current++;
-    if (c == '"')
-      break;
-    else if (c == '\\') {
-      if (current == end)
-        return addError("Empty escape sequence in string", token, current);
-      Char escape = *current++;
-      switch (escape) {
-      case '"':
-        decoded += '"';
-        break;
-      case '/':
-        decoded += '/';
-        break;
-      case '\\':
-        decoded += '\\';
-        break;
-      case 'b':
-        decoded += '\b';
-        break;
-      case 'f':
-        decoded += '\f';
-        break;
-      case 'n':
-        decoded += '\n';
-        break;
-      case 'r':
-        decoded += '\r';
-        break;
-      case 't':
-        decoded += '\t';
-        break;
-      case 'u': {
-        unsigned int unicode;
-        if (!decodeUnicodeCodePoint(token, current, end, unicode))
-          return false;
-        decoded += codePointToUTF8(unicode);
-      } break;
-      default:
-        return addError("Bad escape sequence in string", token, current);
-      }
-    } else {
-      decoded += c;
-    }
-  }
-  return true;
-}
-
-bool Reader::decodeUnicodeCodePoint(Token& token,
-                                    Location& current,
-                                    Location end,
-                                    unsigned int& unicode) {
-
-  if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
-    return false;
-  if (unicode >= 0xD800 && unicode <= 0xDBFF) {
-    // surrogate pairs
-    if (end - current < 6)
-      return addError(
-          "additional six characters expected to parse unicode surrogate pair.",
-          token,
-          current);
-    unsigned int surrogatePair;
-    if (*(current++) == '\\' && *(current++) == 'u') {
-      if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
-        unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
-      } else
-        return false;
-    } else
-      return addError("expecting another \\u token to begin the second half of "
-                      "a unicode surrogate pair",
-                      token,
-                      current);
-  }
-  return true;
-}
-
-bool Reader::decodeUnicodeEscapeSequence(Token& token,
-                                         Location& current,
-                                         Location end,
-                                         unsigned int& ret_unicode) {
-  if (end - current < 4)
-    return addError(
-        "Bad unicode escape sequence in string: four digits expected.",
-        token,
-        current);
-  int unicode = 0;
-  for (int index = 0; index < 4; ++index) {
-    Char c = *current++;
-    unicode *= 16;
-    if (c >= '0' && c <= '9')
-      unicode += c - '0';
-    else if (c >= 'a' && c <= 'f')
-      unicode += c - 'a' + 10;
-    else if (c >= 'A' && c <= 'F')
-      unicode += c - 'A' + 10;
-    else
-      return addError(
-          "Bad unicode escape sequence in string: hexadecimal digit expected.",
-          token,
-          current);
-  }
-  ret_unicode = static_cast<unsigned int>(unicode);
-  return true;
-}
-
-bool
-Reader::addError(const JSONCPP_STRING& message, Token& token, Location extra) {
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = extra;
-  errors_.push_back(info);
-  return false;
-}
-
-bool Reader::recoverFromError(TokenType skipUntilToken) {
-  size_t const errorCount = errors_.size();
-  Token skip;
-  for (;;) {
-    if (!readToken(skip))
-      errors_.resize(errorCount); // discard errors caused by recovery
-    if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
-      break;
-  }
-  errors_.resize(errorCount);
-  return false;
-}
-
-bool Reader::addErrorAndRecover(const JSONCPP_STRING& message,
-                                Token& token,
-                                TokenType skipUntilToken) {
-  addError(message, token);
-  return recoverFromError(skipUntilToken);
-}
-
-Value& Reader::currentValue() { return *(nodes_.top()); }
-
-Reader::Char Reader::getNextChar() {
-  if (current_ == end_)
-    return 0;
-  return *current_++;
-}
-
-void Reader::getLocationLineAndColumn(Location location,
-                                      int& line,
-                                      int& column) const {
-  Location current = begin_;
-  Location lastLineStart = current;
-  line = 0;
-  while (current < location && current != end_) {
-    Char c = *current++;
-    if (c == '\r') {
-      if (*current == '\n')
-        ++current;
-      lastLineStart = current;
-      ++line;
-    } else if (c == '\n') {
-      lastLineStart = current;
-      ++line;
-    }
-  }
-  // column & line start at 1
-  column = int(location - lastLineStart) + 1;
-  ++line;
-}
-
-JSONCPP_STRING Reader::getLocationLineAndColumn(Location location) const {
-  int line, column;
-  getLocationLineAndColumn(location, line, column);
-  char buffer[18 + 16 + 16 + 1];
-  snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
-  return buffer;
-}
-
-// Deprecated. Preserved for backward compatibility
-JSONCPP_STRING Reader::getFormatedErrorMessages() const {
-  return getFormattedErrorMessages();
-}
-
-JSONCPP_STRING Reader::getFormattedErrorMessages() const {
-  JSONCPP_STRING formattedMessage;
-  for (Errors::const_iterator itError = errors_.begin();
-       itError != errors_.end();
-       ++itError) {
-    const ErrorInfo& error = *itError;
-    formattedMessage +=
-        "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
-    formattedMessage += "  " + error.message_ + "\n";
-    if (error.extra_)
-      formattedMessage +=
-          "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
-  }
-  return formattedMessage;
-}
-
-std::vector<Reader::StructuredError> Reader::getStructuredErrors() const {
-  std::vector<Reader::StructuredError> allErrors;
-  for (Errors::const_iterator itError = errors_.begin();
-       itError != errors_.end();
-       ++itError) {
-    const ErrorInfo& error = *itError;
-    Reader::StructuredError structured;
-    structured.offset_start = error.token_.start_ - begin_;
-    structured.offset_limit = error.token_.end_ - begin_;
-    structured.message = error.message_;
-    allErrors.push_back(structured);
-  }
-  return allErrors;
-}
-
-bool Reader::pushError(const Value& value, const JSONCPP_STRING& message) {
-  ptrdiff_t const length = end_ - begin_;
-  if(value.getOffsetStart() > length
-    || value.getOffsetLimit() > length)
-    return false;
-  Token token;
-  token.type_ = tokenError;
-  token.start_ = begin_ + value.getOffsetStart();
-  token.end_ = end_ + value.getOffsetLimit();
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = 0;
-  errors_.push_back(info);
-  return true;
-}
-
-bool Reader::pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra) {
-  ptrdiff_t const length = end_ - begin_;
-  if(value.getOffsetStart() > length
-    || value.getOffsetLimit() > length
-    || extra.getOffsetLimit() > length)
-    return false;
-  Token token;
-  token.type_ = tokenError;
-  token.start_ = begin_ + value.getOffsetStart();
-  token.end_ = begin_ + value.getOffsetLimit();
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = begin_ + extra.getOffsetStart();
-  errors_.push_back(info);
-  return true;
-}
-
-bool Reader::good() const {
-  return !errors_.size();
-}
-
-// exact copy of Features
-class OurFeatures {
-public:
-  static OurFeatures all();
-  bool allowComments_;
-  bool strictRoot_;
-  bool allowDroppedNullPlaceholders_;
-  bool allowNumericKeys_;
-  bool allowSingleQuotes_;
-  bool failIfExtra_;
-  bool rejectDupKeys_;
-  bool allowSpecialFloats_;
-  int stackLimit_;
-};  // OurFeatures
-
-// exact copy of Implementation of class Features
-// ////////////////////////////////
-
-OurFeatures OurFeatures::all() { return OurFeatures(); }
-
-// Implementation of class Reader
-// ////////////////////////////////
-
-// exact copy of Reader, renamed to OurReader
-class OurReader {
-public:
-  typedef char Char;
-  typedef const Char* Location;
-  struct StructuredError {
-    ptrdiff_t offset_start;
-    ptrdiff_t offset_limit;
-    JSONCPP_STRING message;
-  };
-
-  OurReader(OurFeatures const& features);
-  bool parse(const char* beginDoc,
-             const char* endDoc,
-             Value& root,
-             bool collectComments = true);
-  JSONCPP_STRING getFormattedErrorMessages() const;
-  std::vector<StructuredError> getStructuredErrors() const;
-  bool pushError(const Value& value, const JSONCPP_STRING& message);
-  bool pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra);
-  bool good() const;
-
-private:
-  OurReader(OurReader const&);  // no impl
-  void operator=(OurReader const&);  // no impl
-
-  enum TokenType {
-    tokenEndOfStream = 0,
-    tokenObjectBegin,
-    tokenObjectEnd,
-    tokenArrayBegin,
-    tokenArrayEnd,
-    tokenString,
-    tokenNumber,
-    tokenTrue,
-    tokenFalse,
-    tokenNull,
-    tokenNaN,
-    tokenPosInf,
-    tokenNegInf,
-    tokenArraySeparator,
-    tokenMemberSeparator,
-    tokenComment,
-    tokenError
-  };
-
-  class Token {
-  public:
-    TokenType type_;
-    Location start_;
-    Location end_;
-  };
-
-  class ErrorInfo {
-  public:
-    Token token_;
-    JSONCPP_STRING message_;
-    Location extra_;
-  };
-
-  typedef std::deque<ErrorInfo> Errors;
-
-  bool readToken(Token& token);
-  void skipSpaces();
-  bool match(Location pattern, int patternLength);
-  bool readComment();
-  bool readCStyleComment();
-  bool readCppStyleComment();
-  bool readString();
-  bool readStringSingleQuote();
-  bool readNumber(bool checkInf);
-  bool readValue();
-  bool readObject(Token& token);
-  bool readArray(Token& token);
-  bool decodeNumber(Token& token);
-  bool decodeNumber(Token& token, Value& decoded);
-  bool decodeString(Token& token);
-  bool decodeString(Token& token, JSONCPP_STRING& decoded);
-  bool decodeDouble(Token& token);
-  bool decodeDouble(Token& token, Value& decoded);
-  bool decodeUnicodeCodePoint(Token& token,
-                              Location& current,
-                              Location end,
-                              unsigned int& unicode);
-  bool decodeUnicodeEscapeSequence(Token& token,
-                                   Location& current,
-                                   Location end,
-                                   unsigned int& unicode);
-  bool addError(const JSONCPP_STRING& message, Token& token, Location extra = 0);
-  bool recoverFromError(TokenType skipUntilToken);
-  bool addErrorAndRecover(const JSONCPP_STRING& message,
-                          Token& token,
-                          TokenType skipUntilToken);
-  void skipUntilSpace();
-  Value& currentValue();
-  Char getNextChar();
-  void
-  getLocationLineAndColumn(Location location, int& line, int& column) const;
-  JSONCPP_STRING getLocationLineAndColumn(Location location) const;
-  void addComment(Location begin, Location end, CommentPlacement placement);
-  void skipCommentTokens(Token& token);
-
-  static JSONCPP_STRING normalizeEOL(Location begin, Location end);
-  static bool containsNewLine(Location begin, Location end);
-
-  typedef std::stack<Value*> Nodes;
-  Nodes nodes_;
-  Errors errors_;
-  JSONCPP_STRING document_;
-  Location begin_;
-  Location end_;
-  Location current_;
-  Location lastValueEnd_;
-  Value* lastValue_;
-  JSONCPP_STRING commentsBefore_;
-
-  OurFeatures const features_;
-  bool collectComments_;
-};  // OurReader
-
-// complete copy of Read impl, for OurReader
-
-bool OurReader::containsNewLine(OurReader::Location begin, OurReader::Location end) {
-  for (; begin < end; ++begin)
-    if (*begin == '\n' || *begin == '\r')
-      return true;
-  return false;
-}
-
-OurReader::OurReader(OurFeatures const& features)
-    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
-      lastValue_(), commentsBefore_(),
-      features_(features), collectComments_() {
-}
-
-bool OurReader::parse(const char* beginDoc,
-                   const char* endDoc,
-                   Value& root,
-                   bool collectComments) {
-  if (!features_.allowComments_) {
-    collectComments = false;
-  }
-
-  begin_ = beginDoc;
-  end_ = endDoc;
-  collectComments_ = collectComments;
-  current_ = begin_;
-  lastValueEnd_ = 0;
-  lastValue_ = 0;
-  commentsBefore_.clear();
-  errors_.clear();
-  while (!nodes_.empty())
-    nodes_.pop();
-  nodes_.push(&root);
-
-  bool successful = readValue();
-  Token token;
-  skipCommentTokens(token);
-  if (features_.failIfExtra_) {
-    if ((features_.strictRoot_ || token.type_ != tokenError) && token.type_ != tokenEndOfStream) {
-      addError("Extra non-whitespace after JSON value.", token);
-      return false;
-    }
-  }
-  if (collectComments_ && !commentsBefore_.empty())
-    root.setComment(commentsBefore_, commentAfter);
-  if (features_.strictRoot_) {
-    if (!root.isArray() && !root.isObject()) {
-      // Set error location to start of doc, ideally should be first token found
-      // in doc
-      token.type_ = tokenError;
-      token.start_ = beginDoc;
-      token.end_ = endDoc;
-      addError(
-          "A valid JSON document must be either an array or an object value.",
-          token);
-      return false;
-    }
-  }
-  return successful;
-}
-
-bool OurReader::readValue() {
-  //  To preserve the old behaviour we cast size_t to int.
-  if (static_cast<int>(nodes_.size()) > features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue().");
-  Token token;
-  skipCommentTokens(token);
-  bool successful = true;
-
-  if (collectComments_ && !commentsBefore_.empty()) {
-    currentValue().setComment(commentsBefore_, commentBefore);
-    commentsBefore_.clear();
-  }
-
-  switch (token.type_) {
-  case tokenObjectBegin:
-    successful = readObject(token);
-    currentValue().setOffsetLimit(current_ - begin_);
-    break;
-  case tokenArrayBegin:
-    successful = readArray(token);
-    currentValue().setOffsetLimit(current_ - begin_);
-    break;
-  case tokenNumber:
-    successful = decodeNumber(token);
-    break;
-  case tokenString:
-    successful = decodeString(token);
-    break;
-  case tokenTrue:
-    {
-    Value v(true);
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenFalse:
-    {
-    Value v(false);
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenNull:
-    {
-    Value v;
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenNaN:
-    {
-    Value v(std::numeric_limits<double>::quiet_NaN());
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenPosInf:
-    {
-    Value v(std::numeric_limits<double>::infinity());
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenNegInf:
-    {
-    Value v(-std::numeric_limits<double>::infinity());
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenArraySeparator:
-  case tokenObjectEnd:
-  case tokenArrayEnd:
-    if (features_.allowDroppedNullPlaceholders_) {
-      // "Un-read" the current token and mark the current value as a null
-      // token.
-      current_--;
-      Value v;
-      currentValue().swapPayload(v);
-      currentValue().setOffsetStart(current_ - begin_ - 1);
-      currentValue().setOffsetLimit(current_ - begin_);
-      break;
-    } // else, fall through ...
-  default:
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    return addError("Syntax error: value, object or array expected.", token);
-  }
-
-  if (collectComments_) {
-    lastValueEnd_ = current_;
-    lastValue_ = &currentValue();
-  }
-
-  return successful;
-}
-
-void OurReader::skipCommentTokens(Token& token) {
-  if (features_.allowComments_) {
-    do {
-      readToken(token);
-    } while (token.type_ == tokenComment);
-  } else {
-    readToken(token);
-  }
-}
-
-bool OurReader::readToken(Token& token) {
-  skipSpaces();
-  token.start_ = current_;
-  Char c = getNextChar();
-  bool ok = true;
-  switch (c) {
-  case '{':
-    token.type_ = tokenObjectBegin;
-    break;
-  case '}':
-    token.type_ = tokenObjectEnd;
-    break;
-  case '[':
-    token.type_ = tokenArrayBegin;
-    break;
-  case ']':
-    token.type_ = tokenArrayEnd;
-    break;
-  case '"':
-    token.type_ = tokenString;
-    ok = readString();
-    break;
-  case '\'':
-    if (features_.allowSingleQuotes_) {
-    token.type_ = tokenString;
-    ok = readStringSingleQuote();
-    break;
-    } // else continue
-  case '/':
-    token.type_ = tokenComment;
-    ok = readComment();
-    break;
-  case '0':
-  case '1':
-  case '2':
-  case '3':
-  case '4':
-  case '5':
-  case '6':
-  case '7':
-  case '8':
-  case '9':
-    token.type_ = tokenNumber;
-    readNumber(false);
-    break;
-  case '-':
-    if (readNumber(true)) {
-      token.type_ = tokenNumber;
-    } else {
-      token.type_ = tokenNegInf;
-      ok = features_.allowSpecialFloats_ && match("nfinity", 7);
-    }
-    break;
-  case 't':
-    token.type_ = tokenTrue;
-    ok = match("rue", 3);
-    break;
-  case 'f':
-    token.type_ = tokenFalse;
-    ok = match("alse", 4);
-    break;
-  case 'n':
-    token.type_ = tokenNull;
-    ok = match("ull", 3);
-    break;
-  case 'N':
-    if (features_.allowSpecialFloats_) {
-      token.type_ = tokenNaN;
-      ok = match("aN", 2);
-    } else {
-      ok = false;
-    }
-    break;
-  case 'I':
-    if (features_.allowSpecialFloats_) {
-      token.type_ = tokenPosInf;
-      ok = match("nfinity", 7);
-    } else {
-      ok = false;
-    }
-    break;
-  case ',':
-    token.type_ = tokenArraySeparator;
-    break;
-  case ':':
-    token.type_ = tokenMemberSeparator;
-    break;
-  case 0:
-    token.type_ = tokenEndOfStream;
-    break;
-  default:
-    ok = false;
-    break;
-  }
-  if (!ok)
-    token.type_ = tokenError;
-  token.end_ = current_;
-  return true;
-}
-
-void OurReader::skipSpaces() {
-  while (current_ != end_) {
-    Char c = *current_;
-    if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
-      ++current_;
-    else
-      break;
-  }
-}
-
-bool OurReader::match(Location pattern, int patternLength) {
-  if (end_ - current_ < patternLength)
-    return false;
-  int index = patternLength;
-  while (index--)
-    if (current_[index] != pattern[index])
-      return false;
-  current_ += patternLength;
-  return true;
-}
-
-bool OurReader::readComment() {
-  Location commentBegin = current_ - 1;
-  Char c = getNextChar();
-  bool successful = false;
-  if (c == '*')
-    successful = readCStyleComment();
-  else if (c == '/')
-    successful = readCppStyleComment();
-  if (!successful)
-    return false;
-
-  if (collectComments_) {
-    CommentPlacement placement = commentBefore;
-    if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
-      if (c != '*' || !containsNewLine(commentBegin, current_))
-        placement = commentAfterOnSameLine;
-    }
-
-    addComment(commentBegin, current_, placement);
-  }
-  return true;
-}
-
-JSONCPP_STRING OurReader::normalizeEOL(OurReader::Location begin, OurReader::Location end) {
-  JSONCPP_STRING normalized;
-  normalized.reserve(static_cast<size_t>(end - begin));
-  OurReader::Location current = begin;
-  while (current != end) {
-    char c = *current++;
-    if (c == '\r') {
-      if (current != end && *current == '\n')
-         // convert dos EOL
-         ++current;
-      // convert Mac EOL
-      normalized += '\n';
-    } else {
-      normalized += c;
-    }
-  }
-  return normalized;
-}
-
-void
-OurReader::addComment(Location begin, Location end, CommentPlacement placement) {
-  assert(collectComments_);
-  const JSONCPP_STRING& normalized = normalizeEOL(begin, end);
-  if (placement == commentAfterOnSameLine) {
-    assert(lastValue_ != 0);
-    lastValue_->setComment(normalized, placement);
-  } else {
-    commentsBefore_ += normalized;
-  }
-}
-
-bool OurReader::readCStyleComment() {
-  while ((current_ + 1) < end_) {
-    Char c = getNextChar();
-    if (c == '*' && *current_ == '/')
-      break;
-  }
-  return getNextChar() == '/';
-}
-
-bool OurReader::readCppStyleComment() {
-  while (current_ != end_) {
-    Char c = getNextChar();
-    if (c == '\n')
-      break;
-    if (c == '\r') {
-      // Consume DOS EOL. It will be normalized in addComment.
-      if (current_ != end_ && *current_ == '\n')
-        getNextChar();
-      // Break on Moc OS 9 EOL.
-      break;
-    }
-  }
-  return true;
-}
-
-bool OurReader::readNumber(bool checkInf) {
-  const char *p = current_;
-  if (checkInf && p != end_ && *p == 'I') {
-    current_ = ++p;
-    return false;
-  }
-  char c = '0'; // stopgap for already consumed character
-  // integral part
-  while (c >= '0' && c <= '9')
-    c = (current_ = p) < end_ ? *p++ : '\0';
-  // fractional part
-  if (c == '.') {
-    c = (current_ = p) < end_ ? *p++ : '\0';
-    while (c >= '0' && c <= '9')
-      c = (current_ = p) < end_ ? *p++ : '\0';
-  }
-  // exponential part
-  if (c == 'e' || c == 'E') {
-    c = (current_ = p) < end_ ? *p++ : '\0';
-    if (c == '+' || c == '-')
-      c = (current_ = p) < end_ ? *p++ : '\0';
-    while (c >= '0' && c <= '9')
-      c = (current_ = p) < end_ ? *p++ : '\0';
-  }
-  return true;
-}
-bool OurReader::readString() {
-  Char c = 0;
-  while (current_ != end_) {
-    c = getNextChar();
-    if (c == '\\')
-      getNextChar();
-    else if (c == '"')
-      break;
-  }
-  return c == '"';
-}
-
-
-bool OurReader::readStringSingleQuote() {
-  Char c = 0;
-  while (current_ != end_) {
-    c = getNextChar();
-    if (c == '\\')
-      getNextChar();
-    else if (c == '\'')
-      break;
-  }
-  return c == '\'';
-}
-
-bool OurReader::readObject(Token& tokenStart) {
-  Token tokenName;
-  JSONCPP_STRING name;
-  Value init(objectValue);
-  currentValue().swapPayload(init);
-  currentValue().setOffsetStart(tokenStart.start_ - begin_);
-  while (readToken(tokenName)) {
-    bool initialTokenOk = true;
-    while (tokenName.type_ == tokenComment && initialTokenOk)
-      initialTokenOk = readToken(tokenName);
-    if (!initialTokenOk)
-      break;
-    if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
-      return true;
-    name.clear();
-    if (tokenName.type_ == tokenString) {
-      if (!decodeString(tokenName, name))
-        return recoverFromError(tokenObjectEnd);
-    } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
-      Value numberName;
-      if (!decodeNumber(tokenName, numberName))
-        return recoverFromError(tokenObjectEnd);
-      name = numberName.asString();
-    } else {
-      break;
-    }
-
-    Token colon;
-    if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
-      return addErrorAndRecover(
-          "Missing ':' after object member name", colon, tokenObjectEnd);
-    }
-    if (name.length() >= (1U<<30)) throwRuntimeError("keylength >= 2^30");
-    if (features_.rejectDupKeys_ && currentValue().isMember(name)) {
-      JSONCPP_STRING msg = "Duplicate key: '" + name + "'";
-      return addErrorAndRecover(
-          msg, tokenName, tokenObjectEnd);
-    }
-    Value& value = currentValue()[name];
-    nodes_.push(&value);
-    bool ok = readValue();
-    nodes_.pop();
-    if (!ok) // error already set
-      return recoverFromError(tokenObjectEnd);
-
-    Token comma;
-    if (!readToken(comma) ||
-        (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
-         comma.type_ != tokenComment)) {
-      return addErrorAndRecover(
-          "Missing ',' or '}' in object declaration", comma, tokenObjectEnd);
-    }
-    bool finalizeTokenOk = true;
-    while (comma.type_ == tokenComment && finalizeTokenOk)
-      finalizeTokenOk = readToken(comma);
-    if (comma.type_ == tokenObjectEnd)
-      return true;
-  }
-  return addErrorAndRecover(
-      "Missing '}' or object member name", tokenName, tokenObjectEnd);
-}
-
-bool OurReader::readArray(Token& tokenStart) {
-  Value init(arrayValue);
-  currentValue().swapPayload(init);
-  currentValue().setOffsetStart(tokenStart.start_ - begin_);
-  skipSpaces();
-  if (current_ != end_ && *current_ == ']') // empty array
-  {
-    Token endArray;
-    readToken(endArray);
-    return true;
-  }
-  int index = 0;
-  for (;;) {
-    Value& value = currentValue()[index++];
-    nodes_.push(&value);
-    bool ok = readValue();
-    nodes_.pop();
-    if (!ok) // error already set
-      return recoverFromError(tokenArrayEnd);
-
-    Token token;
-    // Accept Comment after last item in the array.
-    ok = readToken(token);
-    while (token.type_ == tokenComment && ok) {
-      ok = readToken(token);
-    }
-    bool badTokenType =
-        (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd);
-    if (!ok || badTokenType) {
-      return addErrorAndRecover(
-          "Missing ',' or ']' in array declaration", token, tokenArrayEnd);
-    }
-    if (token.type_ == tokenArrayEnd)
-      break;
-  }
-  return true;
-}
-
-bool OurReader::decodeNumber(Token& token) {
-  Value decoded;
-  if (!decodeNumber(token, decoded))
-    return false;
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool OurReader::decodeNumber(Token& token, Value& decoded) {
-  // Attempts to parse the number as an integer. If the number is
-  // larger than the maximum supported value of an integer then
-  // we decode the number as a double.
-  Location current = token.start_;
-  bool isNegative = *current == '-';
-  if (isNegative)
-    ++current;
-  // TODO: Help the compiler do the div and mod at compile time or get rid of them.
-  Value::LargestUInt maxIntegerValue =
-      isNegative ? Value::LargestUInt(-Value::minLargestInt)
-                 : Value::maxLargestUInt;
-  Value::LargestUInt threshold = maxIntegerValue / 10;
-  Value::LargestUInt value = 0;
-  while (current < token.end_) {
-    Char c = *current++;
-    if (c < '0' || c > '9')
-      return decodeDouble(token, decoded);
-    Value::UInt digit(static_cast<Value::UInt>(c - '0'));
-    if (value >= threshold) {
-      // We've hit or exceeded the max value divided by 10 (rounded down). If
-      // a) we've only just touched the limit, b) this is the last digit, and
-      // c) it's small enough to fit in that rounding delta, we're okay.
-      // Otherwise treat this number as a double to avoid overflow.
-      if (value > threshold || current != token.end_ ||
-          digit > maxIntegerValue % 10) {
-        return decodeDouble(token, decoded);
-      }
-    }
-    value = value * 10 + digit;
-  }
-  if (isNegative)
-    decoded = -Value::LargestInt(value);
-  else if (value <= Value::LargestUInt(Value::maxInt))
-    decoded = Value::LargestInt(value);
-  else
-    decoded = value;
-  return true;
-}
-
-bool OurReader::decodeDouble(Token& token) {
-  Value decoded;
-  if (!decodeDouble(token, decoded))
-    return false;
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool OurReader::decodeDouble(Token& token, Value& decoded) {
-  double value = 0;
-  const int bufferSize = 32;
-  int count;
-  ptrdiff_t const length = token.end_ - token.start_;
-
-  // Sanity check to avoid buffer overflow exploits.
-  if (length < 0) {
-    return addError("Unable to parse token length", token);
-  }
-  size_t const ulength = static_cast<size_t>(length);
-
-  // Avoid using a string constant for the format control string given to
-  // sscanf, as this can cause hard to debug crashes on OS X. See here for more
-  // info:
-  //
-  //     http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html
-  char format[] = "%lf";
-
-  if (length <= bufferSize) {
-    Char buffer[bufferSize + 1];
-    memcpy(buffer, token.start_, ulength);
-    buffer[length] = 0;
-    fixNumericLocaleInput(buffer, buffer + length);
-    count = sscanf(buffer, format, &value);
-  } else {
-    JSONCPP_STRING buffer(token.start_, token.end_);
-    count = sscanf(buffer.c_str(), format, &value);
-  }
-
-  if (count != 1)
-    return addError("'" + JSONCPP_STRING(token.start_, token.end_) +
-                        "' is not a number.",
-                    token);
-  decoded = value;
-  return true;
-}
-
-bool OurReader::decodeString(Token& token) {
-  JSONCPP_STRING decoded_string;
-  if (!decodeString(token, decoded_string))
-    return false;
-  Value decoded(decoded_string);
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool OurReader::decodeString(Token& token, JSONCPP_STRING& decoded) {
-  decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2));
-  Location current = token.start_ + 1; // skip '"'
-  Location end = token.end_ - 1;       // do not include '"'
-  while (current != end) {
-    Char c = *current++;
-    if (c == '"')
-      break;
-    else if (c == '\\') {
-      if (current == end)
-        return addError("Empty escape sequence in string", token, current);
-      Char escape = *current++;
-      switch (escape) {
-      case '"':
-        decoded += '"';
-        break;
-      case '/':
-        decoded += '/';
-        break;
-      case '\\':
-        decoded += '\\';
-        break;
-      case 'b':
-        decoded += '\b';
-        break;
-      case 'f':
-        decoded += '\f';
-        break;
-      case 'n':
-        decoded += '\n';
-        break;
-      case 'r':
-        decoded += '\r';
-        break;
-      case 't':
-        decoded += '\t';
-        break;
-      case 'u': {
-        unsigned int unicode;
-        if (!decodeUnicodeCodePoint(token, current, end, unicode))
-          return false;
-        decoded += codePointToUTF8(unicode);
-      } break;
-      default:
-        return addError("Bad escape sequence in string", token, current);
-      }
-    } else {
-      decoded += c;
-    }
-  }
-  return true;
-}
-
-bool OurReader::decodeUnicodeCodePoint(Token& token,
-                                    Location& current,
-                                    Location end,
-                                    unsigned int& unicode) {
-
-  if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
-    return false;
-  if (unicode >= 0xD800 && unicode <= 0xDBFF) {
-    // surrogate pairs
-    if (end - current < 6)
-      return addError(
-          "additional six characters expected to parse unicode surrogate pair.",
-          token,
-          current);
-    unsigned int surrogatePair;
-    if (*(current++) == '\\' && *(current++) == 'u') {
-      if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
-        unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
-      } else
-        return false;
-    } else
-      return addError("expecting another \\u token to begin the second half of "
-                      "a unicode surrogate pair",
-                      token,
-                      current);
-  }
-  return true;
-}
-
-bool OurReader::decodeUnicodeEscapeSequence(Token& token,
-                                         Location& current,
-                                         Location end,
-                                         unsigned int& ret_unicode) {
-  if (end - current < 4)
-    return addError(
-        "Bad unicode escape sequence in string: four digits expected.",
-        token,
-        current);
-  int unicode = 0;
-  for (int index = 0; index < 4; ++index) {
-    Char c = *current++;
-    unicode *= 16;
-    if (c >= '0' && c <= '9')
-      unicode += c - '0';
-    else if (c >= 'a' && c <= 'f')
-      unicode += c - 'a' + 10;
-    else if (c >= 'A' && c <= 'F')
-      unicode += c - 'A' + 10;
-    else
-      return addError(
-          "Bad unicode escape sequence in string: hexadecimal digit expected.",
-          token,
-          current);
-  }
-  ret_unicode = static_cast<unsigned int>(unicode);
-  return true;
-}
-
-bool
-OurReader::addError(const JSONCPP_STRING& message, Token& token, Location extra) {
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = extra;
-  errors_.push_back(info);
-  return false;
-}
-
-bool OurReader::recoverFromError(TokenType skipUntilToken) {
-  size_t errorCount = errors_.size();
-  Token skip;
-  for (;;) {
-    if (!readToken(skip))
-      errors_.resize(errorCount); // discard errors caused by recovery
-    if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
-      break;
-  }
-  errors_.resize(errorCount);
-  return false;
-}
-
-bool OurReader::addErrorAndRecover(const JSONCPP_STRING& message,
-                                Token& token,
-                                TokenType skipUntilToken) {
-  addError(message, token);
-  return recoverFromError(skipUntilToken);
-}
-
-Value& OurReader::currentValue() { return *(nodes_.top()); }
-
-OurReader::Char OurReader::getNextChar() {
-  if (current_ == end_)
-    return 0;
-  return *current_++;
-}
-
-void OurReader::getLocationLineAndColumn(Location location,
-                                      int& line,
-                                      int& column) const {
-  Location current = begin_;
-  Location lastLineStart = current;
-  line = 0;
-  while (current < location && current != end_) {
-    Char c = *current++;
-    if (c == '\r') {
-      if (*current == '\n')
-        ++current;
-      lastLineStart = current;
-      ++line;
-    } else if (c == '\n') {
-      lastLineStart = current;
-      ++line;
-    }
-  }
-  // column & line start at 1
-  column = int(location - lastLineStart) + 1;
-  ++line;
-}
-
-JSONCPP_STRING OurReader::getLocationLineAndColumn(Location location) const {
-  int line, column;
-  getLocationLineAndColumn(location, line, column);
-  char buffer[18 + 16 + 16 + 1];
-  snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
-  return buffer;
-}
-
-JSONCPP_STRING OurReader::getFormattedErrorMessages() const {
-  JSONCPP_STRING formattedMessage;
-  for (Errors::const_iterator itError = errors_.begin();
-       itError != errors_.end();
-       ++itError) {
-    const ErrorInfo& error = *itError;
-    formattedMessage +=
-        "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
-    formattedMessage += "  " + error.message_ + "\n";
-    if (error.extra_)
-      formattedMessage +=
-          "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
-  }
-  return formattedMessage;
-}
-
-std::vector<OurReader::StructuredError> OurReader::getStructuredErrors() const {
-  std::vector<OurReader::StructuredError> allErrors;
-  for (Errors::const_iterator itError = errors_.begin();
-       itError != errors_.end();
-       ++itError) {
-    const ErrorInfo& error = *itError;
-    OurReader::StructuredError structured;
-    structured.offset_start = error.token_.start_ - begin_;
-    structured.offset_limit = error.token_.end_ - begin_;
-    structured.message = error.message_;
-    allErrors.push_back(structured);
-  }
-  return allErrors;
-}
-
-bool OurReader::pushError(const Value& value, const JSONCPP_STRING& message) {
-  ptrdiff_t length = end_ - begin_;
-  if(value.getOffsetStart() > length
-    || value.getOffsetLimit() > length)
-    return false;
-  Token token;
-  token.type_ = tokenError;
-  token.start_ = begin_ + value.getOffsetStart();
-  token.end_ = end_ + value.getOffsetLimit();
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = 0;
-  errors_.push_back(info);
-  return true;
-}
-
-bool OurReader::pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra) {
-  ptrdiff_t length = end_ - begin_;
-  if(value.getOffsetStart() > length
-    || value.getOffsetLimit() > length
-    || extra.getOffsetLimit() > length)
-    return false;
-  Token token;
-  token.type_ = tokenError;
-  token.start_ = begin_ + value.getOffsetStart();
-  token.end_ = begin_ + value.getOffsetLimit();
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = begin_ + extra.getOffsetStart();
-  errors_.push_back(info);
-  return true;
-}
-
-bool OurReader::good() const {
-  return !errors_.size();
-}
-
-
-class OurCharReader : public CharReader {
-  bool const collectComments_;
-  OurReader reader_;
-public:
-  OurCharReader(
-    bool collectComments,
-    OurFeatures const& features)
-  : collectComments_(collectComments)
-  , reader_(features)
-  {}
-  bool parse(
-      char const* beginDoc, char const* endDoc,
-      Value* root, JSONCPP_STRING* errs) JSONCPP_OVERRIDE {
-    bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_);
-    if (errs) {
-      *errs = reader_.getFormattedErrorMessages();
-    }
-    return ok;
-  }
-};
-
-CharReaderBuilder::CharReaderBuilder()
-{
-  setDefaults(&settings_);
-}
-CharReaderBuilder::~CharReaderBuilder()
-{}
-CharReader* CharReaderBuilder::newCharReader() const
-{
-  bool collectComments = settings_["collectComments"].asBool();
-  OurFeatures features = OurFeatures::all();
-  features.allowComments_ = settings_["allowComments"].asBool();
-  features.strictRoot_ = settings_["strictRoot"].asBool();
-  features.allowDroppedNullPlaceholders_ = settings_["allowDroppedNullPlaceholders"].asBool();
-  features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool();
-  features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool();
-  features.stackLimit_ = settings_["stackLimit"].asInt();
-  features.failIfExtra_ = settings_["failIfExtra"].asBool();
-  features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool();
-  features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool();
-  return new OurCharReader(collectComments, features);
-}
-static void getValidReaderKeys(std::set<JSONCPP_STRING>* valid_keys)
-{
-  valid_keys->clear();
-  valid_keys->insert("collectComments");
-  valid_keys->insert("allowComments");
-  valid_keys->insert("strictRoot");
-  valid_keys->insert("allowDroppedNullPlaceholders");
-  valid_keys->insert("allowNumericKeys");
-  valid_keys->insert("allowSingleQuotes");
-  valid_keys->insert("stackLimit");
-  valid_keys->insert("failIfExtra");
-  valid_keys->insert("rejectDupKeys");
-  valid_keys->insert("allowSpecialFloats");
-}
-bool CharReaderBuilder::validate(Json::Value* invalid) const
-{
-  Json::Value my_invalid;
-  if (!invalid) invalid = &my_invalid;  // so we do not need to test for NULL
-  Json::Value& inv = *invalid;
-  std::set<JSONCPP_STRING> valid_keys;
-  getValidReaderKeys(&valid_keys);
-  Value::Members keys = settings_.getMemberNames();
-  size_t n = keys.size();
-  for (size_t i = 0; i < n; ++i) {
-    JSONCPP_STRING const& key = keys[i];
-    if (valid_keys.find(key) == valid_keys.end()) {
-      inv[key] = settings_[key];
-    }
-  }
-  return 0u == inv.size();
-}
-Value& CharReaderBuilder::operator[](JSONCPP_STRING key)
-{
-  return settings_[key];
-}
-// static
-void CharReaderBuilder::strictMode(Json::Value* settings)
-{
-//! [CharReaderBuilderStrictMode]
-  (*settings)["allowComments"] = false;
-  (*settings)["strictRoot"] = true;
-  (*settings)["allowDroppedNullPlaceholders"] = false;
-  (*settings)["allowNumericKeys"] = false;
-  (*settings)["allowSingleQuotes"] = false;
-  (*settings)["stackLimit"] = 1000;
-  (*settings)["failIfExtra"] = true;
-  (*settings)["rejectDupKeys"] = true;
-  (*settings)["allowSpecialFloats"] = false;
-//! [CharReaderBuilderStrictMode]
-}
-// static
-void CharReaderBuilder::setDefaults(Json::Value* settings)
-{
-//! [CharReaderBuilderDefaults]
-  (*settings)["collectComments"] = true;
-  (*settings)["allowComments"] = true;
-  (*settings)["strictRoot"] = false;
-  (*settings)["allowDroppedNullPlaceholders"] = false;
-  (*settings)["allowNumericKeys"] = false;
-  (*settings)["allowSingleQuotes"] = false;
-  (*settings)["stackLimit"] = 1000;
-  (*settings)["failIfExtra"] = false;
-  (*settings)["rejectDupKeys"] = false;
-  (*settings)["allowSpecialFloats"] = false;
-//! [CharReaderBuilderDefaults]
-}
-
-//////////////////////////////////
-// global functions
-
-bool parseFromStream(
-    CharReader::Factory const& fact, JSONCPP_ISTREAM& sin,
-    Value* root, JSONCPP_STRING* errs)
-{
-  JSONCPP_OSTRINGSTREAM ssin;
-  ssin << sin.rdbuf();
-  JSONCPP_STRING doc = ssin.str();
-  char const* begin = doc.data();
-  char const* end = begin + doc.size();
-  // Note that we do not actually need a null-terminator.
-  CharReaderPtr const reader(fact.newCharReader());
-  return reader->parse(begin, end, root, errs);
-}
-
-JSONCPP_ISTREAM& operator>>(JSONCPP_ISTREAM& sin, Value& root) {
-  CharReaderBuilder b;
-  JSONCPP_STRING errs;
-  bool ok = parseFromStream(b, sin, &root, &errs);
-  if (!ok) {
-    throwRuntimeError(errs);
-  }
-  return sin;
-}
-
-} // namespace Json
diff --git a/3rdParty/jsoncpp/src/lib_json/json_tool.h b/3rdParty/jsoncpp/src/lib_json/json_tool.h
deleted file mode 100644
index 431617830ce07b2c0730a4808737de04d816afa7..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/lib_json/json_tool.h
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED
-#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED
-
-
-// Also support old flag NO_LOCALE_SUPPORT
-#ifdef NO_LOCALE_SUPPORT
-#define JSONCPP_NO_LOCALE_SUPPORT
-#endif
-
-#ifndef JSONCPP_NO_LOCALE_SUPPORT
-#include <clocale>
-#endif
-
-/* This header provides common string manipulation support, such as UTF-8,
- * portable conversion from/to string...
- *
- * It is an internal header that must not be exposed.
- */
-
-namespace Json {
-static char getDecimalPoint() {
-#ifdef JSONCPP_NO_LOCALE_SUPPORT
-  return '\0';
-#else
-  struct lconv* lc = localeconv();
-  return lc ? *(lc->decimal_point) : '\0';
-#endif
-}
-
-/// Converts a unicode code-point to UTF-8.
-static inline JSONCPP_STRING codePointToUTF8(unsigned int cp) {
-  JSONCPP_STRING result;
-
-  // based on description from http://en.wikipedia.org/wiki/UTF-8
-
-  if (cp <= 0x7f) {
-    result.resize(1);
-    result[0] = static_cast<char>(cp);
-  } else if (cp <= 0x7FF) {
-    result.resize(2);
-    result[1] = static_cast<char>(0x80 | (0x3f & cp));
-    result[0] = static_cast<char>(0xC0 | (0x1f & (cp >> 6)));
-  } else if (cp <= 0xFFFF) {
-    result.resize(3);
-    result[2] = static_cast<char>(0x80 | (0x3f & cp));
-    result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
-    result[0] = static_cast<char>(0xE0 | (0xf & (cp >> 12)));
-  } else if (cp <= 0x10FFFF) {
-    result.resize(4);
-    result[3] = static_cast<char>(0x80 | (0x3f & cp));
-    result[2] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
-    result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 12)));
-    result[0] = static_cast<char>(0xF0 | (0x7 & (cp >> 18)));
-  }
-
-  return result;
-}
-
-/// Returns true if ch is a control character (in range [1,31]).
-static inline bool isControlCharacter(char ch) { return ch > 0 && ch <= 0x1F; }
-
-enum {
-  /// Constant that specify the size of the buffer that must be passed to
-  /// uintToString.
-  uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1
-};
-
-// Defines a char buffer for use with uintToString().
-typedef char UIntToStringBuffer[uintToStringBufferSize];
-
-/** Converts an unsigned integer to string.
- * @param value Unsigned interger to convert to string
- * @param current Input/Output string buffer.
- *        Must have at least uintToStringBufferSize chars free.
- */
-static inline void uintToString(LargestUInt value, char*& current) {
-  *--current = 0;
-  do {
-    *--current = static_cast<char>(value % 10U + static_cast<unsigned>('0'));
-    value /= 10;
-  } while (value != 0);
-}
-
-/** Change ',' to '.' everywhere in buffer.
- *
- * We had a sophisticated way, but it did not work in WinCE.
- * @see https://github.com/open-source-parsers/jsoncpp/pull/9
- */
-static inline void fixNumericLocale(char* begin, char* end) {
-  while (begin < end) {
-    if (*begin == ',') {
-      *begin = '.';
-    }
-    ++begin;
-  }
-}
-
-static inline void fixNumericLocaleInput(char* begin, char* end) {
-  char decimalPoint = getDecimalPoint();
-  if (decimalPoint != '\0' && decimalPoint != '.') {
-    while (begin < end) {
-      if (*begin == '.') {
-        *begin = decimalPoint;
-      }
-      ++begin;
-    }
-  }
-}
-
-} // namespace Json {
-
-#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED
diff --git a/3rdParty/jsoncpp/src/lib_json/json_value.cpp b/3rdParty/jsoncpp/src/lib_json/json_value.cpp
deleted file mode 100644
index 5197d18618a251dd3de48ec3bac7f2a7f9ee7ca2..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/lib_json/json_value.cpp
+++ /dev/null
@@ -1,1661 +0,0 @@
-// Copyright 2011 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include <json/assertions.h>
-#include <json/value.h>
-#include <json/writer.h>
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <math.h>
-#include <sstream>
-#include <utility>
-#include <cstring>
-#include <cassert>
-#ifdef JSON_USE_CPPTL
-#include <cpptl/conststring.h>
-#endif
-#include <cstddef> // size_t
-#include <algorithm> // min()
-
-#define JSON_ASSERT_UNREACHABLE assert(false)
-
-namespace Json {
-
-// This is a walkaround to avoid the static initialization of Value::null.
-// kNull must be word-aligned to avoid crashing on ARM.  We use an alignment of
-// 8 (instead of 4) as a bit of future-proofing.
-#if defined(__ARMEL__)
-#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment)))
-#else
-#define ALIGNAS(byte_alignment)
-#endif
-//static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 };
-//const unsigned char& kNullRef = kNull[0];
-//const Value& Value::null = reinterpret_cast<const Value&>(kNullRef);
-//const Value& Value::nullRef = null;
-
-// static
-Value const& Value::nullSingleton()
-{
- static Value const nullStatic;
- return nullStatic;
-}
-
-// for backwards compatibility, we'll leave these global references around, but DO NOT
-// use them in JSONCPP library code any more!
-Value const& Value::null = Value::nullSingleton();
-Value const& Value::nullRef = Value::nullSingleton();
-
-const Int Value::minInt = Int(~(UInt(-1) / 2));
-const Int Value::maxInt = Int(UInt(-1) / 2);
-const UInt Value::maxUInt = UInt(-1);
-#if defined(JSON_HAS_INT64)
-const Int64 Value::minInt64 = Int64(~(UInt64(-1) / 2));
-const Int64 Value::maxInt64 = Int64(UInt64(-1) / 2);
-const UInt64 Value::maxUInt64 = UInt64(-1);
-// The constant is hard-coded because some compiler have trouble
-// converting Value::maxUInt64 to a double correctly (AIX/xlC).
-// Assumes that UInt64 is a 64 bits integer.
-static const double maxUInt64AsDouble = 18446744073709551615.0;
-#endif // defined(JSON_HAS_INT64)
-const LargestInt Value::minLargestInt = LargestInt(~(LargestUInt(-1) / 2));
-const LargestInt Value::maxLargestInt = LargestInt(LargestUInt(-1) / 2);
-const LargestUInt Value::maxLargestUInt = LargestUInt(-1);
-
-#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-template <typename T, typename U>
-static inline bool InRange(double d, T min, U max) {
-  // The casts can lose precision, but we are looking only for
-  // an approximate range. Might fail on edge cases though. ~cdunn
-  //return d >= static_cast<double>(min) && d <= static_cast<double>(max);
-  return d >= min && d <= max;
-}
-#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-static inline double integerToDouble(Json::UInt64 value) {
-  return static_cast<double>(Int64(value / 2)) * 2.0 + static_cast<double>(Int64(value & 1));
-}
-
-template <typename T> static inline double integerToDouble(T value) {
-  return static_cast<double>(value);
-}
-
-template <typename T, typename U>
-static inline bool InRange(double d, T min, U max) {
-  return d >= integerToDouble(min) && d <= integerToDouble(max);
-}
-#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-
-/** Duplicates the specified string value.
- * @param value Pointer to the string to duplicate. Must be zero-terminated if
- *              length is "unknown".
- * @param length Length of the value. if equals to unknown, then it will be
- *               computed using strlen(value).
- * @return Pointer on the duplicate instance of string.
- */
-static inline char* duplicateStringValue(const char* value,
-                                         size_t length)
-{
-  // Avoid an integer overflow in the call to malloc below by limiting length
-  // to a sane value.
-  if (length >= static_cast<size_t>(Value::maxInt))
-    length = Value::maxInt - 1;
-
-  char* newString = static_cast<char*>(malloc(length + 1));
-  if (newString == NULL) {
-    throwRuntimeError(
-        "in Json::Value::duplicateStringValue(): "
-        "Failed to allocate string value buffer");
-  }
-  memcpy(newString, value, length);
-  newString[length] = 0;
-  return newString;
-}
-
-/* Record the length as a prefix.
- */
-static inline char* duplicateAndPrefixStringValue(
-    const char* value,
-    unsigned int length)
-{
-  // Avoid an integer overflow in the call to malloc below by limiting length
-  // to a sane value.
-  JSON_ASSERT_MESSAGE(length <= static_cast<unsigned>(Value::maxInt) - sizeof(unsigned) - 1U,
-                      "in Json::Value::duplicateAndPrefixStringValue(): "
-                      "length too big for prefixing");
-  unsigned actualLength = length + static_cast<unsigned>(sizeof(unsigned)) + 1U;
-  char* newString = static_cast<char*>(malloc(actualLength));
-  if (newString == 0) {
-    throwRuntimeError(
-        "in Json::Value::duplicateAndPrefixStringValue(): "
-        "Failed to allocate string value buffer");
-  }
-  *reinterpret_cast<unsigned*>(newString) = length;
-  memcpy(newString + sizeof(unsigned), value, length);
-  newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later
-  return newString;
-}
-inline static void decodePrefixedString(
-    bool isPrefixed, char const* prefixed,
-    unsigned* length, char const** value)
-{
-  if (!isPrefixed) {
-    *length = static_cast<unsigned>(strlen(prefixed));
-    *value = prefixed;
-  } else {
-    *length = *reinterpret_cast<unsigned const*>(prefixed);
-    *value = prefixed + sizeof(unsigned);
-  }
-}
-/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue().
- */
-#if JSONCPP_USING_SECURE_MEMORY
-static inline void releasePrefixedStringValue(char* value) {
-  unsigned length = 0;
-  char const* valueDecoded;
-  decodePrefixedString(true, value, &length, &valueDecoded);
-  size_t const size = sizeof(unsigned) + length + 1U;
-  memset(value, 0, size);
-  free(value);
-}
-static inline void releaseStringValue(char* value, unsigned length) {
-  // length==0 => we allocated the strings memory
-  size_t size = (length==0) ? strlen(value) : length;
-  memset(value, 0, size);
-  free(value);
-}
-#else // !JSONCPP_USING_SECURE_MEMORY
-static inline void releasePrefixedStringValue(char* value) {
-  free(value);
-}
-static inline void releaseStringValue(char* value, unsigned) {
-  free(value);
-}
-#endif // JSONCPP_USING_SECURE_MEMORY
-
-} // namespace Json
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// ValueInternals...
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-#if !defined(JSON_IS_AMALGAMATION)
-
-#include "json_valueiterator.inl"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-
-namespace Json {
-
-Exception::Exception(JSONCPP_STRING const& msg)
-  : msg_(msg)
-{}
-Exception::~Exception() JSONCPP_NOEXCEPT
-{}
-char const* Exception::what() const JSONCPP_NOEXCEPT
-{
-  return msg_.c_str();
-}
-RuntimeError::RuntimeError(JSONCPP_STRING const& msg)
-  : Exception(msg)
-{}
-LogicError::LogicError(JSONCPP_STRING const& msg)
-  : Exception(msg)
-{}
-JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg)
-{
-  throw RuntimeError(msg);
-}
-JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg)
-{
-  throw LogicError(msg);
-}
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class Value::CommentInfo
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-Value::CommentInfo::CommentInfo() : comment_(0)
-{}
-
-Value::CommentInfo::~CommentInfo() {
-  if (comment_)
-    releaseStringValue(comment_, 0u);
-}
-
-void Value::CommentInfo::setComment(const char* text, size_t len) {
-  if (comment_) {
-    releaseStringValue(comment_, 0u);
-    comment_ = 0;
-  }
-  JSON_ASSERT(text != 0);
-  JSON_ASSERT_MESSAGE(
-      text[0] == '\0' || text[0] == '/',
-      "in Json::Value::setComment(): Comments must start with /");
-  // It seems that /**/ style comments are acceptable as well.
-  comment_ = duplicateStringValue(text, len);
-}
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class Value::CZString
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-// Notes: policy_ indicates if the string was allocated when
-// a string is stored.
-
-Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {}
-
-Value::CZString::CZString(char const* str, unsigned ulength, DuplicationPolicy allocate)
-    : cstr_(str) {
-  // allocate != duplicate
-  storage_.policy_ = allocate & 0x3;
-  storage_.length_ = ulength & 0x3FFFFFFF;
-}
-
-Value::CZString::CZString(const CZString& other) {
-  cstr_ = (other.storage_.policy_ != noDuplication && other.cstr_ != 0
-				 ? duplicateStringValue(other.cstr_, other.storage_.length_)
-				 : other.cstr_);
-  storage_.policy_ = static_cast<unsigned>(other.cstr_
-                 ? (static_cast<DuplicationPolicy>(other.storage_.policy_) == noDuplication
-                     ? noDuplication : duplicate)
-                 : static_cast<DuplicationPolicy>(other.storage_.policy_)) & 3U;
-  storage_.length_ = other.storage_.length_;
-}
-
-#if JSON_HAS_RVALUE_REFERENCES
-Value::CZString::CZString(CZString&& other)
-  : cstr_(other.cstr_), index_(other.index_) {
-  other.cstr_ = nullptr;
-}
-#endif
-
-Value::CZString::~CZString() {
-  if (cstr_ && storage_.policy_ == duplicate) {
-	  releaseStringValue(const_cast<char*>(cstr_), storage_.length_ + 1u); //+1 for null terminating character for sake of completeness but not actually necessary
-  }
-}
-
-void Value::CZString::swap(CZString& other) {
-  std::swap(cstr_, other.cstr_);
-  std::swap(index_, other.index_);
-}
-
-Value::CZString& Value::CZString::operator=(const CZString& other) {
-  cstr_ = other.cstr_;
-  index_ = other.index_;
-  return *this;
-}
-
-#if JSON_HAS_RVALUE_REFERENCES
-Value::CZString& Value::CZString::operator=(CZString&& other) {
-  cstr_ = other.cstr_;
-  index_ = other.index_;
-  other.cstr_ = nullptr;
-  return *this;
-}
-#endif
-
-bool Value::CZString::operator<(const CZString& other) const {
-  if (!cstr_) return index_ < other.index_;
-  //return strcmp(cstr_, other.cstr_) < 0;
-  // Assume both are strings.
-  unsigned this_len = this->storage_.length_;
-  unsigned other_len = other.storage_.length_;
-  unsigned min_len = std::min<unsigned>(this_len, other_len);
-  JSON_ASSERT(this->cstr_ && other.cstr_);
-  int comp = memcmp(this->cstr_, other.cstr_, min_len);
-  if (comp < 0) return true;
-  if (comp > 0) return false;
-  return (this_len < other_len);
-}
-
-bool Value::CZString::operator==(const CZString& other) const {
-  if (!cstr_) return index_ == other.index_;
-  //return strcmp(cstr_, other.cstr_) == 0;
-  // Assume both are strings.
-  unsigned this_len = this->storage_.length_;
-  unsigned other_len = other.storage_.length_;
-  if (this_len != other_len) return false;
-  JSON_ASSERT(this->cstr_ && other.cstr_);
-  int comp = memcmp(this->cstr_, other.cstr_, this_len);
-  return comp == 0;
-}
-
-ArrayIndex Value::CZString::index() const { return index_; }
-
-//const char* Value::CZString::c_str() const { return cstr_; }
-const char* Value::CZString::data() const { return cstr_; }
-unsigned Value::CZString::length() const { return storage_.length_; }
-bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; }
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class Value::Value
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-/*! \internal Default constructor initialization must be equivalent to:
- * memset( this, 0, sizeof(Value) )
- * This optimization is used in ValueInternalMap fast allocator.
- */
-Value::Value(ValueType vtype) {
-  static char const emptyString[] = "";
-  initBasic(vtype);
-  switch (vtype) {
-  case nullValue:
-    break;
-  case intValue:
-  case uintValue:
-    value_.int_ = 0;
-    break;
-  case realValue:
-    value_.real_ = 0.0;
-    break;
-  case stringValue:
-    // allocated_ == false, so this is safe.
-    value_.string_ = const_cast<char*>(static_cast<char const*>(emptyString));
-    break;
-  case arrayValue:
-  case objectValue:
-    value_.map_ = new ObjectValues();
-    break;
-  case booleanValue:
-    value_.bool_ = false;
-    break;
-  default:
-    JSON_ASSERT_UNREACHABLE;
-  }
-}
-
-Value::Value(Int value) {
-  initBasic(intValue);
-  value_.int_ = value;
-}
-
-Value::Value(UInt value) {
-  initBasic(uintValue);
-  value_.uint_ = value;
-}
-#if defined(JSON_HAS_INT64)
-Value::Value(Int64 value) {
-  initBasic(intValue);
-  value_.int_ = value;
-}
-Value::Value(UInt64 value) {
-  initBasic(uintValue);
-  value_.uint_ = value;
-}
-#endif // defined(JSON_HAS_INT64)
-
-Value::Value(double value) {
-  initBasic(realValue);
-  value_.real_ = value;
-}
-
-Value::Value(const char* value) {
-  initBasic(stringValue, true);
-  JSON_ASSERT_MESSAGE(value != NULL, "Null Value Passed to Value Constructor");
-  value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(strlen(value)));
-}
-
-Value::Value(const char* beginValue, const char* endValue) {
-  initBasic(stringValue, true);
-  value_.string_ =
-      duplicateAndPrefixStringValue(beginValue, static_cast<unsigned>(endValue - beginValue));
-}
-
-Value::Value(const JSONCPP_STRING& value) {
-  initBasic(stringValue, true);
-  value_.string_ =
-      duplicateAndPrefixStringValue(value.data(), static_cast<unsigned>(value.length()));
-}
-
-Value::Value(const StaticString& value) {
-  initBasic(stringValue);
-  value_.string_ = const_cast<char*>(value.c_str());
-}
-
-#ifdef JSON_USE_CPPTL
-Value::Value(const CppTL::ConstString& value) {
-  initBasic(stringValue, true);
-  value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(value.length()));
-}
-#endif
-
-Value::Value(bool value) {
-  initBasic(booleanValue);
-  value_.bool_ = value;
-}
-
-Value::Value(Value const& other)
-    : type_(other.type_), allocated_(false)
-      ,
-      comments_(0), start_(other.start_), limit_(other.limit_)
-{
-  switch (type_) {
-  case nullValue:
-  case intValue:
-  case uintValue:
-  case realValue:
-  case booleanValue:
-    value_ = other.value_;
-    break;
-  case stringValue:
-    if (other.value_.string_ && other.allocated_) {
-      unsigned len;
-      char const* str;
-      decodePrefixedString(other.allocated_, other.value_.string_,
-          &len, &str);
-      value_.string_ = duplicateAndPrefixStringValue(str, len);
-      allocated_ = true;
-    } else {
-      value_.string_ = other.value_.string_;
-      allocated_ = false;
-    }
-    break;
-  case arrayValue:
-  case objectValue:
-    value_.map_ = new ObjectValues(*other.value_.map_);
-    break;
-  default:
-    JSON_ASSERT_UNREACHABLE;
-  }
-  if (other.comments_) {
-    comments_ = new CommentInfo[numberOfCommentPlacement];
-    for (int comment = 0; comment < numberOfCommentPlacement; ++comment) {
-      const CommentInfo& otherComment = other.comments_[comment];
-      if (otherComment.comment_)
-        comments_[comment].setComment(
-            otherComment.comment_, strlen(otherComment.comment_));
-    }
-  }
-}
-
-#if JSON_HAS_RVALUE_REFERENCES
-// Move constructor
-Value::Value(Value&& other) {
-  initBasic(nullValue);
-  swap(other);
-}
-#endif
-
-Value::~Value() {
-  switch (type_) {
-  case nullValue:
-  case intValue:
-  case uintValue:
-  case realValue:
-  case booleanValue:
-    break;
-  case stringValue:
-    if (allocated_)
-      releasePrefixedStringValue(value_.string_);
-    break;
-  case arrayValue:
-  case objectValue:
-    delete value_.map_;
-    break;
-  default:
-    JSON_ASSERT_UNREACHABLE;
-  }
-
-  delete[] comments_;
-
-  value_.uint_ = 0;
-}
-
-Value& Value::operator=(Value other) {
-  swap(other);
-  return *this;
-}
-
-void Value::swapPayload(Value& other) {
-  ValueType temp = type_;
-  type_ = other.type_;
-  other.type_ = temp;
-  std::swap(value_, other.value_);
-  int temp2 = allocated_;
-  allocated_ = other.allocated_;
-  other.allocated_ = temp2 & 0x1;
-}
-
-void Value::copyPayload(const Value& other) {
-  type_ = other.type_;
-  value_ = other.value_;
-  allocated_ = other.allocated_;
-}
-
-void Value::swap(Value& other) {
-  swapPayload(other);
-  std::swap(comments_, other.comments_);
-  std::swap(start_, other.start_);
-  std::swap(limit_, other.limit_);
-}
-
-void Value::copy(const Value& other) {
-  copyPayload(other);
-  comments_ = other.comments_;
-  start_ = other.start_;
-  limit_ = other.limit_;
-}
-
-ValueType Value::type() const { return type_; }
-
-int Value::compare(const Value& other) const {
-  if (*this < other)
-    return -1;
-  if (*this > other)
-    return 1;
-  return 0;
-}
-
-bool Value::operator<(const Value& other) const {
-  int typeDelta = type_ - other.type_;
-  if (typeDelta)
-    return typeDelta < 0 ? true : false;
-  switch (type_) {
-  case nullValue:
-    return false;
-  case intValue:
-    return value_.int_ < other.value_.int_;
-  case uintValue:
-    return value_.uint_ < other.value_.uint_;
-  case realValue:
-    return value_.real_ < other.value_.real_;
-  case booleanValue:
-    return value_.bool_ < other.value_.bool_;
-  case stringValue:
-  {
-    if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
-      if (other.value_.string_) return true;
-      else return false;
-    }
-    unsigned this_len;
-    unsigned other_len;
-    char const* this_str;
-    char const* other_str;
-    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
-    decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
-    unsigned min_len = std::min<unsigned>(this_len, other_len);
-    JSON_ASSERT(this_str && other_str);
-    int comp = memcmp(this_str, other_str, min_len);
-    if (comp < 0) return true;
-    if (comp > 0) return false;
-    return (this_len < other_len);
-  }
-  case arrayValue:
-  case objectValue: {
-    int delta = int(value_.map_->size() - other.value_.map_->size());
-    if (delta)
-      return delta < 0;
-    return (*value_.map_) < (*other.value_.map_);
-  }
-  default:
-    JSON_ASSERT_UNREACHABLE;
-  }
-  return false; // unreachable
-}
-
-bool Value::operator<=(const Value& other) const { return !(other < *this); }
-
-bool Value::operator>=(const Value& other) const { return !(*this < other); }
-
-bool Value::operator>(const Value& other) const { return other < *this; }
-
-bool Value::operator==(const Value& other) const {
-  // if ( type_ != other.type_ )
-  // GCC 2.95.3 says:
-  // attempt to take address of bit-field structure member `Json::Value::type_'
-  // Beats me, but a temp solves the problem.
-  int temp = other.type_;
-  if (type_ != temp)
-    return false;
-  switch (type_) {
-  case nullValue:
-    return true;
-  case intValue:
-    return value_.int_ == other.value_.int_;
-  case uintValue:
-    return value_.uint_ == other.value_.uint_;
-  case realValue:
-    return value_.real_ == other.value_.real_;
-  case booleanValue:
-    return value_.bool_ == other.value_.bool_;
-  case stringValue:
-  {
-    if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
-      return (value_.string_ == other.value_.string_);
-    }
-    unsigned this_len;
-    unsigned other_len;
-    char const* this_str;
-    char const* other_str;
-    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
-    decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
-    if (this_len != other_len) return false;
-    JSON_ASSERT(this_str && other_str);
-    int comp = memcmp(this_str, other_str, this_len);
-    return comp == 0;
-  }
-  case arrayValue:
-  case objectValue:
-    return value_.map_->size() == other.value_.map_->size() &&
-           (*value_.map_) == (*other.value_.map_);
-  default:
-    JSON_ASSERT_UNREACHABLE;
-  }
-  return false; // unreachable
-}
-
-bool Value::operator!=(const Value& other) const { return !(*this == other); }
-
-const char* Value::asCString() const {
-  JSON_ASSERT_MESSAGE(type_ == stringValue,
-                      "in Json::Value::asCString(): requires stringValue");
-  if (value_.string_ == 0) return 0;
-  unsigned this_len;
-  char const* this_str;
-  decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
-  return this_str;
-}
-
-#if JSONCPP_USING_SECURE_MEMORY
-unsigned Value::getCStringLength() const {
-  JSON_ASSERT_MESSAGE(type_ == stringValue,
-	                  "in Json::Value::asCString(): requires stringValue");
-  if (value_.string_ == 0) return 0;
-  unsigned this_len;
-  char const* this_str;
-  decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
-  return this_len;
-}
-#endif
-
-bool Value::getString(char const** str, char const** cend) const {
-  if (type_ != stringValue) return false;
-  if (value_.string_ == 0) return false;
-  unsigned length;
-  decodePrefixedString(this->allocated_, this->value_.string_, &length, str);
-  *cend = *str + length;
-  return true;
-}
-
-JSONCPP_STRING Value::asString() const {
-  switch (type_) {
-  case nullValue:
-    return "";
-  case stringValue:
-  {
-    if (value_.string_ == 0) return "";
-    unsigned this_len;
-    char const* this_str;
-    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
-    return JSONCPP_STRING(this_str, this_len);
-  }
-  case booleanValue:
-    return value_.bool_ ? "true" : "false";
-  case intValue:
-    return valueToString(value_.int_);
-  case uintValue:
-    return valueToString(value_.uint_);
-  case realValue:
-    return valueToString(value_.real_);
-  default:
-    JSON_FAIL_MESSAGE("Type is not convertible to string");
-  }
-}
-
-#ifdef JSON_USE_CPPTL
-CppTL::ConstString Value::asConstString() const {
-  unsigned len;
-  char const* str;
-  decodePrefixedString(allocated_, value_.string_,
-      &len, &str);
-  return CppTL::ConstString(str, len);
-}
-#endif
-
-Value::Int Value::asInt() const {
-  switch (type_) {
-  case intValue:
-    JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range");
-    return Int(value_.int_);
-  case uintValue:
-    JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range");
-    return Int(value_.uint_);
-  case realValue:
-    JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt),
-                        "double out of Int range");
-    return Int(value_.real_);
-  case nullValue:
-    return 0;
-  case booleanValue:
-    return value_.bool_ ? 1 : 0;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to Int.");
-}
-
-Value::UInt Value::asUInt() const {
-  switch (type_) {
-  case intValue:
-    JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range");
-    return UInt(value_.int_);
-  case uintValue:
-    JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range");
-    return UInt(value_.uint_);
-  case realValue:
-    JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt),
-                        "double out of UInt range");
-    return UInt(value_.real_);
-  case nullValue:
-    return 0;
-  case booleanValue:
-    return value_.bool_ ? 1 : 0;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to UInt.");
-}
-
-#if defined(JSON_HAS_INT64)
-
-Value::Int64 Value::asInt64() const {
-  switch (type_) {
-  case intValue:
-    return Int64(value_.int_);
-  case uintValue:
-    JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range");
-    return Int64(value_.uint_);
-  case realValue:
-    JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64),
-                        "double out of Int64 range");
-    return Int64(value_.real_);
-  case nullValue:
-    return 0;
-  case booleanValue:
-    return value_.bool_ ? 1 : 0;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to Int64.");
-}
-
-Value::UInt64 Value::asUInt64() const {
-  switch (type_) {
-  case intValue:
-    JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range");
-    return UInt64(value_.int_);
-  case uintValue:
-    return UInt64(value_.uint_);
-  case realValue:
-    JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64),
-                        "double out of UInt64 range");
-    return UInt64(value_.real_);
-  case nullValue:
-    return 0;
-  case booleanValue:
-    return value_.bool_ ? 1 : 0;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to UInt64.");
-}
-#endif // if defined(JSON_HAS_INT64)
-
-LargestInt Value::asLargestInt() const {
-#if defined(JSON_NO_INT64)
-  return asInt();
-#else
-  return asInt64();
-#endif
-}
-
-LargestUInt Value::asLargestUInt() const {
-#if defined(JSON_NO_INT64)
-  return asUInt();
-#else
-  return asUInt64();
-#endif
-}
-
-double Value::asDouble() const {
-  switch (type_) {
-  case intValue:
-    return static_cast<double>(value_.int_);
-  case uintValue:
-#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-    return static_cast<double>(value_.uint_);
-#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-    return integerToDouble(value_.uint_);
-#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-  case realValue:
-    return value_.real_;
-  case nullValue:
-    return 0.0;
-  case booleanValue:
-    return value_.bool_ ? 1.0 : 0.0;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to double.");
-}
-
-float Value::asFloat() const {
-  switch (type_) {
-  case intValue:
-    return static_cast<float>(value_.int_);
-  case uintValue:
-#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-    return static_cast<float>(value_.uint_);
-#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-    // This can fail (silently?) if the value is bigger than MAX_FLOAT.
-    return static_cast<float>(integerToDouble(value_.uint_));
-#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-  case realValue:
-    return static_cast<float>(value_.real_);
-  case nullValue:
-    return 0.0;
-  case booleanValue:
-    return value_.bool_ ? 1.0f : 0.0f;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to float.");
-}
-
-bool Value::asBool() const {
-  switch (type_) {
-  case booleanValue:
-    return value_.bool_;
-  case nullValue:
-    return false;
-  case intValue:
-    return value_.int_ ? true : false;
-  case uintValue:
-    return value_.uint_ ? true : false;
-  case realValue:
-    // This is kind of strange. Not recommended.
-    return (value_.real_ != 0.0) ? true : false;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to bool.");
-}
-
-bool Value::isConvertibleTo(ValueType other) const {
-  switch (other) {
-  case nullValue:
-    return (isNumeric() && asDouble() == 0.0) ||
-           (type_ == booleanValue && value_.bool_ == false) ||
-           (type_ == stringValue && asString().empty()) ||
-           (type_ == arrayValue && value_.map_->size() == 0) ||
-           (type_ == objectValue && value_.map_->size() == 0) ||
-           type_ == nullValue;
-  case intValue:
-    return isInt() ||
-           (type_ == realValue && InRange(value_.real_, minInt, maxInt)) ||
-           type_ == booleanValue || type_ == nullValue;
-  case uintValue:
-    return isUInt() ||
-           (type_ == realValue && InRange(value_.real_, 0, maxUInt)) ||
-           type_ == booleanValue || type_ == nullValue;
-  case realValue:
-    return isNumeric() || type_ == booleanValue || type_ == nullValue;
-  case booleanValue:
-    return isNumeric() || type_ == booleanValue || type_ == nullValue;
-  case stringValue:
-    return isNumeric() || type_ == booleanValue || type_ == stringValue ||
-           type_ == nullValue;
-  case arrayValue:
-    return type_ == arrayValue || type_ == nullValue;
-  case objectValue:
-    return type_ == objectValue || type_ == nullValue;
-  }
-  JSON_ASSERT_UNREACHABLE;
-  return false;
-}
-
-/// Number of values in array or object
-ArrayIndex Value::size() const {
-  switch (type_) {
-  case nullValue:
-  case intValue:
-  case uintValue:
-  case realValue:
-  case booleanValue:
-  case stringValue:
-    return 0;
-  case arrayValue: // size of the array is highest index + 1
-    if (!value_.map_->empty()) {
-      ObjectValues::const_iterator itLast = value_.map_->end();
-      --itLast;
-      return (*itLast).first.index() + 1;
-    }
-    return 0;
-  case objectValue:
-    return ArrayIndex(value_.map_->size());
-  }
-  JSON_ASSERT_UNREACHABLE;
-  return 0; // unreachable;
-}
-
-bool Value::empty() const {
-  if (isNull() || isArray() || isObject())
-    return size() == 0u;
-  else
-    return false;
-}
-
-bool Value::operator!() const { return isNull(); }
-
-void Value::clear() {
-  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue ||
-                          type_ == objectValue,
-                      "in Json::Value::clear(): requires complex value");
-  start_ = 0;
-  limit_ = 0;
-  switch (type_) {
-  case arrayValue:
-  case objectValue:
-    value_.map_->clear();
-    break;
-  default:
-    break;
-  }
-}
-
-void Value::resize(ArrayIndex newSize) {
-  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue,
-                      "in Json::Value::resize(): requires arrayValue");
-  if (type_ == nullValue)
-    *this = Value(arrayValue);
-  ArrayIndex oldSize = size();
-  if (newSize == 0)
-    clear();
-  else if (newSize > oldSize)
-    (*this)[newSize - 1];
-  else {
-    for (ArrayIndex index = newSize; index < oldSize; ++index) {
-      value_.map_->erase(index);
-    }
-    JSON_ASSERT(size() == newSize);
-  }
-}
-
-Value& Value::operator[](ArrayIndex index) {
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == arrayValue,
-      "in Json::Value::operator[](ArrayIndex): requires arrayValue");
-  if (type_ == nullValue)
-    *this = Value(arrayValue);
-  CZString key(index);
-  ObjectValues::iterator it = value_.map_->lower_bound(key);
-  if (it != value_.map_->end() && (*it).first == key)
-    return (*it).second;
-
-  ObjectValues::value_type defaultValue(key, nullSingleton());
-  it = value_.map_->insert(it, defaultValue);
-  return (*it).second;
-}
-
-Value& Value::operator[](int index) {
-  JSON_ASSERT_MESSAGE(
-      index >= 0,
-      "in Json::Value::operator[](int index): index cannot be negative");
-  return (*this)[ArrayIndex(index)];
-}
-
-const Value& Value::operator[](ArrayIndex index) const {
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == arrayValue,
-      "in Json::Value::operator[](ArrayIndex)const: requires arrayValue");
-  if (type_ == nullValue)
-    return nullSingleton();
-  CZString key(index);
-  ObjectValues::const_iterator it = value_.map_->find(key);
-  if (it == value_.map_->end())
-    return nullSingleton();
-  return (*it).second;
-}
-
-const Value& Value::operator[](int index) const {
-  JSON_ASSERT_MESSAGE(
-      index >= 0,
-      "in Json::Value::operator[](int index) const: index cannot be negative");
-  return (*this)[ArrayIndex(index)];
-}
-
-void Value::initBasic(ValueType vtype, bool allocated) {
-  type_ = vtype;
-  allocated_ = allocated;
-  comments_ = 0;
-  start_ = 0;
-  limit_ = 0;
-}
-
-// Access an object value by name, create a null member if it does not exist.
-// @pre Type of '*this' is object or null.
-// @param key is null-terminated.
-Value& Value::resolveReference(const char* key) {
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == objectValue,
-      "in Json::Value::resolveReference(): requires objectValue");
-  if (type_ == nullValue)
-    *this = Value(objectValue);
-  CZString actualKey(
-      key, static_cast<unsigned>(strlen(key)), CZString::noDuplication); // NOTE!
-  ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
-  if (it != value_.map_->end() && (*it).first == actualKey)
-    return (*it).second;
-
-  ObjectValues::value_type defaultValue(actualKey, nullSingleton());
-  it = value_.map_->insert(it, defaultValue);
-  Value& value = (*it).second;
-  return value;
-}
-
-// @param key is not null-terminated.
-Value& Value::resolveReference(char const* key, char const* cend)
-{
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == objectValue,
-      "in Json::Value::resolveReference(key, end): requires objectValue");
-  if (type_ == nullValue)
-    *this = Value(objectValue);
-  CZString actualKey(
-      key, static_cast<unsigned>(cend-key), CZString::duplicateOnCopy);
-  ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
-  if (it != value_.map_->end() && (*it).first == actualKey)
-    return (*it).second;
-
-  ObjectValues::value_type defaultValue(actualKey, nullSingleton());
-  it = value_.map_->insert(it, defaultValue);
-  Value& value = (*it).second;
-  return value;
-}
-
-Value Value::get(ArrayIndex index, const Value& defaultValue) const {
-  const Value* value = &((*this)[index]);
-  return value == &nullSingleton() ? defaultValue : *value;
-}
-
-bool Value::isValidIndex(ArrayIndex index) const { return index < size(); }
-
-Value const* Value::find(char const* key, char const* cend) const
-{
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == objectValue,
-      "in Json::Value::find(key, end, found): requires objectValue or nullValue");
-  if (type_ == nullValue) return NULL;
-  CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication);
-  ObjectValues::const_iterator it = value_.map_->find(actualKey);
-  if (it == value_.map_->end()) return NULL;
-  return &(*it).second;
-}
-const Value& Value::operator[](const char* key) const
-{
-  Value const* found = find(key, key + strlen(key));
-  if (!found) return nullSingleton();
-  return *found;
-}
-Value const& Value::operator[](JSONCPP_STRING const& key) const
-{
-  Value const* found = find(key.data(), key.data() + key.length());
-  if (!found) return nullSingleton();
-  return *found;
-}
-
-Value& Value::operator[](const char* key) {
-  return resolveReference(key, key + strlen(key));
-}
-
-Value& Value::operator[](const JSONCPP_STRING& key) {
-  return resolveReference(key.data(), key.data() + key.length());
-}
-
-Value& Value::operator[](const StaticString& key) {
-  return resolveReference(key.c_str());
-}
-
-#ifdef JSON_USE_CPPTL
-Value& Value::operator[](const CppTL::ConstString& key) {
-  return resolveReference(key.c_str(), key.end_c_str());
-}
-Value const& Value::operator[](CppTL::ConstString const& key) const
-{
-  Value const* found = find(key.c_str(), key.end_c_str());
-  if (!found) return nullSingleton();
-  return *found;
-}
-#endif
-
-Value& Value::append(const Value& value) { return (*this)[size()] = value; }
-
-#if JSON_HAS_RVALUE_REFERENCES
-  Value& Value::append(Value&& value) { return (*this)[size()] = std::move(value); }
-#endif
-
-Value Value::get(char const* key, char const* cend, Value const& defaultValue) const
-{
-  Value const* found = find(key, cend);
-  return !found ? defaultValue : *found;
-}
-Value Value::get(char const* key, Value const& defaultValue) const
-{
-  return get(key, key + strlen(key), defaultValue);
-}
-Value Value::get(JSONCPP_STRING const& key, Value const& defaultValue) const
-{
-  return get(key.data(), key.data() + key.length(), defaultValue);
-}
-
-
-bool Value::removeMember(const char* key, const char* cend, Value* removed)
-{
-  if (type_ != objectValue) {
-    return false;
-  }
-  CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication);
-  ObjectValues::iterator it = value_.map_->find(actualKey);
-  if (it == value_.map_->end())
-    return false;
-  *removed = it->second;
-  value_.map_->erase(it);
-  return true;
-}
-bool Value::removeMember(const char* key, Value* removed)
-{
-  return removeMember(key, key + strlen(key), removed);
-}
-bool Value::removeMember(JSONCPP_STRING const& key, Value* removed)
-{
-  return removeMember(key.data(), key.data() + key.length(), removed);
-}
-void Value::removeMember(const char* key)
-{
-  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
-                      "in Json::Value::removeMember(): requires objectValue");
-  if (type_ == nullValue)
-    return;
-
-  CZString actualKey(key, unsigned(strlen(key)), CZString::noDuplication);
-  value_.map_->erase(actualKey);
-}
-void Value::removeMember(const JSONCPP_STRING& key)
-{
-  removeMember(key.c_str());
-}
-
-bool Value::removeIndex(ArrayIndex index, Value* removed) {
-  if (type_ != arrayValue) {
-    return false;
-  }
-  CZString key(index);
-  ObjectValues::iterator it = value_.map_->find(key);
-  if (it == value_.map_->end()) {
-    return false;
-  }
-  *removed = it->second;
-  ArrayIndex oldSize = size();
-  // shift left all items left, into the place of the "removed"
-  for (ArrayIndex i = index; i < (oldSize - 1); ++i){
-    CZString keey(i);
-    (*value_.map_)[keey] = (*this)[i + 1];
-  }
-  // erase the last one ("leftover")
-  CZString keyLast(oldSize - 1);
-  ObjectValues::iterator itLast = value_.map_->find(keyLast);
-  value_.map_->erase(itLast);
-  return true;
-}
-
-#ifdef JSON_USE_CPPTL
-Value Value::get(const CppTL::ConstString& key,
-                 const Value& defaultValue) const {
-  return get(key.c_str(), key.end_c_str(), defaultValue);
-}
-#endif
-
-bool Value::isMember(char const* key, char const* cend) const
-{
-  Value const* value = find(key, cend);
-  return NULL != value;
-}
-bool Value::isMember(char const* key) const
-{
-  return isMember(key, key + strlen(key));
-}
-bool Value::isMember(JSONCPP_STRING const& key) const
-{
-  return isMember(key.data(), key.data() + key.length());
-}
-
-#ifdef JSON_USE_CPPTL
-bool Value::isMember(const CppTL::ConstString& key) const {
-  return isMember(key.c_str(), key.end_c_str());
-}
-#endif
-
-Value::Members Value::getMemberNames() const {
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == objectValue,
-      "in Json::Value::getMemberNames(), value must be objectValue");
-  if (type_ == nullValue)
-    return Value::Members();
-  Members members;
-  members.reserve(value_.map_->size());
-  ObjectValues::const_iterator it = value_.map_->begin();
-  ObjectValues::const_iterator itEnd = value_.map_->end();
-  for (; it != itEnd; ++it) {
-    members.push_back(JSONCPP_STRING((*it).first.data(),
-                                  (*it).first.length()));
-  }
-  return members;
-}
-//
-//# ifdef JSON_USE_CPPTL
-// EnumMemberNames
-// Value::enumMemberNames() const
-//{
-//   if ( type_ == objectValue )
-//   {
-//      return CppTL::Enum::any(  CppTL::Enum::transform(
-//         CppTL::Enum::keys( *(value_.map_), CppTL::Type<const CZString &>() ),
-//         MemberNamesTransform() ) );
-//   }
-//   return EnumMemberNames();
-//}
-//
-//
-// EnumValues
-// Value::enumValues() const
-//{
-//   if ( type_ == objectValue  ||  type_ == arrayValue )
-//      return CppTL::Enum::anyValues( *(value_.map_),
-//                                     CppTL::Type<const Value &>() );
-//   return EnumValues();
-//}
-//
-//# endif
-
-static bool IsIntegral(double d) {
-  double integral_part;
-  return modf(d, &integral_part) == 0.0;
-}
-
-bool Value::isNull() const { return type_ == nullValue; }
-
-bool Value::isBool() const { return type_ == booleanValue; }
-
-bool Value::isInt() const {
-  switch (type_) {
-  case intValue:
-#if defined(JSON_HAS_INT64)
-    return value_.int_ >= minInt && value_.int_ <= maxInt;
-#else
-    return true;
-#endif
-  case uintValue:
-    return value_.uint_ <= UInt(maxInt);
-  case realValue:
-    return value_.real_ >= minInt && value_.real_ <= maxInt &&
-           IsIntegral(value_.real_);
-  default:
-    break;
-  }
-  return false;
-}
-
-bool Value::isUInt() const {
-  switch (type_) {
-  case intValue:
-#if defined(JSON_HAS_INT64)
-    return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt);
-#else
-    return value_.int_ >= 0;
-#endif
-  case uintValue:
-#if defined(JSON_HAS_INT64)
-    return value_.uint_ <= maxUInt;
-#else
-    return true;
-#endif
-  case realValue:
-    return value_.real_ >= 0 && value_.real_ <= maxUInt &&
-           IsIntegral(value_.real_);
-  default:
-    break;
-  }
-  return false;
-}
-
-bool Value::isInt64() const {
-#if defined(JSON_HAS_INT64)
-  switch (type_) {
-  case intValue:
-    return true;
-  case uintValue:
-    return value_.uint_ <= UInt64(maxInt64);
-  case realValue:
-    // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a
-    // double, so double(maxInt64) will be rounded up to 2^63. Therefore we
-    // require the value to be strictly less than the limit.
-    return value_.real_ >= double(minInt64) &&
-           value_.real_ < double(maxInt64) && IsIntegral(value_.real_);
-  default:
-    break;
-  }
-#endif // JSON_HAS_INT64
-  return false;
-}
-
-bool Value::isUInt64() const {
-#if defined(JSON_HAS_INT64)
-  switch (type_) {
-  case intValue:
-    return value_.int_ >= 0;
-  case uintValue:
-    return true;
-  case realValue:
-    // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
-    // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
-    // require the value to be strictly less than the limit.
-    return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble &&
-           IsIntegral(value_.real_);
-  default:
-    break;
-  }
-#endif // JSON_HAS_INT64
-  return false;
-}
-
-bool Value::isIntegral() const {
-  switch (type_) {
-    case intValue:
-    case uintValue:
-      return true;
-    case realValue:
-#if defined(JSON_HAS_INT64)
-      // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
-      // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
-      // require the value to be strictly less than the limit.
-      return value_.real_ >= double(minInt64) && value_.real_ < maxUInt64AsDouble && IsIntegral(value_.real_);
-#else
-      return value_.real_ >= minInt && value_.real_ <= maxUInt && IsIntegral(value_.real_);
-#endif // JSON_HAS_INT64
-    default:
-      break;
-  }
-  return false;
-}
-
-bool Value::isDouble() const { return type_ == intValue || type_ == uintValue || type_ == realValue; }
-
-bool Value::isNumeric() const { return isDouble(); }
-
-bool Value::isString() const { return type_ == stringValue; }
-
-bool Value::isArray() const { return type_ == arrayValue; }
-
-bool Value::isObject() const { return type_ == objectValue; }
-
-void Value::setComment(const char* comment, size_t len, CommentPlacement placement) {
-  if (!comments_)
-    comments_ = new CommentInfo[numberOfCommentPlacement];
-  if ((len > 0) && (comment[len-1] == '\n')) {
-    // Always discard trailing newline, to aid indentation.
-    len -= 1;
-  }
-  comments_[placement].setComment(comment, len);
-}
-
-void Value::setComment(const char* comment, CommentPlacement placement) {
-  setComment(comment, strlen(comment), placement);
-}
-
-void Value::setComment(const JSONCPP_STRING& comment, CommentPlacement placement) {
-  setComment(comment.c_str(), comment.length(), placement);
-}
-
-bool Value::hasComment(CommentPlacement placement) const {
-  return comments_ != 0 && comments_[placement].comment_ != 0;
-}
-
-JSONCPP_STRING Value::getComment(CommentPlacement placement) const {
-  if (hasComment(placement))
-    return comments_[placement].comment_;
-  return "";
-}
-
-void Value::setOffsetStart(ptrdiff_t start) { start_ = start; }
-
-void Value::setOffsetLimit(ptrdiff_t limit) { limit_ = limit; }
-
-ptrdiff_t Value::getOffsetStart() const { return start_; }
-
-ptrdiff_t Value::getOffsetLimit() const { return limit_; }
-
-JSONCPP_STRING Value::toStyledString() const {
-  StreamWriterBuilder builder;
-
-  JSONCPP_STRING out = this->hasComment(commentBefore) ? "\n" : "";
-  out += Json::writeString(builder, *this);
-  out += "\n";
-
-  return out;
-}
-
-Value::const_iterator Value::begin() const {
-  switch (type_) {
-  case arrayValue:
-  case objectValue:
-    if (value_.map_)
-      return const_iterator(value_.map_->begin());
-    break;
-  default:
-    break;
-  }
-  return const_iterator();
-}
-
-Value::const_iterator Value::end() const {
-  switch (type_) {
-  case arrayValue:
-  case objectValue:
-    if (value_.map_)
-      return const_iterator(value_.map_->end());
-    break;
-  default:
-    break;
-  }
-  return const_iterator();
-}
-
-Value::iterator Value::begin() {
-  switch (type_) {
-  case arrayValue:
-  case objectValue:
-    if (value_.map_)
-      return iterator(value_.map_->begin());
-    break;
-  default:
-    break;
-  }
-  return iterator();
-}
-
-Value::iterator Value::end() {
-  switch (type_) {
-  case arrayValue:
-  case objectValue:
-    if (value_.map_)
-      return iterator(value_.map_->end());
-    break;
-  default:
-    break;
-  }
-  return iterator();
-}
-
-// class PathArgument
-// //////////////////////////////////////////////////////////////////
-
-PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {}
-
-PathArgument::PathArgument(ArrayIndex index)
-    : key_(), index_(index), kind_(kindIndex) {}
-
-PathArgument::PathArgument(const char* key)
-    : key_(key), index_(), kind_(kindKey) {}
-
-PathArgument::PathArgument(const JSONCPP_STRING& key)
-    : key_(key.c_str()), index_(), kind_(kindKey) {}
-
-// class Path
-// //////////////////////////////////////////////////////////////////
-
-Path::Path(const JSONCPP_STRING& path,
-           const PathArgument& a1,
-           const PathArgument& a2,
-           const PathArgument& a3,
-           const PathArgument& a4,
-           const PathArgument& a5) {
-  InArgs in;
-  in.reserve(5);
-  in.push_back(&a1);
-  in.push_back(&a2);
-  in.push_back(&a3);
-  in.push_back(&a4);
-  in.push_back(&a5);
-  makePath(path, in);
-}
-
-void Path::makePath(const JSONCPP_STRING& path, const InArgs& in) {
-  const char* current = path.c_str();
-  const char* end = current + path.length();
-  InArgs::const_iterator itInArg = in.begin();
-  while (current != end) {
-    if (*current == '[') {
-      ++current;
-      if (*current == '%')
-        addPathInArg(path, in, itInArg, PathArgument::kindIndex);
-      else {
-        ArrayIndex index = 0;
-        for (; current != end && *current >= '0' && *current <= '9'; ++current)
-          index = index * 10 + ArrayIndex(*current - '0');
-        args_.push_back(index);
-      }
-      if (current == end || *++current != ']')
-        invalidPath(path, int(current - path.c_str()));
-    } else if (*current == '%') {
-      addPathInArg(path, in, itInArg, PathArgument::kindKey);
-      ++current;
-    } else if (*current == '.' || *current == ']') {
-      ++current;
-    } else {
-      const char* beginName = current;
-      while (current != end && !strchr("[.", *current))
-        ++current;
-      args_.push_back(JSONCPP_STRING(beginName, current));
-    }
-  }
-}
-
-void Path::addPathInArg(const JSONCPP_STRING& /*path*/,
-                        const InArgs& in,
-                        InArgs::const_iterator& itInArg,
-                        PathArgument::Kind kind) {
-  if (itInArg == in.end()) {
-    // Error: missing argument %d
-  } else if ((*itInArg)->kind_ != kind) {
-    // Error: bad argument type
-  } else {
-    args_.push_back(**itInArg++);
-  }
-}
-
-void Path::invalidPath(const JSONCPP_STRING& /*path*/, int /*location*/) {
-  // Error: invalid path.
-}
-
-const Value& Path::resolve(const Value& root) const {
-  const Value* node = &root;
-  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
-    const PathArgument& arg = *it;
-    if (arg.kind_ == PathArgument::kindIndex) {
-      if (!node->isArray() || !node->isValidIndex(arg.index_)) {
-        // Error: unable to resolve path (array value expected at position...
-        return Value::null;
-      }
-      node = &((*node)[arg.index_]);
-    } else if (arg.kind_ == PathArgument::kindKey) {
-      if (!node->isObject()) {
-        // Error: unable to resolve path (object value expected at position...)
-        return Value::null;
-      }
-      node = &((*node)[arg.key_]);
-      if (node == &Value::nullSingleton()) {
-        // Error: unable to resolve path (object has no member named '' at
-        // position...)
-        return Value::null;
-      }
-    }
-  }
-  return *node;
-}
-
-Value Path::resolve(const Value& root, const Value& defaultValue) const {
-  const Value* node = &root;
-  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
-    const PathArgument& arg = *it;
-    if (arg.kind_ == PathArgument::kindIndex) {
-      if (!node->isArray() || !node->isValidIndex(arg.index_))
-        return defaultValue;
-      node = &((*node)[arg.index_]);
-    } else if (arg.kind_ == PathArgument::kindKey) {
-      if (!node->isObject())
-        return defaultValue;
-      node = &((*node)[arg.key_]);
-      if (node == &Value::nullSingleton())
-        return defaultValue;
-    }
-  }
-  return *node;
-}
-
-Value& Path::make(Value& root) const {
-  Value* node = &root;
-  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
-    const PathArgument& arg = *it;
-    if (arg.kind_ == PathArgument::kindIndex) {
-      if (!node->isArray()) {
-        // Error: node is not an array at position ...
-      }
-      node = &((*node)[arg.index_]);
-    } else if (arg.kind_ == PathArgument::kindKey) {
-      if (!node->isObject()) {
-        // Error: node is not an object at position...
-      }
-      node = &((*node)[arg.key_]);
-    }
-  }
-  return *node;
-}
-
-} // namespace Json
diff --git a/3rdParty/jsoncpp/src/lib_json/json_valueiterator.inl b/3rdParty/jsoncpp/src/lib_json/json_valueiterator.inl
deleted file mode 100644
index 5243bfe4bbb0cffbec3d8eaf17766d83d4042dc6..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/lib_json/json_valueiterator.inl
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-// included by json_value.cpp
-
-namespace Json {
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class ValueIteratorBase
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-ValueIteratorBase::ValueIteratorBase()
-    : current_(), isNull_(true) {
-}
-
-ValueIteratorBase::ValueIteratorBase(
-    const Value::ObjectValues::iterator& current)
-    : current_(current), isNull_(false) {}
-
-Value& ValueIteratorBase::deref() const {
-  return current_->second;
-}
-
-void ValueIteratorBase::increment() {
-  ++current_;
-}
-
-void ValueIteratorBase::decrement() {
-  --current_;
-}
-
-ValueIteratorBase::difference_type
-ValueIteratorBase::computeDistance(const SelfType& other) const {
-#ifdef JSON_USE_CPPTL_SMALLMAP
-  return other.current_ - current_;
-#else
-  // Iterator for null value are initialized using the default
-  // constructor, which initialize current_ to the default
-  // std::map::iterator. As begin() and end() are two instance
-  // of the default std::map::iterator, they can not be compared.
-  // To allow this, we handle this comparison specifically.
-  if (isNull_ && other.isNull_) {
-    return 0;
-  }
-
-  // Usage of std::distance is not portable (does not compile with Sun Studio 12
-  // RogueWave STL,
-  // which is the one used by default).
-  // Using a portable hand-made version for non random iterator instead:
-  //   return difference_type( std::distance( current_, other.current_ ) );
-  difference_type myDistance = 0;
-  for (Value::ObjectValues::iterator it = current_; it != other.current_;
-       ++it) {
-    ++myDistance;
-  }
-  return myDistance;
-#endif
-}
-
-bool ValueIteratorBase::isEqual(const SelfType& other) const {
-  if (isNull_) {
-    return other.isNull_;
-  }
-  return current_ == other.current_;
-}
-
-void ValueIteratorBase::copy(const SelfType& other) {
-  current_ = other.current_;
-  isNull_ = other.isNull_;
-}
-
-Value ValueIteratorBase::key() const {
-  const Value::CZString czstring = (*current_).first;
-  if (czstring.data()) {
-    if (czstring.isStaticString())
-      return Value(StaticString(czstring.data()));
-    return Value(czstring.data(), czstring.data() + czstring.length());
-  }
-  return Value(czstring.index());
-}
-
-UInt ValueIteratorBase::index() const {
-  const Value::CZString czstring = (*current_).first;
-  if (!czstring.data())
-    return czstring.index();
-  return Value::UInt(-1);
-}
-
-JSONCPP_STRING ValueIteratorBase::name() const {
-  char const* keey;
-  char const* end;
-  keey = memberName(&end);
-  if (!keey) return JSONCPP_STRING();
-  return JSONCPP_STRING(keey, end);
-}
-
-char const* ValueIteratorBase::memberName() const {
-  const char* cname = (*current_).first.data();
-  return cname ? cname : "";
-}
-
-char const* ValueIteratorBase::memberName(char const** end) const {
-  const char* cname = (*current_).first.data();
-  if (!cname) {
-    *end = NULL;
-    return NULL;
-  }
-  *end = cname + (*current_).first.length();
-  return cname;
-}
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class ValueConstIterator
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-ValueConstIterator::ValueConstIterator() {}
-
-ValueConstIterator::ValueConstIterator(
-    const Value::ObjectValues::iterator& current)
-    : ValueIteratorBase(current) {}
-
-ValueConstIterator::ValueConstIterator(ValueIterator const& other)
-    : ValueIteratorBase(other) {}
-
-ValueConstIterator& ValueConstIterator::
-operator=(const ValueIteratorBase& other) {
-  copy(other);
-  return *this;
-}
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class ValueIterator
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-ValueIterator::ValueIterator() {}
-
-ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current)
-    : ValueIteratorBase(current) {}
-
-ValueIterator::ValueIterator(const ValueConstIterator& other)
-    : ValueIteratorBase(other) {
-  throwRuntimeError("ConstIterator to Iterator should never be allowed.");
-}
-
-ValueIterator::ValueIterator(const ValueIterator& other)
-    : ValueIteratorBase(other) {}
-
-ValueIterator& ValueIterator::operator=(const SelfType& other) {
-  copy(other);
-  return *this;
-}
-
-} // namespace Json
diff --git a/3rdParty/jsoncpp/src/lib_json/json_writer.cpp b/3rdParty/jsoncpp/src/lib_json/json_writer.cpp
deleted file mode 100644
index 0852b48b11a194e5bf546d4e645e27930bbc3317..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/lib_json/json_writer.cpp
+++ /dev/null
@@ -1,1233 +0,0 @@
-// Copyright 2011 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include <json/writer.h>
-#include "json_tool.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <iomanip>
-#include <memory>
-#include <sstream>
-#include <utility>
-#include <set>
-#include <cassert>
-#include <cstring>
-#include <cstdio>
-
-#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0
-#include <float.h>
-#define isfinite _finite
-#elif defined(__sun) && defined(__SVR4) //Solaris
-#if !defined(isfinite)
-#include <ieeefp.h>
-#define isfinite finite
-#endif
-#elif defined(_AIX)
-#if !defined(isfinite)
-#include <math.h>
-#define isfinite finite
-#endif
-#elif defined(__hpux)
-#if !defined(isfinite)
-#if defined(__ia64) && !defined(finite)
-#define isfinite(x) ((sizeof(x) == sizeof(float) ? \
-                     _Isfinitef(x) : _IsFinite(x)))
-#else
-#include <math.h>
-#define isfinite finite
-#endif
-#endif
-#else
-#include <cmath>
-#if !(defined(__QNXNTO__)) // QNX already defines isfinite
-#define isfinite std::isfinite
-#endif
-#endif
-
-#if defined(_MSC_VER)
-#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above
-#define snprintf sprintf_s
-#elif _MSC_VER >= 1900 // VC++ 14.0 and above
-#define snprintf std::snprintf
-#else
-#define snprintf _snprintf
-#endif
-#elif defined(__ANDROID__) || defined(__QNXNTO__)
-#define snprintf snprintf
-#elif __cplusplus >= 201103L
-#if !defined(__MINGW32__) && !defined(__CYGWIN__)
-#define snprintf std::snprintf
-#endif
-#endif
-
-#if defined(__BORLANDC__)  
-#include <float.h>
-#define isfinite _finite
-#define snprintf _snprintf
-#endif
-
-#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0
-// Disable warning about strdup being deprecated.
-#pragma warning(disable : 4996)
-#endif
-
-namespace Json {
-
-#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520)
-typedef std::unique_ptr<StreamWriter> StreamWriterPtr;
-#else
-typedef std::auto_ptr<StreamWriter>   StreamWriterPtr;
-#endif
-
-JSONCPP_STRING valueToString(LargestInt value) {
-  UIntToStringBuffer buffer;
-  char* current = buffer + sizeof(buffer);
-  if (value == Value::minLargestInt) {
-    uintToString(LargestUInt(Value::maxLargestInt) + 1, current);
-    *--current = '-';
-  } else if (value < 0) {
-    uintToString(LargestUInt(-value), current);
-    *--current = '-';
-  } else {
-    uintToString(LargestUInt(value), current);
-  }
-  assert(current >= buffer);
-  return current;
-}
-
-JSONCPP_STRING valueToString(LargestUInt value) {
-  UIntToStringBuffer buffer;
-  char* current = buffer + sizeof(buffer);
-  uintToString(value, current);
-  assert(current >= buffer);
-  return current;
-}
-
-#if defined(JSON_HAS_INT64)
-
-JSONCPP_STRING valueToString(Int value) {
-  return valueToString(LargestInt(value));
-}
-
-JSONCPP_STRING valueToString(UInt value) {
-  return valueToString(LargestUInt(value));
-}
-
-#endif // # if defined(JSON_HAS_INT64)
-
-namespace {
-JSONCPP_STRING valueToString(double value, bool useSpecialFloats, unsigned int precision) {
-  // Allocate a buffer that is more than large enough to store the 16 digits of
-  // precision requested below.
-  char buffer[36];
-  int len = -1;
-
-  char formatString[15];
-  snprintf(formatString, sizeof(formatString), "%%.%dg", precision);
-
-  // Print into the buffer. We need not request the alternative representation
-  // that always has a decimal point because JSON doesn't distingish the
-  // concepts of reals and integers.
-  if (isfinite(value)) {
-    len = snprintf(buffer, sizeof(buffer), formatString, value);
-    fixNumericLocale(buffer, buffer + len);
-
-    // try to ensure we preserve the fact that this was given to us as a double on input
-    if (!strchr(buffer, '.') && !strchr(buffer, 'e')) {
-      strcat(buffer, ".0");
-    }
-
-  } else {
-    // IEEE standard states that NaN values will not compare to themselves
-    if (value != value) {
-      len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null");
-    } else if (value < 0) {
-      len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999");
-    } else {
-      len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999");
-    }
-  }
-  assert(len >= 0);
-  return buffer;
-}
-}
-
-JSONCPP_STRING valueToString(double value) { return valueToString(value, false, 17); }
-
-JSONCPP_STRING valueToString(bool value) { return value ? "true" : "false"; }
-
-static bool isAnyCharRequiredQuoting(char const* s, size_t n) {
-  assert(s || !n);
-
-  char const* const end = s + n;
-  for (char const* cur = s; cur < end; ++cur) {
-    if (*cur == '\\' || *cur == '\"' || *cur < ' '
-      || static_cast<unsigned char>(*cur) < 0x80)
-      return true;
-  }
-  return false;
-}
-
-static unsigned int utf8ToCodepoint(const char*& s, const char* e) {
-  const unsigned int REPLACEMENT_CHARACTER = 0xFFFD;
-
-  unsigned int firstByte = static_cast<unsigned char>(*s);
-
-  if (firstByte < 0x80)
-    return firstByte;
-
-  if (firstByte < 0xE0) {
-    if (e - s < 2)
-      return REPLACEMENT_CHARACTER;
-
-    unsigned int calculated = ((firstByte & 0x1F) << 6)
-      | (static_cast<unsigned int>(s[1]) & 0x3F);
-    s += 1;
-    // oversized encoded characters are invalid
-    return calculated < 0x80 ? REPLACEMENT_CHARACTER : calculated;
-  }
-
-  if (firstByte < 0xF0) {
-    if (e - s < 3)
-      return REPLACEMENT_CHARACTER;
-
-    unsigned int calculated = ((firstByte & 0x0F) << 12)
-      | ((static_cast<unsigned int>(s[1]) & 0x3F) << 6)
-      |  (static_cast<unsigned int>(s[2]) & 0x3F);
-    s += 2;
-    // surrogates aren't valid codepoints itself
-    // shouldn't be UTF-8 encoded
-    if (calculated >= 0xD800 && calculated >= 0xDFFF)
-      return REPLACEMENT_CHARACTER;
-    // oversized encoded characters are invalid
-    return calculated < 0x800 ? REPLACEMENT_CHARACTER : calculated;
-  }
-
-  if (firstByte < 0xF8) {
-    if (e - s < 4)
-      return REPLACEMENT_CHARACTER;
-
-    unsigned int calculated = ((firstByte & 0x07) << 24)
-      | ((static_cast<unsigned int>(s[1]) & 0x3F) << 12)
-      | ((static_cast<unsigned int>(s[2]) & 0x3F) << 6)
-      |  (static_cast<unsigned int>(s[3]) & 0x3F);
-    s += 3;
-    // oversized encoded characters are invalid
-    return calculated < 0x10000 ? REPLACEMENT_CHARACTER : calculated;
-  }
-
-  return REPLACEMENT_CHARACTER;
-}
-
-static const char hex2[] =
-  "000102030405060708090a0b0c0d0e0f"
-  "101112131415161718191a1b1c1d1e1f"
-  "202122232425262728292a2b2c2d2e2f"
-  "303132333435363738393a3b3c3d3e3f"
-  "404142434445464748494a4b4c4d4e4f"
-  "505152535455565758595a5b5c5d5e5f"
-  "606162636465666768696a6b6c6d6e6f"
-  "707172737475767778797a7b7c7d7e7f"
-  "808182838485868788898a8b8c8d8e8f"
-  "909192939495969798999a9b9c9d9e9f"
-  "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
-  "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
-  "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
-  "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
-  "e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
-  "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff";
-
-static JSONCPP_STRING toHex16Bit(unsigned int x) {
-  const unsigned int hi = (x >> 8) & 0xff;
-  const unsigned int lo = x & 0xff;
-  JSONCPP_STRING result(4, ' ');
-  result[0] = hex2[2 * hi];
-  result[1] = hex2[2 * hi + 1];
-  result[2] = hex2[2 * lo];
-  result[3] = hex2[2 * lo + 1];
-  return result;
-}
-
-static JSONCPP_STRING valueToQuotedStringN(const char* value, unsigned length) {
-  if (value == NULL)
-    return "";
-
-  if (!isAnyCharRequiredQuoting(value, length))
-    return JSONCPP_STRING("\"") + value + "\"";
-  // We have to walk value and escape any special characters.
-  // Appending to JSONCPP_STRING is not efficient, but this should be rare.
-  // (Note: forward slashes are *not* rare, but I am not escaping them.)
-  JSONCPP_STRING::size_type maxsize =
-      length * 2 + 3; // allescaped+quotes+NULL
-  JSONCPP_STRING result;
-  result.reserve(maxsize); // to avoid lots of mallocs
-  result += "\"";
-  char const* end = value + length;
-  for (const char* c = value; c != end; ++c) {
-    switch (*c) {
-    case '\"':
-      result += "\\\"";
-      break;
-    case '\\':
-      result += "\\\\";
-      break;
-    case '\b':
-      result += "\\b";
-      break;
-    case '\f':
-      result += "\\f";
-      break;
-    case '\n':
-      result += "\\n";
-      break;
-    case '\r':
-      result += "\\r";
-      break;
-    case '\t':
-      result += "\\t";
-      break;
-    // case '/':
-    // Even though \/ is considered a legal escape in JSON, a bare
-    // slash is also legal, so I see no reason to escape it.
-    // (I hope I am not misunderstanding something.)
-    // blep notes: actually escaping \/ may be useful in javascript to avoid </
-    // sequence.
-    // Should add a flag to allow this compatibility mode and prevent this
-    // sequence from occurring.
-    default: {
-        unsigned int cp = utf8ToCodepoint(c, end);
-        // don't escape non-control characters
-        // (short escape sequence are applied above)
-        if (cp < 0x80 && cp >= 0x20)
-          result += static_cast<char>(cp);
-        else if (cp < 0x10000) { // codepoint is in Basic Multilingual Plane
-          result += "\\u";
-          result += toHex16Bit(cp);
-        }
-        else { // codepoint is not in Basic Multilingual Plane
-               // convert to surrogate pair first
-          cp -= 0x10000;
-          result += "\\u";
-          result += toHex16Bit((cp >> 10) + 0xD800);
-          result += "\\u";
-          result += toHex16Bit((cp & 0x3FF) + 0xDC00);
-        }
-      }
-      break;
-    }
-  }
-  result += "\"";
-  return result;
-}
-
-JSONCPP_STRING valueToQuotedString(const char* value) {
-  return valueToQuotedStringN(value, static_cast<unsigned int>(strlen(value)));
-}
-
-// Class Writer
-// //////////////////////////////////////////////////////////////////
-Writer::~Writer() {}
-
-// Class FastWriter
-// //////////////////////////////////////////////////////////////////
-
-FastWriter::FastWriter()
-    : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false),
-      omitEndingLineFeed_(false) {}
-
-void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; }
-
-void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; }
-
-void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; }
-
-JSONCPP_STRING FastWriter::write(const Value& root) {
-  document_.clear();
-  writeValue(root);
-  if (!omitEndingLineFeed_)
-    document_ += "\n";
-  return document_;
-}
-
-void FastWriter::writeValue(const Value& value) {
-  switch (value.type()) {
-  case nullValue:
-    if (!dropNullPlaceholders_)
-      document_ += "null";
-    break;
-  case intValue:
-    document_ += valueToString(value.asLargestInt());
-    break;
-  case uintValue:
-    document_ += valueToString(value.asLargestUInt());
-    break;
-  case realValue:
-    document_ += valueToString(value.asDouble());
-    break;
-  case stringValue:
-  {
-    // Is NULL possible for value.string_? No.
-    char const* str;
-    char const* end;
-    bool ok = value.getString(&str, &end);
-    if (ok) document_ += valueToQuotedStringN(str, static_cast<unsigned>(end-str));
-    break;
-  }
-  case booleanValue:
-    document_ += valueToString(value.asBool());
-    break;
-  case arrayValue: {
-    document_ += '[';
-    ArrayIndex size = value.size();
-    for (ArrayIndex index = 0; index < size; ++index) {
-      if (index > 0)
-        document_ += ',';
-      writeValue(value[index]);
-    }
-    document_ += ']';
-  } break;
-  case objectValue: {
-    Value::Members members(value.getMemberNames());
-    document_ += '{';
-    for (Value::Members::iterator it = members.begin(); it != members.end();
-         ++it) {
-      const JSONCPP_STRING& name = *it;
-      if (it != members.begin())
-        document_ += ',';
-      document_ += valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length()));
-      document_ += yamlCompatiblityEnabled_ ? ": " : ":";
-      writeValue(value[name]);
-    }
-    document_ += '}';
-  } break;
-  }
-}
-
-// Class StyledWriter
-// //////////////////////////////////////////////////////////////////
-
-StyledWriter::StyledWriter()
-    : rightMargin_(74), indentSize_(3), addChildValues_() {}
-
-JSONCPP_STRING StyledWriter::write(const Value& root) {
-  document_.clear();
-  addChildValues_ = false;
-  indentString_.clear();
-  writeCommentBeforeValue(root);
-  writeValue(root);
-  writeCommentAfterValueOnSameLine(root);
-  document_ += "\n";
-  return document_;
-}
-
-void StyledWriter::writeValue(const Value& value) {
-  switch (value.type()) {
-  case nullValue:
-    pushValue("null");
-    break;
-  case intValue:
-    pushValue(valueToString(value.asLargestInt()));
-    break;
-  case uintValue:
-    pushValue(valueToString(value.asLargestUInt()));
-    break;
-  case realValue:
-    pushValue(valueToString(value.asDouble()));
-    break;
-  case stringValue:
-  {
-    // Is NULL possible for value.string_? No.
-    char const* str;
-    char const* end;
-    bool ok = value.getString(&str, &end);
-    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
-    else pushValue("");
-    break;
-  }
-  case booleanValue:
-    pushValue(valueToString(value.asBool()));
-    break;
-  case arrayValue:
-    writeArrayValue(value);
-    break;
-  case objectValue: {
-    Value::Members members(value.getMemberNames());
-    if (members.empty())
-      pushValue("{}");
-    else {
-      writeWithIndent("{");
-      indent();
-      Value::Members::iterator it = members.begin();
-      for (;;) {
-        const JSONCPP_STRING& name = *it;
-        const Value& childValue = value[name];
-        writeCommentBeforeValue(childValue);
-        writeWithIndent(valueToQuotedString(name.c_str()));
-        document_ += " : ";
-        writeValue(childValue);
-        if (++it == members.end()) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        document_ += ',';
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("}");
-    }
-  } break;
-  }
-}
-
-void StyledWriter::writeArrayValue(const Value& value) {
-  unsigned size = value.size();
-  if (size == 0)
-    pushValue("[]");
-  else {
-    bool isArrayMultiLine = isMultineArray(value);
-    if (isArrayMultiLine) {
-      writeWithIndent("[");
-      indent();
-      bool hasChildValue = !childValues_.empty();
-      unsigned index = 0;
-      for (;;) {
-        const Value& childValue = value[index];
-        writeCommentBeforeValue(childValue);
-        if (hasChildValue)
-          writeWithIndent(childValues_[index]);
-        else {
-          writeIndent();
-          writeValue(childValue);
-        }
-        if (++index == size) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        document_ += ',';
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("]");
-    } else // output on a single line
-    {
-      assert(childValues_.size() == size);
-      document_ += "[ ";
-      for (unsigned index = 0; index < size; ++index) {
-        if (index > 0)
-          document_ += ", ";
-        document_ += childValues_[index];
-      }
-      document_ += " ]";
-    }
-  }
-}
-
-bool StyledWriter::isMultineArray(const Value& value) {
-  ArrayIndex const size = value.size();
-  bool isMultiLine = size * 3 >= rightMargin_;
-  childValues_.clear();
-  for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
-    const Value& childValue = value[index];
-    isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
-                        childValue.size() > 0);
-  }
-  if (!isMultiLine) // check if line length > max line length
-  {
-    childValues_.reserve(size);
-    addChildValues_ = true;
-    ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
-    for (ArrayIndex index = 0; index < size; ++index) {
-      if (hasCommentForValue(value[index])) {
-        isMultiLine = true;
-      }
-      writeValue(value[index]);
-      lineLength += static_cast<ArrayIndex>(childValues_[index].length());
-    }
-    addChildValues_ = false;
-    isMultiLine = isMultiLine || lineLength >= rightMargin_;
-  }
-  return isMultiLine;
-}
-
-void StyledWriter::pushValue(const JSONCPP_STRING& value) {
-  if (addChildValues_)
-    childValues_.push_back(value);
-  else
-    document_ += value;
-}
-
-void StyledWriter::writeIndent() {
-  if (!document_.empty()) {
-    char last = document_[document_.length() - 1];
-    if (last == ' ') // already indented
-      return;
-    if (last != '\n') // Comments may add new-line
-      document_ += '\n';
-  }
-  document_ += indentString_;
-}
-
-void StyledWriter::writeWithIndent(const JSONCPP_STRING& value) {
-  writeIndent();
-  document_ += value;
-}
-
-void StyledWriter::indent() { indentString_ += JSONCPP_STRING(indentSize_, ' '); }
-
-void StyledWriter::unindent() {
-  assert(indentString_.size() >= indentSize_);
-  indentString_.resize(indentString_.size() - indentSize_);
-}
-
-void StyledWriter::writeCommentBeforeValue(const Value& root) {
-  if (!root.hasComment(commentBefore))
-    return;
-
-  document_ += "\n";
-  writeIndent();
-  const JSONCPP_STRING& comment = root.getComment(commentBefore);
-  JSONCPP_STRING::const_iterator iter = comment.begin();
-  while (iter != comment.end()) {
-    document_ += *iter;
-    if (*iter == '\n' &&
-       ((iter+1) != comment.end() && *(iter + 1) == '/'))
-      writeIndent();
-    ++iter;
-  }
-
-  // Comments are stripped of trailing newlines, so add one here
-  document_ += "\n";
-}
-
-void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) {
-  if (root.hasComment(commentAfterOnSameLine))
-    document_ += " " + root.getComment(commentAfterOnSameLine);
-
-  if (root.hasComment(commentAfter)) {
-    document_ += "\n";
-    document_ += root.getComment(commentAfter);
-    document_ += "\n";
-  }
-}
-
-bool StyledWriter::hasCommentForValue(const Value& value) {
-  return value.hasComment(commentBefore) ||
-         value.hasComment(commentAfterOnSameLine) ||
-         value.hasComment(commentAfter);
-}
-
-// Class StyledStreamWriter
-// //////////////////////////////////////////////////////////////////
-
-StyledStreamWriter::StyledStreamWriter(JSONCPP_STRING indentation)
-    : document_(NULL), rightMargin_(74), indentation_(indentation),
-      addChildValues_() {}
-
-void StyledStreamWriter::write(JSONCPP_OSTREAM& out, const Value& root) {
-  document_ = &out;
-  addChildValues_ = false;
-  indentString_.clear();
-  indented_ = true;
-  writeCommentBeforeValue(root);
-  if (!indented_) writeIndent();
-  indented_ = true;
-  writeValue(root);
-  writeCommentAfterValueOnSameLine(root);
-  *document_ << "\n";
-  document_ = NULL; // Forget the stream, for safety.
-}
-
-void StyledStreamWriter::writeValue(const Value& value) {
-  switch (value.type()) {
-  case nullValue:
-    pushValue("null");
-    break;
-  case intValue:
-    pushValue(valueToString(value.asLargestInt()));
-    break;
-  case uintValue:
-    pushValue(valueToString(value.asLargestUInt()));
-    break;
-  case realValue:
-    pushValue(valueToString(value.asDouble()));
-    break;
-  case stringValue:
-  {
-    // Is NULL possible for value.string_? No.
-    char const* str;
-    char const* end;
-    bool ok = value.getString(&str, &end);
-    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
-    else pushValue("");
-    break;
-  }
-  case booleanValue:
-    pushValue(valueToString(value.asBool()));
-    break;
-  case arrayValue:
-    writeArrayValue(value);
-    break;
-  case objectValue: {
-    Value::Members members(value.getMemberNames());
-    if (members.empty())
-      pushValue("{}");
-    else {
-      writeWithIndent("{");
-      indent();
-      Value::Members::iterator it = members.begin();
-      for (;;) {
-        const JSONCPP_STRING& name = *it;
-        const Value& childValue = value[name];
-        writeCommentBeforeValue(childValue);
-        writeWithIndent(valueToQuotedString(name.c_str()));
-        *document_ << " : ";
-        writeValue(childValue);
-        if (++it == members.end()) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        *document_ << ",";
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("}");
-    }
-  } break;
-  }
-}
-
-void StyledStreamWriter::writeArrayValue(const Value& value) {
-  unsigned size = value.size();
-  if (size == 0)
-    pushValue("[]");
-  else {
-    bool isArrayMultiLine = isMultineArray(value);
-    if (isArrayMultiLine) {
-      writeWithIndent("[");
-      indent();
-      bool hasChildValue = !childValues_.empty();
-      unsigned index = 0;
-      for (;;) {
-        const Value& childValue = value[index];
-        writeCommentBeforeValue(childValue);
-        if (hasChildValue)
-          writeWithIndent(childValues_[index]);
-        else {
-          if (!indented_) writeIndent();
-          indented_ = true;
-          writeValue(childValue);
-          indented_ = false;
-        }
-        if (++index == size) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        *document_ << ",";
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("]");
-    } else // output on a single line
-    {
-      assert(childValues_.size() == size);
-      *document_ << "[ ";
-      for (unsigned index = 0; index < size; ++index) {
-        if (index > 0)
-          *document_ << ", ";
-        *document_ << childValues_[index];
-      }
-      *document_ << " ]";
-    }
-  }
-}
-
-bool StyledStreamWriter::isMultineArray(const Value& value) {
-  ArrayIndex const size = value.size();
-  bool isMultiLine = size * 3 >= rightMargin_;
-  childValues_.clear();
-  for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
-    const Value& childValue = value[index];
-    isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
-                        childValue.size() > 0);
-  }
-  if (!isMultiLine) // check if line length > max line length
-  {
-    childValues_.reserve(size);
-    addChildValues_ = true;
-    ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
-    for (ArrayIndex index = 0; index < size; ++index) {
-      if (hasCommentForValue(value[index])) {
-        isMultiLine = true;
-      }
-      writeValue(value[index]);
-      lineLength += static_cast<ArrayIndex>(childValues_[index].length());
-    }
-    addChildValues_ = false;
-    isMultiLine = isMultiLine || lineLength >= rightMargin_;
-  }
-  return isMultiLine;
-}
-
-void StyledStreamWriter::pushValue(const JSONCPP_STRING& value) {
-  if (addChildValues_)
-    childValues_.push_back(value);
-  else
-    *document_ << value;
-}
-
-void StyledStreamWriter::writeIndent() {
-  // blep intended this to look at the so-far-written string
-  // to determine whether we are already indented, but
-  // with a stream we cannot do that. So we rely on some saved state.
-  // The caller checks indented_.
-  *document_ << '\n' << indentString_;
-}
-
-void StyledStreamWriter::writeWithIndent(const JSONCPP_STRING& value) {
-  if (!indented_) writeIndent();
-  *document_ << value;
-  indented_ = false;
-}
-
-void StyledStreamWriter::indent() { indentString_ += indentation_; }
-
-void StyledStreamWriter::unindent() {
-  assert(indentString_.size() >= indentation_.size());
-  indentString_.resize(indentString_.size() - indentation_.size());
-}
-
-void StyledStreamWriter::writeCommentBeforeValue(const Value& root) {
-  if (!root.hasComment(commentBefore))
-    return;
-
-  if (!indented_) writeIndent();
-  const JSONCPP_STRING& comment = root.getComment(commentBefore);
-  JSONCPP_STRING::const_iterator iter = comment.begin();
-  while (iter != comment.end()) {
-    *document_ << *iter;
-    if (*iter == '\n' &&
-       ((iter+1) != comment.end() && *(iter + 1) == '/'))
-      // writeIndent();  // would include newline
-      *document_ << indentString_;
-    ++iter;
-  }
-  indented_ = false;
-}
-
-void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) {
-  if (root.hasComment(commentAfterOnSameLine))
-    *document_ << ' ' << root.getComment(commentAfterOnSameLine);
-
-  if (root.hasComment(commentAfter)) {
-    writeIndent();
-    *document_ << root.getComment(commentAfter);
-  }
-  indented_ = false;
-}
-
-bool StyledStreamWriter::hasCommentForValue(const Value& value) {
-  return value.hasComment(commentBefore) ||
-         value.hasComment(commentAfterOnSameLine) ||
-         value.hasComment(commentAfter);
-}
-
-//////////////////////////
-// BuiltStyledStreamWriter
-
-/// Scoped enums are not available until C++11.
-struct CommentStyle {
-  /// Decide whether to write comments.
-  enum Enum {
-    None,  ///< Drop all comments.
-    Most,  ///< Recover odd behavior of previous versions (not implemented yet).
-    All  ///< Keep all comments.
-  };
-};
-
-struct BuiltStyledStreamWriter : public StreamWriter
-{
-  BuiltStyledStreamWriter(
-      JSONCPP_STRING const& indentation,
-      CommentStyle::Enum cs,
-      JSONCPP_STRING const& colonSymbol,
-      JSONCPP_STRING const& nullSymbol,
-      JSONCPP_STRING const& endingLineFeedSymbol,
-      bool useSpecialFloats,
-      unsigned int precision);
-  int write(Value const& root, JSONCPP_OSTREAM* sout) JSONCPP_OVERRIDE;
-private:
-  void writeValue(Value const& value);
-  void writeArrayValue(Value const& value);
-  bool isMultineArray(Value const& value);
-  void pushValue(JSONCPP_STRING const& value);
-  void writeIndent();
-  void writeWithIndent(JSONCPP_STRING const& value);
-  void indent();
-  void unindent();
-  void writeCommentBeforeValue(Value const& root);
-  void writeCommentAfterValueOnSameLine(Value const& root);
-  static bool hasCommentForValue(const Value& value);
-
-  typedef std::vector<JSONCPP_STRING> ChildValues;
-
-  ChildValues childValues_;
-  JSONCPP_STRING indentString_;
-  unsigned int rightMargin_;
-  JSONCPP_STRING indentation_;
-  CommentStyle::Enum cs_;
-  JSONCPP_STRING colonSymbol_;
-  JSONCPP_STRING nullSymbol_;
-  JSONCPP_STRING endingLineFeedSymbol_;
-  bool addChildValues_ : 1;
-  bool indented_ : 1;
-  bool useSpecialFloats_ : 1;
-  unsigned int precision_;
-};
-BuiltStyledStreamWriter::BuiltStyledStreamWriter(
-      JSONCPP_STRING const& indentation,
-      CommentStyle::Enum cs,
-      JSONCPP_STRING const& colonSymbol,
-      JSONCPP_STRING const& nullSymbol,
-      JSONCPP_STRING const& endingLineFeedSymbol,
-      bool useSpecialFloats,
-      unsigned int precision)
-  : rightMargin_(74)
-  , indentation_(indentation)
-  , cs_(cs)
-  , colonSymbol_(colonSymbol)
-  , nullSymbol_(nullSymbol)
-  , endingLineFeedSymbol_(endingLineFeedSymbol)
-  , addChildValues_(false)
-  , indented_(false)
-  , useSpecialFloats_(useSpecialFloats)
-  , precision_(precision)
-{
-}
-int BuiltStyledStreamWriter::write(Value const& root, JSONCPP_OSTREAM* sout)
-{
-  sout_ = sout;
-  addChildValues_ = false;
-  indented_ = true;
-  indentString_.clear();
-  writeCommentBeforeValue(root);
-  if (!indented_) writeIndent();
-  indented_ = true;
-  writeValue(root);
-  writeCommentAfterValueOnSameLine(root);
-  *sout_ << endingLineFeedSymbol_;
-  sout_ = NULL;
-  return 0;
-}
-void BuiltStyledStreamWriter::writeValue(Value const& value) {
-  switch (value.type()) {
-  case nullValue:
-    pushValue(nullSymbol_);
-    break;
-  case intValue:
-    pushValue(valueToString(value.asLargestInt()));
-    break;
-  case uintValue:
-    pushValue(valueToString(value.asLargestUInt()));
-    break;
-  case realValue:
-    pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_));
-    break;
-  case stringValue:
-  {
-    // Is NULL is possible for value.string_? No.
-    char const* str;
-    char const* end;
-    bool ok = value.getString(&str, &end);
-    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
-    else pushValue("");
-    break;
-  }
-  case booleanValue:
-    pushValue(valueToString(value.asBool()));
-    break;
-  case arrayValue:
-    writeArrayValue(value);
-    break;
-  case objectValue: {
-    Value::Members members(value.getMemberNames());
-    if (members.empty())
-      pushValue("{}");
-    else {
-      writeWithIndent("{");
-      indent();
-      Value::Members::iterator it = members.begin();
-      for (;;) {
-        JSONCPP_STRING const& name = *it;
-        Value const& childValue = value[name];
-        writeCommentBeforeValue(childValue);
-        writeWithIndent(valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length())));
-        *sout_ << colonSymbol_;
-        writeValue(childValue);
-        if (++it == members.end()) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        *sout_ << ",";
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("}");
-    }
-  } break;
-  }
-}
-
-void BuiltStyledStreamWriter::writeArrayValue(Value const& value) {
-  unsigned size = value.size();
-  if (size == 0)
-    pushValue("[]");
-  else {
-    bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value);
-    if (isMultiLine) {
-      writeWithIndent("[");
-      indent();
-      bool hasChildValue = !childValues_.empty();
-      unsigned index = 0;
-      for (;;) {
-        Value const& childValue = value[index];
-        writeCommentBeforeValue(childValue);
-        if (hasChildValue)
-          writeWithIndent(childValues_[index]);
-        else {
-          if (!indented_) writeIndent();
-          indented_ = true;
-          writeValue(childValue);
-          indented_ = false;
-        }
-        if (++index == size) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        *sout_ << ",";
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("]");
-    } else // output on a single line
-    {
-      assert(childValues_.size() == size);
-      *sout_ << "[";
-      if (!indentation_.empty()) *sout_ << " ";
-      for (unsigned index = 0; index < size; ++index) {
-        if (index > 0)
-          *sout_ << ((!indentation_.empty()) ? ", " : ",");
-        *sout_ << childValues_[index];
-      }
-      if (!indentation_.empty()) *sout_ << " ";
-      *sout_ << "]";
-    }
-  }
-}
-
-bool BuiltStyledStreamWriter::isMultineArray(Value const& value) {
-  ArrayIndex const size = value.size();
-  bool isMultiLine = size * 3 >= rightMargin_;
-  childValues_.clear();
-  for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
-    Value const& childValue = value[index];
-    isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
-                        childValue.size() > 0);
-  }
-  if (!isMultiLine) // check if line length > max line length
-  {
-    childValues_.reserve(size);
-    addChildValues_ = true;
-    ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
-    for (ArrayIndex index = 0; index < size; ++index) {
-      if (hasCommentForValue(value[index])) {
-        isMultiLine = true;
-      }
-      writeValue(value[index]);
-      lineLength += static_cast<ArrayIndex>(childValues_[index].length());
-    }
-    addChildValues_ = false;
-    isMultiLine = isMultiLine || lineLength >= rightMargin_;
-  }
-  return isMultiLine;
-}
-
-void BuiltStyledStreamWriter::pushValue(JSONCPP_STRING const& value) {
-  if (addChildValues_)
-    childValues_.push_back(value);
-  else
-    *sout_ << value;
-}
-
-void BuiltStyledStreamWriter::writeIndent() {
-  // blep intended this to look at the so-far-written string
-  // to determine whether we are already indented, but
-  // with a stream we cannot do that. So we rely on some saved state.
-  // The caller checks indented_.
-
-  if (!indentation_.empty()) {
-    // In this case, drop newlines too.
-    *sout_ << '\n' << indentString_;
-  }
-}
-
-void BuiltStyledStreamWriter::writeWithIndent(JSONCPP_STRING const& value) {
-  if (!indented_) writeIndent();
-  *sout_ << value;
-  indented_ = false;
-}
-
-void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; }
-
-void BuiltStyledStreamWriter::unindent() {
-  assert(indentString_.size() >= indentation_.size());
-  indentString_.resize(indentString_.size() - indentation_.size());
-}
-
-void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) {
-  if (cs_ == CommentStyle::None) return;
-  if (!root.hasComment(commentBefore))
-    return;
-
-  if (!indented_) writeIndent();
-  const JSONCPP_STRING& comment = root.getComment(commentBefore);
-  JSONCPP_STRING::const_iterator iter = comment.begin();
-  while (iter != comment.end()) {
-    *sout_ << *iter;
-    if (*iter == '\n' &&
-       ((iter+1) != comment.end() && *(iter + 1) == '/'))
-      // writeIndent();  // would write extra newline
-      *sout_ << indentString_;
-    ++iter;
-  }
-  indented_ = false;
-}
-
-void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) {
-  if (cs_ == CommentStyle::None) return;
-  if (root.hasComment(commentAfterOnSameLine))
-    *sout_ << " " + root.getComment(commentAfterOnSameLine);
-
-  if (root.hasComment(commentAfter)) {
-    writeIndent();
-    *sout_ << root.getComment(commentAfter);
-  }
-}
-
-// static
-bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) {
-  return value.hasComment(commentBefore) ||
-         value.hasComment(commentAfterOnSameLine) ||
-         value.hasComment(commentAfter);
-}
-
-///////////////
-// StreamWriter
-
-StreamWriter::StreamWriter()
-    : sout_(NULL)
-{
-}
-StreamWriter::~StreamWriter()
-{
-}
-StreamWriter::Factory::~Factory()
-{}
-StreamWriterBuilder::StreamWriterBuilder()
-{
-  setDefaults(&settings_);
-}
-StreamWriterBuilder::~StreamWriterBuilder()
-{}
-StreamWriter* StreamWriterBuilder::newStreamWriter() const
-{
-  JSONCPP_STRING indentation = settings_["indentation"].asString();
-  JSONCPP_STRING cs_str = settings_["commentStyle"].asString();
-  bool eyc = settings_["enableYAMLCompatibility"].asBool();
-  bool dnp = settings_["dropNullPlaceholders"].asBool();
-  bool usf = settings_["useSpecialFloats"].asBool(); 
-  unsigned int pre = settings_["precision"].asUInt();
-  CommentStyle::Enum cs = CommentStyle::All;
-  if (cs_str == "All") {
-    cs = CommentStyle::All;
-  } else if (cs_str == "None") {
-    cs = CommentStyle::None;
-  } else {
-    throwRuntimeError("commentStyle must be 'All' or 'None'");
-  }
-  JSONCPP_STRING colonSymbol = " : ";
-  if (eyc) {
-    colonSymbol = ": ";
-  } else if (indentation.empty()) {
-    colonSymbol = ":";
-  }
-  JSONCPP_STRING nullSymbol = "null";
-  if (dnp) {
-    nullSymbol.clear();
-  }
-  if (pre > 17) pre = 17;
-  JSONCPP_STRING endingLineFeedSymbol;
-  return new BuiltStyledStreamWriter(
-      indentation, cs,
-      colonSymbol, nullSymbol, endingLineFeedSymbol, usf, pre);
-}
-static void getValidWriterKeys(std::set<JSONCPP_STRING>* valid_keys)
-{
-  valid_keys->clear();
-  valid_keys->insert("indentation");
-  valid_keys->insert("commentStyle");
-  valid_keys->insert("enableYAMLCompatibility");
-  valid_keys->insert("dropNullPlaceholders");
-  valid_keys->insert("useSpecialFloats");
-  valid_keys->insert("precision");
-}
-bool StreamWriterBuilder::validate(Json::Value* invalid) const
-{
-  Json::Value my_invalid;
-  if (!invalid) invalid = &my_invalid;  // so we do not need to test for NULL
-  Json::Value& inv = *invalid;
-  std::set<JSONCPP_STRING> valid_keys;
-  getValidWriterKeys(&valid_keys);
-  Value::Members keys = settings_.getMemberNames();
-  size_t n = keys.size();
-  for (size_t i = 0; i < n; ++i) {
-    JSONCPP_STRING const& key = keys[i];
-    if (valid_keys.find(key) == valid_keys.end()) {
-      inv[key] = settings_[key];
-    }
-  }
-  return 0u == inv.size();
-}
-Value& StreamWriterBuilder::operator[](JSONCPP_STRING key)
-{
-  return settings_[key];
-}
-// static
-void StreamWriterBuilder::setDefaults(Json::Value* settings)
-{
-  //! [StreamWriterBuilderDefaults]
-  (*settings)["commentStyle"] = "All";
-  (*settings)["indentation"] = "\t";
-  (*settings)["enableYAMLCompatibility"] = false;
-  (*settings)["dropNullPlaceholders"] = false;
-  (*settings)["useSpecialFloats"] = false;
-  (*settings)["precision"] = 17;
-  //! [StreamWriterBuilderDefaults]
-}
-
-JSONCPP_STRING writeString(StreamWriter::Factory const& builder, Value const& root) {
-  JSONCPP_OSTRINGSTREAM sout;
-  StreamWriterPtr const writer(builder.newStreamWriter());
-  writer->write(root, &sout);
-  return sout.str();
-}
-
-JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM& sout, Value const& root) {
-  StreamWriterBuilder builder;
-  StreamWriterPtr const writer(builder.newStreamWriter());
-  writer->write(root, &sout);
-  return sout;
-}
-
-} // namespace Json
diff --git a/3rdParty/jsoncpp/src/lib_json/version.h.in b/3rdParty/jsoncpp/src/lib_json/version.h.in
deleted file mode 100644
index 47aac69bdd514982fd50f70fa00fc949a6d8e6cb..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/lib_json/version.h.in
+++ /dev/null
@@ -1,20 +0,0 @@
-// DO NOT EDIT. This file (and "version") is generated by CMake.
-// Run CMake configure step to update it.
-#ifndef JSON_VERSION_H_INCLUDED
-# define JSON_VERSION_H_INCLUDED
-
-# define JSONCPP_VERSION_STRING "@JSONCPP_VERSION@"
-# define JSONCPP_VERSION_MAJOR @JSONCPP_VERSION_MAJOR@
-# define JSONCPP_VERSION_MINOR @JSONCPP_VERSION_MINOR@
-# define JSONCPP_VERSION_PATCH @JSONCPP_VERSION_PATCH@
-# define JSONCPP_VERSION_QUALIFIER
-# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8))
-
-#ifdef JSONCPP_USING_SECURE_MEMORY
-#undef JSONCPP_USING_SECURE_MEMORY
-#endif
-#define JSONCPP_USING_SECURE_MEMORY @JSONCPP_USE_SECURE_MEMORY@
-// If non-zero, the library zeroes any memory that it has allocated before
-// it frees its memory.
-
-#endif // JSON_VERSION_H_INCLUDED
diff --git a/3rdParty/jsoncpp/src/test_lib_json/CMakeLists.txt b/3rdParty/jsoncpp/src/test_lib_json/CMakeLists.txt
deleted file mode 100644
index 7000264a71d0d1c4cad6aa111452456eff4c565b..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/test_lib_json/CMakeLists.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-# vim: et ts=4 sts=4 sw=4 tw=0
-
-ADD_EXECUTABLE( jsoncpp_test 
-                jsontest.cpp
-                jsontest.h
-                main.cpp
-                )
-
-
-IF(BUILD_SHARED_LIBS)
-    ADD_DEFINITIONS( -DJSON_DLL )
-    TARGET_LINK_LIBRARIES(jsoncpp_test jsoncpp_lib)
-ELSE(BUILD_SHARED_LIBS)
-    TARGET_LINK_LIBRARIES(jsoncpp_test jsoncpp_lib_static)
-ENDIF()
-
-# another way to solve issue #90
-#set_target_properties(jsoncpp_test PROPERTIES COMPILE_FLAGS -ffloat-store)
-
-# Run unit tests in post-build
-# (default cmake workflow hides away the test result into a file, resulting in poor dev workflow?!?)
-IF(JSONCPP_WITH_POST_BUILD_UNITTEST)
-    IF(BUILD_SHARED_LIBS)
-        # First, copy the shared lib, for Microsoft.
-        # Then, run the test executable.
-        ADD_CUSTOM_COMMAND( TARGET jsoncpp_test
-                            POST_BUILD
-                            COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:jsoncpp_lib> $<TARGET_FILE_DIR:jsoncpp_test>
-                            COMMAND $<TARGET_FILE:jsoncpp_test>)
-    ELSE(BUILD_SHARED_LIBS)
-        # Just run the test executable.
-        ADD_CUSTOM_COMMAND( TARGET jsoncpp_test
-                            POST_BUILD
-                            COMMAND $<TARGET_FILE:jsoncpp_test>)
-    ENDIF()
-ENDIF()
-
-SET_TARGET_PROPERTIES(jsoncpp_test PROPERTIES OUTPUT_NAME jsoncpp_test) 
diff --git a/3rdParty/jsoncpp/src/test_lib_json/jsontest.cpp b/3rdParty/jsoncpp/src/test_lib_json/jsontest.cpp
deleted file mode 100644
index f8c07677140470410fa2a7dcc6cc9aa7c68cdd9b..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/test_lib_json/jsontest.cpp
+++ /dev/null
@@ -1,457 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#define _CRT_SECURE_NO_WARNINGS 1 // Prevents deprecation warning with MSVC
-#include "jsontest.h"
-#include <stdio.h>
-#include <string>
-
-#if defined(_MSC_VER)
-// Used to install a report hook that prevent dialog on assertion and error.
-#include <crtdbg.h>
-#endif // if defined(_MSC_VER)
-
-#if defined(_WIN32)
-// Used to prevent dialog on memory fault.
-// Limits headers included by Windows.h
-#define WIN32_LEAN_AND_MEAN
-#define NOSERVICE
-#define NOMCX
-#define NOIME
-#define NOSOUND
-#define NOCOMM
-#define NORPC
-#define NOGDI
-#define NOUSER
-#define NODRIVERS
-#define NOLOGERROR
-#define NOPROFILER
-#define NOMEMMGR
-#define NOLFILEIO
-#define NOOPENFILE
-#define NORESOURCE
-#define NOATOM
-#define NOLANGUAGE
-#define NOLSTRING
-#define NODBCS
-#define NOKEYBOARDINFO
-#define NOGDICAPMASKS
-#define NOCOLOR
-#define NOGDIOBJ
-#define NODRAWTEXT
-#define NOTEXTMETRIC
-#define NOSCALABLEFONT
-#define NOBITMAP
-#define NORASTEROPS
-#define NOMETAFILE
-#define NOSYSMETRICS
-#define NOSYSTEMPARAMSINFO
-#define NOMSG
-#define NOWINSTYLES
-#define NOWINOFFSETS
-#define NOSHOWWINDOW
-#define NODEFERWINDOWPOS
-#define NOVIRTUALKEYCODES
-#define NOKEYSTATES
-#define NOWH
-#define NOMENUS
-#define NOSCROLL
-#define NOCLIPBOARD
-#define NOICONS
-#define NOMB
-#define NOSYSCOMMANDS
-#define NOMDI
-#define NOCTLMGR
-#define NOWINMESSAGES
-#include <windows.h>
-#endif // if defined(_WIN32)
-
-namespace JsonTest {
-
-// class TestResult
-// //////////////////////////////////////////////////////////////////
-
-TestResult::TestResult()
-    : predicateId_(1), lastUsedPredicateId_(0), messageTarget_(0) {
-  // The root predicate has id 0
-  rootPredicateNode_.id_ = 0;
-  rootPredicateNode_.next_ = 0;
-  predicateStackTail_ = &rootPredicateNode_;
-}
-
-void TestResult::setTestName(const JSONCPP_STRING& name) { name_ = name; }
-
-TestResult&
-TestResult::addFailure(const char* file, unsigned int line, const char* expr) {
-  /// Walks the PredicateContext stack adding them to failures_ if not already
-  /// added.
-  unsigned int nestingLevel = 0;
-  PredicateContext* lastNode = rootPredicateNode_.next_;
-  for (; lastNode != 0; lastNode = lastNode->next_) {
-    if (lastNode->id_ > lastUsedPredicateId_) // new PredicateContext
-    {
-      lastUsedPredicateId_ = lastNode->id_;
-      addFailureInfo(
-          lastNode->file_, lastNode->line_, lastNode->expr_, nestingLevel);
-      // Link the PredicateContext to the failure for message target when
-      // popping the PredicateContext.
-      lastNode->failure_ = &(failures_.back());
-    }
-    ++nestingLevel;
-  }
-
-  // Adds the failed assertion
-  addFailureInfo(file, line, expr, nestingLevel);
-  messageTarget_ = &(failures_.back());
-  return *this;
-}
-
-void TestResult::addFailureInfo(const char* file,
-                                unsigned int line,
-                                const char* expr,
-                                unsigned int nestingLevel) {
-  Failure failure;
-  failure.file_ = file;
-  failure.line_ = line;
-  if (expr) {
-    failure.expr_ = expr;
-  }
-  failure.nestingLevel_ = nestingLevel;
-  failures_.push_back(failure);
-}
-
-TestResult& TestResult::popPredicateContext() {
-  PredicateContext* lastNode = &rootPredicateNode_;
-  while (lastNode->next_ != 0 && lastNode->next_->next_ != 0) {
-    lastNode = lastNode->next_;
-  }
-  // Set message target to popped failure
-  PredicateContext* tail = lastNode->next_;
-  if (tail != 0 && tail->failure_ != 0) {
-    messageTarget_ = tail->failure_;
-  }
-  // Remove tail from list
-  predicateStackTail_ = lastNode;
-  lastNode->next_ = 0;
-  return *this;
-}
-
-bool TestResult::failed() const { return !failures_.empty(); }
-
-unsigned int TestResult::getAssertionNestingLevel() const {
-  unsigned int level = 0;
-  const PredicateContext* lastNode = &rootPredicateNode_;
-  while (lastNode->next_ != 0) {
-    lastNode = lastNode->next_;
-    ++level;
-  }
-  return level;
-}
-
-void TestResult::printFailure(bool printTestName) const {
-  if (failures_.empty()) {
-    return;
-  }
-
-  if (printTestName) {
-    printf("* Detail of %s test failure:\n", name_.c_str());
-  }
-
-  // Print in reverse to display the callstack in the right order
-  Failures::const_iterator itEnd = failures_.end();
-  for (Failures::const_iterator it = failures_.begin(); it != itEnd; ++it) {
-    const Failure& failure = *it;
-    JSONCPP_STRING indent(failure.nestingLevel_ * 2, ' ');
-    if (failure.file_) {
-      printf("%s%s(%d): ", indent.c_str(), failure.file_, failure.line_);
-    }
-    if (!failure.expr_.empty()) {
-      printf("%s\n", failure.expr_.c_str());
-    } else if (failure.file_) {
-      printf("\n");
-    }
-    if (!failure.message_.empty()) {
-      JSONCPP_STRING reindented = indentText(failure.message_, indent + "  ");
-      printf("%s\n", reindented.c_str());
-    }
-  }
-}
-
-JSONCPP_STRING TestResult::indentText(const JSONCPP_STRING& text,
-                                   const JSONCPP_STRING& indent) {
-  JSONCPP_STRING reindented;
-  JSONCPP_STRING::size_type lastIndex = 0;
-  while (lastIndex < text.size()) {
-    JSONCPP_STRING::size_type nextIndex = text.find('\n', lastIndex);
-    if (nextIndex == JSONCPP_STRING::npos) {
-      nextIndex = text.size() - 1;
-    }
-    reindented += indent;
-    reindented += text.substr(lastIndex, nextIndex - lastIndex + 1);
-    lastIndex = nextIndex + 1;
-  }
-  return reindented;
-}
-
-TestResult& TestResult::addToLastFailure(const JSONCPP_STRING& message) {
-  if (messageTarget_ != 0) {
-    messageTarget_->message_ += message;
-  }
-  return *this;
-}
-
-TestResult& TestResult::operator<<(Json::Int64 value) {
-  return addToLastFailure(Json::valueToString(value));
-}
-
-TestResult& TestResult::operator<<(Json::UInt64 value) {
-  return addToLastFailure(Json::valueToString(value));
-}
-
-TestResult& TestResult::operator<<(bool value) {
-  return addToLastFailure(value ? "true" : "false");
-}
-
-// class TestCase
-// //////////////////////////////////////////////////////////////////
-
-TestCase::TestCase() : result_(0) {}
-
-TestCase::~TestCase() {}
-
-void TestCase::run(TestResult& result) {
-  result_ = &result;
-  runTestCase();
-}
-
-// class Runner
-// //////////////////////////////////////////////////////////////////
-
-Runner::Runner() {}
-
-Runner& Runner::add(TestCaseFactory factory) {
-  tests_.push_back(factory);
-  return *this;
-}
-
-unsigned int Runner::testCount() const {
-  return static_cast<unsigned int>(tests_.size());
-}
-
-JSONCPP_STRING Runner::testNameAt(unsigned int index) const {
-  TestCase* test = tests_[index]();
-  JSONCPP_STRING name = test->testName();
-  delete test;
-  return name;
-}
-
-void Runner::runTestAt(unsigned int index, TestResult& result) const {
-  TestCase* test = tests_[index]();
-  result.setTestName(test->testName());
-  printf("Testing %s: ", test->testName());
-  fflush(stdout);
-#if JSON_USE_EXCEPTION
-  try {
-#endif // if JSON_USE_EXCEPTION
-    test->run(result);
-#if JSON_USE_EXCEPTION
-  }
-  catch (const std::exception& e) {
-    result.addFailure(__FILE__, __LINE__, "Unexpected exception caught:")
-        << e.what();
-  }
-#endif // if JSON_USE_EXCEPTION
-  delete test;
-  const char* status = result.failed() ? "FAILED" : "OK";
-  printf("%s\n", status);
-  fflush(stdout);
-}
-
-bool Runner::runAllTest(bool printSummary) const {
-  unsigned int count = testCount();
-  std::deque<TestResult> failures;
-  for (unsigned int index = 0; index < count; ++index) {
-    TestResult result;
-    runTestAt(index, result);
-    if (result.failed()) {
-      failures.push_back(result);
-    }
-  }
-
-  if (failures.empty()) {
-    if (printSummary) {
-      printf("All %d tests passed\n", count);
-    }
-    return true;
-  } else {
-    for (unsigned int index = 0; index < failures.size(); ++index) {
-      TestResult& result = failures[index];
-      result.printFailure(count > 1);
-    }
-
-    if (printSummary) {
-      unsigned int failedCount = static_cast<unsigned int>(failures.size());
-      unsigned int passedCount = count - failedCount;
-      printf("%d/%d tests passed (%d failure(s))\n",
-             passedCount,
-             count,
-             failedCount);
-    }
-    return false;
-  }
-}
-
-bool Runner::testIndex(const JSONCPP_STRING& testName,
-                       unsigned int& indexOut) const {
-  unsigned int count = testCount();
-  for (unsigned int index = 0; index < count; ++index) {
-    if (testNameAt(index) == testName) {
-      indexOut = index;
-      return true;
-    }
-  }
-  return false;
-}
-
-void Runner::listTests() const {
-  unsigned int count = testCount();
-  for (unsigned int index = 0; index < count; ++index) {
-    printf("%s\n", testNameAt(index).c_str());
-  }
-}
-
-int Runner::runCommandLine(int argc, const char* argv[]) const {
-  // typedef std::deque<JSONCPP_STRING> TestNames;
-  Runner subrunner;
-  for (int index = 1; index < argc; ++index) {
-    JSONCPP_STRING opt = argv[index];
-    if (opt == "--list-tests") {
-      listTests();
-      return 0;
-    } else if (opt == "--test-auto") {
-      preventDialogOnCrash();
-    } else if (opt == "--test") {
-      ++index;
-      if (index < argc) {
-        unsigned int testNameIndex;
-        if (testIndex(argv[index], testNameIndex)) {
-          subrunner.add(tests_[testNameIndex]);
-        } else {
-          fprintf(stderr, "Test '%s' does not exist!\n", argv[index]);
-          return 2;
-        }
-      } else {
-        printUsage(argv[0]);
-        return 2;
-      }
-    } else {
-      printUsage(argv[0]);
-      return 2;
-    }
-  }
-  bool succeeded;
-  if (subrunner.testCount() > 0) {
-    succeeded = subrunner.runAllTest(subrunner.testCount() > 1);
-  } else {
-    succeeded = runAllTest(true);
-  }
-  return succeeded ? 0 : 1;
-}
-
-#if defined(_MSC_VER) && defined(_DEBUG)
-// Hook MSVCRT assertions to prevent dialog from appearing
-static int
-msvcrtSilentReportHook(int reportType, char* message, int* /*returnValue*/) {
-  // The default CRT handling of error and assertion is to display
-  // an error dialog to the user.
-  // Instead, when an error or an assertion occurs, we force the
-  // application to terminate using abort() after display
-  // the message on stderr.
-  if (reportType == _CRT_ERROR || reportType == _CRT_ASSERT) {
-    // calling abort() cause the ReportHook to be called
-    // The following is used to detect this case and let's the
-    // error handler fallback on its default behaviour (
-    // display a warning message)
-    static volatile bool isAborting = false;
-    if (isAborting) {
-      return TRUE;
-    }
-    isAborting = true;
-
-    fprintf(stderr, "CRT Error/Assert:\n%s\n", message);
-    fflush(stderr);
-    abort();
-  }
-  // Let's other reportType (_CRT_WARNING) be handled as they would by default
-  return FALSE;
-}
-#endif // if defined(_MSC_VER)
-
-void Runner::preventDialogOnCrash() {
-#if defined(_MSC_VER) && defined(_DEBUG)
-  // Install a hook to prevent MSVCRT error and assertion from
-  // popping a dialog
-  // This function a NO-OP in release configuration
-  // (which cause warning since msvcrtSilentReportHook is not referenced)
-  _CrtSetReportHook(&msvcrtSilentReportHook);
-#endif // if defined(_MSC_VER)
-
-// @todo investiguate this handler (for buffer overflow)
-// _set_security_error_handler
-
-#if defined(_WIN32)
-  // Prevents the system from popping a dialog for debugging if the
-  // application fails due to invalid memory access.
-  SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX |
-               SEM_NOOPENFILEERRORBOX);
-#endif // if defined(_WIN32)
-}
-
-void Runner::printUsage(const char* appName) {
-  printf("Usage: %s [options]\n"
-         "\n"
-         "If --test is not specified, then all the test cases be run.\n"
-         "\n"
-         "Valid options:\n"
-         "--list-tests: print the name of all test cases on the standard\n"
-         "              output and exit.\n"
-         "--test TESTNAME: executes the test case with the specified name.\n"
-         "                 May be repeated.\n"
-         "--test-auto: prevent dialog prompting for debugging on crash.\n",
-         appName);
-}
-
-// Assertion functions
-// //////////////////////////////////////////////////////////////////
-
-JSONCPP_STRING ToJsonString(const char* toConvert) {
-  return JSONCPP_STRING(toConvert);
-}
-
-JSONCPP_STRING ToJsonString(JSONCPP_STRING in) {
-  return in;
-}
-
-#if JSONCPP_USING_SECURE_MEMORY
-JSONCPP_STRING ToJsonString(std::string in) {
-  return JSONCPP_STRING(in.data(), in.data() + in.length());
-}
-#endif
-
-TestResult& checkStringEqual(TestResult& result,
-                             const JSONCPP_STRING& expected,
-                             const JSONCPP_STRING& actual,
-                             const char* file,
-                             unsigned int line,
-                             const char* expr) {
-  if (expected != actual) {
-    result.addFailure(file, line, expr);
-    result << "Expected: '" << expected << "'\n";
-    result << "Actual  : '" << actual << "'";
-  }
-  return result;
-}
-
-} // namespace JsonTest
diff --git a/3rdParty/jsoncpp/src/test_lib_json/jsontest.h b/3rdParty/jsoncpp/src/test_lib_json/jsontest.h
deleted file mode 100644
index 955317df29dd51e90802dbb38e04c44b2a5fcd44..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/test_lib_json/jsontest.h
+++ /dev/null
@@ -1,286 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef JSONTEST_H_INCLUDED
-#define JSONTEST_H_INCLUDED
-
-#include <json/config.h>
-#include <json/value.h>
-#include <json/writer.h>
-#include <stdio.h>
-#include <deque>
-#include <sstream>
-#include <string>
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// Mini Unit Testing framework
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-/** \brief Unit testing framework.
- * \warning: all assertions are non-aborting, test case execution will continue
- *           even if an assertion namespace.
- *           This constraint is for portability: the framework needs to compile
- *           on Visual Studio 6 and must not require exception usage.
- */
-namespace JsonTest {
-
-class Failure {
-public:
-  const char* file_;
-  unsigned int line_;
-  JSONCPP_STRING expr_;
-  JSONCPP_STRING message_;
-  unsigned int nestingLevel_;
-};
-
-/// Context used to create the assertion callstack on failure.
-/// Must be a POD to allow inline initialisation without stepping
-/// into the debugger.
-struct PredicateContext {
-  typedef unsigned int Id;
-  Id id_;
-  const char* file_;
-  unsigned int line_;
-  const char* expr_;
-  PredicateContext* next_;
-  /// Related Failure, set when the PredicateContext is converted
-  /// into a Failure.
-  Failure* failure_;
-};
-
-class TestResult {
-public:
-  TestResult();
-
-  /// \internal Implementation detail for assertion macros
-  /// Not encapsulated to prevent step into when debugging failed assertions
-  /// Incremented by one on assertion predicate entry, decreased by one
-  /// by addPredicateContext().
-  PredicateContext::Id predicateId_;
-
-  /// \internal Implementation detail for predicate macros
-  PredicateContext* predicateStackTail_;
-
-  void setTestName(const JSONCPP_STRING& name);
-
-  /// Adds an assertion failure.
-  TestResult&
-  addFailure(const char* file, unsigned int line, const char* expr = 0);
-
-  /// Removes the last PredicateContext added to the predicate stack
-  /// chained list.
-  /// Next messages will be targed at the PredicateContext that was removed.
-  TestResult& popPredicateContext();
-
-  bool failed() const;
-
-  void printFailure(bool printTestName) const;
-
-  // Generic operator that will work with anything ostream can deal with.
-  template <typename T> TestResult& operator<<(const T& value) {
-    JSONCPP_OSTRINGSTREAM oss;
-    oss.precision(16);
-    oss.setf(std::ios_base::floatfield);
-    oss << value;
-    return addToLastFailure(oss.str());
-  }
-
-  // Specialized versions.
-  TestResult& operator<<(bool value);
-  // std:ostream does not support 64bits integers on all STL implementation
-  TestResult& operator<<(Json::Int64 value);
-  TestResult& operator<<(Json::UInt64 value);
-
-private:
-  TestResult& addToLastFailure(const JSONCPP_STRING& message);
-  unsigned int getAssertionNestingLevel() const;
-  /// Adds a failure or a predicate context
-  void addFailureInfo(const char* file,
-                      unsigned int line,
-                      const char* expr,
-                      unsigned int nestingLevel);
-  static JSONCPP_STRING indentText(const JSONCPP_STRING& text,
-                                const JSONCPP_STRING& indent);
-
-  typedef std::deque<Failure> Failures;
-  Failures failures_;
-  JSONCPP_STRING name_;
-  PredicateContext rootPredicateNode_;
-  PredicateContext::Id lastUsedPredicateId_;
-  /// Failure which is the target of the messages added using operator <<
-  Failure* messageTarget_;
-};
-
-class TestCase {
-public:
-  TestCase();
-
-  virtual ~TestCase();
-
-  void run(TestResult& result);
-
-  virtual const char* testName() const = 0;
-
-protected:
-  TestResult* result_;
-
-private:
-  virtual void runTestCase() = 0;
-};
-
-/// Function pointer type for TestCase factory
-typedef TestCase* (*TestCaseFactory)();
-
-class Runner {
-public:
-  Runner();
-
-  /// Adds a test to the suite
-  Runner& add(TestCaseFactory factory);
-
-  /// Runs test as specified on the command-line
-  /// If no command-line arguments are provided, run all tests.
-  /// If --list-tests is provided, then print the list of all test cases
-  /// If --test <testname> is provided, then run test testname.
-  int runCommandLine(int argc, const char* argv[]) const;
-
-  /// Runs all the test cases
-  bool runAllTest(bool printSummary) const;
-
-  /// Returns the number of test case in the suite
-  unsigned int testCount() const;
-
-  /// Returns the name of the test case at the specified index
-  JSONCPP_STRING testNameAt(unsigned int index) const;
-
-  /// Runs the test case at the specified index using the specified TestResult
-  void runTestAt(unsigned int index, TestResult& result) const;
-
-  static void printUsage(const char* appName);
-
-private: // prevents copy construction and assignment
-  Runner(const Runner& other);
-  Runner& operator=(const Runner& other);
-
-private:
-  void listTests() const;
-  bool testIndex(const JSONCPP_STRING& testName, unsigned int& index) const;
-  static void preventDialogOnCrash();
-
-private:
-  typedef std::deque<TestCaseFactory> Factories;
-  Factories tests_;
-};
-
-template <typename T, typename U>
-TestResult& checkEqual(TestResult& result,
-                       T expected,
-                       U actual,
-                       const char* file,
-                       unsigned int line,
-                       const char* expr) {
-  if (static_cast<U>(expected) != actual) {
-    result.addFailure(file, line, expr);
-    result << "Expected: " << static_cast<U>(expected) << "\n";
-    result << "Actual  : " << actual;
-  }
-  return result;
-}
-
-JSONCPP_STRING ToJsonString(const char* toConvert);
-JSONCPP_STRING ToJsonString(JSONCPP_STRING in);
-#if JSONCPP_USING_SECURE_MEMORY
-JSONCPP_STRING ToJsonString(std::string in);
-#endif
-
-TestResult& checkStringEqual(TestResult& result,
-                             const JSONCPP_STRING& expected,
-                             const JSONCPP_STRING& actual,
-                             const char* file,
-                             unsigned int line,
-                             const char* expr);
-
-} // namespace JsonTest
-
-/// \brief Asserts that the given expression is true.
-/// JSONTEST_ASSERT( x == y ) << "x=" << x << ", y=" << y;
-/// JSONTEST_ASSERT( x == y );
-#define JSONTEST_ASSERT(expr)                                                  \
-  if (expr) {                                                                  \
-  } else                                                                       \
-  result_->addFailure(__FILE__, __LINE__, #expr)
-
-/// \brief Asserts that the given predicate is true.
-/// The predicate may do other assertions and be a member function of the
-/// fixture.
-#define JSONTEST_ASSERT_PRED(expr)                                             \
-  {                                                                            \
-    JsonTest::PredicateContext _minitest_Context = {                           \
-      result_->predicateId_, __FILE__, __LINE__, #expr, NULL, NULL             \
-    };                                                                         \
-    result_->predicateStackTail_->next_ = &_minitest_Context;                  \
-    result_->predicateId_ += 1;                                                \
-    result_->predicateStackTail_ = &_minitest_Context;                         \
-    (expr);                                                                    \
-    result_->popPredicateContext();                                            \
-  }
-
-/// \brief Asserts that two values are equals.
-#define JSONTEST_ASSERT_EQUAL(expected, actual)                                \
-  JsonTest::checkEqual(*result_,                                               \
-                       expected,                                               \
-                       actual,                                                 \
-                       __FILE__,                                               \
-                       __LINE__,                                               \
-                       #expected " == " #actual)
-
-/// \brief Asserts that two values are equals.
-#define JSONTEST_ASSERT_STRING_EQUAL(expected, actual)                         \
-  JsonTest::checkStringEqual(*result_,                                         \
-		                 JsonTest::ToJsonString(expected),                 \
-		                     JsonTest::ToJsonString(actual),                   \
-                             __FILE__,                                         \
-                             __LINE__,                                         \
-                             #expected " == " #actual)
-
-/// \brief Asserts that a given expression throws an exception
-#define JSONTEST_ASSERT_THROWS(expr)                                           \
-  {                                                                            \
-    bool _threw = false;                                                       \
-    try {                                                                      \
-      expr;                                                                    \
-    }                                                                          \
-    catch (...) {                                                              \
-      _threw = true;                                                           \
-    }                                                                          \
-    if (!_threw)                                                               \
-      result_->addFailure(                                                     \
-          __FILE__, __LINE__, "expected exception thrown: " #expr);            \
-  }
-
-/// \brief Begin a fixture test case.
-#define JSONTEST_FIXTURE(FixtureType, name)                                    \
-  class Test##FixtureType##name : public FixtureType {                         \
-  public:                                                                      \
-    static JsonTest::TestCase* factory() {                                     \
-      return new Test##FixtureType##name();                                    \
-    }                                                                          \
-                                                                               \
-  public: /* overidden from TestCase */                                        \
-    const char* testName() const JSONCPP_OVERRIDE { return #FixtureType "/" #name; }    \
-    void runTestCase() JSONCPP_OVERRIDE;                                                \
-  };                                                                           \
-                                                                               \
-  void Test##FixtureType##name::runTestCase()
-
-#define JSONTEST_FIXTURE_FACTORY(FixtureType, name)                            \
-  &Test##FixtureType##name::factory
-
-#define JSONTEST_REGISTER_FIXTURE(runner, FixtureType, name)                   \
-  (runner).add(JSONTEST_FIXTURE_FACTORY(FixtureType, name))
-
-#endif // ifndef JSONTEST_H_INCLUDED
diff --git a/3rdParty/jsoncpp/src/test_lib_json/main.cpp b/3rdParty/jsoncpp/src/test_lib_json/main.cpp
deleted file mode 100644
index 26e01cd057822c7940c54044fd184897db796de1..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/src/test_lib_json/main.cpp
+++ /dev/null
@@ -1,2594 +0,0 @@
-// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-
-#include "jsontest.h"
-#include <json/config.h>
-#include <json/json.h>
-#include <cstring>
-#include <limits>
-#include <sstream>
-#include <string>
-#include <iomanip>
-
-// Make numeric limits more convenient to talk about.
-// Assumes int type in 32 bits.
-#define kint32max Json::Value::maxInt
-#define kint32min Json::Value::minInt
-#define kuint32max Json::Value::maxUInt
-#define kint64max Json::Value::maxInt64
-#define kint64min Json::Value::minInt64
-#define kuint64max Json::Value::maxUInt64
-
-//static const double kdint64max = double(kint64max);
-//static const float kfint64max = float(kint64max);
-static const float kfint32max = float(kint32max);
-static const float kfuint32max = float(kuint32max);
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// Json Library test cases
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-static inline double uint64ToDouble(Json::UInt64 value) {
-  return static_cast<double>(value);
-}
-#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-static inline double uint64ToDouble(Json::UInt64 value) {
-  return static_cast<double>(Json::Int64(value / 2)) * 2.0 +
-         static_cast<double>(Json::Int64(value & 1));
-}
-#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-
-struct ValueTest : JsonTest::TestCase {
-  Json::Value null_;
-  Json::Value emptyArray_;
-  Json::Value emptyObject_;
-  Json::Value integer_;
-  Json::Value unsignedInteger_;
-  Json::Value smallUnsignedInteger_;
-  Json::Value real_;
-  Json::Value float_;
-  Json::Value array1_;
-  Json::Value object1_;
-  Json::Value emptyString_;
-  Json::Value string1_;
-  Json::Value string_;
-  Json::Value true_;
-  Json::Value false_;
-
-  ValueTest()
-      : emptyArray_(Json::arrayValue), emptyObject_(Json::objectValue),
-        integer_(123456789), unsignedInteger_(34567890u),
-        smallUnsignedInteger_(Json::Value::UInt(Json::Value::maxInt)),
-        real_(1234.56789), float_(0.00390625f), emptyString_(""), string1_("a"),
-        string_("sometext with space"), true_(true), false_(false) {
-    array1_.append(1234);
-    object1_["id"] = 1234;
-  }
-
-  struct IsCheck {
-    /// Initialize all checks to \c false by default.
-    IsCheck();
-
-    bool isObject_;
-    bool isArray_;
-    bool isBool_;
-    bool isString_;
-    bool isNull_;
-
-    bool isInt_;
-    bool isInt64_;
-    bool isUInt_;
-    bool isUInt64_;
-    bool isIntegral_;
-    bool isDouble_;
-    bool isNumeric_;
-  };
-
-  void checkConstMemberCount(const Json::Value& value,
-                             unsigned int expectedCount);
-
-  void checkMemberCount(Json::Value& value, unsigned int expectedCount);
-
-  void checkIs(const Json::Value& value, const IsCheck& check);
-
-  void checkIsLess(const Json::Value& x, const Json::Value& y);
-
-  void checkIsEqual(const Json::Value& x, const Json::Value& y);
-
-  /// Normalize the representation of floating-point number by stripped leading
-  /// 0 in exponent.
-  static JSONCPP_STRING normalizeFloatingPointStr(const JSONCPP_STRING& s);
-};
-
-JSONCPP_STRING ValueTest::normalizeFloatingPointStr(const JSONCPP_STRING& s) {
-  JSONCPP_STRING::size_type index = s.find_last_of("eE");
-  if (index != JSONCPP_STRING::npos) {
-    JSONCPP_STRING::size_type hasSign =
-        (s[index + 1] == '+' || s[index + 1] == '-') ? 1 : 0;
-    JSONCPP_STRING::size_type exponentStartIndex = index + 1 + hasSign;
-    JSONCPP_STRING normalized = s.substr(0, exponentStartIndex);
-    JSONCPP_STRING::size_type indexDigit =
-        s.find_first_not_of('0', exponentStartIndex);
-    JSONCPP_STRING exponent = "0";
-    if (indexDigit !=
-        JSONCPP_STRING::npos) // There is an exponent different from 0
-    {
-      exponent = s.substr(indexDigit);
-    }
-    return normalized + exponent;
-  }
-  return s;
-}
-
-JSONTEST_FIXTURE(ValueTest, checkNormalizeFloatingPointStr) {
-  JSONTEST_ASSERT_STRING_EQUAL("0.0", normalizeFloatingPointStr("0.0"));
-  JSONTEST_ASSERT_STRING_EQUAL("0e0", normalizeFloatingPointStr("0e0"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234.0", normalizeFloatingPointStr("1234.0"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234.0e0",
-                               normalizeFloatingPointStr("1234.0e0"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234.0e+0",
-                               normalizeFloatingPointStr("1234.0e+0"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234e-1", normalizeFloatingPointStr("1234e-1"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234e10", normalizeFloatingPointStr("1234e10"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234e10",
-                               normalizeFloatingPointStr("1234e010"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234e+10",
-                               normalizeFloatingPointStr("1234e+010"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234e-10",
-                               normalizeFloatingPointStr("1234e-010"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234e+100",
-                               normalizeFloatingPointStr("1234e+100"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234e-100",
-                               normalizeFloatingPointStr("1234e-100"));
-  JSONTEST_ASSERT_STRING_EQUAL("1234e+1",
-                               normalizeFloatingPointStr("1234e+001"));
-}
-
-JSONTEST_FIXTURE(ValueTest, memberCount) {
-  JSONTEST_ASSERT_PRED(checkMemberCount(emptyArray_, 0));
-  JSONTEST_ASSERT_PRED(checkMemberCount(emptyObject_, 0));
-  JSONTEST_ASSERT_PRED(checkMemberCount(array1_, 1));
-  JSONTEST_ASSERT_PRED(checkMemberCount(object1_, 1));
-  JSONTEST_ASSERT_PRED(checkMemberCount(null_, 0));
-  JSONTEST_ASSERT_PRED(checkMemberCount(integer_, 0));
-  JSONTEST_ASSERT_PRED(checkMemberCount(unsignedInteger_, 0));
-  JSONTEST_ASSERT_PRED(checkMemberCount(smallUnsignedInteger_, 0));
-  JSONTEST_ASSERT_PRED(checkMemberCount(real_, 0));
-  JSONTEST_ASSERT_PRED(checkMemberCount(emptyString_, 0));
-  JSONTEST_ASSERT_PRED(checkMemberCount(string_, 0));
-  JSONTEST_ASSERT_PRED(checkMemberCount(true_, 0));
-}
-
-JSONTEST_FIXTURE(ValueTest, objects) {
-  // Types
-  IsCheck checks;
-  checks.isObject_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(emptyObject_, checks));
-  JSONTEST_ASSERT_PRED(checkIs(object1_, checks));
-
-  JSONTEST_ASSERT_EQUAL(Json::objectValue, emptyObject_.type());
-
-  // Empty object okay
-  JSONTEST_ASSERT(emptyObject_.isConvertibleTo(Json::nullValue));
-
-  // Non-empty object not okay
-  JSONTEST_ASSERT(!object1_.isConvertibleTo(Json::nullValue));
-
-  // Always okay
-  JSONTEST_ASSERT(emptyObject_.isConvertibleTo(Json::objectValue));
-
-  // Never okay
-  JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::uintValue));
-  JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::stringValue));
-
-  // Access through const reference
-  const Json::Value& constObject = object1_;
-
-  JSONTEST_ASSERT_EQUAL(Json::Value(1234), constObject["id"]);
-  JSONTEST_ASSERT_EQUAL(Json::Value(), constObject["unknown id"]);
-
-  // Access through non-const reference
-  JSONTEST_ASSERT_EQUAL(Json::Value(1234), object1_["id"]);
-  JSONTEST_ASSERT_EQUAL(Json::Value(), object1_["unknown id"]);
-
-  object1_["some other id"] = "foo";
-  JSONTEST_ASSERT_EQUAL(Json::Value("foo"), object1_["some other id"]);
-  JSONTEST_ASSERT_EQUAL(Json::Value("foo"), object1_["some other id"]);
-
-  // Remove.
-  Json::Value got;
-  bool did;
-  did = object1_.removeMember("some other id", &got);
-  JSONTEST_ASSERT_EQUAL(Json::Value("foo"), got);
-  JSONTEST_ASSERT_EQUAL(true, did);
-  got = Json::Value("bar");
-  did = object1_.removeMember("some other id", &got);
-  JSONTEST_ASSERT_EQUAL(Json::Value("bar"), got);
-  JSONTEST_ASSERT_EQUAL(false, did);
-}
-
-JSONTEST_FIXTURE(ValueTest, arrays) {
-  const unsigned int index0 = 0;
-
-  // Types
-  IsCheck checks;
-  checks.isArray_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(emptyArray_, checks));
-  JSONTEST_ASSERT_PRED(checkIs(array1_, checks));
-
-  JSONTEST_ASSERT_EQUAL(Json::arrayValue, array1_.type());
-
-  // Empty array okay
-  JSONTEST_ASSERT(emptyArray_.isConvertibleTo(Json::nullValue));
-
-  // Non-empty array not okay
-  JSONTEST_ASSERT(!array1_.isConvertibleTo(Json::nullValue));
-
-  // Always okay
-  JSONTEST_ASSERT(emptyArray_.isConvertibleTo(Json::arrayValue));
-
-  // Never okay
-  JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::objectValue));
-  JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::uintValue));
-  JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::stringValue));
-
-  // Access through const reference
-  const Json::Value& constArray = array1_;
-  JSONTEST_ASSERT_EQUAL(Json::Value(1234), constArray[index0]);
-  JSONTEST_ASSERT_EQUAL(Json::Value(1234), constArray[0]);
-
-  // Access through non-const reference
-  JSONTEST_ASSERT_EQUAL(Json::Value(1234), array1_[index0]);
-  JSONTEST_ASSERT_EQUAL(Json::Value(1234), array1_[0]);
-
-  array1_[2] = Json::Value(17);
-  JSONTEST_ASSERT_EQUAL(Json::Value(), array1_[1]);
-  JSONTEST_ASSERT_EQUAL(Json::Value(17), array1_[2]);
-  Json::Value got;
-  JSONTEST_ASSERT_EQUAL(true, array1_.removeIndex(2, &got));
-  JSONTEST_ASSERT_EQUAL(Json::Value(17), got);
-  JSONTEST_ASSERT_EQUAL(false, array1_.removeIndex(2, &got)); // gone now
-}
-JSONTEST_FIXTURE(ValueTest, arrayIssue252)
-{
-  int count = 5;
-  Json::Value root;
-  Json::Value item;
-  root["array"] = Json::Value::nullRef;
-  for (int i = 0; i < count; i++)
-  {
-    item["a"] = i;
-    item["b"] = i;
-    root["array"][i] = item;
-  }
-  //JSONTEST_ASSERT_EQUAL(5, root["array"].size());
-}
-
-JSONTEST_FIXTURE(ValueTest, null) {
-  JSONTEST_ASSERT_EQUAL(Json::nullValue, null_.type());
-
-  IsCheck checks;
-  checks.isNull_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(null_, checks));
-
-  JSONTEST_ASSERT(null_.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(null_.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(null_.isConvertibleTo(Json::uintValue));
-  JSONTEST_ASSERT(null_.isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(null_.isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(null_.isConvertibleTo(Json::stringValue));
-  JSONTEST_ASSERT(null_.isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(null_.isConvertibleTo(Json::objectValue));
-
-  JSONTEST_ASSERT_EQUAL(Json::Int(0), null_.asInt());
-  JSONTEST_ASSERT_EQUAL(Json::LargestInt(0), null_.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(Json::UInt(0), null_.asUInt());
-  JSONTEST_ASSERT_EQUAL(Json::LargestUInt(0), null_.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(0.0, null_.asDouble());
-  JSONTEST_ASSERT_EQUAL(0.0, null_.asFloat());
-  JSONTEST_ASSERT_STRING_EQUAL("", null_.asString());
-
-  JSONTEST_ASSERT_EQUAL(Json::Value::null, null_);
-}
-
-JSONTEST_FIXTURE(ValueTest, strings) {
-  JSONTEST_ASSERT_EQUAL(Json::stringValue, string1_.type());
-
-  IsCheck checks;
-  checks.isString_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(emptyString_, checks));
-  JSONTEST_ASSERT_PRED(checkIs(string_, checks));
-  JSONTEST_ASSERT_PRED(checkIs(string1_, checks));
-
-  // Empty string okay
-  JSONTEST_ASSERT(emptyString_.isConvertibleTo(Json::nullValue));
-
-  // Non-empty string not okay
-  JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::nullValue));
-
-  // Always okay
-  JSONTEST_ASSERT(string1_.isConvertibleTo(Json::stringValue));
-
-  // Never okay
-  JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::objectValue));
-  JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::uintValue));
-  JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::realValue));
-
-  JSONTEST_ASSERT_STRING_EQUAL("a", string1_.asString());
-  JSONTEST_ASSERT_STRING_EQUAL("a", string1_.asCString());
-}
-
-JSONTEST_FIXTURE(ValueTest, bools) {
-  JSONTEST_ASSERT_EQUAL(Json::booleanValue, false_.type());
-
-  IsCheck checks;
-  checks.isBool_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(false_, checks));
-  JSONTEST_ASSERT_PRED(checkIs(true_, checks));
-
-  // False okay
-  JSONTEST_ASSERT(false_.isConvertibleTo(Json::nullValue));
-
-  // True not okay
-  JSONTEST_ASSERT(!true_.isConvertibleTo(Json::nullValue));
-
-  // Always okay
-  JSONTEST_ASSERT(true_.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(true_.isConvertibleTo(Json::uintValue));
-  JSONTEST_ASSERT(true_.isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(true_.isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(true_.isConvertibleTo(Json::stringValue));
-
-  // Never okay
-  JSONTEST_ASSERT(!true_.isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!true_.isConvertibleTo(Json::objectValue));
-
-  JSONTEST_ASSERT_EQUAL(true, true_.asBool());
-  JSONTEST_ASSERT_EQUAL(1, true_.asInt());
-  JSONTEST_ASSERT_EQUAL(1, true_.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(1, true_.asUInt());
-  JSONTEST_ASSERT_EQUAL(1, true_.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(1.0, true_.asDouble());
-  JSONTEST_ASSERT_EQUAL(1.0, true_.asFloat());
-
-  JSONTEST_ASSERT_EQUAL(false, false_.asBool());
-  JSONTEST_ASSERT_EQUAL(0, false_.asInt());
-  JSONTEST_ASSERT_EQUAL(0, false_.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(0, false_.asUInt());
-  JSONTEST_ASSERT_EQUAL(0, false_.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(0.0, false_.asDouble());
-  JSONTEST_ASSERT_EQUAL(0.0, false_.asFloat());
-}
-
-JSONTEST_FIXTURE(ValueTest, integers) {
-  IsCheck checks;
-  Json::Value val;
-
-  // Conversions that don't depend on the value.
-  JSONTEST_ASSERT(Json::Value(17).isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(Json::Value(17).isConvertibleTo(Json::stringValue));
-  JSONTEST_ASSERT(Json::Value(17).isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(!Json::Value(17).isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!Json::Value(17).isConvertibleTo(Json::objectValue));
-
-  JSONTEST_ASSERT(Json::Value(17U).isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(Json::Value(17U).isConvertibleTo(Json::stringValue));
-  JSONTEST_ASSERT(Json::Value(17U).isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(!Json::Value(17U).isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!Json::Value(17U).isConvertibleTo(Json::objectValue));
-
-  JSONTEST_ASSERT(Json::Value(17.0).isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(Json::Value(17.0).isConvertibleTo(Json::stringValue));
-  JSONTEST_ASSERT(Json::Value(17.0).isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(!Json::Value(17.0).isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!Json::Value(17.0).isConvertibleTo(Json::objectValue));
-
-  // Default int
-  val = Json::Value(Json::intValue);
-
-  JSONTEST_ASSERT_EQUAL(Json::intValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(0, val.asInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asUInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(false, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("0", val.asString());
-
-  // Default uint
-  val = Json::Value(Json::uintValue);
-
-  JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(0, val.asInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asUInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(false, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("0", val.asString());
-
-  // Default real
-  val = Json::Value(Json::realValue);
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT_EQUAL(0, val.asInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asUInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(false, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("0.0", val.asString());
-
-  // Zero (signed constructor arg)
-  val = Json::Value(0);
-
-  JSONTEST_ASSERT_EQUAL(Json::intValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(0, val.asInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asUInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(false, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("0", val.asString());
-
-  // Zero (unsigned constructor arg)
-  val = Json::Value(0u);
-
-  JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(0, val.asInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asUInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(false, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("0", val.asString());
-
-  // Zero (floating-point constructor arg)
-  val = Json::Value(0.0);
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(0, val.asInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asUInt());
-  JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(0.0, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(false, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("0.0", val.asString());
-
-  // 2^20 (signed constructor arg)
-  val = Json::Value(1 << 20);
-
-  JSONTEST_ASSERT_EQUAL(Json::intValue, val.type());
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asUInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asDouble());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("1048576", val.asString());
-
-  // 2^20 (unsigned constructor arg)
-  val = Json::Value(Json::UInt(1 << 20));
-
-  JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asUInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asDouble());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("1048576", val.asString());
-
-  // 2^20 (floating-point constructor arg)
-  val = Json::Value((1 << 20) / 1.0);
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asUInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asDouble());
-  JSONTEST_ASSERT_EQUAL((1 << 20), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("1048576.0",
-                               normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  // -2^20
-  val = Json::Value(-(1 << 20));
-
-  JSONTEST_ASSERT_EQUAL(Json::intValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(-(1 << 20), val.asInt());
-  JSONTEST_ASSERT_EQUAL(-(1 << 20), val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(-(1 << 20), val.asDouble());
-  JSONTEST_ASSERT_EQUAL(-(1 << 20), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("-1048576", val.asString());
-
-  // int32 max
-  val = Json::Value(kint32max);
-
-  JSONTEST_ASSERT_EQUAL(Json::intValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(kint32max, val.asInt());
-  JSONTEST_ASSERT_EQUAL(kint32max, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(kint32max, val.asUInt());
-  JSONTEST_ASSERT_EQUAL(kint32max, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(kint32max, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(kfint32max, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("2147483647", val.asString());
-
-  // int32 min
-  val = Json::Value(kint32min);
-
-  JSONTEST_ASSERT_EQUAL(Json::intValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt_ = true;
-  checks.isInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(kint32min, val.asInt());
-  JSONTEST_ASSERT_EQUAL(kint32min, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(kint32min, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(kint32min, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("-2147483648", val.asString());
-
-  // uint32 max
-  val = Json::Value(kuint32max);
-
-  JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt64_ = true;
-  checks.isUInt_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-
-#ifndef JSON_NO_INT64
-  JSONTEST_ASSERT_EQUAL(kuint32max, val.asLargestInt());
-#endif
-  JSONTEST_ASSERT_EQUAL(kuint32max, val.asUInt());
-  JSONTEST_ASSERT_EQUAL(kuint32max, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(kuint32max, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(kfuint32max, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("4294967295", val.asString());
-
-#ifdef JSON_NO_INT64
-  // int64 max
-  val = Json::Value(double(kint64max));
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(double(kint64max), val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(kint64max), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("9.22337e+18", val.asString());
-
-  // int64 min
-  val = Json::Value(double(kint64min));
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(double(kint64min), val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(kint64min), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("-9.22337e+18", val.asString());
-
-  // uint64 max
-  val = Json::Value(double(kuint64max));
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(double(kuint64max), val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(kuint64max), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("1.84467e+19", val.asString());
-#else // ifdef JSON_NO_INT64
-  // 2^40 (signed constructor arg)
-  val = Json::Value(Json::Int64(1) << 40);
-
-  JSONTEST_ASSERT_EQUAL(Json::intValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt64_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asInt64());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asUInt64());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asDouble());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("1099511627776", val.asString());
-
-  // 2^40 (unsigned constructor arg)
-  val = Json::Value(Json::UInt64(1) << 40);
-
-  JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt64_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asInt64());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asUInt64());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asDouble());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("1099511627776", val.asString());
-
-  // 2^40 (floating-point constructor arg)
-  val = Json::Value((Json::Int64(1) << 40) / 1.0);
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt64_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asInt64());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asUInt64());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asDouble());
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("1099511627776.0",
-                               normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  // -2^40
-  val = Json::Value(-(Json::Int64(1) << 40));
-
-  JSONTEST_ASSERT_EQUAL(Json::intValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(-(Json::Int64(1) << 40), val.asInt64());
-  JSONTEST_ASSERT_EQUAL(-(Json::Int64(1) << 40), val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(-(Json::Int64(1) << 40), val.asDouble());
-  JSONTEST_ASSERT_EQUAL(-(Json::Int64(1) << 40), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("-1099511627776", val.asString());
-
-  // int64 max
-  val = Json::Value(Json::Int64(kint64max));
-
-  JSONTEST_ASSERT_EQUAL(Json::intValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt64_ = true;
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(kint64max, val.asInt64());
-  JSONTEST_ASSERT_EQUAL(kint64max, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(kint64max, val.asUInt64());
-  JSONTEST_ASSERT_EQUAL(kint64max, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(double(kint64max), val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(kint64max), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("9223372036854775807", val.asString());
-
-  // int64 max (floating point constructor). Note that kint64max is not exactly
-  // representable as a double, and will be rounded up to be higher.
-  val = Json::Value(double(kint64max));
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(Json::UInt64(1) << 63, val.asUInt64());
-  JSONTEST_ASSERT_EQUAL(Json::UInt64(1) << 63, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(uint64ToDouble(Json::UInt64(1) << 63), val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(uint64ToDouble(Json::UInt64(1) << 63)),
-                        val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("9.2233720368547758e+18",
-                               normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  // int64 min
-  val = Json::Value(Json::Int64(kint64min));
-
-  JSONTEST_ASSERT_EQUAL(Json::intValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(kint64min, val.asInt64());
-  JSONTEST_ASSERT_EQUAL(kint64min, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(double(kint64min), val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(kint64min), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("-9223372036854775808", val.asString());
-
-  // int64 min (floating point constructor). Note that kint64min *is* exactly
-  // representable as a double.
-  val = Json::Value(double(kint64min));
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(kint64min, val.asInt64());
-  JSONTEST_ASSERT_EQUAL(kint64min, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(-9223372036854775808.0, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(-9223372036854775808.0, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("-9.2233720368547758e+18",
-                               normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  // 10^19
-  const Json::UInt64 ten_to_19 = static_cast<Json::UInt64>(1e19);
-  val = Json::Value(Json::UInt64(ten_to_19));
-
-  JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type());
-
-  checks = IsCheck();
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(ten_to_19, val.asUInt64());
-  JSONTEST_ASSERT_EQUAL(ten_to_19, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(uint64ToDouble(ten_to_19), val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(uint64ToDouble(ten_to_19)), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("10000000000000000000", val.asString());
-
-  // 10^19 (double constructor). Note that 10^19 is not exactly representable
-  // as a double.
-  val = Json::Value(uint64ToDouble(ten_to_19));
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(1e19, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(1e19, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("1e+19",
-                               normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  // uint64 max
-  val = Json::Value(Json::UInt64(kuint64max));
-
-  JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type());
-
-  checks = IsCheck();
-  checks.isUInt64_ = true;
-  checks.isIntegral_ = true;
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(kuint64max, val.asUInt64());
-  JSONTEST_ASSERT_EQUAL(kuint64max, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(uint64ToDouble(kuint64max), val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(uint64ToDouble(kuint64max)), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("18446744073709551615", val.asString());
-
-  // uint64 max (floating point constructor). Note that kuint64max is not
-  // exactly representable as a double, and will be rounded up to be higher.
-  val = Json::Value(uint64ToDouble(kuint64max));
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-
-  JSONTEST_ASSERT_EQUAL(18446744073709551616.0, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(18446744073709551616.0, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_STRING_EQUAL("1.8446744073709552e+19",
-                               normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-#endif
-}
-
-JSONTEST_FIXTURE(ValueTest, nonIntegers) {
-  IsCheck checks;
-  Json::Value val;
-
-  // Small positive number
-  val = Json::Value(1.5);
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::stringValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::objectValue));
-
-  JSONTEST_ASSERT_EQUAL(1.5, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(1.5, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(1, val.asInt());
-  JSONTEST_ASSERT_EQUAL(1, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(1, val.asUInt());
-  JSONTEST_ASSERT_EQUAL(1, val.asLargestUInt());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_EQUAL("1.5", val.asString());
-
-  // Small negative number
-  val = Json::Value(-1.5);
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::stringValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::objectValue));
-
-  JSONTEST_ASSERT_EQUAL(-1.5, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(-1.5, val.asFloat());
-  JSONTEST_ASSERT_EQUAL(-1, val.asInt());
-  JSONTEST_ASSERT_EQUAL(-1, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_EQUAL("-1.5", val.asString());
-
-  // A bit over int32 max
-  val = Json::Value(kint32max + 0.5);
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::stringValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::objectValue));
-
-  JSONTEST_ASSERT_EQUAL(2147483647.5, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(2147483647.5), val.asFloat());
-  JSONTEST_ASSERT_EQUAL(2147483647U, val.asUInt());
-#ifdef JSON_HAS_INT64
-  JSONTEST_ASSERT_EQUAL(2147483647L, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL(2147483647U, val.asLargestUInt());
-#endif
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_EQUAL("2147483647.5",
-                        normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  // A bit under int32 min
-  val = Json::Value(kint32min - 0.5);
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::stringValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::objectValue));
-
-  JSONTEST_ASSERT_EQUAL(-2147483648.5, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(-2147483648.5), val.asFloat());
-#ifdef JSON_HAS_INT64
-  JSONTEST_ASSERT_EQUAL(-(Json::Int64(1) << 31), val.asLargestInt());
-#endif
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_EQUAL("-2147483648.5",
-                        normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  // A bit over uint32 max
-  val = Json::Value(kuint32max + 0.5);
-
-  JSONTEST_ASSERT_EQUAL(Json::realValue, val.type());
-
-  checks = IsCheck();
-  checks.isDouble_ = true;
-  checks.isNumeric_ = true;
-  JSONTEST_ASSERT_PRED(checkIs(val, checks));
-
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::realValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::booleanValue));
-  JSONTEST_ASSERT(val.isConvertibleTo(Json::stringValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::arrayValue));
-  JSONTEST_ASSERT(!val.isConvertibleTo(Json::objectValue));
-
-  JSONTEST_ASSERT_EQUAL(4294967295.5, val.asDouble());
-  JSONTEST_ASSERT_EQUAL(float(4294967295.5), val.asFloat());
-#ifdef JSON_HAS_INT64
-  JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 32) - 1, val.asLargestInt());
-  JSONTEST_ASSERT_EQUAL((Json::UInt64(1) << 32) - Json::UInt64(1),
-                        val.asLargestUInt());
-#endif
-  JSONTEST_ASSERT_EQUAL(true, val.asBool());
-  JSONTEST_ASSERT_EQUAL("4294967295.5",
-                        normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  val = Json::Value(1.2345678901234);
-  JSONTEST_ASSERT_STRING_EQUAL("1.2345678901234001",
-                               normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  // A 16-digit floating point number.
-  val = Json::Value(2199023255552000.0f);
-  JSONTEST_ASSERT_EQUAL(float(2199023255552000.0f), val.asFloat());
-  JSONTEST_ASSERT_STRING_EQUAL("2199023255552000.0",
-                               normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  // A very large floating point number.
-  val = Json::Value(3.402823466385289e38);
-  JSONTEST_ASSERT_EQUAL(float(3.402823466385289e38), val.asFloat());
-  JSONTEST_ASSERT_STRING_EQUAL("3.402823466385289e+38",
-                               normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-
-  // An even larger floating point number.
-  val = Json::Value(1.2345678e300);
-  JSONTEST_ASSERT_EQUAL(double(1.2345678e300), val.asDouble());
-  JSONTEST_ASSERT_STRING_EQUAL("1.2345678e+300",
-                               normalizeFloatingPointStr(JsonTest::ToJsonString(val.asString())));
-}
-
-void ValueTest::checkConstMemberCount(const Json::Value& value,
-                                      unsigned int expectedCount) {
-  unsigned int count = 0;
-  Json::Value::const_iterator itEnd = value.end();
-  for (Json::Value::const_iterator it = value.begin(); it != itEnd; ++it) {
-    ++count;
-  }
-  JSONTEST_ASSERT_EQUAL(expectedCount, count) << "Json::Value::const_iterator";
-}
-
-void ValueTest::checkMemberCount(Json::Value& value,
-                                 unsigned int expectedCount) {
-  JSONTEST_ASSERT_EQUAL(expectedCount, value.size());
-
-  unsigned int count = 0;
-  Json::Value::iterator itEnd = value.end();
-  for (Json::Value::iterator it = value.begin(); it != itEnd; ++it) {
-    ++count;
-  }
-  JSONTEST_ASSERT_EQUAL(expectedCount, count) << "Json::Value::iterator";
-
-  JSONTEST_ASSERT_PRED(checkConstMemberCount(value, expectedCount));
-}
-
-ValueTest::IsCheck::IsCheck()
-    : isObject_(false), isArray_(false), isBool_(false), isString_(false),
-      isNull_(false), isInt_(false), isInt64_(false), isUInt_(false),
-      isUInt64_(false), isIntegral_(false), isDouble_(false),
-      isNumeric_(false) {}
-
-void ValueTest::checkIs(const Json::Value& value, const IsCheck& check) {
-  JSONTEST_ASSERT_EQUAL(check.isObject_, value.isObject());
-  JSONTEST_ASSERT_EQUAL(check.isArray_, value.isArray());
-  JSONTEST_ASSERT_EQUAL(check.isBool_, value.isBool());
-  JSONTEST_ASSERT_EQUAL(check.isDouble_, value.isDouble());
-  JSONTEST_ASSERT_EQUAL(check.isInt_, value.isInt());
-  JSONTEST_ASSERT_EQUAL(check.isUInt_, value.isUInt());
-  JSONTEST_ASSERT_EQUAL(check.isIntegral_, value.isIntegral());
-  JSONTEST_ASSERT_EQUAL(check.isNumeric_, value.isNumeric());
-  JSONTEST_ASSERT_EQUAL(check.isString_, value.isString());
-  JSONTEST_ASSERT_EQUAL(check.isNull_, value.isNull());
-
-#ifdef JSON_HAS_INT64
-  JSONTEST_ASSERT_EQUAL(check.isInt64_, value.isInt64());
-  JSONTEST_ASSERT_EQUAL(check.isUInt64_, value.isUInt64());
-#else
-  JSONTEST_ASSERT_EQUAL(false, value.isInt64());
-  JSONTEST_ASSERT_EQUAL(false, value.isUInt64());
-#endif
-}
-
-JSONTEST_FIXTURE(ValueTest, compareNull) {
-  JSONTEST_ASSERT_PRED(checkIsEqual(Json::Value(), Json::Value()));
-}
-
-JSONTEST_FIXTURE(ValueTest, compareInt) {
-  JSONTEST_ASSERT_PRED(checkIsLess(0, 10));
-  JSONTEST_ASSERT_PRED(checkIsEqual(10, 10));
-  JSONTEST_ASSERT_PRED(checkIsEqual(-10, -10));
-  JSONTEST_ASSERT_PRED(checkIsLess(-10, 0));
-}
-
-JSONTEST_FIXTURE(ValueTest, compareUInt) {
-  JSONTEST_ASSERT_PRED(checkIsLess(0u, 10u));
-  JSONTEST_ASSERT_PRED(checkIsLess(0u, Json::Value::maxUInt));
-  JSONTEST_ASSERT_PRED(checkIsEqual(10u, 10u));
-}
-
-JSONTEST_FIXTURE(ValueTest, compareDouble) {
-  JSONTEST_ASSERT_PRED(checkIsLess(0.0, 10.0));
-  JSONTEST_ASSERT_PRED(checkIsEqual(10.0, 10.0));
-  JSONTEST_ASSERT_PRED(checkIsEqual(-10.0, -10.0));
-  JSONTEST_ASSERT_PRED(checkIsLess(-10.0, 0.0));
-}
-
-JSONTEST_FIXTURE(ValueTest, compareString) {
-  JSONTEST_ASSERT_PRED(checkIsLess("", " "));
-  JSONTEST_ASSERT_PRED(checkIsLess("", "a"));
-  JSONTEST_ASSERT_PRED(checkIsLess("abcd", "zyui"));
-  JSONTEST_ASSERT_PRED(checkIsLess("abc", "abcd"));
-  JSONTEST_ASSERT_PRED(checkIsEqual("abcd", "abcd"));
-  JSONTEST_ASSERT_PRED(checkIsEqual(" ", " "));
-  JSONTEST_ASSERT_PRED(checkIsLess("ABCD", "abcd"));
-  JSONTEST_ASSERT_PRED(checkIsEqual("ABCD", "ABCD"));
-}
-
-JSONTEST_FIXTURE(ValueTest, compareBoolean) {
-  JSONTEST_ASSERT_PRED(checkIsLess(false, true));
-  JSONTEST_ASSERT_PRED(checkIsEqual(false, false));
-  JSONTEST_ASSERT_PRED(checkIsEqual(true, true));
-}
-
-JSONTEST_FIXTURE(ValueTest, compareArray) {
-  // array compare size then content
-  Json::Value emptyArray(Json::arrayValue);
-  Json::Value l1aArray;
-  l1aArray.append(0);
-  Json::Value l1bArray;
-  l1bArray.append(10);
-  Json::Value l2aArray;
-  l2aArray.append(0);
-  l2aArray.append(0);
-  Json::Value l2bArray;
-  l2bArray.append(0);
-  l2bArray.append(10);
-  JSONTEST_ASSERT_PRED(checkIsLess(emptyArray, l1aArray));
-  JSONTEST_ASSERT_PRED(checkIsLess(emptyArray, l2aArray));
-  JSONTEST_ASSERT_PRED(checkIsLess(l1aArray, l2aArray));
-  JSONTEST_ASSERT_PRED(checkIsLess(l2aArray, l2bArray));
-  JSONTEST_ASSERT_PRED(checkIsEqual(emptyArray, Json::Value(emptyArray)));
-  JSONTEST_ASSERT_PRED(checkIsEqual(l1aArray, Json::Value(l1aArray)));
-  JSONTEST_ASSERT_PRED(checkIsEqual(l2bArray, Json::Value(l2bArray)));
-}
-
-JSONTEST_FIXTURE(ValueTest, compareObject) {
-  // object compare size then content
-  Json::Value emptyObject(Json::objectValue);
-  Json::Value l1aObject;
-  l1aObject["key1"] = 0;
-  Json::Value l1bObject;
-  l1aObject["key1"] = 10;
-  Json::Value l2aObject;
-  l2aObject["key1"] = 0;
-  l2aObject["key2"] = 0;
-  JSONTEST_ASSERT_PRED(checkIsLess(emptyObject, l1aObject));
-  JSONTEST_ASSERT_PRED(checkIsLess(emptyObject, l2aObject));
-  JSONTEST_ASSERT_PRED(checkIsLess(l1aObject, l2aObject));
-  JSONTEST_ASSERT_PRED(checkIsEqual(emptyObject, Json::Value(emptyObject)));
-  JSONTEST_ASSERT_PRED(checkIsEqual(l1aObject, Json::Value(l1aObject)));
-  JSONTEST_ASSERT_PRED(checkIsEqual(l2aObject, Json::Value(l2aObject)));
-}
-
-JSONTEST_FIXTURE(ValueTest, compareType) {
-  // object of different type are ordered according to their type
-  JSONTEST_ASSERT_PRED(checkIsLess(Json::Value(), Json::Value(1)));
-  JSONTEST_ASSERT_PRED(checkIsLess(Json::Value(1), Json::Value(1u)));
-  JSONTEST_ASSERT_PRED(checkIsLess(Json::Value(1u), Json::Value(1.0)));
-  JSONTEST_ASSERT_PRED(checkIsLess(Json::Value(1.0), Json::Value("a")));
-  JSONTEST_ASSERT_PRED(checkIsLess(Json::Value("a"), Json::Value(true)));
-  JSONTEST_ASSERT_PRED(
-      checkIsLess(Json::Value(true), Json::Value(Json::arrayValue)));
-  JSONTEST_ASSERT_PRED(checkIsLess(Json::Value(Json::arrayValue),
-                                   Json::Value(Json::objectValue)));
-}
-
-void ValueTest::checkIsLess(const Json::Value& x, const Json::Value& y) {
-  JSONTEST_ASSERT(x < y);
-  JSONTEST_ASSERT(y > x);
-  JSONTEST_ASSERT(x <= y);
-  JSONTEST_ASSERT(y >= x);
-  JSONTEST_ASSERT(!(x == y));
-  JSONTEST_ASSERT(!(y == x));
-  JSONTEST_ASSERT(!(x >= y));
-  JSONTEST_ASSERT(!(y <= x));
-  JSONTEST_ASSERT(!(x > y));
-  JSONTEST_ASSERT(!(y < x));
-  JSONTEST_ASSERT(x.compare(y) < 0);
-  JSONTEST_ASSERT(y.compare(x) >= 0);
-}
-
-void ValueTest::checkIsEqual(const Json::Value& x, const Json::Value& y) {
-  JSONTEST_ASSERT(x == y);
-  JSONTEST_ASSERT(y == x);
-  JSONTEST_ASSERT(x <= y);
-  JSONTEST_ASSERT(y <= x);
-  JSONTEST_ASSERT(x >= y);
-  JSONTEST_ASSERT(y >= x);
-  JSONTEST_ASSERT(!(x < y));
-  JSONTEST_ASSERT(!(y < x));
-  JSONTEST_ASSERT(!(x > y));
-  JSONTEST_ASSERT(!(y > x));
-  JSONTEST_ASSERT(x.compare(y) == 0);
-  JSONTEST_ASSERT(y.compare(x) == 0);
-}
-
-JSONTEST_FIXTURE(ValueTest, typeChecksThrowExceptions) {
-#if JSON_USE_EXCEPTION
-
-  Json::Value intVal(1);
-  Json::Value strVal("Test");
-  Json::Value objVal(Json::objectValue);
-  Json::Value arrVal(Json::arrayValue);
-
-  JSONTEST_ASSERT_THROWS(intVal["test"]);
-  JSONTEST_ASSERT_THROWS(strVal["test"]);
-  JSONTEST_ASSERT_THROWS(arrVal["test"]);
-
-  JSONTEST_ASSERT_THROWS(intVal.removeMember("test"));
-  JSONTEST_ASSERT_THROWS(strVal.removeMember("test"));
-  JSONTEST_ASSERT_THROWS(arrVal.removeMember("test"));
-
-  JSONTEST_ASSERT_THROWS(intVal.getMemberNames());
-  JSONTEST_ASSERT_THROWS(strVal.getMemberNames());
-  JSONTEST_ASSERT_THROWS(arrVal.getMemberNames());
-
-  JSONTEST_ASSERT_THROWS(intVal[0]);
-  JSONTEST_ASSERT_THROWS(objVal[0]);
-  JSONTEST_ASSERT_THROWS(strVal[0]);
-
-  JSONTEST_ASSERT_THROWS(intVal.clear());
-
-  JSONTEST_ASSERT_THROWS(intVal.resize(1));
-  JSONTEST_ASSERT_THROWS(strVal.resize(1));
-  JSONTEST_ASSERT_THROWS(objVal.resize(1));
-
-  JSONTEST_ASSERT_THROWS(intVal.asCString());
-
-  JSONTEST_ASSERT_THROWS(objVal.asString());
-  JSONTEST_ASSERT_THROWS(arrVal.asString());
-
-  JSONTEST_ASSERT_THROWS(strVal.asInt());
-  JSONTEST_ASSERT_THROWS(objVal.asInt());
-  JSONTEST_ASSERT_THROWS(arrVal.asInt());
-
-  JSONTEST_ASSERT_THROWS(strVal.asUInt());
-  JSONTEST_ASSERT_THROWS(objVal.asUInt());
-  JSONTEST_ASSERT_THROWS(arrVal.asUInt());
-
-  JSONTEST_ASSERT_THROWS(strVal.asInt64());
-  JSONTEST_ASSERT_THROWS(objVal.asInt64());
-  JSONTEST_ASSERT_THROWS(arrVal.asInt64());
-
-  JSONTEST_ASSERT_THROWS(strVal.asUInt64());
-  JSONTEST_ASSERT_THROWS(objVal.asUInt64());
-  JSONTEST_ASSERT_THROWS(arrVal.asUInt64());
-
-  JSONTEST_ASSERT_THROWS(strVal.asDouble());
-  JSONTEST_ASSERT_THROWS(objVal.asDouble());
-  JSONTEST_ASSERT_THROWS(arrVal.asDouble());
-
-  JSONTEST_ASSERT_THROWS(strVal.asFloat());
-  JSONTEST_ASSERT_THROWS(objVal.asFloat());
-  JSONTEST_ASSERT_THROWS(arrVal.asFloat());
-
-  JSONTEST_ASSERT_THROWS(strVal.asBool());
-  JSONTEST_ASSERT_THROWS(objVal.asBool());
-  JSONTEST_ASSERT_THROWS(arrVal.asBool());
-
-#endif
-}
-
-JSONTEST_FIXTURE(ValueTest, offsetAccessors) {
-  Json::Value x;
-  JSONTEST_ASSERT(x.getOffsetStart() == 0);
-  JSONTEST_ASSERT(x.getOffsetLimit() == 0);
-  x.setOffsetStart(10);
-  x.setOffsetLimit(20);
-  JSONTEST_ASSERT(x.getOffsetStart() == 10);
-  JSONTEST_ASSERT(x.getOffsetLimit() == 20);
-  Json::Value y(x);
-  JSONTEST_ASSERT(y.getOffsetStart() == 10);
-  JSONTEST_ASSERT(y.getOffsetLimit() == 20);
-  Json::Value z;
-  z.swap(y);
-  JSONTEST_ASSERT(z.getOffsetStart() == 10);
-  JSONTEST_ASSERT(z.getOffsetLimit() == 20);
-  JSONTEST_ASSERT(y.getOffsetStart() == 0);
-  JSONTEST_ASSERT(y.getOffsetLimit() == 0);
-}
-
-JSONTEST_FIXTURE(ValueTest, StaticString) {
-  char mutant[] = "hello";
-  Json::StaticString ss(mutant);
-  JSONCPP_STRING regular(mutant);
-  mutant[1] = 'a';
-  JSONTEST_ASSERT_STRING_EQUAL("hallo", ss.c_str());
-  JSONTEST_ASSERT_STRING_EQUAL("hello", regular.c_str());
-  {
-    Json::Value root;
-    root["top"] = ss;
-    JSONTEST_ASSERT_STRING_EQUAL("hallo", root["top"].asString());
-    mutant[1] = 'u';
-    JSONTEST_ASSERT_STRING_EQUAL("hullo", root["top"].asString());
-  }
-  {
-    Json::Value root;
-    root["top"] = regular;
-    JSONTEST_ASSERT_STRING_EQUAL("hello", root["top"].asString());
-    mutant[1] = 'u';
-    JSONTEST_ASSERT_STRING_EQUAL("hello", root["top"].asString());
-  }
-}
-
-JSONTEST_FIXTURE(ValueTest, CommentBefore) {
-  Json::Value val; // fill val
-  val.setComment(JSONCPP_STRING("// this comment should appear before"), Json::commentBefore);
-  Json::StreamWriterBuilder wbuilder;
-  wbuilder.settings_["commentStyle"] = "All";
-  {
-    char const expected[] = "// this comment should appear before\nnull";
-    JSONCPP_STRING result = Json::writeString(wbuilder, val);
-    JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-    JSONCPP_STRING res2 = val.toStyledString();
-    JSONCPP_STRING exp2 = "\n";
-    exp2 += expected;
-    exp2 += "\n";
-    JSONTEST_ASSERT_STRING_EQUAL(exp2, res2);
-  }
-  Json::Value other = "hello";
-  val.swapPayload(other);
-  {
-    char const expected[] = "// this comment should appear before\n\"hello\"";
-    JSONCPP_STRING result = Json::writeString(wbuilder, val);
-    JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-    JSONCPP_STRING res2 = val.toStyledString();
-    JSONCPP_STRING exp2 = "\n";
-    exp2 += expected;
-    exp2 += "\n";
-    JSONTEST_ASSERT_STRING_EQUAL(exp2, res2);
-    JSONTEST_ASSERT_STRING_EQUAL("null\n", other.toStyledString());
-  }
-  val = "hello";
-  // val.setComment("// this comment should appear before", Json::CommentPlacement::commentBefore);
-  // Assignment over-writes comments.
-  {
-    char const expected[] = "\"hello\"";
-    JSONCPP_STRING result = Json::writeString(wbuilder, val);
-    JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-    JSONCPP_STRING res2 = val.toStyledString();
-    JSONCPP_STRING exp2 = "";
-    exp2 += expected;
-    exp2 += "\n";
-    JSONTEST_ASSERT_STRING_EQUAL(exp2, res2);
-  }
-}
-
-JSONTEST_FIXTURE(ValueTest, zeroes) {
-  char const cstr[] = "h\0i";
-  JSONCPP_STRING binary(cstr, sizeof(cstr));  // include trailing 0
-  JSONTEST_ASSERT_EQUAL(4U, binary.length());
-  Json::StreamWriterBuilder b;
-  {
-    Json::Value root;
-    root = binary;
-    JSONTEST_ASSERT_STRING_EQUAL(binary, root.asString());
-  }
-  {
-    char const top[] = "top";
-    Json::Value root;
-    root[top] = binary;
-    JSONTEST_ASSERT_STRING_EQUAL(binary, root[top].asString());
-    Json::Value removed;
-    bool did;
-    did = root.removeMember(top, top + sizeof(top) - 1U,
-        &removed);
-    JSONTEST_ASSERT(did);
-    JSONTEST_ASSERT_STRING_EQUAL(binary, removed.asString());
-    did = root.removeMember(top, top + sizeof(top) - 1U,
-        &removed);
-    JSONTEST_ASSERT(!did);
-    JSONTEST_ASSERT_STRING_EQUAL(binary, removed.asString()); // still
-  }
-}
-
-JSONTEST_FIXTURE(ValueTest, zeroesInKeys) {
-  char const cstr[] = "h\0i";
-  JSONCPP_STRING binary(cstr, sizeof(cstr));  // include trailing 0
-  JSONTEST_ASSERT_EQUAL(4U, binary.length());
-  {
-    Json::Value root;
-    root[binary] = "there";
-    JSONTEST_ASSERT_STRING_EQUAL("there", root[binary].asString());
-    JSONTEST_ASSERT(!root.isMember("h"));
-    JSONTEST_ASSERT(root.isMember(binary));
-    JSONTEST_ASSERT_STRING_EQUAL("there", root.get(binary, Json::Value::nullRef).asString());
-    Json::Value removed;
-    bool did;
-    did = root.removeMember(binary.data(), binary.data() + binary.length(),
-        &removed);
-    JSONTEST_ASSERT(did);
-    JSONTEST_ASSERT_STRING_EQUAL("there", removed.asString());
-    did = root.removeMember(binary.data(), binary.data() + binary.length(),
-        &removed);
-    JSONTEST_ASSERT(!did);
-    JSONTEST_ASSERT_STRING_EQUAL("there", removed.asString()); // still
-    JSONTEST_ASSERT(!root.isMember(binary));
-    JSONTEST_ASSERT_STRING_EQUAL("", root.get(binary, Json::Value::nullRef).asString());
-  }
-}
-
-JSONTEST_FIXTURE(ValueTest, specialFloats) {
-  Json::StreamWriterBuilder b;
-  b.settings_["useSpecialFloats"] = true;
-
-  Json::Value v = std::numeric_limits<double>::quiet_NaN();
-  JSONCPP_STRING expected = "NaN";
-  JSONCPP_STRING result = Json::writeString(b, v);
-  JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-
-  v = std::numeric_limits<double>::infinity();
-  expected = "Infinity";
-  result = Json::writeString(b, v);
-  JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-
-  v = -std::numeric_limits<double>::infinity();
-  expected = "-Infinity";
-  result = Json::writeString(b, v);
-  JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-}
-
-JSONTEST_FIXTURE(ValueTest, precision) {
-    Json::StreamWriterBuilder b;
-    b.settings_["precision"] = 5;
-
-    Json::Value v = 100.0/3;
-    JSONCPP_STRING expected = "33.333";
-    JSONCPP_STRING result = Json::writeString(b, v);
-    JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-    
-    v = 0.25000000;
-    expected = "0.25";
-    result = Json::writeString(b, v);
-    JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-
-    v = 0.2563456;
-    expected = "0.25635";
-    result = Json::writeString(b, v);
-    JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-
-    b.settings_["precision"] = 1;
-    expected = "0.3";
-    result = Json::writeString(b, v);
-    JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-
-    b.settings_["precision"] = 17;
-    v = 1234857476305.256345694873740545068;
-    expected = "1234857476305.2563";
-    result = Json::writeString(b, v);
-    JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-
-    b.settings_["precision"] = 24;
-    v = 0.256345694873740545068;
-    expected = "0.25634569487374054";
-    result = Json::writeString(b, v);
-    JSONTEST_ASSERT_STRING_EQUAL(expected, result);
-}
-
-struct WriterTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(WriterTest, dropNullPlaceholders) {
-  Json::FastWriter writer;
-  Json::Value nullValue;
-  JSONTEST_ASSERT(writer.write(nullValue) == "null\n");
-
-  writer.dropNullPlaceholders();
-  JSONTEST_ASSERT(writer.write(nullValue) == "\n");
-}
-
-struct StreamWriterTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(StreamWriterTest, dropNullPlaceholders) {
-  Json::StreamWriterBuilder b;
-  Json::Value nullValue;
-  b.settings_["dropNullPlaceholders"] = false;
-  JSONTEST_ASSERT(Json::writeString(b, nullValue) == "null");
-  b.settings_["dropNullPlaceholders"] = true;
-  JSONTEST_ASSERT(Json::writeString(b, nullValue) == "");
-}
-
-JSONTEST_FIXTURE(StreamWriterTest, writeZeroes) {
-  JSONCPP_STRING binary("hi", 3);  // include trailing 0
-  JSONTEST_ASSERT_EQUAL(3, binary.length());
-  JSONCPP_STRING expected("\"hi\\u0000\"");  // unicoded zero
-  Json::StreamWriterBuilder b;
-  {
-    Json::Value root;
-    root = binary;
-    JSONTEST_ASSERT_STRING_EQUAL(binary, root.asString());
-    JSONCPP_STRING out = Json::writeString(b, root);
-    JSONTEST_ASSERT_EQUAL(expected.size(), out.size());
-    JSONTEST_ASSERT_STRING_EQUAL(expected, out);
-  }
-  {
-    Json::Value root;
-    root["top"] = binary;
-    JSONTEST_ASSERT_STRING_EQUAL(binary, root["top"].asString());
-    JSONCPP_STRING out = Json::writeString(b, root["top"]);
-    JSONTEST_ASSERT_STRING_EQUAL(expected, out);
-  }
-}
-
-struct ReaderTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(ReaderTest, parseWithNoErrors) {
-  Json::Reader reader;
-  Json::Value root;
-  bool ok = reader.parse("{ \"property\" : \"value\" }", root);
-  JSONTEST_ASSERT(ok);
-  JSONTEST_ASSERT(reader.getFormattedErrorMessages().size() == 0);
-  JSONTEST_ASSERT(reader.getStructuredErrors().size() == 0);
-}
-
-JSONTEST_FIXTURE(ReaderTest, parseWithNoErrorsTestingOffsets) {
-  Json::Reader reader;
-  Json::Value root;
-  bool ok = reader.parse("{ \"property\" : [\"value\", \"value2\"], \"obj\" : "
-                         "{ \"nested\" : 123, \"bool\" : true}, \"null\" : "
-                         "null, \"false\" : false }",
-                         root);
-  JSONTEST_ASSERT(ok);
-  JSONTEST_ASSERT(reader.getFormattedErrorMessages().size() == 0);
-  JSONTEST_ASSERT(reader.getStructuredErrors().size() == 0);
-  JSONTEST_ASSERT(root["property"].getOffsetStart() == 15);
-  JSONTEST_ASSERT(root["property"].getOffsetLimit() == 34);
-  JSONTEST_ASSERT(root["property"][0].getOffsetStart() == 16);
-  JSONTEST_ASSERT(root["property"][0].getOffsetLimit() == 23);
-  JSONTEST_ASSERT(root["property"][1].getOffsetStart() == 25);
-  JSONTEST_ASSERT(root["property"][1].getOffsetLimit() == 33);
-  JSONTEST_ASSERT(root["obj"].getOffsetStart() == 44);
-  JSONTEST_ASSERT(root["obj"].getOffsetLimit() == 76);
-  JSONTEST_ASSERT(root["obj"]["nested"].getOffsetStart() == 57);
-  JSONTEST_ASSERT(root["obj"]["nested"].getOffsetLimit() == 60);
-  JSONTEST_ASSERT(root["obj"]["bool"].getOffsetStart() == 71);
-  JSONTEST_ASSERT(root["obj"]["bool"].getOffsetLimit() == 75);
-  JSONTEST_ASSERT(root["null"].getOffsetStart() == 87);
-  JSONTEST_ASSERT(root["null"].getOffsetLimit() == 91);
-  JSONTEST_ASSERT(root["false"].getOffsetStart() == 103);
-  JSONTEST_ASSERT(root["false"].getOffsetLimit() == 108);
-  JSONTEST_ASSERT(root.getOffsetStart() == 0);
-  JSONTEST_ASSERT(root.getOffsetLimit() == 110);
-}
-
-JSONTEST_FIXTURE(ReaderTest, parseWithOneError) {
-  Json::Reader reader;
-  Json::Value root;
-  bool ok = reader.parse("{ \"property\" :: \"value\" }", root);
-  JSONTEST_ASSERT(!ok);
-  JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
-                  "* Line 1, Column 15\n  Syntax error: value, object or array "
-                  "expected.\n");
-  std::vector<Json::Reader::StructuredError> errors =
-      reader.getStructuredErrors();
-  JSONTEST_ASSERT(errors.size() == 1);
-  JSONTEST_ASSERT(errors.at(0).offset_start == 14);
-  JSONTEST_ASSERT(errors.at(0).offset_limit == 15);
-  JSONTEST_ASSERT(errors.at(0).message ==
-                  "Syntax error: value, object or array expected.");
-}
-
-JSONTEST_FIXTURE(ReaderTest, parseChineseWithOneError) {
-  Json::Reader reader;
-  Json::Value root;
-  bool ok = reader.parse("{ \"pr佐藤erty\" :: \"value\" }", root);
-  JSONTEST_ASSERT(!ok);
-  JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
-                  "* Line 1, Column 19\n  Syntax error: value, object or array "
-                  "expected.\n");
-  std::vector<Json::Reader::StructuredError> errors =
-      reader.getStructuredErrors();
-  JSONTEST_ASSERT(errors.size() == 1);
-  JSONTEST_ASSERT(errors.at(0).offset_start == 18);
-  JSONTEST_ASSERT(errors.at(0).offset_limit == 19);
-  JSONTEST_ASSERT(errors.at(0).message ==
-                  "Syntax error: value, object or array expected.");
-}
-
-JSONTEST_FIXTURE(ReaderTest, parseWithDetailError) {
-  Json::Reader reader;
-  Json::Value root;
-  bool ok = reader.parse("{ \"property\" : \"v\\alue\" }", root);
-  JSONTEST_ASSERT(!ok);
-  JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
-                  "* Line 1, Column 16\n  Bad escape sequence in string\nSee "
-                  "Line 1, Column 20 for detail.\n");
-  std::vector<Json::Reader::StructuredError> errors =
-      reader.getStructuredErrors();
-  JSONTEST_ASSERT(errors.size() == 1);
-  JSONTEST_ASSERT(errors.at(0).offset_start == 15);
-  JSONTEST_ASSERT(errors.at(0).offset_limit == 23);
-  JSONTEST_ASSERT(errors.at(0).message == "Bad escape sequence in string");
-}
-
-struct CharReaderTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(CharReaderTest, parseWithNoErrors) {
-  Json::CharReaderBuilder b;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  Json::Value root;
-  char const doc[] = "{ \"property\" : \"value\" }";
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(ok);
-  JSONTEST_ASSERT(errs.size() == 0);
-  delete reader;
-}
-
-JSONTEST_FIXTURE(CharReaderTest, parseWithNoErrorsTestingOffsets) {
-  Json::CharReaderBuilder b;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  Json::Value root;
-  char const doc[] =
-                         "{ \"property\" : [\"value\", \"value2\"], \"obj\" : "
-                         "{ \"nested\" : 123, \"bool\" : true}, \"null\" : "
-                         "null, \"false\" : false }";
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(ok);
-  JSONTEST_ASSERT(errs.size() == 0);
-  delete reader;
-}
-
-JSONTEST_FIXTURE(CharReaderTest, parseWithOneError) {
-  Json::CharReaderBuilder b;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  Json::Value root;
-  char const doc[] =
-      "{ \"property\" :: \"value\" }";
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(!ok);
-  JSONTEST_ASSERT(errs ==
-                  "* Line 1, Column 15\n  Syntax error: value, object or array "
-                  "expected.\n");
-  delete reader;
-}
-
-JSONTEST_FIXTURE(CharReaderTest, parseChineseWithOneError) {
-  Json::CharReaderBuilder b;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  Json::Value root;
-  char const doc[] =
-      "{ \"pr佐藤erty\" :: \"value\" }";
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(!ok);
-  JSONTEST_ASSERT(errs ==
-                  "* Line 1, Column 19\n  Syntax error: value, object or array "
-                  "expected.\n");
-  delete reader;
-}
-
-JSONTEST_FIXTURE(CharReaderTest, parseWithDetailError) {
-  Json::CharReaderBuilder b;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  Json::Value root;
-  char const doc[] =
-      "{ \"property\" : \"v\\alue\" }";
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(!ok);
-  JSONTEST_ASSERT(errs ==
-                  "* Line 1, Column 16\n  Bad escape sequence in string\nSee "
-                  "Line 1, Column 20 for detail.\n");
-  delete reader;
-}
-
-JSONTEST_FIXTURE(CharReaderTest, parseWithStackLimit) {
-  Json::CharReaderBuilder b;
-  Json::Value root;
-  char const doc[] =
-      "{ \"property\" : \"value\" }";
-  {
-  b.settings_["stackLimit"] = 2;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(ok);
-  JSONTEST_ASSERT(errs == "");
-  JSONTEST_ASSERT_EQUAL("value", root["property"]);
-  delete reader;
-  }
-  {
-  b.settings_["stackLimit"] = 1;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  JSONTEST_ASSERT_THROWS(reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs));
-  delete reader;
-  }
-}
-
-struct CharReaderStrictModeTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(CharReaderStrictModeTest, dupKeys) {
-  Json::CharReaderBuilder b;
-  Json::Value root;
-  char const doc[] =
-      "{ \"property\" : \"value\", \"key\" : \"val1\", \"key\" : \"val2\" }";
-  {
-    b.strictMode(&b.settings_);
-    Json::CharReader* reader(b.newCharReader());
-    JSONCPP_STRING errs;
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(!ok);
-    JSONTEST_ASSERT_STRING_EQUAL(
-        "* Line 1, Column 41\n"
-        "  Duplicate key: 'key'\n",
-        errs);
-    JSONTEST_ASSERT_EQUAL("val1", root["key"]); // so far
-    delete reader;
-  }
-}
-struct CharReaderFailIfExtraTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(CharReaderFailIfExtraTest, issue164) {
-  // This is interpreted as a string value followed by a colon.
-  Json::CharReaderBuilder b;
-  Json::Value root;
-  char const doc[] =
-      " \"property\" : \"value\" }";
-  {
-  b.settings_["failIfExtra"] = false;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(ok);
-  JSONTEST_ASSERT(errs == "");
-  JSONTEST_ASSERT_EQUAL("property", root);
-  delete reader;
-  }
-  {
-  b.settings_["failIfExtra"] = true;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(!ok);
-  JSONTEST_ASSERT_STRING_EQUAL(errs,
-      "* Line 1, Column 13\n"
-      "  Extra non-whitespace after JSON value.\n");
-  JSONTEST_ASSERT_EQUAL("property", root);
-  delete reader;
-  }
-  {
-  b.settings_["failIfExtra"] = false;
-  b.strictMode(&b.settings_);
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(!ok);
-  JSONTEST_ASSERT_STRING_EQUAL(errs,
-      "* Line 1, Column 13\n"
-      "  Extra non-whitespace after JSON value.\n");
-  JSONTEST_ASSERT_EQUAL("property", root);
-  delete reader;
-  }
-}
-JSONTEST_FIXTURE(CharReaderFailIfExtraTest, issue107) {
-  // This is interpretted as an int value followed by a colon.
-  Json::CharReaderBuilder b;
-  Json::Value root;
-  char const doc[] =
-      "1:2:3";
-  b.settings_["failIfExtra"] = true;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(!ok);
-  JSONTEST_ASSERT_STRING_EQUAL(
-      "* Line 1, Column 2\n"
-      "  Extra non-whitespace after JSON value.\n",
-      errs);
-  JSONTEST_ASSERT_EQUAL(1, root.asInt());
-  delete reader;
-}
-JSONTEST_FIXTURE(CharReaderFailIfExtraTest, commentAfterObject) {
-  Json::CharReaderBuilder b;
-  Json::Value root;
-  {
-  char const doc[] =
-      "{ \"property\" : \"value\" } //trailing\n//comment\n";
-  b.settings_["failIfExtra"] = true;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(ok);
-  JSONTEST_ASSERT_STRING_EQUAL("", errs);
-  JSONTEST_ASSERT_EQUAL("value", root["property"]);
-  delete reader;
-  }
-}
-JSONTEST_FIXTURE(CharReaderFailIfExtraTest, commentAfterArray) {
-  Json::CharReaderBuilder b;
-  Json::Value root;
-  char const doc[] =
-      "[ \"property\" , \"value\" ] //trailing\n//comment\n";
-  b.settings_["failIfExtra"] = true;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(ok);
-  JSONTEST_ASSERT_STRING_EQUAL("", errs);
-  JSONTEST_ASSERT_EQUAL("value", root[1u]);
-  delete reader;
-}
-JSONTEST_FIXTURE(CharReaderFailIfExtraTest, commentAfterBool) {
-  Json::CharReaderBuilder b;
-  Json::Value root;
-  char const doc[] =
-      " true /*trailing\ncomment*/";
-  b.settings_["failIfExtra"] = true;
-  Json::CharReader* reader(b.newCharReader());
-  JSONCPP_STRING errs;
-  bool ok = reader->parse(
-      doc, doc + std::strlen(doc),
-      &root, &errs);
-  JSONTEST_ASSERT(ok);
-  JSONTEST_ASSERT_STRING_EQUAL("", errs);
-  JSONTEST_ASSERT_EQUAL(true, root.asBool());
-  delete reader;
-}
-struct CharReaderAllowDropNullTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(CharReaderAllowDropNullTest, issue178) {
-  Json::CharReaderBuilder b;
-  b.settings_["allowDroppedNullPlaceholders"] = true;
-  Json::Value root;
-  JSONCPP_STRING errs;
-  Json::CharReader* reader(b.newCharReader());
-  {
-    char const doc[] = "{\"a\":,\"b\":true}";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(2u, root.size());
-    JSONTEST_ASSERT_EQUAL(Json::nullValue, root.get("a", true));
-  }
-  {
-    char const doc[] = "{\"a\":}";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(1u, root.size());
-    JSONTEST_ASSERT_EQUAL(Json::nullValue, root.get("a", true));
-  }
-  {
-    char const doc[] = "[]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT(errs == "");
-    JSONTEST_ASSERT_EQUAL(0u, root.size());
-    JSONTEST_ASSERT_EQUAL(Json::arrayValue, root);
-  }
-  {
-    char const doc[] = "[null]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT(errs == "");
-    JSONTEST_ASSERT_EQUAL(1u, root.size());
-  }
-  {
-    char const doc[] = "[,]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(2u, root.size());
-  }
-  {
-    char const doc[] = "[,,,]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(4u, root.size());
-  }
-  {
-    char const doc[] = "[null,]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(2u, root.size());
-  }
-  {
-    char const doc[] = "[,null]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT(errs == "");
-    JSONTEST_ASSERT_EQUAL(2u, root.size());
-  }
-  {
-    char const doc[] = "[,,]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(3u, root.size());
-  }
-  {
-    char const doc[] = "[null,,]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(3u, root.size());
-  }
-  {
-    char const doc[] = "[,null,]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(3u, root.size());
-  }
-  {
-    char const doc[] = "[,,null]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT(errs == "");
-    JSONTEST_ASSERT_EQUAL(3u, root.size());
-  }
-  {
-    char const doc[] = "[[],,,]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(4u, root.size());
-    JSONTEST_ASSERT_EQUAL(Json::arrayValue, root[0u]);
-  }
-  {
-    char const doc[] = "[,[],,]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(4u, root.size());
-    JSONTEST_ASSERT_EQUAL(Json::arrayValue, root[1u]);
-  }
-  {
-    char const doc[] = "[,,,[]]";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT(errs == "");
-    JSONTEST_ASSERT_EQUAL(4u, root.size());
-    JSONTEST_ASSERT_EQUAL(Json::arrayValue, root[3u]);
-  }
-  delete reader;
-}
-
-struct CharReaderAllowSingleQuotesTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(CharReaderAllowSingleQuotesTest, issue182) {
-  Json::CharReaderBuilder b;
-  b.settings_["allowSingleQuotes"] = true;
-  Json::Value root;
-  JSONCPP_STRING errs;
-  Json::CharReader* reader(b.newCharReader());
-  {
-    char const doc[] = "{'a':true,\"b\":true}";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(2u, root.size());
-    JSONTEST_ASSERT_EQUAL(true, root.get("a", false));
-    JSONTEST_ASSERT_EQUAL(true, root.get("b", false));
-  }
-  {
-    char const doc[] = "{'a': 'x', \"b\":'y'}";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(2u, root.size());
-    JSONTEST_ASSERT_STRING_EQUAL("x", root["a"].asString());
-    JSONTEST_ASSERT_STRING_EQUAL("y", root["b"].asString());
-  }
-  delete reader;
-}
-
-struct CharReaderAllowZeroesTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(CharReaderAllowZeroesTest, issue176) {
-  Json::CharReaderBuilder b;
-  b.settings_["allowSingleQuotes"] = true;
-  Json::Value root;
-  JSONCPP_STRING errs;
-  Json::CharReader* reader(b.newCharReader());
-  {
-    char const doc[] = "{'a':true,\"b\":true}";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(2u, root.size());
-    JSONTEST_ASSERT_EQUAL(true, root.get("a", false));
-    JSONTEST_ASSERT_EQUAL(true, root.get("b", false));
-  }
-  {
-    char const doc[] = "{'a': 'x', \"b\":'y'}";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(2u, root.size());
-    JSONTEST_ASSERT_STRING_EQUAL("x", root["a"].asString());
-    JSONTEST_ASSERT_STRING_EQUAL("y", root["b"].asString());
-  }
-  delete reader;
-}
-
-struct CharReaderAllowSpecialFloatsTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(CharReaderAllowSpecialFloatsTest, issue209) {
-  Json::CharReaderBuilder b;
-  b.settings_["allowSpecialFloats"] = true;
-  Json::Value root;
-  JSONCPP_STRING errs;
-  Json::CharReader* reader(b.newCharReader());
-  {
-    char const doc[] = "{\"a\":NaN,\"b\":Infinity,\"c\":-Infinity}";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(3u, root.size());
-    double n = root["a"].asDouble();
-    JSONTEST_ASSERT(n != n);
-    JSONTEST_ASSERT_EQUAL(std::numeric_limits<double>::infinity(), root.get("b", 0.0));
-    JSONTEST_ASSERT_EQUAL(-std::numeric_limits<double>::infinity(), root.get("c", 0.0));
-  }
-
-  struct TestData {
-    int line;
-    bool ok;
-    JSONCPP_STRING in;
-  };
-  const TestData test_data[] = {
-    {__LINE__, 1, "{\"a\":9}"},
-    {__LINE__, 0, "{\"a\":0Infinity}"},
-    {__LINE__, 0, "{\"a\":1Infinity}"},
-    {__LINE__, 0, "{\"a\":9Infinity}"},
-    {__LINE__, 0, "{\"a\":0nfinity}"},
-    {__LINE__, 0, "{\"a\":1nfinity}"},
-    {__LINE__, 0, "{\"a\":9nfinity}"},
-    {__LINE__, 0, "{\"a\":nfinity}"},
-    {__LINE__, 0, "{\"a\":.nfinity}"},
-    {__LINE__, 0, "{\"a\":9nfinity}"},
-    {__LINE__, 0, "{\"a\":-nfinity}"},
-    {__LINE__, 1, "{\"a\":Infinity}"},
-    {__LINE__, 0, "{\"a\":.Infinity}"},
-    {__LINE__, 0, "{\"a\":_Infinity}"},
-    {__LINE__, 0, "{\"a\":_nfinity}"},
-    {__LINE__, 1, "{\"a\":-Infinity}"}
-  };
-  for (size_t tdi = 0; tdi < sizeof(test_data) / sizeof(*test_data); ++tdi) {
-    const TestData& td = test_data[tdi];
-    bool ok = reader->parse(&*td.in.begin(),
-                            &*td.in.begin() + td.in.size(),
-                            &root, &errs);
-    JSONTEST_ASSERT(td.ok == ok)
-        << "line:" << td.line << "\n"
-        << "  expected: {"
-        << "ok:" << td.ok
-        << ", in:\'" << td.in << "\'"
-        << "}\n"
-        << "  actual: {"
-        << "ok:" << ok
-        << "}\n";
-  }
-
-  {
-    char const doc[] = "{\"posInf\": Infinity, \"NegInf\": -Infinity}";
-    bool ok = reader->parse(
-        doc, doc + std::strlen(doc),
-        &root, &errs);
-    JSONTEST_ASSERT(ok);
-    JSONTEST_ASSERT_STRING_EQUAL("", errs);
-    JSONTEST_ASSERT_EQUAL(2u, root.size());
-    JSONTEST_ASSERT_EQUAL(std::numeric_limits<double>::infinity(), root["posInf"].asDouble());
-    JSONTEST_ASSERT_EQUAL(-std::numeric_limits<double>::infinity(), root["NegInf"].asDouble());
-  }
-  delete reader;
-}
-
-struct BuilderTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(BuilderTest, settings) {
-  {
-    Json::Value errs;
-    Json::CharReaderBuilder rb;
-    JSONTEST_ASSERT_EQUAL(false, rb.settings_.isMember("foo"));
-    JSONTEST_ASSERT_EQUAL(true, rb.validate(&errs));
-    rb["foo"] = "bar";
-    JSONTEST_ASSERT_EQUAL(true, rb.settings_.isMember("foo"));
-    JSONTEST_ASSERT_EQUAL(false, rb.validate(&errs));
-  }
-  {
-    Json::Value errs;
-    Json::StreamWriterBuilder wb;
-    JSONTEST_ASSERT_EQUAL(false, wb.settings_.isMember("foo"));
-    JSONTEST_ASSERT_EQUAL(true, wb.validate(&errs));
-    wb["foo"] = "bar";
-    JSONTEST_ASSERT_EQUAL(true, wb.settings_.isMember("foo"));
-    JSONTEST_ASSERT_EQUAL(false, wb.validate(&errs));
-  }
-}
-
-struct IteratorTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(IteratorTest, distance) {
-  Json::Value json;
-  json["k1"] = "a";
-  json["k2"] = "b";
-  int dist = 0;
-  JSONCPP_STRING str;
-  for (Json::ValueIterator it = json.begin(); it != json.end(); ++it) {
-    dist = it - json.begin();
-    str = it->asString().c_str();
-  }
-  JSONTEST_ASSERT_EQUAL(1, dist);
-  JSONTEST_ASSERT_STRING_EQUAL("b", str);
-}
-
-JSONTEST_FIXTURE(IteratorTest, names) {
-  Json::Value json;
-  json["k1"] = "a";
-  json["k2"] = "b";
-  Json::ValueIterator it = json.begin();
-  JSONTEST_ASSERT(it != json.end());
-  JSONTEST_ASSERT_EQUAL(Json::Value("k1"), it.key());
-  JSONTEST_ASSERT_STRING_EQUAL("k1", it.name());
-  JSONTEST_ASSERT_EQUAL(-1, it.index());
-  ++it;
-  JSONTEST_ASSERT(it != json.end());
-  JSONTEST_ASSERT_EQUAL(Json::Value("k2"), it.key());
-  JSONTEST_ASSERT_STRING_EQUAL("k2", it.name());
-  JSONTEST_ASSERT_EQUAL(-1, it.index());
-  ++it;
-  JSONTEST_ASSERT(it == json.end());
-}
-
-JSONTEST_FIXTURE(IteratorTest, indexes) {
-  Json::Value json;
-  json[0] = "a";
-  json[1] = "b";
-  Json::ValueIterator it = json.begin();
-  JSONTEST_ASSERT(it != json.end());
-  JSONTEST_ASSERT_EQUAL(Json::Value(Json::ArrayIndex(0)), it.key());
-  JSONTEST_ASSERT_STRING_EQUAL("", it.name());
-  JSONTEST_ASSERT_EQUAL(0, it.index());
-  ++it;
-  JSONTEST_ASSERT(it != json.end());
-  JSONTEST_ASSERT_EQUAL(Json::Value(Json::ArrayIndex(1)), it.key());
-  JSONTEST_ASSERT_STRING_EQUAL("", it.name());
-  JSONTEST_ASSERT_EQUAL(1, it.index());
-  ++it;
-  JSONTEST_ASSERT(it == json.end());
-}
-
-JSONTEST_FIXTURE(IteratorTest, const) {
-  Json::Value const v;
-  JSONTEST_ASSERT_THROWS(
-    Json::Value::iterator it(v.begin()) // Compile, but throw.
-  );
-
-  Json::Value value;
-
-  for(int i = 9; i < 12; ++i)
-  {
-    JSONCPP_OSTRINGSTREAM out;
-    out << std::setw(2) << i;
-    JSONCPP_STRING str = out.str();
-    value[str] = str;
-  }
-
-  JSONCPP_OSTRINGSTREAM out;
-  //in old code, this will get a compile error
-  Json::Value::const_iterator iter = value.begin();
-  for(; iter != value.end(); ++iter)
-  {
-    out << *iter << ',';
-  }
-  JSONCPP_STRING expected = "\" 9\",\"10\",\"11\",";
-  JSONTEST_ASSERT_STRING_EQUAL(expected, out.str());
-}
-
-struct RValueTest : JsonTest::TestCase {};
-
-JSONTEST_FIXTURE(RValueTest, moveConstruction) {
-#if JSON_HAS_RVALUE_REFERENCES
-  Json::Value json;
-  json["key"] = "value";
-  Json::Value moved = std::move(json);
-  JSONTEST_ASSERT(moved != json); // Possibly not nullValue; definitely not equal.
-  JSONTEST_ASSERT_EQUAL(Json::objectValue, moved.type());
-  JSONTEST_ASSERT_EQUAL(Json::stringValue, moved["key"].type());
-#endif
-}
-
-int main(int argc, const char* argv[]) {
-  JsonTest::Runner runner;
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, checkNormalizeFloatingPointStr);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, memberCount);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, objects);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, arrays);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, arrayIssue252);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, null);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, strings);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, bools);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, integers);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, nonIntegers);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareNull);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareInt);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareUInt);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareDouble);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareString);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareBoolean);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareArray);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareObject);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareType);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, offsetAccessors);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, typeChecksThrowExceptions);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, StaticString);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, CommentBefore);
-  //JSONTEST_REGISTER_FIXTURE(runner, ValueTest, nulls);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, zeroes);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, zeroesInKeys);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, specialFloats);
-  JSONTEST_REGISTER_FIXTURE(runner, ValueTest, precision);
-
-  JSONTEST_REGISTER_FIXTURE(runner, WriterTest, dropNullPlaceholders);
-  JSONTEST_REGISTER_FIXTURE(runner, StreamWriterTest, dropNullPlaceholders);
-  JSONTEST_REGISTER_FIXTURE(runner, StreamWriterTest, writeZeroes);
-
-  JSONTEST_REGISTER_FIXTURE(runner, ReaderTest, parseWithNoErrors);
-  JSONTEST_REGISTER_FIXTURE(
-      runner, ReaderTest, parseWithNoErrorsTestingOffsets);
-  JSONTEST_REGISTER_FIXTURE(runner, ReaderTest, parseWithOneError);
-  JSONTEST_REGISTER_FIXTURE(runner, ReaderTest, parseChineseWithOneError);
-  JSONTEST_REGISTER_FIXTURE(runner, ReaderTest, parseWithDetailError);
-
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderTest, parseWithNoErrors);
-  JSONTEST_REGISTER_FIXTURE(
-      runner, CharReaderTest, parseWithNoErrorsTestingOffsets);
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderTest, parseWithOneError);
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderTest, parseChineseWithOneError);
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderTest, parseWithDetailError);
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderTest, parseWithStackLimit);
-
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderStrictModeTest, dupKeys);
-
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderFailIfExtraTest, issue164);
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderFailIfExtraTest, issue107);
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderFailIfExtraTest, commentAfterObject);
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderFailIfExtraTest, commentAfterArray);
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderFailIfExtraTest, commentAfterBool);
-
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderAllowDropNullTest, issue178);
-
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderAllowSingleQuotesTest, issue182);
-
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderAllowZeroesTest, issue176);
-
-  JSONTEST_REGISTER_FIXTURE(runner, CharReaderAllowSpecialFloatsTest, issue209);
-
-  JSONTEST_REGISTER_FIXTURE(runner, BuilderTest, settings);
-
-  JSONTEST_REGISTER_FIXTURE(runner, IteratorTest, distance);
-  JSONTEST_REGISTER_FIXTURE(runner, IteratorTest, names);
-  JSONTEST_REGISTER_FIXTURE(runner, IteratorTest, indexes);
-  JSONTEST_REGISTER_FIXTURE(runner, IteratorTest, const);
-
-  JSONTEST_REGISTER_FIXTURE(runner, RValueTest, moveConstruction);
-
-  return runner.runCommandLine(argc, argv);
-}
-
-#pragma GCC diagnostic pop
diff --git a/3rdParty/jsoncpp/test/cleantests.py b/3rdParty/jsoncpp/test/cleantests.py
deleted file mode 100644
index 36d5b9b461048b24055c1d68a27d582c73cc8088..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/cleantests.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2007 Baptiste Lepilleur and The JsonCpp Authors
-# Distributed under MIT license, or public domain if desired and
-# recognized in your jurisdiction.
-# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-"""Removes all files created during testing."""
-
-import glob
-import os
-
-paths = []
-for pattern in [ '*.actual', '*.actual-rewrite', '*.rewrite', '*.process-output' ]:
-    paths += glob.glob('data/' + pattern)
-
-for path in paths:
-    os.unlink(path)
diff --git a/3rdParty/jsoncpp/test/data/fail_test_array_01.json b/3rdParty/jsoncpp/test/data/fail_test_array_01.json
deleted file mode 100644
index f72a6d07749483a6abd45776ee97e9f9d3420718..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/fail_test_array_01.json
+++ /dev/null
@@ -1 +0,0 @@
-[ 1 2 3]
diff --git a/3rdParty/jsoncpp/test/data/fail_test_stack_limit.json b/3rdParty/jsoncpp/test/data/fail_test_stack_limit.json
deleted file mode 100644
index 7524e0bbb955cc416857f16c9c8063fd18990479..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/fail_test_stack_limit.json
+++ /dev/null
@@ -1 +0,0 @@
-[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
diff --git a/3rdParty/jsoncpp/test/data/test_array_01.expected b/3rdParty/jsoncpp/test/data/test_array_01.expected
deleted file mode 100644
index a341ff753cb37de7560c7a235c3115136f596e86..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_01.expected
+++ /dev/null
@@ -1 +0,0 @@
-.=[]
diff --git a/3rdParty/jsoncpp/test/data/test_array_01.json b/3rdParty/jsoncpp/test/data/test_array_01.json
deleted file mode 100644
index fe51488c7066f6687ef680d6bfaa4f7768ef205c..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_01.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/3rdParty/jsoncpp/test/data/test_array_02.expected b/3rdParty/jsoncpp/test/data/test_array_02.expected
deleted file mode 100644
index ef1f2623de06c8a24f180bc3aa88482350a0669a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_02.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.=[]
-.[0]=1
diff --git a/3rdParty/jsoncpp/test/data/test_array_02.json b/3rdParty/jsoncpp/test/data/test_array_02.json
deleted file mode 100644
index 7660873d10312f596c4dc0586fb548309c71276f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_02.json
+++ /dev/null
@@ -1 +0,0 @@
-[1]
diff --git a/3rdParty/jsoncpp/test/data/test_array_03.expected b/3rdParty/jsoncpp/test/data/test_array_03.expected
deleted file mode 100644
index 3d8dc18eb1e97495a704e98369882ca38ab607a6..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_03.expected
+++ /dev/null
@@ -1,6 +0,0 @@
-.=[]
-.[0]=1
-.[1]=2
-.[2]=3
-.[3]=4
-.[4]=5
diff --git a/3rdParty/jsoncpp/test/data/test_array_03.json b/3rdParty/jsoncpp/test/data/test_array_03.json
deleted file mode 100644
index 9b3f92475590539c1af9a9832b8a836a526da701..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_03.json
+++ /dev/null
@@ -1 +0,0 @@
-[ 1, 2 ,  3,4,5]
diff --git a/3rdParty/jsoncpp/test/data/test_array_04.expected b/3rdParty/jsoncpp/test/data/test_array_04.expected
deleted file mode 100644
index ad4add97946f7afd6009467be442fe25dee27afd..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_04.expected
+++ /dev/null
@@ -1,5 +0,0 @@
-.=[]
-.[0]=1
-.[1]="abc"
-.[2]=12.3
-.[3]=-4
diff --git a/3rdParty/jsoncpp/test/data/test_array_04.json b/3rdParty/jsoncpp/test/data/test_array_04.json
deleted file mode 100644
index ecca546b2c643de19b54e8e5adbbd3230f61e464..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_04.json
+++ /dev/null
@@ -1 +0,0 @@
-[1, "abc" , 12.3, -4]
diff --git a/3rdParty/jsoncpp/test/data/test_array_05.expected b/3rdParty/jsoncpp/test/data/test_array_05.expected
deleted file mode 100644
index 76cff87c2ab0be4f09a5bedc3a0b26103ac3d148..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_05.expected
+++ /dev/null
@@ -1,100 +0,0 @@
-.=[]
-.[0]=1
-.[1]=2
-.[2]=3
-.[3]=4
-.[4]=5
-.[5]=6
-.[6]=7
-.[7]=8
-.[8]=9
-.[9]=10
-.[10]=11
-.[11]=12
-.[12]=13
-.[13]=14
-.[14]=15
-.[15]=16
-.[16]=17
-.[17]=18
-.[18]=19
-.[19]=20
-.[20]=21
-.[21]=22
-.[22]=23
-.[23]=24
-.[24]=25
-.[25]=26
-.[26]=27
-.[27]=28
-.[28]=29
-.[29]=30
-.[30]=31
-.[31]=32
-.[32]=33
-.[33]=34
-.[34]=35
-.[35]=36
-.[36]=37
-.[37]=38
-.[38]=39
-.[39]=40
-.[40]=41
-.[41]=42
-.[42]=43
-.[43]=44
-.[44]=45
-.[45]=46
-.[46]=47
-.[47]=48
-.[48]=49
-.[49]=50
-.[50]=51
-.[51]=52
-.[52]=53
-.[53]=54
-.[54]=55
-.[55]=56
-.[56]=57
-.[57]=58
-.[58]=59
-.[59]=60
-.[60]=61
-.[61]=62
-.[62]=63
-.[63]=64
-.[64]=65
-.[65]=66
-.[66]=67
-.[67]=68
-.[68]=69
-.[69]=70
-.[70]=71
-.[71]=72
-.[72]=73
-.[73]=74
-.[74]=75
-.[75]=76
-.[76]=77
-.[77]=78
-.[78]=79
-.[79]=80
-.[80]=81
-.[81]=82
-.[82]=83
-.[83]=84
-.[84]=85
-.[85]=86
-.[86]=87
-.[87]=88
-.[88]=89
-.[89]=90
-.[90]=91
-.[91]=92
-.[92]=93
-.[93]=94
-.[94]=95
-.[95]=96
-.[96]=97
-.[97]=98
-.[98]=99
diff --git a/3rdParty/jsoncpp/test/data/test_array_05.json b/3rdParty/jsoncpp/test/data/test_array_05.json
deleted file mode 100644
index 7809d6c9a1ad2f75334dc8f2c886df23e1ccc9bf..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_05.json
+++ /dev/null
@@ -1 +0,0 @@
-[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_array_06.expected b/3rdParty/jsoncpp/test/data/test_array_06.expected
deleted file mode 100644
index 5c9f48eaacd5aef83b7684cd069e748df2d699fb..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_06.expected
+++ /dev/null
@@ -1,5 +0,0 @@
-.=[]
-.[0]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-.[1]="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
-.[2]="ccccccccccccccccccccccc"
-.[3]="dddddddddddddddddddddddddddddddddddddddddddddddddddd"
diff --git a/3rdParty/jsoncpp/test/data/test_array_06.json b/3rdParty/jsoncpp/test/data/test_array_06.json
deleted file mode 100644
index 7f6c516afdeb309ac419747049e1449cbbd9dc99..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_06.json
+++ /dev/null
@@ -1,4 +0,0 @@
-[ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 
-  "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
-  "ccccccccccccccccccccccc",
-  "dddddddddddddddddddddddddddddddddddddddddddddddddddd" ]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_array_07.expected b/3rdParty/jsoncpp/test/data/test_array_07.expected
deleted file mode 100644
index ee2fafc010e20c25cdff147bdcfef90833ee233c..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_07.expected
+++ /dev/null
@@ -1,2122 +0,0 @@
-.=[]
-.[0]=[]
-.[0][0]="A"
-.[0][1]=0
-.[0][2]=1
-.[0][3]=2
-.[0][4]=3
-.[0][5]=4
-.[0][6]=5
-.[0][7]=6
-.[0][8]=7
-.[0][9]=8
-.[0][10]=9
-.[0][11]=10
-.[0][12]=11
-.[0][13]=12
-.[0][14]=13
-.[0][15]=14
-.[0][16]=15
-.[0][17]=16
-.[0][18]=17
-.[0][19]=18
-.[0][20]=19
-.[0][21]=20
-.[0][22]=21
-.[0][23]=22
-.[0][24]=23
-.[0][25]=24
-.[0][26]=25
-.[0][27]=26
-.[0][28]=27
-.[0][29]=28
-.[0][30]=29
-.[0][31]=30
-.[0][32]=31
-.[0][33]=32
-.[0][34]=33
-.[0][35]=34
-.[0][36]=35
-.[0][37]=36
-.[0][38]=37
-.[0][39]=38
-.[0][40]=39
-.[0][41]=40
-.[0][42]=41
-.[0][43]=42
-.[0][44]=43
-.[0][45]=44
-.[0][46]=45
-.[0][47]=46
-.[0][48]=47
-.[0][49]=48
-.[0][50]=49
-.[0][51]=50
-.[0][52]=51
-.[0][53]=52
-.[0][54]=53
-.[0][55]=54
-.[0][56]=55
-.[0][57]=56
-.[0][58]=57
-.[0][59]=58
-.[0][60]=59
-.[0][61]=60
-.[0][62]=61
-.[0][63]=62
-.[0][64]=63
-.[0][65]=64
-.[0][66]=65
-.[0][67]=66
-.[0][68]=67
-.[0][69]=68
-.[0][70]=69
-.[0][71]=70
-.[0][72]=71
-.[0][73]=72
-.[0][74]=73
-.[0][75]=74
-.[0][76]=75
-.[0][77]=76
-.[0][78]=77
-.[0][79]=78
-.[0][80]=79
-.[0][81]=80
-.[0][82]=81
-.[0][83]=82
-.[0][84]=83
-.[0][85]=84
-.[0][86]=85
-.[0][87]=86
-.[0][88]=87
-.[0][89]=88
-.[0][90]=89
-.[0][91]=90
-.[0][92]=91
-.[0][93]=92
-.[0][94]=93
-.[0][95]=94
-.[0][96]=95
-.[0][97]=96
-.[0][98]=97
-.[0][99]=98
-.[0][100]=99
-.[0][101]=100
-.[0][102]=101
-.[0][103]=102
-.[0][104]=103
-.[0][105]=104
-.[0][106]=105
-.[0][107]=106
-.[0][108]=107
-.[0][109]=108
-.[0][110]=109
-.[0][111]=110
-.[0][112]=111
-.[0][113]=112
-.[0][114]=113
-.[0][115]=114
-.[0][116]=115
-.[0][117]=116
-.[0][118]=117
-.[0][119]=118
-.[0][120]=119
-.[0][121]=120
-.[0][122]=121
-.[0][123]=122
-.[0][124]=123
-.[0][125]=124
-.[0][126]=125
-.[0][127]=126
-.[0][128]=127
-.[0][129]=128
-.[0][130]=129
-.[0][131]=130
-.[0][132]=131
-.[0][133]=132
-.[0][134]=133
-.[0][135]=134
-.[0][136]=135
-.[0][137]=136
-.[0][138]=137
-.[0][139]=138
-.[0][140]=139
-.[0][141]=140
-.[0][142]=141
-.[0][143]=142
-.[0][144]=143
-.[0][145]=144
-.[0][146]=145
-.[0][147]=146
-.[0][148]=147
-.[0][149]=148
-.[0][150]=149
-.[0][151]=150
-.[0][152]=151
-.[0][153]=152
-.[0][154]=153
-.[0][155]=154
-.[0][156]=155
-.[0][157]=156
-.[0][158]=157
-.[0][159]=158
-.[0][160]=159
-.[0][161]=160
-.[0][162]=161
-.[0][163]=162
-.[0][164]=163
-.[0][165]=164
-.[0][166]=165
-.[0][167]=166
-.[0][168]=167
-.[0][169]=168
-.[0][170]=169
-.[0][171]=170
-.[0][172]=171
-.[0][173]=172
-.[0][174]=173
-.[0][175]=174
-.[0][176]=175
-.[0][177]=176
-.[0][178]=177
-.[0][179]=178
-.[0][180]=179
-.[0][181]=180
-.[0][182]=181
-.[0][183]=182
-.[0][184]=183
-.[0][185]=184
-.[0][186]=185
-.[0][187]=186
-.[0][188]=187
-.[0][189]=188
-.[0][190]=189
-.[0][191]=190
-.[0][192]=191
-.[0][193]=192
-.[0][194]=193
-.[0][195]=194
-.[0][196]=195
-.[0][197]=196
-.[0][198]=197
-.[0][199]=198
-.[0][200]=199
-.[0][201]=200
-.[0][202]=201
-.[0][203]=202
-.[0][204]=203
-.[0][205]=204
-.[0][206]=205
-.[0][207]=206
-.[0][208]=207
-.[0][209]=208
-.[0][210]=209
-.[0][211]=210
-.[0][212]=211
-.[0][213]=212
-.[0][214]=213
-.[0][215]=214
-.[0][216]=215
-.[0][217]=216
-.[0][218]=217
-.[0][219]=218
-.[0][220]=219
-.[0][221]=220
-.[0][222]=221
-.[0][223]=222
-.[0][224]=223
-.[0][225]=224
-.[0][226]=225
-.[0][227]=226
-.[0][228]=227
-.[0][229]=228
-.[0][230]=229
-.[0][231]=230
-.[0][232]=231
-.[0][233]=232
-.[0][234]=233
-.[0][235]=234
-.[0][236]=235
-.[0][237]=236
-.[0][238]=237
-.[0][239]=238
-.[0][240]=239
-.[0][241]=240
-.[0][242]=241
-.[0][243]=242
-.[0][244]=243
-.[0][245]=244
-.[0][246]=245
-.[0][247]=246
-.[0][248]=247
-.[0][249]=248
-.[0][250]=249
-.[0][251]=250
-.[0][252]=251
-.[0][253]=252
-.[0][254]=253
-.[0][255]=254
-.[0][256]=255
-.[0][257]=256
-.[0][258]=257
-.[0][259]=258
-.[0][260]=259
-.[0][261]=260
-.[0][262]=261
-.[0][263]=262
-.[0][264]=263
-.[0][265]=264
-.[0][266]=265
-.[0][267]=266
-.[0][268]=267
-.[0][269]=268
-.[0][270]=269
-.[0][271]=270
-.[0][272]=271
-.[0][273]=272
-.[0][274]=273
-.[0][275]=274
-.[0][276]=275
-.[0][277]=276
-.[0][278]=277
-.[0][279]=278
-.[0][280]=279
-.[0][281]=280
-.[0][282]=281
-.[0][283]=282
-.[0][284]=283
-.[0][285]=284
-.[0][286]=285
-.[0][287]=286
-.[0][288]=287
-.[0][289]=288
-.[0][290]=289
-.[0][291]=290
-.[0][292]=291
-.[0][293]=292
-.[0][294]=293
-.[0][295]=294
-.[0][296]=295
-.[0][297]=296
-.[0][298]=297
-.[0][299]=298
-.[0][300]=299
-.[0][301]=300
-.[0][302]=301
-.[0][303]=302
-.[0][304]=303
-.[0][305]=304
-.[0][306]=305
-.[0][307]=306
-.[0][308]=307
-.[0][309]=308
-.[0][310]=309
-.[0][311]=310
-.[0][312]=311
-.[0][313]=312
-.[0][314]=313
-.[0][315]=314
-.[0][316]=315
-.[0][317]=316
-.[0][318]=317
-.[0][319]=318
-.[0][320]=319
-.[0][321]=320
-.[0][322]=321
-.[0][323]=322
-.[0][324]=323
-.[0][325]=324
-.[0][326]=325
-.[0][327]=326
-.[0][328]=327
-.[0][329]=328
-.[0][330]=329
-.[0][331]=330
-.[0][332]=331
-.[0][333]=332
-.[0][334]=333
-.[0][335]=334
-.[0][336]=335
-.[0][337]=336
-.[0][338]=337
-.[0][339]=338
-.[0][340]=339
-.[0][341]=340
-.[0][342]=341
-.[0][343]=342
-.[0][344]=343
-.[0][345]=344
-.[0][346]=345
-.[0][347]=346
-.[0][348]=347
-.[0][349]=348
-.[0][350]=349
-.[0][351]=350
-.[0][352]=351
-.[0][353]=352
-.[0][354]=353
-.[0][355]=354
-.[0][356]=355
-.[0][357]=356
-.[0][358]=357
-.[0][359]=358
-.[0][360]=359
-.[0][361]=360
-.[0][362]=361
-.[0][363]=362
-.[0][364]=363
-.[0][365]=364
-.[0][366]=365
-.[0][367]=366
-.[0][368]=367
-.[0][369]=368
-.[0][370]=369
-.[0][371]=370
-.[0][372]=371
-.[0][373]=372
-.[0][374]=373
-.[0][375]=374
-.[0][376]=375
-.[0][377]=376
-.[0][378]=377
-.[0][379]=378
-.[0][380]=379
-.[0][381]=380
-.[0][382]=381
-.[0][383]=382
-.[0][384]=383
-.[0][385]=384
-.[0][386]=385
-.[0][387]=386
-.[0][388]=387
-.[0][389]=388
-.[0][390]=389
-.[0][391]=390
-.[0][392]=391
-.[0][393]=392
-.[0][394]=393
-.[0][395]=394
-.[0][396]=395
-.[0][397]=396
-.[0][398]=397
-.[0][399]=398
-.[0][400]=399
-.[0][401]=400
-.[0][402]=401
-.[0][403]=402
-.[0][404]=403
-.[0][405]=404
-.[0][406]=405
-.[0][407]=406
-.[0][408]=407
-.[0][409]=408
-.[0][410]=409
-.[0][411]=410
-.[0][412]=411
-.[0][413]=412
-.[0][414]=413
-.[0][415]=414
-.[0][416]=415
-.[0][417]=416
-.[0][418]=417
-.[0][419]=418
-.[0][420]=419
-.[0][421]=420
-.[0][422]=421
-.[0][423]=422
-.[0][424]=423
-.[0][425]=424
-.[0][426]=425
-.[0][427]=426
-.[0][428]=427
-.[0][429]=428
-.[0][430]=429
-.[0][431]=430
-.[0][432]=431
-.[0][433]=432
-.[0][434]=433
-.[0][435]=434
-.[0][436]=435
-.[0][437]=436
-.[0][438]=437
-.[0][439]=438
-.[0][440]=439
-.[0][441]=440
-.[0][442]=441
-.[0][443]=442
-.[0][444]=443
-.[0][445]=444
-.[0][446]=445
-.[0][447]=446
-.[0][448]=447
-.[0][449]=448
-.[0][450]=449
-.[0][451]=450
-.[0][452]=451
-.[0][453]=452
-.[0][454]=453
-.[0][455]=454
-.[0][456]=455
-.[0][457]=456
-.[0][458]=457
-.[0][459]=458
-.[0][460]=459
-.[0][461]=460
-.[0][462]=461
-.[0][463]=462
-.[0][464]=463
-.[0][465]=464
-.[0][466]=465
-.[0][467]=466
-.[0][468]=467
-.[0][469]=468
-.[0][470]=469
-.[0][471]=470
-.[0][472]=471
-.[0][473]=472
-.[0][474]=473
-.[0][475]=474
-.[0][476]=475
-.[0][477]=476
-.[0][478]=477
-.[0][479]=478
-.[0][480]=479
-.[0][481]=480
-.[0][482]=481
-.[0][483]=482
-.[0][484]=483
-.[0][485]=484
-.[0][486]=485
-.[0][487]=486
-.[0][488]=487
-.[0][489]=488
-.[0][490]=489
-.[0][491]=490
-.[0][492]=491
-.[0][493]=492
-.[0][494]=493
-.[0][495]=494
-.[0][496]=495
-.[0][497]=496
-.[0][498]=497
-.[0][499]=498
-.[0][500]=499
-.[0][501]=500
-.[0][502]=501
-.[0][503]=502
-.[0][504]=503
-.[0][505]=504
-.[0][506]=505
-.[0][507]=506
-.[0][508]=507
-.[0][509]=508
-.[0][510]=509
-.[0][511]=510
-.[0][512]=511
-.[0][513]=512
-.[0][514]=513
-.[0][515]=514
-.[0][516]=515
-.[0][517]=516
-.[0][518]=517
-.[0][519]=518
-.[0][520]=519
-.[0][521]=520
-.[0][522]=521
-.[0][523]=522
-.[0][524]=523
-.[0][525]=524
-.[0][526]=525
-.[0][527]=526
-.[0][528]=527
-.[0][529]=528
-.[0][530]=529
-.[0][531]=530
-.[0][532]=531
-.[0][533]=532
-.[0][534]=533
-.[0][535]=534
-.[0][536]=535
-.[0][537]=536
-.[0][538]=537
-.[0][539]=538
-.[0][540]=539
-.[0][541]=540
-.[0][542]=541
-.[0][543]=542
-.[0][544]=543
-.[0][545]=544
-.[0][546]=545
-.[0][547]=546
-.[0][548]=547
-.[0][549]=548
-.[0][550]=549
-.[0][551]=550
-.[0][552]=551
-.[0][553]=552
-.[0][554]=553
-.[0][555]=554
-.[0][556]=555
-.[0][557]=556
-.[0][558]=557
-.[0][559]=558
-.[0][560]=559
-.[0][561]=560
-.[0][562]=561
-.[0][563]=562
-.[0][564]=563
-.[0][565]=564
-.[0][566]=565
-.[0][567]=566
-.[0][568]=567
-.[0][569]=568
-.[0][570]=569
-.[0][571]=570
-.[0][572]=571
-.[0][573]=572
-.[0][574]=573
-.[0][575]=574
-.[0][576]=575
-.[0][577]=576
-.[0][578]=577
-.[0][579]=578
-.[0][580]=579
-.[0][581]=580
-.[0][582]=581
-.[0][583]=582
-.[0][584]=583
-.[0][585]=584
-.[0][586]=585
-.[0][587]=586
-.[0][588]=587
-.[0][589]=588
-.[0][590]=589
-.[0][591]=590
-.[0][592]=591
-.[0][593]=592
-.[0][594]=593
-.[0][595]=594
-.[0][596]=595
-.[0][597]=596
-.[0][598]=597
-.[0][599]=598
-.[0][600]=599
-.[0][601]=600
-.[0][602]=601
-.[0][603]=602
-.[0][604]=603
-.[0][605]=604
-.[0][606]=605
-.[0][607]=606
-.[0][608]=607
-.[0][609]=608
-.[0][610]=609
-.[0][611]=610
-.[0][612]=611
-.[0][613]=612
-.[0][614]=613
-.[0][615]=614
-.[0][616]=615
-.[0][617]=616
-.[0][618]=617
-.[0][619]=618
-.[0][620]=619
-.[0][621]=620
-.[0][622]=621
-.[0][623]=622
-.[0][624]=623
-.[0][625]=624
-.[0][626]=625
-.[0][627]=626
-.[0][628]=627
-.[0][629]=628
-.[0][630]=629
-.[0][631]=630
-.[0][632]=631
-.[0][633]=632
-.[0][634]=633
-.[0][635]=634
-.[0][636]=635
-.[0][637]=636
-.[0][638]=637
-.[0][639]=638
-.[0][640]=639
-.[0][641]=640
-.[0][642]=641
-.[0][643]=642
-.[0][644]=643
-.[0][645]=644
-.[0][646]=645
-.[0][647]=646
-.[0][648]=647
-.[0][649]=648
-.[0][650]=649
-.[0][651]=650
-.[0][652]=651
-.[0][653]=652
-.[0][654]=653
-.[0][655]=654
-.[0][656]=655
-.[0][657]=656
-.[0][658]=657
-.[0][659]=658
-.[0][660]=659
-.[0][661]=660
-.[0][662]=661
-.[0][663]=662
-.[0][664]=663
-.[0][665]=664
-.[0][666]=665
-.[0][667]=666
-.[0][668]=667
-.[0][669]=668
-.[0][670]=669
-.[0][671]=670
-.[0][672]=671
-.[0][673]=672
-.[0][674]=673
-.[0][675]=674
-.[0][676]=675
-.[0][677]=676
-.[0][678]=677
-.[0][679]=678
-.[0][680]=679
-.[0][681]=680
-.[0][682]=681
-.[0][683]=682
-.[0][684]=683
-.[0][685]=684
-.[0][686]=685
-.[0][687]=686
-.[0][688]=687
-.[0][689]=688
-.[0][690]=689
-.[0][691]=690
-.[0][692]=691
-.[0][693]=692
-.[0][694]=693
-.[0][695]=694
-.[0][696]=695
-.[0][697]=696
-.[0][698]=697
-.[0][699]=698
-.[0][700]=699
-.[0][701]=700
-.[0][702]=701
-.[0][703]=702
-.[0][704]=703
-.[0][705]=704
-.[0][706]=705
-.[0][707]=706
-.[0][708]=707
-.[0][709]=708
-.[0][710]=709
-.[0][711]=710
-.[0][712]=711
-.[0][713]=712
-.[0][714]=713
-.[0][715]=714
-.[0][716]=715
-.[0][717]=716
-.[0][718]=717
-.[0][719]=718
-.[0][720]=719
-.[0][721]=720
-.[0][722]=721
-.[0][723]=722
-.[0][724]=723
-.[0][725]=724
-.[0][726]=725
-.[0][727]=726
-.[0][728]=727
-.[0][729]=728
-.[0][730]=729
-.[0][731]=730
-.[0][732]=731
-.[0][733]=732
-.[0][734]=733
-.[0][735]=734
-.[0][736]=735
-.[0][737]=736
-.[0][738]=737
-.[0][739]=738
-.[0][740]=739
-.[0][741]=740
-.[0][742]=741
-.[0][743]=742
-.[0][744]=743
-.[0][745]=744
-.[0][746]=745
-.[0][747]=746
-.[0][748]=747
-.[0][749]=748
-.[0][750]=749
-.[0][751]=750
-.[0][752]=751
-.[0][753]=752
-.[0][754]=753
-.[0][755]=754
-.[0][756]=755
-.[0][757]=756
-.[0][758]=757
-.[0][759]=758
-.[0][760]=759
-.[0][761]=760
-.[0][762]=761
-.[0][763]=762
-.[0][764]=763
-.[0][765]=764
-.[0][766]=765
-.[0][767]=766
-.[0][768]=767
-.[0][769]=768
-.[0][770]=769
-.[0][771]=770
-.[0][772]=771
-.[0][773]=772
-.[0][774]=773
-.[0][775]=774
-.[0][776]=775
-.[0][777]=776
-.[0][778]=777
-.[0][779]=778
-.[0][780]=779
-.[0][781]=780
-.[0][782]=781
-.[0][783]=782
-.[0][784]=783
-.[0][785]=784
-.[0][786]=785
-.[0][787]=786
-.[0][788]=787
-.[0][789]=788
-.[0][790]=789
-.[0][791]=790
-.[0][792]=791
-.[0][793]=792
-.[0][794]=793
-.[0][795]=794
-.[0][796]=795
-.[0][797]=796
-.[0][798]=797
-.[0][799]=798
-.[0][800]=799
-.[0][801]=800
-.[0][802]=801
-.[0][803]=802
-.[0][804]=803
-.[0][805]=804
-.[0][806]=805
-.[0][807]=806
-.[0][808]=807
-.[0][809]=808
-.[0][810]=809
-.[0][811]=810
-.[0][812]=811
-.[0][813]=812
-.[0][814]=813
-.[0][815]=814
-.[0][816]=815
-.[0][817]=816
-.[0][818]=817
-.[0][819]=818
-.[0][820]=819
-.[0][821]=820
-.[0][822]=821
-.[0][823]=822
-.[0][824]=823
-.[0][825]=824
-.[0][826]=825
-.[0][827]=826
-.[0][828]=827
-.[0][829]=828
-.[0][830]=829
-.[0][831]=830
-.[0][832]=831
-.[0][833]=832
-.[0][834]=833
-.[0][835]=834
-.[0][836]=835
-.[0][837]=836
-.[0][838]=837
-.[0][839]=838
-.[0][840]=839
-.[0][841]=840
-.[0][842]=841
-.[0][843]=842
-.[0][844]=843
-.[0][845]=844
-.[0][846]=845
-.[0][847]=846
-.[0][848]=847
-.[0][849]=848
-.[0][850]=849
-.[0][851]=850
-.[0][852]=851
-.[0][853]=852
-.[0][854]=853
-.[0][855]=854
-.[0][856]=855
-.[0][857]=856
-.[0][858]=857
-.[0][859]=858
-.[0][860]=859
-.[0][861]=860
-.[0][862]=861
-.[0][863]=862
-.[0][864]=863
-.[0][865]=864
-.[0][866]=865
-.[0][867]=866
-.[0][868]=867
-.[0][869]=868
-.[0][870]=869
-.[0][871]=870
-.[0][872]=871
-.[0][873]=872
-.[0][874]=873
-.[0][875]=874
-.[0][876]=875
-.[0][877]=876
-.[0][878]=877
-.[0][879]=878
-.[0][880]=879
-.[0][881]=880
-.[0][882]=881
-.[0][883]=882
-.[0][884]=883
-.[0][885]=884
-.[0][886]=885
-.[0][887]=886
-.[0][888]=887
-.[0][889]=888
-.[0][890]=889
-.[0][891]=890
-.[0][892]=891
-.[0][893]=892
-.[0][894]=893
-.[0][895]=894
-.[0][896]=895
-.[0][897]=896
-.[0][898]=897
-.[0][899]=898
-.[0][900]=899
-.[0][901]=900
-.[0][902]=901
-.[0][903]=902
-.[0][904]=903
-.[0][905]=904
-.[0][906]=905
-.[0][907]=906
-.[0][908]=907
-.[0][909]=908
-.[0][910]=909
-.[0][911]=910
-.[0][912]=911
-.[0][913]=912
-.[0][914]=913
-.[0][915]=914
-.[0][916]=915
-.[0][917]=916
-.[0][918]=917
-.[0][919]=918
-.[0][920]=919
-.[0][921]=920
-.[0][922]=921
-.[0][923]=922
-.[0][924]=923
-.[0][925]=924
-.[0][926]=925
-.[0][927]=926
-.[0][928]=927
-.[0][929]=928
-.[0][930]=929
-.[0][931]=930
-.[0][932]=931
-.[0][933]=932
-.[0][934]=933
-.[0][935]=934
-.[0][936]=935
-.[0][937]=936
-.[0][938]=937
-.[0][939]=938
-.[0][940]=939
-.[0][941]=940
-.[0][942]=941
-.[0][943]=942
-.[0][944]=943
-.[0][945]=944
-.[0][946]=945
-.[0][947]=946
-.[0][948]=947
-.[0][949]=948
-.[0][950]=949
-.[0][951]=950
-.[0][952]=951
-.[0][953]=952
-.[0][954]=953
-.[0][955]=954
-.[0][956]=955
-.[0][957]=956
-.[0][958]=957
-.[0][959]=958
-.[0][960]=959
-.[0][961]=960
-.[0][962]=961
-.[0][963]=962
-.[0][964]=963
-.[0][965]=964
-.[0][966]=965
-.[0][967]=966
-.[0][968]=967
-.[0][969]=968
-.[0][970]=969
-.[0][971]=970
-.[0][972]=971
-.[0][973]=972
-.[0][974]=973
-.[0][975]=974
-.[0][976]=975
-.[0][977]=976
-.[0][978]=977
-.[0][979]=978
-.[0][980]=979
-.[0][981]=980
-.[0][982]=981
-.[0][983]=982
-.[0][984]=983
-.[0][985]=984
-.[0][986]=985
-.[0][987]=986
-.[0][988]=987
-.[0][989]=988
-.[0][990]=989
-.[0][991]=990
-.[0][992]=991
-.[0][993]=992
-.[0][994]=993
-.[0][995]=994
-.[0][996]=995
-.[0][997]=996
-.[0][998]=997
-.[0][999]=998
-.[0][1000]=999
-.[0][1001]=1000
-.[0][1002]=1001
-.[0][1003]=1002
-.[0][1004]=1003
-.[0][1005]=1004
-.[0][1006]=1005
-.[0][1007]=1006
-.[0][1008]=1007
-.[0][1009]=1008
-.[0][1010]=1009
-.[0][1011]=1010
-.[0][1012]=1011
-.[0][1013]=1012
-.[0][1014]=1013
-.[0][1015]=1014
-.[0][1016]=1015
-.[0][1017]=1016
-.[0][1018]=1017
-.[0][1019]=1018
-.[0][1020]=1019
-.[0][1021]=1020
-.[0][1022]=1021
-.[0][1023]=1022
-.[0][1024]=1023
-.[0][1025]=1024
-.[0][1026]=1025
-.[0][1027]=1026
-.[0][1028]=1027
-.[0][1029]=1028
-.[0][1030]=1029
-.[0][1031]=1030
-.[0][1032]=1031
-.[0][1033]=1032
-.[0][1034]=1033
-.[0][1035]=1034
-.[0][1036]=1035
-.[0][1037]=1036
-.[0][1038]=1037
-.[0][1039]=1038
-.[0][1040]=1039
-.[0][1041]=1040
-.[0][1042]=1041
-.[0][1043]=1042
-.[0][1044]=1043
-.[0][1045]=1044
-.[0][1046]=1045
-.[0][1047]=1046
-.[0][1048]=1047
-.[0][1049]=1048
-.[0][1050]=1049
-.[0][1051]=1050
-.[0][1052]=1051
-.[0][1053]=1052
-.[0][1054]=1053
-.[0][1055]=1054
-.[0][1056]=1055
-.[0][1057]=1056
-.[0][1058]=1057
-.[0][1059]=1058
-.[0][1060]=1059
-.[0][1061]=1060
-.[0][1062]=1061
-.[0][1063]=1062
-.[0][1064]=1063
-.[0][1065]=1064
-.[0][1066]=1065
-.[0][1067]=1066
-.[0][1068]=1067
-.[0][1069]=1068
-.[0][1070]=1069
-.[0][1071]=1070
-.[0][1072]=1071
-.[0][1073]=1072
-.[0][1074]=1073
-.[0][1075]=1074
-.[0][1076]=1075
-.[0][1077]=1076
-.[0][1078]=1077
-.[0][1079]=1078
-.[0][1080]=1079
-.[0][1081]=1080
-.[0][1082]=1081
-.[0][1083]=1082
-.[0][1084]=1083
-.[0][1085]=1084
-.[0][1086]=1085
-.[0][1087]=1086
-.[0][1088]=1087
-.[0][1089]=1088
-.[0][1090]=1089
-.[0][1091]=1090
-.[0][1092]=1091
-.[0][1093]=1092
-.[0][1094]=1093
-.[0][1095]=1094
-.[0][1096]=1095
-.[0][1097]=1096
-.[0][1098]=1097
-.[0][1099]=1098
-.[0][1100]=1099
-.[0][1101]=1100
-.[0][1102]=1101
-.[0][1103]=1102
-.[0][1104]=1103
-.[0][1105]=1104
-.[0][1106]=1105
-.[0][1107]=1106
-.[0][1108]=1107
-.[0][1109]=1108
-.[0][1110]=1109
-.[0][1111]=1110
-.[0][1112]=1111
-.[0][1113]=1112
-.[0][1114]=1113
-.[0][1115]=1114
-.[0][1116]=1115
-.[0][1117]=1116
-.[0][1118]=1117
-.[0][1119]=1118
-.[0][1120]=1119
-.[0][1121]=1120
-.[0][1122]=1121
-.[0][1123]=1122
-.[0][1124]=1123
-.[0][1125]=1124
-.[0][1126]=1125
-.[0][1127]=1126
-.[0][1128]=1127
-.[0][1129]=1128
-.[0][1130]=1129
-.[0][1131]=1130
-.[0][1132]=1131
-.[0][1133]=1132
-.[0][1134]=1133
-.[0][1135]=1134
-.[0][1136]=1135
-.[0][1137]=1136
-.[0][1138]=1137
-.[0][1139]=1138
-.[0][1140]=1139
-.[0][1141]=1140
-.[0][1142]=1141
-.[0][1143]=1142
-.[0][1144]=1143
-.[0][1145]=1144
-.[0][1146]=1145
-.[0][1147]=1146
-.[0][1148]=1147
-.[0][1149]=1148
-.[0][1150]=1149
-.[0][1151]=1150
-.[0][1152]=1151
-.[0][1153]=1152
-.[0][1154]=1153
-.[0][1155]=1154
-.[0][1156]=1155
-.[0][1157]=1156
-.[0][1158]=1157
-.[0][1159]=1158
-.[0][1160]=1159
-.[0][1161]=1160
-.[0][1162]=1161
-.[0][1163]=1162
-.[0][1164]=1163
-.[0][1165]=1164
-.[0][1166]=1165
-.[0][1167]=1166
-.[0][1168]=1167
-.[0][1169]=1168
-.[0][1170]=1169
-.[0][1171]=1170
-.[0][1172]=1171
-.[0][1173]=1172
-.[0][1174]=1173
-.[0][1175]=1174
-.[0][1176]=1175
-.[0][1177]=1176
-.[0][1178]=1177
-.[0][1179]=1178
-.[0][1180]=1179
-.[0][1181]=1180
-.[0][1182]=1181
-.[0][1183]=1182
-.[0][1184]=1183
-.[0][1185]=1184
-.[0][1186]=1185
-.[0][1187]=1186
-.[0][1188]=1187
-.[0][1189]=1188
-.[0][1190]=1189
-.[0][1191]=1190
-.[0][1192]=1191
-.[0][1193]=1192
-.[0][1194]=1193
-.[0][1195]=1194
-.[0][1196]=1195
-.[0][1197]=1196
-.[0][1198]=1197
-.[0][1199]=1198
-.[0][1200]=1199
-.[0][1201]=1200
-.[0][1202]=1201
-.[0][1203]=1202
-.[0][1204]=1203
-.[0][1205]=1204
-.[0][1206]=1205
-.[0][1207]=1206
-.[0][1208]=1207
-.[0][1209]=1208
-.[0][1210]=1209
-.[0][1211]=1210
-.[0][1212]=1211
-.[0][1213]=1212
-.[0][1214]=1213
-.[0][1215]=1214
-.[0][1216]=1215
-.[0][1217]=1216
-.[0][1218]=1217
-.[0][1219]=1218
-.[0][1220]=1219
-.[0][1221]=1220
-.[0][1222]=1221
-.[0][1223]=1222
-.[0][1224]=1223
-.[0][1225]=1224
-.[0][1226]=1225
-.[0][1227]=1226
-.[0][1228]=1227
-.[0][1229]=1228
-.[0][1230]=1229
-.[0][1231]=1230
-.[0][1232]=1231
-.[0][1233]=1232
-.[0][1234]=1233
-.[0][1235]=1234
-.[0][1236]=1235
-.[0][1237]=1236
-.[0][1238]=1237
-.[0][1239]=1238
-.[0][1240]=1239
-.[0][1241]=1240
-.[0][1242]=1241
-.[0][1243]=1242
-.[0][1244]=1243
-.[0][1245]=1244
-.[0][1246]=1245
-.[0][1247]=1246
-.[0][1248]=1247
-.[0][1249]=1248
-.[0][1250]=1249
-.[0][1251]=1250
-.[0][1252]=1251
-.[0][1253]=1252
-.[0][1254]=1253
-.[0][1255]=1254
-.[0][1256]=1255
-.[0][1257]=1256
-.[0][1258]=1257
-.[0][1259]=1258
-.[0][1260]=1259
-.[0][1261]=1260
-.[0][1262]=1261
-.[0][1263]=1262
-.[0][1264]=1263
-.[0][1265]=1264
-.[0][1266]=1265
-.[0][1267]=1266
-.[0][1268]=1267
-.[0][1269]=1268
-.[0][1270]=1269
-.[0][1271]=1270
-.[0][1272]=1271
-.[0][1273]=1272
-.[0][1274]=1273
-.[0][1275]=1274
-.[0][1276]=1275
-.[0][1277]=1276
-.[0][1278]=1277
-.[0][1279]=1278
-.[0][1280]=1279
-.[0][1281]=1280
-.[0][1282]=1281
-.[0][1283]=1282
-.[0][1284]=1283
-.[0][1285]=1284
-.[0][1286]=1285
-.[0][1287]=1286
-.[0][1288]=1287
-.[0][1289]=1288
-.[0][1290]=1289
-.[0][1291]=1290
-.[0][1292]=1291
-.[0][1293]=1292
-.[0][1294]=1293
-.[0][1295]=1294
-.[0][1296]=1295
-.[0][1297]=1296
-.[0][1298]=1297
-.[0][1299]=1298
-.[0][1300]=1299
-.[0][1301]=1300
-.[0][1302]=1301
-.[0][1303]=1302
-.[0][1304]=1303
-.[0][1305]=1304
-.[0][1306]=1305
-.[0][1307]=1306
-.[0][1308]=1307
-.[0][1309]=1308
-.[0][1310]=1309
-.[0][1311]=1310
-.[0][1312]=1311
-.[0][1313]=1312
-.[0][1314]=1313
-.[0][1315]=1314
-.[0][1316]=1315
-.[0][1317]=1316
-.[0][1318]=1317
-.[0][1319]=1318
-.[0][1320]=1319
-.[0][1321]=1320
-.[0][1322]=1321
-.[0][1323]=1322
-.[0][1324]=1323
-.[0][1325]=1324
-.[0][1326]=1325
-.[0][1327]=1326
-.[0][1328]=1327
-.[0][1329]=1328
-.[0][1330]=1329
-.[0][1331]=1330
-.[0][1332]=1331
-.[0][1333]=1332
-.[0][1334]=1333
-.[0][1335]=1334
-.[0][1336]=1335
-.[0][1337]=1336
-.[0][1338]=1337
-.[0][1339]=1338
-.[0][1340]=1339
-.[0][1341]=1340
-.[0][1342]=1341
-.[0][1343]=1342
-.[0][1344]=1343
-.[0][1345]=1344
-.[0][1346]=1345
-.[0][1347]=1346
-.[0][1348]=1347
-.[0][1349]=1348
-.[0][1350]=1349
-.[0][1351]=1350
-.[0][1352]=1351
-.[0][1353]=1352
-.[0][1354]=1353
-.[0][1355]=1354
-.[0][1356]=1355
-.[0][1357]=1356
-.[0][1358]=1357
-.[0][1359]=1358
-.[0][1360]=1359
-.[0][1361]=1360
-.[0][1362]=1361
-.[0][1363]=1362
-.[0][1364]=1363
-.[0][1365]=1364
-.[0][1366]=1365
-.[0][1367]=1366
-.[0][1368]=1367
-.[0][1369]=1368
-.[0][1370]=1369
-.[0][1371]=1370
-.[0][1372]=1371
-.[0][1373]=1372
-.[0][1374]=1373
-.[0][1375]=1374
-.[0][1376]=1375
-.[0][1377]=1376
-.[0][1378]=1377
-.[0][1379]=1378
-.[0][1380]=1379
-.[0][1381]=1380
-.[0][1382]=1381
-.[0][1383]=1382
-.[0][1384]=1383
-.[0][1385]=1384
-.[0][1386]=1385
-.[0][1387]=1386
-.[0][1388]=1387
-.[0][1389]=1388
-.[0][1390]=1389
-.[0][1391]=1390
-.[0][1392]=1391
-.[0][1393]=1392
-.[0][1394]=1393
-.[0][1395]=1394
-.[0][1396]=1395
-.[0][1397]=1396
-.[0][1398]=1397
-.[0][1399]=1398
-.[0][1400]=1399
-.[0][1401]=1400
-.[0][1402]=1401
-.[0][1403]=1402
-.[0][1404]=1403
-.[0][1405]=1404
-.[0][1406]=1405
-.[0][1407]=1406
-.[0][1408]=1407
-.[0][1409]=1408
-.[0][1410]=1409
-.[0][1411]=1410
-.[0][1412]=1411
-.[0][1413]=1412
-.[0][1414]=1413
-.[0][1415]=1414
-.[0][1416]=1415
-.[0][1417]=1416
-.[0][1418]=1417
-.[0][1419]=1418
-.[0][1420]=1419
-.[0][1421]=1420
-.[0][1422]=1421
-.[0][1423]=1422
-.[0][1424]=1423
-.[0][1425]=1424
-.[0][1426]=1425
-.[0][1427]=1426
-.[0][1428]=1427
-.[0][1429]=1428
-.[0][1430]=1429
-.[0][1431]=1430
-.[0][1432]=1431
-.[0][1433]=1432
-.[0][1434]=1433
-.[0][1435]=1434
-.[0][1436]=1435
-.[0][1437]=1436
-.[0][1438]=1437
-.[0][1439]=1438
-.[0][1440]=1439
-.[0][1441]=1440
-.[0][1442]=1441
-.[0][1443]=1442
-.[0][1444]=1443
-.[0][1445]=1444
-.[0][1446]=1445
-.[0][1447]=1446
-.[0][1448]=1447
-.[0][1449]=1448
-.[0][1450]=1449
-.[0][1451]=1450
-.[0][1452]=1451
-.[0][1453]=1452
-.[0][1454]=1453
-.[0][1455]=1454
-.[0][1456]=1455
-.[0][1457]=1456
-.[0][1458]=1457
-.[0][1459]=1458
-.[0][1460]=1459
-.[0][1461]=1460
-.[0][1462]=1461
-.[0][1463]=1462
-.[0][1464]=1463
-.[0][1465]=1464
-.[0][1466]=1465
-.[0][1467]=1466
-.[0][1468]=1467
-.[0][1469]=1468
-.[0][1470]=1469
-.[0][1471]=1470
-.[0][1472]=1471
-.[0][1473]=1472
-.[0][1474]=1473
-.[0][1475]=1474
-.[0][1476]=1475
-.[0][1477]=1476
-.[0][1478]=1477
-.[0][1479]=1478
-.[0][1480]=1479
-.[0][1481]=1480
-.[0][1482]=1481
-.[0][1483]=1482
-.[0][1484]=1483
-.[0][1485]=1484
-.[0][1486]=1485
-.[0][1487]=1486
-.[0][1488]=1487
-.[0][1489]=1488
-.[0][1490]=1489
-.[0][1491]=1490
-.[0][1492]=1491
-.[0][1493]=1492
-.[0][1494]=1493
-.[0][1495]=1494
-.[0][1496]=1495
-.[0][1497]=1496
-.[0][1498]=1497
-.[0][1499]=1498
-.[0][1500]=1499
-.[0][1501]=1500
-.[0][1502]=1501
-.[0][1503]=1502
-.[0][1504]=1503
-.[0][1505]=1504
-.[0][1506]=1505
-.[0][1507]=1506
-.[0][1508]=1507
-.[0][1509]=1508
-.[0][1510]=1509
-.[0][1511]=1510
-.[0][1512]=1511
-.[0][1513]=1512
-.[0][1514]=1513
-.[0][1515]=1514
-.[0][1516]=1515
-.[0][1517]=1516
-.[0][1518]=1517
-.[0][1519]=1518
-.[0][1520]=1519
-.[0][1521]=1520
-.[0][1522]=1521
-.[0][1523]=1522
-.[0][1524]=1523
-.[0][1525]=1524
-.[0][1526]=1525
-.[0][1527]=1526
-.[0][1528]=1527
-.[0][1529]=1528
-.[0][1530]=1529
-.[0][1531]=1530
-.[0][1532]=1531
-.[0][1533]=1532
-.[0][1534]=1533
-.[0][1535]=1534
-.[0][1536]=1535
-.[0][1537]=1536
-.[0][1538]=1537
-.[0][1539]=1538
-.[0][1540]=1539
-.[0][1541]=1540
-.[0][1542]=1541
-.[0][1543]=1542
-.[0][1544]=1543
-.[0][1545]=1544
-.[0][1546]=1545
-.[0][1547]=1546
-.[0][1548]=1547
-.[0][1549]=1548
-.[0][1550]=1549
-.[0][1551]=1550
-.[0][1552]=1551
-.[0][1553]=1552
-.[0][1554]=1553
-.[0][1555]=1554
-.[0][1556]=1555
-.[0][1557]=1556
-.[0][1558]=1557
-.[0][1559]=1558
-.[0][1560]=1559
-.[0][1561]=1560
-.[0][1562]=1561
-.[0][1563]=1562
-.[0][1564]=1563
-.[0][1565]=1564
-.[0][1566]=1565
-.[0][1567]=1566
-.[0][1568]=1567
-.[0][1569]=1568
-.[0][1570]=1569
-.[0][1571]=1570
-.[0][1572]=1571
-.[0][1573]=1572
-.[0][1574]=1573
-.[0][1575]=1574
-.[0][1576]=1575
-.[0][1577]=1576
-.[0][1578]=1577
-.[0][1579]=1578
-.[0][1580]=1579
-.[0][1581]=1580
-.[0][1582]=1581
-.[0][1583]=1582
-.[0][1584]=1583
-.[0][1585]=1584
-.[0][1586]=1585
-.[0][1587]=1586
-.[0][1588]=1587
-.[0][1589]=1588
-.[0][1590]=1589
-.[0][1591]=1590
-.[0][1592]=1591
-.[0][1593]=1592
-.[0][1594]=1593
-.[0][1595]=1594
-.[0][1596]=1595
-.[0][1597]=1596
-.[0][1598]=1597
-.[0][1599]=1598
-.[0][1600]=1599
-.[0][1601]=1600
-.[0][1602]=1601
-.[0][1603]=1602
-.[0][1604]=1603
-.[0][1605]=1604
-.[0][1606]=1605
-.[0][1607]=1606
-.[0][1608]=1607
-.[0][1609]=1608
-.[0][1610]=1609
-.[0][1611]=1610
-.[0][1612]=1611
-.[0][1613]=1612
-.[0][1614]=1613
-.[0][1615]=1614
-.[0][1616]=1615
-.[0][1617]=1616
-.[0][1618]=1617
-.[0][1619]=1618
-.[0][1620]=1619
-.[0][1621]=1620
-.[0][1622]=1621
-.[0][1623]=1622
-.[0][1624]=1623
-.[0][1625]=1624
-.[0][1626]=1625
-.[0][1627]=1626
-.[0][1628]=1627
-.[0][1629]=1628
-.[0][1630]=1629
-.[0][1631]=1630
-.[0][1632]=1631
-.[0][1633]=1632
-.[0][1634]=1633
-.[0][1635]=1634
-.[0][1636]=1635
-.[0][1637]=1636
-.[0][1638]=1637
-.[0][1639]=1638
-.[0][1640]=1639
-.[0][1641]=1640
-.[0][1642]=1641
-.[0][1643]=1642
-.[0][1644]=1643
-.[0][1645]=1644
-.[0][1646]=1645
-.[0][1647]=1646
-.[0][1648]=1647
-.[0][1649]=1648
-.[0][1650]=1649
-.[0][1651]=1650
-.[0][1652]=1651
-.[0][1653]=1652
-.[0][1654]=1653
-.[0][1655]=1654
-.[0][1656]=1655
-.[0][1657]=1656
-.[0][1658]=1657
-.[0][1659]=1658
-.[0][1660]=1659
-.[0][1661]=1660
-.[0][1662]=1661
-.[0][1663]=1662
-.[0][1664]=1663
-.[0][1665]=1664
-.[0][1666]=1665
-.[0][1667]=1666
-.[0][1668]=1667
-.[0][1669]=1668
-.[0][1670]=1669
-.[0][1671]=1670
-.[0][1672]=1671
-.[0][1673]=1672
-.[0][1674]=1673
-.[0][1675]=1674
-.[0][1676]=1675
-.[0][1677]=1676
-.[0][1678]=1677
-.[0][1679]=1678
-.[0][1680]=1679
-.[0][1681]=1680
-.[0][1682]=1681
-.[0][1683]=1682
-.[0][1684]=1683
-.[0][1685]=1684
-.[0][1686]=1685
-.[0][1687]=1686
-.[0][1688]=1687
-.[0][1689]=1688
-.[0][1690]=1689
-.[0][1691]=1690
-.[0][1692]=1691
-.[0][1693]=1692
-.[0][1694]=1693
-.[0][1695]=1694
-.[0][1696]=1695
-.[0][1697]=1696
-.[0][1698]=1697
-.[0][1699]=1698
-.[0][1700]=1699
-.[0][1701]=1700
-.[0][1702]=1701
-.[0][1703]=1702
-.[0][1704]=1703
-.[0][1705]=1704
-.[0][1706]=1705
-.[0][1707]=1706
-.[0][1708]=1707
-.[0][1709]=1708
-.[0][1710]=1709
-.[0][1711]=1710
-.[0][1712]=1711
-.[0][1713]=1712
-.[0][1714]=1713
-.[0][1715]=1714
-.[0][1716]=1715
-.[0][1717]=1716
-.[0][1718]=1717
-.[0][1719]=1718
-.[0][1720]=1719
-.[0][1721]=1720
-.[0][1722]=1721
-.[0][1723]=1722
-.[0][1724]=1723
-.[0][1725]=1724
-.[0][1726]=1725
-.[0][1727]=1726
-.[0][1728]=1727
-.[0][1729]=1728
-.[0][1730]=1729
-.[0][1731]=1730
-.[0][1732]=1731
-.[0][1733]=1732
-.[0][1734]=1733
-.[0][1735]=1734
-.[0][1736]=1735
-.[0][1737]=1736
-.[0][1738]=1737
-.[0][1739]=1738
-.[0][1740]=1739
-.[0][1741]=1740
-.[0][1742]=1741
-.[0][1743]=1742
-.[0][1744]=1743
-.[0][1745]=1744
-.[0][1746]=1745
-.[0][1747]=1746
-.[0][1748]=1747
-.[0][1749]=1748
-.[0][1750]=1749
-.[0][1751]=1750
-.[0][1752]=1751
-.[0][1753]=1752
-.[0][1754]=1753
-.[0][1755]=1754
-.[0][1756]=1755
-.[0][1757]=1756
-.[0][1758]=1757
-.[0][1759]=1758
-.[0][1760]=1759
-.[0][1761]=1760
-.[0][1762]=1761
-.[0][1763]=1762
-.[0][1764]=1763
-.[0][1765]=1764
-.[0][1766]=1765
-.[0][1767]=1766
-.[0][1768]=1767
-.[0][1769]=1768
-.[0][1770]=1769
-.[0][1771]=1770
-.[0][1772]=1771
-.[0][1773]=1772
-.[0][1774]=1773
-.[0][1775]=1774
-.[0][1776]=1775
-.[0][1777]=1776
-.[0][1778]=1777
-.[0][1779]=1778
-.[0][1780]=1779
-.[0][1781]=1780
-.[0][1782]=1781
-.[0][1783]=1782
-.[0][1784]=1783
-.[0][1785]=1784
-.[0][1786]=1785
-.[0][1787]=1786
-.[0][1788]=1787
-.[0][1789]=1788
-.[0][1790]=1789
-.[0][1791]=1790
-.[0][1792]=1791
-.[0][1793]=1792
-.[0][1794]=1793
-.[0][1795]=1794
-.[0][1796]=1795
-.[0][1797]=1796
-.[0][1798]=1797
-.[0][1799]=1798
-.[0][1800]=1799
-.[0][1801]=1800
-.[0][1802]=1801
-.[0][1803]=1802
-.[0][1804]=1803
-.[0][1805]=1804
-.[0][1806]=1805
-.[0][1807]=1806
-.[0][1808]=1807
-.[0][1809]=1808
-.[0][1810]=1809
-.[0][1811]=1810
-.[0][1812]=1811
-.[0][1813]=1812
-.[0][1814]=1813
-.[0][1815]=1814
-.[0][1816]=1815
-.[0][1817]=1816
-.[0][1818]=1817
-.[0][1819]=1818
-.[0][1820]=1819
-.[0][1821]=1820
-.[0][1822]=1821
-.[0][1823]=1822
-.[0][1824]=1823
-.[0][1825]=1824
-.[0][1826]=1825
-.[0][1827]=1826
-.[0][1828]=1827
-.[0][1829]=1828
-.[0][1830]=1829
-.[0][1831]=1830
-.[0][1832]=1831
-.[0][1833]=1832
-.[0][1834]=1833
-.[0][1835]=1834
-.[0][1836]=1835
-.[0][1837]=1836
-.[0][1838]=1837
-.[0][1839]=1838
-.[0][1840]=1839
-.[0][1841]=1840
-.[0][1842]=1841
-.[0][1843]=1842
-.[0][1844]=1843
-.[0][1845]=1844
-.[0][1846]=1845
-.[0][1847]=1846
-.[0][1848]=1847
-.[0][1849]=1848
-.[0][1850]=1849
-.[0][1851]=1850
-.[0][1852]=1851
-.[0][1853]=1852
-.[0][1854]=1853
-.[0][1855]=1854
-.[0][1856]=1855
-.[0][1857]=1856
-.[0][1858]=1857
-.[0][1859]=1858
-.[0][1860]=1859
-.[0][1861]=1860
-.[0][1862]=1861
-.[0][1863]=1862
-.[0][1864]=1863
-.[0][1865]=1864
-.[0][1866]=1865
-.[0][1867]=1866
-.[0][1868]=1867
-.[0][1869]=1868
-.[0][1870]=1869
-.[0][1871]=1870
-.[0][1872]=1871
-.[0][1873]=1872
-.[0][1874]=1873
-.[0][1875]=1874
-.[0][1876]=1875
-.[0][1877]=1876
-.[0][1878]=1877
-.[0][1879]=1878
-.[0][1880]=1879
-.[0][1881]=1880
-.[0][1882]=1881
-.[0][1883]=1882
-.[0][1884]=1883
-.[0][1885]=1884
-.[0][1886]=1885
-.[0][1887]=1886
-.[0][1888]=1887
-.[0][1889]=1888
-.[0][1890]=1889
-.[0][1891]=1890
-.[0][1892]=1891
-.[0][1893]=1892
-.[0][1894]=1893
-.[0][1895]=1894
-.[0][1896]=1895
-.[0][1897]=1896
-.[0][1898]=1897
-.[0][1899]=1898
-.[0][1900]=1899
-.[0][1901]=1900
-.[0][1902]=1901
-.[0][1903]=1902
-.[0][1904]=1903
-.[0][1905]=1904
-.[0][1906]=1905
-.[0][1907]=1906
-.[0][1908]=1907
-.[0][1909]=1908
-.[0][1910]=1909
-.[0][1911]=1910
-.[0][1912]=1911
-.[0][1913]=1912
-.[0][1914]=1913
-.[0][1915]=1914
-.[0][1916]=1915
-.[0][1917]=1916
-.[0][1918]=1917
-.[0][1919]=1918
-.[0][1920]=1919
-.[0][1921]=1920
-.[0][1922]=1921
-.[0][1923]=1922
-.[0][1924]=1923
-.[0][1925]=1924
-.[0][1926]=1925
-.[0][1927]=1926
-.[0][1928]=1927
-.[0][1929]=1928
-.[0][1930]=1929
-.[0][1931]=1930
-.[0][1932]=1931
-.[0][1933]=1932
-.[0][1934]=1933
-.[0][1935]=1934
-.[0][1936]=1935
-.[0][1937]=1936
-.[0][1938]=1937
-.[0][1939]=1938
-.[0][1940]=1939
-.[0][1941]=1940
-.[0][1942]=1941
-.[0][1943]=1942
-.[0][1944]=1943
-.[0][1945]=1944
-.[0][1946]=1945
-.[0][1947]=1946
-.[0][1948]=1947
-.[0][1949]=1948
-.[0][1950]=1949
-.[0][1951]=1950
-.[0][1952]=1951
-.[0][1953]=1952
-.[0][1954]=1953
-.[0][1955]=1954
-.[0][1956]=1955
-.[0][1957]=1956
-.[0][1958]=1957
-.[0][1959]=1958
-.[0][1960]=1959
-.[0][1961]=1960
-.[0][1962]=1961
-.[0][1963]=1962
-.[0][1964]=1963
-.[0][1965]=1964
-.[0][1966]=1965
-.[0][1967]=1966
-.[0][1968]=1967
-.[0][1969]=1968
-.[0][1970]=1969
-.[0][1971]=1970
-.[0][1972]=1971
-.[0][1973]=1972
-.[0][1974]=1973
-.[0][1975]=1974
-.[0][1976]=1975
-.[0][1977]=1976
-.[0][1978]=1977
-.[0][1979]=1978
-.[0][1980]=1979
-.[0][1981]=1980
-.[0][1982]=1981
-.[0][1983]=1982
-.[0][1984]=1983
-.[0][1985]=1984
-.[0][1986]=1985
-.[0][1987]=1986
-.[0][1988]=1987
-.[0][1989]=1988
-.[0][1990]=1989
-.[0][1991]=1990
-.[0][1992]=1991
-.[0][1993]=1992
-.[0][1994]=1993
-.[0][1995]=1994
-.[0][1996]=1995
-.[0][1997]=1996
-.[0][1998]=1997
-.[0][1999]=1998
-.[0][2000]=1999
-.[0][2001]=2000
-.[0][2002]=2001
-.[0][2003]=2002
-.[0][2004]=2003
-.[0][2005]=2004
-.[0][2006]=2005
-.[0][2007]=2006
-.[0][2008]=2007
-.[0][2009]=2008
-.[0][2010]=2009
-.[0][2011]=2010
-.[0][2012]=2011
-.[0][2013]=2012
-.[0][2014]=2013
-.[0][2015]=2014
-.[0][2016]=2015
-.[0][2017]=2016
-.[0][2018]=2017
-.[0][2019]=2018
-.[0][2020]=2019
-.[0][2021]=2020
-.[0][2022]=2021
-.[0][2023]=2022
-.[0][2024]=2023
-.[0][2025]=2024
-.[0][2026]=2025
-.[0][2027]=2026
-.[0][2028]=2027
-.[0][2029]=2028
-.[0][2030]=2029
-.[0][2031]=2030
-.[0][2032]=2031
-.[0][2033]=2032
-.[0][2034]=2033
-.[0][2035]=2034
-.[0][2036]=2035
-.[0][2037]=2036
-.[0][2038]=2037
-.[0][2039]=2038
-.[0][2040]=2039
-.[0][2041]=2040
-.[0][2042]=2041
-.[0][2043]=2042
-.[0][2044]=2043
-.[0][2045]=2044
-.[0][2046]=2045
-.[0][2047]=2046
-.[0][2048]=2047
-.[0][2049]=2048
-.[0][2050]=2049
-.[0][2051]=2050
-.[0][2052]=2051
-.[0][2053]=2052
-.[0][2054]=2053
-.[0][2055]=2054
-.[0][2056]=2055
-.[0][2057]=2056
-.[0][2058]=2057
-.[0][2059]=2058
-.[0][2060]=2059
-.[0][2061]=2060
-.[0][2062]=2061
-.[0][2063]=2062
-.[0][2064]=2063
-.[0][2065]=2064
-.[0][2066]=2065
-.[0][2067]=2066
-.[0][2068]=2067
-.[0][2069]=2068
-.[0][2070]=2069
-.[0][2071]=2070
-.[0][2072]=2071
-.[0][2073]=2072
-.[0][2074]=2073
-.[0][2075]=2074
-.[0][2076]=2075
-.[0][2077]=2076
-.[0][2078]=2077
-.[0][2079]=2078
-.[0][2080]=2079
-.[0][2081]=2080
-.[0][2082]=2081
-.[0][2083]=2082
-.[0][2084]=2083
-.[0][2085]=2084
-.[0][2086]=2085
-.[0][2087]=2086
-.[0][2088]=2087
-.[0][2089]=2088
-.[0][2090]=2089
-.[0][2091]=2090
-.[0][2092]=2091
-.[0][2093]=2092
-.[0][2094]=2093
-.[0][2095]=2094
-.[0][2096]=2095
-.[0][2097]=2096
-.[0][2098]=2097
-.[0][2099]=2098
-.[0][2100]=2099
-.[0][2101]=2100
-.[0][2102]=2101
-.[0][2103]=2102
-.[0][2104]=2103
-.[0][2105]=2104
-.[0][2106]=2105
-.[0][2107]=2106
-.[0][2108]=2107
-.[0][2109]=2108
-.[0][2110]=2109
-.[0][2111]=2110
-.[0][2112]=2111
-.[0][2113]=2112
-.[0][2114]=2113
-.[0][2115]=2114
-.[0][2116]=2115
-.[0][2117]=2116
-.[0][2118]=2117
-.[0][2119]=2118
diff --git a/3rdParty/jsoncpp/test/data/test_array_07.json b/3rdParty/jsoncpp/test/data/test_array_07.json
deleted file mode 100644
index e4ab4cd4330cfff0f215e67f3886fd1d286e432c..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_array_07.json
+++ /dev/null
@@ -1,2 +0,0 @@
-[["A",0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118]
-]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_basic_01.expected b/3rdParty/jsoncpp/test/data/test_basic_01.expected
deleted file mode 100644
index d761fce1cc050cd6023ecfce7d7cbeba19546914..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_01.expected
+++ /dev/null
@@ -1 +0,0 @@
-.=123456789
diff --git a/3rdParty/jsoncpp/test/data/test_basic_01.json b/3rdParty/jsoncpp/test/data/test_basic_01.json
deleted file mode 100644
index 11f11f9be3babdba706660bfc54cb4e8990c3a16..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_01.json
+++ /dev/null
@@ -1 +0,0 @@
-0123456789
diff --git a/3rdParty/jsoncpp/test/data/test_basic_02.expected b/3rdParty/jsoncpp/test/data/test_basic_02.expected
deleted file mode 100644
index 650e37cbaaf37b52314c3e86d16bdfcb21ba08a1..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_02.expected
+++ /dev/null
@@ -1 +0,0 @@
-.=-123456789
diff --git a/3rdParty/jsoncpp/test/data/test_basic_02.json b/3rdParty/jsoncpp/test/data/test_basic_02.json
deleted file mode 100644
index bf11bceac74fa232444557fc425b8080f1cfb9f9..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_02.json
+++ /dev/null
@@ -1 +0,0 @@
--0123456789
diff --git a/3rdParty/jsoncpp/test/data/test_basic_03.expected b/3rdParty/jsoncpp/test/data/test_basic_03.expected
deleted file mode 100644
index 1da2d395b8e9b2946359b5451691af93201e9748..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_03.expected
+++ /dev/null
@@ -1,3 +0,0 @@
-.=1.2345678
-
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_03.json b/3rdParty/jsoncpp/test/data/test_basic_03.json
deleted file mode 100644
index a92b6bd28b5fc84449b5e46abfac72557185a67e..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_03.json
+++ /dev/null
@@ -1,3 +0,0 @@
-1.2345678
-
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_04.expected b/3rdParty/jsoncpp/test/data/test_basic_04.expected
deleted file mode 100644
index 013f424f93226106ca5fe046f2f7001357aaf59a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_04.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.="abcdef"
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_04.json b/3rdParty/jsoncpp/test/data/test_basic_04.json
deleted file mode 100644
index 17eeb99e0b0ae9e2d86a7b1221dc768b330d0427..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_04.json
+++ /dev/null
@@ -1,2 +0,0 @@
-"abcdef"
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_05.expected b/3rdParty/jsoncpp/test/data/test_basic_05.expected
deleted file mode 100644
index c8db822e584b35870438a627123110cf6a5d6768..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_05.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.=null
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_05.json b/3rdParty/jsoncpp/test/data/test_basic_05.json
deleted file mode 100644
index d0aaea2126b99282f48dd760e2d4028119bfcff1..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_05.json
+++ /dev/null
@@ -1,2 +0,0 @@
-null
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_06.expected b/3rdParty/jsoncpp/test/data/test_basic_06.expected
deleted file mode 100644
index 49be55a9654e876877293117406573451faec8b3..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_06.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.=true
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_06.json b/3rdParty/jsoncpp/test/data/test_basic_06.json
deleted file mode 100644
index 7eead1ee75f02444bb09c8556df73d57e3a74fd2..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_06.json
+++ /dev/null
@@ -1,2 +0,0 @@
-true
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_07.expected b/3rdParty/jsoncpp/test/data/test_basic_07.expected
deleted file mode 100644
index fe55a6a85460c8a47746d0bf917916a92bef10a5..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_07.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.=false
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_07.json b/3rdParty/jsoncpp/test/data/test_basic_07.json
deleted file mode 100644
index a864bc487d4d63368def6fc93ffa6f1b63167f80..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_07.json
+++ /dev/null
@@ -1,2 +0,0 @@
-false
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_08.expected b/3rdParty/jsoncpp/test/data/test_basic_08.expected
deleted file mode 100644
index caf5352a113993dad79b9119acb288e78d41685f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_08.expected
+++ /dev/null
@@ -1,3 +0,0 @@
-// C++ style comment
-.=null
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_08.json b/3rdParty/jsoncpp/test/data/test_basic_08.json
deleted file mode 100644
index fd78837c0c869b80c8dc62a004176a8652b1d732..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_08.json
+++ /dev/null
@@ -1,3 +0,0 @@
-// C++ style comment
-null
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_09.expected b/3rdParty/jsoncpp/test/data/test_basic_09.expected
deleted file mode 100644
index 8b129da42e4cddb114535a1edfb4703fb0889c86..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_09.expected
+++ /dev/null
@@ -1,4 +0,0 @@
-/* C style comment
- */
-.=null
-
diff --git a/3rdParty/jsoncpp/test/data/test_basic_09.json b/3rdParty/jsoncpp/test/data/test_basic_09.json
deleted file mode 100644
index fc95f0f514edfc11d1afde2d26398de77e3713c5..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_basic_09.json
+++ /dev/null
@@ -1,4 +0,0 @@
-/* C style comment
- */
-null
-
diff --git a/3rdParty/jsoncpp/test/data/test_comment_00.expected b/3rdParty/jsoncpp/test/data/test_comment_00.expected
deleted file mode 100644
index 284a797d71472928a85ce5c7f89af741d9c945c0..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_comment_00.expected
+++ /dev/null
@@ -1,4 +0,0 @@
-// Comment for array
-.=[]
-// Comment within array
-.[0]="one-element"
diff --git a/3rdParty/jsoncpp/test/data/test_comment_00.json b/3rdParty/jsoncpp/test/data/test_comment_00.json
deleted file mode 100644
index 4df577a8ae2207611e1db9dac4eee93060f1ef36..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_comment_00.json
+++ /dev/null
@@ -1,5 +0,0 @@
-// Comment for array
-[
-   // Comment within array
-   "one-element"
-]
diff --git a/3rdParty/jsoncpp/test/data/test_comment_01.expected b/3rdParty/jsoncpp/test/data/test_comment_01.expected
deleted file mode 100644
index 1ed01ba100c4bdbba3753d8092d680bb5695968d..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_comment_01.expected
+++ /dev/null
@@ -1,10 +0,0 @@
-.={}
-// Comment for array
-.test=[]
-// Comment within array
-.test[0]={}
-.test[0].a="aaa"
-.test[1]={}
-.test[1].b="bbb"
-.test[2]={}
-.test[2].c="ccc"
diff --git a/3rdParty/jsoncpp/test/data/test_comment_01.json b/3rdParty/jsoncpp/test/data/test_comment_01.json
deleted file mode 100644
index 6defe400404a17b50a0dfa1d39eae8725e9923e6..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_comment_01.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    "test":
-    // Comment for array
-    [
-       // Comment within array
-       { "a" : "aaa" }, // Comment for a
-       { "b" : "bbb" }, // Comment for b
-       { "c" : "ccc" } // Comment for c
-    ]
-}
diff --git a/3rdParty/jsoncpp/test/data/test_comment_02.expected b/3rdParty/jsoncpp/test/data/test_comment_02.expected
deleted file mode 100644
index 8986dbac05ebbf4ce00b3d3b43f1adb3b6ed056a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_comment_02.expected
+++ /dev/null
@@ -1,23 +0,0 @@
-.={}
-/* C-style comment
-
-    C-style-2 comment */
-.c-test={}
-.c-test.a=1
-/* Internal comment c-style */
-.c-test.b=2
-// C++-style comment
-.cpp-test={}
-// Multiline comment cpp-style
-// Second line
-.cpp-test.c=3
-// Comment before double
-.cpp-test.d=4.1
-// Comment before string
-.cpp-test.e="e-string"
-// Comment before true
-.cpp-test.f=true
-// Comment before false
-.cpp-test.g=false
-// Comment before null
-.cpp-test.h=null
diff --git a/3rdParty/jsoncpp/test/data/test_comment_02.json b/3rdParty/jsoncpp/test/data/test_comment_02.json
deleted file mode 100644
index f5042e0dd68eac3fabe48d1ab0949306ba3dcd88..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_comment_02.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-   /* C-style comment
-
-    C-style-2 comment */
-   "c-test" : {
-      "a" : 1,
-      /* Internal comment c-style */
-      "b" : 2
-   },
-   // C++-style comment
-   "cpp-test" : {
-      // Multiline comment cpp-style
-      // Second line
-      "c" : 3,
-      // Comment before double
-      "d" : 4.1,
-      // Comment before string
-      "e" : "e-string",
-      // Comment before true
-      "f" : true,
-      // Comment before false
-      "g" : false,
-      // Comment before null
-      "h" : null
-   }
-}
diff --git a/3rdParty/jsoncpp/test/data/test_complex_01.expected b/3rdParty/jsoncpp/test/data/test_complex_01.expected
deleted file mode 100644
index 7573c8812d9fe609e338688b1ea6499651e09416..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_complex_01.expected
+++ /dev/null
@@ -1,20 +0,0 @@
-.={}
-.attribute=[]
-.attribute[0]="random"
-.attribute[1]="short"
-.attribute[2]="bold"
-.attribute[3]=12
-.attribute[4]={}
-.attribute[4].height=7
-.attribute[4].width=64
-.count=1234
-.name={}
-.name.aka="T.E.S.T."
-.name.id=123987
-.test={}
-.test.1={}
-.test.1.2={}
-.test.1.2.3={}
-.test.1.2.3.coord=[]
-.test.1.2.3.coord[0]=1
-.test.1.2.3.coord[1]=2
diff --git a/3rdParty/jsoncpp/test/data/test_complex_01.json b/3rdParty/jsoncpp/test/data/test_complex_01.json
deleted file mode 100644
index cc0f30f5c3478ec75dd703c840f96d7ac4144e4b..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_complex_01.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{ 
-	"count" : 1234,
-	"name" : { "aka" : "T.E.S.T.", "id" : 123987 },
-	"attribute" : [ 
-		"random", 
-		"short", 
-		"bold", 
-		12, 
-		{ "height" : 7, "width" : 64 } 
-		],
-	"test": { "1" : 
-		{ "2" : 
-			{ "3" :  { "coord" : [ 1,2] } 
-			} 
-		}
-	}
-}
diff --git a/3rdParty/jsoncpp/test/data/test_integer_01.expected b/3rdParty/jsoncpp/test/data/test_integer_01.expected
deleted file mode 100644
index 463e149de871309e435522470ee6d15f37255a0b..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_01.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-// Max signed integer
-.=2147483647
diff --git a/3rdParty/jsoncpp/test/data/test_integer_01.json b/3rdParty/jsoncpp/test/data/test_integer_01.json
deleted file mode 100644
index 5ab12ffee410ab3d9509c742d5dd85df9626b49c..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_01.json
+++ /dev/null
@@ -1,2 +0,0 @@
-// Max signed integer
-2147483647
diff --git a/3rdParty/jsoncpp/test/data/test_integer_02.expected b/3rdParty/jsoncpp/test/data/test_integer_02.expected
deleted file mode 100644
index 0773e0851a49da7ab75bac9e7328c6048bb2ae45..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_02.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-// Min signed integer
-.=-2147483648
diff --git a/3rdParty/jsoncpp/test/data/test_integer_02.json b/3rdParty/jsoncpp/test/data/test_integer_02.json
deleted file mode 100644
index 056c8500657c90e1348a7ba005cbd378c8bf5b6e..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_02.json
+++ /dev/null
@@ -1,2 +0,0 @@
-// Min signed integer
--2147483648
diff --git a/3rdParty/jsoncpp/test/data/test_integer_03.expected b/3rdParty/jsoncpp/test/data/test_integer_03.expected
deleted file mode 100644
index c7efff799eb3369aaefce2c3c586d78e07bdd8a6..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_03.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-// Max unsigned integer
-.=4294967295
diff --git a/3rdParty/jsoncpp/test/data/test_integer_03.json b/3rdParty/jsoncpp/test/data/test_integer_03.json
deleted file mode 100644
index 12ef3fbb8948e01ec85f1da334ca111051018f3c..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_03.json
+++ /dev/null
@@ -1,2 +0,0 @@
-// Max unsigned integer
-4294967295
diff --git a/3rdParty/jsoncpp/test/data/test_integer_04.expected b/3rdParty/jsoncpp/test/data/test_integer_04.expected
deleted file mode 100644
index 39f8567040fc8c9d2c13a9fd38aed4f6fe1a0282..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_04.expected
+++ /dev/null
@@ -1,3 +0,0 @@
-// Min unsigned integer
-.=0
-
diff --git a/3rdParty/jsoncpp/test/data/test_integer_04.json b/3rdParty/jsoncpp/test/data/test_integer_04.json
deleted file mode 100644
index bf8149945336cc016cb44190ec63bb1d297fd934..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_04.json
+++ /dev/null
@@ -1,3 +0,0 @@
-// Min unsigned integer
-0
-
diff --git a/3rdParty/jsoncpp/test/data/test_integer_05.expected b/3rdParty/jsoncpp/test/data/test_integer_05.expected
deleted file mode 100644
index 0caea9d3fd36b85136742c922a3e9c57ef2d034a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_05.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.=1
-
diff --git a/3rdParty/jsoncpp/test/data/test_integer_05.json b/3rdParty/jsoncpp/test/data/test_integer_05.json
deleted file mode 100644
index d474e1b4d626dbf09a9776c778e9f8691bc8b406..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_05.json
+++ /dev/null
@@ -1,2 +0,0 @@
-1
-
diff --git a/3rdParty/jsoncpp/test/data/test_integer_06_64bits.expected b/3rdParty/jsoncpp/test/data/test_integer_06_64bits.expected
deleted file mode 100644
index 131b085ff5678d006d029d7c1bd51c4d6f49dbbd..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_06_64bits.expected
+++ /dev/null
@@ -1 +0,0 @@
-.=9223372036854775808
diff --git a/3rdParty/jsoncpp/test/data/test_integer_06_64bits.json b/3rdParty/jsoncpp/test/data/test_integer_06_64bits.json
deleted file mode 100644
index cfedfe5e809053a3e4c93ef6a0107109c611c7b4..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_06_64bits.json
+++ /dev/null
@@ -1,2 +0,0 @@
-9223372036854775808
-
diff --git a/3rdParty/jsoncpp/test/data/test_integer_07_64bits.expected b/3rdParty/jsoncpp/test/data/test_integer_07_64bits.expected
deleted file mode 100644
index c8524a32c7a86d7072562ce91f55d4a4b33a80a4..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_07_64bits.expected
+++ /dev/null
@@ -1 +0,0 @@
-.=-9223372036854775808
diff --git a/3rdParty/jsoncpp/test/data/test_integer_07_64bits.json b/3rdParty/jsoncpp/test/data/test_integer_07_64bits.json
deleted file mode 100644
index a964ad2ed25af75f574b7aedd845cf44af6d63b8..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_07_64bits.json
+++ /dev/null
@@ -1,2 +0,0 @@
--9223372036854775808
-
diff --git a/3rdParty/jsoncpp/test/data/test_integer_08_64bits.expected b/3rdParty/jsoncpp/test/data/test_integer_08_64bits.expected
deleted file mode 100644
index 321bba5a7383455f8327982f17fb7e76508aa9de..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_08_64bits.expected
+++ /dev/null
@@ -1 +0,0 @@
-.=18446744073709551615
diff --git a/3rdParty/jsoncpp/test/data/test_integer_08_64bits.json b/3rdParty/jsoncpp/test/data/test_integer_08_64bits.json
deleted file mode 100644
index 4c15a01b4a9194792b648f812289d5a607e62466..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_integer_08_64bits.json
+++ /dev/null
@@ -1,2 +0,0 @@
-18446744073709551615
-
diff --git a/3rdParty/jsoncpp/test/data/test_large_01.expected b/3rdParty/jsoncpp/test/data/test_large_01.expected
deleted file mode 100644
index ee2fafc010e20c25cdff147bdcfef90833ee233c..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_large_01.expected
+++ /dev/null
@@ -1,2122 +0,0 @@
-.=[]
-.[0]=[]
-.[0][0]="A"
-.[0][1]=0
-.[0][2]=1
-.[0][3]=2
-.[0][4]=3
-.[0][5]=4
-.[0][6]=5
-.[0][7]=6
-.[0][8]=7
-.[0][9]=8
-.[0][10]=9
-.[0][11]=10
-.[0][12]=11
-.[0][13]=12
-.[0][14]=13
-.[0][15]=14
-.[0][16]=15
-.[0][17]=16
-.[0][18]=17
-.[0][19]=18
-.[0][20]=19
-.[0][21]=20
-.[0][22]=21
-.[0][23]=22
-.[0][24]=23
-.[0][25]=24
-.[0][26]=25
-.[0][27]=26
-.[0][28]=27
-.[0][29]=28
-.[0][30]=29
-.[0][31]=30
-.[0][32]=31
-.[0][33]=32
-.[0][34]=33
-.[0][35]=34
-.[0][36]=35
-.[0][37]=36
-.[0][38]=37
-.[0][39]=38
-.[0][40]=39
-.[0][41]=40
-.[0][42]=41
-.[0][43]=42
-.[0][44]=43
-.[0][45]=44
-.[0][46]=45
-.[0][47]=46
-.[0][48]=47
-.[0][49]=48
-.[0][50]=49
-.[0][51]=50
-.[0][52]=51
-.[0][53]=52
-.[0][54]=53
-.[0][55]=54
-.[0][56]=55
-.[0][57]=56
-.[0][58]=57
-.[0][59]=58
-.[0][60]=59
-.[0][61]=60
-.[0][62]=61
-.[0][63]=62
-.[0][64]=63
-.[0][65]=64
-.[0][66]=65
-.[0][67]=66
-.[0][68]=67
-.[0][69]=68
-.[0][70]=69
-.[0][71]=70
-.[0][72]=71
-.[0][73]=72
-.[0][74]=73
-.[0][75]=74
-.[0][76]=75
-.[0][77]=76
-.[0][78]=77
-.[0][79]=78
-.[0][80]=79
-.[0][81]=80
-.[0][82]=81
-.[0][83]=82
-.[0][84]=83
-.[0][85]=84
-.[0][86]=85
-.[0][87]=86
-.[0][88]=87
-.[0][89]=88
-.[0][90]=89
-.[0][91]=90
-.[0][92]=91
-.[0][93]=92
-.[0][94]=93
-.[0][95]=94
-.[0][96]=95
-.[0][97]=96
-.[0][98]=97
-.[0][99]=98
-.[0][100]=99
-.[0][101]=100
-.[0][102]=101
-.[0][103]=102
-.[0][104]=103
-.[0][105]=104
-.[0][106]=105
-.[0][107]=106
-.[0][108]=107
-.[0][109]=108
-.[0][110]=109
-.[0][111]=110
-.[0][112]=111
-.[0][113]=112
-.[0][114]=113
-.[0][115]=114
-.[0][116]=115
-.[0][117]=116
-.[0][118]=117
-.[0][119]=118
-.[0][120]=119
-.[0][121]=120
-.[0][122]=121
-.[0][123]=122
-.[0][124]=123
-.[0][125]=124
-.[0][126]=125
-.[0][127]=126
-.[0][128]=127
-.[0][129]=128
-.[0][130]=129
-.[0][131]=130
-.[0][132]=131
-.[0][133]=132
-.[0][134]=133
-.[0][135]=134
-.[0][136]=135
-.[0][137]=136
-.[0][138]=137
-.[0][139]=138
-.[0][140]=139
-.[0][141]=140
-.[0][142]=141
-.[0][143]=142
-.[0][144]=143
-.[0][145]=144
-.[0][146]=145
-.[0][147]=146
-.[0][148]=147
-.[0][149]=148
-.[0][150]=149
-.[0][151]=150
-.[0][152]=151
-.[0][153]=152
-.[0][154]=153
-.[0][155]=154
-.[0][156]=155
-.[0][157]=156
-.[0][158]=157
-.[0][159]=158
-.[0][160]=159
-.[0][161]=160
-.[0][162]=161
-.[0][163]=162
-.[0][164]=163
-.[0][165]=164
-.[0][166]=165
-.[0][167]=166
-.[0][168]=167
-.[0][169]=168
-.[0][170]=169
-.[0][171]=170
-.[0][172]=171
-.[0][173]=172
-.[0][174]=173
-.[0][175]=174
-.[0][176]=175
-.[0][177]=176
-.[0][178]=177
-.[0][179]=178
-.[0][180]=179
-.[0][181]=180
-.[0][182]=181
-.[0][183]=182
-.[0][184]=183
-.[0][185]=184
-.[0][186]=185
-.[0][187]=186
-.[0][188]=187
-.[0][189]=188
-.[0][190]=189
-.[0][191]=190
-.[0][192]=191
-.[0][193]=192
-.[0][194]=193
-.[0][195]=194
-.[0][196]=195
-.[0][197]=196
-.[0][198]=197
-.[0][199]=198
-.[0][200]=199
-.[0][201]=200
-.[0][202]=201
-.[0][203]=202
-.[0][204]=203
-.[0][205]=204
-.[0][206]=205
-.[0][207]=206
-.[0][208]=207
-.[0][209]=208
-.[0][210]=209
-.[0][211]=210
-.[0][212]=211
-.[0][213]=212
-.[0][214]=213
-.[0][215]=214
-.[0][216]=215
-.[0][217]=216
-.[0][218]=217
-.[0][219]=218
-.[0][220]=219
-.[0][221]=220
-.[0][222]=221
-.[0][223]=222
-.[0][224]=223
-.[0][225]=224
-.[0][226]=225
-.[0][227]=226
-.[0][228]=227
-.[0][229]=228
-.[0][230]=229
-.[0][231]=230
-.[0][232]=231
-.[0][233]=232
-.[0][234]=233
-.[0][235]=234
-.[0][236]=235
-.[0][237]=236
-.[0][238]=237
-.[0][239]=238
-.[0][240]=239
-.[0][241]=240
-.[0][242]=241
-.[0][243]=242
-.[0][244]=243
-.[0][245]=244
-.[0][246]=245
-.[0][247]=246
-.[0][248]=247
-.[0][249]=248
-.[0][250]=249
-.[0][251]=250
-.[0][252]=251
-.[0][253]=252
-.[0][254]=253
-.[0][255]=254
-.[0][256]=255
-.[0][257]=256
-.[0][258]=257
-.[0][259]=258
-.[0][260]=259
-.[0][261]=260
-.[0][262]=261
-.[0][263]=262
-.[0][264]=263
-.[0][265]=264
-.[0][266]=265
-.[0][267]=266
-.[0][268]=267
-.[0][269]=268
-.[0][270]=269
-.[0][271]=270
-.[0][272]=271
-.[0][273]=272
-.[0][274]=273
-.[0][275]=274
-.[0][276]=275
-.[0][277]=276
-.[0][278]=277
-.[0][279]=278
-.[0][280]=279
-.[0][281]=280
-.[0][282]=281
-.[0][283]=282
-.[0][284]=283
-.[0][285]=284
-.[0][286]=285
-.[0][287]=286
-.[0][288]=287
-.[0][289]=288
-.[0][290]=289
-.[0][291]=290
-.[0][292]=291
-.[0][293]=292
-.[0][294]=293
-.[0][295]=294
-.[0][296]=295
-.[0][297]=296
-.[0][298]=297
-.[0][299]=298
-.[0][300]=299
-.[0][301]=300
-.[0][302]=301
-.[0][303]=302
-.[0][304]=303
-.[0][305]=304
-.[0][306]=305
-.[0][307]=306
-.[0][308]=307
-.[0][309]=308
-.[0][310]=309
-.[0][311]=310
-.[0][312]=311
-.[0][313]=312
-.[0][314]=313
-.[0][315]=314
-.[0][316]=315
-.[0][317]=316
-.[0][318]=317
-.[0][319]=318
-.[0][320]=319
-.[0][321]=320
-.[0][322]=321
-.[0][323]=322
-.[0][324]=323
-.[0][325]=324
-.[0][326]=325
-.[0][327]=326
-.[0][328]=327
-.[0][329]=328
-.[0][330]=329
-.[0][331]=330
-.[0][332]=331
-.[0][333]=332
-.[0][334]=333
-.[0][335]=334
-.[0][336]=335
-.[0][337]=336
-.[0][338]=337
-.[0][339]=338
-.[0][340]=339
-.[0][341]=340
-.[0][342]=341
-.[0][343]=342
-.[0][344]=343
-.[0][345]=344
-.[0][346]=345
-.[0][347]=346
-.[0][348]=347
-.[0][349]=348
-.[0][350]=349
-.[0][351]=350
-.[0][352]=351
-.[0][353]=352
-.[0][354]=353
-.[0][355]=354
-.[0][356]=355
-.[0][357]=356
-.[0][358]=357
-.[0][359]=358
-.[0][360]=359
-.[0][361]=360
-.[0][362]=361
-.[0][363]=362
-.[0][364]=363
-.[0][365]=364
-.[0][366]=365
-.[0][367]=366
-.[0][368]=367
-.[0][369]=368
-.[0][370]=369
-.[0][371]=370
-.[0][372]=371
-.[0][373]=372
-.[0][374]=373
-.[0][375]=374
-.[0][376]=375
-.[0][377]=376
-.[0][378]=377
-.[0][379]=378
-.[0][380]=379
-.[0][381]=380
-.[0][382]=381
-.[0][383]=382
-.[0][384]=383
-.[0][385]=384
-.[0][386]=385
-.[0][387]=386
-.[0][388]=387
-.[0][389]=388
-.[0][390]=389
-.[0][391]=390
-.[0][392]=391
-.[0][393]=392
-.[0][394]=393
-.[0][395]=394
-.[0][396]=395
-.[0][397]=396
-.[0][398]=397
-.[0][399]=398
-.[0][400]=399
-.[0][401]=400
-.[0][402]=401
-.[0][403]=402
-.[0][404]=403
-.[0][405]=404
-.[0][406]=405
-.[0][407]=406
-.[0][408]=407
-.[0][409]=408
-.[0][410]=409
-.[0][411]=410
-.[0][412]=411
-.[0][413]=412
-.[0][414]=413
-.[0][415]=414
-.[0][416]=415
-.[0][417]=416
-.[0][418]=417
-.[0][419]=418
-.[0][420]=419
-.[0][421]=420
-.[0][422]=421
-.[0][423]=422
-.[0][424]=423
-.[0][425]=424
-.[0][426]=425
-.[0][427]=426
-.[0][428]=427
-.[0][429]=428
-.[0][430]=429
-.[0][431]=430
-.[0][432]=431
-.[0][433]=432
-.[0][434]=433
-.[0][435]=434
-.[0][436]=435
-.[0][437]=436
-.[0][438]=437
-.[0][439]=438
-.[0][440]=439
-.[0][441]=440
-.[0][442]=441
-.[0][443]=442
-.[0][444]=443
-.[0][445]=444
-.[0][446]=445
-.[0][447]=446
-.[0][448]=447
-.[0][449]=448
-.[0][450]=449
-.[0][451]=450
-.[0][452]=451
-.[0][453]=452
-.[0][454]=453
-.[0][455]=454
-.[0][456]=455
-.[0][457]=456
-.[0][458]=457
-.[0][459]=458
-.[0][460]=459
-.[0][461]=460
-.[0][462]=461
-.[0][463]=462
-.[0][464]=463
-.[0][465]=464
-.[0][466]=465
-.[0][467]=466
-.[0][468]=467
-.[0][469]=468
-.[0][470]=469
-.[0][471]=470
-.[0][472]=471
-.[0][473]=472
-.[0][474]=473
-.[0][475]=474
-.[0][476]=475
-.[0][477]=476
-.[0][478]=477
-.[0][479]=478
-.[0][480]=479
-.[0][481]=480
-.[0][482]=481
-.[0][483]=482
-.[0][484]=483
-.[0][485]=484
-.[0][486]=485
-.[0][487]=486
-.[0][488]=487
-.[0][489]=488
-.[0][490]=489
-.[0][491]=490
-.[0][492]=491
-.[0][493]=492
-.[0][494]=493
-.[0][495]=494
-.[0][496]=495
-.[0][497]=496
-.[0][498]=497
-.[0][499]=498
-.[0][500]=499
-.[0][501]=500
-.[0][502]=501
-.[0][503]=502
-.[0][504]=503
-.[0][505]=504
-.[0][506]=505
-.[0][507]=506
-.[0][508]=507
-.[0][509]=508
-.[0][510]=509
-.[0][511]=510
-.[0][512]=511
-.[0][513]=512
-.[0][514]=513
-.[0][515]=514
-.[0][516]=515
-.[0][517]=516
-.[0][518]=517
-.[0][519]=518
-.[0][520]=519
-.[0][521]=520
-.[0][522]=521
-.[0][523]=522
-.[0][524]=523
-.[0][525]=524
-.[0][526]=525
-.[0][527]=526
-.[0][528]=527
-.[0][529]=528
-.[0][530]=529
-.[0][531]=530
-.[0][532]=531
-.[0][533]=532
-.[0][534]=533
-.[0][535]=534
-.[0][536]=535
-.[0][537]=536
-.[0][538]=537
-.[0][539]=538
-.[0][540]=539
-.[0][541]=540
-.[0][542]=541
-.[0][543]=542
-.[0][544]=543
-.[0][545]=544
-.[0][546]=545
-.[0][547]=546
-.[0][548]=547
-.[0][549]=548
-.[0][550]=549
-.[0][551]=550
-.[0][552]=551
-.[0][553]=552
-.[0][554]=553
-.[0][555]=554
-.[0][556]=555
-.[0][557]=556
-.[0][558]=557
-.[0][559]=558
-.[0][560]=559
-.[0][561]=560
-.[0][562]=561
-.[0][563]=562
-.[0][564]=563
-.[0][565]=564
-.[0][566]=565
-.[0][567]=566
-.[0][568]=567
-.[0][569]=568
-.[0][570]=569
-.[0][571]=570
-.[0][572]=571
-.[0][573]=572
-.[0][574]=573
-.[0][575]=574
-.[0][576]=575
-.[0][577]=576
-.[0][578]=577
-.[0][579]=578
-.[0][580]=579
-.[0][581]=580
-.[0][582]=581
-.[0][583]=582
-.[0][584]=583
-.[0][585]=584
-.[0][586]=585
-.[0][587]=586
-.[0][588]=587
-.[0][589]=588
-.[0][590]=589
-.[0][591]=590
-.[0][592]=591
-.[0][593]=592
-.[0][594]=593
-.[0][595]=594
-.[0][596]=595
-.[0][597]=596
-.[0][598]=597
-.[0][599]=598
-.[0][600]=599
-.[0][601]=600
-.[0][602]=601
-.[0][603]=602
-.[0][604]=603
-.[0][605]=604
-.[0][606]=605
-.[0][607]=606
-.[0][608]=607
-.[0][609]=608
-.[0][610]=609
-.[0][611]=610
-.[0][612]=611
-.[0][613]=612
-.[0][614]=613
-.[0][615]=614
-.[0][616]=615
-.[0][617]=616
-.[0][618]=617
-.[0][619]=618
-.[0][620]=619
-.[0][621]=620
-.[0][622]=621
-.[0][623]=622
-.[0][624]=623
-.[0][625]=624
-.[0][626]=625
-.[0][627]=626
-.[0][628]=627
-.[0][629]=628
-.[0][630]=629
-.[0][631]=630
-.[0][632]=631
-.[0][633]=632
-.[0][634]=633
-.[0][635]=634
-.[0][636]=635
-.[0][637]=636
-.[0][638]=637
-.[0][639]=638
-.[0][640]=639
-.[0][641]=640
-.[0][642]=641
-.[0][643]=642
-.[0][644]=643
-.[0][645]=644
-.[0][646]=645
-.[0][647]=646
-.[0][648]=647
-.[0][649]=648
-.[0][650]=649
-.[0][651]=650
-.[0][652]=651
-.[0][653]=652
-.[0][654]=653
-.[0][655]=654
-.[0][656]=655
-.[0][657]=656
-.[0][658]=657
-.[0][659]=658
-.[0][660]=659
-.[0][661]=660
-.[0][662]=661
-.[0][663]=662
-.[0][664]=663
-.[0][665]=664
-.[0][666]=665
-.[0][667]=666
-.[0][668]=667
-.[0][669]=668
-.[0][670]=669
-.[0][671]=670
-.[0][672]=671
-.[0][673]=672
-.[0][674]=673
-.[0][675]=674
-.[0][676]=675
-.[0][677]=676
-.[0][678]=677
-.[0][679]=678
-.[0][680]=679
-.[0][681]=680
-.[0][682]=681
-.[0][683]=682
-.[0][684]=683
-.[0][685]=684
-.[0][686]=685
-.[0][687]=686
-.[0][688]=687
-.[0][689]=688
-.[0][690]=689
-.[0][691]=690
-.[0][692]=691
-.[0][693]=692
-.[0][694]=693
-.[0][695]=694
-.[0][696]=695
-.[0][697]=696
-.[0][698]=697
-.[0][699]=698
-.[0][700]=699
-.[0][701]=700
-.[0][702]=701
-.[0][703]=702
-.[0][704]=703
-.[0][705]=704
-.[0][706]=705
-.[0][707]=706
-.[0][708]=707
-.[0][709]=708
-.[0][710]=709
-.[0][711]=710
-.[0][712]=711
-.[0][713]=712
-.[0][714]=713
-.[0][715]=714
-.[0][716]=715
-.[0][717]=716
-.[0][718]=717
-.[0][719]=718
-.[0][720]=719
-.[0][721]=720
-.[0][722]=721
-.[0][723]=722
-.[0][724]=723
-.[0][725]=724
-.[0][726]=725
-.[0][727]=726
-.[0][728]=727
-.[0][729]=728
-.[0][730]=729
-.[0][731]=730
-.[0][732]=731
-.[0][733]=732
-.[0][734]=733
-.[0][735]=734
-.[0][736]=735
-.[0][737]=736
-.[0][738]=737
-.[0][739]=738
-.[0][740]=739
-.[0][741]=740
-.[0][742]=741
-.[0][743]=742
-.[0][744]=743
-.[0][745]=744
-.[0][746]=745
-.[0][747]=746
-.[0][748]=747
-.[0][749]=748
-.[0][750]=749
-.[0][751]=750
-.[0][752]=751
-.[0][753]=752
-.[0][754]=753
-.[0][755]=754
-.[0][756]=755
-.[0][757]=756
-.[0][758]=757
-.[0][759]=758
-.[0][760]=759
-.[0][761]=760
-.[0][762]=761
-.[0][763]=762
-.[0][764]=763
-.[0][765]=764
-.[0][766]=765
-.[0][767]=766
-.[0][768]=767
-.[0][769]=768
-.[0][770]=769
-.[0][771]=770
-.[0][772]=771
-.[0][773]=772
-.[0][774]=773
-.[0][775]=774
-.[0][776]=775
-.[0][777]=776
-.[0][778]=777
-.[0][779]=778
-.[0][780]=779
-.[0][781]=780
-.[0][782]=781
-.[0][783]=782
-.[0][784]=783
-.[0][785]=784
-.[0][786]=785
-.[0][787]=786
-.[0][788]=787
-.[0][789]=788
-.[0][790]=789
-.[0][791]=790
-.[0][792]=791
-.[0][793]=792
-.[0][794]=793
-.[0][795]=794
-.[0][796]=795
-.[0][797]=796
-.[0][798]=797
-.[0][799]=798
-.[0][800]=799
-.[0][801]=800
-.[0][802]=801
-.[0][803]=802
-.[0][804]=803
-.[0][805]=804
-.[0][806]=805
-.[0][807]=806
-.[0][808]=807
-.[0][809]=808
-.[0][810]=809
-.[0][811]=810
-.[0][812]=811
-.[0][813]=812
-.[0][814]=813
-.[0][815]=814
-.[0][816]=815
-.[0][817]=816
-.[0][818]=817
-.[0][819]=818
-.[0][820]=819
-.[0][821]=820
-.[0][822]=821
-.[0][823]=822
-.[0][824]=823
-.[0][825]=824
-.[0][826]=825
-.[0][827]=826
-.[0][828]=827
-.[0][829]=828
-.[0][830]=829
-.[0][831]=830
-.[0][832]=831
-.[0][833]=832
-.[0][834]=833
-.[0][835]=834
-.[0][836]=835
-.[0][837]=836
-.[0][838]=837
-.[0][839]=838
-.[0][840]=839
-.[0][841]=840
-.[0][842]=841
-.[0][843]=842
-.[0][844]=843
-.[0][845]=844
-.[0][846]=845
-.[0][847]=846
-.[0][848]=847
-.[0][849]=848
-.[0][850]=849
-.[0][851]=850
-.[0][852]=851
-.[0][853]=852
-.[0][854]=853
-.[0][855]=854
-.[0][856]=855
-.[0][857]=856
-.[0][858]=857
-.[0][859]=858
-.[0][860]=859
-.[0][861]=860
-.[0][862]=861
-.[0][863]=862
-.[0][864]=863
-.[0][865]=864
-.[0][866]=865
-.[0][867]=866
-.[0][868]=867
-.[0][869]=868
-.[0][870]=869
-.[0][871]=870
-.[0][872]=871
-.[0][873]=872
-.[0][874]=873
-.[0][875]=874
-.[0][876]=875
-.[0][877]=876
-.[0][878]=877
-.[0][879]=878
-.[0][880]=879
-.[0][881]=880
-.[0][882]=881
-.[0][883]=882
-.[0][884]=883
-.[0][885]=884
-.[0][886]=885
-.[0][887]=886
-.[0][888]=887
-.[0][889]=888
-.[0][890]=889
-.[0][891]=890
-.[0][892]=891
-.[0][893]=892
-.[0][894]=893
-.[0][895]=894
-.[0][896]=895
-.[0][897]=896
-.[0][898]=897
-.[0][899]=898
-.[0][900]=899
-.[0][901]=900
-.[0][902]=901
-.[0][903]=902
-.[0][904]=903
-.[0][905]=904
-.[0][906]=905
-.[0][907]=906
-.[0][908]=907
-.[0][909]=908
-.[0][910]=909
-.[0][911]=910
-.[0][912]=911
-.[0][913]=912
-.[0][914]=913
-.[0][915]=914
-.[0][916]=915
-.[0][917]=916
-.[0][918]=917
-.[0][919]=918
-.[0][920]=919
-.[0][921]=920
-.[0][922]=921
-.[0][923]=922
-.[0][924]=923
-.[0][925]=924
-.[0][926]=925
-.[0][927]=926
-.[0][928]=927
-.[0][929]=928
-.[0][930]=929
-.[0][931]=930
-.[0][932]=931
-.[0][933]=932
-.[0][934]=933
-.[0][935]=934
-.[0][936]=935
-.[0][937]=936
-.[0][938]=937
-.[0][939]=938
-.[0][940]=939
-.[0][941]=940
-.[0][942]=941
-.[0][943]=942
-.[0][944]=943
-.[0][945]=944
-.[0][946]=945
-.[0][947]=946
-.[0][948]=947
-.[0][949]=948
-.[0][950]=949
-.[0][951]=950
-.[0][952]=951
-.[0][953]=952
-.[0][954]=953
-.[0][955]=954
-.[0][956]=955
-.[0][957]=956
-.[0][958]=957
-.[0][959]=958
-.[0][960]=959
-.[0][961]=960
-.[0][962]=961
-.[0][963]=962
-.[0][964]=963
-.[0][965]=964
-.[0][966]=965
-.[0][967]=966
-.[0][968]=967
-.[0][969]=968
-.[0][970]=969
-.[0][971]=970
-.[0][972]=971
-.[0][973]=972
-.[0][974]=973
-.[0][975]=974
-.[0][976]=975
-.[0][977]=976
-.[0][978]=977
-.[0][979]=978
-.[0][980]=979
-.[0][981]=980
-.[0][982]=981
-.[0][983]=982
-.[0][984]=983
-.[0][985]=984
-.[0][986]=985
-.[0][987]=986
-.[0][988]=987
-.[0][989]=988
-.[0][990]=989
-.[0][991]=990
-.[0][992]=991
-.[0][993]=992
-.[0][994]=993
-.[0][995]=994
-.[0][996]=995
-.[0][997]=996
-.[0][998]=997
-.[0][999]=998
-.[0][1000]=999
-.[0][1001]=1000
-.[0][1002]=1001
-.[0][1003]=1002
-.[0][1004]=1003
-.[0][1005]=1004
-.[0][1006]=1005
-.[0][1007]=1006
-.[0][1008]=1007
-.[0][1009]=1008
-.[0][1010]=1009
-.[0][1011]=1010
-.[0][1012]=1011
-.[0][1013]=1012
-.[0][1014]=1013
-.[0][1015]=1014
-.[0][1016]=1015
-.[0][1017]=1016
-.[0][1018]=1017
-.[0][1019]=1018
-.[0][1020]=1019
-.[0][1021]=1020
-.[0][1022]=1021
-.[0][1023]=1022
-.[0][1024]=1023
-.[0][1025]=1024
-.[0][1026]=1025
-.[0][1027]=1026
-.[0][1028]=1027
-.[0][1029]=1028
-.[0][1030]=1029
-.[0][1031]=1030
-.[0][1032]=1031
-.[0][1033]=1032
-.[0][1034]=1033
-.[0][1035]=1034
-.[0][1036]=1035
-.[0][1037]=1036
-.[0][1038]=1037
-.[0][1039]=1038
-.[0][1040]=1039
-.[0][1041]=1040
-.[0][1042]=1041
-.[0][1043]=1042
-.[0][1044]=1043
-.[0][1045]=1044
-.[0][1046]=1045
-.[0][1047]=1046
-.[0][1048]=1047
-.[0][1049]=1048
-.[0][1050]=1049
-.[0][1051]=1050
-.[0][1052]=1051
-.[0][1053]=1052
-.[0][1054]=1053
-.[0][1055]=1054
-.[0][1056]=1055
-.[0][1057]=1056
-.[0][1058]=1057
-.[0][1059]=1058
-.[0][1060]=1059
-.[0][1061]=1060
-.[0][1062]=1061
-.[0][1063]=1062
-.[0][1064]=1063
-.[0][1065]=1064
-.[0][1066]=1065
-.[0][1067]=1066
-.[0][1068]=1067
-.[0][1069]=1068
-.[0][1070]=1069
-.[0][1071]=1070
-.[0][1072]=1071
-.[0][1073]=1072
-.[0][1074]=1073
-.[0][1075]=1074
-.[0][1076]=1075
-.[0][1077]=1076
-.[0][1078]=1077
-.[0][1079]=1078
-.[0][1080]=1079
-.[0][1081]=1080
-.[0][1082]=1081
-.[0][1083]=1082
-.[0][1084]=1083
-.[0][1085]=1084
-.[0][1086]=1085
-.[0][1087]=1086
-.[0][1088]=1087
-.[0][1089]=1088
-.[0][1090]=1089
-.[0][1091]=1090
-.[0][1092]=1091
-.[0][1093]=1092
-.[0][1094]=1093
-.[0][1095]=1094
-.[0][1096]=1095
-.[0][1097]=1096
-.[0][1098]=1097
-.[0][1099]=1098
-.[0][1100]=1099
-.[0][1101]=1100
-.[0][1102]=1101
-.[0][1103]=1102
-.[0][1104]=1103
-.[0][1105]=1104
-.[0][1106]=1105
-.[0][1107]=1106
-.[0][1108]=1107
-.[0][1109]=1108
-.[0][1110]=1109
-.[0][1111]=1110
-.[0][1112]=1111
-.[0][1113]=1112
-.[0][1114]=1113
-.[0][1115]=1114
-.[0][1116]=1115
-.[0][1117]=1116
-.[0][1118]=1117
-.[0][1119]=1118
-.[0][1120]=1119
-.[0][1121]=1120
-.[0][1122]=1121
-.[0][1123]=1122
-.[0][1124]=1123
-.[0][1125]=1124
-.[0][1126]=1125
-.[0][1127]=1126
-.[0][1128]=1127
-.[0][1129]=1128
-.[0][1130]=1129
-.[0][1131]=1130
-.[0][1132]=1131
-.[0][1133]=1132
-.[0][1134]=1133
-.[0][1135]=1134
-.[0][1136]=1135
-.[0][1137]=1136
-.[0][1138]=1137
-.[0][1139]=1138
-.[0][1140]=1139
-.[0][1141]=1140
-.[0][1142]=1141
-.[0][1143]=1142
-.[0][1144]=1143
-.[0][1145]=1144
-.[0][1146]=1145
-.[0][1147]=1146
-.[0][1148]=1147
-.[0][1149]=1148
-.[0][1150]=1149
-.[0][1151]=1150
-.[0][1152]=1151
-.[0][1153]=1152
-.[0][1154]=1153
-.[0][1155]=1154
-.[0][1156]=1155
-.[0][1157]=1156
-.[0][1158]=1157
-.[0][1159]=1158
-.[0][1160]=1159
-.[0][1161]=1160
-.[0][1162]=1161
-.[0][1163]=1162
-.[0][1164]=1163
-.[0][1165]=1164
-.[0][1166]=1165
-.[0][1167]=1166
-.[0][1168]=1167
-.[0][1169]=1168
-.[0][1170]=1169
-.[0][1171]=1170
-.[0][1172]=1171
-.[0][1173]=1172
-.[0][1174]=1173
-.[0][1175]=1174
-.[0][1176]=1175
-.[0][1177]=1176
-.[0][1178]=1177
-.[0][1179]=1178
-.[0][1180]=1179
-.[0][1181]=1180
-.[0][1182]=1181
-.[0][1183]=1182
-.[0][1184]=1183
-.[0][1185]=1184
-.[0][1186]=1185
-.[0][1187]=1186
-.[0][1188]=1187
-.[0][1189]=1188
-.[0][1190]=1189
-.[0][1191]=1190
-.[0][1192]=1191
-.[0][1193]=1192
-.[0][1194]=1193
-.[0][1195]=1194
-.[0][1196]=1195
-.[0][1197]=1196
-.[0][1198]=1197
-.[0][1199]=1198
-.[0][1200]=1199
-.[0][1201]=1200
-.[0][1202]=1201
-.[0][1203]=1202
-.[0][1204]=1203
-.[0][1205]=1204
-.[0][1206]=1205
-.[0][1207]=1206
-.[0][1208]=1207
-.[0][1209]=1208
-.[0][1210]=1209
-.[0][1211]=1210
-.[0][1212]=1211
-.[0][1213]=1212
-.[0][1214]=1213
-.[0][1215]=1214
-.[0][1216]=1215
-.[0][1217]=1216
-.[0][1218]=1217
-.[0][1219]=1218
-.[0][1220]=1219
-.[0][1221]=1220
-.[0][1222]=1221
-.[0][1223]=1222
-.[0][1224]=1223
-.[0][1225]=1224
-.[0][1226]=1225
-.[0][1227]=1226
-.[0][1228]=1227
-.[0][1229]=1228
-.[0][1230]=1229
-.[0][1231]=1230
-.[0][1232]=1231
-.[0][1233]=1232
-.[0][1234]=1233
-.[0][1235]=1234
-.[0][1236]=1235
-.[0][1237]=1236
-.[0][1238]=1237
-.[0][1239]=1238
-.[0][1240]=1239
-.[0][1241]=1240
-.[0][1242]=1241
-.[0][1243]=1242
-.[0][1244]=1243
-.[0][1245]=1244
-.[0][1246]=1245
-.[0][1247]=1246
-.[0][1248]=1247
-.[0][1249]=1248
-.[0][1250]=1249
-.[0][1251]=1250
-.[0][1252]=1251
-.[0][1253]=1252
-.[0][1254]=1253
-.[0][1255]=1254
-.[0][1256]=1255
-.[0][1257]=1256
-.[0][1258]=1257
-.[0][1259]=1258
-.[0][1260]=1259
-.[0][1261]=1260
-.[0][1262]=1261
-.[0][1263]=1262
-.[0][1264]=1263
-.[0][1265]=1264
-.[0][1266]=1265
-.[0][1267]=1266
-.[0][1268]=1267
-.[0][1269]=1268
-.[0][1270]=1269
-.[0][1271]=1270
-.[0][1272]=1271
-.[0][1273]=1272
-.[0][1274]=1273
-.[0][1275]=1274
-.[0][1276]=1275
-.[0][1277]=1276
-.[0][1278]=1277
-.[0][1279]=1278
-.[0][1280]=1279
-.[0][1281]=1280
-.[0][1282]=1281
-.[0][1283]=1282
-.[0][1284]=1283
-.[0][1285]=1284
-.[0][1286]=1285
-.[0][1287]=1286
-.[0][1288]=1287
-.[0][1289]=1288
-.[0][1290]=1289
-.[0][1291]=1290
-.[0][1292]=1291
-.[0][1293]=1292
-.[0][1294]=1293
-.[0][1295]=1294
-.[0][1296]=1295
-.[0][1297]=1296
-.[0][1298]=1297
-.[0][1299]=1298
-.[0][1300]=1299
-.[0][1301]=1300
-.[0][1302]=1301
-.[0][1303]=1302
-.[0][1304]=1303
-.[0][1305]=1304
-.[0][1306]=1305
-.[0][1307]=1306
-.[0][1308]=1307
-.[0][1309]=1308
-.[0][1310]=1309
-.[0][1311]=1310
-.[0][1312]=1311
-.[0][1313]=1312
-.[0][1314]=1313
-.[0][1315]=1314
-.[0][1316]=1315
-.[0][1317]=1316
-.[0][1318]=1317
-.[0][1319]=1318
-.[0][1320]=1319
-.[0][1321]=1320
-.[0][1322]=1321
-.[0][1323]=1322
-.[0][1324]=1323
-.[0][1325]=1324
-.[0][1326]=1325
-.[0][1327]=1326
-.[0][1328]=1327
-.[0][1329]=1328
-.[0][1330]=1329
-.[0][1331]=1330
-.[0][1332]=1331
-.[0][1333]=1332
-.[0][1334]=1333
-.[0][1335]=1334
-.[0][1336]=1335
-.[0][1337]=1336
-.[0][1338]=1337
-.[0][1339]=1338
-.[0][1340]=1339
-.[0][1341]=1340
-.[0][1342]=1341
-.[0][1343]=1342
-.[0][1344]=1343
-.[0][1345]=1344
-.[0][1346]=1345
-.[0][1347]=1346
-.[0][1348]=1347
-.[0][1349]=1348
-.[0][1350]=1349
-.[0][1351]=1350
-.[0][1352]=1351
-.[0][1353]=1352
-.[0][1354]=1353
-.[0][1355]=1354
-.[0][1356]=1355
-.[0][1357]=1356
-.[0][1358]=1357
-.[0][1359]=1358
-.[0][1360]=1359
-.[0][1361]=1360
-.[0][1362]=1361
-.[0][1363]=1362
-.[0][1364]=1363
-.[0][1365]=1364
-.[0][1366]=1365
-.[0][1367]=1366
-.[0][1368]=1367
-.[0][1369]=1368
-.[0][1370]=1369
-.[0][1371]=1370
-.[0][1372]=1371
-.[0][1373]=1372
-.[0][1374]=1373
-.[0][1375]=1374
-.[0][1376]=1375
-.[0][1377]=1376
-.[0][1378]=1377
-.[0][1379]=1378
-.[0][1380]=1379
-.[0][1381]=1380
-.[0][1382]=1381
-.[0][1383]=1382
-.[0][1384]=1383
-.[0][1385]=1384
-.[0][1386]=1385
-.[0][1387]=1386
-.[0][1388]=1387
-.[0][1389]=1388
-.[0][1390]=1389
-.[0][1391]=1390
-.[0][1392]=1391
-.[0][1393]=1392
-.[0][1394]=1393
-.[0][1395]=1394
-.[0][1396]=1395
-.[0][1397]=1396
-.[0][1398]=1397
-.[0][1399]=1398
-.[0][1400]=1399
-.[0][1401]=1400
-.[0][1402]=1401
-.[0][1403]=1402
-.[0][1404]=1403
-.[0][1405]=1404
-.[0][1406]=1405
-.[0][1407]=1406
-.[0][1408]=1407
-.[0][1409]=1408
-.[0][1410]=1409
-.[0][1411]=1410
-.[0][1412]=1411
-.[0][1413]=1412
-.[0][1414]=1413
-.[0][1415]=1414
-.[0][1416]=1415
-.[0][1417]=1416
-.[0][1418]=1417
-.[0][1419]=1418
-.[0][1420]=1419
-.[0][1421]=1420
-.[0][1422]=1421
-.[0][1423]=1422
-.[0][1424]=1423
-.[0][1425]=1424
-.[0][1426]=1425
-.[0][1427]=1426
-.[0][1428]=1427
-.[0][1429]=1428
-.[0][1430]=1429
-.[0][1431]=1430
-.[0][1432]=1431
-.[0][1433]=1432
-.[0][1434]=1433
-.[0][1435]=1434
-.[0][1436]=1435
-.[0][1437]=1436
-.[0][1438]=1437
-.[0][1439]=1438
-.[0][1440]=1439
-.[0][1441]=1440
-.[0][1442]=1441
-.[0][1443]=1442
-.[0][1444]=1443
-.[0][1445]=1444
-.[0][1446]=1445
-.[0][1447]=1446
-.[0][1448]=1447
-.[0][1449]=1448
-.[0][1450]=1449
-.[0][1451]=1450
-.[0][1452]=1451
-.[0][1453]=1452
-.[0][1454]=1453
-.[0][1455]=1454
-.[0][1456]=1455
-.[0][1457]=1456
-.[0][1458]=1457
-.[0][1459]=1458
-.[0][1460]=1459
-.[0][1461]=1460
-.[0][1462]=1461
-.[0][1463]=1462
-.[0][1464]=1463
-.[0][1465]=1464
-.[0][1466]=1465
-.[0][1467]=1466
-.[0][1468]=1467
-.[0][1469]=1468
-.[0][1470]=1469
-.[0][1471]=1470
-.[0][1472]=1471
-.[0][1473]=1472
-.[0][1474]=1473
-.[0][1475]=1474
-.[0][1476]=1475
-.[0][1477]=1476
-.[0][1478]=1477
-.[0][1479]=1478
-.[0][1480]=1479
-.[0][1481]=1480
-.[0][1482]=1481
-.[0][1483]=1482
-.[0][1484]=1483
-.[0][1485]=1484
-.[0][1486]=1485
-.[0][1487]=1486
-.[0][1488]=1487
-.[0][1489]=1488
-.[0][1490]=1489
-.[0][1491]=1490
-.[0][1492]=1491
-.[0][1493]=1492
-.[0][1494]=1493
-.[0][1495]=1494
-.[0][1496]=1495
-.[0][1497]=1496
-.[0][1498]=1497
-.[0][1499]=1498
-.[0][1500]=1499
-.[0][1501]=1500
-.[0][1502]=1501
-.[0][1503]=1502
-.[0][1504]=1503
-.[0][1505]=1504
-.[0][1506]=1505
-.[0][1507]=1506
-.[0][1508]=1507
-.[0][1509]=1508
-.[0][1510]=1509
-.[0][1511]=1510
-.[0][1512]=1511
-.[0][1513]=1512
-.[0][1514]=1513
-.[0][1515]=1514
-.[0][1516]=1515
-.[0][1517]=1516
-.[0][1518]=1517
-.[0][1519]=1518
-.[0][1520]=1519
-.[0][1521]=1520
-.[0][1522]=1521
-.[0][1523]=1522
-.[0][1524]=1523
-.[0][1525]=1524
-.[0][1526]=1525
-.[0][1527]=1526
-.[0][1528]=1527
-.[0][1529]=1528
-.[0][1530]=1529
-.[0][1531]=1530
-.[0][1532]=1531
-.[0][1533]=1532
-.[0][1534]=1533
-.[0][1535]=1534
-.[0][1536]=1535
-.[0][1537]=1536
-.[0][1538]=1537
-.[0][1539]=1538
-.[0][1540]=1539
-.[0][1541]=1540
-.[0][1542]=1541
-.[0][1543]=1542
-.[0][1544]=1543
-.[0][1545]=1544
-.[0][1546]=1545
-.[0][1547]=1546
-.[0][1548]=1547
-.[0][1549]=1548
-.[0][1550]=1549
-.[0][1551]=1550
-.[0][1552]=1551
-.[0][1553]=1552
-.[0][1554]=1553
-.[0][1555]=1554
-.[0][1556]=1555
-.[0][1557]=1556
-.[0][1558]=1557
-.[0][1559]=1558
-.[0][1560]=1559
-.[0][1561]=1560
-.[0][1562]=1561
-.[0][1563]=1562
-.[0][1564]=1563
-.[0][1565]=1564
-.[0][1566]=1565
-.[0][1567]=1566
-.[0][1568]=1567
-.[0][1569]=1568
-.[0][1570]=1569
-.[0][1571]=1570
-.[0][1572]=1571
-.[0][1573]=1572
-.[0][1574]=1573
-.[0][1575]=1574
-.[0][1576]=1575
-.[0][1577]=1576
-.[0][1578]=1577
-.[0][1579]=1578
-.[0][1580]=1579
-.[0][1581]=1580
-.[0][1582]=1581
-.[0][1583]=1582
-.[0][1584]=1583
-.[0][1585]=1584
-.[0][1586]=1585
-.[0][1587]=1586
-.[0][1588]=1587
-.[0][1589]=1588
-.[0][1590]=1589
-.[0][1591]=1590
-.[0][1592]=1591
-.[0][1593]=1592
-.[0][1594]=1593
-.[0][1595]=1594
-.[0][1596]=1595
-.[0][1597]=1596
-.[0][1598]=1597
-.[0][1599]=1598
-.[0][1600]=1599
-.[0][1601]=1600
-.[0][1602]=1601
-.[0][1603]=1602
-.[0][1604]=1603
-.[0][1605]=1604
-.[0][1606]=1605
-.[0][1607]=1606
-.[0][1608]=1607
-.[0][1609]=1608
-.[0][1610]=1609
-.[0][1611]=1610
-.[0][1612]=1611
-.[0][1613]=1612
-.[0][1614]=1613
-.[0][1615]=1614
-.[0][1616]=1615
-.[0][1617]=1616
-.[0][1618]=1617
-.[0][1619]=1618
-.[0][1620]=1619
-.[0][1621]=1620
-.[0][1622]=1621
-.[0][1623]=1622
-.[0][1624]=1623
-.[0][1625]=1624
-.[0][1626]=1625
-.[0][1627]=1626
-.[0][1628]=1627
-.[0][1629]=1628
-.[0][1630]=1629
-.[0][1631]=1630
-.[0][1632]=1631
-.[0][1633]=1632
-.[0][1634]=1633
-.[0][1635]=1634
-.[0][1636]=1635
-.[0][1637]=1636
-.[0][1638]=1637
-.[0][1639]=1638
-.[0][1640]=1639
-.[0][1641]=1640
-.[0][1642]=1641
-.[0][1643]=1642
-.[0][1644]=1643
-.[0][1645]=1644
-.[0][1646]=1645
-.[0][1647]=1646
-.[0][1648]=1647
-.[0][1649]=1648
-.[0][1650]=1649
-.[0][1651]=1650
-.[0][1652]=1651
-.[0][1653]=1652
-.[0][1654]=1653
-.[0][1655]=1654
-.[0][1656]=1655
-.[0][1657]=1656
-.[0][1658]=1657
-.[0][1659]=1658
-.[0][1660]=1659
-.[0][1661]=1660
-.[0][1662]=1661
-.[0][1663]=1662
-.[0][1664]=1663
-.[0][1665]=1664
-.[0][1666]=1665
-.[0][1667]=1666
-.[0][1668]=1667
-.[0][1669]=1668
-.[0][1670]=1669
-.[0][1671]=1670
-.[0][1672]=1671
-.[0][1673]=1672
-.[0][1674]=1673
-.[0][1675]=1674
-.[0][1676]=1675
-.[0][1677]=1676
-.[0][1678]=1677
-.[0][1679]=1678
-.[0][1680]=1679
-.[0][1681]=1680
-.[0][1682]=1681
-.[0][1683]=1682
-.[0][1684]=1683
-.[0][1685]=1684
-.[0][1686]=1685
-.[0][1687]=1686
-.[0][1688]=1687
-.[0][1689]=1688
-.[0][1690]=1689
-.[0][1691]=1690
-.[0][1692]=1691
-.[0][1693]=1692
-.[0][1694]=1693
-.[0][1695]=1694
-.[0][1696]=1695
-.[0][1697]=1696
-.[0][1698]=1697
-.[0][1699]=1698
-.[0][1700]=1699
-.[0][1701]=1700
-.[0][1702]=1701
-.[0][1703]=1702
-.[0][1704]=1703
-.[0][1705]=1704
-.[0][1706]=1705
-.[0][1707]=1706
-.[0][1708]=1707
-.[0][1709]=1708
-.[0][1710]=1709
-.[0][1711]=1710
-.[0][1712]=1711
-.[0][1713]=1712
-.[0][1714]=1713
-.[0][1715]=1714
-.[0][1716]=1715
-.[0][1717]=1716
-.[0][1718]=1717
-.[0][1719]=1718
-.[0][1720]=1719
-.[0][1721]=1720
-.[0][1722]=1721
-.[0][1723]=1722
-.[0][1724]=1723
-.[0][1725]=1724
-.[0][1726]=1725
-.[0][1727]=1726
-.[0][1728]=1727
-.[0][1729]=1728
-.[0][1730]=1729
-.[0][1731]=1730
-.[0][1732]=1731
-.[0][1733]=1732
-.[0][1734]=1733
-.[0][1735]=1734
-.[0][1736]=1735
-.[0][1737]=1736
-.[0][1738]=1737
-.[0][1739]=1738
-.[0][1740]=1739
-.[0][1741]=1740
-.[0][1742]=1741
-.[0][1743]=1742
-.[0][1744]=1743
-.[0][1745]=1744
-.[0][1746]=1745
-.[0][1747]=1746
-.[0][1748]=1747
-.[0][1749]=1748
-.[0][1750]=1749
-.[0][1751]=1750
-.[0][1752]=1751
-.[0][1753]=1752
-.[0][1754]=1753
-.[0][1755]=1754
-.[0][1756]=1755
-.[0][1757]=1756
-.[0][1758]=1757
-.[0][1759]=1758
-.[0][1760]=1759
-.[0][1761]=1760
-.[0][1762]=1761
-.[0][1763]=1762
-.[0][1764]=1763
-.[0][1765]=1764
-.[0][1766]=1765
-.[0][1767]=1766
-.[0][1768]=1767
-.[0][1769]=1768
-.[0][1770]=1769
-.[0][1771]=1770
-.[0][1772]=1771
-.[0][1773]=1772
-.[0][1774]=1773
-.[0][1775]=1774
-.[0][1776]=1775
-.[0][1777]=1776
-.[0][1778]=1777
-.[0][1779]=1778
-.[0][1780]=1779
-.[0][1781]=1780
-.[0][1782]=1781
-.[0][1783]=1782
-.[0][1784]=1783
-.[0][1785]=1784
-.[0][1786]=1785
-.[0][1787]=1786
-.[0][1788]=1787
-.[0][1789]=1788
-.[0][1790]=1789
-.[0][1791]=1790
-.[0][1792]=1791
-.[0][1793]=1792
-.[0][1794]=1793
-.[0][1795]=1794
-.[0][1796]=1795
-.[0][1797]=1796
-.[0][1798]=1797
-.[0][1799]=1798
-.[0][1800]=1799
-.[0][1801]=1800
-.[0][1802]=1801
-.[0][1803]=1802
-.[0][1804]=1803
-.[0][1805]=1804
-.[0][1806]=1805
-.[0][1807]=1806
-.[0][1808]=1807
-.[0][1809]=1808
-.[0][1810]=1809
-.[0][1811]=1810
-.[0][1812]=1811
-.[0][1813]=1812
-.[0][1814]=1813
-.[0][1815]=1814
-.[0][1816]=1815
-.[0][1817]=1816
-.[0][1818]=1817
-.[0][1819]=1818
-.[0][1820]=1819
-.[0][1821]=1820
-.[0][1822]=1821
-.[0][1823]=1822
-.[0][1824]=1823
-.[0][1825]=1824
-.[0][1826]=1825
-.[0][1827]=1826
-.[0][1828]=1827
-.[0][1829]=1828
-.[0][1830]=1829
-.[0][1831]=1830
-.[0][1832]=1831
-.[0][1833]=1832
-.[0][1834]=1833
-.[0][1835]=1834
-.[0][1836]=1835
-.[0][1837]=1836
-.[0][1838]=1837
-.[0][1839]=1838
-.[0][1840]=1839
-.[0][1841]=1840
-.[0][1842]=1841
-.[0][1843]=1842
-.[0][1844]=1843
-.[0][1845]=1844
-.[0][1846]=1845
-.[0][1847]=1846
-.[0][1848]=1847
-.[0][1849]=1848
-.[0][1850]=1849
-.[0][1851]=1850
-.[0][1852]=1851
-.[0][1853]=1852
-.[0][1854]=1853
-.[0][1855]=1854
-.[0][1856]=1855
-.[0][1857]=1856
-.[0][1858]=1857
-.[0][1859]=1858
-.[0][1860]=1859
-.[0][1861]=1860
-.[0][1862]=1861
-.[0][1863]=1862
-.[0][1864]=1863
-.[0][1865]=1864
-.[0][1866]=1865
-.[0][1867]=1866
-.[0][1868]=1867
-.[0][1869]=1868
-.[0][1870]=1869
-.[0][1871]=1870
-.[0][1872]=1871
-.[0][1873]=1872
-.[0][1874]=1873
-.[0][1875]=1874
-.[0][1876]=1875
-.[0][1877]=1876
-.[0][1878]=1877
-.[0][1879]=1878
-.[0][1880]=1879
-.[0][1881]=1880
-.[0][1882]=1881
-.[0][1883]=1882
-.[0][1884]=1883
-.[0][1885]=1884
-.[0][1886]=1885
-.[0][1887]=1886
-.[0][1888]=1887
-.[0][1889]=1888
-.[0][1890]=1889
-.[0][1891]=1890
-.[0][1892]=1891
-.[0][1893]=1892
-.[0][1894]=1893
-.[0][1895]=1894
-.[0][1896]=1895
-.[0][1897]=1896
-.[0][1898]=1897
-.[0][1899]=1898
-.[0][1900]=1899
-.[0][1901]=1900
-.[0][1902]=1901
-.[0][1903]=1902
-.[0][1904]=1903
-.[0][1905]=1904
-.[0][1906]=1905
-.[0][1907]=1906
-.[0][1908]=1907
-.[0][1909]=1908
-.[0][1910]=1909
-.[0][1911]=1910
-.[0][1912]=1911
-.[0][1913]=1912
-.[0][1914]=1913
-.[0][1915]=1914
-.[0][1916]=1915
-.[0][1917]=1916
-.[0][1918]=1917
-.[0][1919]=1918
-.[0][1920]=1919
-.[0][1921]=1920
-.[0][1922]=1921
-.[0][1923]=1922
-.[0][1924]=1923
-.[0][1925]=1924
-.[0][1926]=1925
-.[0][1927]=1926
-.[0][1928]=1927
-.[0][1929]=1928
-.[0][1930]=1929
-.[0][1931]=1930
-.[0][1932]=1931
-.[0][1933]=1932
-.[0][1934]=1933
-.[0][1935]=1934
-.[0][1936]=1935
-.[0][1937]=1936
-.[0][1938]=1937
-.[0][1939]=1938
-.[0][1940]=1939
-.[0][1941]=1940
-.[0][1942]=1941
-.[0][1943]=1942
-.[0][1944]=1943
-.[0][1945]=1944
-.[0][1946]=1945
-.[0][1947]=1946
-.[0][1948]=1947
-.[0][1949]=1948
-.[0][1950]=1949
-.[0][1951]=1950
-.[0][1952]=1951
-.[0][1953]=1952
-.[0][1954]=1953
-.[0][1955]=1954
-.[0][1956]=1955
-.[0][1957]=1956
-.[0][1958]=1957
-.[0][1959]=1958
-.[0][1960]=1959
-.[0][1961]=1960
-.[0][1962]=1961
-.[0][1963]=1962
-.[0][1964]=1963
-.[0][1965]=1964
-.[0][1966]=1965
-.[0][1967]=1966
-.[0][1968]=1967
-.[0][1969]=1968
-.[0][1970]=1969
-.[0][1971]=1970
-.[0][1972]=1971
-.[0][1973]=1972
-.[0][1974]=1973
-.[0][1975]=1974
-.[0][1976]=1975
-.[0][1977]=1976
-.[0][1978]=1977
-.[0][1979]=1978
-.[0][1980]=1979
-.[0][1981]=1980
-.[0][1982]=1981
-.[0][1983]=1982
-.[0][1984]=1983
-.[0][1985]=1984
-.[0][1986]=1985
-.[0][1987]=1986
-.[0][1988]=1987
-.[0][1989]=1988
-.[0][1990]=1989
-.[0][1991]=1990
-.[0][1992]=1991
-.[0][1993]=1992
-.[0][1994]=1993
-.[0][1995]=1994
-.[0][1996]=1995
-.[0][1997]=1996
-.[0][1998]=1997
-.[0][1999]=1998
-.[0][2000]=1999
-.[0][2001]=2000
-.[0][2002]=2001
-.[0][2003]=2002
-.[0][2004]=2003
-.[0][2005]=2004
-.[0][2006]=2005
-.[0][2007]=2006
-.[0][2008]=2007
-.[0][2009]=2008
-.[0][2010]=2009
-.[0][2011]=2010
-.[0][2012]=2011
-.[0][2013]=2012
-.[0][2014]=2013
-.[0][2015]=2014
-.[0][2016]=2015
-.[0][2017]=2016
-.[0][2018]=2017
-.[0][2019]=2018
-.[0][2020]=2019
-.[0][2021]=2020
-.[0][2022]=2021
-.[0][2023]=2022
-.[0][2024]=2023
-.[0][2025]=2024
-.[0][2026]=2025
-.[0][2027]=2026
-.[0][2028]=2027
-.[0][2029]=2028
-.[0][2030]=2029
-.[0][2031]=2030
-.[0][2032]=2031
-.[0][2033]=2032
-.[0][2034]=2033
-.[0][2035]=2034
-.[0][2036]=2035
-.[0][2037]=2036
-.[0][2038]=2037
-.[0][2039]=2038
-.[0][2040]=2039
-.[0][2041]=2040
-.[0][2042]=2041
-.[0][2043]=2042
-.[0][2044]=2043
-.[0][2045]=2044
-.[0][2046]=2045
-.[0][2047]=2046
-.[0][2048]=2047
-.[0][2049]=2048
-.[0][2050]=2049
-.[0][2051]=2050
-.[0][2052]=2051
-.[0][2053]=2052
-.[0][2054]=2053
-.[0][2055]=2054
-.[0][2056]=2055
-.[0][2057]=2056
-.[0][2058]=2057
-.[0][2059]=2058
-.[0][2060]=2059
-.[0][2061]=2060
-.[0][2062]=2061
-.[0][2063]=2062
-.[0][2064]=2063
-.[0][2065]=2064
-.[0][2066]=2065
-.[0][2067]=2066
-.[0][2068]=2067
-.[0][2069]=2068
-.[0][2070]=2069
-.[0][2071]=2070
-.[0][2072]=2071
-.[0][2073]=2072
-.[0][2074]=2073
-.[0][2075]=2074
-.[0][2076]=2075
-.[0][2077]=2076
-.[0][2078]=2077
-.[0][2079]=2078
-.[0][2080]=2079
-.[0][2081]=2080
-.[0][2082]=2081
-.[0][2083]=2082
-.[0][2084]=2083
-.[0][2085]=2084
-.[0][2086]=2085
-.[0][2087]=2086
-.[0][2088]=2087
-.[0][2089]=2088
-.[0][2090]=2089
-.[0][2091]=2090
-.[0][2092]=2091
-.[0][2093]=2092
-.[0][2094]=2093
-.[0][2095]=2094
-.[0][2096]=2095
-.[0][2097]=2096
-.[0][2098]=2097
-.[0][2099]=2098
-.[0][2100]=2099
-.[0][2101]=2100
-.[0][2102]=2101
-.[0][2103]=2102
-.[0][2104]=2103
-.[0][2105]=2104
-.[0][2106]=2105
-.[0][2107]=2106
-.[0][2108]=2107
-.[0][2109]=2108
-.[0][2110]=2109
-.[0][2111]=2110
-.[0][2112]=2111
-.[0][2113]=2112
-.[0][2114]=2113
-.[0][2115]=2114
-.[0][2116]=2115
-.[0][2117]=2116
-.[0][2118]=2117
-.[0][2119]=2118
diff --git a/3rdParty/jsoncpp/test/data/test_large_01.json b/3rdParty/jsoncpp/test/data/test_large_01.json
deleted file mode 100644
index e4ab4cd4330cfff0f215e67f3886fd1d286e432c..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_large_01.json
+++ /dev/null
@@ -1,2 +0,0 @@
-[["A",0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118]
-]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_object_01.expected b/3rdParty/jsoncpp/test/data/test_object_01.expected
deleted file mode 100644
index 67444e5794ef9f48b7cbdf7d613af60f4419ad2f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_object_01.expected
+++ /dev/null
@@ -1 +0,0 @@
-.={}
diff --git a/3rdParty/jsoncpp/test/data/test_object_01.json b/3rdParty/jsoncpp/test/data/test_object_01.json
deleted file mode 100644
index 0967ef424bce6791893e9a57bb952f80fd536e93..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_object_01.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/3rdParty/jsoncpp/test/data/test_object_02.expected b/3rdParty/jsoncpp/test/data/test_object_02.expected
deleted file mode 100644
index 79391c2a6cbdbcd1dbd04c1b9e869e690a1f9c0a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_object_02.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.={}
-.count=1234
diff --git a/3rdParty/jsoncpp/test/data/test_object_02.json b/3rdParty/jsoncpp/test/data/test_object_02.json
deleted file mode 100644
index d0f2facac369a25e074d1af181058ca18a3b103a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_object_02.json
+++ /dev/null
@@ -1 +0,0 @@
-{ "count" : 1234 }
diff --git a/3rdParty/jsoncpp/test/data/test_object_03.expected b/3rdParty/jsoncpp/test/data/test_object_03.expected
deleted file mode 100644
index 5e96113792d561dd2e2af36ed71d8ce5e7c9f6fd..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_object_03.expected
+++ /dev/null
@@ -1,4 +0,0 @@
-.={}
-.attribute="random"
-.count=1234
-.name="test"
diff --git a/3rdParty/jsoncpp/test/data/test_object_03.json b/3rdParty/jsoncpp/test/data/test_object_03.json
deleted file mode 100644
index 4fcd4d821d4062c9c6f25c7241f3715f5e22317f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_object_03.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{ 
-	"count" : 1234,
-	"name" : "test",
-	"attribute" : "random"
-}
diff --git a/3rdParty/jsoncpp/test/data/test_object_04.expected b/3rdParty/jsoncpp/test/data/test_object_04.expected
deleted file mode 100644
index 812965b0caaf8014cf8b2ae8b43807553ac09daf..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_object_04.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.={}
-.=1234
diff --git a/3rdParty/jsoncpp/test/data/test_object_04.json b/3rdParty/jsoncpp/test/data/test_object_04.json
deleted file mode 100644
index 450762d71e59a8a51dcd081289a0e329b3ec82ce..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_object_04.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{ 
-	"" : 1234
-}
diff --git a/3rdParty/jsoncpp/test/data/test_preserve_comment_01.expected b/3rdParty/jsoncpp/test/data/test_preserve_comment_01.expected
deleted file mode 100644
index 2797aa7d6bedf542549f1e928177e992617d6105..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_preserve_comment_01.expected
+++ /dev/null
@@ -1,11 +0,0 @@
-/* A comment
-   at the beginning of the file.
- */
-.={}
-.first=1
-/* Comment before 'second'
- */
-.second=2
-/* A comment at 
-   the end of the file.
- */
diff --git a/3rdParty/jsoncpp/test/data/test_preserve_comment_01.json b/3rdParty/jsoncpp/test/data/test_preserve_comment_01.json
deleted file mode 100644
index fabd55dd96639ea5ec7759b5b54d35a1b74bcbef..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_preserve_comment_01.json
+++ /dev/null
@@ -1,14 +0,0 @@
-/* A comment
-   at the beginning of the file.
- */
-{
-   "first" : 1, // comment after 'first' on the same line
-
-/* Comment before 'second'
- */
-   "second" : 2
-}
-
-/* A comment at 
-   the end of the file.
- */
diff --git a/3rdParty/jsoncpp/test/data/test_real_01.expected b/3rdParty/jsoncpp/test/data/test_real_01.expected
deleted file mode 100644
index 951482708a0a4c2c023d9e3342ad4ef4996e405e..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_01.expected
+++ /dev/null
@@ -1,3 +0,0 @@
-// 2^33 => out of integer range, switch to double
-.=8589934592
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_01.json b/3rdParty/jsoncpp/test/data/test_real_01.json
deleted file mode 100644
index 358452d38780e6a3c64addf9c828fc96917e6ae4..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_01.json
+++ /dev/null
@@ -1,3 +0,0 @@
-// 2^33 => out of integer range, switch to double
-8589934592
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_02.expected b/3rdParty/jsoncpp/test/data/test_real_02.expected
deleted file mode 100644
index b80c0048119460475b37e9588cebf274af0d9c0f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_02.expected
+++ /dev/null
@@ -1,3 +0,0 @@
-// -2^32 => out of signed integer range, switch to double
-.=-4294967295
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_02.json b/3rdParty/jsoncpp/test/data/test_real_02.json
deleted file mode 100644
index 936c706b68ecb8ae42bfd78c53b37861c8816273..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_02.json
+++ /dev/null
@@ -1,3 +0,0 @@
-// -2^32 => out of signed integer range, switch to double
--4294967295
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_03.expected b/3rdParty/jsoncpp/test/data/test_real_03.expected
deleted file mode 100644
index b80c0048119460475b37e9588cebf274af0d9c0f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_03.expected
+++ /dev/null
@@ -1,3 +0,0 @@
-// -2^32 => out of signed integer range, switch to double
-.=-4294967295
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_03.json b/3rdParty/jsoncpp/test/data/test_real_03.json
deleted file mode 100644
index 936c706b68ecb8ae42bfd78c53b37861c8816273..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_03.json
+++ /dev/null
@@ -1,3 +0,0 @@
-// -2^32 => out of signed integer range, switch to double
--4294967295
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_04.expected b/3rdParty/jsoncpp/test/data/test_real_04.expected
deleted file mode 100644
index ff71a23e141557c2b5788df9328119e404ce8ea5..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_04.expected
+++ /dev/null
@@ -1,3 +0,0 @@
-// 1.2345678
-.=1.2345678
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_04.json b/3rdParty/jsoncpp/test/data/test_real_04.json
deleted file mode 100644
index a8eb6d0c92cfe7b5e954937c985287e3a1a48872..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_04.json
+++ /dev/null
@@ -1,3 +0,0 @@
-// 1.2345678
-12345678e-7
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_05.expected b/3rdParty/jsoncpp/test/data/test_real_05.expected
deleted file mode 100644
index 7a460932d7b7c5fa642ba679337ab472be0171ab..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_05.expected
+++ /dev/null
@@ -1,4 +0,0 @@
-// 1234567.8
-.=1234567.8
-
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_05.json b/3rdParty/jsoncpp/test/data/test_real_05.json
deleted file mode 100644
index f7923bab89810458a869b9cede23deafd4b7f29f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_05.json
+++ /dev/null
@@ -1,3 +0,0 @@
-// 1234567.8
-0.12345678e7
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_06.expected b/3rdParty/jsoncpp/test/data/test_real_06.expected
deleted file mode 100644
index a4a004deb140425a9bc29aba66d6c21fe3a118ae..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_06.expected
+++ /dev/null
@@ -1,4 +0,0 @@
-// -1.2345678
-.=-1.2345678
-
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_06.json b/3rdParty/jsoncpp/test/data/test_real_06.json
deleted file mode 100644
index 485419a276c2bba31891cb7d0d2bbded3c3dd739..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_06.json
+++ /dev/null
@@ -1,3 +0,0 @@
-// -1.2345678
--12345678e-7
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_07.expected b/3rdParty/jsoncpp/test/data/test_real_07.expected
deleted file mode 100644
index dc02a8958311293ccf8e55f78f48fe7b565dc669..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_07.expected
+++ /dev/null
@@ -1,4 +0,0 @@
-// -1234567.8
-.=-1234567.8
-
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_07.json b/3rdParty/jsoncpp/test/data/test_real_07.json
deleted file mode 100644
index 8013eb5c9a434895a3a45bef1935b823a575a065..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_07.json
+++ /dev/null
@@ -1,3 +0,0 @@
-// -1234567.8
--0.12345678e7
-
diff --git a/3rdParty/jsoncpp/test/data/test_real_08.expected b/3rdParty/jsoncpp/test/data/test_real_08.expected
deleted file mode 100644
index b1deef919e95b282ca18514ad79375426afc06ea..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_08.expected
+++ /dev/null
@@ -1,4 +0,0 @@
-// Out of 32-bit integer range, switch to double in 32-bit mode. Length the
-// same as UINT_MAX in base 10 and digit less than UINT_MAX's last digit in
-// order to catch a bug in the parsing code.
-.=4300000001
diff --git a/3rdParty/jsoncpp/test/data/test_real_08.json b/3rdParty/jsoncpp/test/data/test_real_08.json
deleted file mode 100644
index cca950d939eb2f10013b878e1a6264ca3ad43cad..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_08.json
+++ /dev/null
@@ -1,4 +0,0 @@
-// Out of 32-bit integer range, switch to double in 32-bit mode. Length the
-// same as UINT_MAX in base 10 and digit less than UINT_MAX's last digit in
-// order to catch a bug in the parsing code.
-4300000001
diff --git a/3rdParty/jsoncpp/test/data/test_real_09.expected b/3rdParty/jsoncpp/test/data/test_real_09.expected
deleted file mode 100644
index aa2dbb2849d251bed5bb19da0551a9a6f4f17413..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_09.expected
+++ /dev/null
@@ -1,4 +0,0 @@
-// Out of 64-bit integer range, switch to double in all modes. Length the same
-// as ULONG_MAX in base 10 and digit less than ULONG_MAX's last digit in order
-// to catch a bug in the parsing code.
-.=1.9e+19
diff --git a/3rdParty/jsoncpp/test/data/test_real_09.json b/3rdParty/jsoncpp/test/data/test_real_09.json
deleted file mode 100644
index e65d50c97c6fac7d9bf829c75f604d2a803a0e18..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_09.json
+++ /dev/null
@@ -1,4 +0,0 @@
-// Out of 64-bit integer range, switch to double in all modes. Length the same
-// as ULONG_MAX in base 10 and digit less than ULONG_MAX's last digit in order
-// to catch a bug in the parsing code.
-19000000000000000001
diff --git a/3rdParty/jsoncpp/test/data/test_real_10.expected b/3rdParty/jsoncpp/test/data/test_real_10.expected
deleted file mode 100644
index d28a430eab4d9c737cdcb8265f4acc9b87f90127..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_10.expected
+++ /dev/null
@@ -1,4 +0,0 @@
-// Out of 32-bit signed integer range, switch to double in all modes. Length
-// the same as INT_MIN in base 10 and digit less than INT_MIN's last digit in
-// order to catch a bug in the parsing code.
-.=-2200000001
diff --git a/3rdParty/jsoncpp/test/data/test_real_10.json b/3rdParty/jsoncpp/test/data/test_real_10.json
deleted file mode 100644
index a6a8bcef50f4672cc28925464aab6c42d4b385c7..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_10.json
+++ /dev/null
@@ -1,4 +0,0 @@
-// Out of 32-bit signed integer range, switch to double in all modes. Length
-// the same as INT_MIN in base 10 and digit less than INT_MIN's last digit in
-// order to catch a bug in the parsing code.
--2200000001
diff --git a/3rdParty/jsoncpp/test/data/test_real_11.expected b/3rdParty/jsoncpp/test/data/test_real_11.expected
deleted file mode 100644
index 2551946f52f6a4b9acec1526924057ec7fda7eef..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_11.expected
+++ /dev/null
@@ -1,4 +0,0 @@
-// Out of 64-bit signed integer range, switch to double in all modes. Length
-// the same as LONG_MIN in base 10 and digit less than LONG_MIN's last digit in
-// order to catch a bug in the parsing code.
-.=-9.3e+18
diff --git a/3rdParty/jsoncpp/test/data/test_real_11.json b/3rdParty/jsoncpp/test/data/test_real_11.json
deleted file mode 100644
index 63cdb36f4ecd94a83e2ff7934a895624e1f8f115..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_11.json
+++ /dev/null
@@ -1,4 +0,0 @@
-// Out of 64-bit signed integer range, switch to double in all modes. Length
-// the same as LONG_MIN in base 10 and digit less than LONG_MIN's last digit in
-// order to catch a bug in the parsing code.
--9300000000000000001
diff --git a/3rdParty/jsoncpp/test/data/test_real_12.expected b/3rdParty/jsoncpp/test/data/test_real_12.expected
deleted file mode 100644
index 93e2417d3424dea1b27519620b2a3b245e1213ae..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_12.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-// 2^64 -> switch to double.
-.=1.844674407370955e+19
diff --git a/3rdParty/jsoncpp/test/data/test_real_12.json b/3rdParty/jsoncpp/test/data/test_real_12.json
deleted file mode 100644
index 0a13eed2200bbf0cd5931af710b92becbcdb98c4..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_real_12.json
+++ /dev/null
@@ -1,2 +0,0 @@
-// 2^64 -> switch to double.
-18446744073709551616
diff --git a/3rdParty/jsoncpp/test/data/test_string_01.expected b/3rdParty/jsoncpp/test/data/test_string_01.expected
deleted file mode 100644
index 8fd37b1e0e7dc2ace687eb8091a007d616b985b5..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_01.expected
+++ /dev/null
@@ -1 +0,0 @@
-.="!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_string_01.json b/3rdParty/jsoncpp/test/data/test_string_01.json
deleted file mode 100644
index 6cd0db44dfcb3bd7e6068e4a3e47e1b7eb19f480..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_01.json
+++ /dev/null
@@ -1 +0,0 @@
-"!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
diff --git a/3rdParty/jsoncpp/test/data/test_string_02.expected b/3rdParty/jsoncpp/test/data/test_string_02.expected
deleted file mode 100644
index 0443bc3649dbb38b6abd5824e4d954b96ff07aa6..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_02.expected
+++ /dev/null
@@ -1 +0,0 @@
-.="!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_string_02.json b/3rdParty/jsoncpp/test/data/test_string_02.json
deleted file mode 100644
index 9a7e5dcad43939068203d9a966356abba21d69c6..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_02.json
+++ /dev/null
@@ -1 +0,0 @@
-"!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
diff --git a/3rdParty/jsoncpp/test/data/test_string_03.expected b/3rdParty/jsoncpp/test/data/test_string_03.expected
deleted file mode 100644
index 6ed627a850314127cd508f8bf179d0a56da51290..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_03.expected
+++ /dev/null
@@ -1 +0,0 @@
-.="http://jsoncpp.sourceforge.net/"
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_string_03.json b/3rdParty/jsoncpp/test/data/test_string_03.json
deleted file mode 100644
index 2d38180aea14e955d0874ee6d469c11e6794fa4d..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_03.json
+++ /dev/null
@@ -1 +0,0 @@
-"http:\/\/jsoncpp.sourceforge.net\/"
diff --git a/3rdParty/jsoncpp/test/data/test_string_04.expected b/3rdParty/jsoncpp/test/data/test_string_04.expected
deleted file mode 100644
index f57d5256c496c080b50bc0f6648da693c76a09eb..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_04.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.=""abc\def""
-
diff --git a/3rdParty/jsoncpp/test/data/test_string_04.json b/3rdParty/jsoncpp/test/data/test_string_04.json
deleted file mode 100644
index 01fe7524ceb74a89337205a8a264d1aa6dd1606f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_04.json
+++ /dev/null
@@ -1,2 +0,0 @@
-"\"abc\\def\""
-
diff --git a/3rdParty/jsoncpp/test/data/test_string_05.expected b/3rdParty/jsoncpp/test/data/test_string_05.expected
deleted file mode 100644
index 9794dddb4d79130991f9a50adb2c933947e72d80..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_05.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.="\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
-
diff --git a/3rdParty/jsoncpp/test/data/test_string_05.json b/3rdParty/jsoncpp/test/data/test_string_05.json
deleted file mode 100644
index e156024d5ae5b9c77c18790d91542df4f73b53dc..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_05.json
+++ /dev/null
@@ -1,2 +0,0 @@
-"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
-
diff --git a/3rdParty/jsoncpp/test/data/test_string_unicode_01.expected b/3rdParty/jsoncpp/test/data/test_string_unicode_01.expected
deleted file mode 100644
index 1f3be7fb68737ea94c864083dc9052387314ecb6..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_unicode_01.expected
+++ /dev/null
@@ -1 +0,0 @@
-.="a"
diff --git a/3rdParty/jsoncpp/test/data/test_string_unicode_01.json b/3rdParty/jsoncpp/test/data/test_string_unicode_01.json
deleted file mode 100644
index 024114bc095f8fd7b521c1a447c4a2a0232f9f6f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_unicode_01.json
+++ /dev/null
@@ -1 +0,0 @@
-"\u0061"
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_string_unicode_02.expected b/3rdParty/jsoncpp/test/data/test_string_unicode_02.expected
deleted file mode 100644
index 1388f539432a4fd5d8ffcc4756122da2c3fb25ba..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_unicode_02.expected
+++ /dev/null
@@ -1 +0,0 @@
-.="¢"
diff --git a/3rdParty/jsoncpp/test/data/test_string_unicode_02.json b/3rdParty/jsoncpp/test/data/test_string_unicode_02.json
deleted file mode 100644
index 4961024fab43155130efb11c0d1ded935fb6a541..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_unicode_02.json
+++ /dev/null
@@ -1 +0,0 @@
-"\u00A2"
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_string_unicode_03.expected b/3rdParty/jsoncpp/test/data/test_string_unicode_03.expected
deleted file mode 100644
index 9b80b2719f19543447c3ceb82802a864734de0bb..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_unicode_03.expected
+++ /dev/null
@@ -1 +0,0 @@
-.="€"
diff --git a/3rdParty/jsoncpp/test/data/test_string_unicode_03.json b/3rdParty/jsoncpp/test/data/test_string_unicode_03.json
deleted file mode 100644
index e7e1a9e1388a3094b9c6bebe7019d35e6130dd92..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_unicode_03.json
+++ /dev/null
@@ -1 +0,0 @@
-"\u20AC"
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_string_unicode_04.expected b/3rdParty/jsoncpp/test/data/test_string_unicode_04.expected
deleted file mode 100644
index b9e7fe3b7d5199fb56c42cb53c64df5da4efdbe2..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_unicode_04.expected
+++ /dev/null
@@ -1 +0,0 @@
-.="𝄞"
diff --git a/3rdParty/jsoncpp/test/data/test_string_unicode_04.json b/3rdParty/jsoncpp/test/data/test_string_unicode_04.json
deleted file mode 100644
index dae65c515546b3decb3287a94c656d31151de3b2..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_unicode_04.json
+++ /dev/null
@@ -1 +0,0 @@
-"\uD834\uDD1E"
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/data/test_string_unicode_05.expected b/3rdParty/jsoncpp/test/data/test_string_unicode_05.expected
deleted file mode 100644
index c2e67f99819a1a2fb97098ba11e33145008657ec..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_unicode_05.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-.="Zażółć gęślą jaźń"
-
diff --git a/3rdParty/jsoncpp/test/data/test_string_unicode_05.json b/3rdParty/jsoncpp/test/data/test_string_unicode_05.json
deleted file mode 100644
index 87704109462cf93abb40fdab3ad2d12537ea9690..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/data/test_string_unicode_05.json
+++ /dev/null
@@ -1 +0,0 @@
-"Zażółć gęślą jaźń"
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/generate_expected.py b/3rdParty/jsoncpp/test/generate_expected.py
deleted file mode 100644
index e049ab5f4d123363f0eccef749bf4a8a420de253..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/generate_expected.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2007 Baptiste Lepilleur and The JsonCpp Authors
-# Distributed under MIT license, or public domain if desired and
-# recognized in your jurisdiction.
-# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-from __future__ import print_function
-import glob
-import os.path
-for path in glob.glob('*.json'):
-    text = file(path,'rt').read()
-    target = os.path.splitext(path)[0] + '.expected'
-    if os.path.exists(target):
-        print('skipping:', target)
-    else:
-        print('creating:', target)
-        file(target,'wt').write(text)
-
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail1.json b/3rdParty/jsoncpp/test/jsonchecker/fail1.json
deleted file mode 100644
index 6216b865f10219c51c6af21e7a68641bab77ee4f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail1.json
+++ /dev/null
@@ -1 +0,0 @@
-"A JSON payload should be an object or array, not a string."
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail10.json b/3rdParty/jsoncpp/test/jsonchecker/fail10.json
deleted file mode 100644
index 5d8c0047bd522dfa9fbc642051ed76bd3162d936..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail10.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Extra value after close": true} "misplaced quoted value"
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail11.json b/3rdParty/jsoncpp/test/jsonchecker/fail11.json
deleted file mode 100644
index 76eb95b4583c8ee74eee3bdc25e1db69e1aaf4bb..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail11.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Illegal expression": 1 + 2}
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail12.json b/3rdParty/jsoncpp/test/jsonchecker/fail12.json
deleted file mode 100644
index 77580a4522d8c79245851e72a3644a0709b3d28c..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail12.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Illegal invocation": alert()}
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail13.json b/3rdParty/jsoncpp/test/jsonchecker/fail13.json
deleted file mode 100644
index 379406b59bdb943f145afea98ff1bbc45d43ff45..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail13.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Numbers cannot have leading zeroes": 013}
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail14.json b/3rdParty/jsoncpp/test/jsonchecker/fail14.json
deleted file mode 100644
index 0ed366b38a34f551c25735bdcb9282d27beae026..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail14.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Numbers cannot be hex": 0x14}
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail15.json b/3rdParty/jsoncpp/test/jsonchecker/fail15.json
deleted file mode 100644
index fc8376b605da69dda23f3fcdd9816dcbf2e736cc..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail15.json
+++ /dev/null
@@ -1 +0,0 @@
-["Illegal backslash escape: \x15"]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail16.json b/3rdParty/jsoncpp/test/jsonchecker/fail16.json
deleted file mode 100644
index 3fe21d4b532498c8b90872ef571c6867f45e645f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail16.json
+++ /dev/null
@@ -1 +0,0 @@
-[\naked]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail17.json b/3rdParty/jsoncpp/test/jsonchecker/fail17.json
deleted file mode 100644
index 62b9214aeda6d74a72ebeceedf0aae3609f1c638..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail17.json
+++ /dev/null
@@ -1 +0,0 @@
-["Illegal backslash escape: \017"]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail18.json b/3rdParty/jsoncpp/test/jsonchecker/fail18.json
deleted file mode 100644
index edac92716f186e39d0e3c818b8b110b9a2c4add5..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail18.json
+++ /dev/null
@@ -1 +0,0 @@
-[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail19.json b/3rdParty/jsoncpp/test/jsonchecker/fail19.json
deleted file mode 100644
index 3b9c46fa9a296c9d8c35ce4a6592d8bb7ffe748a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail19.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Missing colon" null}
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail2.json b/3rdParty/jsoncpp/test/jsonchecker/fail2.json
deleted file mode 100644
index 6b7c11e5a56537f81e651980359c62e263f7399f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail2.json
+++ /dev/null
@@ -1 +0,0 @@
-["Unclosed array"
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail20.json b/3rdParty/jsoncpp/test/jsonchecker/fail20.json
deleted file mode 100644
index 27c1af3e72ee37bbf64ccd7b77c5bad8cdea1557..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail20.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Double colon":: null}
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail21.json b/3rdParty/jsoncpp/test/jsonchecker/fail21.json
deleted file mode 100644
index 62474573b2160adefc3dc669b39200ea659d6e59..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail21.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Comma instead of colon", null}
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail22.json b/3rdParty/jsoncpp/test/jsonchecker/fail22.json
deleted file mode 100644
index a7752581bcf7f3b901aef052a2df541c1285b6c2..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail22.json
+++ /dev/null
@@ -1 +0,0 @@
-["Colon instead of comma": false]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail23.json b/3rdParty/jsoncpp/test/jsonchecker/fail23.json
deleted file mode 100644
index 494add1ca190e12acd1c8e34ac819a6316c927bc..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail23.json
+++ /dev/null
@@ -1 +0,0 @@
-["Bad value", truth]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail24.json b/3rdParty/jsoncpp/test/jsonchecker/fail24.json
deleted file mode 100644
index caff239bfc36297da08828095105bb497b8aef2a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail24.json
+++ /dev/null
@@ -1 +0,0 @@
-['single quote']
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail25.json b/3rdParty/jsoncpp/test/jsonchecker/fail25.json
deleted file mode 100644
index 8b7ad23e010314591d914519996c28483b5dadc8..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail25.json
+++ /dev/null
@@ -1 +0,0 @@
-["	tab	character	in	string	"]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail26.json b/3rdParty/jsoncpp/test/jsonchecker/fail26.json
deleted file mode 100644
index 845d26a6a54398c49cd492e6836c0d1987f554e4..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail26.json
+++ /dev/null
@@ -1 +0,0 @@
-["tab\   character\   in\  string\  "]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail27.json b/3rdParty/jsoncpp/test/jsonchecker/fail27.json
deleted file mode 100644
index 6b01a2ca4a97ec36604771dcc3175bbcda865d85..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail27.json
+++ /dev/null
@@ -1,2 +0,0 @@
-["line
-break"]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail28.json b/3rdParty/jsoncpp/test/jsonchecker/fail28.json
deleted file mode 100644
index 621a0101c664a619457d16f1107a677c911481b4..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail28.json
+++ /dev/null
@@ -1,2 +0,0 @@
-["line\
-break"]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail29.json b/3rdParty/jsoncpp/test/jsonchecker/fail29.json
deleted file mode 100644
index 47ec421bb6242648e80b2b465049acbae1e6e44a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail29.json
+++ /dev/null
@@ -1 +0,0 @@
-[0e]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail3.json b/3rdParty/jsoncpp/test/jsonchecker/fail3.json
deleted file mode 100644
index 168c81eb78537ea4006ea0a46b67851d9995564d..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail3.json
+++ /dev/null
@@ -1 +0,0 @@
-{unquoted_key: "keys must be quoted"}
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail30.json b/3rdParty/jsoncpp/test/jsonchecker/fail30.json
deleted file mode 100644
index 8ab0bc4b8b2c73b616a45931d05720555a2f7762..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail30.json
+++ /dev/null
@@ -1 +0,0 @@
-[0e+]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail31.json b/3rdParty/jsoncpp/test/jsonchecker/fail31.json
deleted file mode 100644
index 1cce602b518fc6e7f164a58cc710def27e64b8a5..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail31.json
+++ /dev/null
@@ -1 +0,0 @@
-[0e+-1]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail32.json b/3rdParty/jsoncpp/test/jsonchecker/fail32.json
deleted file mode 100644
index 45cba7396ff7462dd6de005c32fd2a95c5318e5f..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail32.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Comma instead if closing brace": true,
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail33.json b/3rdParty/jsoncpp/test/jsonchecker/fail33.json
deleted file mode 100644
index ca5eb19dc97f5ca363ff33a4c3644ad28e612679..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail33.json
+++ /dev/null
@@ -1 +0,0 @@
-["mismatch"}
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail4.json b/3rdParty/jsoncpp/test/jsonchecker/fail4.json
deleted file mode 100644
index 9de168bf34e2e368d044bccc099d44b02316de66..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail4.json
+++ /dev/null
@@ -1 +0,0 @@
-["extra comma",]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail5.json b/3rdParty/jsoncpp/test/jsonchecker/fail5.json
deleted file mode 100644
index ddf3ce3d2409467011ec7545551d5d078bce1bfd..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail5.json
+++ /dev/null
@@ -1 +0,0 @@
-["double extra comma",,]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail6.json b/3rdParty/jsoncpp/test/jsonchecker/fail6.json
deleted file mode 100644
index ed91580e1b1c15194a9a758f1b231575074722db..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail6.json
+++ /dev/null
@@ -1 +0,0 @@
-[   , "<-- missing value"]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail7.json b/3rdParty/jsoncpp/test/jsonchecker/fail7.json
deleted file mode 100644
index 8a96af3e4ee6c7fffd8da641dedcd750a5cc4d9d..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail7.json
+++ /dev/null
@@ -1 +0,0 @@
-["Comma after the close"],
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail8.json b/3rdParty/jsoncpp/test/jsonchecker/fail8.json
deleted file mode 100644
index b28479c6ecb21a801d6988b9ea39a4eb00a64702..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail8.json
+++ /dev/null
@@ -1 +0,0 @@
-["Extra close"]]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/fail9.json b/3rdParty/jsoncpp/test/jsonchecker/fail9.json
deleted file mode 100644
index 5815574f363e58cf91578e909ef4dabb402a75de..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/fail9.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Extra comma": true,}
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/pass1.json b/3rdParty/jsoncpp/test/jsonchecker/pass1.json
deleted file mode 100644
index 70e26854369282e625e75b302782f581e610f2b3..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/pass1.json
+++ /dev/null
@@ -1,58 +0,0 @@
-[
-    "JSON Test Pattern pass1",
-    {"object with 1 member":["array with 1 element"]},
-    {},
-    [],
-    -42,
-    true,
-    false,
-    null,
-    {
-        "integer": 1234567890,
-        "real": -9876.543210,
-        "e": 0.123456789e-12,
-        "E": 1.234567890E+34,
-        "":  23456789012E66,
-        "zero": 0,
-        "one": 1,
-        "space": " ",
-        "quote": "\"",
-        "backslash": "\\",
-        "controls": "\b\f\n\r\t",
-        "slash": "/ & \/",
-        "alpha": "abcdefghijklmnopqrstuvwyz",
-        "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
-        "digit": "0123456789",
-        "0123456789": "digit",
-        "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
-        "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
-        "true": true,
-        "false": false,
-        "null": null,
-        "array":[  ],
-        "object":{  },
-        "address": "50 St. James Street",
-        "url": "http://www.JSON.org/",
-        "comment": "// /* <!-- --",
-        "# -- --> */": " ",
-        " s p a c e d " :[1,2 , 3
-
-,
-
-4 , 5        ,          6           ,7        ],"compact":[1,2,3,4,5,6,7],
-        "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
-        "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
-        "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
-: "A key can be any string"
-    },
-    0.5 ,98.6
-,
-99.44
-,
-
-1066,
-1e1,
-0.1e1,
-1e-1,
-1e00,2e+00,2e-00
-,"rosebud"]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/pass2.json b/3rdParty/jsoncpp/test/jsonchecker/pass2.json
deleted file mode 100644
index d3c63c7ad845e4cedd0c70d13102b38c51ec197a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/pass2.json
+++ /dev/null
@@ -1 +0,0 @@
-[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
\ No newline at end of file
diff --git a/3rdParty/jsoncpp/test/jsonchecker/pass3.json b/3rdParty/jsoncpp/test/jsonchecker/pass3.json
deleted file mode 100644
index 4528d51f1ac615e7e11dbb1321dc99187705f0d8..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/pass3.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-    "JSON Test Pattern pass3": {
-        "The outermost value": "must be an object or array.",
-        "In this test": "It is an object."
-    }
-}
diff --git a/3rdParty/jsoncpp/test/jsonchecker/readme.txt b/3rdParty/jsoncpp/test/jsonchecker/readme.txt
deleted file mode 100644
index 321d89d998ed2af42791485557cb83c513050182..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/jsonchecker/readme.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Test suite from http://json.org/JSON_checker/.
-
-If the JSON_checker is working correctly, it must accept all of the pass*.json files and reject all of the fail*.json files.
diff --git a/3rdParty/jsoncpp/test/pyjsontestrunner.py b/3rdParty/jsoncpp/test/pyjsontestrunner.py
deleted file mode 100644
index bd749b530f30e8264221faf0f92df65de7294910..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/pyjsontestrunner.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright 2007 Baptiste Lepilleur and The JsonCpp Authors
-# Distributed under MIT license, or public domain if desired and
-# recognized in your jurisdiction.
-# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-"""Simple implementation of a json test runner to run the test against
-json-py."""
-
-from __future__ import print_function
-import sys
-import os.path
-import json
-import types
-
-if len(sys.argv) != 2:
-    print("Usage: %s input-json-file", sys.argv[0])
-    sys.exit(3)
-    
-input_path = sys.argv[1]
-base_path = os.path.splitext(input_path)[0]
-actual_path = base_path + '.actual'
-rewrite_path = base_path + '.rewrite'
-rewrite_actual_path = base_path + '.actual-rewrite'
-
-def valueTreeToString(fout, value, path = '.'):
-    ty = type(value) 
-    if ty  is types.DictType:
-        fout.write('%s={}\n' % path)
-        suffix = path[-1] != '.' and '.' or ''
-        names = value.keys()
-        names.sort()
-        for name in names:
-            valueTreeToString(fout, value[name], path + suffix + name)
-    elif ty is types.ListType:
-        fout.write('%s=[]\n' % path)
-        for index, childValue in zip(xrange(0,len(value)), value):
-            valueTreeToString(fout, childValue, path + '[%d]' % index)
-    elif ty is types.StringType:
-        fout.write('%s="%s"\n' % (path,value))
-    elif ty is types.IntType:
-        fout.write('%s=%d\n' % (path,value))
-    elif ty is types.FloatType:
-        fout.write('%s=%.16g\n' % (path,value))
-    elif value is True:
-        fout.write('%s=true\n' % path)
-    elif value is False:
-        fout.write('%s=false\n' % path)
-    elif value is None:
-        fout.write('%s=null\n' % path)
-    else:
-        assert False and "Unexpected value type"
-        
-def parseAndSaveValueTree(input, actual_path):
-    root = json.loads(input)
-    fout = file(actual_path, 'wt')
-    valueTreeToString(fout, root)
-    fout.close()
-    return root
-
-def rewriteValueTree(value, rewrite_path):
-    rewrite = json.dumps(value)
-    #rewrite = rewrite[1:-1]  # Somehow the string is quoted ! jsonpy bug ?
-    file(rewrite_path, 'wt').write(rewrite + '\n')
-    return rewrite
-    
-input = file(input_path, 'rt').read()
-root = parseAndSaveValueTree(input, actual_path)
-rewrite = rewriteValueTree(json.write(root), rewrite_path)
-rewrite_root = parseAndSaveValueTree(rewrite, rewrite_actual_path)
-
-sys.exit(0)
diff --git a/3rdParty/jsoncpp/test/runjsontests.py b/3rdParty/jsoncpp/test/runjsontests.py
deleted file mode 100644
index 48cfe823509791a51d29c59a790722646a57c56c..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/runjsontests.py
+++ /dev/null
@@ -1,174 +0,0 @@
-# Copyright 2007 Baptiste Lepilleur and The JsonCpp Authors
-# Distributed under MIT license, or public domain if desired and
-# recognized in your jurisdiction.
-# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-from __future__ import print_function
-from __future__ import unicode_literals
-from io import open
-from glob import glob
-import sys
-import os
-import os.path
-import optparse
-
-VALGRIND_CMD = 'valgrind --tool=memcheck --leak-check=yes --undef-value-errors=yes '
-
-def getStatusOutput(cmd):
-    """
-    Return int, unicode (for both Python 2 and 3).
-    Note: os.popen().close() would return None for 0.
-    """
-    print(cmd, file=sys.stderr)
-    pipe = os.popen(cmd)
-    process_output = pipe.read()
-    try:
-        # We have been using os.popen(). When we read() the result
-        # we get 'str' (bytes) in py2, and 'str' (unicode) in py3.
-        # Ugh! There must be a better way to handle this.
-        process_output = process_output.decode('utf-8')
-    except AttributeError:
-        pass  # python3
-    status = pipe.close()
-    return status, process_output
-def compareOutputs(expected, actual, message):
-    expected = expected.strip().replace('\r','').split('\n')
-    actual = actual.strip().replace('\r','').split('\n')
-    diff_line = 0
-    max_line_to_compare = min(len(expected), len(actual))
-    for index in range(0,max_line_to_compare):
-        if expected[index].strip() != actual[index].strip():
-            diff_line = index + 1
-            break
-    if diff_line == 0 and len(expected) != len(actual):
-        diff_line = max_line_to_compare+1
-    if diff_line == 0:
-        return None
-    def safeGetLine(lines, index):
-        index += -1
-        if index >= len(lines):
-            return ''
-        return lines[index].strip()
-    return """  Difference in %s at line %d:
-  Expected: '%s'
-  Actual:   '%s'
-""" % (message, diff_line,
-       safeGetLine(expected,diff_line),
-       safeGetLine(actual,diff_line))
-        
-def safeReadFile(path):
-    try:
-        return open(path, 'rt', encoding = 'utf-8').read()
-    except IOError as e:
-        return '<File "%s" is missing: %s>' % (path,e)
-
-def runAllTests(jsontest_executable_path, input_dir = None,
-                 use_valgrind=False, with_json_checker=False,
-                 writerClass='StyledWriter'):
-    if not input_dir:
-        input_dir = os.path.join(os.getcwd(), 'data')
-    tests = glob(os.path.join(input_dir, '*.json'))
-    if with_json_checker:
-        test_jsonchecker = glob(os.path.join(input_dir, '../jsonchecker', '*.json'))
-    else:
-        test_jsonchecker = []
-    failed_tests = []
-    valgrind_path = use_valgrind and VALGRIND_CMD or ''
-    for input_path in tests + test_jsonchecker:
-        expect_failure = os.path.basename(input_path).startswith('fail')
-        is_json_checker_test = (input_path in test_jsonchecker) or expect_failure
-        print('TESTING:', input_path, end=' ')
-        options = is_json_checker_test and '--json-checker' or ''
-        options += ' --json-writer %s'%writerClass
-        cmd = '%s%s %s "%s"' % (            valgrind_path, jsontest_executable_path, options,
-            input_path)
-        status, process_output = getStatusOutput(cmd)
-        if is_json_checker_test:
-            if expect_failure:
-                if not status:
-                    print('FAILED')
-                    failed_tests.append((input_path, 'Parsing should have failed:\n%s' %
-                                          safeReadFile(input_path)))
-                else:
-                    print('OK')
-            else:
-                if status:
-                    print('FAILED')
-                    failed_tests.append((input_path, 'Parsing failed:\n' + process_output))
-                else:
-                    print('OK')
-        else:
-            base_path = os.path.splitext(input_path)[0]
-            actual_output = safeReadFile(base_path + '.actual')
-            actual_rewrite_output = safeReadFile(base_path + '.actual-rewrite')
-            open(base_path + '.process-output', 'wt', encoding = 'utf-8').write(process_output)
-            if status:
-                print('parsing failed')
-                failed_tests.append((input_path, 'Parsing failed:\n' + process_output))
-            else:
-                expected_output_path = os.path.splitext(input_path)[0] + '.expected'
-                expected_output = open(expected_output_path, 'rt', encoding = 'utf-8').read()
-                detail = (compareOutputs(expected_output, actual_output, 'input')
-                            or compareOutputs(expected_output, actual_rewrite_output, 'rewrite'))
-                if detail:
-                    print('FAILED')
-                    failed_tests.append((input_path, detail))
-                else:
-                    print('OK')
-
-    if failed_tests:
-        print()
-        print('Failure details:')
-        for failed_test in failed_tests:
-            print('* Test', failed_test[0])
-            print(failed_test[1])
-            print()
-        print('Test results: %d passed, %d failed.' % (len(tests)-len(failed_tests),
-                                                       len(failed_tests)))
-        return 1
-    else:
-        print('All %d tests passed.' % len(tests))
-        return 0
-
-def main():
-    from optparse import OptionParser
-    parser = OptionParser(usage="%prog [options] <path to jsontestrunner.exe> [test case directory]")
-    parser.add_option("--valgrind",
-                  action="store_true", dest="valgrind", default=False,
-                  help="run all the tests using valgrind to detect memory leaks")
-    parser.add_option("-c", "--with-json-checker",
-                  action="store_true", dest="with_json_checker", default=False,
-                  help="run all the tests from the official JSONChecker test suite of json.org")
-    parser.enable_interspersed_args()
-    options, args = parser.parse_args()
-
-    if len(args) < 1 or len(args) > 2:
-        parser.error('Must provides at least path to jsontestrunner executable.')
-        sys.exit(1)
-
-    jsontest_executable_path = os.path.normpath(os.path.abspath(args[0]))
-    if len(args) > 1:
-        input_path = os.path.normpath(os.path.abspath(args[1]))
-    else:
-        input_path = None
-    status = runAllTests(jsontest_executable_path, input_path,
-                         use_valgrind=options.valgrind,
-                         with_json_checker=options.with_json_checker,
-                         writerClass='StyledWriter')
-    if status:
-        sys.exit(status)
-    status = runAllTests(jsontest_executable_path, input_path,
-                         use_valgrind=options.valgrind,
-                         with_json_checker=options.with_json_checker,
-                         writerClass='StyledStreamWriter')
-    if status:
-        sys.exit(status)
-    status = runAllTests(jsontest_executable_path, input_path,
-                         use_valgrind=options.valgrind,
-                         with_json_checker=options.with_json_checker,
-                         writerClass='BuiltStyledStreamWriter')
-    if status:
-        sys.exit(status)
-
-if __name__ == '__main__':
-    main()
diff --git a/3rdParty/jsoncpp/test/rununittests.py b/3rdParty/jsoncpp/test/rununittests.py
deleted file mode 100644
index 6634e72419678ca43fc8b0876d0a9c79777a7e50..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/test/rununittests.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# Copyright 2009 Baptiste Lepilleur and The JsonCpp Authors
-# Distributed under MIT license, or public domain if desired and
-# recognized in your jurisdiction.
-# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-from __future__ import print_function
-from __future__ import unicode_literals
-from io import open
-from glob import glob
-import sys
-import os
-import os.path
-import subprocess
-import optparse
-
-VALGRIND_CMD = 'valgrind --tool=memcheck --leak-check=yes --undef-value-errors=yes'
-
-class TestProxy(object):
-    def __init__(self, test_exe_path, use_valgrind=False):
-        self.test_exe_path = os.path.normpath(os.path.abspath(test_exe_path))
-        self.use_valgrind = use_valgrind
-
-    def run(self, options):
-        if self.use_valgrind:
-            cmd = VALGRIND_CMD.split()
-        else:
-            cmd = []
-        cmd.extend([self.test_exe_path, '--test-auto'] + options)
-        try:
-            process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-        except:
-            print(cmd)
-            raise
-        stdout = process.communicate()[0]
-        if process.returncode:
-            return False, stdout
-        return True, stdout
-
-def runAllTests(exe_path, use_valgrind=False):
-    test_proxy = TestProxy(exe_path, use_valgrind=use_valgrind)
-    status, test_names = test_proxy.run(['--list-tests'])
-    if not status:
-        print("Failed to obtain unit tests list:\n" + test_names, file=sys.stderr)
-        return 1
-    test_names = [name.strip() for name in test_names.decode('utf-8').strip().split('\n')]
-    failures = []
-    for name in test_names:
-        print('TESTING %s:' % name, end=' ')
-        succeed, result = test_proxy.run(['--test', name])
-        if succeed:
-            print('OK')
-        else:
-            failures.append((name, result))
-            print('FAILED')
-    failed_count = len(failures)
-    pass_count = len(test_names) - failed_count
-    if failed_count:
-        print()
-        for name, result in failures:
-            print(result)
-        print('%d/%d tests passed (%d failure(s))' % (            pass_count, len(test_names), failed_count))
-        return 1
-    else:
-        print('All %d tests passed' % len(test_names))
-        return 0
-
-def main():
-    from optparse import OptionParser
-    parser = OptionParser(usage="%prog [options] <path to test_lib_json.exe>")
-    parser.add_option("--valgrind",
-                  action="store_true", dest="valgrind", default=False,
-                  help="run all the tests using valgrind to detect memory leaks")
-    parser.enable_interspersed_args()
-    options, args = parser.parse_args()
-
-    if len(args) != 1:
-        parser.error('Must provides at least path to test_lib_json executable.')
-        sys.exit(1)
-
-    exit_code = runAllTests(args[0], use_valgrind=options.valgrind)
-    sys.exit(exit_code)
-
-if __name__ == '__main__':
-    main()
diff --git a/3rdParty/jsoncpp/travis.sh b/3rdParty/jsoncpp/travis.sh
deleted file mode 100644
index f80424bd7e3b99ee36459f2ff3d1a8cc40274040..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/travis.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env sh
-# This is called by `.travis.yml` via Travis CI.
-# Travis supplies $TRAVIS_OS_NAME.
-#  http://docs.travis-ci.com/user/multi-os/
-# Our .travis.yml also defines:
-#   - SHARED_LIB=ON/OFF
-#   - STATIC_LIB=ON/OFF
-#   - CMAKE_PKG=ON/OFF
-#   - BUILD_TYPE=release/debug
-#   - VERBOSE_MAKE=false/true
-#   - VERBOSE (set or not)
-
-# -e: fail on error
-# -v: show commands
-# -x: show expanded commands
-set -vex
-
-env | sort
-
-meson --buildtype ${BUILD_TYPE} --default-library ${LIB_TYPE} . build-${LIB_TYPE}
-ninja -v -C build-${LIB_TYPE}
-ninja -v -C build-${LIB_TYPE} test
-rm -r build-${LIB_TYPE}
diff --git a/3rdParty/jsoncpp/version b/3rdParty/jsoncpp/version
deleted file mode 100644
index a7ee35a3ea7047e281c38c1db29eb4990ec24385..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/version
+++ /dev/null
@@ -1 +0,0 @@
-1.8.3
diff --git a/3rdParty/jsoncpp/version.in b/3rdParty/jsoncpp/version.in
deleted file mode 100644
index bfc03f7dd72966d27d9617202978b8924b591c0a..0000000000000000000000000000000000000000
--- a/3rdParty/jsoncpp/version.in
+++ /dev/null
@@ -1 +0,0 @@
-@JSONCPP_VERSION@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ec5f5dbedbdb2f6b7d38fc39b6b864f3e33559e2..7effd22cff1b1569dfd05d25794680490f86b82a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,7 +49,9 @@ option(BUILD_VF_GPU "Build VirtualFluids gpu variant" OFF)
 
 option(BUILD_USE_OPENMP "Build VirtualFluids with openmp" ON)
 option(BUILD_USE_BOOST "Build VirtualFluids with boost" OFF)
-option(BUILD_USE_MPI "include MPI library support" ON)
+
+# TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/139
+# option(BUILD_USE_MPI "include MPI library support" ON)
 
 # vf gpu
 option(BUILD_NUMERIC_TESTS   "Build numeric tests"         OFF)
@@ -190,10 +192,11 @@ if(BUILD_USE_OPENMP)
     find_package(OpenMP REQUIRED)
 endif()
 
-if(BUILD_USE_MPI)
+# TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/139
+# if(BUILD_USE_MPI) 
     find_package(MPI REQUIRED)
     list(APPEND VF_COMPILER_DEFINITION VF_MPI)
-endif()
+# endif()
 
 # boost
 IF(BUILD_USE_BOOST)
diff --git a/Python/actuator_line/actuator_line.py b/Python/actuator_line/actuator_line.py
index 00fa21baeae9d075f4ebeb49baa9d13394ae4b94..f3780154dabf5e8a00632ef09a5f4c2db849a1e8 100644
--- a/Python/actuator_line/actuator_line.py
+++ b/Python/actuator_line/actuator_line.py
@@ -36,7 +36,7 @@ r"""
 import numpy as np
 from pathlib import Path
 from mpi4py import MPI
-from pyfluids import basics, gpu, logger, communicator
+from pyfluids import basics, gpu, logger, parallel
 #%%
 sim_name = "ABL"
 config_file = Path(__file__).parent/"configActuatorLine.txt"
@@ -44,19 +44,24 @@ output_path = Path(__file__).parent/Path("output")
 output_path.mkdir(exist_ok=True)
 
 
+def get_velocity(z, u_star, kappa, z0):
+    return u_star/kappa*np.log(z/z0+1)
 #%%
 logger.Logger.initialize_logger()
 
 grid_builder = gpu.grid_generator.MultipleGridBuilder()
-communicator = communicator.Communicator.get_instance()
+communicator = parallel.MPICommunicator.get_instance()
 
 config = basics.ConfigurationFile()
 config.load(str(config_file))
 
-para = gpu.Parameter(communicator.get_number_of_processes(), communicator.get_number_of_processes(), config)
+para = gpu.Parameter(communicator.get_number_of_processes(), communicator.get_process_id(), config)
 bc_factory = gpu.BoundaryConditionFactory()
 
 #%%
+use_refinement = config.get_bool_value("useRefinement", False)
+turbine_height = config.get_float_value("turbineHeight", 120)
+tip_speed_ratio = config.get_float_value("tipSpeedRatio", 7.55)
 turbine_diameter = config.get_float_value("turbineDiameter", 126)
 boundary_layer_height = config.get_float_value("boundaryLayerHeight", 1000)
 z0 = config.get_float_value("z0", 0.1)
@@ -66,17 +71,18 @@ kappa = config.get_float_value("vonKarmanConstant", 0.4) # von Karman constant
 
 viscosity = config.get_float_value("viscosity", 1.56e-5)
 
-velocity  = 0.5*u_star/kappa*np.log(boundary_layer_height/z0+1) #0.5 times max mean velocity at the top in m/s
+velocity  = 0.5*get_velocity(boundary_layer_height, u_star, kappa, z0) #0.5 times max mean velocity at the top in m/s
 
 mach = config.get_float_value("Ma", 0.1)
 nodes_per_height = config.get_uint_value("nz", 64)
 
+length = np.array([6,4,1])*boundary_layer_height
+turbine_positions_x = np.ones(1)*boundary_layer_height
+turbine_positions_y = np.ones(1)*length[1]/2
+turbine_positions_z = np.ones(1)*turbine_height
+level = 0
 
-turb_pos = np.array([3,3,3])*turbine_diameter
-epsilon = config.get_float_value("SmearingWidth", 5)
 density = config.get_float_value("Density", 1.225)
-level = 0
-n_blades = 3
 n_blade_nodes = config.get_int_value("NumberOfNodesPerAL", 32)
 
 read_precursor = config.get_bool_value("readPrecursor", False)
@@ -98,7 +104,6 @@ t_start_out_probe      =  config.get_float_value("tStartOutProbe")
 t_out_probe           =  config.get_float_value("tOutProbe")
 
 #%%
-length = np.array([6,4,1])*boundary_layer_height
 dx = boundary_layer_height/nodes_per_height
 dt = dx * mach / (np.sqrt(3) * velocity)
 velocity_ratio = dx/dt
@@ -127,7 +132,7 @@ para.set_velocity_ratio(dx/dt)
 para.set_viscosity_ratio(dx*dx/dt)
 para.set_density_ratio(1.0)
 
-para.set_main_kernel("CumulantK17")
+para.configure_main_kernel(gpu.kernel.compressible.K17CompressibleNavierStokes)
 
 para.set_timestep_start_out(int(t_start_out/dt))
 para.set_timestep_out(int(t_out/dt))
@@ -141,6 +146,11 @@ grid_scaling_factory = gpu.GridScalingFactory()
 grid_scaling_factory.set_scaling_factory(gpu.GridScaling.ScaleCompressible)
 
 grid_builder.add_coarse_grid(0.0, 0.0, 0.0, length[0], length[1], length[2], dx)
+
+if use_refinement:  
+    level = 1
+    grid_builder.add_grid(gpu.grid_generator.Cuboid(turbine_positions_x[0]- 3*turbine_diameter, turbine_positions_y[0]-3*turbine_diameter, 0,
+                                                    turbine_positions_x[0]+10*turbine_diameter, turbine_positions_y[0]+3*turbine_diameter, turbine_positions_z[0]+3*turbine_diameter), level)
 grid_builder.set_periodic_boundary_condition(not read_precursor, True, False)
 grid_builder.build_grids(False)
 
@@ -156,7 +166,7 @@ grid_builder.set_slip_boundary_condition(gpu.SideType.PZ, 0, 0, -1)
 if read_precursor:
     grid_builder.set_pressure_boundary_condition(gpu.SideType.PX, 0)
 bc_factory.set_stress_boundary_condition(gpu.StressBC.StressPressureBounceBack)
-bc_factory.set_slip_boundary_condition(gpu.SlipBC.SlipBounceBack) 
+bc_factory.set_slip_boundary_condition(gpu.SlipBC.SlipCompressibleTurbulentViscosity) 
 bc_factory.set_pressure_boundary_condition(gpu.PressureBC.OutflowNonReflective)
 if read_precursor:
     bc_factory.set_precursor_boundary_condition(gpu.PrecursorBC.DistributionsPrecursor if use_distributions else gpu.PrecursorBC.VelocityPrecursor)
@@ -174,16 +184,13 @@ para.set_outflow_pressure_correction_factor(0.0)
 para.set_initial_condition_perturbed_log_law(u_star, z0, length[0], length[2], boundary_layer_height, velocity_ratio)
 
 #%%
-turb_pos = np.array([3, 3, 3])*turbine_diameter
-epsilon = 1.5*dx
-density = 1.225
-level = 0
-n_blades = 3
-n_blade_nodes = 32
-omega = 1
-blade_radii = np.arange(n_blade_nodes, dtype=np.float32)/(0.5*turbine_diameter)
-alm = gpu.ActuatorFarm(n_blades, density, n_blade_nodes, epsilon, level, dt, dx, True)
-alm.add_turbine(turb_pos[0], turb_pos[1], turb_pos[2], turbine_diameter, omega, 0, 0, blade_radii)
+
+smearing_width = 1.5*dx
+blade_radius = 0.5*turbine_diameter
+hub_height_velocity = get_velocity(turbine_height, u_star, kappa, z0)
+rotor_speeds = np.ones(1)*tip_speed_ratio*hub_height_velocity/blade_radius
+alm = gpu.ActuatorFarmStandalone(turbine_diameter, n_blade_nodes, turbine_positions_x, turbine_positions_y, turbine_positions_z, rotor_speeds, density, smearing_width, level, dt, dx)
+alm.enable_output("ALM", int(t_start_out_probe/dt), int(t_out_probe/dt) )
 para.add_actuator(alm)
 #%%
 planar_average_probe = gpu.probes.PlanarAverageProbe("horizontalPlanes", para.get_output_path(), 0, int(t_start_tmp_averaging/dt), int(t_averaging/dt) , int(t_start_out_probe/dt), int(t_out_probe/dt), 'z')
@@ -211,7 +218,6 @@ for n_probe, probe_pos in enumerate(plane_locs):
 cuda_memory_manager = gpu.CudaMemoryManager(para)
 grid_generator = gpu.GridProvider.make_grid_generator(grid_builder, para, cuda_memory_manager, communicator)
 #%%
-#%%
 sim = gpu.Simulation(para, cuda_memory_manager, communicator, grid_generator, bc_factory, tm_factory, grid_scaling_factory)
 #%%
 sim.run()
diff --git a/Python/actuator_line_with_wifi/NREL5MW.cd b/Python/actuator_line_with_wifi/NREL5MW.cd
new file mode 100644
index 0000000000000000000000000000000000000000..36cdd133ea270a08196db65daa9a8a4c1e326747
--- /dev/null
+++ b/Python/actuator_line_with_wifi/NREL5MW.cd
@@ -0,0 +1,75 @@
+0	1	0.4	0.35	0.3	0.25	0.21	0.18
+-180	0.5	0.0602	0.0407	0.0267	0.0202	0.0185	0.0198		
+-170	0.5	0.1107	0.1055	0.0968	0.0943	0.0945	0.0955		 
+-160	0.5	0.3045	0.2982	0.2876	0.2848	0.2809	0.2807		
+-150	0.5	0.5355	0.5308	0.5232	0.5215	0.5112	0.5086		
+-140	0.5	0.7685	0.7672	0.7656	0.766	0.7485	0.7427		
+-130	0.5	0.9788	0.9819	0.9882	0.9911	0.9665	0.9574		
+-120	0.5	1.1499	1.158	1.173	1.1787	1.1476	1.1355		
+-110	0.5	1.2716	1.2847	1.3084	1.3168	1.2805	1.2656		
+-100	0.5	1.3378	1.3557	1.3875	1.3984	1.3582	1.341		
+-90	0.5	1.346	1.368	1.407	1.4201	1.3774	1.3587		
+-80	0.5	1.2964	1.3218	1.3664	1.3811	1.3376	1.3181		
+-70	0.5	1.1918	1.2193	1.2676	1.2833	1.2409	1.2212		
+-60	0.5	1.0376	1.066	1.1156	1.1315	1.0919	1.0731
+-50	0.5	0.8429	0.8705	0.9187	0.9341	0.899	0.882		
+-40	0.5	0.6215	0.6466	0.6904	0.7042	0.6754	0.661		
+-35	0.5	0.5067	0.5299	0.5703	0.5829	0.5579	0.5451		
+-30	0.5	0.3932	0.4141	0.4503	0.4616	0.4405	0.4295		
+-25	0.5	0.2849	0.303	0.3357	0.3441	0.3256	0.3071		
+-22	0.5	0.2242	0.2404	0.2752	0.273	0.2506	0.2297		
+-20	0.5	0.1861	0.2011	0.2388	0.2237	0.1983	0.1785		
+-18	0.5	0.1533	0.164	0.2056	0.1743	0.1457	0.1288		
+-16	0.5	0.1281	0.13	0.1754	0.1256	0.094	0.0786		
+-14	0.5	0.1101	0.1	0.1413	0.0789	0.0508	0.0283		
+-12	0.5	0.0986	0.0744	0.1015	0.0271	0.0271	0.0134		
+-10	0.5	0.0931	0.0534	0.0718	0.0287	0.0287	0.0111		
+-9	0.5	0.0931	0.0469	0.0545	0.0271	0.0201	0.0099		
+-8	0.5	0.093	0.0404	0.0254	0.0195	0.012	0.0091		
+-7	0.5	0.0809	0.034	0.0175	0.0105	0.009	0.0086		
+-6	0.5	0.0689	0.0275	0.0117	0.0091	0.0082	0.0082		
+-5	0.5	0.0547	0.0223	0.0097	0.0073	0.0069	0.0079		
+-4	0.5	0.0411	0.0173	0.0091	0.007	0.0063	0.0072		
+-3	0.5	0.0299	0.024	0.0089	0.0068	0.0058	0.0064		
+-2	0.5	0.0198	0.016	0.0088	0.0068	0.0057	0.0054		
+-1	0.5	0.0147	0.0118	0.0088	0.0067	0.0057	0.0052		
+0	0.5	0.0113	0.0094	0.0087	0.0065	0.0057	0.0052		
+1	0.5	0.0118	0.0098	0.0088	0.0066	0.0058	0.0052		
+2	0.5	0.0124	0.01	0.009	0.0068	0.0059	0.0053		
+3	0.5	0.0123	0.0103	0.0092	0.007	0.0063	0.0053		
+4	0.5	0.0119	0.0105	0.0095	0.0073	0.0071	0.0054		
+5	0.5	0.0125	0.0108	0.0097	0.0079	0.009	0.0058		
+6	0.5	0.0135	0.011	0.0101	0.0099	0.0113	0.0091		
+7	0.5	0.0158	0.0115	0.0107	0.0132	0.0131	0.0113		
+8	0.5	0.0198	0.012	0.0125	0.0153	0.0147	0.0124		
+9	0.5	0.0275	0.0133	0.0155	0.0181	0.0181	0.0136		
+10	0.5	0.0393	0.0156	0.0192	0.0262	0.0255	0.015		
+11	0.5	0.058	0.0194	0.0255	0.042	0.0347	0.0383		
+12	0.5	0.0816	0.0269	0.037	0.0601	0.0468	0.0613		
+13	0.5	0.1129	0.0398	0.063	0.0785	0.0633	0.0841		
+14	0.5	0.1469	0.0614	0.0931	0.1	0.0806	0.1065		
+15	0.5	0.1845	0.0979	0.1239	0.1219	0.0987	0.1287		
+16	0.5	0.225	0.1377	0.1592	0.1433	0.117	0.1509		
+17	0.5	0.2684	0.1814	0.1903	0.1649	0.1368	0.1728		
+18	0.5	0.3121	0.2316	0.2186	0.1845	0.1562	0.1947		
+19	0.5	0.3554	0.2719	0.2455	0.2061	0.177	0.2165		
+20	0.5	0.3997	0.3085	0.2689	0.228	0.1987	0.2379		
+22	0.5	0.483	0.382	0.3246	0.2814	0.2499	0.2799		
+25	0.5	0.6141	0.4988	0.4198	0.3678	0.3371	0.3377		
+30	0.5	0.8441	0.6978	0.5843	0.5149	0.4813	0.4294		
+35	0.5	1.0722	0.8869	0.7438	0.6548	0.6127	0.5324		
+40	0.5	1.2873	1.0671	0.897	0.7901	0.7396	0.6452		
+50	0.5	1.6401	1.3747	1.1686	1.0378	0.9781	0.8664		
+60	0.5	1.836	1.5728	1.3647	1.2333	1.1796	1.0693		
+70	0.5	1.8347	1.6302	1.4621	1.3587	1.3297	1.2438		
+80	0.5	1.6334	1.5423	1.4544	1.4063	1.4202	1.3809		
+90	0.5	1.3879	1.4041	1.3938	1.3985	1.4512	1.4565		
+100	0.5	1.3795	1.3914	1.3798	1.381	1.4294	1.4345		
+110	0.5	1.3114	1.3188	1.3063	1.3041	1.3464	1.3512		
+120	0.5	1.1864	1.1891	1.1763	1.1709	1.2057	1.2099		
+130	0.5	1.0102	1.0086	0.9962	0.9883	1.0144	1.0179		
+140	0.5	0.7935	0.7883	0.7771	0.7676	0.7845	0.7871		
+150	0.5	0.5532	0.5457	0.5364	0.5264	0.5346	0.5363		
+160	0.5	0.3147	0.3066	0.3	0.2912	0.2922	0.2931		
+170	0.5	0.1144	0.1085	0.1051	0.0995	0.0969	0.0971		
+180	0.5	0.0602	0.0407	0.0267	0.0202	0.0185	0.0198		
diff --git a/Python/actuator_line_with_wifi/NREL5MW.cl b/Python/actuator_line_with_wifi/NREL5MW.cl
new file mode 100644
index 0000000000000000000000000000000000000000..f4634706d806f9eb6c705952083d85fe179b5fe5
--- /dev/null
+++ b/Python/actuator_line_with_wifi/NREL5MW.cl
@@ -0,0 +1,75 @@
+0	1	0.4	0.35	0.3	0.25	0.21	0.18
+-180	0	0	0	0	0	0	0
+-170	0	0.397	0.405	0.547	0.735	0.788	0.749
+-160	0	0.642	0.658	0.685	0.695	0.67	0.659
+-150	0	0.757	0.778	0.816	0.828	0.797	0.783
+-140	0	0.762	0.787	0.832	0.846	0.813	0.798
+-130	0	0.68	0.708	0.756	0.771	0.739	0.724
+-120	0	0.532	0.56	0.609	0.624	0.596	0.581
+-110	0	0.337	0.365	0.411	0.426	0.403	0.39
+-100	0	0.114	0.139	0.182	0.195	0.179	0.169
+-90	0	-0.12	-0.098	-0.061	-0.05	-0.06	-0.067
+-80	0	-0.349	-0.331	-0.302	-0.294	-0.295	-0.299
+-70	0	-0.557	-0.544	-0.523	-0.518	-0.512	-0.512
+-60	0	-0.727	-0.72	-0.708	-0.706	-0.693	-0.689
+-50	0	-0.842	-0.84	-0.838	-0.839	-0.82	-0.814
+-40	0	-0.886	-0.889	-0.895	-0.898	-0.875	-0.866
+-35	0	-0.875	-0.88	-0.889	-0.893	-0.869	-0.86
+-30	0	-0.839	-0.846	-0.858	-0.862	-0.838	-0.829
+-25	0	-0.777	-0.784	-0.832	-0.803	-0.791	-0.853
+-22	0	-0.725	-0.733	-0.919	-0.792	-0.821	-0.911
+-20	0	-0.685	-0.693	-1.013	-0.815	-0.869	-0.958
+-18	0	-0.635	-0.648	-1.125	-0.854	-0.931	-1.005
+-16	0	-0.571	-0.601	-1.245	-0.905	-0.999	-1.113
+-14	0	-0.494	-0.559	-1.21	-0.959	-1.031	-1.078
+-12	0	-0.407	-0.519	-1.033	-0.952	-0.952	-0.904
+-10	0	-0.311	-0.48	-0.85	-0.828	-0.828	-0.711
+-9	0	-0.259	-0.459	-0.767	-0.754	-0.674	-0.595
+-8	0	-0.208	-0.437	-0.744	-0.628	-0.519	-0.478
+-7	0	-0.16	-0.416	-0.664	-0.493	-0.378	-0.375
+-6	0	-0.111	-0.395	-0.525	-0.355	-0.245	-0.264
+-5	0	-0.072	-0.359	-0.382	-0.22	-0.113	-0.151
+-4	0	-0.054	-0.351	-0.251	-0.084	0.016	-0.017
+-3	0	0.003	-0.24	-0.12	0.049	0.145	0.088
+-2	0	0.009	-0.091	0.017	0.181	0.27	0.213
+-1	0	0.036	0.052	0.152	0.312	0.396	0.328
+0	0	0.137	0.196	0.288	0.444	0.521	0.442
+1	0	0.292	0.335	0.421	0.573	0.645	0.556
+2	0	0.444	0.472	0.554	0.701	0.768	0.67
+3	0	0.58	0.608	0.685	0.827	0.888	0.784
+4	0	0.71	0.742	0.815	0.952	0.996	0.898
+5	0	0.841	0.875	0.944	1.062	1.095	1.011
+6	0	0.967	1.007	1.072	1.161	1.192	1.103
+7	0	1.084	1.134	1.197	1.254	1.283	1.181
+8	0	1.193	1.26	1.305	1.336	1.358	1.257
+9	0	1.287	1.368	1.39	1.4	1.403	1.326
+10	0	1.368	1.475	1.458	1.442	1.358	1.382
+11	0	1.425	1.57	1.512	1.374	1.287	1.415
+12	0	1.473	1.642	1.549	1.277	1.272	1.434
+13	0	1.513	1.7	1.47	1.246	1.273	1.451
+14	0	1.563	1.712	1.354	1.256	1.272	1.448
+15	0	1.614	1.687	1.333	1.271	1.275	1.445
+16	0	1.649	1.649	1.329	1.289	1.284	1.448
+17	0	1.681	1.598	1.321	1.304	1.306	1.438
+18	0	1.719	1.549	1.333	1.315	1.308	1.448
+19	0	1.751	1.544	1.362	1.33	1.308	1.448
+20	0	1.783	1.565	1.398	1.354	1.311	1.428
+22	0	1.83	1.563	1.418	1.325	1.277	1.359
+25	0	1.872	1.546	1.354	1.215	1.136	1.168
+30	0	1.904	1.522	1.265	1.076	0.962	0.926
+35	0	1.929	1.544	1.264	1.066	0.947	0.8
+40	0	1.903	1.529	1.258	1.064	0.95	0.804
+50	0	1.69	1.376	1.146	0.98	0.884	0.763
+60	0	1.323	1.097	0.932	0.81	0.74	0.656
+70	0	0.88	0.75	0.657	0.582	0.54	0.495
+80	0	0.449	0.396	0.362	0.326	0.304	0.291
+90	0	0.124	0.101	0.092	0.072	0.053	0.053
+100	0	-0.118	-0.143	-0.15	-0.17	-0.198	-0.199
+110	0	-0.348	-0.374	-0.379	-0.399	-0.434	-0.436
+120	0	-0.549	-0.575	-0.578	-0.596	-0.637	-0.64
+130	0	-0.702	-0.727	-0.727	-0.743	-0.787	-0.79
+140	0	-0.787	-0.809	-0.807	-0.821	-0.864	-0.868
+150	0	-0.782	-0.8	-0.797	-0.806	-0.847	-0.85
+160	0	-0.664	-0.677	-0.673	-0.679	-0.711	-0.714
+170	0	-0.41	-0.417	-0.547	-0.735	-0.788	-0.749
+180	0	0	0	0	0	0	0
diff --git a/Python/actuator_line_with_wifi/NREL5MW.geo b/Python/actuator_line_with_wifi/NREL5MW.geo
new file mode 100644
index 0000000000000000000000000000000000000000..e01eae6e09f4ad8d9f9dbc97eb2bad8c6ee5cca1
--- /dev/null
+++ b/Python/actuator_line_with_wifi/NREL5MW.geo
@@ -0,0 +1,18 @@
+2.8667	13.308	3.542	1
+5.6	13.308	3.854	1
+8.3333	13.308	4.167	1
+11.75	13.308	4.557	0.4
+15.85	11.48	4.652	0.35
+19.95	10.162	4.458	0.35
+24.05	9.011	4.249	0.3
+28.15	7.795	4.007	0.25
+32.25	6.544	3.748	0.25
+36.35	5.361	3.502	0.21
+40.45	4.188	3.256	0.21
+44.55	3.125	3.01	0.18
+48.65	2.319	2.764	0.18
+52.75	1.526	2.518	0.18
+56.1667	0.863	2.313	0.18
+58.9	0.37	2.086	0.18
+61.6333	0.106	1.419	0.18
+63.00	0.000	0.878   0.18
diff --git a/Python/actuator_line_with_wifi/NREL5MW.json b/Python/actuator_line_with_wifi/NREL5MW.json
new file mode 100644
index 0000000000000000000000000000000000000000..24cc926908931dea8a7f3c5f18dec956f1f9619a
--- /dev/null
+++ b/Python/actuator_line_with_wifi/NREL5MW.json
@@ -0,0 +1,33 @@
+{
+    "generator":
+    {
+        "rated_speed": 122.9,
+        "rated_torque": 43093.55,
+        "max_torque": 44748,
+        "max_torque_rate": 15000,
+        "efficiency": 0.944,
+        "slip": 0.1
+    },
+    "gearbox":
+    {
+        "ratio": 97
+    },
+    "blade":
+    {
+        "tip_radius": 63,
+        "inertia": 11776047,
+        "mass": 17740,
+        "file_format": "standard",
+        "standard_dict": {
+            "geometry_file": "NREL5MW.geo",
+            "cl_file": "NREL5MW.cl",
+            "cd_file": "NREL5MW.cd"
+        },
+        "openfast_dict": {
+            "input_file": "OpenFASTCoupled/NREL5MW.fst"
+        },
+        "max_pitch_rate": 8,
+        "root_radius": 1.5
+    },
+    "number_of_blades_per_turbine": 3
+}
\ No newline at end of file
diff --git a/Python/actuator_line_with_wifi/SingleTurbine.json b/Python/actuator_line_with_wifi/SingleTurbine.json
new file mode 100644
index 0000000000000000000000000000000000000000..5fb3b4fc5fc8b8a5533d75b05e2dc6204813313c
--- /dev/null
+++ b/Python/actuator_line_with_wifi/SingleTurbine.json
@@ -0,0 +1,14 @@
+{
+    "turbine_model": {
+        "name": "NREL5MW",
+        "file": "NREL5MW.json",
+        "file_type": "json"
+    },
+    "controller": {
+        "name": "NREL5MWController",
+        "type": "Greedy",
+        "file": "GreedyController.json",
+        "file_type": "json"
+    },
+    "hub_positions": [[0,0,0]]
+}
\ No newline at end of file
diff --git a/Python/actuator_line_with_wifi/configActuatorLine.txt b/Python/actuator_line_with_wifi/configActuatorLine.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8f1fbd929e6b542ceef943593eb7e7057c971f67
--- /dev/null
+++ b/Python/actuator_line_with_wifi/configActuatorLine.txt
@@ -0,0 +1,40 @@
+##################################################
+#information for Writing
+##################################################
+Path = ./output/
+##################################################
+#informationsfor reading
+##################################################
+GridPath = .
+##################################################
+Devices = 0 
+##################################################
+tStartOut           = 0
+tOut                = 300
+tEnd                = 600
+##################################################
+tStartAveraging     = 0
+tStartTmpAveraging  = 300
+tAveraging          = 200
+tStartOutProbe      = 0
+tOutProbe           = 100
+##################################################
+Ma = 0.1
+nodesPerDiameter = 32
+velocity = 9
+
+bodyForce = true
+SGSconstant = 0.333333
+TurbulenceModel = QR
+
+QuadricLimiterP = 10000.0
+QuadricLimiterD = 10000.0
+QuadricLimiterM = 10000.0
+
+##################################################
+readPrecursor = false
+nTimestepsReadPrecursor = 1
+precursorFile = precursor/Precursor
+
+##################################################
+NumberOfNodesPerAL = 32
diff --git a/Python/actuator_line_with_wifi/controller.json b/Python/actuator_line_with_wifi/controller.json
new file mode 100644
index 0000000000000000000000000000000000000000..1283360cc806c44f9dea47fb50088c466675da63
--- /dev/null
+++ b/Python/actuator_line_with_wifi/controller.json
@@ -0,0 +1,76 @@
+{
+    "filter_frequency": 0.25,
+    "regions":
+    [
+        { 
+            "name": 1,
+            "min_speed": "-Inf",
+            "max_speed": 70,
+
+            "torque":
+            {
+                "mode": "zero"
+            }            
+            
+        },
+        {   
+            "name": 1.5,
+            "min_speed": 70,
+            "max_speed": 91.3,
+
+            "torque":
+            {
+                "mode": "linear",
+                "kappa": 912.7,
+                "x_0": 70
+            }
+        },
+        {
+            "name": 2,
+            "min_speed": 91.3,
+            "max_speed": 120,
+
+            "torque":
+            {
+                "mode": "quadratic",
+                "kappa": 2.332287
+            }
+        },
+        {
+            "name": 2.5,
+            "min_speed": 120,
+            "max_speed": 122.9,
+            "min_pitch": "-Inf",
+            "max_pitch": 1,
+
+            "torque":
+            {
+                "mode": "linear",
+                "kappa": 4333,
+                "x_0": 111.3
+            }
+
+        },
+        {
+            "name": 3,
+            "min_speed": 0,
+            "max_speed": "Inf",
+            "min_pitch": 0,
+            "max_pitch": 90,
+
+            "pitch":
+            {
+                "mode": "PI",
+                "kappa_p": 0.01882681,
+                "kappa_i": 0.008068634,
+                "theta_k": 6.302336
+            },
+            "torque":
+            {
+                "mode": "inverse",
+                "kappa": 5296610
+            }
+
+        }
+    ]
+}
\ No newline at end of file
diff --git a/Python/actuator_line_with_wifi/read_output.py b/Python/actuator_line_with_wifi/read_output.py
new file mode 100644
index 0000000000000000000000000000000000000000..4b90e477d47a0228c2b6e607c5f40f21d798d78f
--- /dev/null
+++ b/Python/actuator_line_with_wifi/read_output.py
@@ -0,0 +1,39 @@
+#%%
+from pandas import HDFStore
+from matplotlib import pyplot as plt
+import numpy as np
+from pathlib import Path
+
+from wiFI.turbine import create_turbine_from_farm_json
+
+def get_blade_array(hdf5: HDFStore, key: str):
+    blade_df = hdf5.get(key)
+    _, n_turbines, n_blades, n_nodes = blade_df.columns[-1]
+    return blade_df.to_numpy().reshape(-1, 3, n_turbines+1, n_blades+1, n_nodes+1)
+
+#%%
+turbine_file = Path(__file__).parent/"SingleTurbine.json"
+output_dir = Path(__file__).parents[2]/"output"
+wifi_output = HDFStore(output_dir/"wifi.h5", mode="r")
+turbine_model = create_turbine_from_farm_json(turbine_file, number_of_blade_nodes=32)
+# %%
+print(wifi_output.keys())
+#%%
+
+plt.plot(wifi_output["/Rotor_speed"])
+# %%
+blade_forces = get_blade_array(wifi_output, "Blade_forces")
+
+plt.plot(blade_forces[-1, 0, 0, :, :].T)
+
+# %%
+blade_coordinates = get_blade_array(wifi_output, "Blade_coordinates")
+plt.scatter(blade_coordinates[-1,1,0,:,:], blade_coordinates[-1,2,0,:,:])
+
+# %%
+blade_velocities = get_blade_array(wifi_output, "Blade_velocities")
+plt.plot(blade_velocities[-1, 0, 0, :, :].T)
+# %%
+plt.plot(blade_velocities[-1, 1, 0,:,:].T)
+
+# %%
diff --git a/Python/actuator_line_with_wifi/runscript.py b/Python/actuator_line_with_wifi/runscript.py
new file mode 100644
index 0000000000000000000000000000000000000000..88e32edcbf5a12beb6f226e30f30d9db93c0da0e
--- /dev/null
+++ b/Python/actuator_line_with_wifi/runscript.py
@@ -0,0 +1,169 @@
+from pathlib import Path
+from wiFI.turbine import create_turbine_from_farm_json
+from wiFI.logging import LoggerConfig, LogEntry
+from wiFI.interfaces.implementations.velocity_provider.VirtualFluids.VirtualFluids import create_standard_actuator_farm
+from wiFI.controller.controller import ControllerTypes
+from pyfluids import basics, gpu, logger, parallel
+import numpy as np
+
+
+#%%
+sim_name = "ABL"
+config_file = Path(__file__).parent/"configActuatorLine.txt"
+turbine_file = Path(__file__).parent/"SingleTurbine.json"
+controller_file = Path(__file__).parent/"controller.json"
+
+def load_config_file(config_file: Path):
+    config = basics.ConfigurationFile()
+    config.load(str(config_file))
+    return config
+
+def add_plane_probes(plane_locs: np.ndarray, para: gpu.Parameter, t_start_averaging: float, t_start_out_probe: float, t_out_probe: float, dt: float, dx: float, length: np.ndarray):
+    for n_probe, probe_pos in enumerate(plane_locs):
+        plane_probe = gpu.probes.PlaneProbe(f"planeProbe_{n_probe+1}", para.get_output_path(), int(t_start_averaging/dt), 10, int(t_start_out_probe/dt), int(t_out_probe/dt))
+        plane_probe.set_probe_plane(probe_pos, -length[1]/2, -length[2]/2, dx, length[1], length[2])
+        plane_probe.add_all_available_statistics()
+        para.add_probe(plane_probe)
+
+
+def main(sim_name: str, config_file: Path, turbine_file: Path, controller_file: Path):
+    logger.Logger.initialize_logger()
+
+    config = load_config_file(config_file)
+    grid_builder = gpu.grid_generator.MultipleGridBuilder()
+    communicator = parallel.MPICommunicator.get_instance()
+
+    para = gpu.Parameter(communicator.get_number_of_processes(), communicator.get_process_id(), config)
+    bc_factory = gpu.BoundaryConditionFactory()
+
+
+    viscosity = config.get_float_value("viscosity", 1.56e-5)
+    velocity  = config.get_float_value("velocity", 9.0)
+
+    mach = config.get_float_value("Ma", 0.1)
+    nodes_per_diameter = config.get_uint_value("nodesPerDiameter", 32)
+
+
+    density = config.get_float_value("Density", 1.225)
+    level = 0
+    n_blade_nodes = config.get_int_value("NumberOfNodesPerAL", 32)
+
+    read_precursor = config.get_bool_value("readPrecursor", False)
+
+    if read_precursor:
+        nTReadPrecursor = config.get_int_value("nTimestepsReadPrecursor")
+        use_distributions = config.get_bool_value("useDistributions", False)
+        precursor_directory = config.get_string_value("precursorDirectory")
+
+    # all in s
+    t_start_out   = config.get_float_value("tStartOut")
+    t_out        = config.get_float_value("tOut")
+    t_end        = config.get_float_value("tEnd") # total time of simulation
+
+    t_start_averaging     =  config.get_float_value("tStartAveraging")
+    t_start_tmp_averaging  =  config.get_float_value("tStartTmpAveraging")
+    t_averaging          =  config.get_float_value("tAveraging")
+    t_start_out_probe      =  config.get_float_value("tStartOutProbe")
+    t_out_probe           =  config.get_float_value("tOutProbe")
+
+
+    turbine_model = create_turbine_from_farm_json(turbine_file,
+                                                  n_blade_nodes,
+                                                  load_data = True,
+                                                  use_gpu = True)
+    
+    diameter =  turbine_model.blade_tip_radius*2
+
+    length = np.array([24,8,8])*diameter
+    dx = diameter/nodes_per_diameter
+    dt = dx * mach / (np.sqrt(3) * velocity)
+    velocity_ratio = dx/dt
+    velocity_LB = velocity / velocity_ratio  # LB units
+    viscosity_LB = viscosity / (velocity_ratio * dx)  # LB units
+
+    logger.vf_log_info(f"velocity  [dx/dt] = {velocity_LB}")
+    logger.vf_log_info(f"dt   = {dt}")
+    logger.vf_log_info(f"dx   = {dx}")
+    logger.vf_log_info(f"viscosity [10^8 dx^2/dt] = {viscosity_LB*1e8}")
+
+    para.set_output_prefix(sim_name)
+    para.set_print_files(True)
+    output_path = Path(para.get_output_path())
+    output_path.mkdir(exist_ok=True)
+
+    para.set_forcing(0, 0, 0)
+    para.set_velocity_LB(velocity_LB)
+    para.set_viscosity_LB(viscosity_LB)    
+    para.set_velocity_ratio(dx/dt)
+    para.set_viscosity_ratio(dx*dx/dt)
+    para.set_density_ratio(1.0)
+
+    para.configure_main_kernel(gpu.kernel.compressible.K17CompressibleNavierStokes)
+
+    para.set_timestep_start_out(int(t_start_out/dt))
+    para.set_timestep_out(int(t_out/dt))
+    para.set_timestep_end(int(t_end/dt))
+    para.set_is_body_force(True)
+
+    tm_factory = gpu.TurbulenceModelFactory(para)
+    tm_factory.read_config_file(config)
+    #%%
+    grid_scaling_factory = gpu.GridScalingFactory()
+    grid_scaling_factory.set_scaling_factory(gpu.GridScaling.ScaleCompressible)
+
+    grid_builder.add_coarse_grid(-3*diameter, -length[1]/2, -length[2]/2, length[0]-3*diameter, length[1]/2, length[2]/2, dx)
+    grid_builder.set_periodic_boundary_condition(False, True, True)
+    grid_builder.build_grids(False)
+
+    if read_precursor:
+        precursor = gpu.create_file_collection(precursor_directory + "/precursor", gpu.FileType.VTK)
+        grid_builder.set_precursor_boundary_condition(gpu.SideType.MX, precursor, nTReadPrecursor, 0, 0, 0)
+    else:
+        grid_builder.set_velocity_boundary_condition(gpu.SideType.MX, velocity_LB, 0, 0)
+
+    grid_builder.set_pressure_boundary_condition(gpu.SideType.PX, 0)
+
+    bc_factory.set_stress_boundary_condition(gpu.StressBC.StressPressureBounceBack)
+    bc_factory.set_slip_boundary_condition(gpu.SlipBC.SlipBounceBack) 
+    bc_factory.set_pressure_boundary_condition(gpu.PressureBC.OutflowNonReflective)
+    if read_precursor:
+        bc_factory.set_precursor_boundary_condition(gpu.PrecursorBC.DistributionsPrecursor if use_distributions else gpu.PrecursorBC.VelocityPrecursor)
+    else:
+        bc_factory.set_velocity_boundary_condition(gpu.VelocityBC.VelocityAndPressureCompressible)
+
+    para.set_outflow_pressure_correction_factor(0.0)
+
+    para.set_initial_condition_uniform(velocity_LB, 0, 0)
+
+
+    logging_config = LoggerConfig("wifi", output_path, start_time=1000, log_period=100)
+    logging_dict = {"wind_farm": [LogEntry("rotor_speed", True, True),
+                                  LogEntry("azimuth", True, True)]}
+
+
+    tip_speed_ratio = 7.55*np.ones(turbine_model.n_turbines)
+    rotor_speeds = tip_speed_ratio * velocity / turbine_model.blade_tip_radius
+    smearing_width = 2*dx
+    farm = create_standard_actuator_farm(logging_config, logging_dict, turbine_model, density, smearing_width,
+                                         level, dt, dx, communicator.get_process_id(),
+                                         ControllerTypes.Greedy, controller_file, rotor_speeds)
+
+    # farm = gpu.ActuatorFarmStandalone(turbine_model.blade_tip_radius*2, turbine_model.n_nodes_per_blade, turbine_model.hub_positions.x, turbine_model.hub_positions.y, turbine_model.hub_positions.z, rotor_speeds, density, smearing_width, level, dt, dx)
+    farm.enable_output("ALM", 0, int(t_out_probe/dt))
+    para.add_actuator(farm)
+    
+    plane_locs = np.array([-1,1,2,3,4])*diameter
+    add_plane_probes(plane_locs, para, t_start_averaging, t_start_out_probe, t_out_probe, dt, dx, length)
+    plane_probe = gpu.probes.PlaneProbe(f"streamwiseProbe", para.get_output_path(), int(t_start_averaging/dt), 10, int(t_start_out_probe/dt), int(t_out_probe/dt))
+    plane_probe.set_probe_plane(-diameter*3, 0, -length[2]/2, length[0], dx, length[2])
+    plane_probe.add_all_available_statistics()
+    para.add_probe(plane_probe)
+
+    cuda_memory_manager = gpu.CudaMemoryManager(para)
+    grid_generator = gpu.GridProvider.make_grid_generator(grid_builder, para, cuda_memory_manager, communicator)
+    sim = gpu.Simulation(para, cuda_memory_manager, communicator, grid_generator, bc_factory, tm_factory, grid_scaling_factory)
+    sim.run()
+
+
+if __name__ == '__main__':
+    main(sim_name, config_file, turbine_file, controller_file)
diff --git a/Python/boundary_layer/boundary_layer.py b/Python/boundary_layer/boundary_layer.py
index 46c1014eb65ab6a393a532ab9ccf6b4ccdb424e4..34608e192a8cca19d6021c00d354272461f648bf 100644
--- a/Python/boundary_layer/boundary_layer.py
+++ b/Python/boundary_layer/boundary_layer.py
@@ -36,7 +36,7 @@ r"""
 import numpy as np
 from pathlib import Path
 from mpi4py import MPI
-from pyfluids import basics, gpu, logger, communicator
+from pyfluids import basics, gpu, logger, parallel
 #%%
 sim_name = "ABL"
 config_file = Path(__file__).parent/"configBoundaryLayer.txt"
@@ -49,7 +49,7 @@ logger.Logger.initialize_logger()
 
 #%%
 grid_builder = gpu.grid_generator.MultipleGridBuilder()
-communicator = communicator.Communicator.get_instance()
+communicator = parallel.MPICommunicator.get_instance()
 
 config = basics.ConfigurationFile()
 config.load(str(config_file))
@@ -57,6 +57,9 @@ config.load(str(config_file))
 para = gpu.Parameter(communicator.get_number_of_processes(), communicator.get_process_id(), config)
 bc_factory = gpu.BoundaryConditionFactory()
 
+grid_scaling_factory = gpu.GridScalingFactory()
+grid_scaling_factory.set_scaling_factory(gpu.GridScaling.ScaleCompressible)
+
 #%%
 boundary_layer_height = config.get_float_value("boundaryLayerHeight", 1000)
 z0 = config.get_float_value("z0", 0.1)
@@ -129,14 +132,14 @@ para.set_velocity_ratio(dx/dt)
 para.set_viscosity_ratio(dx*dx/dt)
 para.set_density_ratio(1.0)
 
-para.set_main_kernel("CumulantK17")
+para.configure_main_kernel(gpu.kernel.compressible.K17CompressibleNavierStokes)
 
 para.set_timestep_start_out(int(t_start_out/dt))
 para.set_timestep_out(int(t_out/dt))
 para.set_timestep_end(int(t_end/dt))
 para.set_is_body_force(config.get_bool_value("bodyForce"))
 para.set_devices(np.arange(10))
-para.set_max_dev(communicator.get_number_of_process())
+para.set_max_dev(communicator.get_number_of_processes())
 #%%
 tm_factory = gpu.TurbulenceModelFactory(para)
 tm_factory.read_config_file(config)
@@ -158,7 +161,7 @@ if read_precursor:
     grid_builder.set_pressure_boundary_condition(gpu.SideType.PX, 0)
     bc_factory.set_pressure_boundary_condition(gpu.PressureBC.OutflowNonReflective)
     bc_factory.set_precursor_boundary_condition(gpu.PrecursorBC.DistributionsPrecursor if use_distributions else gpu.PrecursorBC.VelocityPrecursor)
-    
+
 bc_factory.set_stress_boundary_condition(gpu.StressBC.StressPressureBounceBack)
 bc_factory.set_slip_boundary_condition(gpu.SlipBC.SlipBounceBack) 
 para.set_outflow_pressure_correction_factor(0.0); 
@@ -197,7 +200,7 @@ cuda_memory_manager = gpu.CudaMemoryManager(para)
 grid_generator = gpu.GridProvider.make_grid_generator(grid_builder, para, cuda_memory_manager, communicator)
 #%%
 #%%
-sim = gpu.Simulation(para, cuda_memory_manager, communicator, grid_generator, bc_factory, tm_factory)
+sim = gpu.Simulation(para, cuda_memory_manager, communicator, grid_generator, bc_factory, tm_factory, grid_scaling_factory)
 #%%
 sim.run()
 MPI.Finalize()
\ No newline at end of file
diff --git a/ansible/hosts.cfg b/ansible/hosts.cfg
deleted file mode 100644
index 0f340834c95ab66e9f5f2303129cec24ee180873..0000000000000000000000000000000000000000
--- a/ansible/hosts.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-[defaults]
-host_key_checking=False
-[gitlab_ci_deploy_targets]
-phoenix.hlr.rz.tu-bs.de ansible_ssh_private_key_file=./private_key
-[gitlab_ci_deploy_cppcheck]
-elladan.irmb.bau.tu-bs.de
-[gitlab_ci_deploy_gcov]
-elladan.irmb.bau.tu-bs.de
-[gitlab_ci_deploy_wheel]
-finrod.irmb.bau.tu-bs.de ansible_ssh_private_key_file=~/private_key ansible_become_password="{{ lookup('env', 'ANSIBLE_JUPYTER_HOST_BECOME_PASSWORD') }}"
\ No newline at end of file
diff --git a/ansible/playbook_jupyter_update.yml b/ansible/playbook_jupyter_update.yml
deleted file mode 100644
index 61d6c95aff09fc99d9a2f3c1418c6e38f52e464b..0000000000000000000000000000000000000000
--- a/ansible/playbook_jupyter_update.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-- hosts: gitlab_ci_deploy_wheel
-  vars:
-    host_home: "/home/{{ lookup('env', 'jupyter_host') }}"
-
-  tasks:
-
-    - name: Find container IDs with image name
-      become: yes
-      shell: docker ps -a --format {% raw %}'{{.ID}} {{.Image}}'{% endraw %} | grep pyfluids-jupyter | awk '{ print $1 }'
-      register: container_ids
-
-    - name: Stop and remove docker spawner containers
-      become: yes
-      community.general.docker_container:
-        name: "{{ item }}"
-        state: absent
-      loop: "{{ container_ids.stdout_lines }}"
-
-    - name: Remove old docker spawner image
-      become: yes
-      community.general.docker_image:
-        name: pyfluids-jupyter
-        state: absent
-
-    - name: Find pyfluids wheel
-      find:
-        path: "{{ host_home }}/jupyterhub/DockerSpawnerImage/wheels/"
-        patterns: pyfluids*.whl
-      register: find_pyfluids
-
-    - name: Remove old pyfluids wheel
-      file:
-        path: "{{ item }}"
-        state: absent
-      loop: "{{ find_pyfluids.files }}"
-
-    - name: Copy new wheels to docker spawner image
-      synchronize:
-        src: ../dist/
-        dest: "{{ host_home }}/jupyterhub/DockerSpawnerImage/wheels/"
-        rsync_opts:
-          - "--include='*.whl'"
-
-    - name: Build docker spawner image again
-      become: yes
-      community.general.docker_image:
-        name: pyfluids-jupyter
-        source: build
-        build:
-          dockerfile: "{{ host_home }}/jupyterhub/DockerSpawnerImage/Dockerfile"
-          path: "{{ host_home }}/jupyterhub/DockerSpawnerImage/"
diff --git a/ansible/playbook_vf_deploy.yml b/ansible/playbook_vf_deploy.yml
deleted file mode 100644
index 4f0633a95475d33ca8d406664b0857204adac5a5..0000000000000000000000000000000000000000
--- a/ansible/playbook_vf_deploy.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-- hosts: gitlab_ci_deploy_targets
-  tasks:
-    - name: Create remote VirtualFluids_dev dir
-      command: mkdir ~/VirtualFluids_dev
-      ignore_errors: yes
-
-    - name: Synchronize VirtualFluids_dev with remote
-      synchronize:
-        src: "{{ item.src }}"
-        dest: "{{ item.dest }}"
-        rsync_opts:
-          - "--exclude=.venv"
-          - "--exclude=__pycache__"
-      loop:
-        - { src: '../3rdParty', dest: '~/VirtualFluids_dev/3rdParty' }
-        - { src: '../apps', dest: '~/VirtualFluids_dev/apps' }
-        - { src: '../CMake', dest: '~/VirtualFluids_dev/CMake' }
-        - { src: '../Containers', dest: '~/VirtualFluids_dev/Containers' }
-        - { src: '../Python', dest: '~/VirtualFluids_dev/Python' }
-        - { src: '../src', dest: '~/VirtualFluids_dev/src' }
-        - { src: '../.clang-format', dest: '~/VirtualFluids_dev/.clang-format' }
-        - { src: '../.clang-tidy', dest: '~/VirtualFluids_dev/.clang-tidy' }
-        - { src: '../CMakeLists.txt', dest: '~/VirtualFluids_dev/CMakeLists.txt' }
-        - { src: '../cpu.cmake', dest: '~/VirtualFluids_dev/cpu.cmake' }
-        - { src: '../gpu.cmake', dest: '~/VirtualFluids_dev/gpu.cmake' }
-        - { src: '../pyproject.toml', dest: '~/VirtualFluids_dev/pyproject.toml' }
-        - { src: '../setup.py', dest: '~/VirtualFluids_dev/setup.py' }
diff --git a/apps/cpu/AcousticPulse/ap.cpp b/apps/cpu/AcousticPulse/ap.cpp
index a04952a35cdb9ba5b55b4ed4dc9fb6225e26f5b7..1ef22dd18a9d34cf476877f2b1c8c6edcca1d79e 100644
--- a/apps/cpu/AcousticPulse/ap.cpp
+++ b/apps/cpu/AcousticPulse/ap.cpp
@@ -20,25 +20,25 @@ void run()
       //string  pathname = "d:/temp/AcousticPulse40Cube2y_test";
       //double  endTime = 20;
       //double  outTime = 20;
-      //LBMReal dx =  0.05;
+      //real dx =  0.05;
 
       //80
       //string  pathname = "d:/temp/AcousticPulse80Cube2y";
       //double  endTime = 40;
       //double  outTime = 40;
-      //LBMReal dx = 0.025;
+      //real dx = 0.025;
 
       //160
       //string  pathname = "d:/temp/AcousticPulse160Cube2y";
       //double  endTime = 80;
       //double  outTime = 80;
-      //LBMReal dx = 0.0125;
+      //real dx = 0.0125;
 
-      //LBMReal dx = 0.1; 
-      //LBMReal dx = 1.66666666667e-2; //120
+      //real dx = 0.1; 
+      //real dx = 1.66666666667e-2; //120
       
-      //LBMReal rhoLB = 0.0;
-      //LBMReal nuLB = 3.97e-7;
+      //real rhoLB = 0.0;
+      //real nuLB = 3.97e-7;
 
       //////////////////////////////////////////////////////////////////////////
       //DLR-F16 test
@@ -46,25 +46,25 @@ void run()
       string  pathname = "d:/temp/AcousticPulseXZ-4th-0.003";
       int     endTime = 20;
       double  outTime = 20;
-      LBMReal dx =  0.003;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = 8.66025e-6;
+      real dx =  0.003;
+      real rhoLB = 0.0;
+      real nuLB = 8.66025e-6;
       //////////////////////////////////////////////////////////////////////////
       ////dx_coarse = 0.0015 mm
       //string  pathname = "d:/temp/AcousticPulseXZ-4th-0.0015";
       //double  endTime = 40;
       //double  outTime = 40;
-      //LBMReal dx =  0.0015;
-      //LBMReal rhoLB = 0.0;
-      //LBMReal nuLB = 8.66025e-6*2.0;
+      //real dx =  0.0015;
+      //real rhoLB = 0.0;
+      //real nuLB = 8.66025e-6*2.0;
       ////////////////////////////////////////////////////////////////////////////
       ////dx_coarse = 0.00075 mm
       //string  pathname = "d:/temp/AcousticPulseXZ-4th-0.00075";
       //double  endTime = 80;
       //double  outTime = 80;
-      //LBMReal dx =  0.00075;
-      //LBMReal rhoLB = 0.0;
-      //LBMReal nuLB = 8.66025e-6*4.0;
+      //real dx =  0.00075;
+      //real rhoLB = 0.0;
+      //real nuLB = 8.66025e-6*4.0;
       //////////////////////////////////////////////////////////////////////////
 
       SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
@@ -160,10 +160,10 @@ void run()
       }
 
       double bulckViscosity = 10.0*nuLB;
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      //dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(bulckViscosity);
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel());
-      //dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->setBulkOmegaToOmega(true);
+      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K17CompressibleNavierStokes());
+      //dynamicPointerCast<K17CompressibleNavierStokes>(kernel)->setBulkViscosity(bulckViscosity);
+      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K15CompressibleNavierStokes());
+      //dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->setBulkOmegaToOmega(true);
       //
       SPtr<BCProcessor> bcProcessor(new BCProcessor());
 
diff --git a/apps/cpu/Applications.cmake b/apps/cpu/Applications.cmake
index 54be9f7941fed1b3b1d7a4f8728103c0ad8fe6f2..518477d5282bdaaf677ac10d5308e3e861f8c5f6 100644
--- a/apps/cpu/Applications.cmake
+++ b/apps/cpu/Applications.cmake
@@ -1,36 +1,12 @@
-add_subdirectory(${APPS_ROOT_CPU}/PoiseuilleFlow)
-add_subdirectory(${APPS_ROOT_CPU}/CouetteFlow)
+#add_subdirectory(${APPS_ROOT_CPU}/PoiseuilleFlow)
+#add_subdirectory(${APPS_ROOT_CPU}/CouetteFlow)
 #add_subdirectory(${APPS_ROOT_CPU}/sphere)
 #add_subdirectory(${APPS_ROOT_CPU}/FlowAroundCylinder)
 #add_subdirectory(${APPS_ROOT_CPU}/LaminarTubeFlow)
-add_subdirectory(${APPS_ROOT_CPU}/ConvectionOfVortex)
+#add_subdirectory(${APPS_ROOT_CPU}/ConvectionOfVortex)
 #add_subdirectory(${APPS_ROOT_CPU}/PoiseuilleFlowPlates)
 
-IF(${VFCPU_ENABLE_LiggghtsCoupling})
-	add_subdirectory(${APPS_ROOT_CPU}/LiggghtsApp)
-	add_subdirectory(${APPS_ROOT_CPU}/FallingSphere)
-ENDIF()
 
-IF(${VFCPU_ENABLE_NonNewtonianFluids})
-#	add_subdirectory(${APPS_ROOT_CPU}/HerschelBulkleySphere)
-#	add_subdirectory(${APPS_ROOT_CPU}/HerschelBulkleyModel)
-#	add_subdirectory(${APPS_ROOT_CPU}/rheometer)
-	add_subdirectory(${APPS_ROOT_CPU}/ViskomatXL)
-ENDIF()
-
-IF(${VFCPU_ENABLE_MultiphaseFlow})
-	add_subdirectory(${APPS_ROOT_CPU}/Multiphase)
-#   add_subdirectory(${APPS_ROOT_CPU}/MultiphaseDropletTest)
-#	add_subdirectory(${APPS_ROOT_CPU}/RisingBubble2D)
-	add_subdirectory(${APPS_ROOT_CPU}/JetBreakup)
-#	add_subdirectory(${APPS_ROOT_CPU}/ShotcreteJet)
-	add_subdirectory(${APPS_ROOT_CPU}/ConcreteExtrusion)
-ENDIF()
-
-IF(${VFCPU_ENABLE_LiggghtsCoupling} AND ${VFCPU_ENABLE_MultiphaseFlow})
-	add_subdirectory(${APPS_ROOT_CPU}/Nozzle)
-	add_subdirectory(${APPS_ROOT_CPU}/NozzleMultiphase)
-ENDIF()
 
 #add_subdirectory(tests)
 #add_subdirectory(Applications/gridRf)
diff --git a/apps/cpu/BeadPack/CMakeLists.txt b/apps/cpu/BeadPack/CMakeLists.txt
deleted file mode 100644
index a0df3f7a5f9960c99e42f10f7e96adf0e54c24f2..0000000000000000000000000000000000000000
--- a/apps/cpu/BeadPack/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(beadpack)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(beadpack BINARY)
diff --git a/apps/cpu/BeadPack/beadpack.cpp b/apps/cpu/BeadPack/beadpack.cpp
deleted file mode 100644
index 3da3030bb618812bc4e37db49683b9b6ce22fd84..0000000000000000000000000000000000000000
--- a/apps/cpu/BeadPack/beadpack.cpp
+++ /dev/null
@@ -1,438 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <vfluids.h>
-
-using namespace std;
-
-
-void sbonepd(const char *configname)
-{
-   try
-   {
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname, pathGeo;
-      int numOfThreads;
-      double availMem;
-
-      ConfigFileReader cf(configname);
-      if (!cf.read())
-      {
-         std::string exceptionText = "Unable to read configuration file\n";
-         throw exceptionText;
-      }
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (machine == "BOMBADIL")
-      {
-         numOfThreads = 4;
-         pathname = "d:/temp/bbone";
-         pathGeo = "d:/Data/Bone/BigBone";
-         availMem = 15.0e9;
-      }
-      else if (machine == "M01" || machine == "M02")
-      {
-         numOfThreads = 8;
-         pathname = cf.getValue("pathname");
-         pathGeo = cf.getValue("pathGeo");
-         availMem = 12.0e9;
-
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            int status = mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-
-
-      if (myid == 0) UBLOG(logINFO, "Testcase big bone");
-
-      Grid3DPtr grid(new Grid3D(comm));
-      double deltaVoxel = 11.658e-6;
-
-      double dx = deltaVoxel;
-
-      const int blocknx1 = 64;
-      const int blocknx2 = 64;
-      const int blocknx3 = 64;
-
-      LBMReal rho_LB = 0.0;
-      //nueWasser = 1e-6 m^2/s
-      double nu_real = 1e-6;
-      LBMReal dt = 5e-8; // s (frei gew�hlt)
-      //dx - frei gew�hlt
-      //
-      LBMReal nu_LB = nu_real / (dx*dx / dt);
-
-
-      //dp = 50000 Pa - 0 Pa = 50000 Pa
-      double dp_real = UbSystem::stringTo<double>(cf.getValue("pressure")); //5000;
-      //rho wasser = 1000 kg*m^-3
-      double rho_real = 1000;
-      //dp/rho = 50000/1000 = 50 m^2/s^2
-      double dp_div_rho_real = dp_real / rho_real;
-
-      double dp_LB = dp_div_rho_real / ((dx / dt)*(dx / dt));
-
-      bool with_forcing = true;
-
-      double rhoLBinflow;
-      if (with_forcing)
-      {
-         rhoLBinflow = 0.0;
-      }
-      else
-      {
-         rhoLBinflow = dp_LB*3.0;
-      }
-      double deltax = dx;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-      const int refineLevel = 0;
-
-      double coord[6];
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(50000, 50000, 10000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (grid->getTimeStep() == 0)
-      {
-         if (myid == 0) UBLOG(logINFO, "Neustart..");
-
-         string boneFilename = pathGeo + "/cyl_bone2.raw";
-
-         int pmNX1 = 1164;  //abmessung einzelbild in x-richtung
-         int pmNX2 = 972; //abmessung einzelbild in y richtung
-         int pmNX3 = 900; //anzahl der bilder
-         //int pmNX3 = 10; //anzahl der bilder
-         float lthreshold = 109.0;
-         float uthreshold = 255.0;
-
-         GbVoxelMatrix3DPtr bone(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         bone->readMatrixFromRawFile<unsigned char>(boneFilename, GbVoxelMatrix3D::BigEndian);
-
-         
-         bone->setVoxelMatrixDelta(deltaVoxel, deltaVoxel, deltaVoxel);
-
-         bone->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-
-         if (myid == 0) bone->writeToVTKImageDataASCII(pathname + "/geo/bone");
-
-         ///////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////
-
-         double offset = 0.5e-3;
-         //bounding box
-         double g_minX1 = bone->getX1Minimum();
-         double g_minX2 = bone->getX2Minimum();
-         double g_minX3 = bone->getX3Minimum() - offset;
-
-         double g_maxX1 = bone->getX1Maximum();
-         double g_maxX2 = bone->getX2Maximum();
-         double g_maxX3 = bone->getX3Maximum() + offset;
-
-         double blockLength = (double)blocknx1*deltax;
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(false);
-         grid->setPeriodicX3(true);
-         grid->setDeltaX(deltax);
-         grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         double forcing = 0;
-         if (with_forcing)
-         {
-            forcing = dp_LB / (blocknx3*grid->getNX3());
-         }
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "with forcing = " << with_forcing);
-            UBLOG(logINFO, "rho_LB = " << rho_LB);
-            UBLOG(logINFO, "nu_LB = " << nu_LB);
-            UBLOG(logINFO, "dp_LB = " << dp_LB);
-            UBLOG(logINFO, "forcing = " << forcing);
-            UBLOG(logINFO, "dx = " << dx << " m");
-            UBLOG(logINFO, "dt = " << dt << " s");
-            UBLOG(logINFO, "rho_real = " << rho_real << " kg*m^-3");
-            UBLOG(logINFO, "nu_real = " << nu_real << " m^2/s");
-            UBLOG(logINFO, "dp_real = " << dp_real << " Pa");
-
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         //cylinder
-         double radius = 0.0036;
-         double cx1 = 0.007;
-         double cx2 = 0.0046;
-
-         GbObject3DPtr cylinder(new GbCylinder3D(cx1, cx2, g_minX3 - offset, cx1, cx2, g_maxX3 + offset, radius));
-         GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance());
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         //bone interactor
-         int bcOptionBone = 0; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall
-         D3Q27BoundaryConditionAdapterPtr bcBone(new D3Q27NoSlipBCAdapter(bcOptionBone));
-         D3Q27InteractorPtr boneInt(new D3Q27Interactor(bone, grid, bcBone, Interactor3D::SOLID));
-
-         //wall interactors
-         int bcOptionWall = 0; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall
-         D3Q27BoundaryConditionAdapterPtr bcWall(new D3Q27NoSlipBCAdapter(bcOptionWall));
-         D3Q27InteractorPtr cylInt(new D3Q27Interactor(cylinder, grid, bcWall, Interactor3D::INVERSESOLID));
-
-         D3Q27BoundaryConditionAdapterPtr denBCAdapterInflow(new D3Q27DensityBCAdapter(rhoLBinflow));
-         denBCAdapterInflow->setSecondaryBcOption(0);
-         D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID));
-
-         //outflow
-         D3Q27BoundaryConditionAdapterPtr denBCAdapterOutflow(new D3Q27DensityBCAdapter(rho_LB));
-         denBCAdapterOutflow->setSecondaryBcOption(0);
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW));
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(boneInt);
-         intHelper.addInteractor(cylInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nodg = nob * (blocknx1 + gl) * (blocknx2 + gl) * (blocknx3 + gl);
-         double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << nob);
-            UBLOG(logINFO, "Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernel3DPtr kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL));
-
-         mu::Parser fctForcingX3;
-         fctForcingX3.SetExpr("Fx3");
-         fctForcingX3.DefineConst("Fx3", forcing);
-
-         kernel->setForcingX3(fctForcingX3);
-         kernel->setWithForcing(true);
-
-         //BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor());
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-
-         //BC
-         intHelper.setBC();
-
-         //Press*1.6e8+(14.76-coordsX)/3.5*5000
-         //initialization of distributions
-         //mu::Parser fct;
-         //fct.SetExpr("(x1max-x1)/l*dp*3.0");
-         //fct.DefineConst("dp", dp_LB);
-         //fct.DefineConst("x3max", g_maxX3);
-         //fct.DefineConst("l", g_maxX3-g_minX3);
-
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB);
-         //initVisitor.setRho(fct);
-         //initVisitor.setVx1(fct);
-         initVisitor.setVx1(0.0);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-
-
-         coord[0] = bone->getX1Minimum();
-         coord[1] = bone->getX2Minimum();
-         coord[2] = cylinder->getX3Centroid();
-         coord[3] = bone->getX1Maximum();
-         coord[4] = bone->getX2Maximum();
-         coord[5] = cylinder->getX3Centroid();
-
-         ////////////////////////////////////////////////////////
-         FILE * pFile;
-         string str = pathname + "/checkpoints/coord.txt";
-         pFile = fopen(str.c_str(), "w");
-         fprintf(pFile, "%f\n", coord[0]);
-         fprintf(pFile, "%f\n", coord[1]);
-         fprintf(pFile, "%f\n", coord[2]);
-         fprintf(pFile, "%f\n", coord[3]);
-         fprintf(pFile, "%f\n", coord[4]);
-         fprintf(pFile, "%f\n", coord[5]);
-         fclose(pFile);
-         ////////////////////////////////////////////////////////
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         ////////////////////////////////////////////////////////
-         FILE * pFile;
-         string str = pathname + "/checkpoints/coord.txt";
-         pFile = fopen(str.c_str(), "r");
-         fscanf(pFile, "%f\n", &coord[0]);
-         fscanf(pFile, "%f\n", &coord[1]);
-         fscanf(pFile, "%f\n", &coord[2]);
-         fscanf(pFile, "%f\n", &coord[3]);
-         fscanf(pFile, "%f\n", &coord[4]);
-         fscanf(pFile, "%f\n", &coord[5]);
-         fclose(pFile);
-         ////////////////////////////////////////////////////////
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm);
-
-      double outTime = 30000;
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      stepSch->addSchedule(10, 10, 10);
-      stepSch->addSchedule(100, 100, 100);
-      stepSch->addSchedule(1000, 1000, 1000);
-      stepSch->addSchedule(100, 1500, 2000);
-      stepSch->addSchedule(10000, 10000, 10000);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv);
-
-      double dxd2 = deltax / 2.0;
-      D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0] - dxd2, coord[1] - dxd2, coord[2] - dxd2,
-         coord[3] + dxd2, coord[4] + dxd2, coord[5] + dxd2));
-      if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance());
-
-      double factorp = dp_real / dp_LB;
-      double factorv = dx / dt;
-      UbSchedulerPtr stepMV(new UbScheduler(100));
-      D3Q27MeanValuesPostprocessor mvp1(grid, stepMV, pathname + "/mv/mv1.txt", comm, ih1, factorp, factorv);
-
-
-      //D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, g_maxX1-2.0*deltax, g_minX2, g_minX3,
-      //   g_maxX1 - deltax, g_maxX2, g_maxX3));
-      //if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance());
-
-      //D3Q27MeanValuesPostprocessor mvp2(grid, stepSch, pathname + "/mv/mv2.txt", comm, ih2, factorp, factorv);
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      double endTime = UbSystem::stringTo<double>(cf.getValue("endTime")); //100001;//10001.0;
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepMV));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if (argv != NULL)
-   {
-      sbonepd(argv[1]);
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/BeadPack/data/NewCentroids.txt b/apps/cpu/BeadPack/data/NewCentroids.txt
deleted file mode 100644
index b2461e9adf0b21fb2370362d7609c60a53f9ada4..0000000000000000000000000000000000000000
--- a/apps/cpu/BeadPack/data/NewCentroids.txt
+++ /dev/null
@@ -1,6864 +0,0 @@
-2.397382	1.487592	0.417539
-2.368312	0.792199	0.414552
-2.404938	2.334875	0.417688
-2.408864	2.601136	0.404545
-2.452162	1.733784	0.398378
-2.472830	1.032642	0.402264
-2.468872	3.203534	0.411805
-2.490606	0.355152	0.398030
-2.500741	2.847513	0.410899
-2.501491	3.461930	0.407456
-2.500772	4.533719	0.422211
-2.531121	0.099776	0.408834
-2.558878	2.130816	0.400204
-2.620484	3.703871	0.402419
-2.614297	4.973498	0.416388
-2.644836	0.817089	0.406291
-2.635581	1.892093	0.398605
-2.677556	1.652444	0.397556
-2.669632	3.966691	0.414338
-2.683929	4.230982	0.409732
-2.728095	3.262286	0.423016
-2.753871	2.333710	0.405806
-2.750204	2.847755	0.402449
-2.777037	1.429630	0.408025
-2.798280	1.170376	0.417204
-2.312500	1.244167	0.411111
-2.366619	3.733986	0.428577
-2.363713	4.770099	0.427030
-2.408919	3.997405	0.428757
-2.491375	6.236543	0.430558
-2.589587	5.468347	0.425744
-2.608462	6.005923	0.420077
-2.637723	5.740660	0.427030
-2.664545	2.572893	0.415289
-2.690426	4.716170	0.410213
-2.780526	0.172632	0.401579
-2.783232	3.521717	0.414343
-2.810497	2.085580	0.424530
-2.819956	0.425200	0.421333
-2.819569	4.457682	0.438086
-2.875584	0.925455	0.419610
-2.877581	1.836613	0.423629
-2.265437	0.469612	0.424563
-2.259412	3.500980	0.424902
-2.288827	0.202793	0.432346
-2.302544	3.008402	0.430059
-2.356620	5.347183	0.421549
-2.368495	5.600430	0.424516
-2.375093	5.864472	0.428385
-2.432959	4.265867	0.430612
-2.563371	1.290400	0.426457
-2.602632	0.558421	0.415789
-2.740566	6.211321	0.420189
-2.829774	5.125338	0.431955
-2.838870	5.382435	0.429739
-2.865577	3.788462	0.439872
-2.847897	5.915187	0.440374
-2.898192	3.055346	0.439769
-2.216304	1.783152	0.435652
-2.221633	2.760476	0.439932
-2.223838	3.253838	0.437576
-2.250484	4.436290	0.429677
-2.258552	6.356552	0.438069
-2.916866	4.065791	0.447194
-2.928049	2.513049	0.436402
-2.940404	4.720594	0.456318
-2.975446	0.030792	0.433267
-2.969467	1.592311	0.446756
-2.144865	1.535811	0.449392
-2.156744	2.021163	0.442558
-2.156667	2.267901	0.445185
-2.171579	1.063509	0.437193
-2.166571	4.189810	0.458810
-2.274286	6.090571	0.440714
-2.369961	5.077266	0.455352
-2.385510	1.964898	0.432857
-2.858182	0.678939	0.442879
-2.971250	3.340000	0.438750
-3.004615	1.326731	0.444615
-3.000741	2.265926	0.441296
-3.042338	0.280260	0.452403
-2.094858	0.035330	0.467264
-2.132318	4.651060	0.462185
-2.142250	5.478550	0.466050
-2.161797	3.918125	0.455859
-2.145514	4.923730	0.474622
-2.148750	5.214632	0.460147
-2.195714	2.506786	0.443214
-2.941860	6.391395	0.446977
-2.974000	6.154833	0.451167
-3.055106	0.528723	0.445106
-3.058617	2.027766	0.457766
-3.081667	1.067250	0.460333
-2.063247	0.837273	0.473961
-2.092911	3.675443	0.462532
-3.048129	4.291367	0.465396
-3.094164	0.790214	0.473523
-3.061724	5.223448	0.463448
-3.056184	5.756579	0.467895
-2.057681	0.324525	0.483042
-2.045430	1.293333	0.479194
-2.045737	2.946526	0.479158
-3.079532	5.489169	0.491065
-3.134628	2.888512	0.480992
-3.128677	3.869613	0.492581
-3.152727	1.765818	0.473273
-2.025338	3.420912	0.495304
-2.006329	4.409306	0.504913
-2.036471	6.218431	0.481765
-2.057520	5.966545	0.494797
-2.167024	5.732976	0.489167
-3.130435	4.535217	0.484493
-3.143043	2.634348	0.473478
-3.159627	3.167801	0.492116
-1.969557	1.845897	0.512681
-1.978909	0.585527	0.508655
-1.986923	2.689615	0.482308
-3.154933	6.001600	0.499933
-3.226455	0.106636	0.502455
-1.936972	1.054404	0.508532
-1.932615	2.168769	0.506000
-1.962500	2.444196	0.512768
-2.852981	5.625481	0.504904
-3.215521	2.400097	0.521671
-3.209871	4.781484	0.511806
-3.218000	3.433500	0.505750
-3.216122	4.110204	0.500204
-1.918834	3.856632	0.534275
-1.918261	1.586087	0.504348
-1.929562	5.083577	0.526350
-1.934507	5.338169	0.511831
-3.030447	4.983610	0.530000
-2.612966	5.216525	0.531949
-3.242780	1.275415	0.540361
-3.314545	1.517576	0.523939
-1.873882	0.138118	0.530235
-1.905200	4.762945	0.545200
-1.923365	5.594952	0.546346
-2.643443	3.031721	0.542787
-3.010687	3.587694	0.553548
-3.297042	3.669437	0.530282
-3.293654	4.351346	0.529038
-3.295675	5.044810	0.548927
-3.291660	5.332648	0.545929
-3.289350	5.657870	0.552599
-3.337926	0.339407	0.535407
-1.850217	3.090290	0.545290
-1.844217	5.836627	0.546988
-2.929859	2.756268	0.541761
-2.944545	3.086364	0.571364
-3.348621	0.782759	0.532414
-3.345065	2.166623	0.540909
-3.371015	1.038609	0.557594
-1.814949	0.388788	0.556465
-1.812745	1.256863	0.548039
-1.816522	2.840435	0.547391
-1.818585	3.604906	0.553491
-1.825911	4.121921	0.567340
-1.828148	0.835556	0.546481
-1.831011	6.089787	0.562926
-3.382353	1.753382	0.547941
-3.368929	4.582321	0.556071
-1.778737	4.525051	0.577929
-1.796909	6.365164	0.573091
-3.363967	6.160516	0.584321
-3.379647	3.914706	0.564000
-1.767957	2.000215	0.570860
-1.753034	2.605655	0.586414
-1.769918	3.343607	0.589536
-2.227092	0.668723	0.587943
-2.603869	1.503065	0.580352
-2.651250	1.001705	0.577614
-3.131751	6.325036	0.591823
-3.367500	5.897833	0.567167
-1.737204	1.734194	0.585806
-1.728414	2.337252	0.609207
-2.333005	2.151913	0.587432
-2.593492	2.401270	0.574921
-3.454105	2.508158	0.592842
-3.444286	4.162381	0.593401
-1.720179	1.479107	0.599524
-1.723238	4.936238	0.603238
-1.724337	5.434217	0.596747
-1.732581	0.618065	0.579032
-2.322714	0.020714	0.597714
-2.545033	3.848301	0.600458
-2.598500	0.265500	0.598375
-3.245395	1.952500	0.594211
-3.340714	2.715000	0.579286
-3.369130	6.396087	0.583913
-3.460809	3.489223	0.615469
-3.477054	0.140536	0.591339
-3.486379	0.603966	0.590000
-3.484865	1.971757	0.596892
-3.490536	1.330357	0.596964
-1.704972	1.040608	0.610442
-2.438477	0.507531	0.615103
-2.538158	4.723947	0.610197
-2.589894	4.377447	0.608511
-3.237879	0.587677	0.603838
-2.265368	1.378896	0.628067
-2.326066	1.646256	0.622701
-2.519722	1.812917	0.617639
-2.744512	1.927439	0.623963
-2.758642	0.061204	0.626296
-2.791951	1.679024	0.607073
-3.489624	5.489286	0.629023
-1.651161	4.308968	0.633935
-1.670833	5.676019	0.623889
-2.076077	3.182488	0.631675
-2.324197	4.569663	0.641580
-2.448690	1.151508	0.636111
-2.462908	6.001454	0.641684
-2.576327	3.291927	0.642218
-2.818669	6.096730	0.638403
-2.861266	2.353418	0.621899
-3.103488	1.480233	0.623605
-3.498596	5.195000	0.624561
-3.535577	1.580769	0.622115
-1.643774	0.225849	0.635094
-1.632230	2.987311	0.648918
-1.633757	5.196618	0.654538
-1.673731	3.804231	0.641154
-2.306959	2.417872	0.650372
-2.321044	3.387071	0.650135
-2.348478	4.144042	0.655643
-2.480896	5.739254	0.629701
-2.488994	0.820828	0.637515
-2.526848	3.567994	0.648854
-2.658209	6.280000	0.635970
-2.679266	2.178807	0.637982
-2.701818	2.794034	0.645966
-2.798589	4.234896	0.640290
-2.812050	3.416584	0.643043
-2.890765	1.048412	0.644824
-2.950000	3.040000	0.610000
-3.439524	4.813061	0.635374
-3.537865	3.738989	0.638315
-3.550663	0.866188	0.646906
-1.634384	5.934155	0.654292
-1.621625	6.201875	0.647625
-2.259130	3.634565	0.638696
-2.279091	1.907172	0.646768
-2.483165	2.612615	0.651927
-2.701071	1.248049	0.660769
-2.689926	5.880370	0.650815
-2.705106	0.497690	0.661489
-2.743851	0.777905	0.649730
-2.762778	4.604747	0.657424
-3.002613	1.862484	0.655871
-3.590247	0.387407	0.653765
-1.602545	1.265636	0.650364
-1.596048	3.544948	0.670447
-1.614746	4.711695	0.648983
-2.158065	2.643706	0.671853
-2.292331	5.574942	0.675315
-2.304000	3.869143	0.651143
-2.337895	3.117953	0.663450
-2.348532	4.893257	0.658807
-2.441409	5.354228	0.656644
-2.457704	2.882185	0.665333
-2.738983	5.419322	0.649831
-2.833563	4.860063	0.657250
-2.956210	2.968629	0.684435
-2.967804	4.436682	0.663318
-2.984370	5.906296	0.655037
-3.559372	2.208010	0.660471
-3.562955	5.792386	0.655568
-3.604661	1.123898	0.657542
-1.576404	4.068090	0.667978
-2.065062	2.033765	0.675741
-2.071416	4.043382	0.679075
-2.176311	6.350299	0.676013
-2.762201	3.713491	0.680252
-2.968413	0.645329	0.676617
-3.012778	0.133611	0.653889
-3.033940	2.537616	0.682848
-3.572809	6.316340	0.672723
-3.592857	4.620893	0.660893
-1.559213	0.475354	0.682677
-1.555547	0.748984	0.683672
-1.563000	1.879714	0.677571
-1.569689	2.137358	0.676684
-1.557460	2.729206	0.682222
-2.197280	2.908640	0.676000
-2.207910	6.061721	0.693238
-2.269611	0.946833	0.678389
-2.357645	0.259504	0.684545
-2.420127	6.254051	0.673291
-2.633662	5.012817	0.682629
-2.861502	5.178115	0.690990
-2.918478	2.112536	0.677681
-3.020902	3.278443	0.685984
-3.608667	3.989714	0.674476
-2.074688	2.294531	0.676563
-2.112326	1.160066	0.697841
-3.035946	5.656284	0.699527
-3.071687	0.387055	0.701963
-3.126940	5.192672	0.700043
-3.615870	4.983804	0.682391
-3.615655	6.046773	0.702843
-2.020390	3.669894	0.710496
-2.090877	1.557544	0.683860
-2.098194	0.179226	0.711387
-2.131899	4.748354	0.702658
-2.168091	0.433727	0.696273
-2.729212	3.980242	0.704545
-2.910952	6.396190	0.685238
-3.149504	4.244771	0.710458
-3.669000	2.437100	0.696400
-1.515508	2.456017	0.708559
-1.512258	5.511505	0.705699
-2.166268	5.266197	0.709014
-2.795035	3.161678	0.712448
-2.974080	4.058000	0.703120
-3.001826	1.270609	0.702435
-3.161604	1.084528	0.703396
-3.160127	2.172278	0.700000
-3.196029	3.030588	0.695735
-3.455374	4.407357	0.714361
-3.662241	4.262586	0.704741
-3.678974	1.781496	0.707863
-3.663786	3.310214	0.714643
-3.697296	0.664025	0.715597
-1.499756	3.242033	0.724350
-1.506481	4.499568	0.716358
-1.493799	4.973436	0.735307
-2.005123	0.905215	0.727362
-3.007302	3.800476	0.711111
-3.148400	2.783300	0.722600
-1.478393	1.002917	0.735417
-1.496667	1.485145	0.724565
-1.501742	6.389318	0.731136
-1.933623	1.371739	0.724493
-1.962326	4.279457	0.727442
-2.127321	5.007143	0.725089
-2.504146	2.023902	0.720732
-2.734013	2.545405	0.737864
-3.234436	1.664812	0.721278
-3.690556	3.560000	0.713611
-3.728997	0.185350	0.745380
-2.085038	4.496241	0.741729
-2.782862	5.656325	0.749399
-2.835618	0.285843	0.732697
-2.997536	4.684058	0.727246
-3.140611	6.086889	0.740611
-3.147182	0.826364	0.735273
-3.209386	4.514910	0.749675
-3.219636	3.986545	0.746727
-3.225019	5.491407	0.749011
-3.703736	5.610220	0.739011
-3.738947	1.494842	0.738632
-1.905000	0.011429	0.742143
-1.904796	5.291403	0.758100
-2.081667	3.412667	0.750667
-2.795053	1.484526	0.744000
-3.232353	0.188067	0.747059
-3.322683	1.427642	0.751951
-3.350551	2.319291	0.748425
-3.711596	5.226702	0.740000
-1.442583	3.743432	0.763100
-1.426824	4.257882	0.759294
-1.430851	5.808617	0.763298
-1.444762	6.077302	0.748571
-1.840419	2.143263	0.770210
-1.955492	5.879590	0.762705
-1.986272	6.176805	0.759882
-2.368182	5.130545	0.745455
-3.177489	3.459910	0.762960
-3.752035	3.803451	0.760619
-1.432299	0.271839	0.758851
-1.851186	0.237119	0.757627
-1.932055	0.469589	0.760137
-2.486620	1.367512	0.779390
-2.956429	5.419571	0.774429
-3.223431	4.790962	0.775816
-3.234353	3.723882	0.768588
-3.285859	2.574978	0.780661
-3.391176	1.184118	0.762941
-3.408194	3.053965	0.795507
-3.777143	0.920000	0.770286
-1.404593	2.972185	0.789444
-1.406768	4.725253	0.773434
-1.412171	5.260465	0.774961
-1.822931	4.681034	0.765690
-1.836053	1.868947	0.766579
-1.849159	0.705421	0.777290
-1.860621	1.616158	0.789209
-1.921852	2.600926	0.770185
-1.953125	6.397500	0.764375
-2.076073	1.796164	0.781826
-2.203869	5.809311	0.792066
-2.989551	1.631910	0.777865
-3.758429	4.754031	0.781047
-3.784390	2.231220	0.765122
-1.389431	1.249701	0.804251
-1.389762	1.734762	0.780476
-1.852257	2.850817	0.793035
-1.849811	5.538679	0.778868
-2.476749	0.052792	0.797138
-2.506463	2.266463	0.785122
-2.535452	5.552776	0.798194
-2.585108	4.191477	0.794554
-3.028158	4.963474	0.794263
-3.316235	0.435608	0.800314
-3.368723	0.699734	0.789681
-3.362439	2.064024	0.790610
-3.377851	5.004050	0.791240
-3.786757	2.847568	0.786216
-3.809590	0.439147	0.800341
-3.811440	1.186070	0.799728
-1.380195	2.258878	0.803366
-1.375563	3.466406	0.813000
-1.375208	1.987292	0.801875
-1.734930	3.178944	0.795634
-1.866233	1.137860	0.801349
-2.077397	5.481233	0.790000
-2.555560	1.630474	0.803319
-2.629226	5.252440	0.808542
-2.907613	2.741757	0.803964
-3.173286	5.840143	0.795143
-3.377489	5.698018	0.799780
-3.374660	5.999796	0.809048
-3.777983	5.866481	0.799313
-3.803864	4.073977	0.808750
-1.371229	4.010000	0.817973
-1.871671	3.861671	0.825633
-2.091046	0.659346	0.813007
-2.388529	4.367157	0.808922
-2.544516	0.647097	0.802419
-3.323380	6.306852	0.809630
-3.350526	5.261316	0.803684
-3.435177	1.800851	0.822979
-3.770916	6.232977	0.811527
-3.816222	3.103889	0.797222
-1.794958	5.065714	0.816387
-1.839585	3.474473	0.824984
-2.329545	0.741970	0.813485
-2.403438	3.724063	0.813750
-2.536557	3.081639	0.809344
-2.561082	4.564131	0.822754
-2.908693	0.863660	0.825229
-2.943148	3.586296	0.808889
-3.010943	2.320000	0.819057
-3.348889	0.951556	0.810889
-3.471038	0.236415	0.817642
-3.601707	2.000610	0.813171
-1.611400	1.677600	0.823800
-1.774286	4.110000	0.828869
-2.650233	4.804884	0.814884
-2.710141	1.034930	0.819014
-3.193696	1.892174	0.825761
-3.396579	3.332105	0.824737
-3.593151	1.313836	0.823973
-3.857794	1.988578	0.837990
-1.340148	0.490815	0.833852
-1.674087	5.383652	0.834087
-1.680149	0.067139	0.856219
-1.709560	1.397170	0.842327
-1.727326	6.336028	0.852009
-1.721634	0.921206	0.850428
-1.952759	4.875241	0.839103
-2.040645	3.022258	0.828925
-2.299583	2.060625	0.837708
-2.563333	0.351026	0.835449
-2.573607	6.145689	0.849208
-2.779414	4.403555	0.845391
-3.715385	2.627179	0.827436
-3.835978	5.421285	0.837933
-3.871071	2.445893	0.830536
-1.312034	5.530339	0.846356
-1.330120	0.053593	0.843952
-1.309809	2.524306	0.868565
-1.683378	2.599392	0.848986
-1.745817	5.753983	0.866361
-1.777284	6.041802	0.862741
-2.160153	3.857691	0.865294
-2.176571	4.218476	0.853714
-2.433579	3.974632	0.848211
-2.525333	6.392889	0.842222
-2.654748	3.441978	0.854676
-2.744180	2.941719	0.859688
-2.753918	2.295448	0.861493
-2.803908	6.258621	0.842759
-3.069479	6.320274	0.856192
-3.383600	2.793600	0.836000
-3.435035	4.647588	0.862084
-3.447405	3.606997	0.862624
-3.490390	4.128485	0.853030
-3.801609	5.013166	0.863958
-3.861077	4.320615	0.836308
-1.296452	4.491290	0.850484
-1.299860	6.307378	0.869755
-1.739548	4.398404	0.866506
-1.820364	2.390727	0.846545
-2.143789	1.369158	0.869158
-2.203188	3.227536	0.864855
-2.316842	1.180351	0.848421
-2.379250	1.824600	0.870000
-2.445319	3.295319	0.853404
-2.460857	0.950429	0.858429
-2.533789	5.812484	0.860248
-2.847848	1.960000	0.855696
-2.920777	0.050971	0.855243
-3.476173	3.863086	0.858272
-3.562095	5.394775	0.870133
-3.662546	4.487056	0.868488
-3.895920	1.723731	0.864925
-3.885516	3.349008	0.869405
-3.906026	0.689423	0.873429
-1.293172	1.526621	0.866276
-1.281688	3.230130	0.863636
-1.285058	5.057965	0.873256
-1.610789	3.921842	0.861579
-1.662078	0.334416	0.867662
-2.208000	3.591231	0.867385
-2.320694	1.550417	0.862083
-2.352879	0.491629	0.876402
-2.563237	2.743734	0.873817
-2.623462	1.873077	0.860577
-3.510606	1.536364	0.861818
-1.621017	1.161864	0.868305
-1.656279	1.985581	0.875349
-1.685665	3.674162	0.886069
-2.064332	2.429170	0.887148
-2.302759	5.397085	0.888621
-2.427705	2.495738	0.867049
-2.700635	0.150000	0.877460
-2.937527	5.810430	0.879247
-3.138703	0.616444	0.885649
-3.177879	3.224545	0.874444
-3.507094	2.474926	0.882118
-1.264448	0.979178	0.905042
-1.641003	0.599027	0.903186
-1.958750	3.250500	0.875500
-2.284030	2.305970	0.879104
-2.737640	5.954944	0.884719
-2.828667	4.147000	0.882000
-3.547773	0.535547	0.896761
-3.887363	3.622239	0.891294
-3.909011	4.569780	0.884066
-3.940263	1.468684	0.890526
-1.253410	6.032605	0.907241
-1.625374	2.241905	0.911871
-1.622440	4.635833	0.903333
-2.078704	2.168889	0.891481
-2.320027	2.874521	0.902986
-2.358804	5.992919	0.904976
-2.417100	4.796283	0.907063
-2.774314	5.044216	0.895196
-2.901889	3.355056	0.898611
-3.000382	1.095038	0.890916
-3.532148	6.196242	0.901611
-3.568757	1.035444	0.898757
-3.915479	5.668537	0.911755
-3.916205	6.058554	0.902590
-3.943674	0.168295	0.906023
-1.245827	0.711575	0.906299
-1.633989	2.975426	0.913936
-1.998702	5.681985	0.906489
-2.249545	4.605227	0.899886
-2.344211	6.250752	0.905338
-2.520085	5.037627	0.909576
-2.629735	3.707743	0.917168
-2.796157	0.483843	0.911065
-2.852662	3.842230	0.909281
-2.965039	3.091836	0.920664
-2.975780	1.418688	0.917589
-3.199946	1.266965	0.922195
-3.569256	4.878837	0.912140
-3.558571	5.131224	0.902653
-3.942876	3.881046	0.912222
-3.955171	2.686844	0.921217
-1.235251	3.672040	0.926488
-1.223385	4.813231	0.913692
-1.222681	5.767101	0.924275
-1.467032	2.747385	0.926042
-1.484718	0.822077	0.926232
-1.579177	5.140823	0.925127
-2.101038	6.019937	0.930692
-2.746882	5.460000	0.921118
-2.790596	1.666358	0.924503
-2.960647	6.077314	0.937627
-3.058412	2.082575	0.926223
-3.139735	5.320596	0.923576
-3.194096	2.945000	0.927711
-3.599104	2.952939	0.932616
-3.926241	6.387092	0.921135
-3.969286	1.005000	0.906429
-3.968000	2.232333	0.916500
-1.223284	0.286418	0.920448
-1.216129	2.753226	0.915806
-1.219004	5.307229	0.933939
-1.517917	5.647188	0.926979
-1.604080	3.430800	0.932800
-2.000000	4.640552	0.935521
-2.062077	0.040831	0.932971
-2.120691	6.368351	0.923298
-2.669925	0.813284	0.930672
-2.859073	4.746537	0.928683
-3.009104	4.522127	0.931642
-3.522596	2.210894	0.936255
-3.952545	5.216545	0.919636
-2.102935	0.413478	0.947754
-2.160833	2.668854	0.933646
-2.197617	0.917584	0.945336
-2.295225	0.241892	0.935225
-2.340513	5.653718	0.933974
-2.898299	2.515910	0.949433
-3.136286	5.645143	0.939657
-3.248462	4.161026	0.937179
-3.633443	0.782350	0.941366
-3.665512	3.475354	0.943780
-3.966357	4.817214	0.933786
-1.203127	1.761273	0.950873
-1.197041	2.108136	0.959675
-1.198472	3.008908	0.953450
-1.554718	4.157534	0.965147
-1.561045	5.920000	0.938955
-2.081849	5.252798	0.958491
-2.709218	3.189609	0.956034
-2.794648	1.230000	0.958592
-3.029576	4.016186	0.944576
-3.073704	3.737593	0.947963
-3.347132	4.410441	0.951838
-3.582606	5.926649	0.948670
-3.591888	3.224847	0.951480
-3.587091	5.654390	0.965896
-1.177792	3.923766	0.953117
-1.496143	4.414714	0.949429
-1.525031	6.176180	0.968354
-1.729424	4.870373	0.968339
-2.665758	1.448182	0.948333
-3.006909	1.800182	0.963333
-3.154424	0.305707	0.968822
-3.156456	1.603291	0.953038
-3.198233	5.064224	0.970517
-3.263884	0.052416	0.968807
-3.645668	1.718704	0.964615
-3.732841	0.033125	0.960227
-3.949706	2.943971	0.949265
-4.015778	0.408444	0.943778
-4.014265	1.241176	0.949412
-1.181769	1.238435	0.965034
-1.166528	3.423194	0.964028
-1.295723	4.267803	0.971272
-1.488462	3.171209	0.967582
-1.962958	3.657324	0.957042
-2.423423	3.518255	0.964094
-2.522401	2.076095	0.975515
-2.660000	3.986567	0.958209
-3.228920	2.395634	0.968263
-3.664131	0.306239	0.982165
-1.523655	1.506948	0.985542
-1.891134	1.993763	0.981546
-1.934558	4.250726	0.992177
-1.963838	0.807374	0.973636
-2.166076	4.845204	0.991090
-2.542938	1.162147	0.980395
-2.641094	2.519688	0.975469
-2.901918	0.263425	0.972466
-3.029474	4.261228	0.975263
-3.092979	2.718723	0.969787
-3.228386	6.131713	0.999114
-3.254305	3.897219	0.988874
-3.345795	5.506705	0.980000
-3.992872	4.125213	0.972660
-1.468807	4.911684	0.995579
-1.476220	5.396457	0.994685
-1.860000	3.054098	0.984918
-1.913974	1.345364	0.990066
-1.932464	5.454493	0.985217
-2.141969	1.937480	0.991260
-2.320667	5.153333	0.977333
-2.911980	5.226040	0.985248
-3.114300	0.859900	0.983100
-3.656426	3.739279	0.999459
-3.682578	4.245781	0.985781
-4.031020	3.180612	0.976327
-1.134942	4.599826	1.005581
-1.807582	5.242008	1.002664
-1.868811	0.223216	1.010617
-2.032481	1.117786	1.010840
-2.315714	0.014405	1.008452
-2.394439	4.184439	0.999112
-2.730625	5.731625	0.988375
-3.102121	4.755606	0.990455
-3.550635	2.701111	1.002910
-3.705417	1.460000	1.006250
-3.751892	2.308919	0.985676
-4.031121	5.446379	0.997500
-4.054758	2.454516	0.999355
-1.128452	2.395000	1.001786
-1.125000	5.531724	1.002069
-1.147391	0.504239	1.004891
-1.388894	4.652304	1.017235
-1.424488	3.841417	1.007953
-1.452677	0.323780	1.008504
-1.527427	2.468299	1.015975
-1.535000	6.400000	0.990000
-1.923284	6.215654	1.020765
-1.965618	1.738146	1.011124
-2.000923	2.847923	1.014077
-2.073362	3.433491	1.013879
-2.373387	1.347661	1.011935
-2.386604	3.112830	1.000377
-3.084390	3.495122	0.997073
-3.334043	4.847518	1.006667
-3.354638	5.844493	1.004493
-4.040190	4.383641	1.020788
-4.054638	2.013957	1.011489
-1.463051	1.779153	1.010000
-1.753936	2.778617	1.013830
-1.863553	0.508711	1.024654
-2.569657	0.531486	1.021943
-2.574615	0.010000	1.018462
-2.614414	4.313862	1.025448
-2.880625	0.700063	1.019688
-3.291429	2.147500	1.006786
-3.451975	1.978642	1.013457
-4.078571	1.640238	1.015238
-1.105259	6.259397	1.030690
-1.467759	2.075862	1.021638
-1.778759	1.550483	1.033862
-2.002813	3.987188	1.015313
-2.184810	4.398228	1.026835
-2.425111	4.488278	1.033000
-2.444648	0.769859	1.025211
-2.512006	5.314904	1.042866
-2.657029	6.349086	1.028114
-2.776438	2.730959	1.016986
-2.821739	0.984203	1.030145
-2.895489	6.382030	1.033759
-2.964153	4.958602	1.041695
-3.121290	5.891720	1.023333
-3.344231	1.454167	1.031731
-3.449132	1.219589	1.032100
-3.506912	0.107353	1.021029
-3.697500	1.198906	1.025469
-3.707475	4.697273	1.030657
-4.044763	5.872145	1.037326
-4.081846	0.825385	1.018923
-1.106707	1.485122	1.028537
-1.097320	5.033608	1.035464
-1.711202	1.809457	1.042907
-1.705263	5.525724	1.038750
-1.711566	3.235301	1.037349
-1.784030	1.093433	1.035224
-1.911446	5.877107	1.045537
-1.923237	2.593816	1.046184
-1.961901	5.028521	1.038873
-2.148022	1.571758	1.031209
-2.150877	5.535263	1.037544
-2.215120	0.650756	1.043643
-2.786273	2.106182	1.039909
-2.868906	3.616875	1.040391
-2.971798	5.471629	1.039438
-3.273469	1.036531	1.023673
-3.401111	0.328254	1.028571
-3.700880	1.968160	1.035520
-3.721598	6.119315	1.048311
-3.731921	3.991854	1.046291
-3.774390	0.974146	1.028537
-4.076887	3.438344	1.039205
-1.458144	3.591237	1.053608
-2.468173	2.330288	1.042019
-2.481825	1.580079	1.059802
-2.562054	2.936811	1.048595
-2.727699	4.552773	1.061475
-3.335229	3.130065	1.044837
-3.355696	3.438386	1.059272
-3.353281	5.256979	1.056719
-3.402579	0.717557	1.049321
-3.387769	6.350808	1.054115
-3.807518	3.127021	1.045745
-4.086526	3.701579	1.042737
-1.075000	4.112500	1.055385
-1.078333	4.355000	1.048889
-1.343299	2.302577	1.052577
-2.146349	3.063983	1.067967
-2.168985	5.794708	1.067600
-2.646436	4.833317	1.060149
-2.684048	0.310357	1.051905
-3.003115	0.489508	1.055246
-3.000920	2.299920	1.073040
-3.306829	2.634512	1.054878
-3.359425	1.720345	1.055402
-3.762390	2.549044	1.070000
-4.086694	6.129008	1.061983
-1.409247	0.574603	1.071423
-1.415899	1.281079	1.066978
-1.542207	1.036207	1.063793
-1.759046	3.960871	1.070913
-2.254000	2.151273	1.057818
-2.311180	3.944438	1.079551
-2.757742	1.863871	1.059677
-3.741739	5.469217	1.065130
-4.123350	0.045583	1.069369
-4.102563	4.650094	1.081313
-1.069763	0.777515	1.088876
-1.383464	5.171508	1.086927
-1.816339	4.535268	1.076339
-2.310297	1.106441	1.090424
-2.696045	6.091921	1.086384
-2.812427	0.058074	1.090923
-3.219877	1.920370	1.072222
-3.776679	2.824723	1.090000
-3.947168	5.034740	1.083353
-1.062269	1.039244	1.085462
-1.055388	1.927397	1.096895
-1.312022	0.120815	1.100730
-1.368933	3.352135	1.094663
-1.410439	5.798596	1.091140
-1.438595	2.953388	1.083306
-1.673463	1.318382	1.101974
-1.770277	2.383391	1.092907
-1.821115	3.462446	1.092086
-2.190444	3.713556	1.091444
-2.334571	2.555276	1.093436
-2.434861	5.820025	1.104810
-2.524808	1.835385	1.076923
-2.586500	5.563400	1.080500
-3.137896	6.375648	1.105043
-3.260388	0.512816	1.083981
-3.409390	2.889512	1.085488
-3.451176	4.225000	1.083971
-4.016903	0.600265	1.089912
-4.136770	1.069503	1.095590
-4.127400	3.944200	1.078000
-4.142364	2.240909	1.082182
-1.050250	0.294500	1.097500
-1.046941	2.731647	1.093176
-1.049630	3.244321	1.098580
-1.047273	3.737727	1.089394
-1.076241	6.011879	1.110709
-1.602805	0.115732	1.099512
-1.754380	0.851570	1.102562
-2.216496	6.175474	1.099416
-2.287222	1.767460	1.100952
-2.453077	6.129744	1.092308
-2.454624	3.727688	1.107052
-2.509065	3.315234	1.094393
-2.750714	3.404643	1.096786
-3.413152	3.729565	1.096304
-3.482273	3.973364	1.100909
-3.543064	4.469306	1.103179
-3.689076	5.017395	1.112227
-3.783444	0.500927	1.102252
-4.113622	6.383214	1.108724
-4.122259	5.229778	1.105630
-4.134774	2.855827	1.103835
-1.035225	5.739075	1.128575
-1.315020	2.638327	1.114286
-1.327222	4.052698	1.105476
-1.975623	2.200038	1.118717
-2.160670	4.157113	1.111495
-2.257073	3.291463	1.096341
-2.660528	5.097520	1.116341
-2.837485	2.954417	1.109141
-2.960945	5.724800	1.122109
-3.229266	4.574321	1.122283
-3.601795	5.271197	1.103590
-3.916301	1.817534	1.110342
-4.153655	1.369379	1.108759
-4.160659	0.300879	1.102967
-1.027251	4.803555	1.124882
-1.318231	6.387846	1.116846
-1.316667	1.568000	1.113111
-1.669193	5.776278	1.132377
-1.712500	4.312917	1.108542
-1.731586	6.035655	1.123103
-1.954286	3.233214	1.111071
-2.116400	0.215326	1.132189
-2.305795	0.414318	1.127008
-2.420592	4.949079	1.119934
-2.462093	0.193811	1.130154
-2.576349	0.949365	1.110635
-2.749035	2.349649	1.111228
-2.835813	1.504581	1.125567
-3.147434	3.286903	1.115752
-3.474736	6.086504	1.134085
-3.824179	0.754478	1.105821
-1.042597	0.036806	1.141403
-1.015289	2.982975	1.133967
-1.304578	1.923494	1.120843
-1.676667	0.349706	1.126373
-1.698793	6.281379	1.117759
-1.922314	4.791616	1.137118
-2.160328	1.308689	1.117541
-2.160164	2.373115	1.116885
-2.373435	6.371174	1.128217
-2.732892	3.820482	1.123735
-2.809591	4.094737	1.126374
-3.057020	1.052879	1.138990
-3.085870	2.533478	1.116087
-3.787529	5.723435	1.144635
-3.808516	4.475137	1.143104
-3.842378	3.523066	1.140372
-3.856058	2.141923	1.135769
-3.909710	1.369275	1.122899
-4.181786	1.825357	1.123214
-1.008873	3.494225	1.134789
-1.329345	0.814940	1.143155
-1.369534	6.052007	1.144731
-1.682694	3.687917	1.154250
-1.720263	2.089868	1.142303
-2.274423	5.321538	1.134423
-2.557638	2.690236	1.137165
-2.987347	3.866854	1.156502
-3.074758	0.084573	1.151293
-3.220732	4.301707	1.135366
-3.498224	0.966044	1.147383
-3.840977	6.325263	1.139699
-3.881721	0.268605	1.144605
-3.872857	3.791286	1.143714
-4.174059	4.190792	1.139109
-1.276575	4.855205	1.142329
-1.300854	1.073293	1.146951
-1.930897	0.029013	1.159193
-1.957391	5.642120	1.152446
-2.750941	5.347569	1.157020
-2.903973	3.208447	1.154612
-2.958254	1.973175	1.137143
-3.085391	3.020348	1.145130
-3.096380	1.454389	1.158643
-3.495410	2.499836	1.134918
-3.529241	0.514388	1.162110
-4.171959	4.923574	1.158179
-1.005208	1.289396	1.163509
-0.992558	5.205814	1.150233
-1.241750	3.552500	1.153750
-1.572026	2.685294	1.157908
-1.577356	4.517788	1.159808
-1.691725	2.970176	1.172817
-1.718028	5.053216	1.172653
-2.100571	4.595842	1.173451
-2.106222	6.383056	1.168333
-2.582894	1.360547	1.173473
-3.106418	0.685672	1.152239
-3.119667	5.242000	1.157778
-3.174783	4.066957	1.153043
-3.525658	4.810000	1.155000
-3.553691	3.085168	1.158523
-3.847615	5.258231	1.153692
-4.177056	3.117850	1.160467
-0.981475	2.277213	1.166393
-1.670117	0.614869	1.179155
-2.359342	2.836447	1.156974
-2.353275	5.568908	1.180387
-2.544195	3.976839	1.175000
-2.675947	0.722392	1.175482
-2.893846	5.970962	1.162212
-3.204839	3.617258	1.156129
-3.219476	5.713886	1.175764
-3.412326	2.273488	1.161395
-3.542567	1.587647	1.173422
-3.537478	5.818457	1.186647
-3.599783	6.319058	1.163188
-3.994650	2.637899	1.187395
-4.187927	5.699634	1.167439
-1.258122	3.126396	1.180305
-1.281478	4.483024	1.187354
-1.989054	0.661892	1.182568
-2.123402	2.691392	1.185155
-2.200373	5.079814	1.187578
-2.460388	4.695874	1.183350
-2.923806	1.266269	1.183731
-2.969677	2.753548	1.169032
-3.143390	1.710847	1.170678
-3.239277	1.234980	1.189518
-3.407509	5.036194	1.192076
-3.573355	3.546513	1.184770
-3.897380	4.793464	1.191054
-3.898947	0.019649	1.193860
-0.976316	0.520263	1.172632
-0.966866	2.522687	1.184627
-0.972500	4.528889	1.185208
-0.973534	5.461802	1.196007
-1.216288	5.338595	1.197391
-1.268571	0.365824	1.186044
-1.463746	4.275549	1.199634
-1.554854	2.274369	1.177767
-1.973971	1.490294	1.183529
-1.989829	0.932457	1.199010
-2.047612	5.378209	1.181194
-2.281799	0.866296	1.193228
-2.677113	5.860928	1.186495
-2.711143	1.138429	1.178429
-2.794024	0.486402	1.187805
-3.041176	6.157529	1.179412
-3.134706	2.116765	1.178529
-3.483315	5.547983	1.200580
-3.553636	1.841091	1.180364
-4.195686	5.460196	1.178627
-4.219247	2.444384	1.191096
-4.232700	0.526000	1.188200
-1.233130	2.864783	1.200522
-1.255333	3.823367	1.211367
-1.561583	1.646834	1.209151
-1.948912	3.704765	1.207206
-2.022527	6.050989	1.189341
-2.322781	3.513841	1.206424
-2.655697	3.126855	1.206439
-2.908750	1.737000	1.185000
-2.987224	4.492571	1.207510
-3.203176	2.811176	1.196118
-3.260543	0.871628	1.198450
-3.605191	2.126565	1.200916
-3.645474	0.021368	1.196421
-3.699377	3.300649	1.216831
-3.863871	1.131290	1.211548
-3.932133	4.033867	1.191600
-0.961502	1.554725	1.220733
-1.538750	1.920240	1.207596
-1.547023	3.915907	1.218605
-1.670119	4.777774	1.219139
-2.389449	2.001356	1.208771
-2.674101	1.688561	1.208273
-2.937399	4.765507	1.219696
-3.242438	0.294492	1.228600
-3.362075	0.053942	1.216307
-3.873204	5.962039	1.206311
-3.934674	2.375761	1.206522
-3.942133	2.992267	1.210267
-4.238052	1.592792	1.209481
-4.214545	4.453896	1.207532
-4.242757	0.852991	1.217804
-1.161917	1.727083	1.216667
-1.175139	2.138333	1.213472
-1.512676	3.168559	1.226324
-1.587367	3.440253	1.232937
-1.921019	1.237321	1.231434
-1.922661	4.099495	1.227431
-2.328993	4.337114	1.215973
-2.435750	0.619625	1.223625
-2.579707	2.188787	1.223138
-2.584300	3.537000	1.208200
-2.790947	2.585758	1.221061
-2.780000	4.336932	1.211364
-2.901224	5.137343	1.228706
-2.928966	0.850517	1.216983
-2.986050	3.460784	1.223697
-3.005648	4.230741	1.220741
-3.151056	4.996056	1.218732
-3.235876	5.454948	1.225000
-3.223860	5.985175	1.219298
-3.542931	0.252291	1.235739
-3.757184	4.219223	1.229320
-3.944364	5.518682	1.218864
-3.963382	3.260676	1.219710
-4.220690	5.938966	1.207069
-4.243544	3.621772	1.213165
-4.251184	2.054342	1.221513
-0.935085	4.010000	1.225085
-1.221944	2.420833	1.223889
-1.244286	1.366310	1.223810
-1.796533	5.373443	1.239552
-1.872292	2.773125	1.232431
-1.914118	1.924118	1.222000
-1.952243	4.373946	1.238135
-2.106504	3.917154	1.225772
-3.197087	2.348058	1.230388
-3.608202	0.748652	1.229213
-3.817568	1.611171	1.223694
-4.241705	3.362171	1.224961
-1.200744	0.608558	1.244233
-1.195580	4.232536	1.251812
-1.441181	5.463386	1.239055
-1.968723	0.401773	1.243546
-2.081929	1.713655	1.240508
-2.133590	2.031410	1.229103
-2.245104	5.972917	1.236771
-2.289583	1.547946	1.247470
-2.561310	0.409524	1.236786
-2.977692	0.320070	1.232937
-3.987723	0.897991	1.245134
-0.926601	4.273861	1.262673
-0.918961	5.001558	1.246234
-0.928209	6.184142	1.254627
-1.209368	5.074349	1.261152
-1.464815	4.984228	1.258981
-1.822110	1.688165	1.254862
-1.957462	5.157868	1.258528
-1.968053	2.441947	1.244956
-2.235692	4.817826	1.254901
-2.388850	3.144985	1.255811
-2.441931	5.168571	1.256757
-2.529577	2.463169	1.250000
-2.562342	4.457627	1.262975
-2.594444	6.251032	1.252222
-2.784205	5.587273	1.239545
-2.842091	6.269682	1.254136
-3.239173	3.850000	1.246241
-3.300349	4.800233	1.248023
-3.362906	2.042075	1.255434
-3.408627	3.270196	1.246078
-3.682017	2.371335	1.266307
-4.239324	6.192324	1.260206
-0.915054	2.063441	1.258495
-1.562464	0.838261	1.253478
-2.334837	2.272561	1.266748
-3.288995	6.235582	1.270767
-3.458150	1.357500	1.269150
-3.706593	1.391209	1.252747
-4.272817	2.683803	1.249859
-1.234016	5.852582	1.278484
-1.417994	4.694922	1.282821
-1.556632	5.239895	1.270895
-1.671720	4.127204	1.261183
-2.016038	3.446462	1.277962
-2.348333	1.292333	1.257333
-2.633853	1.935229	1.273211
-2.698684	4.696842	1.263421
-3.307324	1.561127	1.261549
-4.014045	1.988427	1.261461
-4.273681	4.710833	1.275417
-0.900545	2.820182	1.271818
-0.902540	3.668889	1.266667
-0.904518	1.805361	1.286807
-0.910569	5.917967	1.285285
-1.131903	6.365000	1.288419
-1.489452	0.247945	1.287705
-1.486585	1.401220	1.284146
-1.558714	6.388857	1.277286
-1.775616	3.240616	1.275205
-1.771563	1.037969	1.274688
-1.897778	6.275641	1.284217
-2.661915	2.869574	1.268298
-2.729163	0.224412	1.293643
-2.810000	3.649752	1.288515
-3.420698	2.733721	1.267209
-3.776604	1.938679	1.265660
-3.984275	6.180290	1.279638
-4.277500	4.006394	1.285433
-0.905478	0.722783	1.286261
-0.897876	3.334115	1.293584
-0.910754	0.214563	1.296310
-1.192807	3.352544	1.283333
-1.222201	5.583082	1.290629
-1.458500	2.481231	1.297269
-1.553254	1.148402	1.293669
-1.698462	0.010000	1.280000
-1.812785	0.211646	1.289367
-1.922767	3.028735	1.294269
-2.053412	5.829529	1.288118
-2.129537	3.200556	1.299722
-2.169713	2.926338	1.301083
-2.486207	1.098103	1.291853
-2.533433	5.411045	1.287687
-2.916073	2.165215	1.295446
-2.971407	5.406422	1.298593
-3.404677	4.357419	1.282419
-3.433929	4.603750	1.277321
-3.613864	1.152273	1.288333
-3.653990	2.641347	1.294301
-3.678217	4.659720	1.293881
-3.707610	3.925975	1.287547
-4.035810	0.413429	1.282286
-4.097035	3.814292	1.285531
-4.305370	1.105278	1.294537
-0.921429	0.985979	1.306455
-1.746818	2.555955	1.303545
-2.151045	1.115771	1.298259
-2.344308	4.087231	1.289077
-2.447355	1.759669	1.298347
-2.488227	5.997608	1.312928
-3.434656	5.299246	1.305180
-3.690606	5.418636	1.301818
-3.729651	6.156483	1.308779
-4.085942	0.156957	1.311957
-4.302000	2.935000	1.303063
-0.874149	4.724149	1.310957
-1.140308	2.654954	1.322923
-1.158462	4.679670	1.307308
-1.363647	6.250294	1.314588
-1.479080	0.507701	1.307356
-2.175613	0.547301	1.319724
-2.563146	5.666067	1.301798
-2.599423	4.185577	1.317356
-2.975263	2.433474	1.301895
-3.529494	4.139747	1.301013
-3.999146	4.245244	1.299390
-4.021944	1.482847	1.312083
-4.049314	1.735490	1.310098
-4.312768	0.318839	1.322202
-4.317212	1.372035	1.321327
-0.900000	6.400000	1.290000
-1.450000	0.010000	1.301818
-1.448333	5.699333	1.312833
-1.615981	6.151646	1.328196
-1.787560	3.892337	1.327629
-1.834861	4.601181	1.316389
-2.498667	0.841778	1.308667
-2.710398	4.952898	1.336748
-3.132793	1.916170	1.335559
-3.219355	2.592396	1.323041
-3.231739	3.429435	1.328696
-3.358132	2.968901	1.317143
-3.658475	5.166949	1.324322
-4.039680	3.500581	1.331512
-4.086304	1.233986	1.319130
-4.324355	1.803710	1.317742
-0.867500	3.070938	1.316250
-0.869730	5.667622	1.331351
-1.158635	1.151683	1.343714
-1.179364	0.173410	1.328439
-1.409143	2.746571	1.319714
-1.656441	5.576356	1.323390
-1.825833	0.775000	1.324333
-1.826612	2.229752	1.329174
-2.137075	5.594318	1.341281
-2.324439	3.834081	1.333184
-2.389058	2.658768	1.331522
-2.581344	3.763226	1.330538
-2.739205	6.052159	1.325568
-2.992016	0.555806	1.322177
-3.192179	3.159615	1.341325
-3.249042	0.546518	1.337029
-3.381086	3.644434	1.339095
-3.740415	0.936062	1.337306
-3.865490	5.021863	1.322451
-3.966364	6.395455	1.319091
-4.036400	4.614044	1.336978
-4.078589	0.665394	1.331992
-4.111341	2.253171	1.323537
-4.270000	6.400000	1.300000
-4.308716	5.305405	1.331757
-1.149106	0.854503	1.346126
-1.357895	2.238421	1.338421
-1.396420	3.588210	1.338827
-2.164020	6.189122	1.355898
-2.200957	2.485826	1.345391
-2.279438	0.237871	1.343373
-2.307586	4.560575	1.339483
-2.727000	0.913500	1.330000
-2.768797	3.956015	1.360301
-3.605538	2.901474	1.340518
-3.644286	4.914945	1.339451
-3.824559	0.695441	1.336912
-3.845833	2.806042	1.336667
-4.315200	4.261920	1.333520
-4.313750	5.044728	1.345707
-1.156528	6.096424	1.360000
-1.377477	4.066495	1.353925
-1.384706	0.975588	1.348088
-1.704571	4.378619	1.349333
-1.839889	6.030667	1.346667
-1.875227	4.927879	1.359318
-2.084819	2.243261	1.363080
-2.126173	1.371296	1.352531
-2.157342	3.651266	1.348987
-2.344268	5.771715	1.358410
-2.730000	3.340859	1.358591
-3.060522	3.692450	1.351044
-3.376984	1.788492	1.352738
-3.457834	3.898344	1.351529
-3.738717	0.450831	1.363302
-4.078687	5.148485	1.344545
-1.084583	0.408542	1.355729
-1.135497	3.637016	1.362356
-1.244487	1.955513	1.356282
-1.335696	1.603882	1.357637
-1.457939	5.945420	1.357939
-1.729015	1.359091	1.355985
-2.135015	4.216481	1.369120
-2.758523	1.415485	1.362700
-2.837645	5.802258	1.369613
-2.848545	3.035818	1.347636
-3.036848	5.651630	1.350652
-3.181591	4.399091	1.350227
-3.281456	4.145890	1.374919
-3.404486	2.420841	1.353551
-3.630000	4.404839	1.357419
-3.655556	5.664222	1.364000
-3.775558	0.175012	1.373753
-4.091207	2.804310	1.351552
-4.326549	5.560070	1.359155
-4.344778	0.665167	1.365167
-4.351406	2.237656	1.355156
-0.847818	1.228242	1.374000
-1.377763	2.996484	1.374338
-1.582590	2.116595	1.384269
-1.657879	2.796364	1.372828
-1.713889	0.433278	1.368389
-1.790446	3.553705	1.371473
-2.046124	0.109018	1.380233
-2.233437	5.276000	1.382000
-2.444154	4.926410	1.377436
-2.470517	3.368793	1.369598
-2.526916	1.529626	1.364579
-2.719306	2.353889	1.357500
-2.864492	1.898984	1.373743
-3.023582	4.027575	1.376157
-3.129722	4.659361	1.374972
-3.221282	1.051795	1.365641
-3.384872	5.723077	1.368718
-3.420748	5.985596	1.384709
-3.673100	1.740900	1.373100
-4.360917	0.051835	1.370000
-4.350606	3.778182	1.360606
-0.841000	2.608438	1.384438
-1.089630	2.986173	1.381687
-1.382932	0.724060	1.384286
-1.729583	1.895000	1.371111
-2.225150	1.873593	1.404012
-2.793818	4.511818	1.376182
-2.949115	0.122478	1.378496
-2.984740	6.023149	1.389513
-3.059641	6.287541	1.392238
-3.078446	2.930052	1.390104
-3.112981	0.775321	1.388226
-3.717143	6.391905	1.369048
-3.883071	3.700357	1.380857
-4.346309	3.184497	1.387349
-0.844133	0.483265	1.391173
-0.826000	3.870621	1.392828
-0.829286	4.488714	1.385857
-0.963611	2.389583	1.383472
-1.056606	5.241946	1.400317
-1.082564	3.890000	1.391731
-1.098129	4.437419	1.386516
-1.689801	5.830618	1.404967
-1.883774	5.639057	1.388962
-2.108968	0.797460	1.391706
-2.400566	6.292925	1.387453
-2.430973	2.912324	1.389189
-2.505862	0.143218	1.382874
-2.859053	2.783158	1.394105
-3.071224	5.173017	1.446753
-3.783445	2.159328	1.382773
-3.870891	4.432772	1.390000
-3.878529	5.775735	1.380588
-4.089015	5.650099	1.388670
-4.084909	5.392000	1.384182
-2.000500	2.634500	1.398500
-2.046866	4.727604	1.420346
-2.671796	0.564012	1.394910
-2.970301	4.954060	1.406466
-3.005614	1.461754	1.395614
-3.035809	1.207794	1.404118
-3.376698	0.763396	1.396604
-3.576977	1.961860	1.387442
-3.569504	3.149917	1.404628
-3.673413	5.915449	1.399940
-3.870000	5.277450	1.405839
-4.095899	4.862158	1.396619
-4.097667	3.068128	1.415026
-4.357117	4.510541	1.399369
-4.366977	2.510930	1.392326
-1.050526	1.380526	1.401447
-1.415051	3.335354	1.412475
-1.606606	3.723761	1.403303
-2.205000	6.400000	1.385000
-2.629545	2.674697	1.398333
-2.860000	1.641778	1.399333
-2.962241	3.241207	1.400000
-3.167941	5.842059	1.399265
-3.519714	3.419643	1.407786
-3.533788	0.053515	1.418703
-3.630476	3.667937	1.396032
-3.819254	3.074319	1.424859
-4.123897	2.549632	1.410221
-4.292117	5.823396	1.424528
-0.807556	2.212000	1.411778
-0.807763	5.174474	1.414079
-0.806409	5.432873	1.429282
-1.053097	4.886940	1.424291
-1.752398	5.149240	1.418363
-1.986961	5.359510	1.421029
-2.396250	0.447955	1.410795
-2.723195	5.304436	1.427594
-2.775779	1.144805	1.427955
-3.137885	1.655962	1.408269
-3.198026	2.169828	1.417854
-3.242581	1.373024	1.420282
-3.498679	0.534528	1.409811
-3.507470	0.969398	1.416506
-3.512042	6.241300	1.429443
-3.774858	3.461862	1.427085
-4.392708	0.914792	1.413333
-0.812923	1.482974	1.434308
-1.375444	4.365000	1.424889
-1.700197	3.048816	1.430724
-1.931885	0.573977	1.443977
-1.926968	1.515968	1.439258
-2.224978	3.416211	1.438326
-2.307626	0.958131	1.435455
-2.523114	4.662216	1.430120
-2.663684	6.390921	1.426053
-2.855479	0.735205	1.425548
-2.959091	0.970000	1.428030
-3.498934	1.561726	1.427005
-3.524577	2.209055	1.433532
-3.918663	3.961089	1.446386
-4.373262	3.455638	1.436099
-4.393878	2.010408	1.422857
-1.062055	2.156043	1.455368
-1.307524	5.321768	1.452958
-1.386154	3.824038	1.432500
-1.624685	0.671958	1.432448
-1.634444	4.911111	1.439753
-1.668833	1.595667	1.442722
-2.214474	5.017456	1.442018
-2.365397	5.518254	1.429524
-2.396709	3.608354	1.435570
-2.709792	2.116458	1.431250
-2.854478	0.395970	1.436567
-2.959224	4.347328	1.434310
-3.850247	1.293333	1.440988
-3.896721	6.014262	1.439672
-4.135205	6.029452	1.426164
-0.794451	4.920751	1.450751
-0.789545	1.963636	1.440000
-1.046000	5.488667	1.436000
-1.315153	0.374133	1.448316
-1.612015	4.608408	1.459204
-1.920444	0.949111	1.444667
-2.020000	3.986737	1.446316
-2.355709	0.699459	1.461047
-3.291993	0.155559	1.453706
-3.448842	4.791053	1.451526
-3.453307	5.074213	1.457387
-3.844691	4.802438	1.462346
-3.934620	1.057468	1.457911
-4.132540	4.398254	1.443810
-4.141161	0.895488	1.462665
-4.158165	1.917982	1.447431
-4.375161	6.080000	1.456129
-1.034009	1.632026	1.470881
-1.083352	5.739066	1.458791
-1.664194	2.363963	1.464885
-2.076054	4.456667	1.459660
-2.276301	2.104384	1.455068
-2.521081	3.985135	1.461351
-2.546716	1.290235	1.474604
-2.565544	3.128601	1.457358
-2.647702	1.761925	1.454783
-3.105244	0.339553	1.459268
-3.228527	4.922558	1.463721
-3.413919	1.191757	1.454865
-3.483619	5.517143	1.458571
-3.712296	4.118667	1.458741
-3.758879	1.526034	1.457845
-3.860100	5.536567	1.466667
-4.220435	1.632609	1.455109
-4.403351	2.752577	1.467268
-1.041712	4.145582	1.475479
-1.184957	2.443043	1.467478
-1.361250	4.864231	1.471731
-1.560867	4.207052	1.472543
-1.602414	0.100172	1.457586
-1.686452	0.903226	1.455484
-1.931212	3.245051	1.467172
-1.963409	3.736439	1.477652
-2.078350	0.353786	1.463786
-2.173713	1.621435	1.477848
-2.182375	5.938294	1.482074
-2.421783	4.377984	1.470698
-2.500455	2.231250	1.460795
-2.630492	3.550492	1.456393
-2.714774	5.567806	1.473613
-2.817516	4.755294	1.474444
-3.167261	5.474331	1.479904
-3.209437	6.098451	1.470423
-3.900410	1.866803	1.477336
-0.772708	2.837708	1.470208
-0.780220	4.257665	1.493901
-0.772667	6.136833	1.470833
-0.865840	3.540720	1.475040
-1.062985	0.631306	1.481903
-1.492881	1.762203	1.472373
-1.652105	5.376374	1.478187
-1.904151	4.266038	1.464717
-1.925045	1.778198	1.473784
-1.985544	1.196361	1.489592
-2.034770	2.011925	1.486109
-2.497372	1.972244	1.495160
-2.593307	6.172996	1.489416
-2.822593	2.544815	1.478272
-2.914925	3.488910	1.487744
-3.481295	2.622302	1.481295
-3.623568	0.749296	1.491044
-3.604557	1.332911	1.476456
-3.963407	3.290296	1.473704
-4.119423	4.120962	1.472692
-4.135503	6.272011	1.482328
-4.182327	0.486449	1.495163
-4.392415	4.811220	1.490707
-0.767037	5.896852	1.480370
-0.975932	0.052091	1.497338
-1.040000	1.890213	1.481915
-1.237054	3.171550	1.490388
-1.371509	0.128679	1.479623
-1.456471	5.527206	1.477941
-1.493114	5.120830	1.493806
-1.831138	0.017886	1.494797
-1.922759	2.860172	1.494741
-1.937105	2.412105	1.487105
-2.207647	2.737843	1.476078
-2.294492	1.213136	1.483390
-2.598608	0.341772	1.482025
-2.603097	5.828344	1.500903
-3.143769	2.414154	1.492846
-3.226022	3.914624	1.488065
-3.285193	2.796941	1.497969
-3.961523	2.361695	1.501351
-4.001818	2.099697	1.479848
-4.184000	3.654000	1.476286
-0.770244	0.706707	1.495976
-0.990336	3.218403	1.499412
-0.993832	6.247665	1.503293
-1.415000	1.205313	1.499375
-1.515524	6.316643	1.498112
-1.674980	3.305451	1.502941
-1.717576	1.147172	1.490202
-1.757295	6.291475	1.497705
-1.935255	5.856861	1.493212
-1.987935	6.378261	1.505109
-2.296000	4.758370	1.498667
-2.488413	2.489087	1.501827
-2.530078	5.140625	1.505000
-2.675082	4.338525	1.497541
-2.830833	6.246083	1.504083
-3.579063	0.300625	1.499844
-3.731556	2.497111	1.496667
-3.978500	0.305000	1.493625
-4.426387	1.191355	1.500129
-0.769730	1.730721	1.503784
-0.759173	3.309774	1.512105
-0.758119	6.386139	1.507723
-0.991527	4.633969	1.512824
-1.001000	2.774800	1.495400
-1.582949	3.949615	1.505128
-1.989300	5.113457	1.518889
-2.313013	3.179289	1.513598
-2.661130	2.895391	1.521609
-2.910377	2.314528	1.511887
-3.284897	6.349259	1.506296
-3.366479	2.000845	1.508662
-3.474921	4.530632	1.522079
-3.470196	4.262941	1.501373
-3.883431	6.274891	1.514453
-4.144576	1.386949	1.506610
-4.198478	3.895435	1.498043
-4.390608	6.356225	1.516852
-0.768269	0.270577	1.505769
-0.763622	1.015748	1.516378
-1.139143	3.428143	1.524821
-1.220058	5.075706	1.532680
-1.347322	4.607596	1.536393
-2.274233	4.040476	1.520106
-2.569324	1.014865	1.517838
-2.603963	0.764756	1.527500
-2.841714	4.150143	1.520000
-2.869740	3.757584	1.525651
-3.051639	2.662941	1.521050
-3.640380	5.323919	1.534133
-3.691373	1.102892	1.532647
-3.928506	0.569545	1.535227
-0.748310	4.680000	1.524648
-0.987244	5.990787	1.532441
-1.248358	1.777015	1.526567
-1.550845	0.325070	1.529789
-1.802545	4.053636	1.523091
-1.980920	6.115690	1.547070
-3.099281	0.020327	1.538497
-3.361878	3.238619	1.531271
-3.649297	3.878486	1.533514
-3.695610	2.750854	1.524878
-3.984727	1.617030	1.533030
-4.438533	1.461400	1.540900
-4.442609	1.734783	1.529891
-4.444211	0.239240	1.549357
-0.756059	2.420402	1.549812
-1.260738	6.266510	1.540940
-1.798763	0.263746	1.544089
-1.797333	2.091444	1.530333
-1.984824	3.488176	1.538765
-2.253588	0.060463	1.546250
-2.421066	1.682377	1.533607
-2.985594	2.067548	1.545441
-3.737570	4.579065	1.535140
-3.869872	0.828590	1.540128
-4.180617	1.144074	1.535926
-4.451597	0.504167	1.543403
-0.737656	5.659844	1.543594
-1.224308	5.936308	1.544154
-1.241796	1.002994	1.546347
-1.403705	1.987771	1.554940
-1.431962	5.774522	1.561411
-1.531302	3.529438	1.560947
-1.564082	1.387347	1.535918
-1.631932	2.610386	1.552850
-1.707153	6.052847	1.548681
-1.820317	4.755926	1.553175
-2.288794	2.338227	1.551844
-2.355030	6.114970	1.548698
-2.738489	0.159568	1.545827
-3.347873	0.396284	1.563863
-3.918151	0.035210	1.549874
-4.044706	5.844444	1.553007
-4.192803	0.188662	1.543949
-4.197474	5.242784	1.554794
-4.203944	4.642394	1.537887
-4.235577	2.139038	1.544423
-4.434722	3.936875	1.551806
-4.442787	4.327213	1.538197
-4.448652	3.676067	1.554607
-4.456964	2.344643	1.543750
-0.800000	3.062791	1.545116
-1.004716	1.106114	1.558777
-1.242222	2.874444	1.548889
-1.400196	2.692745	1.550196
-1.424984	2.437210	1.568464
-1.838259	4.488905	1.562587
-2.161698	2.972013	1.563585
-2.174203	5.455362	1.550435
-2.341538	1.445192	1.546154
-2.783852	6.011475	1.558934
-2.923148	5.443148	1.560926
-3.123909	3.354682	1.560045
-3.330597	3.504080	1.560995
-3.367290	5.315576	1.562679
-3.473529	2.971123	1.564278
-3.696269	5.047388	1.557985
-3.700952	6.109841	1.555238
-3.955831	5.078563	1.565887
-4.439916	5.322185	1.551597
-1.234712	5.573077	1.561731
-1.286710	3.651042	1.580684
-1.440571	6.075285	1.583052
-1.447722	0.553544	1.575612
-1.475618	3.141011	1.561124
-1.525000	2.897000	1.553667
-2.601826	4.864348	1.564261
-2.767320	5.070261	1.569216
-2.933440	4.550960	1.574240
-2.993046	0.540152	1.576701
-3.010172	1.798190	1.572543
-3.113846	4.181538	1.563462
-3.271791	0.905075	1.559851
-3.416989	3.758817	1.576559
-3.514000	5.818105	1.567316
-3.519744	1.801744	1.570564
-3.936667	2.870000	1.559216
-3.945766	2.617297	1.574595
-4.224419	2.381628	1.556512
-4.403148	2.995185	1.554630
-4.447183	5.065211	1.560282
-4.475577	0.759423	1.565000
-0.962102	5.076752	1.577261
-1.281275	2.216765	1.574314
-1.308767	4.160308	1.588062
-1.654043	5.636330	1.585213
-2.160443	0.566650	1.584926
-2.451379	2.732759	1.562586
-2.655973	1.533122	1.585204
-3.243027	0.650412	1.593995
-3.297971	1.596087	1.575072
-3.438551	4.027056	1.582991
-4.187818	2.875591	1.580273
-4.190299	5.512989	1.591413
-4.203366	4.981188	1.575347
-4.430524	5.647640	1.583708
-0.728545	3.729552	1.599179
-0.721798	3.993933	1.583596
-0.986327	2.538878	1.587143
-1.165962	0.215625	1.601851
-1.192875	1.284292	1.594875
-1.493164	0.978418	1.590791
-1.850159	5.494762	1.576190
-2.130696	2.535886	1.589747
-2.197714	3.627238	1.583905
-2.269738	5.681937	1.589372
-2.371268	3.810352	1.590211
-2.617372	3.772993	1.592190
-2.892852	3.012814	1.602281
-3.041767	4.790964	1.592450
-3.071364	5.695682	1.590000
-3.155168	3.080638	1.599195
-3.160909	3.696364	1.589636
-3.207455	1.157182	1.588091
-3.345200	2.304480	1.585920
-3.748878	5.743061	1.580510
-3.981260	4.541732	1.585984
-0.726214	1.294612	1.599854
-0.736584	0.035018	1.605089
-1.253784	1.530270	1.590405
-2.025625	5.647344	1.587031
-2.273548	4.529785	1.599140
-2.423152	5.356957	1.605109
-2.584795	3.358493	1.593973
-2.752480	1.945984	1.607402
-2.791207	0.925000	1.586034
-2.815650	3.271073	1.601243
-2.821694	1.340000	1.600242
-3.181145	4.427786	1.596794
-3.261724	4.668736	1.594368
-3.322450	5.647050	1.601750
-3.694539	4.328628	1.617157
-4.021296	3.506605	1.597284
-4.197219	3.269821	1.608724
-0.974479	0.400888	1.611853
-0.983810	4.371905	1.600000
-1.012857	0.844082	1.601224
-1.646993	1.907692	1.604336
-1.846406	0.763488	1.616335
-2.102105	1.405789	1.608852
-2.200965	6.301667	1.609693
-2.506053	5.606263	1.616474
-2.681911	4.584311	1.612222
-3.024609	6.152344	1.610000
-3.276097	5.907000	1.619774
-3.713101	2.263178	1.601705
-3.775961	3.660471	1.618667
-3.918159	4.169683	1.622857
-4.010230	3.770000	1.598851
-4.358293	0.015000	1.620488
-4.472182	4.581455	1.608545
-0.696613	5.090968	1.615000
-0.719866	0.493795	1.627679
-1.017292	3.683538	1.631046
-1.215000	4.397639	1.608194
-1.709596	0.518051	1.627243
-1.778246	4.996579	1.622982
-2.071391	2.232522	1.617913
-2.090305	4.899329	1.623049
-2.449971	6.348657	1.625714
-2.472749	0.193743	1.620877
-2.505934	4.187552	1.627676
-2.691379	2.382512	1.625714
-2.941346	1.552308	1.608846
-3.069811	1.354717	1.606981
-3.583735	2.046867	1.616145
-3.689470	0.110227	1.616364
-3.710000	6.398889	1.607778
-3.973333	5.365859	1.624293
-1.105986	5.352552	1.646334
-1.166204	4.774745	1.632263
-1.339167	0.780648	1.626944
-1.537314	2.208400	1.636057
-1.595452	4.405452	1.640268
-1.887895	2.622836	1.637778
-2.038412	0.179588	1.636765
-2.121786	1.820595	1.627024
-2.192567	0.834358	1.645012
-2.221387	5.193090	1.644307
-2.376127	4.966861	1.642658
-2.503281	0.501797	1.632188
-2.829292	5.775487	1.635708
-2.944620	1.120163	1.629837
-2.986806	3.976806	1.639660
-3.641019	4.799962	1.634264
-3.780306	0.376735	1.636871
-4.248761	2.619381	1.628230
-4.250000	0.701935	1.619032
-4.462857	5.905357	1.628316
-4.477893	3.232587	1.642053
-4.493467	2.113733	1.627467
-0.706134	2.170672	1.636050
-0.702661	2.665000	1.633952
-0.838036	5.289286	1.639643
-0.915652	5.523913	1.634348
-1.034953	2.982978	1.645235
-1.537404	4.792979	1.640128
-2.252240	4.274536	1.639508
-2.256756	0.331073	1.657415
-2.433750	2.984295	1.644103
-2.739123	0.456316	1.632281
-2.927964	0.287725	1.653593
-3.030484	0.797419	1.628226
-3.288969	2.568041	1.631753
-3.481951	6.053537	1.631707
-3.580914	3.487665	1.646802
-3.761316	1.715833	1.640746
-3.770975	3.306441	1.640254
-4.039739	4.786903	1.655970
-4.233115	5.989180	1.634590
-4.297778	4.160741	1.625185
-4.322048	1.933810	1.649143
-4.492160	2.572960	1.637360
-0.695914	4.468657	1.664029
-0.915476	2.030714	1.643452
-1.113953	3.943446	1.653176
-1.774355	1.486129	1.641129
-1.943632	3.071667	1.657265
-2.059400	4.116000	1.642800
-2.113106	3.290429	1.658359
-2.121168	3.866332	1.660326
-2.831393	2.737214	1.657183
-3.252421	1.824105	1.649368
-3.460317	1.049683	1.653571
-3.564028	0.542678	1.664431
-3.727297	2.967946	1.649243
-4.330256	0.937821	1.642179
-0.691250	1.912813	1.653594
-0.910055	4.826565	1.673740
-0.922410	5.780103	1.658821
-0.964932	2.293741	1.671837
-1.358267	3.349318	1.671136
-1.368904	3.922466	1.659041
-1.524912	1.588772	1.650000
-1.778817	5.249785	1.651398
-2.692378	4.008841	1.664634
-2.998027	5.035646	1.663061
-3.251611	5.099667	1.660556
-3.834559	2.046863	1.660882
-4.024505	6.116264	1.656209
-4.263784	3.521622	1.654865
-1.813393	2.298036	1.657500
-1.853136	3.861124	1.669586
-1.955000	0.435336	1.675268
-2.044195	4.621268	1.681512
-2.464138	3.579496	1.686021
-2.598293	2.139634	1.666829
-2.807923	0.693865	1.678406
-3.087521	5.287355	1.665785
-3.308256	1.367326	1.669186
-3.442282	0.176913	1.666107
-3.545322	2.446271	1.680271
-3.845761	5.948152	1.664457
-3.973889	3.106190	1.676270
-4.239911	4.419710	1.681071
-0.672903	6.231613	1.673226
-0.952544	1.772403	1.690318
-1.508011	5.303441	1.680054
-1.589954	0.752857	1.678433
-1.737854	2.847098	1.692122
-1.797099	4.243704	1.685185
-2.019873	4.352785	1.684051
-2.375893	1.028997	1.690502
-2.468286	4.693143	1.673714
-2.662185	5.278403	1.690868
-2.739500	3.557639	1.687333
-3.182638	0.219049	1.688466
-3.496163	6.324070	1.694462
-3.515096	1.504327	1.672788
-3.631197	5.548547	1.672564
-3.954221	5.647662	1.681688
-3.970862	1.375862	1.665690
-4.235410	1.535246	1.676885
-4.485430	6.163620	1.680995
-0.686071	0.840119	1.682024
-0.682757	3.481243	1.694919
-0.934254	3.414420	1.689779
-1.194069	2.670414	1.685724
-1.207066	0.548430	1.691322
-1.576944	1.200000	1.680833
-1.593934	3.782960	1.704357
-1.689830	3.113182	1.684773
-1.727073	0.987805	1.676341
-1.757381	3.561190	1.697619
-1.892667	1.915048	1.695302
-1.978451	0.984965	1.698204
-2.353333	1.861481	1.679074
-2.574662	6.012180	1.701429
-2.659870	3.091948	1.689351
-2.702273	1.141591	1.672727
-2.928421	2.488900	1.698708
-4.125302	1.761581	1.697953
-4.520167	2.826833	1.682333
-0.675414	5.480446	1.700382
-0.674226	5.847484	1.712452
-0.677565	2.916477	1.702953
-0.818763	1.516598	1.691031
-1.140895	6.109579	1.700105
-1.163425	1.948370	1.708204
-1.583333	0.147241	1.689655
-1.830334	1.239554	1.709136
-1.819859	5.782535	1.691690
-1.851429	3.317792	1.696818
-2.007812	5.350443	1.715568
-2.170545	1.175818	1.694000
-2.589126	1.769417	1.695825
-2.971289	4.333822	1.705600
-3.072556	2.850224	1.705426
-3.236045	2.099364	1.704273
-3.266602	6.162492	1.703625
-3.321994	4.233826	1.708296
-3.458267	4.963600	1.691733
-3.548182	3.184318	1.701023
-3.669038	0.913269	1.686346
-3.665476	4.069762	1.710179
-3.750217	1.464130	1.695217
-4.248958	6.224792	1.695521
-4.516889	4.130444	1.693333
-0.928231	0.640615	1.705308
-0.962101	1.308986	1.710000
-1.127143	3.246032	1.702222
-1.284556	3.054497	1.714911
-1.372308	0.345144	1.713365
-1.969246	1.634295	1.716328
-2.064439	5.896257	1.706791
-2.326026	5.913675	1.708377
-2.354870	2.114348	1.702957
-2.430735	0.725588	1.701471
-2.481136	4.439205	1.710852
-2.603632	2.607164	1.717313
-2.683644	6.264810	1.719096
-2.808866	4.839446	1.724106
-3.531286	2.711857	1.709571
-3.599438	1.265542	1.721888
-3.873981	1.131165	1.707864
-4.017748	0.193576	1.718742
-4.027791	0.735465	1.706279
-4.085203	0.993446	1.706014
-4.087789	2.026131	1.709196
-4.090513	3.984359	1.707487
-4.219310	5.750739	1.712660
-4.282021	3.802766	1.700851
-4.295229	0.383119	1.705688
-4.306798	1.292895	1.714868
-4.515061	3.494268	1.712195
-0.658387	4.793548	1.715968
-1.198252	2.410699	1.717063
-1.341818	4.926364	1.705682
-1.431375	5.558768	1.730516
-1.553537	4.138830	1.736056
-2.265521	2.793542	1.708958
-2.351506	2.552108	1.719699
-2.369351	3.326703	1.721081
-2.437557	1.286989	1.717443
-2.755130	5.537642	1.733782
-3.033690	5.921310	1.724310
-3.039137	2.261223	1.719640
-3.447565	0.784555	1.730628
-3.774957	0.692051	1.719829
-4.512482	4.854184	1.720426
-4.536667	1.127576	1.710606
-0.667147	4.199679	1.741410
-0.939191	0.163003	1.745796
-1.056800	6.360750	1.730650
-1.407143	1.382786	1.732464
-1.535682	6.386477	1.724318
-1.597251	5.920584	1.736495
-1.627419	2.428226	1.721774
-1.766871	6.371224	1.726327
-2.026434	2.835035	1.733916
-2.227391	1.614720	1.733851
-3.249157	3.885542	1.725060
-3.792339	5.215088	1.724737
-3.845244	3.899756	1.722317
-4.051800	0.444600	1.722400
-0.670085	0.260085	1.735043
-0.929215	4.564660	1.751675
-0.957786	2.745496	1.734962
-1.097273	4.206676	1.752159
-1.350000	1.127250	1.726250
-1.357246	0.086087	1.731304
-1.460235	1.806235	1.735176
-1.558051	5.050636	1.745466
-1.707887	4.624227	1.744072
-1.723529	1.708382	1.730735
-1.989700	6.284500	1.741100
-2.469211	2.334211	1.729868
-2.730625	4.255208	1.731563
-2.904379	0.040339	1.751977
-3.810997	2.460587	1.748915
-3.947943	6.373698	1.756901
-3.957391	2.250725	1.733768
-4.538054	1.628725	1.744430
-0.661928	1.088373	1.748855
-0.876766	6.063027	1.756439
-1.293458	6.385981	1.751121
-1.605000	3.362813	1.743750
-1.848566	6.026846	1.760108
-1.999664	3.640839	1.760101
-2.251781	4.764658	1.742740
-2.459710	1.542319	1.744203
-2.607610	0.900467	1.760852
-2.638116	0.046014	1.764638
-2.832222	1.732857	1.735079
-2.973258	3.665955	1.740449
-3.130698	0.989369	1.760897
-3.164359	5.508462	1.737821
-3.244433	4.859691	1.748969
-3.523662	5.214085	1.762934
-3.612949	4.550897	1.739872
-3.832077	4.666385	1.756000
-4.077617	2.472228	1.752124
-4.291404	5.109298	1.744211
-4.525140	5.471215	1.744953
-4.542299	0.387126	1.746207
-4.545935	0.108130	1.757317
-4.545273	0.889273	1.743091
-0.883966	4.066724	1.749310
-1.108300	4.985200	1.763650
-1.291156	5.175306	1.756735
-1.694590	5.451475	1.746393
-1.823007	0.114755	1.763881
-1.993542	2.418125	1.754792
-2.122870	2.035093	1.756111
-2.609321	5.021196	1.776984
-2.826739	2.138261	1.745217
-3.126612	1.634973	1.759180
-3.165041	3.513577	1.754797
-3.437705	4.712623	1.752787
-3.815400	4.952560	1.767680
-4.313649	5.354459	1.752973
-4.533721	3.800093	1.764605
-4.550495	1.371287	1.762673
-0.897813	3.169688	1.757344
-1.167071	3.509607	1.782250
-1.380000	4.332763	1.767763
-1.430849	2.850425	1.777028
-1.481852	2.600370	1.755926
-1.712796	2.086452	1.765054
-1.957789	5.092632	1.772526
-2.334559	3.987000	1.782971
-3.354138	4.487069	1.758276
-3.413290	5.467915	1.776059
-3.784074	2.734120	1.769259
-4.049540	2.760460	1.767816
-4.204961	2.250472	1.767638
-4.218242	3.051923	1.769121
-4.435158	0.632127	1.772262
-4.533979	4.380052	1.767958
-4.546462	1.912718	1.775436
-4.544689	2.331340	1.777703
-1.056332	1.543317	1.781005
-1.127021	1.042766	1.774043
-1.223600	4.580400	1.765800
-1.461413	4.586848	1.768370
-2.234722	3.087500	1.791493
-2.253333	5.431354	1.791736
-2.619775	2.859775	1.779213
-2.626923	5.758889	1.778291
-2.860619	6.095773	1.770619
-3.028152	1.967725	1.786540
-3.066245	4.607844	1.786989
-3.430299	1.945373	1.777164
-3.482381	2.203690	1.770476
-3.635591	5.935118	1.776772
-3.786878	6.164049	1.781073
-3.918333	4.389444	1.765741
-3.946087	1.591304	1.777304
-0.646410	3.164038	1.801987
-1.623657	6.173433	1.788955
-1.900724	4.831743	1.800080
-2.178360	6.118818	1.805326
-2.344363	0.047170	1.797170
-2.670833	1.362667	1.790333
-3.096691	0.440216	1.789065
-3.400719	3.615683	1.788417
-3.497626	3.887671	1.804589
-4.265859	4.850391	1.791406
-4.539952	5.109904	1.791483
-0.638440	5.242200	1.808360
-0.851122	5.053163	1.799082
-1.152404	0.784421	1.812552
-1.191529	5.631294	1.791882
-1.429020	3.581520	1.802804
-2.222167	2.328208	1.805042
-2.625152	0.310649	1.802900
-2.768042	3.802917	1.804833
-3.124835	3.264286	1.801648
-3.374620	3.348511	1.810274
-3.671913	1.902696	1.793304
-4.044250	5.909125	1.790625
-4.069301	5.005175	1.800699
-4.100303	3.656162	1.802929
-4.259716	0.151344	1.817261
-4.306178	2.806497	1.804140
-0.639834	3.909006	1.808785
-0.685412	2.476118	1.799412
-1.233151	3.767740	1.807055
-1.705125	0.334750	1.797125
-1.900301	5.572711	1.807470
-2.136870	5.669696	1.809261
-2.275625	3.716250	1.799167
-2.933679	3.426038	1.807453
-3.099167	4.140833	1.803472
-3.315025	2.807635	1.813645
-3.306162	3.085051	1.816061
-3.499698	5.719430	1.814262
-3.511980	1.708416	1.811188
-3.865299	3.494321	1.814891
-3.908630	1.850822	1.804247
-4.098278	4.229569	1.811292
-4.330000	2.471558	1.811558
-4.545000	5.724189	1.796622
-4.563585	3.034340	1.795849
-0.897862	0.868690	1.819448
-1.104310	5.875324	1.829014
-1.221237	2.179175	1.816082
-1.309111	1.621143	1.827810
-1.366310	5.795833	1.811190
-1.411324	2.334412	1.812794
-1.447577	2.053148	1.833983
-1.478288	3.172432	1.823063
-2.020404	0.727879	1.817980
-2.810392	4.498758	1.815163
-3.119536	2.618543	1.843422
-3.163333	0.010000	1.805000
-3.253840	2.342640	1.818480
-3.342589	0.512816	1.827443
-3.531172	2.949448	1.814690
-3.573375	0.329625	1.820438
-4.081818	1.223766	1.809221
-4.077013	4.582554	1.825455
-4.342857	4.618214	1.803214
-0.641742	1.628949	1.840150
-0.646178	0.634522	1.844650
-0.835368	6.311789	1.820947
-0.857317	3.614390	1.819268
-1.360428	6.050272	1.836654
-1.642979	1.385319	1.815319
-1.906335	4.059050	1.831131
-1.934486	2.175081	1.838541
-2.123121	2.621676	1.829422
-2.153662	0.499415	1.844923
-2.227568	1.370811	1.828378
-2.229691	4.450617	1.830062
-2.386491	5.698333	1.826140
-2.525803	1.968705	1.835181
-2.645839	0.572416	1.829396
-2.894848	1.262121	1.826212
-2.982651	5.654419	1.842302
-3.230519	5.752078	1.829913
-3.309177	1.176450	1.830823
-3.533577	4.335122	1.829756
-3.755714	5.721250	1.829464
-3.876006	0.906433	1.839878
-4.080000	5.257462	1.828231
-4.106087	3.393623	1.821449
-4.324221	4.021388	1.836856
-0.846293	0.417857	1.848333
-0.880267	4.326310	1.848930
-0.946172	3.842813	1.842266
-1.314286	4.097619	1.831905
-1.551087	0.957464	1.836159
-1.563429	0.522762	1.834857
-1.646162	5.680669	1.846655
-1.711392	2.629304	1.842278
-1.985111	1.404667	1.826889
-2.188706	3.472824	1.839118
-2.437050	6.187969	1.848621
-2.513032	3.800323	1.835226
-2.517931	5.473687	1.846393
-2.613920	3.374198	1.849599
-2.834133	1.018700	1.852867
-3.061975	6.222654	1.845247
-3.205280	0.748960	1.838800
-3.586787	0.061155	1.844260
-3.768364	3.136614	1.857000
-3.846652	5.437602	1.845701
-0.618938	6.064779	1.842212
-1.110329	0.356548	1.862027
-1.189344	2.862459	1.840000
-1.193067	1.269067	1.848533
-1.841073	4.431512	1.853902
-2.484199	3.140331	1.859282
-2.637258	4.679274	1.844677
-2.817318	3.199080	1.853870
-2.853511	0.439008	1.850916
-2.851061	5.124182	1.860242
-2.900266	1.521293	1.854905
-2.980833	0.643571	1.844762
-3.130679	1.375299	1.858451
-3.340513	1.535385	1.846154
-3.402414	5.960000	1.845862
-3.652201	3.660647	1.861748
-3.734896	2.221111	1.859028
-3.800183	0.221005	1.850000
-4.089070	5.514651	1.846667
-4.286825	1.075556	1.839206
-4.283770	0.810656	1.846066
-4.340451	1.776285	1.861701
-0.619115	2.105929	1.858584
-0.625698	0.043605	1.853953
-0.714203	1.317536	1.854638
-0.836517	1.934944	1.854382
-0.954328	5.622313	1.858358
-1.411066	0.735279	1.865736
-1.762482	0.817445	1.857518
-1.823356	0.569726	1.860137
-2.388480	4.245673	1.855731
-2.377813	5.109875	1.864250
-2.404938	0.550000	1.853951
-2.662500	1.605882	1.853382
-3.027500	3.047813	1.859479
-3.026415	4.876792	1.850189
-3.386989	2.559659	1.866080
-3.849830	0.500284	1.859205
-4.199762	0.585595	1.851905
-4.321822	3.276215	1.859766
-4.558580	5.997870	1.858580
-4.572113	4.615493	1.854789
-0.614651	3.656047	1.855581
-0.603939	5.650606	1.865758
-0.612682	4.608492	1.876592
-0.616131	4.981055	1.878593
-0.871656	2.946146	1.882325
-1.237967	5.396429	1.874341
-1.646351	4.842342	1.875360
-2.118047	4.210078	1.875742
-2.133211	0.220183	1.865229
-2.141865	4.942538	1.880734
-2.188727	0.971273	1.861455
-2.771845	2.339821	1.867976
-2.779231	1.933654	1.854231
-2.828517	5.869952	1.876890
-2.874884	4.040388	1.873760
-2.995111	5.387222	1.867556
-3.164277	4.378072	1.870783
-3.630617	3.372901	1.873765
-3.766393	4.243279	1.865246
-3.841224	1.319184	1.855306
-4.228097	6.053545	1.877239
-4.337525	5.581287	1.880248
-4.344611	2.064278	1.869222
-4.350441	3.622687	1.874053
-0.817277	2.277574	1.885248
-0.842570	5.390782	1.879441
-0.883333	1.131959	1.888866
-1.002857	2.442208	1.877143
-1.160650	0.080224	1.902623
-1.681488	5.243962	1.895744
-1.678667	3.957333	1.871778
-1.994531	3.218672	1.881328
-2.013190	1.164724	1.886748
-2.136034	1.811552	1.869828
-2.276061	0.746364	1.879596
-2.445789	4.826526	1.877474
-2.572905	1.143953	1.891588
-2.848247	2.879935	1.880455
-3.056256	3.854566	1.885753
-3.102500	5.107381	1.878690
-3.229880	5.312048	1.867470
-3.349754	0.109344	1.880656
-4.561316	6.395789	1.872895
-4.583798	2.565039	1.879845
-0.754257	2.706824	1.883649
-1.040356	5.210156	1.898022
-1.795131	3.740785	1.891257
-1.872618	2.973168	1.902147
-2.375671	0.298758	1.901443
-2.392806	1.739774	1.900935
-2.397760	2.894792	1.896250
-2.602667	4.106513	1.891231
-3.011782	0.226238	1.882772
-3.348776	5.062092	1.895663
-3.565660	6.147689	1.896085
-4.356725	1.485352	1.897852
-4.368551	5.845072	1.886957
-4.582350	3.265683	1.892186
-0.598883	6.326214	1.901165
-0.853804	5.845435	1.894891
-1.072824	4.722118	1.898529
-1.108393	1.770268	1.894286
-1.335000	4.760367	1.905932
-1.441757	3.893694	1.903559
-1.489929	0.221560	1.902128
-1.563444	1.616325	1.912715
-1.613636	2.980390	1.892857
-1.631085	0.023101	1.901008
-1.646772	1.879494	1.906519
-1.782105	1.064605	1.896316
-1.799063	2.379063	1.885938
-1.805405	1.545541	1.893919
-2.143532	5.217621	1.904498
-2.805277	2.613388	1.906710
-3.279637	1.791613	1.902661
-3.308992	4.049758	1.907702
-3.595976	4.998415	1.891707
-3.635037	4.739526	1.917606
-3.648061	0.801531	1.900000
-3.712469	1.111967	1.902259
-3.742698	1.692540	1.892857
-4.005149	6.171045	1.896493
-4.336339	4.292679	1.894196
-4.581236	4.015674	1.904213
-0.818778	4.757333	1.916000
-1.003008	2.109593	1.909756
-1.033366	3.333366	1.908020
-1.494497	1.212910	1.912593
-1.598904	4.431233	1.896986
-1.736772	3.234055	1.921299
-1.895109	3.456304	1.901630
-1.934252	5.808766	1.920945
-2.037414	3.860948	1.907069
-2.319167	1.164500	1.900667
-3.475545	0.986455	1.916636
-3.627189	1.466959	1.910829
-3.737796	6.373578	1.925687
-3.838714	5.958143	1.900429
-3.906202	2.913876	1.910620
-3.930261	4.063913	1.910957
-0.619701	0.894132	1.922934
-1.102599	3.081864	1.918136
-1.094952	4.445810	1.922000
-1.191317	6.231779	1.924164
-1.305691	2.536334	1.927203
-1.328830	0.494947	1.925426
-1.313681	0.971656	1.919264
-1.444816	6.284041	1.924122
-1.822197	6.223712	1.916136
-1.931591	0.352091	1.925909
-2.264385	6.365246	1.918689
-2.487353	5.909225	1.938102
-2.580691	6.379724	1.924608
-2.608087	4.368634	1.919235
-2.776284	0.769128	1.928349
-2.835910	6.328648	1.930295
-3.170375	6.014250	1.919000
-3.622787	5.517541	1.911967
-4.148733	6.375067	1.909667
-0.607845	3.400276	1.941188
-1.143065	3.965645	1.924032
-1.650435	3.521818	1.936522
-1.894806	1.801395	1.928915
-2.114975	4.675990	1.935939
-2.221935	5.882608	1.943817
-2.434364	4.559364	1.934636
-2.444000	2.197294	1.925882
-2.671799	6.103422	1.937670
-2.982667	1.759667	1.926250
-3.277480	4.658880	1.939240
-3.631765	2.522549	1.918431
-3.761321	4.496011	1.943558
-4.363033	6.259180	1.926393
-4.491238	5.317143	1.932667
-4.593481	2.118191	1.938840
-4.592968	2.821677	1.924645
-0.587750	4.353750	1.932500
-0.875672	1.701940	1.929701
-1.017064	0.594771	1.942615
-1.078911	2.672376	1.940099
-1.717011	4.207346	1.950754
-2.289366	1.996828	1.946082
-2.419091	0.940455	1.937879
-2.418067	3.526267	1.941733
-2.555841	2.470354	1.940442
-2.584231	5.235962	1.935577
-2.881471	4.706569	1.934706
-3.018433	2.388571	1.947465
-3.731520	3.908922	1.940931
-3.948571	2.596000	1.930571
-4.029376	0.329792	1.953222
-4.029186	0.052558	1.939186
-4.064748	3.169928	1.941871
-4.129091	1.916733	1.952614
-4.356326	0.370447	1.952236
-4.442838	1.236824	1.946284
-4.609423	1.064615	1.926346
-0.588276	2.952931	1.940000
-0.909754	0.021921	1.962660
-1.423832	5.248598	1.947944
-1.544714	5.465500	1.945357
-1.807324	5.023239	1.943662
-2.653214	3.619732	1.942411
-3.011233	0.856575	1.947671
-3.283732	6.235455	1.951148
-3.297656	3.778205	1.962784
-3.316973	2.139027	1.955081
-3.482636	6.385182	1.943727
-3.563961	4.107488	1.950097
-3.612580	0.546953	1.968010
-3.901389	3.722500	1.942593
-3.992083	0.694435	1.963512
-4.014368	2.152414	1.947586
-4.109179	3.876188	1.955660
-4.132675	1.633640	1.957807
-4.144792	5.756771	1.944375
-4.184151	2.634717	1.936981
-4.588851	3.529109	1.960517
-4.608621	0.565000	1.952069
-0.599724	1.865690	1.969414
-1.276845	5.027798	1.970516
-1.347785	3.016203	1.957278
-1.569012	2.454691	1.954691
-1.631862	2.211034	1.960897
-2.047892	1.602973	1.967784
-2.160577	2.835192	1.943846
-2.340818	2.647636	1.958364
-2.676269	2.130746	1.951642
-2.845319	4.286596	1.950638
-3.054428	1.125161	1.978270
-3.235781	0.310625	1.957656
-3.516241	3.162766	1.959291
-3.558919	2.064414	1.956937
-3.697763	5.255263	1.950526
-4.106194	0.952090	1.965858
-4.365345	5.015309	1.965855
-4.383235	3.015647	1.965000
-4.591244	4.877358	1.959171
-4.608263	0.274324	1.969846
-0.582742	2.327097	1.966452
-0.586609	4.106781	1.982103
-0.605129	0.398635	1.978007
-1.062565	3.661299	1.982305
-1.221848	1.986250	1.971033
-1.343731	4.488846	1.976962
-1.816048	1.309435	1.974355
-1.920575	5.339342	1.985068
-1.975764	0.926650	1.977931
-1.984815	6.057901	1.966914
-2.453108	1.362973	1.957973
-2.714261	4.879478	1.964522
-2.922346	2.111006	1.972291
-3.515600	1.251000	1.962400
-3.532716	2.745000	1.967840
-3.910978	5.125378	1.969956
-4.594306	5.538056	1.958056
-4.618571	0.818413	1.967778
-0.976269	4.129254	1.965970
-1.000636	1.354162	1.978902
-1.350761	5.618122	1.982284
-1.511677	2.706129	1.978581
-1.529780	5.866154	1.973626
-1.796995	4.662759	1.982906
-1.948786	0.096837	1.990863
-2.303762	3.282257	1.987053
-2.745242	5.613855	1.999758
-2.989757	3.602014	1.991319
-3.247722	5.540116	1.984015
-3.465618	2.341798	1.969663
-3.816589	2.000047	1.982757
-4.129800	1.379200	1.975600
-4.148162	2.900515	1.983971
-4.156206	2.382286	1.997186
-4.399610	2.281818	1.975325
-4.593484	1.729895	1.977317
-0.584767	5.428178	1.993566
-0.589474	1.141789	1.984316
-0.832141	3.188498	2.002268
-0.980847	4.947619	1.988783
-1.262727	3.278977	1.986364
-1.344229	1.410647	1.991592
-1.452771	4.245582	1.999880
-1.747565	5.989026	2.000617
-2.515016	0.101286	1.996945
-2.584270	2.741601	2.002633
-3.248976	3.507831	2.002048
-3.407965	0.733473	2.003650
-3.492736	4.529623	1.980472
-4.252364	5.348909	1.993273
-4.584740	0.019769	1.995376
-4.618125	1.462411	1.993929
-0.577636	2.573273	1.988727
-0.627368	5.862693	2.007926
-1.196559	4.228925	1.998387
-1.394943	0.021364	2.006648
-1.410984	1.815902	1.995164
-2.053976	2.439277	1.987229
-2.361309	5.326806	2.004764
-2.522373	0.713458	2.006305
-2.632372	1.802051	1.998654
-2.657153	3.004555	2.006619
-2.925741	6.073651	2.013307
-2.978488	4.488023	1.998023
-3.057667	2.820444	1.996778
-3.155298	0.566905	2.000774
-3.238784	0.939189	1.990676
-3.897073	2.363780	1.998171
-3.918272	5.634319	2.010930
-4.123545	4.842075	2.007032
-4.593560	6.203400	2.006480
-1.174200	2.322600	2.009200
-1.546163	4.647558	2.001047
-1.555833	5.043222	2.011778
-1.610522	0.687130	2.011043
-1.961404	2.693509	1.997544
-2.041250	6.298672	2.011797
-2.046462	4.439923	2.009000
-2.130658	2.191118	2.007829
-2.268945	5.579592	2.022926
-2.285214	1.526923	2.010342
-3.361429	4.290592	2.014321
-3.431004	5.352450	2.013414
-3.857138	4.864862	2.020069
-3.945433	1.157647	2.022768
-3.984836	4.348770	2.013852
-0.793333	3.738519	2.027619
-0.799692	5.170359	2.018462
-0.802037	4.507506	2.041304
-0.800884	6.062376	2.021768
-0.791084	0.227711	2.015060
-0.815826	0.741826	2.023957
-0.864505	3.472192	2.031892
-1.116316	1.101283	2.027566
-1.278189	5.882189	2.027887
-1.713185	0.223926	2.027506
-2.077531	3.628364	2.030370
-2.255063	3.823797	2.009747
-3.021623	3.330026	2.031597
-3.127602	1.958480	2.023743
-3.166277	1.588701	2.024762
-3.606283	5.935664	2.019292
-3.906634	1.498414	2.026926
-4.254737	4.538195	2.014286
-4.357500	3.831250	2.016750
-4.375567	0.657730	2.033156
-4.492848	4.443671	2.017722
-0.794806	1.491473	2.028062
-0.779167	5.640417	2.028229
-0.818386	2.508133	2.043544
-1.142615	1.556308	2.017231
-1.511642	3.304627	2.029403
-1.814223	2.045340	2.028592
-2.140963	3.076741	2.037370
-2.324270	2.406180	2.028989
-2.436410	3.972308	2.018462
-2.546941	0.455434	2.038950
-2.671716	3.900539	2.032647
-2.741711	0.308684	2.023947
-2.811584	5.326739	2.035870
-2.790000	3.440319	2.031170
-3.379000	2.953600	2.037486
-3.419017	4.856532	2.034682
-3.682273	2.950909	2.037098
-3.874332	3.313529	2.028877
-4.028720	3.519040	2.025440
-4.046115	5.967962	2.031975
-4.398168	0.943194	2.040209
-4.574088	5.787409	2.032336
-4.630323	2.358710	2.016774
-0.561169	4.797922	2.037922
-1.030769	0.855000	2.033077
-1.040110	5.438453	2.040110
-1.116615	5.681385	2.030154
-1.292611	0.273744	2.047734
-1.323064	3.551272	2.042717
-1.390851	2.210213	2.033511
-2.101905	1.350595	2.031548
-2.255849	0.083606	2.049371
-2.709200	1.416267	2.031067
-3.066550	6.373755	2.042751
-3.178140	4.930698	2.031473
-3.324522	1.379478	2.034000
-3.377322	5.756995	2.039945
-3.467260	1.626575	2.042466
-3.493317	0.236277	2.054033
-3.755904	0.051165	2.054940
-3.770923	2.707385	2.035077
-3.773524	6.145619	2.035048
-3.924381	1.772286	2.034000
-4.147148	4.135387	2.052218
-4.264583	3.445000	2.035000
-0.570000	1.378525	2.046721
-1.231121	0.703049	2.050269
-2.262292	4.332708	2.042917
-2.314286	6.101203	2.048647
-2.524220	1.575780	2.050000
-2.643492	0.955794	2.055992
-2.726216	4.554775	2.044234
-2.770989	1.175714	2.046044
-2.951274	1.362972	2.056085
-3.010172	5.816978	2.063440
-3.133100	4.169100	2.057500
-3.241429	2.459206	2.055952
-3.280400	2.703200	2.040200
-3.513308	3.523308	2.048462
-4.246790	0.026914	2.039136
-4.400794	2.517143	2.045714
-4.612660	3.795638	2.056277
-4.611813	5.123212	2.047772
-4.625170	3.061818	2.049318
-4.625298	4.221192	2.052318
-0.556833	5.155833	2.058333
-0.787362	6.321411	2.061166
-0.795714	3.984000	2.049429
-1.279182	2.768931	2.057547
-1.595463	1.401806	2.062685
-1.958232	4.855016	2.064695
-2.005167	5.580958	2.059417
-2.055240	1.947644	2.063750
-2.495191	4.980710	2.064426
-2.930285	4.971585	2.068943
-2.990435	0.390580	2.056812
-3.303876	3.247697	2.062416
-3.536868	3.790495	2.065275
-3.621657	1.837426	2.072130
-3.731875	0.341250	2.059271
-3.971595	4.621396	2.069202
-3.982186	5.365628	2.060283
-4.371243	2.770113	2.060339
-4.377596	4.761672	2.072648
-4.406168	6.012243	2.061589
-0.784043	2.049574	2.055532
-0.985799	1.905465	2.076171
-1.019766	5.918361	2.083396
-1.715368	2.839789	2.060421
-1.778278	2.541483	2.074163
-1.852908	0.718652	2.070142
-1.949181	4.135198	2.081299
-2.288604	0.483063	2.070225
-2.285183	4.821829	2.069939
-2.796049	0.555640	2.083515
-2.814655	1.637471	2.075000
-2.930000	3.290000	2.040000
-3.051017	5.253559	2.058136
-3.412813	6.068854	2.068333
-3.952549	6.355724	2.075054
-4.218827	1.171349	2.082639
-0.573353	3.168699	2.086705
-0.788315	4.237865	2.074270
-0.905652	2.771848	2.076630
-1.027333	0.233200	2.078200
-1.257079	3.807423	2.090550
-1.449377	6.077574	2.083082
-1.570000	4.035109	2.079891
-1.640215	6.242903	2.077204
-1.735085	5.735495	2.090717
-1.794983	3.912594	2.093481
-2.030605	0.536178	2.084936
-2.220339	4.084373	2.094271
-2.479274	3.731129	2.083468
-2.558621	4.723621	2.068793
-2.555447	3.237977	2.089027
-2.992606	5.526704	2.092205
-3.341887	1.132830	2.074906
-3.623694	5.688949	2.096667
-3.740606	1.300152	2.075606
-3.769837	3.553455	2.078659
-4.153537	5.126234	2.094453
-4.164444	6.188593	2.089407
-4.394919	1.922298	2.081815
-0.556320	6.102320	2.083200
-0.561314	3.617371	2.095771
-0.752105	4.927368	2.082281
-0.999333	6.202800	2.079467
-1.501767	0.915700	2.094333
-1.748140	1.677791	2.085465
-1.776667	0.468014	2.087660
-1.827143	6.388667	2.090476
-2.035360	3.362882	2.103343
-2.145714	0.775764	2.091527
-2.162061	1.120611	2.091221
-2.211169	1.748831	2.084286
-2.264348	5.085466	2.091801
-2.478853	4.217202	2.091743
-2.505514	2.022243	2.086075
-2.696595	5.867500	2.091897
-2.711333	5.095333	2.077333
-2.847944	1.895234	2.084673
-2.887076	3.120292	2.098421
-2.916125	0.151500	2.095500
-3.135962	3.048732	2.089624
-3.383502	0.480135	2.099697
-3.540936	5.127362	2.100681
-3.613944	4.327746	2.097218
-3.782905	0.942997	2.095719
-4.155364	0.519136	2.092091
-4.150759	5.555063	2.080253
-4.226458	2.131956	2.094207
-4.409004	4.077925	2.093402
-0.567415	1.635122	2.103415
-0.786949	1.247797	2.095085
-1.540741	2.017325	2.107695
-1.562960	3.770072	2.107509
-1.665532	1.155957	2.092234
-1.879114	2.294629	2.116057
-2.014615	5.112821	2.103590
-2.579267	5.425267	2.098800
-3.075113	4.702105	2.103985
-3.121088	2.208435	2.102109
-3.675556	2.364444	2.086296
-3.816040	4.178020	2.096634
-4.357733	1.653600	2.094400
-4.405106	3.237943	2.099078
-4.621818	4.653826	2.102273
-4.645965	1.235263	2.093158
-0.556133	2.102533	2.099867
-0.568761	0.176018	2.104867
-0.576637	0.655045	2.115646
-0.833603	0.994377	2.121448
-0.846966	0.461241	2.114483
-1.237619	5.288762	2.108048
-1.812065	4.431336	2.119717
-1.898190	3.142381	2.104952
-2.388089	3.035689	2.120578
-2.507339	5.682817	2.118941
-2.922638	3.840624	2.117554
-3.010101	2.598480	2.116453
-3.473810	2.545714	2.097381
-3.901585	0.499390	2.104146
-3.910709	3.065787	2.122756
-0.560725	2.787874	2.119130
-0.760946	2.965946	2.122905
-1.322464	4.056957	2.111739
-1.361250	1.139145	2.118224
-1.703944	5.388239	2.122324
-1.710353	4.871529	2.114235
-1.820206	3.626186	2.117629
-1.900886	1.126835	2.108228
-2.261901	4.569091	2.117769
-2.583000	2.281000	2.102750
-2.825153	2.377761	2.128098
-2.809674	4.093370	2.118804
-3.273712	5.156564	2.127178
-3.635755	3.316763	2.120144
-4.324330	5.761134	2.124089
-4.411787	5.503992	2.131103
-4.649231	1.927885	2.111346
-0.551966	3.885674	2.129719
-0.555569	4.557294	2.138275
-0.546667	5.645580	2.133986
-0.810897	5.401410	2.122949
-0.955714	4.711579	2.124962
-0.997411	3.872946	2.129955
-1.108868	3.441698	2.113019
-1.145826	0.467982	2.131101
-1.152000	4.565286	2.130571
-1.202430	4.822077	2.138063
-1.203784	1.767432	2.120000
-1.456165	4.840226	2.125789
-1.490000	2.903231	2.124000
-1.647093	3.108789	2.138443
-1.776316	3.384211	2.115263
-2.163846	2.611905	2.136190
-2.405021	1.196008	2.134856
-2.684924	6.281667	2.138485
-2.839808	2.870577	2.125577
-3.139823	6.151947	2.129558
-3.196327	4.462836	2.135200
-3.573822	6.255096	2.125987
-3.656811	5.418993	2.147458
-3.825586	5.871650	2.142485
-3.989574	2.774255	2.128617
-4.610000	6.400000	2.115000
-4.651935	2.584839	2.114839
-0.750847	2.276780	2.130339
-1.007343	4.362841	2.146679
-1.054857	3.197048	2.143905
-1.093226	2.130645	2.136290
-1.148511	2.539198	2.146870
-1.397500	1.610972	2.134028
-1.478368	0.429540	2.142887
-1.956739	2.887826	2.131522
-2.071818	5.810341	2.136591
-2.118529	0.291912	2.147831
-2.135816	5.366667	2.136099
-3.140367	0.771193	2.137706
-3.162515	0.126140	2.140058
-3.230968	5.925242	2.142339
-4.174286	3.687143	2.124762
-4.206526	3.093368	2.134211
-4.210357	0.256339	2.136250
-4.407500	3.617000	2.134500
-4.395308	5.213077	2.141615
-4.415162	1.400767	2.152507
-4.631796	5.370299	2.138623
-4.638768	3.329668	2.144739
-0.725769	0.011538	2.143077
-1.189904	2.992596	2.145673
-1.205313	6.091875	2.146250
-1.552146	4.443765	2.151619
-1.863077	6.165275	2.147363
-1.881498	1.473921	2.161145
-2.058674	3.878934	2.163343
-2.267667	3.493250	2.141083
-2.409433	0.275709	2.160324
-2.538093	6.067034	2.156907
-2.706038	4.323585	2.157673
-3.175084	3.926034	2.150838
-3.402000	1.999533	2.150733
-3.403823	4.059932	2.162765
-3.543250	1.409500	2.137750
-3.603115	1.115246	2.137213
-3.640714	4.899524	2.137857
-3.728028	4.658451	2.148451
-3.949091	3.960663	2.165430
-4.095529	3.311294	2.147882
-4.170077	0.777846	2.144538
-0.547103	4.291121	2.163364
-0.763068	1.798125	2.163693
-0.964842	1.645579	2.158947
-0.982316	2.344737	2.153789
-1.188416	6.354505	2.152871
-1.390000	2.435596	2.156943
-1.757308	0.930000	2.168974
-1.762865	5.124568	2.176432
-2.336484	2.193077	2.157637
-2.364068	5.890085	2.159237
-2.873426	0.814143	2.165857
-3.288095	1.775000	2.155833
-3.701152	1.596848	2.158121
-3.820602	2.187349	2.154096
-3.974979	0.170083	2.162075
-3.999014	2.018310	2.161690
-4.458750	0.176977	2.166570
-4.635104	6.004583	2.155313
-0.539452	6.359726	2.162123
-1.111912	5.080735	2.161618
-1.173802	1.315950	2.159421
-1.426538	6.361394	2.163221
-1.493750	0.172880	2.178315
-1.499512	5.719878	2.158780
-1.540522	3.511381	2.185075
-2.233846	6.302010	2.184293
-2.325909	0.944848	2.178636
-2.443762	1.780396	2.166733
-2.510236	4.498850	2.179027
-2.555161	3.489677	2.168581
-2.761429	2.632976	2.161905
-2.953587	4.298804	2.169239
-3.041961	1.763007	2.169346
-3.616667	0.750698	2.163643
-3.654478	4.002836	2.166119
-3.936098	2.528699	2.176748
-4.193073	2.576094	2.179792
-4.403199	6.264412	2.172831
-4.649162	0.438534	2.174712
-4.646818	0.970455	2.173364
-0.562948	0.922500	2.182724
-1.232563	0.929625	2.183000
-1.395391	3.129565	2.177478
-1.455862	5.471724	2.172414
-1.513275	5.228838	2.191690
-1.630000	2.352642	2.173962
-1.975432	1.729388	2.185252
-2.095792	6.066264	2.200000
-2.706423	3.697664	2.179927
-3.352500	2.274000	2.168000
-3.420766	5.547033	2.182392
-3.445309	0.933454	2.184021
-3.774430	5.188228	2.171646
-4.598396	0.698160	2.191132
-1.290494	4.352889	2.207901
-2.199503	2.872762	2.191989
-2.405682	2.716909	2.196227
-2.480121	5.201660	2.198826
-2.684660	0.133223	2.206816
-2.749524	2.126786	2.182857
-2.786192	4.785771	2.201519
-3.142051	1.252692	2.186026
-3.581613	2.164032	2.180161
-3.946216	3.693514	2.183784
-4.071129	5.770040	2.191976
-4.167484	1.799097	2.199161
-4.618390	2.832634	2.196000
-4.660879	2.176374	2.189231
-0.967097	6.395484	2.192581
-1.094411	4.113042	2.204753
-1.440233	0.680543	2.195581
-1.559245	1.776415	2.194717
-2.146484	2.354176	2.199011
-2.554470	2.510000	2.195606
-3.163171	3.668902	2.193171
-3.193924	5.676181	2.206354
-3.329944	4.684551	2.197022
-3.341556	6.256778	2.193222
-3.536947	3.093009	2.209469
-3.739000	6.399000	2.183000
-4.026341	1.337268	2.198976
-4.166885	1.538361	2.191639
-4.198421	6.395000	2.191579
-4.382673	0.435220	2.210094
-4.450755	1.142453	2.191887
-1.297129	2.004484	2.218258
-2.061166	0.045276	2.210491
-2.271905	1.949524	2.199206
-2.357535	0.685634	2.205986
-2.935097	1.081039	2.219662
-3.455878	2.766486	2.208446
-3.908841	0.734663	2.220647
-3.944050	6.113524	2.224622
-3.944964	5.021241	2.210438
-4.167455	4.397818	2.205545
-4.217346	3.927668	2.216756
-4.320909	2.352576	2.199848
-4.644932	4.014527	2.222162
-0.546171	4.967229	2.230286
-0.794988	5.873963	2.237063
-0.938995	1.398141	2.227839
-1.378696	4.616377	2.210145
-1.576901	2.599624	2.226761
-1.709559	0.040662	2.210882
-1.711315	4.204877	2.230247
-1.867353	5.915686	2.214804
-2.139429	1.523048	2.216619
-2.437897	0.026172	2.235483
-2.552532	1.393427	2.237519
-2.779231	6.067527	2.227143
-3.197966	5.394972	2.227712
-3.182977	0.370194	2.229968
-3.527436	4.536026	2.215641
-3.823897	4.436197	2.220939
-4.033324	0.981633	2.229799
-4.051071	2.296952	2.239571
-4.178615	4.682872	2.222103
-4.335427	4.975366	2.224390
-4.437099	3.013969	2.220611
-4.589375	4.924010	2.217031
-4.655200	4.425600	2.218800
-0.539691	1.890619	2.224845
-0.536207	5.345402	2.240000
-0.637690	2.540854	2.240316
-1.261603	0.078092	2.228550
-1.265203	5.713514	2.224459
-1.347788	5.039135	2.224712
-1.779434	1.883208	2.229434
-1.862513	4.668901	2.228534
-1.884957	0.220261	2.224174
-2.224472	3.230081	2.227724
-2.341617	3.891320	2.240231
-2.359027	5.445324	2.240405
-2.907598	4.545196	2.229497
-2.924014	6.293116	2.247746
-2.978594	2.048906	2.220156
-3.152688	2.795336	2.236759
-3.198987	1.003671	2.239968
-3.322577	1.536810	2.232086
-3.683622	2.563465	2.232441
-3.690233	0.518915	2.229690
-4.184185	5.364630	2.240148
-4.646733	3.587833	2.232867
-4.651234	1.701591	2.241396
-0.554754	1.190352	2.241937
-0.550313	3.396677	2.245549
-0.562153	0.419059	2.256757
-0.669000	4.084143	2.231143
-0.727874	4.739275	2.238986
-0.967442	5.256860	2.230000
-1.024021	5.601678	2.250420
-1.320794	3.363730	2.238254
-1.416844	1.364867	2.252625
-1.656827	6.053896	2.240482
-2.027823	0.954962	2.246937
-2.102826	4.716522	2.226304
-2.651552	1.898103	2.232414
-2.844092	5.705036	2.247482
-2.931220	3.522857	2.244821
-3.012581	0.574919	2.247581
-3.070412	1.488765	2.244882
-3.172584	3.419101	2.234045
-3.475926	5.874321	2.231728
-3.649030	6.042313	2.235597
-4.225163	5.981276	2.246142
-4.389205	4.512045	2.230568
-4.463333	4.275789	2.237544
-0.768354	3.583171	2.257866
-0.933128	4.935922	2.248324
-0.950558	0.055020	2.250000
-1.029200	3.636831	2.260369
-1.099021	2.776154	2.248112
-1.679623	0.639434	2.242264
-1.815424	2.718644	2.250678
-1.956966	2.517528	2.247753
-2.034303	2.129084	2.259801
-2.593182	0.785682	2.236364
-2.741245	3.332101	2.256926
-3.815500	1.862333	2.241750
-3.814070	5.604186	2.240349
-3.948471	1.642851	2.255950
-4.208840	2.830552	2.248619
-4.560779	2.402532	2.248312
-0.533282	5.879590	2.266667
-0.540897	2.290493	2.269507
-0.757041	0.234794	2.266067
-0.770000	3.199115	2.255929
-1.187203	1.557106	2.271286
-1.236566	2.272929	2.268283
-1.670353	0.328471	2.261294
-1.718793	2.133448	2.255000
-1.994806	6.348101	2.255853
-2.031186	1.280339	2.270169
-2.036255	4.475404	2.265660
-2.161015	5.617481	2.268722
-2.640056	1.646348	2.268090
-2.629091	2.807500	2.256364
-2.668134	0.403085	2.271294
-2.815392	1.458387	2.260046
-3.056139	5.089430	2.262975
-3.390847	0.081230	2.265628
-3.375505	1.288165	2.264037
-3.417197	4.973131	2.275025
-3.436842	3.339684	2.260526
-3.446073	5.304977	2.272283
-3.704887	3.764561	2.274712
-3.717385	2.820769	2.248462
-3.838925	1.156262	2.263271
-4.656000	1.426333	2.259556
-0.755857	1.567143	2.262571
-0.756000	5.123838	2.268432
-0.757068	5.601142	2.280710
-0.795469	0.665429	2.275184
-0.928729	3.390847	2.272966
-0.973253	2.993373	2.258434
-1.594634	1.550366	2.268415
-1.612051	4.697436	2.268718
-2.101905	4.227619	2.262381
-2.131690	4.963451	2.265423
-2.421176	4.736642	2.286225
-2.561353	4.041014	2.270531
-2.688176	3.060486	2.274863
-2.939231	5.329402	2.273704
-3.019390	5.986098	2.276402
-3.115728	2.407616	2.276594
-3.411257	4.315286	2.279829
-3.853151	3.402059	2.277773
-3.984400	4.248933	2.259600
-4.437121	2.633485	2.268737
-4.436556	2.091000	2.262778
-4.458667	3.832917	2.262000
-4.640505	6.229343	2.266263
-0.760000	2.768070	2.268070
-0.923722	2.574233	2.287670
-0.990000	0.844112	2.271776
-1.468626	2.192748	2.278931
-1.704625	1.330875	2.287125
-1.903922	5.670915	2.287353
-2.006818	3.565808	2.278737
-2.054896	3.059167	2.275000
-2.478623	6.318000	2.294522
-2.552931	1.037915	2.291118
-2.919823	0.318009	2.291416
-2.988000	3.267000	2.273750
-3.001543	4.072394	2.280798
-3.168137	6.387081	2.286087
-3.175388	4.865437	2.286602
-3.513617	1.714468	2.268723
-3.612803	3.508333	2.283182
-3.644044	0.138603	2.278971
-3.911114	4.771969	2.293057
-4.083684	3.521729	2.282857
-4.219635	0.055401	2.279489
-4.430462	3.414740	2.283237
-0.534896	2.981354	2.280208
-0.539762	1.450952	2.285794
-0.738805	6.380377	2.290377
-0.862632	2.106813	2.296199
-1.003663	6.083762	2.282673
-1.064242	1.127980	2.287475
-1.160792	0.667624	2.286931
-1.331145	2.665771	2.295066
-1.322007	3.622847	2.301204
-1.442529	5.917529	2.287241
-1.473026	4.126842	2.287500
-2.294722	4.386333	2.285833
-2.375283	1.582170	2.285566
-2.597759	4.935862	2.284310
-2.993675	2.984701	2.290000
-3.402462	3.823231	2.301169
-3.502902	0.346814	2.300757
-3.815366	0.317154	2.285285
-3.809111	1.414667	2.278889
-3.835000	0.012353	2.288529
-4.049452	0.381918	2.279589
-4.635596	5.791927	2.280917
-0.737525	3.838416	2.291881
-0.766949	6.126949	2.295678
-0.889888	4.544906	2.309288
-0.995919	0.343860	2.305699
-1.243481	5.465414	2.299834
-1.301474	0.317053	2.289158
-1.400891	3.880545	2.307475
-1.549434	3.282453	2.292830
-1.733622	6.297135	2.300270
-1.870260	4.919545	2.303247
-1.878746	5.385559	2.312508
-2.326752	2.496838	2.303419
-2.335321	6.088899	2.294312
-2.372500	4.996176	2.295882
-2.537000	2.147000	2.293667
-2.688077	5.312051	2.294103
-2.806579	5.069123	2.304211
-3.211910	3.179775	2.297865
-3.339164	2.554695	2.312154
-3.331596	2.967766	2.290638
-3.895765	5.356588	2.294235
-4.244308	4.182923	2.289385
-4.662733	3.115291	2.298895
-0.751993	4.313838	2.320000
-1.538627	1.126415	2.318319
-1.645977	3.957931	2.304368
-1.913262	0.464946	2.313692
-1.899444	0.730185	2.318843
-2.133571	0.638333	2.302540
-2.236220	5.210697	2.320590
-2.397732	3.636320	2.316729
-2.633071	5.551929	2.310857
-2.730455	1.218030	2.300909
-3.160326	4.271739	2.299239
-3.530949	2.369854	2.305182
-4.398750	1.773571	2.310357
-4.431007	0.927987	2.306577
-4.654881	5.546071	2.308571
-1.034404	1.827294	2.325275
-1.667129	5.537129	2.315248
-1.808305	2.995254	2.321017
-1.821579	3.259323	2.322406
-1.863754	3.780853	2.326109
-2.280738	0.423839	2.335423
-2.453527	3.169130	2.333961
-2.610513	5.814103	2.330000
-2.789000	3.943400	2.311400
-2.992827	0.062560	2.330107
-3.591910	1.952022	2.310337
-3.616842	1.272406	2.323985
-3.658873	0.963237	2.334393
-4.035135	5.552973	2.315811
-4.373533	0.673952	2.322575
-4.456545	6.058364	2.304727
-4.658056	1.937611	2.342333
-4.635922	5.171714	2.328494
-0.523802	6.131818	2.330661
-0.808188	1.174161	2.334396
-0.886316	4.028246	2.317368
-1.350959	2.928082	2.326233
-1.349774	1.762594	2.337030
-1.436729	6.169159	2.324206
-1.607204	2.830645	2.325161
-1.672965	5.804024	2.345271
-1.764571	3.503905	2.325333
-2.195371	1.752522	2.343501
-2.247810	0.165143	2.324095
-2.769763	0.646126	2.337510
-2.852417	1.800083	2.325917
-2.905813	2.750813	2.332063
-3.351348	3.562809	2.323371
-3.580379	4.759300	2.341137
-3.807800	2.359800	2.333200
-3.993939	2.932727	2.319091
-4.124643	4.903750	2.324107
-4.667572	1.175723	2.336879
-1.100163	4.688455	2.339756
-1.150417	3.856111	2.331944
-1.427724	0.885854	2.339919
-1.627273	4.941818	2.332078
-1.832841	1.112564	2.357460
-2.200502	5.866164	2.344110
-2.211111	1.108889	2.325333
-2.316545	1.326364	2.336000
-2.528876	4.289438	2.332247
-2.919189	2.246892	2.334730
-3.125647	4.609964	2.353345
-3.287625	0.785000	2.335750
-3.481770	0.617472	2.350787
-3.670000	5.776667	2.330575
-3.698936	5.015390	2.349858
-3.800565	4.102177	2.340565
-3.991479	3.188343	2.343728
-4.119919	0.619514	2.344332
-4.165064	2.080833	2.345513
-4.246782	1.087356	2.334253
-4.407130	4.747523	2.345257
-0.522449	3.678571	2.342653
-1.201657	3.132857	2.351943
-1.207157	5.206559	2.364190
-1.202581	5.947903	2.354839
-1.791458	1.662917	2.343542
-1.981179	5.146103	2.355487
-2.331716	4.132781	2.353018
-2.385802	5.702099	2.339753
-2.387885	2.918077	2.356474
-2.680199	2.343625	2.358645
-3.430882	6.086029	2.346912
-3.523671	6.341529	2.362071
-3.776242	3.045839	2.346107
-4.163250	6.223114	2.364565
-4.240382	1.359013	2.355669
-4.447692	5.365128	2.351923
-0.552811	0.081281	2.372792
-0.781872	2.355882	2.364439
-1.157708	4.938819	2.363125
-1.541076	1.959861	2.372396
-1.600880	3.706053	2.370240
-1.730484	4.482881	2.369007
-2.778479	4.192350	2.362166
-2.888904	2.496849	2.354247
-3.046339	0.828142	2.363989
-3.149677	2.155806	2.359113
-3.199487	6.139231	2.358846
-3.768482	6.249805	2.365058
-3.913173	2.709904	2.355865
-4.016631	4.533690	2.366043
-4.303571	3.656964	2.355060
-4.666606	4.712294	2.352936
-4.673146	2.648652	2.353146
-0.528169	1.691831	2.361127
-0.568462	0.743956	2.366374
-0.744884	5.351163	2.362558
-0.764211	0.908129	2.369532
-1.191875	6.205313	2.360000
-1.396070	4.816422	2.376716
-1.811374	2.345906	2.379883
-2.001034	2.834828	2.365402
-2.496292	0.564607	2.365618
-2.776173	0.940864	2.366543
-3.123448	1.909655	2.359655
-3.170500	1.678000	2.359250
-3.240385	4.043846	2.368385
-3.417037	2.139185	2.378543
-3.528723	1.494681	2.360426
-3.653333	3.264651	2.370310
-3.678462	5.280000	2.370513
-4.202590	5.138012	2.372048
-4.401149	5.817241	2.362644
-4.661789	4.229368	2.369368
-0.526343	3.932090	2.382164
-0.532703	2.741689	2.379932
-0.553072	4.472440	2.395361
-0.617107	2.071322	2.378512
-1.112892	2.081010	2.393275
-1.350500	0.543083	2.376167
-1.442102	5.627159	2.380625
-1.863023	4.047674	2.376163
-1.861135	6.098298	2.381418
-1.875315	0.031748	2.380909
-1.987439	1.903049	2.374756
-2.054444	3.331778	2.364444
-2.146615	3.755795	2.387231
-2.271176	3.423971	2.373382
-2.715613	4.459368	2.387589
-2.948476	3.759529	2.385374
-3.267766	5.893040	2.390220
-3.361522	1.868478	2.381449
-3.553596	4.093933	2.371236
-3.623432	5.535680	2.386509
-3.911919	2.113023	2.382965
-4.013902	1.888780	2.376585
-4.205610	0.850732	2.372439
-4.218571	3.042619	2.374524
-4.278618	5.563309	2.391564
-4.592744	0.291353	2.388496
-0.520000	5.649462	2.389785
-1.002201	4.273684	2.394593
-1.240000	6.400000	2.370000
-1.485970	4.360224	2.382761
-1.906618	4.296176	2.381471
-2.107473	4.021648	2.382527
-2.220497	0.852236	2.393230
-2.485274	0.227221	2.411444
-2.591718	3.800264	2.392643
-2.689545	3.561212	2.384091
-2.943923	4.881077	2.390538
-2.958750	1.291389	2.403090
-3.258333	5.177937	2.385397
-3.425702	5.694737	2.387632
-3.430955	1.081180	2.394270
-3.882935	0.534457	2.379239
-3.911004	5.781632	2.390962
-4.280144	0.282383	2.397220
-4.443231	4.063593	2.398078
-4.447670	1.530000	2.393252
-4.438884	0.046884	2.396000
-4.676522	3.811522	2.378261
-0.526633	4.197437	2.406080
-0.524194	4.753978	2.398118
-0.768686	2.989705	2.411528
-0.774160	1.879920	2.403680
-0.961270	1.587540	2.403413
-1.049200	2.371000	2.390900
-1.258919	4.073243	2.403784
-1.479800	5.374200	2.400300
-1.533780	2.407835	2.406850
-2.670702	2.614503	2.396784
-3.052407	5.762685	2.397407
-3.227742	0.552742	2.408656
-3.546164	2.914795	2.389452
-3.721389	0.711944	2.398796
-4.053102	4.046241	2.403431
-4.088291	3.777778	2.397949
-4.210945	3.325879	2.407585
-0.524737	6.376165	2.419286
-0.964446	6.305997	2.426780
-0.995426	5.806628	2.413915
-1.293852	1.102295	2.412623
-1.552945	3.063630	2.408356
-1.601226	0.139811	2.407925
-1.671055	0.901350	2.415654
-2.058261	0.291196	2.409348
-2.223901	4.603369	2.418050
-2.344700	2.260950	2.409650
-2.507903	3.405161	2.401935
-2.609849	6.076679	2.413132
-2.962419	4.376250	2.417782
-3.206049	0.185556	2.398395
-3.667917	2.167917	2.398750
-3.742670	1.610631	2.415777
-3.885373	3.625672	2.408731
-4.044776	0.174627	2.408284
-4.415576	2.850643	2.425630
-4.637895	3.344737	2.398684
-4.669538	0.828615	2.415538
-4.664654	0.551567	2.420276
-0.529371	5.153457	2.427486
-0.532954	3.193077	2.426615
-0.726667	4.917246	2.412174
-0.769685	0.437244	2.420000
-0.974314	5.413268	2.423072
-1.139507	3.376761	2.417042
-1.701048	5.193100	2.422926
-2.111667	5.416250	2.407361
-2.195323	2.681255	2.420875
-2.647500	4.711333	2.411750
-3.201273	1.192061	2.425152
-3.768780	4.591585	2.429065
-4.006111	2.488333	2.417333
-4.038687	1.197879	2.417475
-4.434212	3.170322	2.431768
-4.659278	5.996495	2.413918
-0.736604	3.380377	2.427830
-0.955324	3.192676	2.440971
-0.980706	0.568941	2.418353
-1.113259	0.146593	2.434593
-1.192778	0.869630	2.430494
-1.223846	1.350769	2.417231
-1.453488	5.126628	2.426279
-2.168200	6.331188	2.445840
-2.203514	2.020324	2.428865
-2.572568	5.132568	2.441694
-2.709655	2.036724	2.417759
-2.840769	5.887038	2.442462
-2.945842	5.540368	2.430737
-3.109725	2.625902	2.438043
-3.124560	3.568160	2.429280
-3.553667	2.674000	2.416333
-3.956907	5.141546	2.426186
-4.003960	1.452819	2.425772
-4.173000	5.794667	2.420222
-4.208846	1.605577	2.417885
-4.227353	2.645294	2.424902
-4.233978	2.374199	2.437735
-4.418089	6.271178	2.435796
-4.681974	0.041053	2.433816
-0.532662	0.991295	2.441439
-0.934702	3.803841	2.445232
-0.978132	5.097253	2.432857
-1.279815	2.451296	2.438519
-1.304795	4.578356	2.435479
-1.497143	3.474000	2.433810
-1.694211	0.489158	2.430526
-1.870414	1.449172	2.437724
-2.087391	2.310580	2.427681
-2.102679	0.022321	2.442768
-2.231278	3.102180	2.440000
-2.470667	4.530000	2.436778
-3.207205	5.564083	2.451157
-3.424000	3.157739	2.450261
-3.773910	5.998077	2.453910
-4.036400	6.002450	2.445400
-4.247708	4.530104	2.438438
-4.438636	1.217121	2.427879
-4.460175	2.267544	2.429825
-4.674262	2.174098	2.430000
-0.931732	2.787087	2.442756
-1.360714	0.140833	2.442262
-1.387950	1.532733	2.455776
-1.541882	0.677294	2.440000
-1.864177	2.096203	2.447595
-1.900375	5.866375	2.452000
-2.505056	5.386517	2.438202
-2.544512	1.241674	2.458326
-2.739244	0.213025	2.451092
-2.948033	1.586230	2.437705
-3.191961	3.806078	2.444314
-3.213438	1.448542	2.444271
-3.271757	3.367027	2.448243
-3.330976	2.777886	2.446423
-3.349200	4.725467	2.441867
-4.673119	2.899174	2.447798
-0.527925	2.463145	2.464403
-0.764074	1.397870	2.469398
-0.992407	1.305741	2.453704
-1.137805	2.642195	2.451707
-1.194176	5.656484	2.453407
-1.576593	1.711239	2.464469
-1.754321	2.596605	2.459259
-1.769928	4.751151	2.463237
-1.816641	0.271390	2.461583
-2.029636	4.781844	2.465818
-2.093708	6.063596	2.464326
-2.413761	5.927064	2.451468
-2.444262	2.696230	2.450000
-2.459151	1.971550	2.465203
-2.501385	0.793723	2.470130
-2.851624	6.145635	2.457411
-2.887732	3.142784	2.452268
-3.497612	4.538209	2.455821
-3.846137	4.328164	2.472575
-3.858701	3.877597	2.460390
-4.114797	4.309926	2.470406
-0.730899	2.618820	2.474944
-1.245085	4.331898	2.480305
-1.486869	0.354720	2.469159
-2.189720	1.503808	2.478855
-2.890415	4.640829	2.473594
-2.945641	2.038333	2.460641
-3.271798	4.427472	2.473146
-3.493004	5.144635	2.469528
-3.540185	3.680556	2.457778
-3.592857	4.317619	2.460238
-3.804805	0.151289	2.476484
-4.236471	1.874853	2.461324
-4.396745	4.993632	2.472406
-4.465682	1.961667	2.471515
-4.670575	4.465747	2.465287
-0.933158	3.531228	2.474737
-1.145639	2.908797	2.475338
-1.515775	2.658169	2.472113
-1.568427	6.023387	2.480081
-1.766207	1.875862	2.475172
-1.901289	6.338328	2.482822
-1.988036	1.663571	2.469107
-2.129740	4.346364	2.479675
-2.351016	0.023594	2.497383
-2.633609	2.912782	2.481880
-2.657107	1.786038	2.497201
-2.661127	3.225352	2.474225
-2.657482	6.317482	2.480144
-2.707760	1.517656	2.485885
-3.158406	3.019275	2.468261
-3.277958	2.355870	2.489211
-3.377258	1.637742	2.474839
-3.878877	1.007935	2.485833
-4.058884	5.371373	2.483734
-4.409646	4.324513	2.488820
-4.673761	2.426923	2.478632
-0.640640	5.968160	2.501520
-0.753574	4.669398	2.494779
-0.956716	4.842799	2.499179
-1.348095	2.084603	2.485238
-1.448934	6.362738	2.490490
-1.631931	2.180621	2.486207
-1.687725	4.246825	2.495782
-1.996804	2.534536	2.487732
-2.071593	5.711062	2.488230
-2.300244	0.639593	2.490569
-2.313069	5.522277	2.484950
-2.380992	1.030413	2.500468
-2.462889	1.472000	2.482444
-2.492000	2.458182	2.481818
-2.816371	0.448871	2.484677
-2.967627	6.379831	2.488192
-3.075969	0.361323	2.504923
-3.297514	6.326851	2.499475
-3.425634	5.433239	2.485070
-3.474143	0.843429	2.487286
-3.527765	5.896332	2.504756
-3.684506	0.379691	2.487160
-3.795339	1.908898	2.481441
-3.818738	1.297767	2.485243
-3.860741	5.542525	2.496094
-3.954249	0.750363	2.491036
-4.298636	6.023750	2.486023
-4.659563	5.382313	2.495313
-0.532365	1.252230	2.500541
-0.549219	0.313125	2.494375
-0.709912	3.647478	2.504735
-0.740294	1.650294	2.486176
-1.150186	3.666097	2.500149
-1.367320	3.266000	2.505000
-1.622667	1.452889	2.490444
-1.910952	0.906786	2.503810
-1.981351	3.143649	2.490811
-2.233077	4.952203	2.505455
-2.306966	3.930112	2.495506
-2.484721	4.887462	2.501726
-2.728125	4.936250	2.489750
-2.999009	1.045129	2.503664
-3.086794	5.321435	2.500191
-3.232444	0.956889	2.490667
-3.507929	0.170165	2.507882
-3.491364	3.446136	2.488864
-3.574029	1.792662	2.497122
-4.672532	3.579241	2.492405
-0.529976	5.423501	2.523693
-0.761914	5.723301	2.518182
-0.779319	0.168637	2.532525
-0.925556	6.035291	2.516032
-1.171667	1.700000	2.500000
-1.446493	1.286716	2.507015
-1.543000	4.630150	2.520650
-1.890326	5.551630	2.510326
-1.960270	4.528378	2.497297
-2.399532	1.712222	2.512982
-2.389907	6.181757	2.526505
-2.667162	4.017297	2.501892
-2.739337	5.420422	2.508795
-2.856462	5.192736	2.516792
-3.001469	0.618898	2.510653
-3.033982	3.333009	2.507965
-3.071686	5.054767	2.516105
-3.418487	1.332237	2.508355
-3.703611	2.503889	2.507917
-3.734762	3.456786	2.507262
-3.983616	3.414915	2.512881
-4.046133	4.738267	2.503867
-4.131753	2.861169	2.512403
-4.438609	2.532180	2.513045
-4.652937	5.701599	2.517807
-4.678400	1.504800	2.493600
-0.772952	4.139692	2.521322
-0.766190	5.172619	2.510476
-0.963484	0.806129	2.525806
-1.023050	4.038450	2.519650
-1.389290	5.833470	2.531995
-1.543613	3.912941	2.521345
-1.650732	3.281288	2.527197
-1.948992	3.622868	2.521395
-2.372375	4.324125	2.514500
-2.897143	3.536327	2.502653
-3.310068	4.967055	2.514384
-3.380378	4.194244	2.526176
-3.618125	3.902813	2.511094
-3.743623	2.785217	2.511014
-3.876915	4.923682	2.520448
-3.967176	1.694824	2.514824
-4.307410	3.860392	2.527199
-4.429173	0.455276	2.525157
-4.655197	6.227566	2.518026
-4.665923	1.753462	2.519385
-0.531216	0.555000	2.518243
-0.744429	6.208286	2.526143
-0.934222	2.206111	2.529000
-0.983832	1.066287	2.527904
-1.238395	0.347778	2.525123
-1.672331	6.245276	2.530920
-1.769512	0.699512	2.529512
-2.041377	1.281138	2.541737
-2.053938	0.690702	2.552982
-2.394000	6.400000	2.508000
-2.756695	1.128898	2.522797
-2.853870	0.023448	2.549349
-3.112986	4.190569	2.530711
-3.130260	4.796104	2.526623
-3.303274	0.018053	2.534690
-3.985702	6.348764	2.532837
-4.537069	1.017759	2.516724
-4.673833	4.027667	2.516833
-0.536860	1.515041	2.538140
-0.537128	2.949773	2.560101
-0.755041	0.661488	2.531157
-0.847281	4.425392	2.545530
-1.187961	0.638750	2.541645
-1.235039	5.413586	2.552287
-1.331513	6.116933	2.555819
-1.681478	5.420522	2.532696
-1.692620	1.227380	2.548984
-1.852000	5.019163	2.537953
-1.979944	3.880281	2.548652
-2.128043	1.031304	2.535652
-2.260517	2.463276	2.533448
-2.541786	5.612937	2.544048
-2.556711	2.197763	2.529342
-2.891061	2.903128	2.543464
-2.939326	3.979775	2.541723
-3.015351	2.398129	2.557719
-3.250141	2.026761	2.535493
-3.424741	0.439310	2.531810
-3.580674	6.153820	2.530112
-3.941633	0.359660	2.535442
-4.453465	3.429604	2.532772
-0.521842	3.434803	2.546250
-1.086025	4.543185	2.561531
-1.209908	4.775505	2.547798
-1.459494	4.150759	2.539620
-1.898557	3.371443	2.545155
-1.942182	5.308682	2.556182
-2.185493	3.568028	2.544085
-2.353778	5.231185	2.551704
-2.503462	3.608956	2.560440
-2.816154	0.788077	2.542981
-3.378608	3.930253	2.544684
-3.537847	2.306794	2.555311
-3.833854	3.194688	2.542292
-4.077838	2.209730	2.534595
-4.131368	1.009368	2.552526
-4.168194	0.468472	2.554537
-4.301471	2.131176	2.542647
-0.952720	2.524400	2.559120
-1.414374	3.684019	2.573759
-1.501952	1.035833	2.576571
-2.420899	0.435043	2.573217
-2.628075	4.283054	2.564519
-2.807763	2.220274	2.560457
-3.550405	4.900270	2.563581
-3.610588	1.164163	2.563439
-3.902203	2.956780	2.547627
-4.128602	4.985508	2.564492
-4.203593	3.546587	2.560419
-4.414286	1.723036	2.550714
-4.459975	4.594081	2.565894
-4.480182	5.216364	2.556727
-4.652357	5.026650	2.568809
-4.666839	3.144943	2.557931
-0.525217	2.222717	2.560761
-0.960909	0.010000	2.554545
-0.996034	0.363190	2.565172
-1.359624	3.007970	2.568045
-1.607286	5.004429	2.563000
-1.711377	3.542395	2.569401
-1.768704	3.048611	2.572963
-2.088478	2.946957	2.562609
-2.292674	5.750698	2.563605
-2.644229	0.606432	2.570176
-2.860465	2.651395	2.558372
-2.930095	1.799714	2.577079
-3.091299	6.178468	2.580286
-3.334187	6.067355	2.586667
-3.638261	1.438261	2.560145
-3.727941	5.747647	2.557059
-3.828333	5.295370	2.562037
-3.855796	2.308938	2.578274
-4.091201	3.134047	2.584047
-4.250128	4.114615	2.559872
-4.278000	4.779000	2.565143
-4.436281	0.716942	2.565537
-0.517722	4.935316	2.575823
-0.932987	1.955325	2.584870
-1.174304	2.256311	2.588350
-1.380973	0.792478	2.578938
-1.577108	2.877169	2.578193
-1.685153	5.685194	2.593313
-1.747273	3.787727	2.564318
-1.892587	2.778187	2.591973
-1.988264	4.149097	2.583264
-2.166061	0.452929	2.574545
-2.310107	1.280643	2.591850
-2.367217	3.302565	2.579913
-2.442216	3.045412	2.580206
-2.593061	0.058131	2.597336
-2.624801	5.875909	2.591790
-3.044118	5.918235	2.576471
-3.333813	3.614676	2.574173
-3.600698	0.599070	2.577093
-3.663089	3.010244	2.582033
-4.441494	5.478276	2.585575
-4.494519	5.910000	2.573111
-0.520183	6.182385	2.584587
-0.519800	3.784400	2.584800
-0.521053	1.977895	2.582105
-0.749567	1.152987	2.596017
-0.990458	5.608431	2.601176
-1.175690	1.928103	2.581034
-1.204652	6.358182	2.590588
-1.248383	3.890240	2.589222
-1.316328	2.747574	2.606459
-1.881591	0.486667	2.603258
-2.244855	0.220217	2.587826
-2.451071	4.102262	2.588810
-2.754404	3.731124	2.599679
-2.793585	5.672981	2.591321
-3.433493	2.550478	2.596801
-4.257757	1.243694	2.604037
-4.453023	0.209302	2.580233
-0.740767	3.185879	2.603546
-0.744397	3.889397	2.596810
-0.790373	5.414533	2.606293
-1.141971	5.923019	2.615367
-1.381750	1.808500	2.593000
-1.773226	1.616989	2.592258
-2.696154	3.435128	2.598034
-2.871277	4.219574	2.592128
-3.877872	4.097340	2.592128
-4.055500	5.675900	2.597900
-4.189037	0.752222	2.600444
-4.245577	5.244615	2.587115
-4.325364	5.714904	2.607548
-4.661984	2.685709	2.607935
-4.663902	4.753049	2.602317
-0.532658	0.785443	2.605063
-0.537764	4.045000	2.625590
-0.948269	2.990641	2.609615
-1.086111	1.492778	2.605317
-1.134601	5.013497	2.605276
-1.790406	6.021265	2.628401
-1.995593	0.162667	2.609741
-2.299455	2.827891	2.614727
-2.707650	2.458060	2.629126
-3.076544	0.128456	2.607426
-3.171938	1.671125	2.606063
-3.287411	0.700670	2.615402
-3.312234	5.257056	2.615990
-3.512347	5.632721	2.621190
-3.525854	6.387561	2.603415
-3.709884	5.089884	2.603023
-3.736271	3.712712	2.598136
-3.748874	6.312517	2.605563
-3.915044	2.634167	2.619649
-4.507546	1.370417	2.611111
-4.673267	1.993663	2.601584
-0.531179	4.616829	2.626341
-0.532674	2.661444	2.626898
-0.533346	4.340769	2.633308
-0.728793	2.093621	2.613276
-0.759958	2.359792	2.623792
-0.758000	2.824846	2.617615
-1.151220	3.159762	2.625744
-1.410855	0.544737	2.617171
-1.437373	2.276314	2.626186
-1.461399	5.546923	2.619231
-2.032412	2.038235	2.618000
-2.826098	1.339268	2.606341
-3.130324	2.820926	2.620000
-3.287592	0.259634	2.624817
-3.353770	2.963811	2.623648
-3.675800	0.921400	2.610000
-3.982680	3.723196	2.620722
-4.015613	4.517350	2.630912
-4.144313	6.153359	2.631565
-4.660187	3.802336	2.628785
-4.661563	4.252969	2.612969
-4.682391	1.175652	2.609565
-0.532226	5.705110	2.645799
-0.748947	0.891579	2.620526
-0.960833	1.703214	2.626429
-1.167657	1.247483	2.641434
-1.488025	5.290988	2.634259
-1.526952	2.003524	2.629524
-1.673107	2.405000	2.634854
-1.743444	4.032384	2.633046
-1.765877	4.461801	2.628578
-2.102195	5.506234	2.645337
-2.163140	1.720814	2.623256
-2.241939	2.183091	2.629818
-2.622632	2.712105	2.623474
-2.642069	0.941724	2.619138
-2.806093	4.457417	2.633709
-3.041983	1.457190	2.623223
-3.039667	5.668500	2.622833
-3.076181	0.838611	2.629375
-3.219025	3.202086	2.641247
-3.253366	5.798000	2.630927
-3.459063	2.073750	2.636016
-3.606556	3.268036	2.635589
-3.621702	4.137518	2.638156
-3.701122	2.110102	2.629898
-3.918095	5.874127	2.628095
-3.935977	2.044828	2.629885
-4.188371	0.215140	2.644803
-4.359293	3.012989	2.641033
-4.447660	3.663723	2.622340
-4.664601	0.395460	2.635153
-0.524286	1.745714	2.628000
-1.246996	3.454032	2.643004
-1.248271	0.992944	2.651682
-1.440233	4.839535	2.634341
-1.475615	4.390462	2.642962
-2.129912	5.155242	2.637841
-2.250588	0.851307	2.642353
-2.522614	3.866863	2.639150
-2.920643	4.888006	2.645434
-3.070552	2.149816	2.648098
-3.084753	4.425157	2.647982
-3.367770	1.834865	2.638851
-3.531791	2.792090	2.627463
-3.590686	5.319840	2.647666
-3.680795	4.467500	2.635341
-3.751188	4.736875	2.642875
-3.863457	1.486543	2.631728
-3.900333	6.122111	2.636556
-4.085882	3.951078	2.638333
-4.157468	5.896709	2.637595
-4.187091	1.708182	2.641636
-0.540536	0.125179	2.640357
-0.990984	5.226230	2.637213
-1.023974	4.266538	2.638974
-1.243229	0.090646	2.663274
-1.364333	5.078000	2.644833
-1.573392	0.145636	2.666908
-1.856800	2.241600	2.645333
-2.218293	4.724042	2.655749
-2.657175	0.353234	2.664535
-3.395417	1.053833	2.657458
-3.759247	1.713011	2.647957
-4.079378	2.427772	2.652073
-0.958541	3.336865	2.662649
-1.060385	2.756154	2.661319
-1.186313	2.517095	2.678547
-1.240855	4.141453	2.656581
-1.632649	0.424106	2.665364
-1.921096	1.807123	2.657329
-2.034556	5.916006	2.669852
-2.044006	6.217596	2.666409
-2.068673	2.367092	2.668878
-2.276901	1.928592	2.652394
-2.279524	5.979921	2.651429
-2.305574	3.745574	2.650656
-2.624943	6.142586	2.672069
-2.670597	2.024925	2.650149
-2.711919	4.712551	2.668555
-3.261012	4.626640	2.660243
-3.511509	4.671321	2.660189
-3.970901	1.182973	2.654685
-4.123874	1.461982	2.652703
-4.351744	0.935814	2.650814
-4.667852	0.662349	2.659463
-4.669888	3.386180	2.648315
-0.734359	4.865846	2.673128
-0.775914	0.413710	2.674140
-0.961434	0.595814	2.673372
-1.009304	6.215304	2.671304
-2.137966	2.624068	2.675480
-2.224298	4.201157	2.674298
-2.411455	2.597818	2.668273
-2.594362	1.374947	2.678245
-2.836667	5.994881	2.669167
-2.864074	6.265556	2.682481
-2.937365	5.447814	2.679341
-3.229854	1.267816	2.687694
-3.431245	4.424440	2.677386
-4.266667	3.322510	2.677412
-4.671111	2.257222	2.666825
-0.540851	6.393617	2.672340
-0.736250	3.450357	2.665714
-0.747826	1.818478	2.665435
-1.340270	1.435811	2.683446
-1.450516	2.537613	2.679032
-1.727217	0.910061	2.680214
-1.729315	5.202904	2.686411
-2.187681	3.151304	2.676957
-2.251641	4.458750	2.676484
-2.266667	6.361897	2.691626
-2.526839	4.498705	2.689326
-2.528647	5.355714	2.680451
-2.604428	5.034797	2.690775
-2.903224	0.277632	2.682829
-3.131395	3.714264	2.686512
-3.153793	3.465862	2.668621
-3.342247	1.504270	2.668090
-3.680139	0.062404	2.688362
-4.171818	1.965682	2.673409
-4.181026	2.672821	2.667308
-4.420440	2.745535	2.684214
-4.657319	0.044933	2.687748
-0.529530	5.211745	2.687047
-0.546745	1.028019	2.698396
-0.906400	5.848400	2.676933
-0.920909	1.325207	2.682314
-1.237855	5.672013	2.703729
-1.332735	4.610122	2.694327
-1.503148	3.450247	2.688642
-1.556452	3.104301	2.689677
-1.667838	2.666419	2.690473
-1.861007	1.400104	2.696528
-1.887107	1.125028	2.706713
-2.005664	4.392920	2.687434
-2.031855	4.913345	2.699527
-2.105161	3.382796	2.687634
-2.153529	0.011176	2.680588
-2.346404	1.542959	2.697678
-2.430053	2.340160	2.691016
-2.572645	6.386777	2.690826
-2.585000	1.627097	2.685968
-2.860899	3.202360	2.685056
-3.165149	3.983731	2.696381
-3.503210	3.772399	2.694982
-3.774267	0.725600	2.683733
-3.937322	0.120711	2.708104
-3.956646	5.133634	2.705217
-4.207182	5.491572	2.705203
-4.420446	6.345785	2.700246
-0.776382	1.537884	2.705870
-0.908933	4.682267	2.688933
-1.016542	3.844034	2.700000
-1.513300	1.620800	2.697500
-1.674609	1.819922	2.699531
-1.925135	4.661189	2.699946
-2.172164	3.949179	2.702015
-2.505636	1.853636	2.688909
-3.078203	6.388281	2.708828
-3.200843	5.475172	2.705670
-3.604505	3.527143	2.696813
-3.685130	6.003239	2.708227
-3.790493	0.470987	2.706951
-4.158803	6.388632	2.703675
-4.238129	4.334082	2.709456
-4.430909	2.270000	2.685455
-4.444973	4.172295	2.704809
-1.014737	3.570526	2.694737
-1.602431	0.682099	2.717514
-1.882727	2.540420	2.712448
-1.921250	5.685395	2.708355
-2.512251	1.131602	2.716234
-2.831762	1.576211	2.712291
-2.856641	0.539733	2.715115
-2.868545	0.960933	2.717985
-3.129558	0.517666	2.720442
-3.133700	1.901145	2.721762
-3.387724	3.401870	2.703659
-3.581970	0.323788	2.711212
-3.964842	0.893079	2.724184
-3.998968	0.623175	2.709048
-4.629157	2.933652	2.707303
-4.660055	0.926813	2.714725
-4.657636	4.487818	2.707636
-0.531961	2.417647	2.716275
-0.777677	6.054949	2.711515
-0.966407	0.168982	2.715808
-1.513122	6.248416	2.722127
-2.372299	5.543678	2.717816
-2.448526	0.230842	2.718421
-2.620231	3.173308	2.713846
-2.964299	4.636075	2.719346
-2.986316	1.187632	2.709474
-3.203151	2.501005	2.721781
-3.465669	5.081260	2.714016
-3.526053	1.653947	2.709342
-3.518653	0.775699	2.727306
-3.853548	3.534903	2.715097
-4.370661	6.064793	2.722314
-4.634306	6.075231	2.729364
-4.652209	5.528023	2.713023
-0.595478	1.346752	2.730510
-0.784878	2.599106	2.729919
-1.124651	0.784574	2.734651
-1.309716	2.077441	2.733602
-1.379948	0.319636	2.741429
-1.491071	5.996429	2.724375
-1.585827	1.373309	2.724892
-1.818966	5.454414	2.734966
-2.023030	0.907879	2.726742
-2.070818	3.721727	2.726000
-2.463177	4.775156	2.733646
-2.479805	0.799707	2.732732
-2.709505	2.926847	2.733919
-2.751406	5.273438	2.724063
-2.910544	3.456463	2.742075
-3.604632	1.892316	2.720105
-3.942047	5.431913	2.740906
-3.982486	4.812057	2.741343
-4.250533	4.594533	2.722667
-4.371507	1.557911	2.734349
-4.435698	5.041977	2.717907
-4.438498	1.896197	2.732582
-4.452414	4.802069	2.716897
-4.470000	1.138500	2.723750
-4.650169	5.265932	2.724576
-0.788299	6.337631	2.755755
-0.903357	4.079860	2.743007
-0.988571	2.360268	2.740625
-1.181654	0.486850	2.735354
-1.234600	4.380000	2.728000
-1.434203	3.995942	2.733841
-1.800375	0.259083	2.746042
-1.803390	6.258475	2.743051
-1.815070	2.014930	2.730563
-1.940433	3.179300	2.742667
-2.288533	0.627200	2.739200
-2.450444	2.087667	2.735556
-2.707755	4.103980	2.734490
-3.203448	5.054253	2.736264
-3.252063	4.256349	2.731270
-3.292287	2.245919	2.742960
-3.363737	4.855758	2.730202
-3.418315	0.081573	2.736404
-3.511148	1.330383	2.756530
-3.651667	2.597299	2.743218
-3.765000	1.287222	2.724444
-3.955871	3.295226	2.740903
-3.974063	1.817902	2.746696
-4.014385	2.844115	2.744115
-4.316525	2.478559	2.736780
-4.632598	1.548583	2.734331
-0.543074	5.960777	2.753108
-0.546780	0.342542	2.739153
-0.774047	5.175117	2.764543
-0.790346	3.696199	2.764773
-1.178487	1.717311	2.742521
-1.759851	3.372239	2.746716
-1.880063	0.706313	2.752125
-2.736379	1.804138	2.739828
-2.895298	1.997440	2.748571
-3.284699	6.265060	2.747169
-3.399123	4.074035	2.741754
-3.460672	5.875126	2.750420
-3.863488	4.340349	2.747209
-4.205572	3.750663	2.758163
-4.462105	3.901316	2.736842
-4.649643	5.811786	2.742143
-0.535600	3.117200	2.750800
-0.762108	4.309307	2.767139
-0.754271	5.656042	2.764271
-1.399615	1.199872	2.749231
-1.491938	5.748682	2.760388
-1.776011	4.890730	2.765618
-1.816604	4.240472	2.757170
-2.030909	0.356783	2.758881
-2.129521	1.396322	2.775239
-2.162250	1.120125	2.773125
-2.298234	4.984857	2.769735
-2.436892	5.792243	2.769135
-2.950719	2.546601	2.766928
-3.037373	3.038898	2.760508
-3.332250	2.735700	2.761850
-3.421163	0.530720	2.771801
-3.749589	2.847363	2.769658
-3.915000	6.384521	2.767055
-4.201961	2.213137	2.751667
-4.568899	2.485321	2.757844
-0.537273	3.615795	2.759886
-0.564088	0.596101	2.761321
-0.960757	4.931568	2.776108
-1.042482	2.099433	2.778830
-1.068169	5.411901	2.771479
-1.215385	2.939091	2.771469
-1.228542	3.691146	2.765365
-1.363750	3.240766	2.773266
-1.648255	4.647562	2.778975
-1.762383	0.018135	2.797098
-2.169267	5.723933	2.771200
-2.289873	3.526709	2.760633
-2.515227	3.442500	2.755000
-2.687552	5.523237	2.778880
-2.721789	0.745474	2.762105
-2.926064	2.807128	2.771170
-3.533224	6.212694	2.766653
-4.041166	4.164028	2.778622
-4.395129	5.306258	2.782419
-4.658444	4.051778	2.753556
-0.999477	1.083721	2.791948
-1.185906	5.188898	2.777638
-1.221552	6.183190	2.779397
-1.630548	2.180411	2.791918
-1.636364	1.136667	2.776515
-1.773679	2.914811	2.777736
-1.941089	3.985545	2.779406
-2.278626	0.386565	2.781527
-2.447778	4.258086	2.782407
-2.654342	2.243772	2.780044
-2.754333	1.180889	2.770667
-2.916066	2.297377	2.778525
-3.024259	4.189630	2.764630
-3.163118	1.022971	2.793559
-4.026263	0.377105	2.780526
-4.201429	5.109341	2.778352
-4.384888	0.334218	2.798139
-4.416528	0.064306	2.770139
-4.661509	3.601509	2.774340
-0.552230	2.109189	2.786824
-0.560796	5.465995	2.800498
-0.776098	3.003943	2.800894
-0.983906	4.464017	2.804848
-2.251581	5.333185	2.802450
-2.522237	0.542345	2.801321
-2.928894	0.052211	2.793317
-3.881021	3.938290	2.798812
-4.102404	3.499519	2.797548
-4.238676	0.555588	2.790098
-4.231522	4.858478	2.781957
-0.558624	2.850201	2.814228
-0.731726	0.184772	2.805381
-1.195038	4.804427	2.794656
-1.328407	5.398956	2.798956
-1.444454	0.901965	2.801266
-1.555200	5.036350	2.798950
-1.858580	3.602301	2.815227
-2.022564	1.628974	2.795000
-2.077536	2.952899	2.796232
-2.917843	3.978824	2.793922
-3.124481	4.813485	2.806680
-3.192931	0.021954	2.802701
-3.622527	2.342582	2.803516
-3.672168	5.752937	2.795385
-3.863706	2.444924	2.798731
-3.914733	5.686000	2.798333
-4.163778	1.076044	2.803244
-4.661579	1.789474	2.787895
-0.544545	1.580000	2.798636
-0.549667	3.363067	2.809067
-0.885252	0.799496	2.804748
-1.725562	3.842630	2.820301
-1.739442	5.830172	2.812361
-1.989336	5.285071	2.808815
-2.316182	2.991727	2.808364
-2.395000	4.005000	2.817378
-2.480687	2.795267	2.815458
-2.705878	0.151832	2.808092
-2.739487	5.786769	2.811692
-2.990958	5.851250	2.815708
-3.006972	6.107156	2.805872
-3.120489	0.266895	2.828680
-3.227456	5.993713	2.819474
-3.440515	5.469152	2.819242
-3.599865	1.081892	2.809324
-3.699767	5.497674	2.807829
-3.694194	1.497258	2.802581
-3.780233	4.972907	2.806163
-3.859500	2.189167	2.803500
-4.660500	1.309750	2.802750
-1.005238	6.022585	2.816190
-1.462623	2.916721	2.808525
-2.246889	0.151556	2.820778
-2.423846	0.010000	2.810769
-2.428267	6.061333	2.817200
-2.479134	3.690397	2.821408
-2.830982	5.057991	2.826652
-2.912465	3.731690	2.815775
-3.331184	3.616184	2.824145
-3.509651	2.938488	2.822907
-3.696212	3.096212	2.813788
-4.168136	3.033559	2.808305
-4.159818	5.722000	2.811636
-4.381796	3.515550	2.829142
-4.404800	5.830633	2.831267
-4.466186	0.688186	2.824419
-4.644556	3.195148	2.814675
-0.545783	6.218313	2.833434
-0.574760	3.861336	2.841336
-0.813333	2.206875	2.816250
-0.970211	0.391368	2.821474
-0.988667	1.850000	2.819778
-1.289531	5.897469	2.840375
-1.328988	0.666883	2.836316
-1.402370	4.233642	2.832659
-1.457434	1.836579	2.839967
-1.470444	3.758222	2.829185
-1.600000	5.527407	2.839226
-2.018788	2.178333	2.825227
-2.401940	3.234776	2.831741
-2.686957	4.343430	2.834831
-3.007709	5.244916	2.831006
-3.037314	1.687143	2.828571
-3.294829	1.687222	2.837607
-3.846580	4.593446	2.840959
-4.431607	5.558571	2.819643
-4.446545	4.438091	2.826727
-0.552609	4.746783	2.844348
-1.001827	1.552019	2.831058
-0.999157	3.132410	2.830723
-1.422444	0.029259	2.834370
-2.075393	0.586517	2.835955
-2.458202	5.176404	2.835618
-2.680229	3.867163	2.853954
-2.711356	3.588136	2.828814
-2.965081	0.743257	2.844821
-3.594733	3.965800	2.839733
-3.720891	3.715487	2.850084
-3.759394	5.239091	2.837803
-4.018971	1.339485	2.840662
-4.268873	4.035352	2.842923
-4.636082	4.692990	2.843196
-0.564335	1.843064	2.856821
-0.559474	4.481140	2.862456
-0.755000	1.008173	2.841635
-0.780370	1.964259	2.846852
-0.785723	3.272215	2.860154
-1.134459	3.350796	2.864140
-1.212135	3.940391	2.861744
-1.211509	2.278679	2.839623
-1.935429	6.071333	2.853000
-1.978088	2.729681	2.858685
-2.199812	6.135564	2.858195
-2.231859	2.297692	2.853654
-2.931264	4.415824	2.857637
-3.293438	5.690341	2.856790
-3.337346	2.008499	2.861743
-3.580435	2.094348	2.850435
-3.841543	1.088743	2.850286
-3.934828	3.065000	2.842069
-4.005836	6.168662	2.857695
-4.191637	0.812847	2.856584
-4.333110	1.321159	2.852805
-4.386641	3.170859	2.859805
-4.636063	0.254344	2.854525
-4.646082	2.038144	2.848557
-0.826298	5.422009	2.879142
-0.994683	5.643303	2.874163
-1.115623	4.210101	2.871953
-1.162965	0.244070	2.867638
-1.619528	4.356604	2.852642
-1.635628	4.095953	2.867256
-1.993547	0.125893	2.870587
-2.047526	4.204742	2.868351
-2.096887	4.548675	2.861258
-2.208592	1.771549	2.859437
-2.224318	2.774545	2.849091
-2.352203	1.282203	2.858305
-2.551788	2.499416	2.868978
-2.718065	2.698581	2.859742
-2.997885	1.385962	2.855288
-3.042971	5.599239	2.874964
-3.216967	4.470219	2.874727
-3.257376	5.276540	2.866844
-3.377000	0.287667	2.857083
-3.439677	2.516075	2.860108
-3.485000	3.210250	2.850750
-3.514041	4.247876	2.861503
-3.618968	4.790903	2.855097
-3.731266	3.349177	2.859684
-3.783857	0.268429	2.850000
-3.925894	1.581014	2.860725
-4.626012	6.306607	2.860714
-0.547826	4.994783	2.865362
-0.554017	4.138547	2.868205
-0.577396	0.831245	2.879660
-0.794940	0.569116	2.878594
-1.232000	2.695800	2.861200
-1.319910	5.006306	2.869279
-1.715000	3.165417	2.868125
-1.820732	2.350000	2.868293
-1.853889	4.472111	2.871000
-2.365019	0.985393	2.874869
-2.352108	4.587189	2.875189
-2.437465	1.707465	2.862254
-2.651959	0.965284	2.878325
-2.711473	3.341240	2.877209
-3.210428	3.344385	2.872086
-3.595860	4.499409	2.869946
-3.658588	0.617062	2.878814
-3.675091	6.383727	2.875909
-3.704701	0.869104	2.875522
-3.752941	4.157765	2.864471
-3.884757	5.937427	2.869515
-4.186545	5.976021	2.872513
-4.209742	1.816753	2.878196
-4.244762	6.236190	2.859881
-4.405328	2.110246	2.868443
-4.619400	4.958133	2.877800
-4.633015	2.716332	2.871910
-4.642273	4.278030	2.857879
-0.989286	2.630260	2.879026
-1.098768	1.319783	2.888696
-1.350645	3.494274	2.881694
-1.453417	4.792814	2.885075
-1.525772	0.507805	2.881545
-1.618000	2.490571	2.870429
-1.670000	6.083451	2.891882
-1.828544	1.741553	2.877961
-2.185620	0.803471	2.872562
-2.239863	2.031684	2.890756
-2.746094	1.402969	2.876094
-3.265742	3.085781	2.889180
-3.349922	3.869845	2.876744
-3.385773	0.917629	2.874948
-3.399282	4.666133	2.883149
-4.093054	4.477096	2.887635
-4.120047	2.538821	2.887217
-4.365804	2.897054	2.881339
-0.587417	2.589970	2.904024
-0.795717	5.882245	2.905281
-0.805333	1.714267	2.890000
-1.475362	2.681159	2.882464
-2.001504	1.915398	2.883805
-2.254959	3.802764	2.883740
-2.298175	2.542698	2.890238
-2.638041	1.975773	2.894124
-2.716267	6.030800	2.891511
-2.870189	4.795245	2.897623
-3.280994	1.423205	2.909295
-3.716032	1.722857	2.889048
-3.790059	1.967059	2.892941
-4.048138	2.024575	2.892186
-4.421913	0.937478	2.887826
-0.780663	4.635128	2.909643
-0.820641	1.251352	2.907367
-0.990283	2.888679	2.894434
-1.214394	1.903788	2.898333
-1.241000	1.076235	2.899353
-1.251497	1.532925	2.895170
-1.334063	2.480208	2.891250
-1.591203	5.270886	2.901646
-1.738281	1.505313	2.893906
-1.988533	3.383743	2.913084
-2.048613	2.473323	2.913968
-2.056667	5.519128	2.916744
-2.163088	4.794118	2.900049
-2.498072	6.279699	2.893072
-2.504000	1.468600	2.889000
-2.627000	4.884200	2.893700
-3.079634	2.080650	2.908659
-3.092132	3.572574	2.893750
-3.144036	2.846637	2.906054
-3.577731	0.163529	2.899916
-3.757257	6.151600	2.907714
-4.149273	3.266364	2.909636
-4.210175	0.149605	2.910307
-4.638151	0.517395	2.895714
-0.562613	5.727789	2.910402
-0.575678	1.164746	2.908559
-0.920709	3.499803	2.914921
-1.004144	6.261781	2.917500
-1.062536	0.611312	2.921341
-1.185833	0.010000	2.912083
-1.450863	4.530203	2.915685
-1.985848	5.820939	2.914874
-2.023400	6.304800	2.899800
-2.085569	5.055976	2.917358
-2.251351	4.356351	2.901622
-2.477079	5.428168	2.912079
-2.546971	3.035477	2.918133
-2.600449	4.627978	2.904719
-2.907442	0.387442	2.912558
-3.118970	2.343212	2.913333
-3.513097	5.224773	2.925938
-3.795065	0.030325	2.910844
-3.895146	2.677961	2.902039
-3.978011	3.695966	2.918977
-0.778571	2.765306	2.907551
-0.821531	2.440714	2.927143
-1.410306	6.114585	2.930044
-1.423771	6.373829	2.915829
-1.578886	3.378257	2.931629
-1.821166	5.112914	2.929580
-1.825929	1.270796	2.917345
-2.136087	3.161196	2.923750
-2.674141	1.646520	2.919780
-3.210132	0.757368	2.907500
-3.232430	4.097664	2.926776
-3.507990	3.453920	2.919749
-4.062528	5.268210	2.925795
-4.180732	1.540427	2.930915
-4.373627	2.635840	2.936933
-4.387752	4.669922	2.913488
-4.624673	1.088844	2.920251
-4.627841	2.286705	2.918182
-0.992422	5.164297	2.929219
-1.661173	6.361939	2.926071
-1.685920	1.943793	2.930057
-1.736331	0.977171	2.938768
-1.729010	2.715623	2.942204
-1.825287	5.622184	2.920805
-2.259347	5.891847	2.946705
-2.662846	0.364154	2.924385
-2.862826	5.413913	2.931087
-2.963523	3.280783	2.939075
-3.121375	6.280750	2.925625
-3.380063	1.173365	2.940283
-3.905000	0.725987	2.924013
-4.047445	2.288248	2.935401
-4.057355	4.977806	2.936710
-4.456875	1.716354	2.917500
-0.585404	2.304485	2.949522
-0.582712	5.236356	2.933983
-1.043333	3.735310	2.948178
-1.346042	5.667292	2.935417
-2.273591	6.372317	2.940270
-2.824747	2.143434	2.936061
-2.844615	6.230256	2.929744
-2.853065	4.171429	2.955377
-3.097868	3.863807	2.938629
-4.608776	5.418299	2.942313
-0.745729	6.141563	2.938125
-1.975950	1.084380	2.948264
-2.113418	3.606962	2.942532
-2.268871	1.552097	2.938710
-2.325197	5.636535	2.947717
-2.677410	5.228584	2.962410
-2.859203	1.822319	2.949420
-3.056356	5.022712	2.964350
-3.131000	2.590000	2.942800
-3.350226	4.983982	2.951538
-3.522110	5.682110	2.957156
-3.519710	1.598696	2.946667
-4.369305	2.353874	2.966556
-4.382044	3.815660	2.962013
-4.609503	3.429752	2.954876
-4.607908	5.681503	2.950392
-0.630000	6.400000	2.930000
-0.778592	4.123944	2.948732
-0.793213	4.993371	2.972081
-0.832313	3.873955	2.958507
-1.043587	4.672310	2.966474
-1.068624	0.886746	2.972963
-1.201522	4.449755	2.972364
-1.211739	3.118804	2.956087
-1.293286	0.441714	2.954143
-1.439294	2.073176	2.971676
-1.506768	1.572348	2.971311
-1.582976	0.756976	2.961756
-1.610675	0.124262	2.966793
-1.640513	3.638376	2.960684
-1.724115	0.362718	2.975062
-1.905962	3.031122	2.966218
-1.954537	0.825610	2.966244
-2.029538	3.835692	2.952154
-2.570364	5.664227	2.963500
-2.589734	1.220631	2.963688
-2.589788	4.111555	2.964488
-2.772178	0.599530	2.967054
-2.963931	0.982901	2.966069
-3.381854	6.183609	2.969371
-3.428922	2.257059	2.956863
-3.856667	0.476250	2.954896
-4.061374	5.553132	2.958626
-4.440645	4.195806	2.954194
-4.451496	6.150709	2.956142
-4.604857	2.972714	2.969171
-4.603529	5.945529	2.962059
-4.634242	0.822121	2.950606
-0.673841	3.557256	2.963659
-1.010698	2.274767	2.969767
-1.446349	3.097460	2.960794
-1.589677	1.322581	2.967097
-1.821967	5.375738	2.974098
-2.251799	3.397226	2.975488
-2.409465	0.290053	2.969626
-2.556105	0.736105	2.965684
-3.122000	1.208667	2.971111
-3.323333	6.397778	2.955000
-3.438519	0.697593	2.970556
-3.540000	1.878205	2.964188
-3.787949	1.307564	2.956795
-4.147686	2.791843	2.971843
-4.140172	4.728970	2.980129
-4.279718	5.443099	2.967606
-4.378636	4.918818	2.973182
-4.623243	3.737027	2.958919
-0.584430	1.404051	2.971772
-0.591183	0.380860	2.976774
-0.595098	3.049248	2.991732
-1.179446	5.487196	2.990369
-1.379280	0.210800	2.984400
-1.489661	1.083842	2.990367
-1.803846	0.618173	2.979760
-1.970240	1.464251	2.979701
-2.468077	2.138154	2.981769
-2.516000	5.915280	2.979360
-2.550647	0.084676	2.982806
-2.820882	2.895882	2.963235
-2.881604	2.427380	2.989626
-3.101616	0.539167	2.990783
-3.372746	0.041051	2.982271
-3.608080	2.766449	2.985435
-3.699009	2.511509	2.990819
-3.931100	3.446100	2.980400
-4.009053	0.951053	2.973684
-4.073558	3.929519	2.973269
-4.205401	4.244453	2.985766
-1.104513	4.938407	2.990442
-1.338686	1.311752	2.985839
-1.430426	4.010426	2.985638
-1.574441	5.748323	3.002484
-1.641067	2.957467	2.976667
-1.978692	0.430093	2.989346
-2.404566	4.815029	2.985838
-2.494366	4.409718	2.982958
-3.157006	1.845150	2.996407
-3.412473	5.913055	2.997527
-3.938529	4.280711	3.002010
-4.599196	4.001929	2.999678
-0.811795	1.493462	2.992179
-0.962454	0.085810	3.014282
-1.059556	5.862111	2.993667
-1.078889	1.711389	2.988056
-1.178089	6.085122	3.002846
-1.487313	2.331194	2.989701
-1.656981	4.911294	3.009865
-1.791356	4.681073	3.002655
-2.552769	3.498769	2.987231
-2.768261	3.131087	2.985652
-2.901264	1.558276	2.995057
-3.052028	0.081538	3.006573
-3.501915	3.710395	3.012948
-3.670876	5.887883	2.996934
-3.885631	6.353584	3.007952
-3.938226	1.796774	2.991129
-3.982487	0.260160	3.016417
-4.313269	5.173948	3.007120
-4.346824	6.392118	3.002471
-4.383024	0.503902	3.007171
-4.563333	5.178148	2.995741
-4.627188	1.560000	2.983125
-4.616522	4.498913	2.992391
-0.574348	5.966087	3.008152
-0.847073	4.360813	3.004797
-0.831297	0.318973	3.015622
-1.309068	2.894472	3.012050
-1.303876	3.712416	3.020758
-1.794305	4.256983	3.015932
-2.146888	1.269947	3.020186
-2.465091	3.864545	3.011727
-2.831880	5.656453	3.015556
-2.868916	1.234011	3.021111
-3.144691	5.851303	3.022443
-3.344422	2.699456	3.012177
-3.641162	5.008485	3.013586
-3.763290	5.653032	3.007806
-3.849693	5.406858	3.014483
-3.853712	2.903939	3.005076
-4.206617	3.605613	3.017361
-4.463099	0.146959	3.014094
-0.619245	0.134340	3.031321
-0.776604	5.644340	3.017107
-1.434645	5.456120	3.025519
-1.858778	2.137443	3.028125
-2.246563	0.470000	3.016172
-2.293333	5.157879	3.012879
-2.409600	1.883920	3.024160
-2.918045	2.687594	3.022481
-2.939975	6.012574	3.032277
-3.015106	3.033404	3.017553
-3.031495	4.592732	3.017268
-3.084866	4.289286	3.023170
-3.090000	5.392331	3.023006
-3.554808	1.361538	3.014615
-3.851057	4.848238	3.024626
-4.112820	0.502762	3.029622
-4.160495	1.222387	3.018288
-0.604194	1.656636	3.030276
-0.785479	0.807671	3.028082
-1.190548	2.123151	3.015616
-1.227989	5.166931	3.035556
-1.328938	0.876372	3.032566
-1.839646	6.226814	3.026726
-1.922000	4.036727	3.014000
-2.036383	1.704823	3.027730
-2.648554	2.311281	3.035289
-2.697941	6.395000	3.018824
-2.807178	0.194724	3.034110
-2.872027	3.916351	3.025946
-3.352867	0.468400	3.027867
-3.596714	5.454714	3.033857
-3.808177	2.271302	3.035573
-4.362868	5.669412	3.031912
-4.402759	1.153276	3.016724
-0.591667	2.059286	3.025714
-0.995349	4.046395	3.033140
-1.310984	1.722131	3.031639
-1.476782	5.098276	3.039425
-1.827576	0.012424	3.030909
-2.165479	0.229175	3.047228
-2.507978	5.039551	3.042135
-3.224842	4.770791	3.050253
-3.665972	1.103833	3.055250
-3.859615	3.197308	3.027308
-3.979545	5.775909	3.028485
-4.076650	3.050911	3.056404
-4.358105	3.354373	3.055452
-4.376240	1.928640	3.036240
-4.411852	1.474568	3.034691
-4.611852	1.865556	3.024815
-4.604184	1.318367	3.039694
-0.603711	4.297062	3.054175
-1.071839	0.389425	3.047241
-1.114377	2.486748	3.062340
-1.291735	4.682653	3.045918
-1.926182	4.897939	3.045758
-2.134639	2.932990	3.040103
-2.226963	3.986667	3.050444
-2.260786	5.418176	3.064025
-2.357424	3.634444	3.051566
-2.357818	2.835273	3.038182
-2.606012	2.816190	3.051905
-2.838409	3.475455	3.036818
-3.208217	0.964650	3.047261
-3.608493	0.433797	3.058464
-3.697647	4.651569	3.046471
-3.711103	3.544412	3.052059
-3.854268	4.025223	3.053185
-3.860929	5.142301	3.056195
-4.229257	2.142012	3.062167
-4.238431	0.978627	3.045294
-4.356806	0.758194	3.044722
-4.580442	2.505959	3.063363
-0.615091	3.318649	3.069221
-0.836852	2.113386	3.071852
-0.937294	6.056706	3.047059
-1.029681	1.944043	3.059894
-1.301309	4.214698	3.071779
-2.036773	5.275100	3.065100
-2.116545	2.195818	3.064682
-2.178099	0.974678	3.067427
-2.326323	0.718215	3.077677
-2.340226	3.089173	3.057669
-2.365336	2.363109	3.079397
-2.504116	0.510145	3.073275
-2.698911	3.694719	3.061386
-2.767626	4.997071	3.080657
-2.955570	6.392405	3.058734
-3.140643	1.590000	3.061053
-3.240539	0.247246	3.057425
-3.342381	5.428294	3.064960
-3.430638	2.936064	3.055745
-3.651544	3.064926	3.056029
-3.754658	1.539530	3.058718
-4.303206	4.470802	3.068473
-0.600556	2.796389	3.063611
-0.629172	0.616847	3.082930
-0.728088	1.871324	3.063824
-0.795752	5.242920	3.068319
-0.868333	1.045591	3.067796
-1.140300	3.509200	3.064400
-1.344414	3.302207	3.081172
-1.667595	4.473797	3.060253
-1.809377	3.813863	3.081713
-1.831977	2.506186	3.080819
-1.851461	3.541685	3.066067
-2.005217	4.402174	3.067702
-2.164639	2.673436	3.075326
-2.366364	4.208267	3.080398
-2.369153	1.141864	3.067119
-2.452162	2.621622	3.063784
-3.166927	6.061094	3.065625
-3.254877	3.647654	3.072222
-3.366824	4.262128	3.082804
-3.492162	4.796967	3.086186
-3.714184	4.397245	3.071429
-3.942389	2.493097	3.064956
-4.570455	4.779318	3.082143
-0.590200	6.240400	3.074400
-0.616429	5.447989	3.089577
-0.620177	0.982920	3.077168
-0.839900	3.130000	3.080348
-1.092000	2.755636	3.087182
-1.332266	2.646059	3.088079
-2.035725	4.664638	3.079420
-2.372338	6.080390	3.065974
-2.629547	6.191317	3.087613
-2.672617	5.463925	3.084346
-2.695846	2.573923	3.081692
-2.907789	5.223579	3.084105
-2.963410	3.686994	3.078728
-3.150000	5.940000	3.050000
-3.327005	2.448122	3.087310
-3.368018	1.743514	3.075946
-3.600000	0.010000	3.060000
-3.626393	4.168525	3.077705
-3.733908	0.198966	3.076782
-0.614457	4.822659	3.091685
-0.629560	3.779223	3.106736
-1.067917	1.485641	3.102564
-1.095000	1.155476	3.081905
-1.276556	5.848222	3.086000
-1.394232	0.628652	3.094569
-1.497568	6.120967	3.122077
-1.664955	5.524324	3.092252
-1.808000	5.792933	3.081467
-1.870442	1.880088	3.090796
-1.941758	6.006703	3.103242
-2.072295	0.638197	3.089344
-2.124315	6.191986	3.089863
-2.228841	4.516522	3.079130
-2.388758	1.400229	3.103693
-2.500719	0.941871	3.090863
-2.728981	5.875370	3.081389
-3.165393	3.217416	3.083483
-3.322698	3.402857	3.086190
-3.414000	3.183400	3.077400
-3.471455	4.509515	3.101381
-3.542456	6.354199	3.094128
-3.628608	3.922152	3.083544
-3.660653	2.063015	3.091658
-3.920761	1.143370	3.087391
-3.958051	4.571186	3.103729
-3.978148	1.383519	3.082407
-4.337213	3.048197	3.078852
-4.581728	0.364938	3.093519
-0.829332	6.313819	3.111169
-1.526292	1.825899	3.097191
-1.545745	4.687660	3.098511
-1.636916	3.183383	3.112246
-1.730515	1.661838	3.103235
-2.133487	5.713026	3.102993
-2.136038	1.920189	3.091509
-2.219130	4.941159	3.093333
-2.480000	1.641707	3.092561
-2.637381	1.462857	3.087619
-2.636863	1.820196	3.088235
-3.044909	0.775455	3.099636
-3.229945	5.170685	3.113151
-3.392329	3.983425	3.096027
-4.089104	6.053582	3.089552
-4.307248	4.019060	3.103490
-4.462569	3.596147	3.088991
-4.578966	2.108828	3.093931
-0.614406	4.554266	3.107063
-0.611190	4.043690	3.106905
-1.078693	3.264602	3.114716
-1.298685	6.285014	3.120630
-1.309775	0.016854	3.114494
-1.494802	0.393164	3.108870
-1.537893	3.816679	3.116643
-1.550377	4.260849	3.103113
-1.569021	2.534000	3.112383
-1.924551	2.799449	3.116435
-2.634435	3.295043	3.115565
-2.638000	4.770286	3.110286
-2.691007	4.519424	3.113381
-3.193438	2.207344	3.100781
-3.602194	0.831484	3.106839
-3.612222	6.101111	3.099667
-3.847700	6.028650	3.112100
-4.132923	1.897769	3.111308
-4.309740	5.918842	3.119385
-4.578312	3.209740	3.104286
-0.854523	2.866231	3.127588
-0.858194	3.640220	3.127048
-0.896061	0.552963	3.122727
-1.044767	5.313837	3.117326
-1.052529	4.288059	3.122471
-1.476947	3.534466	3.132176
-1.639533	5.969844	3.128599
-1.675067	4.032400	3.110533
-1.893800	3.246800	3.119500
-1.912118	0.219082	3.127012
-2.060135	0.019324	3.115135
-2.746538	1.016955	3.133494
-3.053333	4.050476	3.109286
-3.074449	3.454487	3.124601
-3.335948	5.692714	3.121970
-3.400792	2.065667	3.121667
-3.614847	3.313190	3.120123
-3.733200	1.815200	3.113867
-3.825814	3.772326	3.113721
-3.903465	1.997228	3.121683
-4.308075	1.693369	3.133610
-4.560851	6.311560	3.115248
-0.880652	1.692717	3.118804
-0.871169	4.790974	3.133117
-1.044895	5.658531	3.145431
-1.220912	3.957541	3.139751
-1.316803	4.916531	3.125034
-1.528333	2.805238	3.122381
-1.685254	2.297119	3.123559
-1.773426	1.394422	3.137729
-2.090484	4.169677	3.120968
-2.349530	0.054201	3.130940
-2.452821	4.608803	3.125470
-2.486731	5.288770	3.128414
-2.978380	4.827887	3.141502
-3.096190	5.621524	3.122286
-3.477760	0.223120	3.125520
-3.785692	0.646000	3.141577
-4.070934	0.753391	3.133356
-4.570667	0.645487	3.129487
-4.570980	4.299118	3.125588
-0.634694	2.487296	3.143112
-1.291184	1.937763	3.135000
-1.316212	1.504394	3.136818
-1.917964	5.546764	3.142509
-2.592751	0.270106	3.156376
-2.692348	2.069103	3.152902
-2.692326	4.268372	3.128372
-2.994000	1.968000	3.132000
-3.015357	0.295714	3.133690
-3.047959	1.375714	3.132041
-3.224744	4.468590	3.132051
-3.389455	1.498364	3.130364
-3.435285	1.015854	3.139756
-3.581090	2.331280	3.149668
-4.096705	6.305233	3.141783
-4.104336	3.361538	3.144755
-4.352766	2.811064	3.133191
-4.585814	2.760000	3.118372
-0.636207	1.231379	3.141494
-0.858750	3.378523	3.146591
-0.876538	2.556667	3.148718
-1.093429	3.006190	3.145714
-1.638036	2.054286	3.150804
-1.695693	1.144818	3.149489
-2.156349	1.495556	3.142698
-2.256075	1.720093	3.150280
-2.387438	5.779835	3.157769
-2.661560	3.946086	3.162569
-2.939948	2.227959	3.160103
-3.212189	6.331108	3.156216
-3.269810	0.677286	3.152048
-3.273492	1.286508	3.154206
-3.804286	2.696807	3.140924
-4.039974	1.628675	3.157870
-4.074884	4.101163	3.136744
-4.099206	5.115556	3.138571
-4.270000	0.045100	3.165267
-0.628686	5.085200	3.161257
-0.853501	5.846024	3.168457
-0.882227	1.306597	3.163655
-0.963894	5.072861	3.174543
-1.147487	0.696884	3.164271
-1.389164	4.473908	3.171752
-1.620114	0.908523	3.156364
-1.872750	0.972125	3.152875
-2.023167	3.691000	3.148500
-2.067673	3.440204	3.167837
-2.150000	6.397500	3.143333
-2.374500	6.323833	3.164833
-2.808937	0.421884	3.160242
-3.215714	2.989429	3.150286
-3.523583	2.597250	3.160833
-3.631647	5.220884	3.167068
-3.843342	0.916247	3.172986
-4.197966	2.391441	3.155678
-4.324233	4.721104	3.159877
-4.519342	0.894737	3.156053
-4.548725	5.541544	3.161074
-0.617551	5.755510	3.155102
-0.863176	5.468243	3.166284
-1.147528	0.190148	3.183100
-1.304255	5.615691	3.176064
-1.577111	5.295827	3.180938
-1.637439	0.615732	3.159024
-1.704110	6.389863	3.166027
-2.122802	2.435495	3.174835
-2.311452	2.068710	3.156613
-2.562715	3.041900	3.178914
-2.801111	0.754138	3.184215
-2.869286	0.010714	3.150000
-2.915226	4.419095	3.174422
-2.938462	1.730888	3.175207
-4.073960	5.373926	3.175336
-4.205161	1.426022	3.159677
-4.332582	6.215879	3.168297
-4.547045	5.802045	3.168068
-0.852059	4.541324	3.176176
-1.062056	6.219065	3.172991
-1.548302	0.026981	3.185535
-2.157048	3.197048	3.178667
-2.190839	5.973077	3.182168
-3.178317	3.860099	3.179505
-3.935281	5.592809	3.175281
-4.057363	4.873035	3.190000
-4.157851	5.699256	3.173471
-4.287514	0.322977	3.187225
-4.537803	6.064470	3.180227
-4.556304	5.017826	3.168478
-0.644805	2.232857	3.190260
-0.827101	4.172678	3.202531
-1.481391	1.290397	3.192583
-1.662885	0.239808	3.185288
-1.775054	5.050975	3.201552
-1.845149	0.477127	3.198507
-2.828082	3.011289	3.202925
-2.884167	3.277647	3.190588
-3.178375	2.629500	3.178375
-3.447256	5.035915	3.184634
-3.569355	1.652903	3.182581
-3.578505	5.646168	3.193178
-3.829828	0.395603	3.192845
-4.003011	0.052707	3.195663
-4.006403	3.601367	3.196079
-4.006761	2.828732	3.194930
-4.009735	2.215503	3.195291
-4.129688	2.618281	3.176875
-4.562500	1.682500	3.180500
-1.100619	3.725457	3.213540
-1.121461	4.774270	3.194719
-1.254048	0.436587	3.197937
-1.271545	5.357091	3.208409
-1.433535	3.036768	3.203838
-2.089831	0.417119	3.199492
-2.612594	0.021992	3.226729
-2.906904	5.462703	3.206904
-2.986506	6.208476	3.206766
-3.029881	2.836119	3.209284
-3.094375	1.119018	3.201696
-3.506393	0.623279	3.192623
-3.854138	3.368161	3.207414
-4.360326	2.572065	3.194674
-4.552857	3.828000	3.183429
-0.671004	1.478476	3.214535
-0.893686	3.890784	3.215333
-1.093647	5.965176	3.209765
-1.345943	2.165314	3.220457
-1.735185	2.952074	3.208741
-1.854113	4.551210	3.210403
-2.033529	3.938235	3.215147
-2.037834	5.055207	3.216636
-2.245432	4.727037	3.202099
-2.552426	5.985503	3.213077
-2.629018	5.686727	3.215018
-2.841224	1.448776	3.204694
-3.498508	3.529905	3.219937
-3.771905	1.314139	3.213956
-3.780090	5.796937	3.218243
-4.096180	4.346242	3.219410
-4.305568	3.767622	3.214649
-4.306196	4.991196	3.202935
-4.304371	5.495166	3.211656
-4.339828	4.253621	3.195345
-4.521964	4.545018	3.221964
-4.537808	5.290000	3.210959
-4.556061	1.139697	3.198788
-0.672273	0.334034	3.217898
-0.918170	2.316027	3.228571
-1.127735	4.514872	3.229872
-1.149238	0.956000	3.213238
-1.317200	2.420640	3.214000
-1.374259	1.058580	3.227716
-1.879778	0.730556	3.219667
-1.939800	1.572400	3.207800
-1.957241	6.309261	3.225468
-2.248630	3.795260	3.234986
-2.337640	0.324607	3.227865
-2.414355	3.991452	3.215161
-2.651865	1.252694	3.219275
-3.194630	0.438148	3.227259
-3.284820	5.931317	3.229611
-3.409754	6.164472	3.227359
-3.542304	5.899032	3.222811
-3.759279	6.268417	3.234028
-4.063841	3.860530	3.218411
-4.272075	0.603208	3.226478
-4.438263	2.285154	3.228067
-1.100035	1.755140	3.238287
-1.396304	0.204130	3.226087
-1.446935	4.069032	3.225403
-1.473917	5.802581	3.237512
-1.836693	5.308645	3.232829
-1.911972	2.302066	3.231033
-2.041579	1.135439	3.228596
-2.323631	3.400238	3.230298
-2.445578	4.875378	3.234940
-2.501333	4.381583	3.228000
-2.506585	3.742846	3.233659
-2.548824	3.495588	3.222647
-2.710833	1.639792	3.221667
-2.776364	6.355522	3.237037
-2.781136	2.754545	3.219773
-2.853036	4.100714	3.220893
-2.920097	2.539094	3.235825
-3.238390	1.887881	3.228475
-3.514534	1.251093	3.236478
-3.614271	2.876979	3.220000
-3.822205	4.211614	3.234370
-4.080400	0.988400	3.217600
-4.528400	2.982356	3.230178
-0.652368	5.984474	3.239386
-0.666346	2.995321	3.243397
-0.893905	0.227524	3.236952
-0.916875	0.853068	3.237216
-1.228861	1.295730	3.240819
-1.530302	1.574523	3.247236
-1.540603	4.931525	3.247305
-1.717143	3.404347	3.247599
-1.740000	4.770467	3.235421
-1.868088	4.139755	3.240441
-2.540769	0.743793	3.252944
-2.785979	6.059897	3.231959
-3.828168	3.007634	3.234275
-4.311209	1.115055	3.234615
-4.518472	4.076332	3.249782
-0.666284	3.511093	3.249617
-0.678100	0.023100	3.244200
-0.883947	1.902456	3.250000
-1.058477	2.104371	3.247881
-1.779060	6.136410	3.249060
-1.996316	2.048308	3.256805
-2.273600	2.936000	3.237600
-2.300614	5.102982	3.252544
-2.531639	2.486393	3.238525
-2.914909	5.720909	3.240727
-3.135303	2.389773	3.252727
-3.199200	4.942840	3.257160
-3.366212	2.792727	3.258030
-3.734706	5.452549	3.250353
-4.013623	5.884058	3.238116
-4.274386	3.510702	3.255000
-4.534149	1.445319	3.249681
-4.537750	3.417000	3.238500
-0.672097	0.812097	3.246452
-1.258895	2.859448	3.264807
-1.372066	5.128404	3.268873
-1.421961	0.814314	3.255490
-2.162281	4.358947	3.248421
-2.466018	1.822301	3.257788
-2.950806	3.867258	3.251452
-2.981073	0.586590	3.264713
-3.059174	0.086281	3.264876
-3.573616	4.325203	3.270738
-3.756717	0.036919	3.263838
-3.825387	4.978297	3.267678
-4.264125	3.206500	3.249500
-4.284859	0.859366	3.260423
-4.285374	5.239728	3.266463
-4.526383	1.924610	3.258298
-0.667500	1.999500	3.258000
-1.691441	3.670932	3.263390
-1.699643	2.698669	3.283117
-1.718824	4.346387	3.264790
-2.023896	1.788701	3.262468
-2.319667	0.897444	3.267000
-2.320213	2.601915	3.255532
-2.477054	2.794274	3.277676
-2.515971	2.234029	3.268417
-2.738491	2.359340	3.268868
-2.971437	5.062874	3.270958
-3.018412	5.952396	3.281894
-3.070036	4.610253	3.279603
-3.359710	2.269203	3.270580
-3.412261	5.292783	3.269217
-3.494262	1.871557	3.263852
-3.677897	4.744369	3.286799
-4.044340	0.304528	3.256604
-4.205278	2.950556	3.263611
-0.691536	2.706519	3.282321
-0.883673	6.083527	3.285745
-1.351625	1.744750	3.267500
-1.374437	4.724225	3.286690
-1.704851	5.687264	3.291020
-1.708961	1.854156	3.270779
-1.968805	3.049386	3.285358
-1.981371	4.810323	3.279194
-2.282026	1.240727	3.292883
-2.788843	3.496942	3.273388
-2.812378	0.191443	3.297988
-2.817926	4.664815	3.280593
-3.109238	4.291143	3.275238
-3.267059	1.638431	3.276863
-3.486346	0.033109	3.288718
-3.544865	4.053243	3.274324
-3.997885	3.178846	3.271154
-4.103137	1.227451	3.265098
-4.513952	0.192455	3.278024
-0.688708	4.384125	3.291125
-0.703504	1.729562	3.292044
-1.031356	0.411525	3.280339
-1.177556	2.617778	3.284667
-1.231375	3.159625	3.289625
-1.220660	3.423160	3.297264
-1.362374	3.717393	3.291362
-1.959298	2.605165	3.296364
-2.073175	0.882169	3.298254
-2.126652	5.531448	3.292986
-2.765682	5.206477	3.295909
-2.894255	1.223191	3.278298
-2.941932	0.944659	3.282841
-3.178269	0.904038	3.281731
-3.402778	3.042222	3.279167
-3.561203	3.789622	3.295636
-3.750350	3.617273	3.291608
-3.770370	3.951605	3.283704
-4.305909	2.026970	3.279545
-0.677734	6.230156	3.301328
-0.911784	1.534054	3.307351
-0.940000	0.010000	3.270000
-0.968112	1.100629	3.293846
-2.540758	5.101061	3.286515
-2.766400	1.868400	3.294700
-3.076829	3.646341	3.305061
-3.254907	5.501173	3.310247
-3.291830	0.190850	3.299739
-3.400732	6.392317	3.298780
-3.444010	0.411719	3.299115
-3.432021	3.287553	3.295745
-3.647155	0.258707	3.295776
-3.780231	2.260694	3.302486
-3.937465	1.825493	3.293239
-3.985688	6.130182	3.315195
-3.997286	2.449286	3.295000
-4.436531	6.394898	3.303061
-0.711304	1.056877	3.311344
-0.712129	3.251000	3.321581
-0.903538	3.035846	3.304462
-0.952764	2.724874	3.317889
-1.058195	4.084269	3.319914
-1.463140	6.242369	3.324766
-1.470167	1.957333	3.301000
-1.478756	3.270207	3.312280
-1.600000	4.557344	3.300938
-1.959000	5.733900	3.302800
-2.318019	5.355566	3.314057
-2.335828	0.581943	3.316306
-2.369762	3.154206	3.307222
-2.489781	1.073880	3.306721
-2.513500	1.521625	3.306313
-2.582061	4.147576	3.310667
-2.612906	0.487048	3.327368
-3.101185	5.284007	3.320348
-3.116667	2.099964	3.318261
-3.413227	0.825777	3.313108
-3.630116	3.129767	3.301279
-3.647680	1.031438	3.319150
-3.830065	1.559351	3.305325
-3.985270	0.571577	3.307973
-4.482375	0.471167	3.315125
-0.730143	0.572837	3.335931
-1.167188	4.983984	3.314297
-1.239842	4.289974	3.326359
-1.728485	2.442121	3.304848
-2.083719	4.583058	3.316364
-2.237778	1.896481	3.316852
-2.607163	5.402837	3.328365
-2.698647	4.904839	3.334404
-2.739351	3.748442	3.316948
-3.038594	1.547711	3.330683
-3.247910	3.455149	3.317836
-3.320208	3.689375	3.306250
-3.562347	2.128265	3.316327
-4.183710	4.574234	3.329718
-0.704343	4.905182	3.341533
-0.938067	4.379412	3.326807
-1.434355	2.695323	3.317097
-1.581443	2.218247	3.344021
-2.044536	1.378900	3.335601
-2.075455	5.281515	3.330076
-2.078043	2.825652	3.317391
-2.325359	4.527124	3.327778
-2.359091	6.075195	3.318052
-3.127534	3.170434	3.338428
-3.305636	1.109697	3.332242
-3.763161	2.527548	3.337935
-3.830400	5.232000	3.327867
-4.001527	2.827679	3.392439
-4.479174	4.843760	3.333347
-0.689848	3.996667	3.333788
-0.693718	4.637051	3.334103
-1.165525	6.371381	3.336961
-1.191645	5.787500	3.336382
-1.479186	0.600000	3.337209
-1.765105	0.083636	3.340420
-1.836429	1.236508	3.340635
-1.914854	3.570766	3.342956
-2.010439	0.108070	3.337982
-2.026650	6.087340	3.337931
-2.075036	0.622929	3.351357
-2.205199	6.271618	3.350663
-2.313947	2.370614	3.340088
-2.720944	4.409485	3.349270
-3.110397	4.037960	3.359943
-3.137921	5.729406	3.334356
-3.183256	6.134477	3.340407
-3.344367	4.191265	3.345753
-3.347170	3.929811	3.330755
-3.399488	4.795116	3.338419
-3.604627	1.468806	3.330149
-3.733486	6.021101	3.334404
-4.189689	1.810518	3.344560
-4.218923	4.099538	3.329385
-4.248507	6.050149	3.337463
-4.494141	3.640202	3.332222
-0.694255	5.476596	3.340957
-0.960743	3.539459	3.351588
-0.955457	5.313241	3.360055
-0.974037	3.271101	3.343028
-1.160000	0.010000	3.320000
-1.170545	1.526000	3.342182
-1.647168	0.414661	3.362861
-1.666387	0.760126	3.359580
-1.806439	3.905707	3.349707
-2.205125	5.785625	3.360271
-2.342308	4.229128	3.351949
-2.426775	5.592085	3.352769
-2.570470	4.620671	3.347651
-3.359532	2.528857	3.356208
-3.357500	1.414474	3.350000
-3.669065	0.761667	3.354187
-3.780441	2.003676	3.346029
-3.903947	1.105197	3.363750
-3.955556	4.699487	3.344017
-4.408723	5.695213	3.343191
-4.474307	2.744270	3.351049
-0.703883	5.226019	3.356117
-0.928766	6.330519	3.361169
-0.986410	0.641603	3.360577
-1.203947	6.119035	3.364123
-1.477129	5.572327	3.357772
-1.646381	1.380667	3.360952
-1.765496	1.631908	3.364351
-1.808670	5.916543	3.362766
-2.166053	1.615263	3.359145
-2.197257	4.909115	3.360442
-2.258090	0.117990	3.365628
-3.133893	1.304966	3.358993
-3.510227	4.564091	3.347727
-3.674583	0.503250	3.355333
-3.700986	1.766056	3.350704
-3.984545	4.055455	3.351970
-3.995192	6.386250	3.353462
-4.215000	2.237245	3.360612
-0.717593	2.387685	3.371204
-0.733443	3.736437	3.377395
-0.936000	5.586594	3.385125
-0.959219	4.839023	3.375508
-1.244359	1.992821	3.366795
-1.492329	4.334932	3.372808
-1.553333	3.893333	3.361053
-1.596829	6.033537	3.361829
-1.642966	4.127797	3.366695
-1.713297	3.156341	3.374384
-1.755254	0.994746	3.357119
-1.929274	3.300484	3.370242
-1.945629	4.372781	3.377483
-2.094600	4.147133	3.375900
-2.184783	3.568127	3.378462
-2.579851	3.292677	3.376840
-2.684412	0.922353	3.370662
-3.654634	3.378537	3.382561
-4.062946	5.190775	3.373023
-4.229800	4.829800	3.361800
-4.479769	0.730615	3.367615
-4.484519	3.203558	3.360865
-0.719000	5.728667	3.375467
-1.503617	2.464787	3.373511
-1.558000	1.138471	3.386647
-1.873205	0.298974	3.370256
-2.566308	2.013231	3.377308
-2.710959	5.877021	3.382705
-3.004556	3.405089	3.381479
-3.033134	1.858507	3.369552
-3.276524	4.460024	3.386952
-3.375288	5.722404	3.370481
-3.809317	2.788075	3.372609
-4.052438	2.034000	3.386594
-4.223701	6.298110	3.371575
-4.465769	5.930577	3.370385
-4.479692	4.335077	3.368769
-4.477500	5.122639	3.370833
-1.206513	5.529145	3.400461
-1.236098	0.590585	3.394683
-1.395841	1.421327	3.391416
-1.499293	3.516061	3.385960
-1.559850	2.905225	3.397800
-1.670920	5.421954	3.388391
-1.699559	6.314485	3.389265
-1.899748	5.512516	3.393899
-2.503975	0.175607	3.399038
-2.703851	2.586988	3.394689
-3.036400	0.316267	3.389911
-3.508704	5.503333	3.397623
-3.569434	2.693585	3.387925
-3.585949	4.977487	3.403282
-4.200000	5.817963	3.379444
-4.212059	0.170000	3.382941
-4.220891	2.488317	3.388812
-4.469638	0.989783	3.389565
-4.461429	6.181633	3.380816
-4.473043	5.459783	3.382174
-0.762303	1.302191	3.402079
-1.008214	2.479762	3.400595
-1.385273	0.376800	3.406691
-1.374078	5.957670	3.401165
-1.400000	0.010000	3.372500
-1.605376	5.141221	3.408427
-2.099082	2.258163	3.392857
-2.310636	2.122182	3.394818
-2.453523	6.300303	3.406023
-2.458192	5.847910	3.401751
-2.785277	5.594298	3.405277
-3.163502	6.378953	3.411372
-3.302319	0.604589	3.398986
-3.350310	2.030543	3.399302
-3.930986	0.818630	3.415507
-3.959143	1.364000	3.392143
-3.968500	5.430833	3.394500
-4.221932	2.747273	3.392159
-4.227679	1.379464	3.397679
-4.455167	1.258662	3.404201
-0.948082	5.861049	3.425601
-1.032595	1.324524	3.423119
-1.195985	1.097406	3.425761
-1.254394	3.927197	3.414508
-1.429759	5.328072	3.410000
-1.547729	0.176507	3.420306
-2.719419	1.406977	3.404767
-2.949719	2.315082	3.420304
-2.960939	4.839797	3.420203
-3.169821	2.716786	3.398929
-3.473288	1.665856	3.419452
-3.567881	2.368390	3.403559
-3.860154	0.206462	3.406615
-3.907055	3.781650	3.417508
-3.919124	5.677591	3.404161
-4.189924	0.438550	3.415420
-4.460909	3.878523	3.404091
-4.470857	2.481714	3.396571
-0.876481	5.074630	3.412593
-1.240714	0.835000	3.405952
-1.539889	1.760000	3.420667
-2.119273	0.327932	3.437886
-2.182996	3.289401	3.427753
-2.502078	1.295974	3.417273
-2.552551	3.917092	3.422857
-2.877074	2.047340	3.425691
-2.929024	2.712683	3.423049
-3.356792	5.095849	3.407925
-3.620413	5.751770	3.424690
-4.174317	5.569137	3.418561
-4.393981	1.566852	3.414722
-0.762000	2.144909	3.432455
-1.073061	2.910000	3.416735
-1.813571	4.912755	3.426429
-1.823795	2.155281	3.438020
-1.859094	2.857774	3.435736
-2.041282	3.794359	3.438872
-2.290507	3.970254	3.442535
-2.536849	3.005000	3.428767
-2.926563	4.204063	3.418438
-2.925222	6.295611	3.433278
-2.976618	2.966029	3.431127
-3.447737	6.007956	3.425912
-3.933119	3.505505	3.433211
-4.023758	4.934395	3.440637
-4.048842	1.605946	3.433822
-0.762436	0.133846	3.436282
-0.995049	3.809126	3.434175
-1.016585	0.129538	3.452985
-1.197365	5.219606	3.450197
-1.284557	4.532966	3.452446
-1.602663	4.767389	3.452611
-1.832177	0.576122	3.438299
-1.849655	4.665747	3.432069
-1.887389	1.894522	3.445987
-2.167692	2.545846	3.430000
-2.219464	1.031250	3.436429
-2.276897	2.772155	3.434914
-2.726145	1.156867	3.439759
-2.767590	3.118313	3.438494
-2.809948	3.967098	3.438290
-2.831514	1.673267	3.442510
-3.067233	0.752327	3.441384
-3.604090	5.250396	3.453087
-4.152908	3.634610	3.442979
-4.173825	0.698470	3.448415
-4.213556	3.870667	3.423556
-4.238462	4.323718	3.444872
-1.176264	3.641319	3.446044
-1.876234	5.171778	3.462594
-2.200676	3.028514	3.446351
-2.371243	4.744320	3.451243
-2.389252	1.680204	3.453333
-2.564915	6.074542	3.463559
-2.723043	2.846957	3.442899
-2.731190	0.687738	3.447738
-2.897033	5.363445	3.455502
-2.954559	4.453088	3.448603
-3.081200	1.072350	3.453950
-3.542308	2.941209	3.443077
-3.615494	6.208670	3.450043
-3.696286	4.142286	3.440714
-3.983646	4.286133	3.452155
-4.151250	3.120417	3.440417
-1.009744	4.589829	3.468889
-1.021572	1.942704	3.463019
-1.188974	4.773846	3.447179
-1.265739	0.161565	3.453565
-1.273765	2.228704	3.461049
-1.388697	4.959910	3.476472
-1.914797	6.382276	3.454146
-2.307419	1.433065	3.451613
-2.400120	3.700876	3.468167
-2.400805	5.003678	3.455862
-2.612584	3.546292	3.449551
-2.923717	0.027368	3.476776
-3.241155	2.955988	3.464985
-3.257635	1.801554	3.463784
-3.700615	1.251385	3.460103
-4.165758	0.957374	3.455960
-4.409133	3.432954	3.472222
-4.417432	4.568716	3.463268
-0.773524	1.888667	3.474286
-0.804188	2.875550	3.478429
-1.007265	2.232059	3.482941
-1.014430	0.916709	3.458987
-1.007377	1.690328	3.467213
-1.278167	2.481833	3.467833
-1.300968	3.004409	3.476505
-1.641486	1.981622	3.462703
-1.893117	0.816104	3.460000
-1.911757	2.408745	3.471757
-1.971908	1.066151	3.474375
-2.460598	0.862735	3.467009
-2.613200	1.789000	3.464200
-2.871736	6.050826	3.469256
-2.941061	5.792122	3.477510
-3.195745	5.928404	3.473245
-3.874434	3.254660	3.479968
-3.920682	5.926515	3.461364
-4.025422	0.029333	3.475156
-4.411440	1.851206	3.483502
-0.770526	0.788246	3.467719
-1.244783	1.717681	3.477681
-1.497561	0.907195	3.469146
-1.584133	5.819867	3.473333
-1.731273	4.462727	3.478909
-2.391034	3.437586	3.467586
-2.407568	0.393063	3.474414
-2.493813	4.397813	3.475000
-2.664854	0.016505	3.483398
-2.685325	6.297597	3.476883
-2.879163	0.495665	3.483498
-2.888760	3.621405	3.484339
-3.128704	5.038765	3.482654
-3.195870	4.717640	3.487994
-3.278938	0.357611	3.485310
-3.365754	6.242291	3.475251
-3.437944	3.513084	3.474673
-3.647738	0.095714	3.475714
-3.706200	4.559600	3.467400
-3.769000	3.017250	3.472250
-4.261822	5.051051	3.492079
-4.417360	2.133600	3.481240
-4.423878	0.044354	3.477551
-4.435373	2.987910	3.468060
-0.753902	6.006585	3.476341
-0.797816	2.592031	3.499885
-0.804186	0.377535	3.493023
-1.247821	2.743619	3.501362
-1.381667	4.142308	3.491026
-2.190882	4.385539	3.495343
-2.205542	5.146988	3.484819
-2.489651	2.463953	3.483140
-3.131683	2.492970	3.487822
-3.584681	1.944043	3.480319
-4.145551	3.371066	3.496801
-0.801513	4.187697	3.499342
-1.686505	3.745922	3.497087
-1.725340	3.486456	3.505388
-1.836324	6.135784	3.509608
-1.860210	4.147832	3.495594
-2.073947	4.743158	3.494211
-2.104306	2.030417	3.489583
-2.880749	5.102834	3.507166
-3.054516	3.815726	3.493548
-3.241429	2.249365	3.507937
-3.324112	5.320374	3.492056
-3.403786	3.159500	3.499643
-3.749744	5.516282	3.498910
-3.797517	6.380455	3.516818
-3.872024	0.435893	3.500893
-4.402427	4.130921	3.500209
-1.304086	3.273555	3.516080
-1.360000	5.734000	3.512000
-1.842734	1.419820	3.517014
-2.438542	5.248177	3.514740
-2.629204	5.085664	3.508850
-2.688757	0.316836	3.521808
-2.924505	1.293297	3.504615
-3.094264	5.513876	3.510698
-3.284159	0.931416	3.505310
-3.480577	4.035096	3.511442
-3.638841	3.654493	3.514130
-3.809916	4.813866	3.508151
-4.017895	2.277895	3.503553
-4.398525	0.308579	3.513770
-0.788962	3.441038	3.515472
-0.993971	6.129779	3.511691
-1.041897	4.251897	3.513793
-1.055692	0.446443	3.527826
-1.826870	5.722672	3.520687
-1.973503	5.943450	3.603259
-2.250000	5.486522	3.517043
-2.261957	5.989946	3.520924
-2.708000	4.211333	3.523111
-2.743023	4.716434	3.522093
-2.788528	3.369722	3.532472
-2.885842	0.930891	3.518812
-3.201917	3.604889	3.534417
-3.242938	1.551688	3.523000
-3.412978	3.784831	3.521236
-3.493961	1.093052	3.532792
-3.529607	0.312295	3.532000
-3.688077	3.900769	3.507500
-3.809408	5.074737	3.513750
-0.786604	4.450000	3.520755
-1.077148	3.132096	3.540687
-1.519091	6.386883	3.521818
-1.513103	3.132759	3.518276
-2.037143	4.983571	3.526143
-2.063333	5.643141	3.535449
-2.169247	1.246986	3.530959
-2.384167	1.927222	3.517639
-2.502780	0.618976	3.534537
-2.511014	2.206329	3.538841
-2.517432	2.730137	3.539016
-2.707544	2.361930	3.518070
-3.157757	4.240514	3.531028
-3.306923	1.261346	3.522500
-3.402194	0.066367	3.532266
-3.515069	4.297743	3.534688
-3.701127	1.593333	3.528333
-3.881118	1.778882	3.529627
-4.108615	1.187385	3.518462
-4.386084	5.288112	3.527692
-0.783415	6.242683	3.527805
-1.069558	3.402210	3.546022
-1.171906	5.950809	3.552689
-1.433935	3.769379	3.544379
-1.601975	1.550191	3.540000
-1.670513	2.403077	3.533333
-1.723911	2.659815	3.545978
-2.111745	0.030468	3.550170
-2.168486	1.790784	3.554541
-3.149109	0.144368	3.552759
-3.216360	3.326207	3.545900
-3.370914	2.735635	3.542995
-3.519486	0.579673	3.543224
-3.555029	4.746192	3.549477
-3.934834	4.525762	3.542384
-4.114264	6.073953	3.537907
-4.382345	0.568207	3.541379
-0.798571	3.928571	3.545000
-0.795075	4.711940	3.542537
-0.825455	1.038485	3.548182
-0.824388	3.187908	3.555306
-0.835980	1.523660	3.556438
-1.096763	4.988426	3.567339
-1.347276	6.203621	3.555483
-1.406832	0.700495	3.551188
-1.417287	2.041117	3.549043
-1.930345	1.666069	3.551379
-1.978804	3.059185	3.553804
-1.980733	2.659400	3.549933
-2.222301	0.805739	3.558011
-2.225758	0.541273	3.554545
-3.521333	6.396889	3.540667
-3.735049	0.931845	3.545728
-3.796731	2.356731	3.535000
-4.047059	0.272745	3.538039
-4.118435	4.712652	3.552087
-0.826979	5.429532	3.572255
-1.592180	6.166992	3.559549
-2.026656	5.372125	3.575750
-2.419442	3.191076	3.568606
-2.454767	1.098895	3.560756
-2.459337	4.143976	3.567349
-2.517759	1.496207	3.550000
-2.606235	5.709471	3.564000
-2.987215	3.192877	3.566712
-3.121023	0.536093	3.568791
-3.155263	2.006974	3.553947
-3.497115	2.170224	3.567821
-3.480618	1.442542	3.577482
-3.655549	5.980445	3.574036
-3.860755	6.141415	3.561698
-4.139005	4.079147	3.565261
-4.146094	5.335938	3.551250
-4.377450	3.689060	3.554966
-1.000896	2.736418	3.560746
-1.089823	5.689381	3.586047
-1.467798	2.616607	3.569583
-1.520377	4.539811	3.567484
-1.527162	1.311892	3.565541
-1.617700	5.587100	3.571550
-1.742822	1.181245	3.574689
-2.080283	6.242085	3.586862
-2.100789	1.490132	3.561711
-2.668729	5.349171	3.568674
-2.689067	3.752000	3.571067
-3.504744	0.828205	3.563846
-3.638485	2.530758	3.563485
-3.776165	0.665090	3.578746
-4.357639	0.836898	3.579769
-4.364430	4.805436	3.572416
-4.361447	5.825921	3.561711
-4.370833	5.582083	3.559583
-1.032941	4.006176	3.583015
-1.092876	0.714335	3.583219
-1.343956	3.522637	3.578242
-1.585598	4.011624	3.586068
-1.712356	0.289540	3.582069
-1.936200	0.197600	3.571200
-1.994712	4.529640	3.594317
-2.019883	3.432953	3.589357
-2.356000	5.697778	3.569778
-2.885849	2.519245	3.575597
-3.098333	5.269643	3.575714
-3.143341	6.160935	3.591449
-3.242362	3.973568	3.582563
-3.336667	4.914394	3.567576
-3.330278	5.568167	3.580944
-3.814118	2.103529	3.589538
-3.895985	4.012117	3.580730
-4.060552	6.342566	3.588585
-4.077802	5.770055	3.582253
-4.358352	6.075824	3.571978
-4.351011	6.341011	3.581180
-1.239780	1.301282	3.597179
-1.373055	5.489539	3.606455
-1.403016	1.105794	3.584206
-1.573488	0.520640	3.590116
-1.607930	4.280881	3.598943
-1.715376	0.922688	3.587634
-1.812428	3.254529	3.601377
-2.300053	6.379158	3.590526
-2.551389	4.862361	3.588750
-3.038653	1.751036	3.594870
-3.418352	2.426758	3.593077
-3.432773	5.820504	3.585714
-3.638235	3.209804	3.587598
-3.675680	2.792426	3.593550
-3.880611	5.307889	3.590000
-4.120774	1.815806	3.592903
-4.228667	2.943939	3.591879
-4.351444	1.106203	3.593209
-4.368831	2.735455	3.583636
-0.831892	5.699527	3.596216
-0.860798	0.604172	3.598221
-0.953507	5.209478	3.603284
-1.078051	5.422542	3.600169
-1.097869	1.509016	3.595410
-1.353439	1.536688	3.605605
-1.594301	5.327306	3.608342
-1.710547	1.785323	3.605970
-1.711310	2.998363	3.615239
-2.079528	4.009571	3.599442
-2.258778	2.270833	3.609222
-2.293003	0.217157	3.612875
-2.368526	2.934211	3.601158
-2.686800	2.004571	3.601314
-3.000103	4.038144	3.594948
-3.011321	1.499245	3.589057
-3.420137	4.533288	3.591096
-3.771192	4.306995	3.606736
-3.964481	1.008506	3.602597
-0.858421	3.698684	3.618202
-1.118328	6.332958	3.610836
-1.365673	4.730481	3.608462
-1.444706	2.361373	3.608725
-1.609464	2.187321	3.599643
-1.894737	3.653053	3.606947
-2.007513	0.657919	3.615685
-2.127989	2.857759	3.615287
-2.475612	5.491122	3.615306
-2.734535	4.459942	3.609070
-2.926564	0.258650	3.613190
-3.760132	3.454305	3.608874
-3.805699	5.763656	3.620573
-4.095254	2.521949	3.605424
-4.109853	1.424265	3.597794
-4.324235	3.195882	3.617529
-4.353294	1.405059	3.602588
-4.340872	2.481544	3.615235
-1.656794	4.976327	3.627983
-1.832141	3.908049	3.635095
-2.004595	2.219459	3.614189
-2.517605	4.609191	3.631327
-2.900786	0.705286	3.625571
-3.135421	4.493645	3.611776
-3.472200	5.102000	3.616400
-3.833333	0.010000	3.607778
-3.859952	1.409614	3.621981
-3.995315	3.060961	3.633123
-4.036269	5.120896	3.611194
-4.072019	3.826442	3.625577
-4.229516	2.245484	3.609516
-0.842791	4.961744	3.619767
-0.875985	1.274672	3.631606
-1.173196	3.812165	3.627423
-1.288864	0.481761	3.631250
-1.361410	4.357436	3.630641
-1.442927	2.865000	3.625122
-1.461458	5.966667	3.633802
-2.212659	3.615635	3.638690
-2.258171	4.896286	3.629314
-2.621233	1.277808	3.634795
-2.682417	1.008083	3.631917
-2.752484	1.506369	3.641783
-2.743786	5.918786	3.631786
-3.070000	2.739500	3.617000
-3.138867	5.735123	3.629901
-3.296475	0.713852	3.629098
-4.009187	5.524228	3.624309
-4.079085	0.526078	3.637320
-4.238174	0.145434	3.634658
-0.873237	2.058417	3.635252
-1.230324	0.930356	3.647152
-1.416786	1.790982	3.637143
-1.460544	0.299456	3.638095
-1.534621	3.349798	3.650303
-1.734420	5.927800	3.655780
-2.236679	4.626900	3.648524
-2.291632	2.618289	3.647816
-2.901389	5.601389	3.630972
-3.010299	3.456866	3.634478
-3.020556	6.398889	3.624444
-3.389636	1.926727	3.629273
-3.765329	0.243699	3.645517
-3.866575	2.626740	3.639337
-4.319156	1.663556	3.645600
-4.326316	3.926491	3.631404
-1.063832	1.124673	3.648318
-1.129432	4.434545	3.640682
-2.408044	6.151240	3.660744
-2.463636	5.896883	3.641429
-2.540143	0.139810	3.652190
-2.558349	3.405000	3.653761
-2.830933	2.205333	3.641067
-2.850198	2.998218	3.647426
-2.927826	4.289437	3.663299
-2.952154	4.647846	3.646308
-4.058421	2.083289	3.643026
-1.114412	1.811471	3.646471
-1.126947	2.076632	3.652105
-1.128448	2.914138	3.655517
-1.155578	0.248741	3.666871
-1.381409	0.052610	3.675935
-1.427500	5.147440	3.660595
-1.781304	2.026739	3.657174
-1.823369	4.750494	3.678820
-2.090000	2.455522	3.647910
-2.375476	1.312143	3.647857
-2.410528	3.891901	3.674261
-2.649032	3.997097	3.650000
-2.825607	2.746262	3.660748
-2.854724	4.900394	3.656929
-3.423136	2.964746	3.654068
-3.497750	5.390875	3.652250
-0.879020	1.769020	3.653922
-0.900541	5.944472	3.678575
-0.902661	0.228548	3.668226
-1.137848	4.695949	3.672405
-1.174272	2.382722	3.682880
-1.813803	0.019108	3.682629
-2.232843	4.198235	3.662745
-2.256964	3.359107	3.656964
-2.313989	1.565319	3.667979
-2.646986	2.549658	3.671575
-2.663993	3.161282	3.677839
-2.714146	0.519024	3.657805
-2.774667	1.775500	3.661500
-2.937754	1.978941	3.676102
-2.955349	1.105659	3.672713
-2.995269	5.951935	3.681774
-3.048717	2.338586	3.683272
-3.096353	0.852941	3.667412
-3.440046	3.356250	3.675463
-3.450560	6.110960	3.663920
-3.837167	3.723348	3.670129
-4.033214	3.535268	3.665893
-4.046842	0.775000	3.661711
-1.808913	0.505261	3.682609
-1.838953	5.528014	3.688412
-2.227154	1.049112	3.693029
-2.248829	5.300360	3.679820
-2.517407	1.731414	3.690135
-2.660769	0.758803	3.683675
-2.666480	6.156786	3.684235
-3.116240	4.873872	3.694039
-3.209700	1.078300	3.698200
-3.265307	6.376316	3.686272
-3.438344	1.687748	3.680265
-3.675392	1.810506	3.688101
-3.673581	4.077973	3.683514
-4.294481	2.001749	3.681803
-4.275556	4.545313	3.691146
-0.907067	0.850933	3.681600
-0.905059	2.989882	3.688706
-1.354592	3.972602	3.693469
-1.592407	3.616420	3.687593
-1.991146	0.914167	3.695052
-2.038626	0.389121	3.688132
-2.195904	3.108883	3.698883
-2.365789	4.408421	3.686842
-2.761622	6.394865	3.677838
-3.102171	2.983808	3.697651
-3.579631	5.634538	3.699103
-3.661583	4.949778	3.698861
-3.985089	4.884464	3.699196
-4.259547	4.270121	3.705438
-0.895179	4.320893	3.695536
-1.192140	4.176347	3.711107
-1.824200	5.270600	3.693000
-1.903364	6.389813	3.694766
-1.956197	1.864648	3.694225
-1.979416	1.191948	3.709286
-2.188473	5.816158	3.706355
-2.462765	5.069625	3.703481
-2.508131	0.401495	3.697009
-3.235451	2.573819	3.705625
-3.243717	5.109867	3.703982
-3.338710	0.475968	3.691290
-3.643618	4.511709	3.698141
-3.988761	1.620000	3.707212
-4.056410	2.788051	3.703897
-1.149167	3.577667	3.707500
-1.192019	5.234327	3.714904
-1.855158	2.504421	3.702211
-1.898356	5.041507	3.708219
-2.622368	2.898053	3.715632
-2.785364	3.565099	3.715695
-2.903910	5.359799	3.724211
-2.914907	6.217920	3.717547
-3.034556	3.691000	3.710222
-3.189835	1.363992	3.715679
-3.269425	5.950402	3.713966
-3.317425	4.345389	3.714731
-3.591875	0.032500	3.706063
-3.651161	1.283125	3.705804
-3.672727	5.215455	3.705354
-3.958605	5.963688	3.723121
-4.002914	4.344686	3.712686
-4.279778	3.445778	3.704667
-0.919053	4.574852	3.715325
-0.939395	2.542326	3.718419
-1.774891	4.470876	3.719124
-1.892888	2.830036	3.725740
-2.131833	5.089167	3.711167
-2.196483	2.017585	3.737987
-2.444197	0.899343	3.724854
-2.440845	2.417042	3.714789
-2.461032	3.634603	3.716825
-2.788235	0.010000	3.707647
-2.859148	3.873409	3.724432
-3.373578	0.237890	3.721193
-3.576405	3.841373	3.719477
-3.748596	3.016082	3.719766
-3.988727	0.123000	3.724909
-4.249200	5.188100	3.726700
-0.923194	6.218168	3.728586
-0.917119	3.476949	3.722881
-0.933932	2.284274	3.724615
-1.181592	2.648726	3.733503
-1.517328	0.841422	3.738799
-1.789158	4.156842	3.735684
-2.465282	2.023944	3.729085
-2.725344	5.159924	3.739771
-3.140618	0.338146	3.729045
-3.267075	5.371429	3.729728
-3.289306	2.123750	3.721528
-3.666542	0.482712	3.748427
-3.685304	6.185217	3.726522
-3.810000	4.702361	3.723472
-3.930424	3.298545	3.732303
-3.942857	2.360974	3.733636
-4.265306	5.440408	3.725306
-4.283409	0.407045	3.713182
-1.243195	3.140237	3.742071
-1.278407	5.794973	3.751209
-1.462332	6.351989	3.763320
-1.753713	6.207178	3.744455
-1.794405	2.261548	3.736310
-1.937076	5.761345	3.738596
-2.525655	6.372768	3.745238
-2.991322	5.100460	3.739425
-3.276217	4.664957	3.744174
-3.407711	1.238554	3.736627
-3.486901	2.625704	3.741831
-3.567667	3.575400	3.752967
-4.218723	5.932553	3.726809
-1.337426	2.181864	3.762663
-1.545693	5.757154	3.756217
-1.756458	1.574792	3.737500
-1.801667	3.466778	3.752056
-1.948269	1.446346	3.742692
-2.015576	4.283680	3.756320
-2.057742	3.789194	3.748978
-2.363485	0.640644	3.756515
-2.690689	5.537356	3.760467
-2.944967	0.492026	3.752157
-3.281111	3.169630	3.746852
-3.298616	3.739322	3.757627
-3.702703	2.292568	3.741892
-3.794123	5.493070	3.743596
-3.927421	1.895833	3.754206
-3.985020	1.220040	3.756397
-4.196594	0.966006	3.757337
-4.220826	6.191364	3.752645
-4.261449	0.666957	3.741159
-4.259714	5.698857	3.734571
-0.985059	3.232485	3.778491
-1.272739	6.068185	3.769236
-1.285315	0.699505	3.768468
-1.499862	3.074050	3.771433
-1.565455	4.708446	3.771378
-1.575000	1.148276	3.748621
-1.610522	2.521522	3.770478
-1.637533	2.785267	3.756867
-2.047045	4.858864	3.758636
-2.076195	1.657345	3.758938
-2.085028	5.542486	3.766851
-2.093977	0.157614	3.760795
-2.184409	6.069685	3.748976
-3.193821	1.625472	3.768726
-3.223512	3.474762	3.770000
-3.417595	4.050541	3.770622
-3.438681	0.968462	3.755055
-3.629388	2.054694	3.751633
-3.675122	1.037561	3.749024
-0.947723	5.553762	3.763267
-1.261549	4.993662	3.766901
-1.536697	1.448394	3.774312
-1.546081	2.014542	3.773516
-2.135556	6.396667	3.763333
-2.924900	1.341833	3.779100
-3.017800	0.069546	3.777959
-3.646996	1.536567	3.778712
-3.668889	0.801944	3.756389
-4.031692	4.600154	3.777744
-4.236581	1.251453	3.764615
-4.238854	3.688854	3.762604
-0.982157	3.853922	3.785441
-1.004648	0.449805	3.786563
-1.190667	5.552933	3.775867
-1.287440	3.394480	3.781120
-1.608261	0.135280	3.782919
-2.600072	2.238406	3.776594
-2.716133	4.201067	3.777467
-2.740327	4.656797	3.776013
-2.848103	0.899770	3.781954
-3.194101	1.891573	3.778315
-3.487753	6.338590	3.779339
-3.921791	6.226418	3.783358
-4.215491	4.793757	3.779249
-4.239844	2.647813	3.771406
-0.954167	4.811875	3.778750
-1.255373	1.677015	3.795224
-1.266757	1.927838	3.787297
-1.352030	3.718687	3.803851
-1.536410	4.426325	3.795983
-1.574925	3.853134	3.775224
-1.849075	0.247543	3.805377
-1.943402	3.137191	3.806160
-2.075802	2.661975	3.781481
-2.428472	4.796806	3.780278
-2.541972	5.327606	3.777324
-2.762424	0.326212	3.778788
-3.172292	4.153125	3.782917
-3.558060	4.278881	3.800709
-3.951446	0.360602	3.785542
-0.964462	4.112615	3.794000
-0.980444	1.426000	3.789556
-0.979500	2.779300	3.793900
-0.979587	5.060000	3.803140
-1.788588	1.032316	3.809040
-2.287656	1.774531	3.796406
-2.583407	4.404505	3.791209
-2.795714	2.392101	3.799916
-2.943462	1.608590	3.793205
-2.984982	2.597365	3.808845
-3.065603	3.278621	3.799397
-3.108304	3.914620	3.805322
-3.352420	5.722038	3.799936
-3.471351	0.662819	3.807876
-3.543376	5.903939	3.808824
-3.877725	5.102036	3.797305
-3.902031	0.615430	3.810039
-4.029571	5.325643	3.810643
-4.189388	2.389429	3.814327
-1.123409	0.026688	3.818669
-1.575769	1.709231	3.796731
-1.586066	5.495972	3.810664
-1.626818	0.375682	3.797045
-2.287799	0.374654	3.815409
-2.411731	5.713269	3.800769
-2.655126	4.907787	3.823165
-2.852521	5.754062	3.821541
-3.417876	4.945693	3.821298
-3.538654	3.122404	3.805577
-3.560331	4.727769	3.808926
-3.666056	3.334648	3.809437
-4.029684	4.106013	3.808101
-4.197668	1.507720	3.812850
-0.996267	1.932800	3.810800
-1.219149	1.431277	3.809574
-1.293288	4.509452	3.814795
-1.340098	1.202580	3.833317
-1.416392	2.685979	3.809485
-1.554643	4.161964	3.817321
-1.758516	1.305875	3.830326
-1.863944	0.727702	3.828292
-1.960325	2.102927	3.816423
-2.038682	5.289591	3.828773
-2.191282	0.823718	3.817051
-2.621394	3.811010	3.819615
-2.813229	3.329561	3.832853
-3.576476	2.853429	3.828143
-3.714331	2.533622	3.814173
-3.840172	3.935776	3.810690
-3.891606	0.894234	3.821168
-0.989180	5.313115	3.823279
-1.013289	1.667105	3.828026
-1.037898	0.702102	3.836433
-1.305089	2.907054	3.825536
-1.483580	4.952716	3.821111
-1.568846	2.273077	3.813462
-1.600612	5.199592	3.819388
-1.808010	3.725000	3.841505
-2.001864	4.626780	3.826610
-2.226575	4.003119	3.833211
-2.265714	2.813354	3.827391
-2.414140	3.285478	3.830701
-2.484146	4.101341	3.835823
-2.480196	2.657647	3.842745
-2.612025	5.851139	3.826076
-2.653333	1.897895	3.824912
-3.102788	4.388077	3.829135
-3.143949	5.568587	3.835072
-3.451230	5.218095	3.835357
-3.479667	2.236167	3.816500
-1.206214	6.306214	3.841714
-1.355476	5.377143	3.840873
-1.694931	3.245590	3.844271
-1.710000	6.400000	3.820000
-1.969778	4.014222	3.833333
-2.120260	0.577857	3.848409
-2.115833	2.307222	3.847222
-2.321618	5.472228	3.854271
-2.332692	0.100994	3.850577
-2.424881	3.017698	3.843333
-3.190769	2.790385	3.834103
-3.589134	0.245118	3.842362
-3.834236	2.787896	3.853084
-3.847627	3.524350	3.840000
-4.157373	2.994235	3.842196
-4.163709	3.256490	3.841656
-4.177059	0.010000	3.836176
-4.169239	1.831576	3.842989
-4.196250	3.926528	3.826944
-1.024028	5.777109	3.847630
-1.066828	0.964793	3.858069
-1.317531	4.765188	3.860837
-1.410784	0.490833	3.857598
-2.036099	3.546233	3.854798
-2.173925	1.444393	3.843084
-2.185427	4.457607	3.861068
-2.608333	1.107886	3.859756
-2.930259	4.090570	3.849378
-3.003571	0.715238	3.845357
-3.075562	2.114894	3.862766
-3.094457	6.354286	3.849314
-3.303696	6.163519	3.862557
-3.872283	2.141096	3.851370
-3.902742	5.688871	3.837903
-4.017373	2.579407	3.841949
-0.996667	6.400000	3.833333
-1.377303	2.433717	3.867500
-1.607308	6.038615	3.858308
-1.748700	1.876100	3.849500
-2.286061	3.748485	3.846364
-2.297710	3.503588	3.860916
-2.362897	2.215888	3.866308
-2.566667	0.010370	3.850000
-2.659042	1.372682	3.876054
-2.703492	1.647354	3.867725
-2.800518	6.021224	3.870918
-2.799713	2.099936	3.874236
-3.266733	0.804158	3.853564
-3.444808	4.509808	3.856154
-4.011448	3.751136	3.877706
-4.159160	0.245378	3.858824
-1.392857	0.235714	3.866633
-1.630379	0.620530	3.863939
-2.137879	3.307652	3.865833
-2.277927	4.967683	3.862805
-2.767586	0.630251	3.886708
-2.916837	3.086122	3.865000
-3.121379	5.822069	3.860517
-3.238194	2.315139	3.858333
-1.041948	6.053831	3.877857
-1.072161	3.000879	3.886667
-1.071473	4.387649	3.889467
-1.089537	2.161907	3.891526
-1.725268	4.902282	3.888254
-1.741048	2.981210	3.882097
-2.041583	6.221636	3.893298
-2.311548	6.239409	3.899572
-2.343905	5.936381	3.876476
-2.356045	5.205522	3.885149
-2.416818	4.559318	3.871364
-2.457843	1.560667	3.887294
-2.880462	1.830923	3.868308
-3.182508	0.538482	3.889571
-3.414054	0.011351	3.875135
-3.442055	1.854466	3.882648
-3.870278	1.447500	3.865278
-4.133096	2.104184	3.880544
-4.126016	5.020398	3.884382
-1.062308	1.223590	3.880256
-1.332128	0.940426	3.885957
-1.354314	4.280131	3.890588
-1.484259	3.502889	3.902519
-2.215044	4.725575	3.887699
-2.410140	1.281121	3.897383
-2.554127	0.247922	3.900000
-2.539763	6.096746	3.905030
-2.728371	6.302664	3.905145
-2.742199	2.634894	3.886738
-2.950735	4.568382	3.878088
-2.982245	3.511633	3.875918
-3.413097	1.542258	3.890194
-3.821959	1.691031	3.884021
-3.916574	3.094815	3.885463
-4.118641	5.570924	3.889511
-4.135045	0.496396	3.887838
-1.074895	3.447622	3.902238
-1.207647	3.928941	3.897529
-1.760492	5.662077	3.900492
-1.817834	5.914331	3.899299
-2.164541	1.194031	3.909439
-2.281833	2.496000	3.899750
-2.872903	2.840968	3.888226
-2.889346	4.821308	3.899346
-3.058333	6.082613	3.907613
-3.070530	0.945303	3.905530
-3.354669	2.974587	3.899504
-3.417505	5.487027	3.916881
-3.767880	6.019954	3.902028
-3.801765	4.163137	3.887451
-3.819785	4.872366	3.894194
-4.128087	3.507652	3.897913
-1.724321	4.325309	3.907037
-1.803188	5.389710	3.906449
-2.073256	1.860930	3.912558
-2.592700	3.440900	3.906500
-2.782827	0.120169	3.913924
-2.861646	1.128608	3.902785
-2.970928	0.299283	3.917342
-3.104324	1.198649	3.904324
-3.231019	0.160370	3.909861
-3.723417	3.733583	3.905250
-3.757400	4.412700	3.902200
-3.778661	1.199643	3.905625
-4.102824	0.762137	3.912519
-4.092645	5.827025	3.908512
-1.085419	4.653935	3.917097
-1.112279	2.483628	3.927349
-1.140637	0.264111	3.929151
-1.384311	5.622800	3.918356
-1.381343	5.144179	3.916716
-1.735655	3.981138	3.922448
-1.774819	4.632691	3.927108
-1.808542	5.141042	3.908333
-1.885698	1.671396	3.933077
-2.355000	1.030676	3.917297
-3.051471	5.272206	3.913529
-3.431364	2.451061	3.910152
-3.826696	0.189554	3.912143
-1.120667	3.693167	3.917500
-1.410000	0.013659	3.930000
-1.447867	3.982000	3.927200
-1.718065	2.136129	3.920000
-1.875156	0.482595	3.941661
-1.879059	2.657412	3.920941
-2.030288	5.040385	3.924423
-2.393962	4.324528	3.919623
-2.520315	0.521374	3.942027
-2.634545	0.853831	3.927338
-2.745048	5.330571	3.924571
-2.862208	4.337083	3.932917
-3.394216	0.385226	3.938711
-3.462143	3.337619	3.924762
-3.793968	5.326825	3.928175
-1.861351	2.411892	3.927297
-1.970320	0.041715	3.952384
-2.073031	5.947478	3.952876
-2.192685	5.701644	3.947616
-2.620537	3.176157	3.946777
-2.906632	5.521969	3.941451
-2.963333	3.757634	3.933441
-3.534716	1.176023	3.938295
-3.548932	6.144369	3.944612
-3.664707	5.098000	3.951488
-3.702292	1.907000	3.944375
-4.066696	6.085507	3.940088
-1.121394	4.909212	3.953333
-1.417277	3.245982	3.959063
-1.445176	1.852196	3.956549
-1.969375	0.924375	3.943958
-2.076455	0.308973	3.971149
-2.418036	1.910357	3.941250
-2.705797	4.015217	3.939420
-3.003043	2.366242	3.956025
-3.108365	1.459519	3.943942
-3.131439	4.819928	3.951799
-3.307322	1.047541	3.953224
-3.313723	6.391702	3.952128
-3.389401	3.580539	3.947784
-3.433043	3.861159	3.943333
-3.741584	6.339306	3.956377
-1.431587	1.586508	3.950317
-1.421378	6.167774	3.968127
-1.508778	2.872333	3.961556
-1.682638	0.857242	3.978633
-1.946168	4.425911	3.977430
-2.519096	2.406497	3.955593
-2.591886	5.132982	3.959868
-2.752143	3.641224	3.951735
-2.857952	5.097128	3.966862
-3.142857	3.101048	3.961905
-3.325130	1.312597	3.961104
-3.327596	5.915385	3.957596
-3.336505	2.087849	3.962527
-3.401478	2.722435	3.962174
-3.713889	5.775926	3.957222
-3.859000	4.633364	3.959364
-4.059259	4.415231	3.960509
-4.061579	6.356118	3.955526
-1.138643	5.172362	3.970905
-1.146667	1.819677	3.970645
-1.168052	2.745233	3.976919
-1.179963	0.531355	3.974139
-1.438571	0.742294	3.976494
-1.897360	3.363360	3.974960
-1.918000	6.400000	3.944000
-1.969126	2.896764	3.974595
-2.166406	4.217266	3.971875
-2.394024	0.788293	3.963537
-2.478011	3.655580	3.970994
-2.580781	5.653906	3.963906
-2.612491	2.854684	3.972379
-3.203557	2.552420	3.975656
-3.370667	4.737333	3.975778
-4.075000	1.328276	3.963621
-1.229889	5.923667	3.993111
-1.460955	4.584777	3.986115
-1.531410	1.080865	3.989647
-1.679803	1.496908	3.984211
-1.815604	6.149780	3.975824
-2.690690	4.517816	3.977816
-3.072870	1.708148	3.978426
-3.177869	4.567951	3.982787
-3.320537	4.320289	3.976818
-3.480478	0.853072	3.993242
-3.654141	2.157071	3.976667
-3.668633	5.533381	3.978273
-3.708828	0.969609	3.982422
-3.795844	0.445325	3.971169
-4.034076	1.596902	3.988696
-4.060000	1.015278	3.973148
-4.050396	4.790990	3.975941
-1.149490	4.159796	3.985510
-1.163176	3.225203	3.989932
-1.158266	5.433988	3.992775
-1.522937	5.847619	3.991825
-1.923130	1.163652	3.984000
-1.936447	1.413553	3.983684
-1.953333	4.815167	3.983750
-2.555789	4.727594	3.984135
-2.863881	1.485224	3.993582
-3.226452	3.338548	3.975968
-3.272617	4.058505	3.990000
-3.662043	3.972787	4.005809
-3.737778	0.721667	3.971944
-1.480651	2.152055	4.008664
-1.493559	1.335254	3.994576
-1.528309	3.751654	4.008640
-2.003121	3.830709	3.998936
-2.171720	2.095161	3.994839
-2.618046	4.255977	3.996437
-3.209722	3.787639	3.997639
-3.642574	3.508713	3.993366
-3.668765	1.392469	3.997284
-4.014143	2.302929	3.996929
-1.174043	1.569787	4.000851
-1.195385	0.798077	4.011058
-1.552593	2.613992	4.016626
-1.889204	4.162301	4.014248
-2.025264	5.489421	4.020378
-2.149137	1.635268	4.020655
-2.225543	2.970870	4.016957
-2.519130	5.395489	4.016033
-2.749442	0.396000	4.017907
-3.272000	5.287905	4.009048
-3.656526	2.677371	4.018638
-3.971456	1.844175	4.006796
-1.562379	5.342103	4.022172
-2.137395	2.701261	4.015462
-2.422847	3.910569	4.025907
-3.077714	4.229486	4.025600
-3.133553	5.067237	4.014079
-3.624582	0.064558	4.035895
-3.644667	2.401778	4.018556
-3.973489	3.308006	4.026822
-4.021324	0.068971	4.008676
-1.172708	5.679583	4.024583
-1.232868	1.332574	4.037721
-1.635098	6.322451	4.046803
-1.883923	1.985414	4.030608
-3.054423	2.749038	4.020192
-3.261343	5.689627	4.034925
-3.596150	4.847914	4.033155
-3.607051	1.640000	4.034423
-3.620196	4.580833	4.030931
-3.972107	5.170868	4.033802
-3.998970	2.903273	4.028364
-1.211837	1.084490	4.030408
-1.485652	4.833370	4.034130
-1.578532	5.071147	4.051009
-1.629899	0.437475	4.044007
-1.961341	2.226951	4.035366
-2.115556	0.755556	4.032593
-2.622308	1.999038	4.033654
-3.547455	0.576818	4.051273
-3.631944	2.985000	4.044583
-3.663305	3.251674	4.052833
-4.003902	0.329512	4.028537
-1.184935	6.166623	4.036364
-1.258153	2.286908	4.058835
-1.557931	0.159770	4.038046
-1.956522	5.741739	4.044348
-2.046183	3.149167	4.060161
-2.071088	2.455026	4.058549
-2.179605	3.656974	4.046645
-2.284118	0.571000	4.056059
-2.301500	3.211583	4.045667
-2.519739	5.884870	4.047130
-2.977036	0.528458	4.058696
-2.998252	3.286699	4.042233
-3.008382	1.941156	4.055723
-3.042654	3.964691	4.048395
-3.151750	3.553000	4.043250
-3.241519	1.869494	4.046203
-3.424214	5.075000	4.052643
-3.983438	4.137500	4.047031
-3.983469	5.426735	4.044286
-1.235093	4.492500	4.061944
-1.251232	2.021667	4.059420
-1.268105	2.985333	4.072070
-1.540000	4.272745	4.045882
-1.596813	3.092637	4.050659
-1.639075	3.367746	4.068208
-1.669583	1.740556	4.048889
-2.351440	0.314647	4.068152
-2.375349	2.776395	4.059651
-2.573182	1.760455	4.048864
-2.895506	0.788892	4.071139
-3.012622	5.724085	4.059085
-3.150498	0.733817	4.070498
-3.581289	4.230028	4.064818
-3.924339	2.647845	4.075776
-3.974464	0.582679	4.055357
-1.274863	3.451096	4.075479
-1.671325	2.328400	4.080675
-1.736788	2.805907	4.064767
-1.755170	3.593333	4.065850
-1.800112	0.240615	4.068492
-1.968904	5.233151	4.066849
-2.174454	4.886639	4.075042
-2.199159	0.096726	4.077345
-2.199727	5.146909	4.069727
-2.426809	4.941712	4.070934
-2.772703	2.444919	4.077676
-3.155814	6.257519	4.067442
-3.175948	0.351046	4.081307
-3.954922	3.573047	4.065781
-1.293926	6.381846	4.088926
-2.088242	4.624424	4.079697
-2.116387	6.381849	4.077227
-2.166684	1.003211	4.079895
-2.457485	0.062695	4.086437
-2.758406	5.787943	4.094524
-2.820913	1.721142	4.086393
-2.922311	6.366642	4.086764
-2.990517	0.106034	4.072586
-3.123953	5.477945	4.086996
-3.546950	5.312293	4.088392
-3.546667	5.908404	4.080939
-3.612683	0.324146	4.066829
-3.915388	3.894828	4.085862
-3.912196	5.686627	4.087843
-1.306749	2.550000	4.098848
-2.157586	1.378793	4.081034
-2.576116	2.620083	4.086281
-2.694523	4.920492	4.096769
-2.748185	1.009963	4.101593
-2.957197	2.980071	4.099834
-3.270641	1.605385	4.088077
-3.371342	3.154204	4.127942
-3.938875	2.080375	4.086625
-1.283467	3.723467	4.095467
-1.605691	6.049675	4.101301
-1.664854	4.475437	4.093495
-1.698364	1.275636	4.093273
-2.172872	6.140745	4.094362
-2.191875	4.000313	4.093281
-2.269903	5.390388	4.103350
-2.326667	2.314063	4.094271
-2.358774	3.461806	4.101548
-2.376119	4.158209	4.086866
-2.408837	2.085116	4.100349
-2.456364	3.016606	4.103394
-2.781635	1.267788	4.095000
-3.157874	2.207874	4.097087
-3.564692	3.725000	4.103231
-3.870444	6.145444	4.114290
-3.926517	0.824494	4.094157
-1.311690	5.000352	4.114542
-1.344164	0.284947	4.115089
-1.553516	5.631641	4.111563
-1.650806	1.989032	4.095323
-1.828526	5.008237	4.119359
-2.109486	3.411200	4.112400
-2.281979	5.884599	4.111283
-2.342673	4.662508	4.116898
-2.417857	1.427857	4.112083
-2.489187	0.963902	4.112033
-2.623611	2.236389	4.100278
-2.652621	3.795931	4.106000
-2.697075	6.055975	4.120849
-2.813571	2.738661	4.119286
-2.820292	4.686642	4.106058
-2.853112	4.129751	4.111411
-2.906494	2.174113	4.113247
-2.925789	3.559211	4.100263
-2.949097	5.969375	4.103611
-2.995736	1.086822	4.104341
-3.213063	2.912523	4.112252
-3.386466	0.165414	4.109323
-3.519681	1.995745	4.108617
-3.894000	1.411590	4.112615
-3.918298	1.160426	4.103830
-1.280877	4.728596	4.108772
-1.299744	3.987179	4.116538
-1.325789	5.282782	4.130902
-1.732331	5.810339	4.129280
-1.773263	0.648178	4.122246
-1.780719	5.527964	4.118263
-2.229483	4.409138	4.111034
-2.310274	1.201918	4.117397
-2.387547	5.631863	4.129741
-2.411894	6.112727	4.121288
-2.492475	4.436568	4.128515
-2.645389	0.685171	4.128131
-2.653636	1.526783	4.126364
-2.720359	5.517545	4.122395
-2.769535	3.303372	4.116860
-2.928490	5.306615	4.119740
-2.979943	4.489716	4.120398
-3.363703	6.110167	4.131109
-1.586429	4.037857	4.126071
-1.704898	4.776871	4.132313
-2.252638	1.891656	4.125767
-2.357013	6.369497	4.132013
-2.960627	4.914269	4.138478
-3.461948	1.449351	4.137143
-3.486912	5.626324	4.133088
-3.510476	6.327429	4.120095
-3.855654	3.093145	4.137915
-3.873609	4.349112	4.126568
-1.322388	1.714478	4.127164
-1.321087	4.236739	4.136413
-1.365153	0.928282	4.138650
-1.732527	3.841648	4.138242
-1.770343	1.046514	4.147943
-1.804444	3.190667	4.140444
-2.590000	6.288678	4.135289
-2.630282	3.521567	4.153605
-2.681739	0.183370	4.134130
-2.705341	3.027045	4.134318
-3.121439	1.300758	4.140909
-3.422566	2.245044	4.141239
-3.456080	2.552049	4.152606
-3.833010	4.849465	4.149465
-3.839389	1.670229	4.150687
-1.327879	5.537879	4.147273
-1.410866	0.548656	4.161936
-1.765921	2.563026	4.143947
-2.287037	2.557037	4.138889
-2.374528	1.675283	4.138113
-2.434333	5.194833	4.154389
-2.550968	1.215161	4.144194
-2.597183	4.064225	4.142394
-3.472273	3.427348	4.153182
-1.809070	0.018023	4.166628
-1.888000	6.331497	4.180395
-2.685750	5.269250	4.160125
-3.442746	3.962977	4.174827
-3.546120	1.048770	4.167319
-3.786078	5.896667	4.151961
-1.360678	5.784153	4.167712
-1.381646	0.031013	4.161013
-1.418356	1.484612	4.180776
-2.759804	4.372255	4.162647
-2.896541	3.799248	4.169323
-3.003520	2.558715	4.174413
-3.429726	1.767260	4.161370
-3.448776	2.852653	4.164082
-3.835313	0.177604	4.161771
-1.386883	1.198182	4.170779
-1.399200	2.778933	4.176800
-1.905475	1.770380	4.187152
-1.930815	0.849741	4.185630
-2.516944	3.261389	4.187361
-3.037444	1.546457	4.178655
-3.300665	0.925831	4.190818
-3.448285	4.455793	4.185696
-3.832000	2.428909	4.176545
-1.378909	6.042636	4.184636
-1.757206	5.276520	4.190882
-1.863497	4.586993	4.192587
-2.563196	0.421753	4.182990
-3.336488	3.644080	4.195318
-3.760373	5.163593	4.200814
-3.780947	5.434579	4.190421
-3.781049	3.434012	4.195988
-3.796154	2.841692	4.184923
-1.833788	6.043652	4.204573
-1.902731	0.435419	4.201145
-1.913409	1.294091	4.200568
-2.062097	4.175645	4.186774
-2.136757	5.648649	4.193243
-2.364719	3.714607	4.197640
-2.947861	0.314975	4.205323
-3.351898	1.217810	4.195839
-3.397627	0.397966	4.191525
-3.398163	4.867959	4.186327
-3.761321	1.922000	4.205321
-3.778943	0.656179	4.203496
-3.792404	3.701827	4.197692
-3.793765	4.120353	4.197647
-1.442268	4.452862	4.212528
-1.447722	1.905886	4.210506
-1.463909	3.590453	4.220041
-1.564433	0.772296	4.227995
-1.937399	3.959641	4.212960
-1.993729	1.524068	4.198305
-2.002563	0.183266	4.219246
-2.142703	0.384865	4.204324
-2.361239	0.770642	4.212339
-2.799455	1.952228	4.209554
-3.220625	2.420188	4.211250
-3.224818	2.679909	4.206364
-3.265556	4.650427	4.218860
-3.308824	5.862353	4.198627
-3.357396	0.658958	4.206875
-3.370698	4.208372	4.204884
-3.752719	2.192120	4.214424
-1.446917	2.368417	4.215333
-1.456293	3.267854	4.219561
-1.793671	4.280058	4.227312
-1.800128	2.134231	4.229231
-1.878263	2.960297	4.224746
-1.890704	2.371972	4.215775
-1.945145	3.681503	4.212428
-2.050746	5.894030	4.226806
-3.201277	4.390851	4.207872
-3.219358	3.393850	4.229599
-3.304082	2.043469	4.206735
-3.731794	6.356500	4.223941
-3.781351	0.960811	4.213243
-1.746508	1.482937	4.238333
-1.884167	3.422583	4.227333
-1.981121	4.817375	4.244484
-2.039922	2.005273	4.246545
-2.109260	2.827577	4.243903
-2.593720	4.669795	4.235768
-2.600000	2.826092	4.227931
-3.191879	3.855030	4.235697
-3.189310	4.970345	4.225345
-3.341474	5.446421	4.220105
-3.584889	0.795778	4.222667
-3.778846	0.403462	4.214231
-1.457317	3.011463	4.231707
-1.461753	3.854639	4.236701
-3.153958	4.111042	4.240313
-3.302932	5.191152	4.243508
-1.983881	2.596866	4.241194
-2.039935	5.082810	4.252680
-2.124087	2.272198	4.255728
-2.138085	0.630372	4.254787
-2.146279	3.816977	4.246163
-3.092638	3.155337	4.255215
-3.176400	0.153000	4.256500
-3.644798	6.085253	4.259495
-3.705741	5.684136	4.248889
-3.727759	1.208448	4.239310
-1.473950	6.306807	4.252521
-1.523095	4.934000	4.266429
-2.032015	5.383460	4.270228
-2.038216	4.416865	4.266541
-2.220492	3.070758	4.264470
-3.156563	5.672500	4.256172
-3.287015	6.364259	4.268601
-3.688889	1.471242	4.260719
-1.524311	5.436347	4.270539
-1.547198	2.137857	4.270440
-1.549250	0.337500	4.265333
-1.547455	1.041909	4.270000
-1.570251	1.677538	4.273668
-1.595647	0.079483	4.279009
-1.905055	5.683956	4.277418
-2.232347	1.520102	4.276939
-2.486176	5.425588	4.275074
-2.592000	2.445444	4.270500
-2.941571	5.518846	4.278910
-2.951255	3.379176	4.278980
-3.216667	1.756092	4.268621
-3.626197	4.687508	4.284164
-3.683448	3.913966	4.266897
-3.688750	4.433611	4.265417
-3.702593	2.637593	4.265185
-1.508478	5.184348	4.273696
-1.549188	2.591015	4.279239
-3.046726	6.243673	4.288540
-3.055605	0.862803	4.282994
-3.078394	3.624599	4.290255
-1.532941	4.678971	4.281912
-1.548020	4.227228	4.287525
-1.554086	5.898710	4.290645
-1.565714	1.314643	4.287619
-2.265227	3.319773	4.280909
-2.285609	4.986346	4.300128
-2.465328	5.937810	4.282993
-2.937143	5.795866	4.302006
-2.986862	4.295372	4.306676
-3.032062	5.143093	4.282371
-3.582606	0.240394	4.305273
-3.606727	4.963200	4.299345
-3.676000	0.010000	4.280667
-1.978824	1.076824	4.293294
-2.119353	6.258557	4.304677
-2.152924	1.254503	4.302865
-2.246392	6.040619	4.299072
-2.439262	3.935403	4.310940
-2.480400	2.214467	4.301067
-2.779673	5.066667	4.296993
-2.923910	1.298269	4.316597
-2.962195	1.766765	4.316968
-2.997188	0.621875	4.300313
-3.039072	2.827629	4.298557
-3.080297	2.000396	4.294059
-3.128544	5.992492	4.311715
-3.251351	1.465946	4.293694
-3.609955	3.276532	4.304730
-3.667660	3.011702	4.286809
-1.650462	2.837370	4.320636
-2.039000	3.246429	4.305286
-2.140220	1.762802	4.315165
-2.160449	0.895000	4.313596
-2.188302	3.567170	4.318459
-2.180685	4.617808	4.307397
-2.240736	0.192393	4.312577
-2.369253	2.865000	4.314770
-2.479015	4.209562	4.312956
-2.501304	0.212372	4.314032
-2.563879	1.968318	4.315935
-2.686416	1.743410	4.314393
-2.764310	0.509914	4.317586
-2.801656	6.326225	4.312715
-2.928379	0.066421	4.320926
-3.030959	4.724110	4.296986
-3.041673	2.266809	4.319377
-3.147817	1.112792	4.310558
-3.578505	0.533737	4.317153
-3.631702	1.714787	4.301277
-3.624300	2.411200	4.304300
-1.644769	3.426690	4.325587
-2.237667	4.286000	4.310667
-2.249333	5.252417	4.319583
-2.368828	1.049375	4.327930
-2.495314	1.561882	4.329446
-2.562570	4.922793	4.324022
-2.629231	0.010000	4.308462
-2.658502	1.353913	4.319855
-2.741253	2.191798	4.328392
-2.791610	0.785381	4.324831
-2.818996	3.611528	4.323668
-2.840078	3.136039	4.326824
-2.868145	6.060806	4.316290
-3.181016	0.456203	4.322246
-1.658316	3.122105	4.336316
-1.665974	0.552403	4.333442
-1.688981	1.913719	4.340413
-2.303750	2.034259	4.334815
-2.332584	2.411461	4.327753
-2.349630	0.412963	4.314444
-2.702955	3.929167	4.326667
-2.805439	4.805088	4.331930
-2.830843	1.538795	4.324337
-2.855169	4.551356	4.332203
-2.877704	1.035111	4.329037
-2.958047	3.990118	4.332189
-3.137547	5.362642	4.324717
-3.521488	5.847741	4.340854
-3.569650	5.486434	4.331049
-3.604706	3.559412	4.319412
-3.596800	4.215467	4.322933
-1.658459	5.650824	4.343262
-1.638000	6.137226	4.341290
-1.672864	4.486667	4.348967
-2.203143	4.038000	4.327429
-2.253889	5.498889	4.334259
-2.449405	3.471071	4.343571
-2.502727	0.595657	4.361145
-2.535307	5.690000	4.346842
-2.567725	3.052515	4.340299
-2.576524	3.703777	4.347253
-2.697931	5.885172	4.329310
-2.741420	4.193977	4.341761
-2.851932	2.431364	4.335909
-3.537655	5.226966	4.345241
-1.646709	3.728101	4.341392
-2.264980	5.790648	4.358178
-2.377500	0.010000	4.327500
-2.399076	1.312554	4.356304
-2.389434	1.789434	4.345472
-2.606494	6.134945	4.357860
-2.633235	1.086765	4.335000
-2.693206	3.364667	4.363714
-2.726962	2.642405	4.345443
-3.552063	1.941429	4.345397
-1.662475	3.979208	4.352277
-1.695789	2.329035	4.357281
-1.721842	5.092829	4.371382
-2.372953	6.246062	4.360259
-2.382881	4.476017	4.363898
-2.627625	4.442375	4.354625
-2.755682	0.254545	4.353409
-2.803288	2.876301	4.356027
-2.832128	5.303830	4.352979
-3.240448	2.963632	4.358969
-3.490905	3.782387	4.368107
-3.529189	1.289595	4.356486
-3.522604	6.357988	4.357337
-3.542258	2.186452	4.352581
-1.679832	6.383613	4.364454
-1.744808	0.913333	4.367821
-1.762068	1.183346	4.375677
-2.381563	4.749792	4.361875
-2.490851	2.654468	4.362340
-2.545410	0.863934	4.369262
-2.572941	6.385765	4.361059
-2.572308	5.194835	4.373242
-3.506667	2.733548	4.364301
-1.740659	4.811923	4.385714
-2.709459	5.513378	4.369730
-1.766395	0.330349	4.383256
-1.785546	2.573843	4.393100
-1.869191	0.694220	4.391156
-2.250000	2.643855	4.384880
-3.302930	2.251245	4.400330
-3.414346	1.067991	4.399393
-3.413360	6.092400	4.399040
-3.476889	1.529444	4.382333
-1.780150	5.878100	4.403150
-1.839664	0.086765	4.402437
-3.366831	5.626541	4.411715
-3.387686	2.509628	4.411529
-3.418191	0.805106	4.401702
-3.461188	3.092772	4.391287
-1.753871	5.407903	4.404516
-1.790130	1.676364	4.399870
-3.372039	0.088092	4.412895
-3.422033	3.420440	4.405659
-1.832656	3.578984	4.420078
-1.869385	4.101423	4.429231
-3.417193	4.560000	4.413158
-3.422449	4.800612	4.410612
-3.420000	4.073171	4.410976
-1.835120	3.283600	4.426720
-1.854615	3.835804	4.430490
-2.985375	2.620625	4.420500
-3.402115	4.316154	4.420000
-3.396567	5.046269	4.422687
-3.411875	1.763333	4.415417
-1.888414	2.816414	4.439379
-1.921985	6.370773	4.454072
-1.942976	1.352390	4.447024
-2.421905	3.221429	4.430000
-3.267258	3.224839	4.427903
-3.381739	0.334348	4.422609
-1.874386	4.610175	4.446053
-1.895455	6.102216	4.451591
-1.929106	1.872846	4.450244
-2.031634	0.500113	4.465380
-3.285890	3.633252	4.453804
-3.339167	1.993000	4.443167
-3.336800	5.342000	4.445400
-3.357778	0.573056	4.435556
-1.881967	4.357705	4.450984
-1.927667	5.234667	4.459778
-1.941207	4.969310	4.462299
-1.943193	2.361849	4.458739
-1.946067	3.064719	4.449888
-2.281107	3.778730	4.464139
-3.202211	4.889158	4.469579
-3.222500	2.714812	4.468925
-3.276398	1.279814	4.458882
-1.911379	2.111379	4.455517
-1.956587	5.523571	4.473571
-2.021105	5.799830	4.480397
-2.016705	1.605549	4.475780
-2.955467	4.987378	4.470178
-3.297115	5.873654	4.459615
-1.968889	0.906481	4.470556
-2.041504	0.232481	4.475564
-2.030139	3.425486	4.484167
-3.167750	4.372083	4.478500
-3.182201	5.152327	4.488239
-3.202281	6.209298	4.483333
-3.211528	0.930833	4.478750
-3.288889	3.885000	4.465278
-2.023051	2.607712	4.486102
-2.085117	4.752368	4.498889
-2.162039	5.105137	4.514118
-2.188956	0.027071	4.501650
-3.137778	2.434192	4.498485
-3.164298	0.261818	4.490083
-3.178559	4.106695	4.490508
-3.193238	4.630286	4.487714
-3.222206	1.627059	4.479853
-2.112585	4.194153	4.506356
-2.388241	6.031667	4.507454
-3.110000	0.017125	4.501000
-3.133874	1.860270	4.500450
-3.146815	3.428000	4.500444
-3.150125	0.681375	4.496250
-2.043220	3.683559	4.499322
-2.078488	3.928256	4.506163
-2.080877	1.126491	4.502105
-2.143235	2.845252	4.511807
-2.142185	0.737059	4.510000
-2.162036	3.174253	4.515701
-2.195234	1.414299	4.517196
-2.420727	5.516000	4.502909
-3.092024	5.753988	4.513988
-2.083636	4.481091	4.509818
-2.129890	6.037403	4.519945
-2.136481	2.158333	4.517222
-2.147413	5.365035	4.521608
-2.171013	1.912278	4.520253
-2.517957	0.374946	4.532177
-2.611892	2.870579	4.528996
-2.639500	2.342538	4.529577
-2.965216	6.326264	4.529954
-3.017746	0.466879	4.518786
-3.054196	3.141538	4.521748
-3.087407	1.429012	4.517407
-3.125645	2.122581	4.510000
-2.182571	2.419524	4.527810
-2.261818	1.677219	4.531604
-2.284662	3.413818	4.537534
-2.299140	0.529892	4.534140
-2.368175	3.002000	4.546975
-2.898807	3.353263	4.541649
-2.928312	4.164262	4.540295
-2.974531	3.611563	4.533281
-2.984802	5.996980	4.534109
-3.035253	1.178687	4.525758
-3.055048	3.859429	4.526857
-3.099677	5.502903	4.517742
-2.201294	6.287824	4.538647
-2.201583	5.622734	4.538705
-2.387429	2.229968	4.546286
-2.384335	5.253536	4.550875
-2.450701	0.081274	4.545796
-2.657893	2.056588	4.556825
-2.673548	1.546828	4.540538
-2.763293	5.149102	4.553802
-2.802667	3.819304	4.549739
-2.887919	2.252483	4.546309
-2.906238	0.700693	4.542772
-2.928047	1.623395	4.540744
-2.914365	1.994444	4.544683
-2.962179	4.728974	4.541859
-3.044590	2.888197	4.530984
-2.280435	0.271957	4.538913
-2.294800	0.918600	4.542200
-2.301515	4.893788	4.551667
-2.312439	1.174878	4.547073
-2.309103	4.029655	4.550828
-2.726194	4.601754	4.558694
-2.725085	4.331017	4.563941
-2.774916	1.125028	4.553911
-2.844211	5.784737	4.541228
-2.941930	4.460526	4.547018
-2.967167	0.940333	4.540500
-2.979506	5.288395	4.543951
-2.291538	4.609385	4.556769
-2.456503	3.606713	4.563497
-2.515185	1.033426	4.557130
-2.511747	3.871710	4.564758
-2.524069	5.024372	4.568009
-2.575205	1.286712	4.559110
-2.623849	5.376653	4.566318
-2.613053	5.920929	4.567212
-2.669851	0.613806	4.562612
-2.685503	4.064550	4.566720
-2.712057	0.869220	4.561986
-2.715388	3.560728	4.563107
-2.717687	6.388582	4.564104
-2.746135	1.800491	4.560245
-2.738658	4.873087	4.567517
-2.769551	6.130843	4.562978
-2.781688	0.388831	4.558831
-2.833500	3.021857	4.559286
-2.835000	2.745700	4.561000
-2.867373	5.508814	4.558559
-2.935610	0.197561	4.545122
-2.286970	4.363636	4.558182
-2.410946	1.958784	4.560405
-2.410723	5.755904	4.566145
-2.408519	2.482593	4.561111
-2.430769	1.498205	4.565385
-2.454750	0.745000	4.564750
-2.476559	4.215484	4.570753
-2.509652	4.752609	4.570870
-2.621308	2.607196	4.570280
-2.648615	5.639692	4.572615
-2.698732	0.138310	4.561972
-2.851094	1.366250	4.559688
-2.393023	2.731163	4.565581
-2.503182	1.733030	4.570000
-2.523095	6.235595	4.577262
-2.551757	3.370135	4.575676
-2.614267	3.130667	4.572133
-2.845000	2.492000	4.567000
-2.509355	4.466290	4.579032
-3.527562	3.019352	0.627099
-3.443333	3.203333	0.580000
\ No newline at end of file
diff --git a/apps/cpu/BeadPack/paper/1-s2.0-S0309170813000183-main.pdf b/apps/cpu/BeadPack/paper/1-s2.0-S0309170813000183-main.pdf
deleted file mode 100644
index 127843eccb4d05dc32b1fbeabc2c81fffc7043fc..0000000000000000000000000000000000000000
Binary files a/apps/cpu/BeadPack/paper/1-s2.0-S0309170813000183-main.pdf and /dev/null differ
diff --git a/apps/cpu/BoxBenchmark/bb.cpp b/apps/cpu/BoxBenchmark/bb.cpp
index 3915f90627d7202c65a797960974b5c6f22ac1e2..906d513ea91f64e8dc9b1982b98d616a78232a44 100644
--- a/apps/cpu/BoxBenchmark/bb.cpp
+++ b/apps/cpu/BoxBenchmark/bb.cpp
@@ -58,9 +58,9 @@ void run(string configname)
          }
 }
 
-      LBMReal dLB = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = (uLB*dLB) / Re;
+      real dLB = length[1] / dx;
+      real rhoLB = 0.0;
+      real nuLB = (uLB*dLB) / Re;
 
       SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
 
@@ -160,8 +160,8 @@ void run(string configname)
          }
 
          SPtr<LBMKernel> kernel;
-         //kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel());
-         kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
+         //kernel = SPtr<LBMKernel>(new InK15CompressibleNavierStokes());
+         kernel = SPtr<LBMKernel>(new K17CompressibleNavierStokes());
          SPtr<BCProcessor> bcProc(new BCProcessor());
          kernel->setBCProcessor(bcProc);
          kernel->setForcingX1(0.1);
diff --git a/apps/cpu/CheckpointConverter/CMakeLists.txt b/apps/cpu/CheckpointConverter/CMakeLists.txt
deleted file mode 100644
index ee2615af2b22422878f6e18e7070585f20d242f6..0000000000000000000000000000000000000000
--- a/apps/cpu/CheckpointConverter/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(CheckpointConverter)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(cpc BINARY)
diff --git a/apps/cpu/CheckpointConverter/cbc.cfg b/apps/cpu/CheckpointConverter/cbc.cfg
deleted file mode 100644
index 3f00fe22452a988622c7fff90c5701877c4d9c7d..0000000000000000000000000000000000000000
--- a/apps/cpu/CheckpointConverter/cbc.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-path = d:/temp/BreugemChannelAnisotrop
-step = 100
-numberOfProcesses = 4
\ No newline at end of file
diff --git a/apps/cpu/CheckpointConverter/cpc.cpp b/apps/cpu/CheckpointConverter/cpc.cpp
deleted file mode 100644
index a34e758db522fb3cc72a7bedd6eef6c8cc20a49c..0000000000000000000000000000000000000000
--- a/apps/cpu/CheckpointConverter/cpc.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string path = config.getString("path");
-      int    step = config.getValue<int>("step");
-      int    numberOfProcesses = config.getValue<int>("numberOfProcesses");
-      
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      CheckpointConverter converter(grid, path, comm);
-      converter.convert(step, numberOfProcesses);
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/ConcreteExtrusion/CMakeLists.txt b/apps/cpu/ConcreteExtrusion/CMakeLists.txt
deleted file mode 100644
index 9d9cc157c8bdd2ed6412979cd7fb32d37fc3e3e2..0000000000000000000000000000000000000000
--- a/apps/cpu/ConcreteExtrusion/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(ConcreteExtrusion)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES ConcreteExtrusion.cpp )
\ No newline at end of file
diff --git a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cfg b/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cfg
deleted file mode 100644
index abc2436d34371e663eca09ce83c3052cd2e71c37..0000000000000000000000000000000000000000
--- a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cfg
+++ /dev/null
@@ -1,37 +0,0 @@
-pathname = D:/temp/JetBreakupSharpInterfaceShortTest3
-pathGeo = d:/Projects/TRR277/Project/WP2/JetBreakup
-
-numOfThreads = 18
-availMem = 10e9
-
-#Grid
-blocknx = 25 25 25
-
-factorLx = 2.0
-factorLy = 2.5
-factorLz = 2.5
-
-#Simulation
-case = 3
-U_LB = 0.003 #inlet velocity
-interfaceWidth = 3
-D = 10 #0.0001 # m
-D_LB = 50
-
-contactAngle = 110.0
-phi_L = 0.0
-phi_H = 1.0
-Phase-field Relaxation = 0.6
-Mobility = 0.02 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation parameter, to activate it need to change in kernel tauH to tauH1
-
-
-logToFile = false
-
-newStart = true
-restartStep = 10000
-
-cpStart = 10000
-cpStep = 10000
-
-outTime = 100
-endTime = 100000#36000
\ No newline at end of file
diff --git a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp b/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp
deleted file mode 100644
index 04edd1b5143140075a8051017a0679a83f393a79..0000000000000000000000000000000000000000
--- a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp
+++ /dev/null
@@ -1,657 +0,0 @@
-#include <iostream>
-#include <memory>
-#include <string>
-
-#include "MultiphaseFlow/MultiphaseFlow.h"
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-#include "VirtualFluids.h"
-
-using namespace std;
-
-void setInflowBC(real x1, real x2, real x3, real radius, int dir)
-{
-}
-
-void run(string configname)
-{
-    using namespace vf::lbm::dir;
-
-    try {
-
-        // Sleep(30000);
-
-        vf::basics::ConfigurationFile config;
-        config.load(configname);
-
-        string pathname = config.getValue<string>("pathname");
-        string pathGeo = config.getValue<string>("pathGeo");
-        int numOfThreads = config.getValue<int>("numOfThreads");
-        vector<int> blocknx = config.getVector<int>("blocknx");
-        real U_LB = config.getValue<real>("U_LB");
-        int interfaceWidth = config.getValue<int>("interfaceWidth");
-        real theta = config.getValue<real>("contactAngle");
-        real D_LB = config.getValue<real>("D_LB");
-        real phiL = config.getValue<real>("phi_L");
-        real phiH = config.getValue<real>("phi_H");
-        real tauH = config.getValue<real>("Phase-field Relaxation");
-        real mob = config.getValue<real>("Mobility");
-
-        real endTime = config.getValue<real>("endTime");
-        real outTime = config.getValue<real>("outTime");
-        real availMem = config.getValue<real>("availMem");
-
-        bool logToFile = config.getValue<bool>("logToFile");
-        real restartStep = config.getValue<real>("restartStep");
-        real cpStart = config.getValue<real>("cpStart");
-        real cpStep = config.getValue<real>("cpStep");
-        bool newStart = config.getValue<bool>("newStart");
-
-        int caseN = config.getValue<int>("case");
-
-        real factorLx = config.getValue<real>("factorLx");
-        real factorLy = config.getValue<real>("factorLy");
-        real factorLz = config.getValue<real>("factorLz");
-
-
-        SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-        int myid = comm->getProcessID();
-
-        if (myid == 0) UBLOG(logINFO, "Jet Breakup: Start!");
-
-        if (logToFile) {
-#if defined(__unix__)
-            if (myid == 0) {
-                const char *str = pathname.c_str();
-                mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-            }
-#endif
-
-            if (myid == 0) {
-                stringstream logFilename;
-                logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-                UbLog::output_policy::setStream(logFilename.str());
-            }
-        }
-
-        // Sleep(30000);
-
-        real rho_h = 0, rho_l = 0, r_rho = 0, mu_h = 0, /*mu_l,*/ Uo = 0, D = 0, sigma = 0;
-        real Dg = 10;
-
-        switch (caseN) {
-            case 1:
-                // density of heavy fluid (kg/m^3)
-                rho_h = 848;
-                // density of light fluid (kg/m^3)
-                rho_l = 34.5;
-                // density ratio
-                r_rho = rho_h / rho_l;
-                // dynamic viscosity of heavy fluid (Pa � s)
-                mu_h = 2.87e-3;
-                // dynamic viscosity of light fluid (Pa � s)
-                // mu_l = 1.97e-5;
-                // velocity (m/s)
-                Uo = 100;
-                // diameter of jet (m)
-                D = 0.0001;
-                // surface tension (N/m)
-                sigma = 0.03;
-                break;
-            case 2:
-                // density of heavy fluid (kg/m^3)
-                rho_h = 848;
-                // density of light fluid (kg/m^3)
-                rho_l = 1.205;
-                // density ratio
-                r_rho = rho_h / rho_l;
-                // dynamic viscosity of heavy fluid (Pa � s)
-                mu_h = 2.87e-3;
-                // dynamic viscosity of light fluid (Pa � s)
-                // mu_l = 1.84e-5;
-                // velocity (m/s)
-                Uo = 200;
-                // diameter of jet (m)
-                D = 0.0001;
-                // surface tension (N/m)
-                sigma = 0.03;
-                break;
-            case 3:
-                // density of heavy fluid (kg/m^3)
-                rho_h = 1000;
-                // density of light fluid (kg/m^3)
-                rho_l = 1.0;
-                // density ratio
-                r_rho = rho_h / rho_l;
-                // dynamic viscosity of heavy fluid (Pa � s)
-                mu_h = 2.87e-3;
-                // dynamic viscosity of light fluid (Pa � s)
-                // mu_l = 1.84e-5;
-                // velocity (m/s)
-                Uo = 200;
-                // diameter of jet (m)
-                D = 0.0001;
-                Dg = 10;
-                // surface tension (N/m)
-                sigma = 0.03;
-                break;
-        }
-
-        real Re = rho_h * Uo * D / mu_h;
-        real We = rho_h * Uo * Uo * D / sigma;
-
-        real dx = Dg / D_LB;
-        real nu_h = U_LB * D_LB / Re;
-        real nu_l = nu_h;
-        nu_h *= 0.1;
-
-        //real rho_h_LB = 1;
-        // surface tension
-        real sigma_LB = 0.0; //rho_h_LB *U_LB *U_LB *D_LB / We;
-
-        // LBMReal dLB = 0; // = length[1] / dx;
-        real rhoLB = 0.0;
-        // LBMReal nuLB = nu_l; //(uLB*dLB) / Re;
-
-        real beta = 12.0 * sigma_LB / interfaceWidth;
-        real kappa = 1.5 * interfaceWidth * sigma_LB;
-
-        //double tau0 = 715.218181094648*1000.; // Pa
-        //double muConcrete = 2.1133054011798826; // [Pa s]
-        //real u = Uo; //[m/s]
-
-
-        //double Bm = (tau0 * D) / (muConcrete * u);
-        double tau0_LB = 0.02;
-        //Bm *nu_h *U_LB / (D / dx);
-
-        SPtr<Rheology> rheo = Rheology::getInstance();
-        rheo->setYieldStress(tau0_LB);
-
-
-        if (myid == 0) {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "U_LB = " << U_LB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nu_l = " << nu_l);
-            UBLOG(logINFO, "nu_h = " << nu_h);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "We = " << We);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "sigma = " << sigma);
-            UBLOG(logINFO, "sigma_LB = " << sigma_LB);
-            UBLOG(logINFO, "tau0_LB = " << tau0_LB);
-            UBLOG(logINFO, "density ratio = " << r_rho);
-            // UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-        }
-
-        // bounding box
-
-        real Lx = factorLx * Dg;
-        real Ly = factorLy * Dg;
-        real Lz = factorLz * Dg;
-
-        real g_minX1 = 0;
-        real g_minX2 = -0.5 * Ly;
-        real g_minX3 = -0.5 * Lz;
-
-        // double g_maxX1 = 8.0*D;
-        // double g_maxX2 = 2.5*D;
-        // double g_maxX3 = 2.5*D;
-
-        real g_maxX1 = Lx;
-        real g_maxX2 = 0.5 * Ly;
-        real g_maxX3 = 0.5 * Lz;
-
-        SPtr<LBMUnitConverter> conv(new LBMUnitConverter());
-
-        // const int baseLevel = 0;
-
-        SPtr<LBMKernel> kernel;
-
-        // kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel());
-        kernel = make_shared<MultiphaseScaleDistributionLBMKernel>();
-        //kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>();
-
-        kernel->setWithForcing(false);
-        kernel->setForcingX1(0.0);
-        kernel->setForcingX2(0.0);
-        kernel->setForcingX3(0.0);
-
-        kernel->setPhiL(phiL);
-        kernel->setPhiH(phiH);
-        kernel->setPhaseFieldRelaxation(tauH);
-        kernel->setMobility(mob);
-
-        // nuL, nuG, densityRatio, beta, kappa, theta,
-
-        kernel->setCollisionFactorMultiphase(nu_h, nu_l);
-        kernel->setDensityRatio(r_rho);
-        kernel->setMultiphaseModelParameters(beta, kappa);
-        kernel->setContactAngle(theta);
-        kernel->setInterfaceWidth(interfaceWidth);
-        // dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(0.0);
-        kernel->setSigma(sigma_LB);
-
-        SPtr<BCSet> bcProc(new BCSet());
-        // BCSetPtr bcProc(new ThinWallBCSet());
-
-        kernel->setBCSet(bcProc);
-
-        SPtr<Grid3D> grid(new Grid3D(comm));
-         //grid->setPeriodicX1(true);
-         grid->setPeriodicX2(true);
-         grid->setPeriodicX3(true);
-        grid->setGhostLayerWidth(2);
-
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
-
-        //////////////////////////////////////////////////////////////////////////
-        // restart
-        SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-        // SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm));
-        SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm));
-        // SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm));
-        // rcp->setNu(nuLB);
-        // rcp->setNuLG(nuL, nuG);
-        // rcp->setDensityRatio(densityRatio);
-
-        rcp->setLBMKernel(kernel);
-        rcp->setBCSet(bcProc);
-        //////////////////////////////////////////////////////////////////////////
-        // BC Adapter
-        //////////////////////////////////////////////////////////////////////////////
-        mu::Parser fctF1;
-        //u_actual(r) = U_max * (4 / (D^2) * (R^2 - r^2))
-        //fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-        //fctF1.SetExpr("vx1*(1-(sqrt((x2-y0)^2+(x3-z0)^2))/(R))");
-        //fctF1.SetExpr("vy1*(1-(sqrt((x2-x0)^2+(x3-z0)^2)/R))^0.1");
-        fctF1.SetExpr("vx1");
-        //fctF1.DefineConst("vx1", 0);
-        fctF1.DefineConst("vx1", U_LB);
-        fctF1.DefineConst("R", 0.5*Dg);
-        fctF1.DefineConst("y0", (g_minX2+g_maxX2)/2);
-        fctF1.DefineConst("z0", (g_minX3+g_maxX3)/2);
-        SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, BCFunction::INFCONST));
-
-        mu::Parser fctF2;
-        fctF2.SetExpr("vx1");
-        fctF2.DefineConst("vx1", U_LB);
-        fctF2.SetExpr("vx1");
-        fctF2.DefineConst("vx1", U_LB);
-
-        // real startTime = 1;
-        // SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, startTime));
-        //SPtr<BC> velBCF2(new MultiphaseVelocityBC(true, false, false, fctF2, phiH, startTime, endTime));
-        SPtr<BC> velBCF2(new MultiphaseVelocityBC(false, true, false, fctF2, phiH, 0.0, BCFunction::INFCONST));
-
-
-
-        SPtr<BC> noSlipBC(new NoSlipBC());
-        noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy()));
-
-        SPtr<BC> denBC(new DensityBC(rhoLB));
-        denBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-
-        SPtr<BC> slipBC(new SlipBC());
-        slipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseSlipBCStrategy()));
-
-        mu::Parser fctPhi_F1;
-        fctPhi_F1.SetExpr("phiH");
-        fctPhi_F1.DefineConst("phiH", phiH);
-
-        mu::Parser fctPhi_F2;
-        fctPhi_F2.SetExpr("phiL");
-        fctPhi_F2.DefineConst("phiL", phiL);
-
-        mu::Parser fctvel_F2_init;
-        fctvel_F2_init.SetExpr("U");
-        fctvel_F2_init.DefineConst("U", 0);
-
-        velBCF1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-        velBCF2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-
-        //////////////////////////////////////////////////////////////////////////////////
-        // BC visitor
-        MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
-        bcVisitor.addBC(noSlipBC);
-        //bcVisitor.addBC(slipBC);
-        bcVisitor.addBC(denBC);
-        bcVisitor.addBC(velBCF1);
-        bcVisitor.addBC(velBCF2);
-
-        // SPtr<D3Q27Interactor> inflowF1Int;
-        // SPtr<D3Q27Interactor> cylInt;
-
-        SPtr<D3Q27Interactor> inflowInt;
-
-        //if (newStart) {
-
-            //  if (newStart) {
-
-            real inflowLength = 10;
-
-            // geometry
-            SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-            // if (myid == 0)
-            //     UBLOG(logINFO, "Read geoFile:start");
-            // SPtr<GbTriFaceMesh3D> cylinder = make_shared<GbTriFaceMesh3D>();
-            // cylinder->readMeshFromSTLFileBinary(pathGeo + "/" + geoFile, false);
-            // GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-            // if (myid == 0)
-            //     UBLOG(logINFO, "Read geoFile:stop");
-            //  inflow
-            //  GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 *
-            //  dx, g_maxX3));
-            // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1 * 0.5 - dx, g_minX2 - dx, g_minX3 * 0.5 - dx,
-            //                                          g_maxX1 * 0.5 + dx, g_minX2, g_maxX3 * 0.5 + dx));
-            // if (myid == 0)
-            //     GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1",
-            //                                WbWriterVtkXmlASCII::getInstance());
-
-            //GbCylinder3DPtr geoInflow(new GbCylinder3D(g_minX1 - 2.0*dx, 0.0, 0.0, g_minX1, 0.0, 0.0, Dg / 2.0));
-
-            GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 + inflowLength, g_minX3 + (g_maxX3 - g_minX3) / 3.0, g_minX1 + 2.0 * dx, 3 * inflowLength + g_minX2, g_maxX3 - (g_maxX3 - g_minX3) / 3.0));
-
-            if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-            GbCylinder3DPtr geoSolid(new GbCylinder3D(g_minX1 - 2.0 * dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1+2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, 1.5*D / 2.0));
-            if (myid == 0) GbSystem3D::writeGeoObject(geoSolid.get(), pathname + "/geo/geoSolid", WbWriterVtkXmlASCII::getInstance());
-
-            SPtr<GbTriFaceMesh3D> meshInflowPipe = std::make_shared<GbTriFaceMesh3D>();
-            if (myid == 0) UBLOG(logINFO, "Read meshInflowPipe:start");
-            meshInflowPipe->readMeshFromSTLFileBinary(pathGeo + "/JetTube4.stl", false);
-            //meshInflowPipe->readMeshFromSTLFileASCII(pathGeo + "/JetTubeScaled5.stl", false);
-            if (myid == 0) UBLOG(logINFO, "Read meshInflowPipe:end");
-            //meshInflowPipe->scale(1e-04, 1e-04, 1e-04);
-            if (myid == 0) GbSystem3D::writeGeoObject(meshInflowPipe.get(), pathname + "/geo/meshInflowPipe", WbWriterVtkXmlBinary::getInstance());
-            SPtr<Interactor3D> intrInflowPipe = std::make_shared<D3Q27TriFaceMeshInteractor>(meshInflowPipe, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS);
-
-            // GbCylinder3DPtr cylinder2(
-            //    new GbCylinder3D(0.0, g_minX2 - 2.0 * dx / 2.0, 0.0, 0.0, g_minX2 + 4.0 * dx, 0.0, 8.0+2.0*dx));
-            // if (myid == 0)
-            //    GbSystem3D::writeGeoObject(cylinder2.get(), pathname + "/geo/cylinder2",
-            //                               WbWriterVtkXmlASCII::getInstance());
-            // outflow
-            // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original)
-            // GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx));
-            if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-            // double blockLength = blocknx[0] * dx;
-
-            if (myid == 0) {
-                UBLOG(logINFO, "Preprocess - start");
-            }
-
-            grid->setDeltaX(dx);
-            grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-            //grid->setPeriodicX1(false);
-            //grid->setPeriodicX2(false);
-            //grid->setPeriodicX3(false);
-
-            GenBlocksGridVisitor genBlocks(gridCube);
-            grid->accept(genBlocks);
-
-            SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-            // SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBC,
-            //                                                         Interactor3D::SOLID, Interactor3D::POINTS));
-
-            // inflowF1Int =
-            //    SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBC, Interactor3D::SOLID));
-            // inflowF1Int->addBC(velBCF2);
-
-            SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBC, Interactor3D::SOLID));
-
-            // Create boundary conditions geometry
-            GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_minX3));
-            GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_maxX3, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3 + 2.0*dx));
-            GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_minX2, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - 2.0 * dx, g_maxX2, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance());
-
-            // Add boundary conditions to grid generator
-            SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, velBCF2, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID));
-
-
-//////////////////////////
-            
-            GbCuboid3DPtr wallInfZmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, (g_maxX3 + g_minX3) / 2.0 - inflowLength));
-            GbSystem3D::writeGeoObject(wallInfZmin.get(), pathname + "/geo/wallInfZmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallInfZmax(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, (g_maxX3 + g_minX3) / 2.0 + inflowLength, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallInfZmax.get(), pathname + "/geo/wallInfZmax", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallInfYmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_minX2 + inflowLength, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallInfYmin.get(), pathname + "/geo/wallInfYmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallInfYmax(new GbCuboid3D(g_minX1 - 2.0 * dx, 3* inflowLength+g_minX2, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_maxX3));
-            GbSystem3D::writeGeoObject(wallInfYmax.get(), pathname + "/geo/wallInfYmax", WbWriterVtkXmlASCII::getInstance());
-
-            // Add boundary conditions to grid generator
-            SPtr<D3Q27Interactor> wallInfZminInt(new D3Q27Interactor(wallInfZmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallInfZmaxInt(new D3Q27Interactor(wallInfZmax, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallInfYminInt(new D3Q27Interactor(wallInfYmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallInfYmaxInt(new D3Q27Interactor(wallInfYmax, grid, noSlipBC, Interactor3D::SOLID));
-//////////////////////////////////////
-
-
-
-
-
-            // cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCF1, Interactor3D::SOLID));
-            // cylInt->addBC(velBCF2);
-            //  SPtr<D3Q27Interactor> cyl2Int(new D3Q27Interactor(cylinder2, grid, noSlipBC,
-            //  Interactor3D::SOLID));
-
-            inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCF1, Interactor3D::SOLID));
-            //inflowInt->addBC(velBCF2);
-
-            GbCylinder3DPtr geoAirInflow(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1, g_maxX2 / 2.0, g_maxX3 / 2.0, D * 0.9 / 2.0));
-            if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), pathname + "/geo/geoAirInflow", WbWriterVtkXmlASCII::getInstance());            
-            SPtr<D3Q27Interactor> inflowAirInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoAirInflow, grid, velBCF2, Interactor3D::SOLID));
-
-            SPtr<D3Q27Interactor> solidInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoSolid, grid, noSlipBC, Interactor3D::SOLID));
-
-
-            InteractorsHelper intHelper(grid, metisVisitor, true);
-            //intHelper.addInteractor(cylInt);
-            //intHelper.addInteractor(tubes);
-            //intHelper.addInteractor(outflowInt);
-            // intHelper.addInteractor(cyl2Int);
-            //intHelper.addInteractor(intrInflowPipe);
-            intHelper.addInteractor(wallXminInt);
-            intHelper.addInteractor(wallXmaxInt);
-            //intHelper.addInteractor(wallZminInt);
-            //intHelper.addInteractor(wallZmaxInt);
-            //intHelper.addInteractor(wallYminInt);
-            //intHelper.addInteractor(wallYmaxInt);
-
-            intHelper.addInteractor(wallInfZminInt);
-            intHelper.addInteractor(wallInfZmaxInt);
-            intHelper.addInteractor(wallInfYminInt);
-            intHelper.addInteractor(wallInfYmaxInt);
-
-            intHelper.addInteractor(inflowInt);
-            //intHelper.addInteractor(outflowInt);
-            //intHelper.addInteractor(inflowAirInt);
-
-            intHelper.selectBlocks();
-
-            ppblocks->update(0);
-            ppblocks.reset();
-
-            unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-            int ghostLayer = 3;
-            unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]);
-            unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-            unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-            real needMemAll = real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4));
-            real needMem = needMemAll / real(comm->getNumberOfProcesses());
-
-            if (myid == 0) {
-                UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-                UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-                int minInitLevel = grid->getCoarsestInitializedLevel();
-                int maxInitLevel = grid->getFinestInitializedLevel();
-                for (int level = minInitLevel; level <= maxInitLevel; level++) {
-                    int nobl = grid->getNumberOfBlocks(level);
-                    UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-                    UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock);
-                }
-                UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-                UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-                UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-            }
-
-            MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h, nu_l, availMem, needMem);
-
-            grid->accept(kernelVisitor);
-
-            //if (!newStart) {
-            //    rcp->readBlocks((int)restartStep);
-            //    grid->accept(metisVisitor);
-            //    rcp->readDataSet((int)restartStep);
-            //    grid->setTimeStep(restartStep);
-            //}
-
-            intHelper.setBC();
-
-        if (newStart) {
-
-                // initialization of distributions
-                // mu::Parser fct1;
-                // fct1.SetExpr("phiL");
-                // fct1.DefineConst("phiL", phiL);
-                real x1c = g_minX1 - Dg*5; // (g_maxX1 - g_minX1-1)/2; //
-                real x2c = (g_minX2 + g_maxX2) / 2;
-                real x3c = (g_minX3 + g_maxX3) / 2;
-
-                mu::Parser fct1;
-                fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-                //fct1.SetExpr("(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness))-(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius2)/interfaceThickness))");
-                // fct1.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0");
-                fct1.DefineConst("x1c", x1c);
-                fct1.DefineConst("x2c", x2c);
-                fct1.DefineConst("x3c", x3c);
-                fct1.DefineConst("dx", dx);
-                fct1.DefineConst("radius", 5.0*Dg + (inflowLength-1)*dx /* + 2. * dx*/);
-                fct1.DefineConst("radius2", Dg / 4.);
-                fct1.DefineConst("interfaceThickness", interfaceWidth * dx);
-
-                mu::Parser fct2;
-                // fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-                fct2.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0");
-                fct2.DefineConst("x1c", x1c);
-                fct2.DefineConst("x2c", x2c);
-                fct2.DefineConst("x3c", x3c);
-                fct2.DefineConst("dx", dx);
-                fct2.DefineConst("radius", 0.5 * D /* + 2. * dx*/);
-                fct2.DefineConst("interfaceThickness", interfaceWidth * dx);
-
-                MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
-                //initVisitor.setPhi(fct1);
-                grid->accept(initVisitor);
-            }
-
-            // boundary conditions grid
-            {
-                SPtr<UbScheduler> geoSch(new UbScheduler(1));
-                SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-                ppgeo->update(0);
-                ppgeo.reset();
-            }
-
-            if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-        //} else {
-         if (!newStart) {
-            rcp->restart((int)restartStep);
-            grid->setTimeStep(restartStep);
-            SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppblocks->update(10000);
-            if (myid == 0) UBLOG(logINFO, "Restart - end");
-        }
-
-        //  TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-        //  grid->accept(setConnsVisitor);
-
-        // ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-
-        grid->accept(bcVisitor);
-
-        //ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        grid->accept(setConnsVisitor);
-
-        SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-        real t_ast, t;
-        t_ast = 7.19;
-        t = (int)(t_ast/(U_LB/(D_LB)));
-        visSch->addSchedule(t,t,t); //t=7.19
-        // SPtr<WriteMultiphaseQuantitiesSimulationObserver> pp(new WriteMultiphaseQuantitiesSimulationObserver(
-        //     grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-        SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> pp(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));        
-        pp->update(0);
-
-        SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-        SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
-
-        // SPtr<UbScheduler> timeBCSch(new UbScheduler(1, startTime, startTime));
-        // auto timeDepBC = make_shared<TimeDependentBCSimulationObserver>(TimeDependentBCSimulationObserver(grid, timeBCSch));
-        // timeDepBC->addInteractor(inflowInt);
-
-#ifdef _OPENMP
-        omp_set_num_threads(numOfThreads);
-#endif
-
-        SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-        SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-        simulation->addSimulationObserver(npr);
-        simulation->addSimulationObserver(pp);
-        // simulation->addSimulationObserver(timeDepBC);
-        // simulation->addSimulationObserver(timeDepBC);
-        simulation->addSimulationObserver(rcp);
-
-        if (myid == 0) UBLOG(logINFO, "Simulation-start");
-        simulation->run();
-        if (myid == 0) UBLOG(logINFO, "Simulation-end");
-    } catch (std::exception &e) {
-        cerr << e.what() << endl << flush;
-    } catch (std::string &s) {
-        cerr << s << endl;
-    } catch (...) {
-        cerr << "unknown exception" << endl;
-    }
-}
-int main(int argc, char *argv[])
-{
-    // Sleep(30000);
-    if (argv != NULL) {
-        if (argv[1] != NULL) {
-            run(string(argv[1]));
-        } else {
-            cout << "Configuration file is missing!" << endl;
-        }
-    }
-}
diff --git a/apps/cpu/ConvectionOfVortex/cov.cpp b/apps/cpu/ConvectionOfVortex/cov.cpp
index bedb3da40e9d339faa9dcbc4fbd520e0edd25222..f5685c56754a17d06190ff16588aa8bdd4b6b4f1 100644
--- a/apps/cpu/ConvectionOfVortex/cov.cpp
+++ b/apps/cpu/ConvectionOfVortex/cov.cpp
@@ -35,44 +35,44 @@ void run()
       //string  pathname = "d:/temp/ConvectionOfVortex_0.003_square";
       //int     endTime = 20;
       //double  outTime = 10;
-      //LBMReal dx =  0.003;
-      //LBMReal rhoLB = 0.0;
-      //LBMReal nuLB = 8.66025e-6;
+      //real dx =  0.003;
+      //real rhoLB = 0.0;
+      //real nuLB = 8.66025e-6;
 
       //////////////////////////////////////////////////////////////////////////
       ////dx_coarse = 0.0015 mm
       //string  pathname = "d:/temp/ConvectionOfVortex_0.0015";
       //double  endTime = 40;
       //double  outTime = 40;
-      //LBMReal dx =  0.0015;
-      //LBMReal rhoLB = 0.0;
-      //LBMReal nuLB = 8.66025e-6*2.0;
+      //real dx =  0.0015;
+      //real rhoLB = 0.0;
+      //real nuLB = 8.66025e-6*2.0;
       ////////////////////////////////////////////////////////////////////////////
       //dx_coarse = 0.00075 mm
 
       //string  pathname = "d:/temp/ConvectionOfVortex_0.00075_4th_moments";
       //double  endTime = 2000;
       //double  outTime = 10;
-      //LBMReal dx =  0.00075;
-      //LBMReal rhoLB = 0.0;
-      //LBMReal nuLB = 8.66025e-6*4.0;
+      //real dx =  0.00075;
+      //real rhoLB = 0.0;
+      //real nuLB = 8.66025e-6*4.0;
       //double yFactor = 4.0;
 
       //string  pathname = "d:/temp/ConvectionOfVortex_0.00075_moments";
       //double  endTime = 160;
       //double  outTime = 160;
-      //LBMReal dx =  0.00075;
-      //LBMReal rhoLB = 0.0;
-      //LBMReal nuLB = 8.66025e-6*4.0;
+      //real dx =  0.00075;
+      //real rhoLB = 0.0;
+      //real nuLB = 8.66025e-6*4.0;
 
       //////////////////////////////////////////////////////////////////////////
       ////dx_coarse = 0.000375 mm
       //string  pathname = "d:/temp/ConvectionOfVortex_0.000375";
       //double  endTime = 80;
       //double  outTime = 80;
-      //LBMReal dx =  0.00075;
-      //LBMReal rhoLB = 0.0;
-      //LBMReal nuLB = 8.66025e-6*8.0;
+      //real dx =  0.00075;
+      //real rhoLB = 0.0;
+      //real nuLB = 8.66025e-6*8.0;
       //////////////////////////////////////////////////////////////////////////
 
       SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
@@ -112,11 +112,10 @@ void run()
       GenBlocksGridVisitor genBlocks(gridCube);
       grid->accept(genBlocks);
 
-      SPtr<BC> outflowBC(new DensityBC(rhoLB));
-      outflowBC->setBCStrategy(SPtr<BCStrategy>(new NonReflectingOutflowBCStrategy()));
+      SPtr<BC> outflowBC(new PressureBC(rhoLB));
+      outflowBC->setBCStrategy(SPtr<BCStrategy>(new OutflowNonReflecting()));
 
       BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(outflowBC);
 
       SPtr<BCSet> bcProc;
       bcProc = SPtr<BCSet>(new BCSet());
@@ -206,10 +205,8 @@ void run()
       }
 
 
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      //dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(10.0*nuLB);
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel());
-      //dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->setBulkOmegaToOmega(true);
+      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K15CompressibleNavierStokes());
+      //dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->setBulkOmegaToOmega(true);
       //
       SPtr<BCSet> bcSet(new BCSet());
 
diff --git a/apps/cpu/CouetteFlow/CMakeLists.txt b/apps/cpu/CouetteFlow/CMakeLists.txt
deleted file mode 100644
index 3a2b634002b82edeeaa785a371ee9a2f153f0ea5..0000000000000000000000000000000000000000
--- a/apps/cpu/CouetteFlow/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(CouetteFlow)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES cflow.cpp )
\ No newline at end of file
diff --git a/apps/cpu/CouetteFlow/cf1.cfg b/apps/cpu/CouetteFlow/cf1.cfg
deleted file mode 100644
index 0fa9976114e4092b59426acecaadf47fbbf0e5dc..0000000000000000000000000000000000000000
--- a/apps/cpu/CouetteFlow/cf1.cfg
+++ /dev/null
@@ -1,32 +0,0 @@
-pathname = d:/temp/BinghamNewTest2
-
-numOfThreads = 4
-availMem = 8e9
-logToFile = false
-
-# blocknx = 2 32 32
-# boundingBox = 0.25 32 32
-# deltax = 0.125 #0.25 #0.5 #1
-
-# nuLB = 0.05
-# forcing = 1e-7 #2e-7 #4e-7 #8e-7
-
-# outTime = 10000
-# endTime =  1920000 #480000 #120000 #30000
-
-blocknx = 2 32 2
-boundingBox = 2 32 2
-deltax = 1
-
-#nuLB = 0.05
-forcing = 8e-7
-#n = 0.8
-#tau0 = 3e-6
-
-velocity = 1e-3
-n = 0.4
-Re = 1
-Bn = 0.01
-
-outTime = 1000
-endTime = 50000000
\ No newline at end of file
diff --git a/apps/cpu/CouetteFlow/cflow.cpp b/apps/cpu/CouetteFlow/cflow.cpp
deleted file mode 100644
index f0a0b26fad1c99e8f7ad195503a10d31f0146845..0000000000000000000000000000000000000000
--- a/apps/cpu/CouetteFlow/cflow.cpp
+++ /dev/null
@@ -1,313 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-
-void bflow(string configname)
-{
-    using namespace vf::lbm::dir;
-
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getValue<string>("pathname");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-      vector<real>  boundingBox = config.getVector<real>("boundingBox");
-      //double          nuLB = config.getValue<double>("nuLB");
-      real          endTime = config.getValue<real>("endTime");
-      real          outTime = config.getValue<real>("outTime");
-      real          availMem = config.getValue<real>("availMem");
-      //int             refineLevel = config.getValue<int>("refineLevel");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      //double          restartStep = config.getValue<double>("restartStep");
-      real          deltax = config.getValue<real>("deltax");
-      //double          cpStep = config.getValue<double>("cpStep");
-      //double          cpStepStart = config.getValue<double>("cpStepStart");
-      //bool            newStart = config.getValue<bool>("newStart");
-      real          forcing = config.getValue<real>("forcing");
-      //double          n = config.getValue<double>("n");
-      //double          k = config.getValue<double>("k");
-      //double          tau0 = config.getValue<double>("tau0");
-      real          velocity = config.getValue<real>("velocity");
-      real          n = config.getValue<real>("n");
-//      double          Re = config.getValue<double>("Re");
-//      double          Bn = config.getValue<double>("Bn");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      real rhoLB = 0.0;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      //bounding box
-      //double g_minX1 = 0;
-      //double g_minX2 = 0;
-      //double g_minX3 = 0;
-
-      //double g_maxX1 = boundingBox[0];
-      //double g_maxX2 = boundingBox[1];
-      //double g_maxX3 = boundingBox[2];
-
-      real g_minX1 = 0.0;
-      real g_minX2 = -boundingBox[1]/2.0;
-      real g_minX3 = -boundingBox[2]/2.0;
-
-      real g_maxX1 = boundingBox[0];
-      real g_maxX2 = boundingBox[1]/2.0;
-      real g_maxX3 = boundingBox[2]/2.0;
-
-      real blockLength = 3.0 * deltax;
-
-//      double h = (g_maxX2) / 2.0;
-//      double dex = g_maxX1;
-
-      //LBMReal tau0 = 1.2e-7;
-      //LBMReal k = nuLB;
-      //LBMReal n = 0.4;
-
-
-      real d = boundingBox[1];
-      real U = velocity;
-      real Gamma = U / d;
-
-      real k = 0.05; // (U * d) / (Re * std::pow(Gamma, n - 1));
-      real tau0 = 1e-6;// Bn* k* std::pow(Gamma, n);
-
-      real beta = 14;
-      real c = 10; // 1.0 / 6.0;
-      real mu0 = 1e-4;
-
-      SPtr<Rheology> thix = Rheology::getInstance();
-      //Herschel-Bulkley
-      thix->setPowerIndex(n);
-      thix->setViscosityParameter(k);
-      thix->setYieldStress(tau0);
-      //Powell-Eyring
-      thix->setBeta(beta);
-      thix->setC(c);
-      thix->setMu0(mu0);
-
-      SPtr<BC> noSlipBC(new NoSlipBC());
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyHerschelBulkleyModelNoSlipBCStrategy()));
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyPowellEyringModelNoSlipBCStrategy()));
-      noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelNoSlipBCStrategy()));
-
-      //BS visitor
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBC);
-
-      SPtr<BCSet> bcProc;
-      bcProc = SPtr<BCSet>(new BCSet());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new PowellEyringModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyK17LBMKernel());
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel());
-      kernel->setForcingX1(forcing);
-      kernel->setWithForcing(true);
-      kernel->setBCSet(bcProc);
-
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-      grid->setPeriodicX1(true);
-      grid->setPeriodicX2(false);
-      grid->setPeriodicX3(true);
-      grid->setDeltaX(deltax);
-      grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-      SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-      GenBlocksGridVisitor genBlocks(gridCube);
-      grid->accept(genBlocks);
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Parameters:");
-         UBLOG(logINFO, "forcing = " << forcing);
-         UBLOG(logINFO, "rho = " << rhoLB);
-         //UBLOG(logINFO, "nu = " << nuLB);
-         UBLOG(logINFO, "U = " << U);
-         UBLOG(logINFO, "Re = " << (U * d) / (k * std::pow(Gamma, n - 1)));
-         UBLOG(logINFO, "Bn = " << tau0 / (k * std::pow(Gamma, n)));
-         UBLOG(logINFO, "k = " << k);
-         UBLOG(logINFO, "n = " << n);
-         UBLOG(logINFO, "tau0 = " << tau0);
-         UBLOG(logINFO, "deltax = " << deltax);
-         //UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-         UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-         UBLOG(logINFO, "Preprozess - start");
-      }
-
-      //walls
-      //GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3));
-      //if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-      //GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-      //if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_minX2, g_maxX3 + blockLength));
-      if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname + "/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1 - blockLength, g_maxX2, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-      if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname + "/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-      //wall interactors
-      //SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBC, Interactor3D::SOLID));
-      //SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBC, Interactor3D::SOLID));
-
-      SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBC, Interactor3D::SOLID));
-      SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBC, Interactor3D::SOLID));
-
-      ////////////////////////////////////////////
-      //METIS
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY));
-      ////////////////////////////////////////////
-      /////delete solid blocks
-      if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-      InteractorsHelper intHelper(grid, metisVisitor);
-      //intHelper.addInteractor(addWallZminInt);
-      //intHelper.addInteractor(addWallZmaxInt);
-      intHelper.addInteractor(addWallYminInt);
-      intHelper.addInteractor(addWallYmaxInt);
-      intHelper.selectBlocks();
-      if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-      //////////////////////////////////////
-
-      SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-      ppblocks->update(0);
-
-      unsigned long nob = grid->getNumberOfBlocks();
-      int gl = 3;
-      unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-      unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-      unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl);
-      real needMemAll = real(nodg * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4));
-      real needMem = needMemAll / real(comm->getNumberOfProcesses());
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Number of blocks = " << nob);
-         UBLOG(logINFO, "Number of nodes  = " << nod);
-         int minInitLevel = grid->getCoarsestInitializedLevel();
-         int maxInitLevel = grid->getFinestInitializedLevel();
-         for (int level = minInitLevel; level <= maxInitLevel; level++)
-         {
-            int nobl = grid->getNumberOfBlocks(level);
-            UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-            UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * nodb);
-         }
-         UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-         UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-         UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-      }
-
-      SetKernelBlockVisitor kernelVisitor(kernel, k, availMem, needMem);
-      grid->accept(kernelVisitor);
-
-      //BC
-      intHelper.setBC();
-
-      //initialization of distributions
-      InitDistributionsBlockVisitor initVisitor;
-      grid->accept(initVisitor);
-
-
-      if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-
-
-      //set connectors
-      //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-      //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, k, iProcessor);
-      //grid->accept(setConnsVisitor);
-
-      OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-      grid->accept(setConnsVisitor);
-
-      grid->accept(bcVisitor);
-
-      SPtr<UbScheduler> geoSch(new UbScheduler(1));
-      WriteBoundaryConditionsSimulationObserver ppgeo = WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm);
-      ppgeo.update(1);
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-      SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
-
-      //write data for visualization of macroscopic quantities
-      SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-      SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, pathname,
-         WbWriterVtkXmlASCII::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-
-      SPtr<WriteThixotropyQuantitiesSimulationObserver> writeThixotropicMQSimulationObserver(new WriteThixotropyQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(outTime));
-      SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-      simulation->addSimulationObserver(npr);
-      simulation->addSimulationObserver(writeMQSimulationObserver);
-      simulation->addSimulationObserver(writeThixotropicMQSimulationObserver);
-      //simulation->addSimulationObserver(migSimulationObserver);
-      //simulation->addSimulationObserver(restartSimulationObserver);
-
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      simulation->run();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         //pflowForcing(string(argv[1]));
-         bflow(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/CylinderSt/cylinder_st.cpp b/apps/cpu/CylinderSt/cylinder_st.cpp
index 15e17a8f94099982791d844a8effbe7eff403292..fb09903cc0accaa59fb01a34bb55d37996c57615 100644
--- a/apps/cpu/CylinderSt/cylinder_st.cpp
+++ b/apps/cpu/CylinderSt/cylinder_st.cpp
@@ -88,13 +88,13 @@ void run(const char *cstr)
       double L2, L3, H;
       L2 = L3 = H = 0.41;
 
-      LBMReal radius = 0.05;
-      LBMReal uLB = 0.05;
-      LBMReal Re = 1000.0;
-      LBMReal rhoLB = 1.0;
-      LBMReal l = L2 / dx;
-      //LBMReal nueLB = (uLB*l)/Re;
-      LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
+      real radius = 0.05;
+      real uLB = 0.05;
+      real Re = 1000.0;
+      real rhoLB = 1.0;
+      real l = L2 / dx;
+      //real nueLB = (uLB*l)/Re;
+      real nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
 
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
 
@@ -231,7 +231,7 @@ void run(const char *cstr)
 
          if (refineLevel > 0)
          {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - start");    
             RefineCrossAndInsideGbObjectBlockVisitor refVisitor(refineCube, baseLevel, refineLevel-1);
             grid->accept(refVisitor);
 
@@ -248,7 +248,7 @@ void run(const char *cstr)
             D3Q27System::getLBMDirections(dirs);
             SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
             grid->accept(interDirsVisitor);
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - end");    
          }
 
          MetisPartitioningGridVisitor metisVisitor(numOfThreads, D3Q27System::B, comm, false);
diff --git a/apps/cpu/DHIT/CMakeLists.txt b/apps/cpu/DHIT/CMakeLists.txt
deleted file mode 100644
index e1ffbe8e27f2b9260b10381ec0d29988248cbcd0..0000000000000000000000000000000000000000
--- a/apps/cpu/DHIT/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(dhit)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(dhit BINARY)
diff --git a/apps/cpu/DHIT/dhit.cfg b/apps/cpu/DHIT/dhit.cfg
deleted file mode 100644
index 6aa2779c2acd45b7421b4795ae9d59a831e4fccc..0000000000000000000000000000000000000000
--- a/apps/cpu/DHIT/dhit.cfg
+++ /dev/null
@@ -1,21 +0,0 @@
-pathname = d:/temp/DHIT_Green
-numOfThreads = 4
-availMem = 11e9
-
-#Grid
-length =  128 128 128 
-blocknx = 32 32 32
-
-initTime = 10
-
-outTime = 1
-endTime = 10
-
-logToFile = false
-
-#Simulation
-initFile = d:/Projects/DHIT/Velocities.txt
-nuLB = 1.2395e-2
-uRMS = 0.0234
-lambda = 0.1
-
diff --git a/apps/cpu/DHIT/dhit.cpp b/apps/cpu/DHIT/dhit.cpp
deleted file mode 100644
index 3143aa1c8f79ceb4c69aca04bac193025a604392..0000000000000000000000000000000000000000
--- a/apps/cpu/DHIT/dhit.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      //Sleep(30000);
-
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      vector<double>  length = config.getVector<double>("length");
-      bool            logToFile = config.getBool("logToFile");
-      string          initFile = config.getString("initFile");
-      double          nuLB = config.getDouble("nuLB");
-      double          uRMS = config.getDouble("uRMS");
-      double          lambda = config.getDouble("lambda");
-      double          initTime = config.getDouble("initTime");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //LBMReal uLB = 0.032;
-      LBMReal dx = 1.0;
-      LBMReal rhoLB = 0.0;
-
-
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      //bounding box
-      double g_minX1 = 0.0;
-      double g_minX2 = 0.0;
-      double g_minX3 = 0.0;
-
-      double g_maxX1 = length[0];//-1.0;
-      double g_maxX2 = length[1];//-1.0;
-      double g_maxX3 = length[2];//-1.0;
-
-      //geometry
-      SPtr<GbObject3D> box(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(box.get(), pathname + "/geo/box", WbWriterVtkXmlBinary::getInstance());
-
-      SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-      double blockLength = blocknx[0] * dx;
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      if (myid == 0)
-      {
-         //UBLOG(logINFO, "uLb = " << uLB);
-         UBLOG(logINFO, "rho = " << rhoLB);
-         UBLOG(logINFO, "nuLb = " << nuLB);
-         UBLOG(logINFO, "uRMS = " << uRMS);
-         UBLOG(logINFO, "lambda = " << lambda);
-         UBLOG(logINFO, "Re = " << (uRMS*lambda)/nuLB);
-         UBLOG(logINFO, "dx = " << dx);
-         UBLOG(logINFO, "length = " << length[0] << " " << length[1] << " " << length[2]);
-         UBLOG(logINFO, "blocknx = " << blocknx[0] << " " << blocknx[1] << " " << blocknx[2]);
-         UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses());
-         UBLOG(logINFO, "number of threads = " << numOfThreads);
-         UBLOG(logINFO, "Preprocess - start");
-      }
-
-      grid->setDeltaX(dx);
-      grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-      grid->setPeriodicX1(true);
-      grid->setPeriodicX2(true);
-      grid->setPeriodicX3(true);
-
-      if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-      GenBlocksGridVisitor genBlocks(gridCube);
-      grid->accept(genBlocks);
-
-      WriteBlocksSPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW));
-      InteractorsHelper intHelper(grid, metisVisitor);
-      //intHelper.addInteractor(boxInt);
-      intHelper.selectBlocks();
-
-      ppblocks->process(0);
-      ppblocks.reset();
-
-      //set connectors
-      InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-      SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-      grid->accept(setConnsVisitor);
-
-      //domain decomposition for threads
-      PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-      grid->accept(pqPartVisitor);
-
-      unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-      int ghostLayer = 3;
-      unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-      unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-      unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-      double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-      double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-         UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-         int minInitLevel = grid->getCoarsestInitializedLevel();
-         int maxInitLevel = grid->getFinestInitializedLevel();
-         for (int level = minInitLevel; level <= maxInitLevel; level++)
-         {
-            int nobl = grid->getNumberOfBlocks(level);
-            UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-            UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-         }
-         UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-         UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-         UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-      }
-
-      SPtr<LBMKernel> kernel;
-
-      //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-      kernel = SPtr<LBMKernel>(new InitDensityLBMKernel(blocknx[0], blocknx[1], blocknx[2]));
-
-      SPtr<BCProcessor> bcProc(new BCProcessor());
-      kernel->setBCProcessor(bcProc);
-
-      SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-      grid->accept(kernelVisitor);
-
-      intHelper.setBC();
-
-      //initialization of distributions
-      InitDistributionsBlockVisitor initVisitor(nuLB, rhoLB);
-      double u_LB = 0.01;
-      mu::Parser inflowProfileVx1, inflowProfileVx2, inflowProfileVx3;
-      inflowProfileVx1.DefineConst("U", u_LB);
-      inflowProfileVx1.DefineConst("PI", PI);
-      inflowProfileVx1.DefineConst("L1", g_maxX1-g_minX1);
-      inflowProfileVx1.DefineConst("L2", g_maxX2-g_minX2);
-      inflowProfileVx1.DefineConst("L3", g_maxX3-g_minX3);
-      inflowProfileVx1.SetExpr("U*cos(2.0*PI*x1/L1)*sin(2.0*PI*x2/L2)*sin(2.0*PI*x3/L3)");
-      inflowProfileVx2.DefineConst("U", u_LB);
-      inflowProfileVx2.DefineConst("PI", PI);
-      inflowProfileVx2.DefineConst("L1", g_maxX1-g_minX1);
-      inflowProfileVx2.DefineConst("L2", g_maxX2-g_minX2);
-      inflowProfileVx2.DefineConst("L3", g_maxX3-g_minX3);
-      inflowProfileVx2.SetExpr("-U*cos(2.0*PI*x1/L1)*sin(2.0*PI*x2/L2)*cos(2.0*PI*x3/L3)");
-      inflowProfileVx3.DefineConst("U", u_LB);
-      inflowProfileVx3.DefineConst("PI", PI);
-      inflowProfileVx3.DefineConst("L1", g_maxX1-g_minX1);
-      inflowProfileVx3.DefineConst("L2", g_maxX2-g_minX2);
-      inflowProfileVx3.DefineConst("L3", g_maxX3-g_minX3);
-      inflowProfileVx3.SetExpr("-U/2.0*sin(8.0*PI*(x1)/(L1))*cos(8.0*PI*(x3)/L3)");
-      initVisitor.setVx1(inflowProfileVx1);
-      initVisitor.setVx2(inflowProfileVx2);
-      initVisitor.setVx3(inflowProfileVx3);
-      //InitDistributionsFromFileBlockVisitor initVisitor(nuLB, rhoLB, initFile);
-      grid->accept(initVisitor);
-
-      //boundary conditions grid
-      {
-         SPtr<UbScheduler> geoSch(new UbScheduler(1));
-         WriteBoundaryConditionsSPtr<CoProcessor> ppgeo(
-            new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-         grid->coProcess(0);
-      }
-
-      if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      SPtr<UbScheduler> outputSch(new UbScheduler(outTime));
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, outputSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm);
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-      const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(outputSch);
-      CalculationManagerPtr initialisation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::HYBRID));
-      if (myid == 0) UBLOG(logINFO, "Initialisation-start");
-      initialisation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Initialisation-end");
-
-
-      kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], IncompressibleCumulantLBMKernel::NORMAL));
-      kernel->setBCProcessor(bcProc);
-      SetKernelBlockVisitor kernelVisitor2(kernel, nuLB, availMem, needMem, SetKernelBlockVisitor::ChangeKernel);
-      grid->accept(kernelVisitor2);
-
-      SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-
-      if (myid==0) UBLOG(logINFO, "Simulation-start");
-      grid->setTimeStep(initTime+1.0);
-
-      const SPtr<ConcreteCalculatorFactory> calculatorFactory2 = std::make_shared<ConcreteCalculatorFactory>(visSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory2, CalculatorType::HYBRID));
-      calculation->calculate();
-      if (myid==0) UBLOG(logINFO, "Simulation-end");
-
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/DLR-F16-Porous/CMakeLists.txt b/apps/cpu/DLR-F16-Porous/CMakeLists.txt
deleted file mode 100644
index 915b463bc2ae8dd535dff489381544b904c7a85e..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16-Porous/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(f16porous)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(f16porous BINARY)
diff --git a/apps/cpu/DLR-F16-Porous/f16-porous.cfg b/apps/cpu/DLR-F16-Porous/f16-porous.cfg
deleted file mode 100644
index 021da4643590b198587751e92385d821f4eb6630..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16-Porous/f16-porous.cfg
+++ /dev/null
@@ -1,65 +0,0 @@
-pathOut = d:/temp/DLR-F16-Porous
-pathGeo = d:/Projects/SFB880/DLR-F16/Geometry
-
-fngFileNoTapeFull = F16_broad_Quad_noTape_full.stl
-fngFileFull = F16_broad_Quad_thickTape_full.stl
-
-fngFileNoTapeBody = F16_broad_Quad_noTape_body.stl
-fngFileBody = F16_broad_Quad_thickTape_body.stl
-
-fngFileTE = F16_broad_Quad_trailingEdge.stl
-
-#pmNX = 537 2286 1122     
-pmNX = 537 2286 10     
-lthreshold  = 11538  
-uthreshold  = 65535  
-voxelDeltaX = 0.013393e-3 0.013393e-3 0.013393e-3  
-pathGeoTEvoxel = d:/Projects/SFB880/DLR-F16/A4_Forschungsdaten_Scan_Ganzer_Abschnitt_Hinterkante_Tychsen/CT-2017-019_2/F16-TE-PA80-110-537x2286x10_11538_rotate.raw
-
-accuracy = 0
-
-numOfThreads = 1
-availMem = 3.5e9
-
-logToFile = false
-
-#x1min x1max x2min x2max x3min x3max [m]
-boundingBox = -0.3 1.17 0.0 0.03 -1.17 1.17
-
-blockNx = 10 10 10
-
-refineLevel = 6
-
-#deltaXfine = 0.003 #level 0
-#deltaXfine = 0.0015 #level 1
-#deltaXfine = 0.00075 #level 2
-#deltaXfine = 0.000375 #level 3
-#deltaXfine = 0.0001875 #level 4
-#deltaXfine = 0.00009375 #level 5
-deltaXfine = 0.000046875 #level 6
-#deltaXfine = 0.0000234375 #level 7
-
-startDistance = -1.0e-3
-refineDistance = 0.6e-3
-
-writeBlocksToFile = true
-
-newStart = true
-restartStep = 30
-
-nupsStep = 1000 1000 10000000
-
-cpStep = 40
-cpStart = 40
-
-outTimeStep = 40
-outTimeStart = 40
-
-timeAvStart = 0
-timeAvStop  = 40000
-
-endTime = 40
-
-
-
-
diff --git a/apps/cpu/DLR-F16-Porous/f16.cpp b/apps/cpu/DLR-F16-Porous/f16.cpp
deleted file mode 100644
index 1263e7752ce9d6d6f5dacbfd12a09a5b258506ed..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16-Porous/f16.cpp
+++ /dev/null
@@ -1,775 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <PointerDefinitions.h>
-#include "VirtualFluids.h"
-#include <omp.h>
-using namespace std;
-
-
-//////////////////////////////////////////////////////////////////////////
-void initPteBlock(SPtr<Grid3D> grid, SPtr<Block3D> block)
-{
-   int gridRank = grid->getRank();
-   int blockRank = block->getRank();
-
-   if (blockRank == gridRank)
-   {
-      SPtr<ILBMKernel> kernel = block->getKernel();
-      if (!kernel)
-         throw UbException(UB_EXARGS, "The LBM kernel isn't exist in block: "+block->toString());
-
-      SPtr<BCArray3D> bcArray = kernel->getBCProcessor()->getBCArray();
-      SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions();
-
-      LBMReal f[D3Q27System::ENDF+1];
-
-      size_t nx1 = distributions->getNX1();
-      size_t nx2 = distributions->getNX2();
-      size_t nx3 = distributions->getNX3();
-
-      for (int ix3=0; ix3<bcArray->getNX3(); ix3++)
-         for (int ix2=0; ix2<bcArray->getNX2(); ix2++)
-            for (int ix1=0; ix1<bcArray->getNX1(); ix1++)
-            {
-               D3Q27System::calcCompFeq(f, 0, 0, 0, 0);
-               distributions->setPostCollisionDistribution(f, ix1, ix2, ix3);
-               distributions->setPreCollisionDistribution(f, ix1, ix2, ix3);
-            }
-      block->setActive(true);
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void initPteFs(SPtr<Grid3D> grid, vector<SPtr<Block3D>>& vectorTE)
-{
-   for (SPtr<Block3D> block : vectorTE)
-   {
-      initPteBlock(grid, block);
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathOut = config.getValue<string>("pathOut");
-      string          pathGeo = config.getValue<string>("pathGeo");
-      string          fngFileNoTapeFull = config.getValue<string>("fngFileNoTapeFull");
-      string          fngFileFull = config.getValue<string>("fngFileFull");
-      string          fngFileNoTapeBody = config.getValue<string>("fngFileNoTapeBody");
-      string          fngFileBody = config.getValue<string>("fngFileBody");
-      string          fngFileTE = config.getValue<string>("fngFileTE");
-
-      int             accuracy = config.getValue<int>("accuracy");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      vector<int>     blockNx = config.getVector<int>("blockNx");
-      vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      double          restartStep = config.getValue<double>("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      int             endTime = config.getValue<int>("endTime");
-      double          outTimeStep = config.getValue<double>("outTimeStep");
-      double          outTimeStart = config.getValue<double>("outTimeStart");
-      double          availMem = config.getValue<double>("availMem");
-      int             refineLevel = config.getValue<int>("refineLevel");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      double          deltaXfine = config.getValue<double>("deltaXfine");
-      double          refineDistance = config.getValue<double>("refineDistance");
-      double          startDistance = config.getValue<double>("startDistance");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-      bool            newStart = config.getValue<bool>("newStart");
-      bool            writeBlocks = config.getValue<bool>("writeBlocks");
-
-      double          timeAvStart       = config.getValue<double>("timeAvStart");
-      double          timeAvStop        = config.getValue<double>("timeAvStop");
-
-      vector<int>     pmNX              = config.getVector<int>("pmNX");
-      double          lthreshold        = config.getValue<double>("lthreshold");
-      double          uthreshold        = config.getValue<double>("uthreshold");
-      vector<float>   voxelDeltaX       = config.getVector<float>("voxelDeltaX");
-      string          pathGeoTEvoxel    = config.getValue<string>("pathGeoTEvoxel");
-      
-
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid==0)
-         {
-            const char* str = pathOut.c_str();
-            mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
-         }
-#endif 
-
-         if (myid==0)
-         {
-            stringstream logFilename;
-            logFilename<<pathOut+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 1");
-         UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-
-
-      //the geometry is in mm
-
-      double g_minX1 = boundingBox[0];//*1000.0;
-      double g_minX2 = boundingBox[2];//*1000.0;
-      double g_minX3 = boundingBox[4];//*1000.0;
-      double g_maxX1 = boundingBox[1];//*1000.0;
-      double g_maxX2 = boundingBox[3];//*1000.0;
-      double g_maxX3 = boundingBox[5];//*1000.0;
-      //deltaXfine *=1000.0;
-
-      //////////////////////////////////////////////////////////////////////////
-      double deltaXcoarse = deltaXfine*(double)(1<<refineLevel);
-      //////////////////////////////////////////////////////////////////////////
-      double blockLength = (double)blockNx[0]*deltaXcoarse;
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double Re = 1e6;
-
-      double rhoLB = 0.0;
-      double rhoReal = 1.2041; //(kg/m3)
-      //double nueReal = 153.5e-7; //m^2/s
-      double uReal = 55; //m/s
-      double lReal = 0.3;//m
-      //double uReal = Re*nueReal / lReal;
-      double nuReal = (uReal*lReal)/Re; //m^2/s
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double Ma = 0.15;//Ma-Real!
-      double csReal = uReal / Ma;
-      double hLB = lReal / deltaXcoarse;
-
-      LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB);
-
-      double uLB = uReal   * unitConverter.getFactorVelocityWToLb();
-      double nuLB = nuReal * unitConverter.getFactorViscosityWToLb();
-      double lLB = lReal/deltaXcoarse;
-      //double nuLB = (uLB*lLB)/Re; //0.005;
-      //double nuLB = 0.005;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      ////////////////////////////////////////////////////////////////////////
-      //Grid
-      //////////////////////////////////////////////////////////////////////////
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      //BC adapters
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm()));
-
-      //SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter());
-      //slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm()));
-
-      mu::Parser fct;
-      fct.SetExpr("U");
-      fct.DefineConst("U", uLB);
-      SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-      velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm()));
-
-      //fct.SetExpr("U");
-      //fct.DefineConst("U", 0.01);
-      //SPtr<BCAdapter> velBCAdapterOut(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-      //velBCAdapterOut->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
-
-      SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rhoLB));
-      outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm()));
-
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-      bcVisitor.addBC(velBCAdapter);
-      bcVisitor.addBC(outflowBCAdapter);
-
-      SPtr<BCProcessor> bcProc;
-      //bcProc = SPtr<BCProcessor>(new BCProcessor());
-      bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor());
-
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      //t = 21.8, P = 1.0145 atm, Relative Humidity = 45.8, Second Coefficient of Viscosity = 3120
-      //Ash, R. L., Zuckerwar, A. J., & Zheng, Z. (1991). Second coefficient of viscosity in air.
-      double bulckViscosity = 3120 * nuLB;
-      dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(bulckViscosity);
-      kernel->setBCProcessor(bcProc);
-
-      SPtr<LBMKernel> spKernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel());
-      spKernel->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIORestartCoProcessor> restartCoProcessor(new MPIIORestartCoProcessor(grid, rSch, pathOut, comm));
-      restartCoProcessor->setLBMKernel(kernel);
-      restartCoProcessor->setBCProcessor(bcProc);
-
-      SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathOut+"/mig", comm));
-      migCoProcessor->setLBMKernel(kernel);
-      migCoProcessor->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 2");
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "Parameters:");
-         UBLOG(logINFO, "* Re                  = "<<Re);
-         UBLOG(logINFO, "* Ma                  = "<<Ma);
-         UBLOG(logINFO, "* velocity (uReal)    = "<<uReal<<" m/s");
-         UBLOG(logINFO, "* viscosity (nuReal)  = "<<nuReal<<" m^2/s");
-         UBLOG(logINFO, "* chord length (lReal)= "<<lReal<<" m");
-         UBLOG(logINFO, "* velocity LB (uLB)   = "<<uLB);
-         UBLOG(logINFO, "* viscosity LB (nuLB) = "<<nuLB);
-         UBLOG(logINFO, "* chord length (l_LB) = "<<lLB<<" dx_base");
-         UBLOG(logINFO, "* dx_base             = "<<deltaXcoarse<<" m");
-         UBLOG(logINFO, "* dx_refine           = "<<deltaXfine<<" m");
-         UBLOG(logINFO, "* blocknx             = "<<blockNx[0]<<"x"<<blockNx[1]<<"x"<<blockNx[2]);
-         UBLOG(logINFO, "* refineDistance      = "<<refineDistance);
-         UBLOG(logINFO, "* number of levels    = "<<refineLevel+1);
-         UBLOG(logINFO, "* number of threads   = "<<numOfThreads);
-         UBLOG(logINFO, "* number of processes = "<<comm->getNumberOfProcesses());
-         UBLOG(logINFO, "* path = "<<pathOut);
-       }
-
-      if (newStart)
-      {
-         ////////////////////////////////////////////////////////////////////////
-         //define grid
-         //////////////////////////////////////////////////////////////////////////
-         grid->setDeltaX(deltaXcoarse);
-         grid->setBlockNX(blockNx[0], blockNx[1], blockNx[2]);
-
-         SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(true);
-         grid->setPeriodicX3(false);
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Preprocessing - start");
-            UBLOG(logINFO, "PID = "<<myid<<" Point 3");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-
-         //voxelMatrixTransformation(pmNX, lthreshold, uthreshold, voxelDeltaX, pathGeoTEvoxel, pathOut, comm);
-
-         //return;
-
-
-         SPtr<GbTriFaceMesh3D> fngMeshTE;
-         if (myid==0) UBLOG(logINFO, "Read fngMeshTE:start");
-         fngMeshTE = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileTE, "fngMeshTE", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-         if (myid==0) UBLOG(logINFO, "Read fngMeshTE:end");
-         fngMeshTE->rotate(0.0, 0.5, 0.0);
-         fngMeshTE->translate(0.0, 0.0, 0.0012 - 0.0000192);
-         if (myid==0) GbSystem3D::writeGeoObject(fngMeshTE.get(), pathOut+"/geo/fngMeshTE", WbWriterVtkXmlBinary::getInstance());
-
-         SPtr<Interactor3D> fngIntrTE = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshTE, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy));
-
-         double zTranslate = -0.0001308;
-
-         if (refineLevel>0 && myid==0 && writeBlocks)
-         {
-            if (myid==0) UBLOG(logINFO, "Refinement - start");
-            int rank = grid->getRank();
-            grid->setRank(0);
-
-            SPtr<GbTriFaceMesh3D> fngMeshNoTapeFull;
-            if (myid==0) UBLOG(logINFO, "Read fngFileNoTapeFull:start");
-            fngMeshNoTapeFull = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileNoTapeFull, "fngMeshNoTapeBody", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read fngFileNoTapeFull:end");
-            fngMeshNoTapeFull->rotate(0.0, 0.5, 0.0);
-            if (myid==0) GbSystem3D::writeGeoObject(fngMeshNoTapeFull.get(), pathOut+"/geo/fngMeshNoTapeFull", WbWriterVtkXmlBinary::getInstance());
-
-            SPtr<Interactor3D> fngIntrNoTapeFull = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshNoTapeFull, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy));
-
-            int level;
-
-			level = 1;
-			if (refineLevel - level >= 0)
-			{
-				dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, refineDistance);
-			}
-
-            level = 2;
-			if (refineLevel - level >= 0)
-			{
-				dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, refineDistance);
-			}
-
-            level = 3;
-            if (refineLevel - level >= 0)
-            {
-               dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, 24.0*refineDistance);
-            }
-
-            level = 4;
-            if (refineLevel - level >= 0)
-            {
-               dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, 12.0*refineDistance);
-            }
-
-            level = 5;
-            if (refineLevel - level >= 0)
-            {
-               dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, 6.0*refineDistance);
-            }
-
-            level = 6;
-            if (refineLevel - level >= 0)
-            {
-               dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, 3.0*refineDistance);
-               RefineCrossAndInsideGbObjectBlockVisitor refVisitorTE(fngMeshTE, level);
-               grid->accept(refVisitorTE);
-            }
-
-            ///////delete solid blocks
-            if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-
-            SPtr<GbTriFaceMesh3D> fngMeshNoTapeBody;
-            if (myid==0) UBLOG(logINFO, "Read fngFileNoTapeBody:start");
-            fngMeshNoTapeBody = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileNoTapeBody, "fngMeshNoTapeBody", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read fngFileNoTapeBody:end");
-            fngMeshNoTapeBody->rotate(0.0, 0.5, 0.0);
-            fngMeshNoTapeBody->translate(0.0, 0.0, zTranslate);
-            //fngMeshNoTapeBody->translate(0.0, 0.0, -0.00011);
-            
-            if (myid==0) GbSystem3D::writeGeoObject(fngMeshNoTapeBody.get(), pathOut+"/geo/fngMeshNoTapeBody", WbWriterVtkXmlBinary::getInstance());
-
-            SPtr<Interactor3D> fngIntrNoTapeBody = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshNoTapeBody, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy));//, Interactor3D::POINTS));
-
-            SetSolidBlocksBlockVisitor v(fngIntrNoTapeBody);
-            grid->accept(v);
-            std::vector<SPtr<Block3D>>& sb = fngIntrNoTapeBody->getSolidBlockSet();
-            for (SPtr<Block3D> block : sb)
-            {
-               grid->deleteBlock(block);
-            }
-            fngIntrNoTapeBody->removeSolidBlocks();
-            fngIntrNoTapeBody->removeBcBlocks();
-
-
-            if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-            //////////////////////////////////////////
-
-            {
-               WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-               ppblocks.process(0);
-            }
-
-            grid->setRank(rank);
-
-            RatioBlockVisitor ratioVisitor(refineLevel);
-            CheckRatioBlockVisitor checkRatio(refineLevel);
-            int count = 0;
-
-            do {
-               if (myid==0) UBLOG(logINFO, "ratioVisitor - start");
-               grid->accept(ratioVisitor);
-               if (myid==0) UBLOG(logINFO, "ratioVisitor - end");
-               if (myid==0) UBLOG(logINFO, "checkRatio - start");
-               checkRatio.resetState();
-               grid->accept(checkRatio);
-               if (myid==0) UBLOG(logINFO, "checkRatio - end");
-               if (myid==0) UBLOG(logINFO, "count = "<<count++<<" state = "<<checkRatio.getState());
-            } while (!checkRatio.getState());
-
-
-            {
-               WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-               ppblocks.process(1);
-            }
-
-            OverlapBlockVisitor overlapVisitor(refineLevel, false);
-            grid->accept(overlapVisitor);
-
-            if (myid==0) UBLOG(logINFO, "Refinement - end");
-         }
-         else if (refineLevel>0 && !writeBlocks)
-         {
-            migCoProcessor->readBlocks(0);
-         }
-         grid->updateDistributedBlocks(comm);
-
-         std::vector<int> dirs;
-         for (int i = D3Q27System::E; i<=D3Q27System::TS; i++)
-         {
-            dirs.push_back(i);
-         }
-         SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-         grid->accept(interDirsVisitor);
-
-         //walls
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         //wall interactors
-         SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, velBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathOut+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         //inflow
-         SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //outflow
-         SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID));
-
-         //airfoil
-         SPtr<GbTriFaceMesh3D> fngMeshBody;
-         if (myid==0) UBLOG(logINFO, "Read fngFileBody:start");
-         fngMeshBody = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileBody, "fngMeshBody", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-         if (myid==0) UBLOG(logINFO, "Read fngFileBody:end");
-         fngMeshBody->rotate(0.0, 0.5, 0.0);
-         //fngMeshBody->translate(0.0, 0.0, -0.00011);
-         fngMeshBody->translate(0.0, 0.0, zTranslate);
-         if (myid==0) GbSystem3D::writeGeoObject(fngMeshBody.get(), pathOut+"/geo/fngMeshBody", WbWriterVtkXmlBinary::getInstance());
-
-         SPtr<Interactor3D> fngIntrBody = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshBody, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy));
-         fngMeshBody.reset();
-
-         GbCuboid3DPtr geoAddWallP(new GbCuboid3D(0.269, g_minX2-blockLength, 0.0016, 0.27028, g_maxX2+blockLength, 0.0076));
-         if (myid==0) GbSystem3D::writeGeoObject(geoAddWallP.get(), pathOut+"/geo/geoAddWallP", WbWriterVtkXmlASCII::getInstance());
-         SPtr<D3Q27Interactor> addWallPIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoAddWallP, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         //////////////////////////////////////////////////////////////////////////
-         vector<double> origin(3);
-         origin[0] = 0;
-         origin[1] = 0;
-         origin[2] = 0;
-
-         double vmZtranslate = 0.0042 - 0.007587;
-
-         SPtr<GbVoxelMatrix3D> voxelMatrix1(new GbVoxelMatrix3D(pmNX[0], pmNX[1], pmNX[2], 0, lthreshold, uthreshold));
-         voxelMatrix1->readMatrixFromRawFile<unsigned short>(pathGeoTEvoxel, GbVoxelMatrix3D::BigEndian);
-         voxelMatrix1->setVoxelMatrixDelta(voxelDeltaX[0], voxelDeltaX[1], voxelDeltaX[2]);
-         voxelMatrix1->setVoxelMatrixMininum(origin[0], origin[1], origin[2]);
-
-         voxelMatrix1->rotate90aroundZ();
-         voxelMatrix1->rotate90aroundZ();
-         voxelMatrix1->rotate90aroundZ();
-         voxelMatrix1->rotate90aroundX();
-         voxelMatrix1->translate(0.2813, 0, vmZtranslate);
-         double offset = ((g_maxX2-g_minX2)/2.0 - voxelMatrix1->getLengthX2())/2.0;
-         voxelMatrix1->setVoxelMatrixMinX2(g_minX2+offset);
-
-         if (myid==0) voxelMatrix1->writeToVTKImageDataAppended(pathOut+"/geo/fngTEvoxel1");
-
-         SPtr<D3Q27Interactor> fngIntrTEvoxel1 = SPtr<D3Q27Interactor>(new D3Q27Interactor(voxelMatrix1, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         SPtr<GbVoxelMatrix3D> voxelMatrix2(new GbVoxelMatrix3D(pmNX[0], pmNX[1], pmNX[2], 0, lthreshold, uthreshold));
-         voxelMatrix2->readMatrixFromRawFile<unsigned short>(pathGeoTEvoxel, GbVoxelMatrix3D::BigEndian);
-         voxelMatrix2->setVoxelMatrixDelta(voxelDeltaX[0], voxelDeltaX[1], voxelDeltaX[2]);
-         voxelMatrix2->setVoxelMatrixMininum(origin[0], origin[1], origin[2]);
-
-         voxelMatrix2->rotate90aroundZ();
-         voxelMatrix2->rotate90aroundZ();
-         voxelMatrix2->rotate90aroundZ();
-         voxelMatrix2->rotate90aroundX();
-         voxelMatrix2->translate(0.2813, 0, vmZtranslate);
-         voxelMatrix2->mirrorY();
-         voxelMatrix2->setVoxelMatrixMinX2(voxelMatrix1->getX2Maximum());
-
-         if (myid==0) voxelMatrix2->writeToVTKImageDataAppended(pathOut+"/geo/fngTEvoxel2");
-
-         SPtr<D3Q27Interactor> fngIntrTEvoxel2 = SPtr<D3Q27Interactor>(new D3Q27Interactor(voxelMatrix2, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         //////////////////////////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(inflowIntr);
-         intHelper.addInteractor(outflowIntr);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(fngIntrBody);
-         intHelper.addInteractor(addWallPIntr);
-         intHelper.addInteractor(fngIntrTEvoxel1);
-         intHelper.addInteractor(fngIntrTEvoxel2);
-         intHelper.selectBlocks();
-
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 4");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-         //////////////////////////////////////
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blockNx[0])* (unsigned long long)(blockNx[1])* (unsigned long long)(blockNx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blockNx[0]+ghostLayer) * (blockNx[1]+ghostLayer) * (blockNx[2]+ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27*sizeof(double)+sizeof(int)+sizeof(float)*4));
-         double needMem = needMemAll/double(comm->getNumberOfProcesses());
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Number of blocks = "<<numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = "<<numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level<=maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level "<<level<<" = "<<nobl);
-               UBLOG(logINFO, "Number of nodes for level "<<level<<" = "<<nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = "<<needMemAll<<" bytes");
-            UBLOG(logINFO, "Necessary memory per process = "<<needMem<<" bytes");
-            UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes");
-         }
-
-         if (writeBlocks)
-         {
-            migCoProcessor->writeBlocks(0);
-         }
-
-         {
-            WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppblocks.process(2);
-         }
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (myid==0) UBLOG(logINFO, "SetKernelBlockVisitor:end");
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 5");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-         if (refineLevel>0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         if (myid==0) UBLOG(logINFO, "SetUndefinedNodesBlockVisitor:end");
-
-         //BC
-         intHelper.setBC();
-
-         if (myid==0) UBLOG(logINFO, "intHelper.setBC():end");
-         if (myid==0) UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-
-         if (myid==0) UBLOG(logINFO, "vectorTE:start");
-         SetSolidBlocksBlockVisitor v1(fngIntrTE);
-         grid->accept(v1);
-         SetBcBlocksBlockVisitor v2(fngIntrTE);
-         grid->accept(v2);
-         std::vector<SPtr<Block3D>>& vectorTE = fngIntrTE->getSolidBlockSet();
-         std::vector<SPtr<Block3D>>& bb = fngIntrTE->getBcBlocks();
-         vectorTE.insert(vectorTE.end(), bb.begin(), bb.end());
-         if (myid==0) UBLOG(logINFO, "vectorTE:end");
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 6");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-         //initialization of distributions
-         InitDistributionsBlockVisitor initVisitor;
-         initVisitor.setVx1(fct);
-         grid->accept(initVisitor);
-
-         initPteFs(grid, vectorTE);
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 7");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-         //Post process
-         {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppgeo.process(0);
-         }
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 8");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-         /////////////////////////////////////////////////////////////////////////////
-         if (myid==0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         //restartCoProcessor->restart((int)restartStep);
-         migCoProcessor->restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-         ppblocks.process(3);
-         ////////////////////////////////////////////////////////////////////////////
-      }
-      ////set connectors
-      SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolator());
-      dynamicPointerCast<CompressibleOffsetMomentsInterpolator>(iProcessor)->setBulkViscosity(nuLB, bulckViscosity);
-      SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-      grid->accept(setConnsVisitor);
-
-      //bcVisitor should be accept after initialization!!!!
-      grid->accept(bcVisitor);
-      if (myid == 0) UBLOG(logINFO, "grid->accept(bcVisitor):end");
-
-      ////sponge layer
-      GbCuboid3DPtr spongeLayerX1max(new GbCuboid3D(g_maxX1 - 0.35, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-      if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut + "/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance());
-      SpongeLayerBlockVisitor slVisitorX1max(spongeLayerX1max, spKernel, nuLB, D3Q27System::E);
-      grid->accept(slVisitorX1max);
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      std::shared_ptr<NUPSCounterCoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm));
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep, outTimeStart));
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 9");
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-
-      SPtr<WriteMacroscopicQuantitiesCoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-      SPtr<GbObject3D> bbBox(new GbCuboid3D(g_minX1-blockLength, (g_maxX2-g_minX2)/2.0, g_minX3-blockLength, g_maxX1+blockLength, (g_maxX2-g_minX2)/2.0+deltaXcoarse, g_maxX3+blockLength));
-      if (myid==0) GbSystem3D::writeGeoObject(bbBox.get(), pathOut+"/geo/bbBox", WbWriterVtkXmlASCII::getInstance());
-      SPtr<WriteMQFromSelectionCoProcessor> writeMQSelectCoProcessor(new WriteMQFromSelectionCoProcessor(grid, stepSch, bbBox, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-      SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop));
-      SPtr<TimeAveragedValuesCoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,
-         TimeAveragedValuesCoProcessor::Density | TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations));
-      tav->setWithGhostLayer(true);
-
-	  //set microfons
-	  SPtr<UbScheduler> stepMV(new UbScheduler(1, 0, 1000000));
-	  SPtr<MicrophoneArrayCoProcessor> micCoProcessor(new MicrophoneArrayCoProcessor(grid, stepSch, pathOut, comm));
-	  double offsetX1 = 0.017;
-	  double offsetZ1 = 0.11375;
-	  std::vector<UbTupleFloat3> nodes;
-	  for (int i = 0; i <= 10; i++)
-	  {
-		  micCoProcessor->addMicrophone(Vector3D(0.3 + deltaXcoarse + offsetX1 * double(i), 0.015, 0.0 - offsetZ1 * double(i)));
-		  nodes.push_back(UbTupleFloat3(float(0.3 + deltaXcoarse + offsetX1 * float(i)), float(0.015), float(0.0 - offsetZ1 * float(i))));
-	  }
-	  double offsetX2 = 0.1;
-	  for (int i = 0; i <= 6; i++)
-	  {
-		  micCoProcessor->addMicrophone(Vector3D(0.17 + offsetX2 * double(i), 0.015, -1.1375));
-		  nodes.push_back(UbTupleFloat3(float(0.17 + offsetX2 * float(i)), float(0.015), float(-1.1375)));
-	  }
-
-	  if (myid == 0) WbWriterVtkXmlBinary::getInstance()->writeNodes(pathOut + "/geo/mic", nodes);
-	  ///////////////////////////////////////////////////////////
-
-      //omp_set_num_threads(numOfThreads);
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-      SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime));
-      calculator->addCoProcessor(nupsCoProcessor);
-	  calculator->addCoProcessor(micCoProcessor);
-      calculator->addCoProcessor(restartCoProcessor);
-      calculator->addCoProcessor(writeMQSelectCoProcessor);
-      calculator->addCoProcessor(writeMQCoProcessor);
-      calculator->addCoProcessor(tav);
-
-      if (myid==0) UBLOG(logINFO, "Simulation-start");
-      calculator->calculate();
-      if (myid==0) UBLOG(logINFO, "Simulation-end");
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 10");
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-   }
-   catch (std::exception& e)
-   {
-      cerr<<e.what()<<endl<<flush;
-   }
-   catch (std::string& s)
-   {
-      cerr<<s<<endl;
-   }
-   catch (...)
-   {
-      cerr<<"unknown exception"<<endl;
-   }
-
-}
-
-
-int main(int argc, char* argv[])
-{
-
-   if (argv!=NULL)
-   {
-      if (argv[1]!=NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout<<"Configuration file must be set!: "<<argv[0]<<" <config file>"<<endl<<std::flush;
-      }
-   }
-
-   //test_run();
-
-   //SuperMUC
-   //MPI_Finalize();
-
-   return 0;
-}
-
diff --git a/apps/cpu/DLR-F16-Solid/CMakeLists.txt b/apps/cpu/DLR-F16-Solid/CMakeLists.txt
deleted file mode 100644
index f7a6686b451de9e72a280b6f52287ba70e8df092..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16-Solid/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(f16solid)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake)  
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(f16solid BINARY)
diff --git a/apps/cpu/DLR-F16-Solid/f16-solid-coarse.cfg b/apps/cpu/DLR-F16-Solid/f16-solid-coarse.cfg
deleted file mode 100644
index 1539187c8acb6a8a7610d4e43541dfcfe744baa6..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16-Solid/f16-solid-coarse.cfg
+++ /dev/null
@@ -1,63 +0,0 @@
-pathOut = d:/temp/DLR-F16-Solid-L1-BV
-pathGeo = d:/Projects/SFB880/DLR-F16/Geometry
-
-fngFileWhole1 = F16_broad_Quad_noTape_full.stl
-fngFileWhole2 = F16_broad_Quad_thickTape_full.stl
-
-accuracy = 0
-
-reinit = false
-pathReInit = /work/koskuche/DLR-F16_L1
-stepReInit = 10000
-
-numOfThreads = 8
-availMem = 10e9
-
-logToFile = false
-
-#x1min x1max x2min x2max x3min x3max [m]
-#boundingBox = -0.90 2.1 0.0 0.03 -0.66 0.66
-#boundingBox = -0.90 1.5 0.0 0.03 -0.66 0.66
-#boundingBox = -0.125 0.45 0.0 0.03 -1.05 0.1
-
-#boundingBox = -0.125 1.5 0.0 0.03 -1.1 0.3
-#boundingBox = -0.90 1.5 0.0 0.03 -1.05 0.66
-#boundingBox = -0.30 2.52 0.0 0.03 -2.08 2.08
-boundingBox = -0.3 1.17 0.0 0.03 -1.17 1.17
-
-blockNx = 10 10 10
-
-refineLevel = 1
-
-#deltaXfine = 0.003 #level 0
-deltaXfine = 0.0015 #level 1
-#deltaXfine = 0.00075 #level 2
-#deltaXfine = 0.000375 #level 3
-#deltaXfine = 0.0001875 #level 4
-#deltaXfine = 0.00009375 #level 5
-#deltaXfine = 0.000046875 #level 6
-#deltaXfine = 0.0000234375 #level 7
-
-startDistance = -1.0e-3
-refineDistance = 0.6e-3
-#refineDistance = 30.0e-3
-
-writeBlocksToFile = false
-
-newStart = false
-restartStep = 15010
-
-cpStep = 10
-cpStart = 10
-
-outTimeStep = 10
-outTimeStart = 10
-
-timeAvStart = 14000
-timeAvStop  = 15000
-
-nupsStep = 100 100 10000000
-
-endTime = 15020
-
-
diff --git a/apps/cpu/DLR-F16-Solid/f16-solid.cfg b/apps/cpu/DLR-F16-Solid/f16-solid.cfg
deleted file mode 100644
index 4ea69bbd461f84c50a109926c03bc8a188eb44a7..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16-Solid/f16-solid.cfg
+++ /dev/null
@@ -1,56 +0,0 @@
-pathOut = d:/temp/DLR-F16-Solid
-pathGeo = d:/Projects/SFB880/DLR-F16/Geometry
-
-fngFileWhole1 = F16_broad_Quad_noTape_full.stl
-fngFileWhole2 = F16_broad_Quad_thickTape_full.stl
-
-accuracy = 1
-
-numOfThreads = 4
-availMem = 10e9
-
-logToFile = false
-
-#x1min x1max x2min x2max x3min x3max [m]
-#boundingBox = -0.3 1.17 0.0 0.03 -1.17 1.17
-boundingBox = -0.3 1.17 0.0 0.03 -0.7 0.7
-
-blockNx = 10 10 10
-
-refineLevel = 3
-
-#deltaXfine = 0.003 #level 0
-#deltaXfine = 0.0015 #level 1
-#deltaXfine = 0.00075 #level 2
-#deltaXfine = 0.000375 #level 3
-#deltaXfine = 0.0001875 #level 4
-deltaXfine = 0.00009375  #level 5
-#deltaXfine = 0.000046875 #level 6
-#deltaXfine = 0.0000234375 #level 7
-
-startDistance = -1.0e-3
-refineDistance = 0.6e-3
-#refineDistance = 1e-3
-
-writeBlocksToFile = true
-
-newStart = true
-restartStep = 238000
-
-cpStep = 1000
-cpStart = 3000
-
-outTimeStep = 100
-outTimeStart = 100
-
-endTime = 238000
-
-
-#Cp
-pcpStart = 1000000
-pcpStop  = 1000000
-
-timeAvStart = 100
-timeAvStop  = 40000
-
-nupsStep = 1000 1000 10000000
diff --git a/apps/cpu/DLR-F16-Solid/f16.cpp b/apps/cpu/DLR-F16-Solid/f16.cpp
deleted file mode 100644
index cf08ef73aac0d8279aa84e62b717700017163a7f..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16-Solid/f16.cpp
+++ /dev/null
@@ -1,755 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <PointerDefinitions.h>
-#include "VirtualFluids.h"
-#include <omp.h>
-using namespace std;
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathOut = config.getValue<string>("pathOut");
-      string          pathGeo = config.getValue<string>("pathGeo");
-      string          fngFileWhole1 = config.getValue<string>("fngFileWhole1");
-      string          fngFileWhole2 = config.getValue<string>("fngFileWhole2");
-      //string          tapeFile = config.getValue<string>("tapeFile");
-      int             accuracy = config.getValue<int>("accuracy");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      vector<int>     blockNx = config.getVector<int>("blockNx");
-      vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      double          restartStep = config.getValue<double>("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      int             endTime = config.getValue<int>("endTime");
-      double          outTimeStep = config.getValue<double>("outTimeStep");
-      double          outTimeStart = config.getValue<double>("outTimeStart");
-      double          availMem = config.getValue<double>("availMem");
-      int             refineLevel = config.getValue<int>("refineLevel");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      double          deltaXfine = config.getValue<double>("deltaXfine");
-      double          refineDistance = config.getValue<double>("refineDistance");
-      double          startDistance = config.getValue<double>("startDistance");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-      bool            newStart = config.getValue<bool>("newStart");
-      bool            writeBlocks = config.getValue<bool>("writeBlocks");
-      //string          pathReInit = config.getValue<string>("pathReInit");
-      //int             stepReInit = config.getValue<int>("stepReInit");
-      //bool            reinit = config.getValue<bool>("reinit");
-
-      //double          pcpStart = config.getValue<double>("pcpStart");
-      //double          pcpStop  = config.getValue<double>("pcpStop");
-
-      double          timeAvStart       = config.getValue<double>("timeAvStart");
-      double          timeAvStop        = config.getValue<double>("timeAvStop");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid==0)
-         {
-            const char* str = pathOut.c_str();
-            mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
-         }
-#endif 
-
-         if (myid==0)
-         {
-            stringstream logFilename;
-            logFilename<<pathOut+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 1");
-         UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-
-
-      //the geometry is in mm
-
-      double g_minX1 = boundingBox[0];//*1000.0;
-      double g_minX2 = boundingBox[2];//*1000.0;
-      double g_minX3 = boundingBox[4];//*1000.0;
-      double g_maxX1 = boundingBox[1];//*1000.0;
-      double g_maxX2 = boundingBox[3];//*1000.0;
-      double g_maxX3 = boundingBox[5];//*1000.0;
-      //deltaXfine *=1000.0;
-
-      //////////////////////////////////////////////////////////////////////////
-      double deltaXcoarse = deltaXfine*(double)(1<<refineLevel);
-      //////////////////////////////////////////////////////////////////////////
-      double blockLength = (double)blockNx[0]*deltaXcoarse;
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double Re = 1e6;
-
-      double rhoLB = 0.0;
-      double rhoReal = 1.2041; //(kg/m3)
-      //double nueReal = 153.5e-7; //m^2/s
-      double uReal = 50; //m/s
-      double lReal = 0.3;//m
-      //double uReal = Re*nueReal / lReal;
-      double nuReal = (uReal*lReal)/Re; //m^2/s
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double Ma = 0.15;//Ma-Real!
-      double csReal = uReal / Ma;
-      double hLB = lReal / deltaXcoarse;
-
-      LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB);
-
-      double uLB = uReal   * unitConverter.getFactorVelocityWToLb();
-      double nuLB = nuReal * unitConverter.getFactorViscosityWToLb();
-      double lLB = lReal/deltaXcoarse;
-      //double nuLB = (uLB*lLB)/Re; //0.005;
-      //double nuLB = 0.005;
-
-      if (myid==0) UBLOG(logINFO, unitConverter.toString());
-     
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      //SPtr<GbObject3D> mic6(new GbCuboid3D(0.3, 0.015, -0.46+4.25*deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -0.46+5.25*deltaXcoarse));
-      //if (myid==0) GbSystem3D::writeGeoObject(mic6.get(), pathOut+"/geo/mic6", WbWriterVtkXmlBinary::getInstance());
-
-      //GbCuboid3DPtr spongeLayerX1max(new GbCuboid3D(g_maxX1-0.35, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-      //if (myid==0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut+"/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance());
-      //return;
-
-
-      ////////////////////////////////////////////////////////////////////////
-      //Grid
-      //////////////////////////////////////////////////////////////////////////
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      //BC adapters
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-
-      SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter());
-      slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm()));
-
-      mu::Parser fct;
-      fct.SetExpr("U");
-      fct.DefineConst("U", uLB);
-      SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-      velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm()));
-
-      //fct.SetExpr("U");
-      //fct.DefineConst("U", 0.01);
-      //SPtr<BCAdapter> velBCAdapterOut(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-      //velBCAdapterOut->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
-
-      SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rhoLB));
-      outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm()));
-
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-      bcVisitor.addBC(velBCAdapter);
-      bcVisitor.addBC(outflowBCAdapter);
-
-      SPtr<BCProcessor> bcProc;
-      bcProc = SPtr<BCProcessor>(new BCProcessor());
-
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      //t = 21.8, P = 1.0145 atm, Relative Humidity = 45.8, Second Coefficient of Viscosity = 3120
-      //Ash, R. L., Zuckerwar, A. J., & Zheng, Z. (1991). Second coefficient of viscosity in air.
-      double bulckViscosity = 3120 * nuLB;
-      dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(bulckViscosity);
-
-      kernel->setBCProcessor(bcProc);
-
-      SPtr<LBMKernel> spKernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel());
-      spKernel->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      //SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-      //SPtr<MPIIORestartCoProcessor> restartCoProcessor(new MPIIORestartCoProcessor(grid, rSch, pathOut, comm));
-      //restartCoProcessor->setLBMKernel(kernel);
-      //restartCoProcessor->setBCProcessor(bcProc);
-
-      SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathOut+"/mig", comm));
-      migCoProcessor->setLBMKernel(kernel);
-      migCoProcessor->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 2");
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "Parameters:");
-         UBLOG(logINFO, "* Re                  = "<<Re);
-         UBLOG(logINFO, "* Ma                  = "<<Ma);
-         UBLOG(logINFO, "* velocity (uReal)    = "<<uReal<<" m/s");
-         UBLOG(logINFO, "* viscosity (nuReal)  = "<<nuReal<<" m^2/s");
-         UBLOG(logINFO, "* chord length (lReal)= "<<lReal<<" m");
-         UBLOG(logINFO, "* velocity LB (uLB)   = "<<uLB);
-         UBLOG(logINFO, "* viscosity LB (nuLB) = "<<nuLB);
-         UBLOG(logINFO, "* chord length (l_LB) = "<<lLB<<" dx_base");
-         UBLOG(logINFO, "* dx_base             = "<<deltaXcoarse<<" m");
-         UBLOG(logINFO, "* dx_refine           = "<<deltaXfine<<" m");
-         UBLOG(logINFO, "* blocknx             = "<<blockNx[0]<<"x"<<blockNx[1]<<"x"<<blockNx[2]);
-         UBLOG(logINFO, "* refineDistance      = "<<refineDistance);
-         UBLOG(logINFO, "* number of levels    = "<<refineLevel+1);
-         UBLOG(logINFO, "* number of threads   = "<<numOfThreads);
-         UBLOG(logINFO, "* number of processes = "<<comm->getNumberOfProcesses());
-         UBLOG(logINFO, "* path = "<<pathOut);
-      }
-
-      if (newStart)
-      {
-         ////////////////////////////////////////////////////////////////////////
-         //define grid
-         //////////////////////////////////////////////////////////////////////////
-         grid->setDeltaX(deltaXcoarse);
-         grid->setBlockNX(blockNx[0], blockNx[1], blockNx[2]);
-
-         SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(true);
-         grid->setPeriodicX3(false);
-
-
-         //GbCuboid3DPtr spongeLayerX1max(new GbCuboid3D(g_maxX1-0.4, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         //if (myid==0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut+"/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance());
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Preprocessing - start");
-         }
-
-         {
-            WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppblocks.process(0);
-         }
-         
-         //SPtr<GbObject3D> fngMeshWhole(new GbCylinder3D(15.0, 0.0, 0.0, 15.0, 100.0, 0.0, 25.0));
-         //GbSystem3D::writeGeoObject(fngMeshWhole.get(), pathOut + "/geo/fngMeshWholeCylinder", WbWriterVtkXmlBinary::getInstance());
-
-         SPtr<GbTriFaceMesh3D> fngMeshWhole1;
-         if (myid==0) UBLOG(logINFO, "Read fngFileWhole1:start");
-         fngMeshWhole1 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileWhole1, "fngMeshWhole1", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-         if (myid==0) UBLOG(logINFO, "Read fngFileWhole1:end");
-         fngMeshWhole1->rotate(0.0, 0.5, 0.0);
-         //fngMeshWhole->scale(1e3,1e3,1e3);
-         //fngMeshWhole->translate(1.932008e-5-149.867,-0.03-49.95,-0.0172298-1.32814);
-         if (myid==0) GbSystem3D::writeGeoObject(fngMeshWhole1.get(), pathOut+"/geo/fngMeshWhole1", WbWriterVtkXmlBinary::getInstance());
-
-         SPtr<GbTriFaceMesh3D> fngMeshWhole2;
-         if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:start");
-         fngMeshWhole2 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileWhole2, "fngMeshWhole2", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-         if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:end");
-         fngMeshWhole2->rotate(0.0, 0.5, 0.0);
-         //fngMeshWhole->scale(1e3,1e3,1e3);
-         //fngMeshWhole->translate(1.932008e-5-149.867,-0.03-49.95,-0.0172298-1.32814);
-         if (myid==0) GbSystem3D::writeGeoObject(fngMeshWhole2.get(), pathOut+"/geo/fngMeshWhole2", WbWriterVtkXmlBinary::getInstance());
-
-         //SPtr<GbTriFaceMesh3D> tapeMesh;
-         //if (myid==0) UBLOG(logINFO, "Read fngFileWhole:start");
-         //tapeMesh = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+tapeFile, "tapeMesh", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-         //if (myid==0) UBLOG(logINFO, "Read fngFileWhole:end");
-         //tapeMesh->rotate(0.0, 0.5, 0.0);
-         ////fngMeshWhole->scale(1e3,1e3,1e3);
-         //tapeMesh->translate(0.0,0.0,-0.001085);
-         //if (myid==0) GbSystem3D::writeGeoObject(tapeMesh.get(), pathOut+"/geo/tapeMesh", WbWriterVtkXmlBinary::getInstance());
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 3");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-         //////////////////////////////////////////////////////////////////////////
-         SPtr<Interactor3D> fngIntrWhole1 = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole1, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy));//, Interactor3D::POINTS));
-         SPtr<Interactor3D> fngIntrWhole2 = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole2, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy));
-
-         if (refineLevel>0 && myid==0 && writeBlocks)
-         {
-            if (myid==0) UBLOG(logINFO, "Refinement - start");
-            int rank = grid->getRank();
-            grid->setRank(0);
-
-
-            int level;
-
-            level = 1;
-            if (refineLevel - level >= 0)
-            {
-               dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, refineDistance);
-               //SPtr<GbObject3D> refCylinderL1(new GbCylinder3D(0.3, -0.03, 0.001, 0.3, 0.06, 0.001, 0.1));
-               //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL1(refCylinderL1, level);
-               //grid->accept(refVisitorCylinderL1);
-
-               //SPtr<GbObject3D> refBoxL1(new GbCuboid3D(0.15, -0.03, -0.035, 0.45, 0.06, 0.035));
-               //if (myid==0) GbSystem3D::writeGeoObject(refBoxL1.get(), pathOut+"/geo/refBoxL1", WbWriterVtkXmlASCII::getInstance());
-               //RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL1(refBoxL1, level);
-               //grid->accept(refVisitorBoxL1);
-            }
-            
-            level = 2;
-            if (refineLevel - level >= 0)
-            {
-               dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, refineDistance);
-            }
-
-            level = 3;
-            if (refineLevel - level >= 0)
-            {
-               //SPtr<GbObject3D> refCylinderL1(new GbCylinder3D(0.015, -0.03, 0.0, 0.015, 0.06, 0.0, 0.03));
-               //GbSystem3D::writeGeoObject(refCylinderL1.get(), pathOut + "/geo/refCylinderL1", WbWriterVtkXmlBinary::getInstance());
-               //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL1(refCylinderL1, level);
-               //grid->accept(refVisitorCylinderL1);
-
-               ////SPtr<GbObject3D> refBoxL1(new GbCuboid3D(0.015, -0.03, -0.03, 1.100, 0.06, 0.03));
-               ////SPtr<GbObject3D> refBoxL1(new GbCuboid3D(0.12, -0.02625, -0.03, 1.0, 0.06, 0.03));
-               //SPtr<GbObject3D> refBoxL1(new GbCuboid3D(0.12, -0.02625, -0.03, 0.34, 0.06, 0.03));
-               //if (myid==0) GbSystem3D::writeGeoObject(refBoxL1.get(), pathOut+"/geo/refBoxL1", WbWriterVtkXmlASCII::getInstance());
-               //RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL1(refBoxL1, level);
-               //grid->accept(refVisitorBoxL1);
-
-               //SPtr<GbObject3D> refCylinderL1(new GbCylinder3D(0.3, -0.03, 0.001, 0.3, 0.06, 0.001, 0.03));
-               //GbSystem3D::writeGeoObject(refCylinderL1.get(), pathOut + "/geo/refCylinderL1", WbWriterVtkXmlBinary::getInstance());
-               //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL1(refCylinderL1, level);
-               //grid->accept(refVisitorCylinderL1);
-
-               SPtr<GbObject3D> refBoxL2(new GbCuboid3D(0.15, -0.03, -0.015, 0.42, 0.06, 0.015));
-               if (myid==0) GbSystem3D::writeGeoObject(refBoxL2.get(), pathOut+"/geo/refBoxL2", WbWriterVtkXmlASCII::getInstance());
-               RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL2(refBoxL2, level);
-               grid->accept(refVisitorBoxL2);
-
-               //dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, 24.0*refineDistance);
-               dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, 12.0*refineDistance);
-            }
-
-            //level = 4;
-            //if (refineLevel - level >= 0)
-            //{
-            //   //SPtr<GbObject3D> refCylinderL2(new GbCylinder3D(0.015, -0.03, 0.0, 0.015, 0.06, 0.0, 0.03));
-            //   //GbSystem3D::writeGeoObject(refCylinderL2.get(), pathOut + "/geo/refCylinderL2", WbWriterVtkXmlBinary::getInstance());
-            //   //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL2(refCylinderL2, level);
-            //   //grid->accept(refVisitorCylinderL2);
-
-            //   //SPtr<GbObject3D> refBoxL2(new GbCuboid3D(0.15, -0.03, -0.015, 0.7, 0.06, 0.015));
-            //   SPtr<GbObject3D> refBoxL2(new GbCuboid3D(0.15, -0.03, -0.015, 0.42, 0.06, 0.015));
-            //   if (myid==0) GbSystem3D::writeGeoObject(refBoxL2.get(), pathOut+"/geo/refBoxL2", WbWriterVtkXmlASCII::getInstance());
-            //   RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL2(refBoxL2, level);
-            //   grid->accept(refVisitorBoxL2);
-
-            //   //SPtr<GbObject3D> refCylinderL1(new GbCylinder3D(0.3, -0.03, 0.001, 0.3, 0.06, 0.001, 0.03));
-            //   //GbSystem3D::writeGeoObject(refCylinderL1.get(), pathOut + "/geo/refCylinderL1", WbWriterVtkXmlBinary::getInstance());
-            //   //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL1(refCylinderL1, level);
-            //   //grid->accept(refVisitorCylinderL1);
-
-            //   dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, 6.0*refineDistance);
-            //}
-
-            //level = 5;
-            //if (refineLevel - level >= 0)
-            //{
-            //   //SPtr<GbObject3D> refCylinderL3(new GbCylinder3D(0.015, -0.03, 0.0, 0.015, 0.06, 0.0, 0.025));
-            //   //GbSystem3D::writeGeoObject(refCylinderL3.get(), pathOut + "/geo/refCylinderL3", WbWriterVtkXmlBinary::getInstance());
-            //   //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL3(refCylinderL3, level);
-            //   //grid->accept(refVisitorCylinderL3);
-
-            //   //SPtr<GbObject3D> refBoxL3(new GbCuboid3D(0.15, -0.03, -0.010, 0.32, 0.06, 0.012));
-            //   //if (myid==0) GbSystem3D::writeGeoObject(refBoxL3.get(), pathOut+"/geo/refBoxL3", WbWriterVtkXmlASCII::getInstance());
-            //   //RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL3(refBoxL3, level);
-            //   //grid->accept(refVisitorBoxL3);
-
-            //   dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, 6.0*refineDistance);
-            //}
-
-            //level = 6;
-            //if (refineLevel - level >= 0)
-            //{
-            //   //SPtr<GbObject3D> refBoxL4(new GbCuboid3D(0.15, -0.03, -0.005, 0.31, 0.06, 0.01));
-            //   //if (myid==0) GbSystem3D::writeGeoObject(refBoxL4.get(), pathOut+"/geo/refBoxL4", WbWriterVtkXmlASCII::getInstance());
-            //   //RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL4(refBoxL4, level);
-            //   //grid->accept(refVisitorBoxL4);
-
-            //   dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, 3.0*refineDistance);
-            //}
-
-            //level = 7;
-            //if (refineLevel - level >= 0)
-            //{
-            //   dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, refineDistance);
-            //}
-
-            //dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(refineLevel, startDistance, refineDistance);
-            //
-
-            /////delete solid blocks
-            if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-
-            SetSolidBlocksBlockVisitor v(fngIntrWhole1);
-            grid->accept(v);
-            std::vector<SPtr<Block3D>>& sb = fngIntrWhole1->getSolidBlockSet();
-            for (SPtr<Block3D> block : sb)
-            {
-               grid->deleteBlock(block);
-            }
-            fngIntrWhole1->removeSolidBlocks();
-            fngIntrWhole1->removeBcBlocks();
-
-            //SPtr<GbObject3D> delBox(new GbCuboid3D(0.03, -0.03, -0.010, 0.2, 0.06, 0.012));
-            //if (myid==0) GbSystem3D::writeGeoObject(delBox.get(), pathOut+"/geo/delBox", WbWriterVtkXmlASCII::getInstance());
-            //SPtr<D3Q27Interactor> delBoxInter(new D3Q27Interactor(delBox, grid, noSlipBCAdapter, Interactor3D::SOLID));
-            //SetSolidBlockVisitor v(delBoxInter, BlockType::SOLID);
-            //grid->accept(v);
-            //std::vector<SPtr<Block3D>>& sb = delBoxInter->getSolidBlockSet();
-            //for (SPtr<Block3D> block : sb)
-            //{
-            //   grid->deleteBlock(block);
-            //}
-            //delBoxInter->removeSolidBlocks();
-            //delBoxInter->removeBcBlocks();
-
-            if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-            ////////////////////////////////////////
-
-            {
-               WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-               ppblocks.process(1);
-            }
-
-            grid->setRank(rank);
-
-            RatioBlockVisitor ratioVisitor(refineLevel);
-            CheckRatioBlockVisitor checkRatio(refineLevel);
-            int count = 0;
-
-            do {
-               if (myid==0) UBLOG(logINFO, "ratioVisitor - start");
-               grid->accept(ratioVisitor);
-               if (myid==0) UBLOG(logINFO, "ratioVisitor - end");
-               if (myid==0) UBLOG(logINFO, "checkRatio - start");
-               checkRatio.resetState();
-               grid->accept(checkRatio);
-               if (myid==0) UBLOG(logINFO, "checkRatio - end");
-               if (myid==0) UBLOG(logINFO, "count = "<<count++<<" state = "<<checkRatio.getState());
-            } while (!checkRatio.getState());
-
-
-            {
-               WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-               ppblocks.process(2);
-            }
-
-            OverlapBlockVisitor overlapVisitor(refineLevel, false);
-            grid->accept(overlapVisitor);
-
-            if (myid==0) UBLOG(logINFO, "Refinement - end");
-         }
-         //else
-         //{
-         //   migCoProcessor->readBlocks(0);
-         //}
-         grid->updateDistributedBlocks(comm);
-
-         //if (writeBlocks)
-         //{
-         //   migCoProcessor->writeBlocks(0);
-         //}
-
-         std::vector<int> dirs;
-         for (int i = D3Q27System::E; i<=D3Q27System::TS; i++)
-         {
-            dirs.push_back(i);
-         }
-         SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-         grid->accept(interDirsVisitor);
-
-         //walls
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         //wall interactors
-         SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, velBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathOut+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         //inflow
-         SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //outflow
-         SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, MetisPartitioner::RECURSIVE));
-         //std::dynamic_pointer_cast<MetisPartitioningGridVisitor>(metisVisitor)->setNumberOfProcesses(4000);
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(inflowIntr);
-         intHelper.addInteractor(outflowIntr);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(fngIntrWhole2);
-         intHelper.selectBlocks();
-
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 4");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-         //////////////////////////////////////
-
-         {
-            WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppblocks.process(3);
-         }
-
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blockNx[0])* (unsigned long long)(blockNx[1])* (unsigned long long)(blockNx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blockNx[0]+ghostLayer) * (blockNx[1]+ghostLayer) * (blockNx[2]+ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27*sizeof(double)+sizeof(int)+sizeof(float)*4));
-         double needMem = needMemAll/double(comm->getNumberOfProcesses());
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Number of blocks = "<<numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = "<<numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level<=maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level "<<level<<" = "<<nobl);
-               UBLOG(logINFO, "Number of nodes for level "<<level<<" = "<<nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = "<<needMemAll<<" bytes");
-            UBLOG(logINFO, "Necessary memory per process = "<<needMem<<" bytes");
-            UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes");
-         }
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (myid==0) UBLOG(logINFO, "SetKernelBlockVisitor:end");
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 5");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-         if (refineLevel>0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         if (myid==0) UBLOG(logINFO, "SetUndefinedNodesBlockVisitor:end");
-
-         //BC
-         intHelper.setBC();
-
-        
-         if (myid==0) UBLOG(logINFO, "intHelper.setBC():end");
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 6");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-         //initialization of distributions
-         InitDistributionsBlockVisitor initVisitor;
-         initVisitor.setVx1(fct);
-         grid->accept(initVisitor);
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 7");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-         //Post process
-         {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppgeo.process(0);
-         }
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 8");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-         if (myid==0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         //restartCoProcessor->restart((int)restartStep);
-         migCoProcessor->restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-         ////////////////////////////////////////////////////////////////////////////
-         WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-         ppblocks.process(0);
-         ////////////////////////////////////////////////////////////////////////////
-      }
-      
-      ////set connectors
-      SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolator());
-      dynamicPointerCast<CompressibleOffsetMomentsInterpolator>(iProcessor)->setBulkViscosity(nuLB, bulckViscosity);
-      SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-      grid->accept(setConnsVisitor);
-
-      //bcVisitor should be accept after initialization!!!!
-      grid->accept(bcVisitor);
-      if (myid == 0) UBLOG(logINFO, "grid->accept(bcVisitor):end");
-
-      ////sponge layer
-      GbCuboid3DPtr spongeLayerX1max(new GbCuboid3D(g_maxX1-0.35, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-      if (myid==0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut+"/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance());
-      SpongeLayerBlockVisitor slVisitorX1max(spongeLayerX1max, spKernel, nuLB, D3Q27System::E);
-      grid->accept(slVisitorX1max);
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      std::shared_ptr<CoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm));
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep, outTimeStart));
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 9");
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-
-      SPtr<CoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-      SPtr<GbObject3D> bbBox(new GbCuboid3D(g_minX1-blockLength, (g_maxX2-g_minX2)/2.0, g_minX3-blockLength, g_maxX1+blockLength, (g_maxX2-g_minX2)/2.0+deltaXcoarse, g_maxX3+blockLength));
-      if (myid==0) GbSystem3D::writeGeoObject(bbBox.get(), pathOut+"/geo/bbBox", WbWriterVtkXmlASCII::getInstance());
-      SPtr<WriteMQFromSelectionCoProcessor> writeMQSelectCoProcessor(new WriteMQFromSelectionCoProcessor(grid, stepSch, bbBox, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-      SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop));
-      SPtr<TimeAveragedValuesCoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,
-         TimeAveragedValuesCoProcessor::Density | TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations));
-      tav->setWithGhostLayer(true);
-
-      SPtr<UbScheduler> stepMV(new UbScheduler(1, 0, 1000000));
-      SPtr<MicrophoneArrayCoProcessor> micCoProcessor(new MicrophoneArrayCoProcessor(grid, stepSch, pathOut, comm) );
-      double offsetX1 = 0.017;
-      double offsetZ1 = 0.11375;
-      std::vector<UbTupleFloat3> nodes;
-      //for (int i = 0; i <= 10; i++)
-      for (int i = 0; i <= 6; i++)
-      {
-         micCoProcessor->addMicrophone(Vector3D(0.3+deltaXcoarse+offsetX1*double(i), 0.015, 0.0-offsetZ1*double(i)));
-         nodes.push_back(UbTupleFloat3(float(0.3+deltaXcoarse+offsetX1*float(i)), float(0.015), float(0.0-offsetZ1*float(i))));
-      }
-      //double offsetX2 = 0.1;
-      //for (int i = 0; i <= 6; i++)
-      //{
-      //   micCoProcessor->addMicrophone(Vector3D(0.17+offsetX2*double(i), 0.015, -1.1375));
-      //   nodes.push_back(UbTupleFloat3(float(0.17+offsetX2*float(i)), float(0.015), float(-1.1375)));
-      //}
-      
-      if (myid==0) WbWriterVtkXmlBinary::getInstance()->writeNodes(pathOut+"/geo/mic", nodes);
-
-      //omp_set_num_threads(numOfThreads);
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-      SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime));
-      calculator->addCoProcessor(nupsCoProcessor);
-      calculator->addCoProcessor(micCoProcessor);
-      //calculator->addCoProcessor(restartCoProcessor);
-      calculator->addCoProcessor(migCoProcessor);
-      //calculator->addCoProcessor(writeMQSelectCoProcessor);
-      calculator->addCoProcessor(writeMQCoProcessor);
-      calculator->addCoProcessor(tav);
-
-
-      if (myid==0) UBLOG(logINFO, "Simulation-start");
-      calculator->calculate();
-      if (myid==0) UBLOG(logINFO, "Simulation-end");
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 10");
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-   }
-   catch (std::exception& e)
-   {
-      cerr<<e.what()<<endl<<flush;
-   }
-   catch (std::string& s)
-   {
-      cerr<<s<<endl;
-   }
-   catch (...)
-   {
-      cerr<<"unknown exception"<<endl;
-   }
-
-}
-
-
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-
-   if (argv!=NULL)
-   {
-      if (argv[1]!=NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout<<"Configuration file must be set!: "<<argv[0]<<" <config file>"<<endl<<std::flush;
-      }
-   }
-
-   //test_run();
-   
-   //SuperMUC
-   //MPI_Finalize();
-
-   return 0;
-}
-
diff --git a/apps/cpu/DLR-F16/Bombadil.cfg b/apps/cpu/DLR-F16/Bombadil.cfg
deleted file mode 100644
index f8b9ebd61b7f0b8f18bb6351dfd22acd70085800..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/Bombadil.cfg
+++ /dev/null
@@ -1,27 +0,0 @@
-pathOut = d:/temp/fng
-pathGeo = d:/Projects/SFB880/FNG/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian
-fngFileWhole = f16-ascii.stl
-fngFileBodyPart = f16-body-part-ascii.stl
-fngFileTrailingEdge = f16-trailing-edge-ascii.stl
-
-numOfThreads = 1
-availMem = 20e9
-refineLevel = 3
-blockNx = 16 16 16
-uLB = 0.1
-
-#x1min x1max x2min x2max x3min x3max [mm]
-boundingBox = -50 400 45 55 -60 80 
-deltaXfine = 0.1
-
-restartStep = 10000
-restartStepStart = 10000
-
-outTime = 1000
-endTime = 1000
-
-logToFile = false
-
-porousTralingEdge = false
-
-thinWall = false
\ No newline at end of file
diff --git a/apps/cpu/DLR-F16/CMakeLists.txt b/apps/cpu/DLR-F16/CMakeLists.txt
deleted file mode 100644
index 3ed3128e03a02a782427078f73ec49c5cca5d805..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(f16)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(f16 BINARY)
diff --git a/apps/cpu/DLR-F16/DLR-F16-Phoenix.cfg b/apps/cpu/DLR-F16/DLR-F16-Phoenix.cfg
deleted file mode 100644
index 2bb8dbd6935744104f3022d7186a84444d08f7e3..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/DLR-F16-Phoenix.cfg
+++ /dev/null
@@ -1,54 +0,0 @@
-pathOut = /home/koskuche/work/DLR-F16
-pathGeo = /home/koskuche/data/DLR-F16
-fngFileWhole = f16-ascii.stl
-#fngFileWhole = grundgeometrie-direkter-export.stl
-#fngFileWhole = grundgeometrie-mittel.stl
-
-#fngFileWhole = cylinder.ASCII.stl
-
-fngFileBodyPart = f16-body-part-ascii.stl
-fngFileTrailingEdge = f16-trailing-edge-ascii.stl
-zigZagTape = 2zackenbaender0.stl
-
-numOfThreads = 20
-availMem = 64e9
-refineLevel = 8
-blockNx = 7 6 7
-#blockNx = 21 6 13
-#blockNx = 294 12 247
-uLB = 0.1
-
-#x1min x1max x2min x2max x3min x3max [m]
-boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65
-#boundingBox = -0.1 0.60 0.035 0.065 -0.3 0.3
-#boundingBox = -10e-3 310e-3 0.035 0.065 -21e-3 21e-3
-
-#boundingBox = -0.255 0.27 0.035 0.065 -0.17 0.155
-#boundingBox = -0.255 0.27 0.035 0.185 -0.17 0.155
-
-#deltaXfine = 0.005 #level 0
-#deltaXfine = 0.0025 #level 1
-#deltaXfine = 0.00125 #level 2
-#deltaXfine = 0.000625 #level 3
-#deltaXfine = 0.0003125 #level 4
-#deltaXfine = 0.00015625 #level 5
-#deltaXfine = 0.000078125 #level 6
-#deltaXfine = 0.0000390625 #level 7
-deltaXfine = 0.00001953125 #level 8
-
-
-refineDistance = 0.1
-
-restartStep = 100
-restartStepStart = 100
-
-outTime = 100
-endTime = 100
-
-logToFile = true
-
-porousTralingEdge = false
-
-thinWall = false
-
-nupsStep = 10 10 10000000
diff --git a/apps/cpu/DLR-F16/F16Bombadil.cfg b/apps/cpu/DLR-F16/F16Bombadil.cfg
deleted file mode 100644
index 8dcb782d09ad79474841cfd0e9f803c59f0e49aa..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/F16Bombadil.cfg
+++ /dev/null
@@ -1,39 +0,0 @@
-pathOut = d:/temp/fngPorous
-pathGeo = d:/Projects/SFB880/FNG/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian
-#fngFileWhole = f16-ascii.stl
-fngFileWhole = grundgeometrie-direkter-export.stl
-fngFileBodyPart = f16-body-part-ascii.stl
-fngFileTrailingEdge = f16-trailing-edge-ascii.stl
-zigZagTape = 2zackenbaender0.stl
-
-numOfThreads = 4
-availMem = 20e9
-refineLevel = 8
-#blockNx = 8 4 8
-blockNx = 21 6 13
-uLB = 0.1
-
-#x1min x1max x2min x2max x3min x3max [m]
-boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65
-
-#deltaXfine = 0.001
-#deltaXfine = 0.00375
-#deltaXfine = 1.46484375e-5
-#deltaXfine = 0.00001171875
-#deltaXfine = 9.765625e-6
-deltaXfine = 19.53125e-6
-#10e-6
-
-refineDistance = 0.3
-
-restartStep = 10000
-restartStepStart = 10000
-
-outTime = 1
-endTime = 2000
-
-logToFile = false
-
-porousTralingEdge = true
-
-thinWall = false
diff --git a/apps/cpu/DLR-F16/F16BombadilTest.cfg b/apps/cpu/DLR-F16/F16BombadilTest.cfg
deleted file mode 100644
index 3902693838407cc490b95848e28ec76b3e81fa6e..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/F16BombadilTest.cfg
+++ /dev/null
@@ -1,51 +0,0 @@
-pathOut = d:/temp/f16Grid_x21
-pathGeo = d:/Projects/SFB880/DLR-F16/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian
-#fngFileWhole = f16-ascii.stl
-fngFileWhole = grundgeometrie-direkter-export.stl
-#fngFileWhole = grundgeometrie-mittel.stl
-fngFileBodyPart = f16-body-part-ascii.stl
-fngFileTrailingEdge = f16-trailing-edge-ascii.stl
-zigZagTape = 2zackenbaender0.stl
-
-numOfThreads = 4
-availMem = 10e9
-refineLevel = 8
-blockNx = 21 6 6
-#blockNx = 21 6 13
-#blockNx = 294 12 247
-uLB = 0.1
-
-#x1min x1max x2min x2max x3min x3max [m]
-boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65
-#boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65048
-#boundingBox = -0.1 0.60 0.035 0.065 -0.3 0.3
-#boundingBox = -10e-3 310e-3 0.035 0.065 -21e-3 21e-3
-
-#deltaXfine = 0.005 #level 0
-#deltaXfine = 0.0025 #level 1
-#deltaXfine = 0.00125 #level 2
-#deltaXfine = 0.000625 #level 3
-#deltaXfine = 0.0003125 #level 4
-#deltaXfine = 0.00015625 #level 5
-#deltaXfine = 0.000078125 #level 6
-#deltaXfine = 0.0000390625 #level 7
-deltaXfine = 0.00001953125 #level 8
-
-
-refineDistance = 0.3
-
-restartStep = 100000
-restartStepStart = 100000
-
-outTime = 1000
-endTime = 200000
-
-logToFile = false
-
-porousTralingEdge = false
-
-thinWall = false
-
-testBox=false
-
-nupsStep = 10 10 10000000
\ No newline at end of file
diff --git a/apps/cpu/DLR-F16/F16BombadilTest10e-6.cfg b/apps/cpu/DLR-F16/F16BombadilTest10e-6.cfg
deleted file mode 100644
index a694947ec9dc141fdb84d310ea0868d47c3dbe56..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/F16BombadilTest10e-6.cfg
+++ /dev/null
@@ -1,72 +0,0 @@
-pathOut = d:/temp/DLR-F16
-pathGeo = d:/Projects/SFB880/DLR-F16/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian
-#fngFileWhole = f16-ascii.stl
-fngFileWhole = grundgeometrie-direkter-export.stl
-#fngFileWhole = grundgeometrie-mittel.stl
-fngFileBodyPart = f16-body-part-ascii.stl
-fngFileTrailingEdge = f16-trailing-edge-ascii.stl
-zigZagTape = 2zackenbaender0.stl
-
-numOfThreads = 1
-availMem = 13e9
-refineLevel = 9 #10
-#blockNx = 7 8 8
-#blockNx = 7 6 7
-blockNx = 21 6 13
-uLB = 0.1
-
-#x1min x1max x2min x2max x3min x3max [m]
-boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65
-
-#boundingBox = -0.90 1.1992 0.035 0.065 -0.65 0.65
-#boundingBox = -0.1 0.635 0.035 0.065 -0.3 0.3
-#boundingBox = -10e-3 310e-3 0.035 0.065 -21e-3 25e-3
-
-#boundingBox = 0 65.6e-3 35e-3 75e-3 -30e-3 0
-
-
-#deltaXfine = 5120e-6 #level 0
-#deltaXfine = 2560e-6 #level 1
-#deltaXfine = 1280e-6 #level 2
-#deltaXfine = 640e-6 #level 3
-#deltaXfine = 320e-6 #level 4
-#deltaXfine = 160e-6 #level 5
-#deltaXfine = 80e-6 #level 6
-#deltaXfine = 40e-6 #level 7
-#deltaXfine = 20e-6 #level 8
-#deltaXfine = 10e-6 #level 9
-#deltaXfine = 0.000009765625
-
-#deltaXfine = 0.005 #level 0
-#deltaXfine = 0.0025 #level 1
-#deltaXfine = 0.00125 #level 2
-#deltaXfine = 0.000625 #level 3
-#deltaXfine = 0.0003125 #level 4
-#deltaXfine = 0.00015625 #level 5
-#deltaXfine = 0.000078125 #level 6
-#deltaXfine = 0.0000390625 #level 7
-#deltaXfine = 0.00001953125 #level 8
-deltaXfine = 0.000009765625 #level 9
-
-#deltaXfine = 6.5e-6
-
-startDistance = -1.0
-refineDistance = 0.3
-
-newStart = true
-restartStep = 10
-
-cpStart = 1
-cpStep = 1
-
-outTime = 1000
-endTime = 1
-
-logToFile = false
-
-porousTralingEdge = true
-
-thinWall = false
-
-
-nupsStep = 100 100 10000000
\ No newline at end of file
diff --git a/apps/cpu/DLR-F16/F16BombadilTestSmall.cfg b/apps/cpu/DLR-F16/F16BombadilTestSmall.cfg
deleted file mode 100644
index 9b56585d541d9898a86f45779ed664626cb30d24..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/F16BombadilTestSmall.cfg
+++ /dev/null
@@ -1,53 +0,0 @@
-pathOut = d:/temp/fng6
-pathGeo = d:/Projects/SFB880/FNG/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian
-#fngFileWhole = f16-ascii.stl
-fngFileWhole = grundgeometrie-direkter-export.stl
-#fngFileWhole = grundgeometrie-mittel.stl
-fngFileBodyPart = f16-body-part-ascii.stl
-fngFileTrailingEdge = f16-trailing-edge-ascii.stl
-zigZagTape = 2zackenbaender0.stl
-
-numOfThreads = 1
-availMem = 10e9
-refineLevel = 1
-#blockNx = 8 4 8
-blockNx = 21 6 13
-#blockNx = 294 12 247
-uLB = 0.1
-
-#x1min x1max x2min x2max x3min x3max [m]
-#boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65
-#boundingBox = -0.1 0.60 0.035 0.065 -0.3 0.3
-#boundingBox = -10e-3 310e-3 0.035 0.065 -21e-3 21e-3
-
-boundingBox = -0.360 0.660 0.035 0.065 -0.30 0.30
-
-
-#deltaXfine = 0.005 #level 0
-#deltaXfine = 0.0025 #level 1
-#deltaXfine = 0.00125 #level 2
-#deltaXfine = 0.000625 #level 3
-#deltaXfine = 0.0003125 #level 4
-#deltaXfine = 0.00015625 #level 5
-#deltaXfine = 0.000078125 #level 6
-#deltaXfine = 0.0000390625 #level 7
-deltaXfine = 0.00001953125 #level 8
-
-
-refineDistance = 0.3
-
-restartStep = 100
-restartStepStart = 100
-
-outTime = 100
-endTime = 100
-
-logToFile = false
-
-porousTralingEdge = false
-
-thinWall = false
-
-testBox=true
-
-nupsStep = 10 10 10000000
\ No newline at end of file
diff --git a/apps/cpu/DLR-F16/f16-porous.cfg b/apps/cpu/DLR-F16/f16-porous.cfg
deleted file mode 100644
index 61af6835e123413323944897a562fbfe1f9782fc..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/f16-porous.cfg
+++ /dev/null
@@ -1,78 +0,0 @@
-15
-fngFileWhole1 = grundgeometrie-direkter-export.stl
-fngFileWhole2 = f16-ascii.stl
-#fngFileWhole = grundgeometrie-mittel.stl
-fngFileBodyPart = f16-body-part-ascii.stl
-fngFileTrailingEdge = f16-trailing-edge-ascii.stl
-zigZagTape = 2zackenbaender0.stl
-#sampleFilename = f16-pte-669x2945x1119.raw
-#sampleFilename = f16-pte-669x2945x100.raw
-#sampleFilename = f16-pte-15.stl #test10_1.stl
-sampleFilename = output.stl
-
-
-#pathReInit = d:/temp/DLR-F16_L0_vx0_V
-pathReInit = d:/temp/DLR-F16_L2_init
-stepReInit = 0
-
-numOfThreads = 1
-availMem = 13e9
-
-uLB = 0.1
-
-#x1min x1max x2min x2max x3min x3max [m]
-#deltaXfine = 0.00001171875
-#deltaXfine = 0.00075
-boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65
-blockNx = 10 10 10
-
-#deltaXfine = 13393e-9
-#boundingBox = -0.90 1.19145087 0.035 0.06928608 -0.65 0.65
-#blockNx = 10 10 10
-
-#boundingBox = -0.90 1.19998697917 0.035 6.49869791667e-2 -0.65 0.65
-#deltaXfine = 1.30208333333e-5
-#blockNx = 9 9 9
-
-refineLevel = 0
-
-deltaXfine = 0.003 #level 0
-#deltaXfine = 0.0015 #level 1
-#deltaXfine = 0.00075 #level 2
-#deltaXfine = 0.000375 #level 3
-#deltaXfine = 0.0001875 #level 4
-#deltaXfine = 0.00009375 #level 5
-#deltaXfine = 0.000046875 #level 6
-#deltaXfine = 0.0000234375 #level 7
-#deltaXfine = 0.00001171875 #level 8
-#deltaXfine = 13393e-9 #level 8
-
-startDistance = -1.0
-refineDistance = 0.3
-
-writeBlocksToFile = true
-
-newStart = true
-restartStep = 60000
-
-cpStart = 60000
-cpStep = 60000
-
-outTimeStep = 60000
-outTimeStart = 60000
-endTime = 60000
-
-logToFile = false
-
-porousTralingEdge = false
-
-thinWall = true
-
-#Cp
-pcpStart = 10
-pcpStop = 100
-p_inf = -0.00759931
-
-
-
-nupsStep = 1000 1000 10000000
\ No newline at end of file
diff --git a/apps/cpu/DLR-F16/f16-solid.cfg b/apps/cpu/DLR-F16/f16-solid.cfg
deleted file mode 100644
index abe0c13f3e45530bd7833727f9314bdd244dbb2e..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/f16-solid.cfg
+++ /dev/null
@@ -1,81 +0,0 @@
-pathOut = d:/temp/DLR-F16_L0_A
-pathGeo = d:/Projects/SFB880/DLR-F16/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian
-fngFileWhole1 = grundgeometrie-direkter-export.stl
-fngFileWhole2 = f16-ascii.stl
-
-#fngFileWhole = grundgeometrie-mittel.stl
-fngFileBodyPart = f16-body-part-ascii.stl
-fngFileTrailingEdge = f16-trailing-edge-ascii.stl
-zigZagTape = 2zackenbaender0.stl
-#sampleFilename = f16-pte-669x2945x1119.raw
-#sampleFilename = f16-pte-669x2945x100.raw
-#sampleFilename = f16-pte-15.stl #test10_1.stl
-sampleFilename = output.stl
-
-pathReInit = /work/koskuche/DLR-F16_L7
-stepReInit = 10000
-
-numOfThreads = 4
-availMem = 3e9
-
-uLB = 0.1
-
-#x1min x1max x2min x2max x3min x3max [m]
-#deltaXfine = 0.00001171875
-#deltaXfine = 0.00075
-boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65
-blockNx = 10 10 10
-
-#deltaXfine = 13393e-9
-#boundingBox = -0.90 1.19145087 0.035 0.06928608 -0.65 0.65
-#blockNx = 10 10 10
-
-#boundingBox = -0.90 1.19998697917 0.035 6.49869791667e-2 -0.65 0.65
-#deltaXfine = 1.30208333333e-5
-#blockNx = 9 9 9
-
-refineLevel = 0
-
-deltaXfine = 0.003 #level 0
-#deltaXfine = 0.0015 #level 1
-#deltaXfine = 0.00075 #level 2
-#deltaXfine = 0.000375 #level 3
-#deltaXfine = 0.0001875 #level 4
-#deltaXfine = 0.00009375 #level 5
-#deltaXfine = 0.000046875 #level 6
-#eltaXfine = 0.0000234375 #level 7
-#deltaXfine = 0.00001171875 #level 8
-
-startDistance = -1.0
-#refineDistance = 1.2
-refineDistance = 0.6
-#refineDistance = 0.3
-
-writeBlocksToFile = true
-
-newStart = false
-restartStep = 15000
-chunk = 160
-
-cpStep = 20000
-cpStart = 20000
-
-outTimeStep = 20000
-outTimeStart = 20000
-
-endTime = 20000
-
-logToFile = false
-
-porousTralingEdge = false
-
-thinWall = false
-
-#Cp
-pcpStart = 1000000
-pcpStop  = 1000000
-
-timeAvStart = 1000000
-timeAvStop  = 1400000
-
-nupsStep = 100 100 10000000
diff --git a/apps/cpu/DLR-F16/f16.cpp b/apps/cpu/DLR-F16/f16.cpp
deleted file mode 100644
index 639a73c3863d6e725ad048e44e0f9be12faf3909..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/f16.cpp
+++ /dev/null
@@ -1,1305 +0,0 @@
-#include <iostream>
-#include <string>
-
-
-#include "VirtualFluids.h"
-#include <omp.h>
-using namespace std;
-
-double rangeRandom1()
-{
-   return (2.0*rand())/RAND_MAX-1.0;
-}
-
-void setBC(SPtr<Grid3D> grid, string pathGeo, string fngFileWhole, string zigZagTape, vector<double>  boundingBox, double uLB, double rhoLB, double blockLength, SPtr<BCProcessor> bcProcessor)
-{
-   SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-   int myid = comm->getProcessID();
-   
-   std::vector<std::vector<SPtr<Block3D>> > blockVector;
-   int minInitLevel;
-   int maxInitLevel;
-   int gridRank;
-
-   gridRank = comm->getProcessID();
-   minInitLevel = grid->getCoarsestInitializedLevel();
-   maxInitLevel = grid->getFinestInitializedLevel();
-   blockVector.resize(maxInitLevel+1);
-   for (int level = minInitLevel; level<=maxInitLevel; level++)
-   {
-      grid->getBlocks(level, gridRank, true, blockVector[level]);
-   }
-
-   for (int level = minInitLevel; level<=maxInitLevel; level++)
-   {
-      for(SPtr<Block3D> block : blockVector[level])
-      {
-         if (block)
-         {
-            SPtr<ILBMKernel> kernel = block->getKernel();
-            kernel->setBCProcessor(bcProcessor->clone(kernel));
-         }
-      }
-   }
-   
-   SetUndefinedNodesBlockVisitor undefNodesVisitor;
-   grid->accept(undefNodesVisitor);
-   
-   SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-   noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-   if (myid==0) UBLOG(logINFO, "Read fngFileWhole:start");
-   SPtr<GbTriFaceMesh3D> fngMeshWhole = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileWhole, "fngMeshWhole", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-   if (myid==0) UBLOG(logINFO, "Read fngFileWhole:end");
-   fngMeshWhole->rotate(0.0, 0.5, 0.0);
-   SPtr<D3Q27TriFaceMeshInteractor> fngIntrWhole = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-   if (myid==0) UBLOG(logINFO, "Read zigZagTape:start");
-   string ZckbndFilename = pathGeo+"/"+zigZagTape;
-   SPtr<GbTriFaceMesh3D> meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape1"));
-   meshBand1->rotate(0.0, 5, 0.0);
-   meshBand1->translate(15, 0, -12.850);
-   // Zackenband2
-   SPtr<GbTriFaceMesh3D> meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape2"));
-   meshBand2->rotate(0.0, 5, 0.0);
-   meshBand2->translate(15, 5, -12.850);
-
-   SPtr<GbTriFaceMesh3D> meshBand5(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape5"));
-   meshBand5->rotate(0.0, -1, 0.0);
-   meshBand5->rotate(0.0, 0.0, 180.0);
-   //meshBand5->translate(30, 0, -37.3);
-   meshBand5->translate(30, 0, -37.2);
-   
-   // Zackenband6
-   SPtr<GbTriFaceMesh3D> meshBand6(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape6"));
-   meshBand6->rotate(0.0, -1, 0.0);
-   meshBand6->rotate(0.0, 0.0, 180.0);
-   //meshBand6->translate(30, 5, -37.3);
-   meshBand6->translate(30, 5, -37.2);
-
-   SPtr<D3Q27TriFaceMeshInteractor> triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-   SPtr<D3Q27TriFaceMeshInteractor> triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-   SPtr<D3Q27TriFaceMeshInteractor> triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand5, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-   SPtr<D3Q27TriFaceMeshInteractor> triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand6, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-
-   mu::Parser fct;
-   fct.SetExpr("U");
-   fct.DefineConst("U", uLB);
-   SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-   velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm()));
-
-   SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rhoLB));
-   outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm()));
-
-   double g_minX1 = boundingBox[0]*1000.0;
-   double g_minX2 = boundingBox[2]*1000.0;
-   double g_minX3 = boundingBox[4]*1000.0;
-
-   double g_maxX1 = boundingBox[1]*1000.0;
-   double g_maxX2 = boundingBox[3]*1000.0;
-   double g_maxX3 = boundingBox[5]*1000.0;
-   
-   GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-   
-   GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-   
-   SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, velBCAdapter, Interactor3D::SOLID));
-   SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, velBCAdapter, Interactor3D::SOLID));
-   //inflow
-   GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-   //outflow
-   GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-   //inflow
-   SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-   //outflow
-   SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID));
-
-   SetSolidBlockVisitor v1(fngIntrWhole, BlockType::BC);
-   grid->accept(v1);
-
-   SetSolidBlockVisitor v2(triBand1Interactor, BlockType::BC);
-   grid->accept(v2);
-
-   SetSolidBlockVisitor v3(triBand1Interactor, BlockType::BC);
-   grid->accept(v3);
-
-   SetSolidBlockVisitor v4(triBand2Interactor, BlockType::BC);
-   grid->accept(v4);
-   
-   SetSolidBlockVisitor v5(triBand3Interactor, BlockType::BC);
-   grid->accept(v5);
-
-   SetSolidBlockVisitor v6(triBand4Interactor, BlockType::BC);
-   grid->accept(v6);
-
-   SetSolidBlockVisitor v7(addWallZminInt, BlockType::BC);
-   grid->accept(v7);
-
-   SetSolidBlockVisitor v8(addWallZmaxInt, BlockType::BC);
-   grid->accept(v8);
-
-   SetSolidBlockVisitor v9(inflowIntr, BlockType::BC);
-   grid->accept(v9);
-
-   SetSolidBlockVisitor v10(outflowIntr, BlockType::BC);
-   grid->accept(v10);
-   
-   inflowIntr->initInteractor();
-   outflowIntr->initInteractor();
-   addWallZminInt->initInteractor();
-   addWallZmaxInt->initInteractor();
-   fngIntrWhole->initInteractor();
-   triBand1Interactor->initInteractor();
-   triBand2Interactor->initInteractor();
-   triBand3Interactor->initInteractor();
-   triBand3Interactor->initInteractor();
-   triBand4Interactor->initInteractor();
-}
-
-void run(string configname)
-{
-   try
-   {
-
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathOut = config.getValue<string>("pathOut");
-      string          pathGeo = config.getValue<string>("pathGeo");
-      string          fngFileWhole1 = config.getValue<string>("fngFileWhole1");
-      string          fngFileWhole2 = config.getValue<string>("fngFileWhole2");
-      string          fngFileTrailingEdge = config.getValue<string>("fngFileTrailingEdge");
-      string          fngFileBodyPart = config.getValue<string>("fngFileBodyPart");
-      string          zigZagTape = config.getValue<string>("zigZagTape");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      vector<int>     blockNx = config.getVector<int>("blockNx");
-      vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      double          uLB = config.getValue<double>("uLB");
-      double          restartStep = config.getValue<double>("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      double          endTime = config.getValue<double>("endTime");
-      double          outTimeStep = config.getValue<double>("outTimeStep");
-      double          outTimeStart = config.getValue<double>("outTimeStart");
-      double          availMem = config.getValue<double>("availMem");
-      int             refineLevel = config.getValue<int>("refineLevel");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      bool            porousTralingEdge = config.getValue<bool>("porousTralingEdge");
-      double          deltaXfine = config.getValue<double>("deltaXfine")*1000.0;
-      bool            thinWall = config.getValue<bool>("thinWall");
-      double          refineDistance = config.getValue<double>("refineDistance");
-      double          startDistance = config.getValue<double>("startDistance");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-      bool            newStart = config.getValue<bool>("newStart");
-      bool            writeBlocks = config.getValue<bool>("writeBlocks");
-      string          sampleFilename = config.getValue<string>("sampleFilename");
-      string          pathReInit = config.getValue<string>("pathReInit");
-      int             stepReInit = config.getValue<int>("stepReInit");
-      
-      double          pcpStart = config.getValue<double>("pcpStart");
-      double          pcpStop  = config.getValue<double>("pcpStop");
-      //double          p_inf    = config.getValue<double>("p_inf");
-      
-      double          timeAvStart       = config.getValue<double>("timeAvStart");
-      double          timeAvStop        = config.getValue<double>("timeAvStop");
-      
-      int             chunk = config.getValue<int>("chunk");
-
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid==0)
-         {
-            const char* str = pathOut.c_str();
-            mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
-         }
-#endif 
-
-         if (myid==0)
-         {
-            stringstream logFilename;
-            logFilename<<pathOut+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 1");
-         UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-
-
-      //the geometry is in mm
-
-      double g_minX1 = boundingBox[0]*1000.0;
-      double g_minX2 = boundingBox[2]*1000.0;
-      double g_minX3 = boundingBox[4]*1000.0;
-
-      double g_maxX1 = boundingBox[1]*1000.0;
-      double g_maxX2 = boundingBox[3]*1000.0;
-      double g_maxX3 = boundingBox[5]*1000.0;
-
-      //////////////////////////////////////////////////////////////////////////
-      double deltaXcoarse = deltaXfine*(double)(1<<refineLevel);
-      //double nx2_temp = floor((g_maxX2 - g_minX2) / (deltaXcoarse*(double)blockNx[0]));
-
-      //deltaXcoarse = (g_maxX2 - g_minX2) / (nx2_temp*(double)blockNx[0]);
-      //UBLOG(logINFO, "nx2_temp:"<<nx2_temp);
-      //g_maxX2 -= 0.5* deltaXcoarse;
-      //////////////////////////////////////////////////////////////////////////
-      double blockLength = (double)blockNx[0]*deltaXcoarse;
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double Re = 1e6;
-
-      double rhoLB = 0.0;
-      double rhoReal = 1.2041; //(kg/m3)
-      //double nueReal = 153.5e-7; //m^2/s
-      double uReal = 55; //m/s
-      double lReal = 0.3;//m
-      //double uReal = Re*nueReal / lReal;
-      double nuReal = (uReal*lReal)/Re; //m^2/s
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double Ma = 0.15;//Ma-Real!
-      //double csReal = uReal / Ma;
-      //double hLB = lReal / deltaXcoarse;
-
-      //LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB);
-
-      //double u_LB = uReal   * unitConverter.getFactorVelocityWToLb();
-      //double nu_LB = nueReal * unitConverter.getFactorViscosityWToLb();
-      double lLB = lReal*1000.0/deltaXcoarse;
-      double nuLB = (uLB*lLB)/Re; //0.005;
-      //double nuLB = 0.005;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      ////////////////////////////////////////////////////////////////////////
-      //Grid
-      //////////////////////////////////////////////////////////////////////////
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      //BC adapters
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      if (thinWall)
-      {
-         noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm()));
-      }
-      else
-      {
-         noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-      }
-
-      SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter());
-      slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm()));
-
-      mu::Parser fct;
-      fct.SetExpr("U");
-      fct.DefineConst("U", uLB);
-      SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-      velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm()));
-      //velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
-
-      SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rhoLB));
-      outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm()));
-      //denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
-
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-      //bcVisitor.addBC(slipBCAdapter);
-      bcVisitor.addBC(velBCAdapter);
-      bcVisitor.addBC(outflowBCAdapter);
-
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant2LBMKernel(blockNx[0], blockNx[1], blockNx[2], CompressibleCumulant2LBMKernel::NORMAL));
-      SPtr<BCProcessor> bcProc;
-      if (thinWall)
-      {
-         bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor());
-      }
-      else
-      {
-         bcProc = SPtr<BCProcessor>(new BCProcessor());
-      }
-      kernel->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-      //MPIIORestartCoProcessor rcp(grid, rSch, pathOut, comm);
-      //rcp.setChunk(chunk);
-      
-      SPtr<UbScheduler> rSch2(new UbScheduler(restartStep));
-      //RestartCoProcessor rp(grid, rSch2, comm, pathOut, RestartCoProcessor::BINARY);
-     
-      //MPIIORestart2CoProcessor rcp2(grid, rSch2, pathOut+"/mpiio2", comm);      
-      //rcp2.setLBMKernel(kernel);
-      //rcp2.setBCProcessor(bcProc);
-      
-      
-      MPIIORestart1CoProcessor rcp3(grid, rSch, pathOut+"/mpiio3", comm);
-      rcp3.setLBMKernel(kernel);
-      rcp3.setBCProcessor(bcProc);
-      
-      //MPIIORestart3CoProcessor rcp4(grid, rSch, pathOut+"/mpiio4", comm);
-      //rcp4.setLBMKernel(kernel);
-      //rcp4.setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 2");
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-
-      //if (grid->getTimeStep() == 0)
-      if (newStart)
-      {
-         ////////////////////////////////////////////////////////////////////////
-         //define grid
-         //////////////////////////////////////////////////////////////////////////
-         grid->setDeltaX(deltaXcoarse);
-         grid->setBlockNX(blockNx[0], blockNx[1], blockNx[2]);
-
-         SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(true);
-         grid->setPeriodicX3(false);
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "* Re                  = "<<Re);
-            UBLOG(logINFO, "* Ma                  = "<<Ma);
-            UBLOG(logINFO, "* velocity (uReal)    = "<<uReal<<" m/s");
-            UBLOG(logINFO, "* viscosity (nuReal)  = "<<nuReal<<" m^2/s");
-            UBLOG(logINFO, "* chord length (lReal)= "<<lReal<<" m");
-            UBLOG(logINFO, "* velocity LB (uLB)   = "<<uLB);
-            UBLOG(logINFO, "* viscosity LB (nuLB) = "<<nuLB);
-            UBLOG(logINFO, "* chord length (l_LB) = "<<lLB<<" dx_base");
-            UBLOG(logINFO, "* dx_base             = "<<deltaXcoarse/1000<<" m");
-            UBLOG(logINFO, "* dx_refine           = "<<deltaXfine/1000<<" m");
-            UBLOG(logINFO, "* blocknx             = "<<blockNx[0]<<"x"<<blockNx[1]<<"x"<<blockNx[2]);
-            UBLOG(logINFO, "* refineDistance      = "<<refineDistance);
-            UBLOG(logINFO, "* number of levels    = "<<refineLevel+1);
-            UBLOG(logINFO, "* number of threads   = "<<numOfThreads);
-            UBLOG(logINFO, "* number of processes = "<<comm->getNumberOfProcesses());
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         SPtr<GbTriFaceMesh3D> fngMeshWhole1;
-         SPtr<GbTriFaceMesh3D> fngMeshWhole2;
-         SPtr<GbTriFaceMesh3D> fngMeshBodyPart;
-         SPtr<GbTriFaceMesh3D> fngMeshTrailingEdge;
-         SPtr<GbTriFaceMesh3D> porousTrailingEdge;
-         if (porousTralingEdge)
-         {
-            if (myid==0) UBLOG(logINFO, "Read fngFileBodyPart:start");
-            fngMeshBodyPart = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileBodyPart, "fngMeshBody", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read fngFileBodyPart:end");
-            fngMeshBodyPart->rotate(0.0, 0.5, 0.0);
-            if (myid==0) GbSystem3D::writeGeoObject(fngMeshBodyPart.get(), pathOut+"/geo/fngMeshBody", WbWriterVtkXmlBinary::getInstance());
-
-            if (myid==0) UBLOG(logINFO, "Read fngFileTrailingEdge:start");
-            fngMeshTrailingEdge = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileTrailingEdge, "fngMeshTrailingEdge", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read fngFileTrailingEdge:end");
-            fngMeshTrailingEdge->rotate(0.0, 0.5, 0.0);
-            fngMeshTrailingEdge->translate(-0.05, 0, 1.3);
-            if (myid==0) GbSystem3D::writeGeoObject(fngMeshTrailingEdge.get(), pathOut+"/geo/fngMeshTrailingEdge", WbWriterVtkXmlBinary::getInstance());
-
-            if (myid==0) UBLOG(logINFO, "Read porousTrailingEdge:start");
-            //porousTrailingEdge = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+sampleFilename, "porousTrailingEdge", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            porousTrailingEdge = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+sampleFilename, "porousTrailingEdge", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read porousTrailingEdge:end");
-            porousTrailingEdge->rotate(90, -90, 0.0);
-            porousTrailingEdge->rotate(0, -4.3, 0.0);
-            //porousTrailingEdge->translate(280.5, 40.0, 3.5);
-            porousTrailingEdge->translate(276, 15.95, 3.5);
-            if (myid==0) GbSystem3D::writeGeoObject(porousTrailingEdge.get(), pathOut+"/geo/porousTrailingEdge", WbWriterVtkXmlASCII::getInstance());
-
-            //string samplePathname = pathGeo+"/"+sampleFilename;
-
-            //int pmNX1 = 669;
-            //int pmNX2 = 2945;
-            //int pmNX3 = 100;
-
-            //double deltaVoxelX1 = 13393e-6;
-            //double deltaVoxelX2 = 13393e-6;
-            //double deltaVoxelX3 = 13393e-6;
-
-            //double lthreshold = 11538;
-            //double uthreshold = 65535;
-
-            //if (myid==0) UBLOG(logINFO, "read voxel matrix: start");
-            //GbVoxelMatrix3DPtr porousTrailingEdge(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0.0 , lthreshold, uthreshold));
-            //porousTrailingEdge->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-            //porousTrailingEdge->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-            //porousTrailingEdge->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-            //if (myid==0) UBLOG(logINFO, "read voxel matrix: end");
-
-            //if (myid==0) UBLOG(logINFO, "rotate voxel matrix: start");
-            //porousTrailingEdge->rotate90aroundZ();
-            //porousTrailingEdge->rotate90aroundZ();
-            //porousTrailingEdge->rotate90aroundZ();
-            //porousTrailingEdge->rotate90aroundX();
-            //porousTrailingEdge->rotateAroundY(0.07);
-            //porousTrailingEdge->translate(276, 15.95, 3.26);
-            //
-            //if (myid==0) UBLOG(logINFO, "rotate voxel matrix: end");
-
-            ////if (myid==0) porousTrailingEdge->writeToVTKImageDataASCII(pathOut+"/geo/PorousTrailingEdge");
-            //if (myid==0) porousTrailingEdge->writeToVTKImageDataAppended(pathOut+"/geo/PorousTrailingEdge");
-
-         }
-         else
-         {
-            //if (myid==0) UBLOG(logINFO, "Read fngFileWhole1:start");
-            //fngMeshWhole1 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileWhole1, "fngMeshWhole1", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            //if (myid==0) UBLOG(logINFO, "Read fngFileWhole1:end");
-            //fngMeshWhole1->rotate(0.0, 0.5, 0.0);
-            //if (myid==0) GbSystem3D::writeGeoObject(fngMeshWhole1.get(), pathOut+"/geo/fngMeshWhole1", WbWriterVtkXmlBinary::getInstance());
-            
-            if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:start");
-            fngMeshWhole2 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileWhole2, "fngMeshWhole2", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:end");
-            fngMeshWhole2->rotate(0.0, 0.5, 0.0);
-            if (myid==0) GbSystem3D::writeGeoObject(fngMeshWhole2.get(), pathOut+"/geo/fngMeshWhole2", WbWriterVtkXmlBinary::getInstance());
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         // Zackenband
-         //////////////////////////////////////////////////////////////////////////
-         //top
-         //////////////////////////////////////////////////////////////////////////
-         if (myid==0) UBLOG(logINFO, "Read zigZagTape:start");
-         string ZckbndFilename = pathGeo+"/"+zigZagTape;
-         SPtr<GbTriFaceMesh3D> meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape1"));
-         meshBand1->rotate(0.0, 5, 0.0);
-         meshBand1->translate(15, 0, -12.850);
-         if (myid==0) GbSystem3D::writeGeoObject(meshBand1.get(), pathOut+"/geo/zigZagTape1", WbWriterVtkXmlASCII::getInstance());
-         // Zackenband2
-         SPtr<GbTriFaceMesh3D> meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape2"));
-         meshBand2->rotate(0.0, 5, 0.0);
-         meshBand2->translate(15, 5, -12.850);
-         if (myid==0) GbSystem3D::writeGeoObject(meshBand2.get(), pathOut+"/geo/zigZagTape2", WbWriterVtkXmlASCII::getInstance());
-         //// Zackenband3
-         //SPtr<GbTriFaceMesh3D> meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape3"));
-         //meshBand3->rotate(0.0, 5, 0.0);
-         //meshBand3->translate(15, 0, -12.35);
-         //if (myid==0) GbSystem3D::writeGeoObject(meshBand3.get(), pathOut+"/geo/zigZagTape3", WbWriterVtkXmlASCII::getInstance());
-         //// Zackenband4
-         //SPtr<GbTriFaceMesh3D> meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape4"));
-         //meshBand4->rotate(0.0, 5, 0.0);
-         //meshBand4->translate(15, 5, -12.35);
-         //if (myid==0) GbSystem3D::writeGeoObject(meshBand4.get(), pathOut+"/geo/zigZagTape4", WbWriterVtkXmlASCII::getInstance());
-
-         //bottom
-         SPtr<GbTriFaceMesh3D> meshBand5(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape5"));
-         meshBand5->rotate(0.0, -1, 0.0);
-         meshBand5->rotate(0.0, 0.0, 180.0);
-         //meshBand5->translate(30, 0, -37.3);
-         meshBand5->translate(30, 0, -37.2);
-         if (myid==0) GbSystem3D::writeGeoObject(meshBand5.get(), pathOut+"/geo/zigZagTape5", WbWriterVtkXmlASCII::getInstance());
-         // Zackenband6
-         SPtr<GbTriFaceMesh3D> meshBand6(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape6"));
-         meshBand6->rotate(0.0, -1, 0.0);
-         meshBand6->rotate(0.0, 0.0, 180.0);
-         //meshBand6->translate(30, 5, -37.3);
-         meshBand6->translate(30, 5, -37.2);
-         if (myid==0) GbSystem3D::writeGeoObject(meshBand6.get(), pathOut+"/geo/zigZagTape6", WbWriterVtkXmlASCII::getInstance());
-         //// Zackenband7
-         //SPtr<GbTriFaceMesh3D> meshBand7(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape7"));
-         //meshBand7->rotate(0.0, 5, 0.0);
-         //meshBand7->translate(15, 0, -12.35);
-         //if (myid==0) GbSystem3D::writeGeoObject(meshBand7.get(), pathOut+"/geo/zigZagTape7", WbWriterVtkXmlASCII::getInstance());
-         //// Zackenband8
-         //SPtr<GbTriFaceMesh3D> meshBan8(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape8"));
-         //meshBan8->rotate(0.0, 5, 0.0);
-         //meshBan8->translate(15, 5, -12.35);
-         //if (myid==0) GbSystem3D::writeGeoObject(meshBan8.get(), pathOut+"/geo/zigZagTape8", WbWriterVtkXmlASCII::getInstance());
-         if (myid==0) UBLOG(logINFO, "Read zigZagTape:end");
-
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 3");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-         //////////////////////////////////////////////////////////////////////////
-         //return;
-
-         //SPtr<Interactor3D> fngIntrWhole1;
-         SPtr<Interactor3D> fngIntrWhole2;
-         SPtr<Interactor3D> fngIntrBodyPart;
-         SPtr<Interactor3D> fngIntrTrailingEdge;
-         SPtr<Interactor3D> porousIntrTrailingEdge;
-
-         if (porousTralingEdge)
-         {
-            fngIntrBodyPart = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshBodyPart, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-            fngIntrTrailingEdge = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshTrailingEdge, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-            porousIntrTrailingEdge = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(porousTrailingEdge, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-         }
-         else
-         {
-            //fngIntrWhole1 = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole1, grid, noSlipBCAdapter, Interactor3D::SOLID));
-            fngIntrWhole2 = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole2, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::POINTS));
-         }
-
-         SPtr<D3Q27TriFaceMeshInteractor> triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-         SPtr<D3Q27TriFaceMeshInteractor> triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-         SPtr<D3Q27TriFaceMeshInteractor> triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand5, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-         SPtr<D3Q27TriFaceMeshInteractor> triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand6, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-
-         if (refineLevel>0&&myid==0&&writeBlocks)
-         {
-            if (myid==0) UBLOG(logINFO, "Refinement - start");
-            //RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            //refineHelper.addGbObject(geo, refineLevel);
-            //refineHelper.refine();
-
-            //RefineAroundGbObjectHelper refineHelper1(grid, refineLevel-1, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr1), 0.0, 10.0, comm);
-            //refineHelper1.refine();
-            //RefineAroundGbObjectHelper refineHelper2(grid, refineLevel, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr2), -1.0, 5.0, comm);
-            //refineHelper2.refine();
-
-
-            int rank = grid->getRank();
-            grid->setRank(0);
-
-            if (porousTralingEdge)
-            {
-                dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrBodyPart)->refineBlockGridToLevel(refineLevel-1, startDistance, refineDistance);
-            }
-            else
-            {
-                dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole2)->refineBlockGridToLevel(refineLevel, startDistance, refineDistance);
-            }
-
-            //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand1Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance);
-            //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand2Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance);
-            //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand3Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance);
-            //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand4Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance);
-
-
-            //SPtr<GbObject3D> fngBox(new GbCuboid3D(fngMeshWhole->getX1Minimum(), fngMeshWhole->getX2Minimum(), fngMeshWhole->getX3Minimum(),
-            //                                    fngMeshWhole->getX1Maximum(), fngMeshWhole->getX2Maximum(), fngMeshWhole->getX3Maximum()));
-            //if (myid==0) GbSystem3D::writeGeoObject(fngBox.get(), pathOut+"/geo/fngBox", WbWriterVtkXmlASCII::getInstance());
-
-            //RefineCrossAndInsideGbObjectBlockVisitor refVisitor0(fngBox, refineLevel);
-            //grid->accept(refVisitor0);
-
-
-            //SPtr<GbObject3D> bandTopBox(new GbCuboid3D(meshBand1->getX1Minimum(), meshBand1->getX2Minimum(), meshBand1->getX3Minimum(),
-            //   meshBand1->getX1Maximum(), meshBand1->getX2Maximum(), meshBand1->getX3Maximum()));
-            //if (myid==0) GbSystem3D::writeGeoObject(bandTopBox.get(), pathOut+"/geo/bandTopBox", WbWriterVtkXmlASCII::getInstance());
-
-            //RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(bandTopBox, refineLevel-1);
-            //grid->accept(refVisitor1);
-
-            //SPtr<GbObject3D> bandBottomBox(new GbCuboid3D(meshBand5->getX1Minimum(), meshBand5->getX2Minimum(), meshBand5->getX3Minimum(),
-            //   meshBand5->getX1Maximum(), meshBand5->getX2Maximum(), meshBand5->getX3Maximum()));
-            //if (myid==0) GbSystem3D::writeGeoObject(bandBottomBox.get(), pathOut+"/geo/bandBottomBox", WbWriterVtkXmlASCII::getInstance());
-
-            //RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(bandBottomBox, refineLevel-1);
-            //grid->accept(refVisitor2);
-
-            //SPtr<GbObject3D> teBox1(new GbCuboid3D(269.0, 0.0, 1.0, 270.0, 100.0, 8.5));
-            // for porous teY
-            //SPtr<GbObject3D> teBox1(new GbCuboid3D(269.0, 0.0, -10.0, 310.0, 100.0, 20.5));
-            //SPtr<GbObject3D> teBox1(new GbCuboid3D(200.0, 0.0, -20.0, 400.0, 100.0, 20.0));
-            //if (myid==0) GbSystem3D::writeGeoObject(teBox1.get(), pathOut+"/geo/teBox1", WbWriterVtkXmlASCII::getInstance());
-
-            //RefineCrossAndInsideGbObjectBlockVisitor refVisitor3(teBox1, 5);
-            //grid->accept(refVisitor3);
-
-            //SPtr<GbObject3D> teBox2(new GbCuboid3D(271.0, 0.0, 3.0, 279.0, 100.0, 5.7));
-            //if (myid==0) GbSystem3D::writeGeoObject(teBox2.get(), pathOut+"/geo/teBox2", WbWriterVtkXmlASCII::getInstance());
-
-            //RefineCrossAndInsideGbObjectBlockVisitor refVisitor4(teBox2, refineLevel);
-            //grid->accept(refVisitor4);
-
-            //level 1
-            SPtr<GbObject3D> wakeBoxL1(new GbCuboid3D(200.0, 0.0, -20.0, 2000.0, 100.0, 20.0));
-            if (myid==0) GbSystem3D::writeGeoObject(wakeBoxL1.get(), pathOut+"/geo/wakeBoxL1", WbWriterVtkXmlASCII::getInstance());
-            RefineCrossAndInsideGbObjectBlockVisitor refVisitorWakeBoxL1(wakeBoxL1, 1);
-            grid->accept(refVisitorWakeBoxL1);
-            
-            //level 4
-            //SPtr<GbObject3D> teBoxL5(new GbCuboid3D(200.0, 0.0, -20.0, 400.0, 100.0, 20.0));
-            //if (myid==0) GbSystem3D::writeGeoObject(teBoxL5.get(), pathOut+"/geo/teBoxL5", WbWriterVtkXmlASCII::getInstance());
-            //RefineCrossAndInsideGbObjectBlockVisitor refVisitorTeBoxL5(teBoxL5, 4);
-            //grid->accept(refVisitorTeBoxL5);
-            
-            //level 5
-            //SPtr<GbObject3D> teBoxL6(new GbCuboid3D(270.0, 0.0, -3.0, 320.0, 100.0, 10.0));
-            //if (myid==0) GbSystem3D::writeGeoObject(teBoxL6.get(), pathOut+"/geo/teBoxL6", WbWriterVtkXmlASCII::getInstance());
-            //RefineCrossAndInsideGbObjectBlockVisitor refVisitorTeBoxL6(teBoxL6, 5);
-            //grid->accept(refVisitorTeBoxL6);
-
-            grid->setRank(rank);
-
-            {
-               WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-               ppblocks.process(0);
-            }
-
-            ////////////////////////////////////////////
-            //METIS
-            //SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-            ////////////////////////////////////////////
-            /////delete solid blocks
-            if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-            //InteractorsHelper intHelper(grid, metisVisitor);
-            //if (porousTralingEdge)
-            //{
-            //   intHelper.addInteractor(fngIntrBodyPart);
-            //}
-            //else
-            //{
-            //   intHelper.addInteractor(fngIntrWhole);
-            //}
-            //////////////////////////////////////////////////////////////////////////
-
-            //intHelper.selectBlocks();
-
-            if (porousTralingEdge)
-            {
-               SetSolidBlockVisitor v(fngIntrBodyPart, BlockType::SOLID);
-               grid->accept(v);
-               std::vector<SPtr<Block3D>>& sb = fngIntrBodyPart->getSolidBlockSet();
-               for(SPtr<Block3D> block : sb)
-               {
-                  grid->deleteBlock(block);
-               }
-               fngIntrBodyPart->removeSolidBlocks();
-               fngIntrBodyPart->removeBcBlocks();
-            }
-            else
-            {
-               SetSolidBlockVisitor v(fngIntrWhole2, BlockType::SOLID);
-               grid->accept(v);
-               std::vector<SPtr<Block3D>>& sb = fngIntrWhole2->getSolidBlockSet();
-               for(SPtr<Block3D> block : sb)
-               {
-                  grid->deleteBlock(block);
-               }
-               fngIntrWhole2->removeSolidBlocks();
-               fngIntrWhole2->removeBcBlocks();
-            }
-
-            if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-            //////////////////////////////////////
-
-            //if (porousTralingEdge)
-            //{
-            //   grid->setRank(0);
-            //   boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(fngIntrTrailingEdge)->refineBlockGridToLevel(refineLevel, startDistance, refineDistance);
-            //   grid->setRank(rank);
-
-            //   //SPtr<GbObject3D> trailingEdgeCube(new GbCuboid3D(fngMeshTrailingEdge->getX1Minimum()-blockLength, fngMeshTrailingEdge->getX2Minimum(), fngMeshTrailingEdge->getX3Minimum()-blockLength/2.0,
-            //   //   fngMeshTrailingEdge->getX1Maximum()+blockLength, fngMeshTrailingEdge->getX2Maximum(), fngMeshTrailingEdge->getX3Maximum()+blockLength/2.0));
-            //   //if (myid == 0) GbSystem3D::writeGeoObject(trailingEdgeCube.get(), pathOut + "/geo/trailingEdgeCube", WbWriterVtkXmlASCII::getInstance());
-
-            //   //RefineCrossAndInsideGbObjectBlockVisitor refVisitor(trailingEdgeCube, refineLevel);
-            //   //grid->accept(refVisitor);
-            //}
-
-            RatioBlockVisitor ratioVisitor(refineLevel);
-            CheckRatioBlockVisitor checkRatio(refineLevel);
-            int count = 0;
-
-            do {
-               grid->accept(ratioVisitor);
-               checkRatio.resetState();
-               grid->accept(checkRatio);
-               if (myid==0) UBLOG(logINFO, "count = "<<count++<<" state = "<<checkRatio.getState());
-            } while (!checkRatio.getState());
-
-            //RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-            //grid->accept(ratioSmoothVisitor);
-
-            {
-               WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-               ppblocks.process(1);
-            }
-
-            OverlapBlockVisitor overlapVisitor(refineLevel, false);
-            grid->accept(overlapVisitor);
-
-            //std::vector<int> dirs;
-            //for (int i = D3Q27System::E; i <= D3Q27System::TS; i++)
-            //{
-            //   dirs.push_back(i);
-            //}
-            //SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-            //grid->accept(interDirsVisitor);
-
-            if (myid==0) UBLOG(logINFO, "Refinement - end");
-         }
-         grid->updateDistributedBlocks(comm);
-
-         //if (writeBlocks)
-         //{
-         //   grid->updateDistributedBlocks(comm);
-         //   rcp.writeBlocks(0);
-         //}
-         //else
-         //{
-           //rcp.readBlocks(restartStep);
-           //grid->setTimeStep(restartStep);
-         //}
-
-         //return;
-
-         //Sleep(1000*myid);
-
-           
-
-
-         std::vector<int> dirs;
-         for (int i = D3Q27System::E; i<=D3Q27System::TS; i++)
-         {
-            dirs.push_back(i);
-         }
-         SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-         grid->accept(interDirsVisitor);
-
-         //walls
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-
-
-         //wall interactors
-         //SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slipBCAdapter, Interactor3D::SOLID));
-         //SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, velBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathOut+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         //inflow
-         SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //outflow
-         SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         //grid->deleteBlockIDs();
-         //RenumberBlockVisitor renumber;
-         //grid->accept(renumber);
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(inflowIntr);
-         intHelper.addInteractor(outflowIntr);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(triBand1Interactor);
-         intHelper.addInteractor(triBand2Interactor);
-         intHelper.addInteractor(triBand3Interactor);
-         intHelper.addInteractor(triBand4Interactor);
-         
-
-         if (porousTralingEdge)
-         {
-            intHelper.addInteractor(fngIntrBodyPart);
-            intHelper.addInteractor(porousIntrTrailingEdge);
-
-            //string samplePathname = pathGeo+"/"+sampleFilename;
-
-            //double pmNX1 = 669;
-            //double pmNX2 = 2945;
-            //double pmNX3 = 1119;
-
-            //double deltaVoxelX1 = 13393e-6;
-            //double deltaVoxelX2 = 13393e-6;
-            //double deltaVoxelX3 = 13393e-6;
-            //
-            //double lthreshold = 11538;
-            //double uthreshold = 65535;
-
-            //if (myid==0) UBLOG(logINFO, "read voxel matrix: start");
-            //GbVoxelMatrix3DPtr porousTrailingEdge(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-            //porousTrailingEdge->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-            //porousTrailingEdge->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-            //porousTrailingEdge->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-            //if (myid==0) UBLOG(logINFO, "read voxel matrix: end");
-
-            //if (myid==0) UBLOG(logINFO, "rotate voxel matrix: start");
-            //porousTrailingEdge->rotate90aroundZ();
-            //porousTrailingEdge->rotate90aroundX();
-            //if (myid==0) UBLOG(logINFO, "rotate voxel matrix: end");
-
-            //if (myid==0) porousTrailingEdge->writeToVTKImageDataASCII(pathOut+"/geo/PorousTrailingEdge");
-         }
-         else
-         {
-            intHelper.addInteractor(fngIntrWhole2);
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         intHelper.selectBlocks();
-
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 4");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-         //////////////////////////////////////
-
-         {
-            WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppblocks.process(2);
-         }
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blockNx[0])* (unsigned long long)(blockNx[1])* (unsigned long long)(blockNx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blockNx[0]+ghostLayer) * (blockNx[1]+ghostLayer) * (blockNx[2]+ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27*sizeof(double)+sizeof(int)+sizeof(float)*4));
-         double needMem = needMemAll/double(comm->getNumberOfProcesses());
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Number of blocks = "<<numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = "<<numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level<=maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level "<<level<<" = "<<nobl);
-               UBLOG(logINFO, "Number of nodes for level "<<level<<" = "<<nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = "<<needMemAll<<" bytes");
-            UBLOG(logINFO, "Necessary memory per process = "<<needMem<<" bytes");
-            UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes");
-         }
-
-         //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], CompressibleCumulantLBMKernel::NORMAL));
-         ////SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], IncompressibleCumulantLBMKernel::NORMAL));
-
-         //SPtr<BCProcessor> bcProc;
-
-         //if (thinWall)
-         //{
-            //bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor());
-         //}
-         //else
-         //{
-            //bcProc = SPtr<BCProcessor>(new BCProcessor());
-         //}
-
-         //kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (myid==0) UBLOG(logINFO, "SetKernelBlockVisitor:end");
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 5");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-         if (refineLevel>0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         if (myid==0) UBLOG(logINFO, "SetUndefinedNodesBlockVisitor:end");
-
-         //BC
-         intHelper.setBC();
-         if (myid==0) UBLOG(logINFO, "intHelper.setBC():end");
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 6");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-
-
-         //initialization of distributions
-         mu::Parser inflowProfileVx1, inflowProfileVx2, inflowProfileVx3;
-         inflowProfileVx1.SetExpr("U*rangeRandom1()");
-         inflowProfileVx1.DefineConst("U", uLB);
-         inflowProfileVx1.DefineFun("rangeRandom1", rangeRandom1);
-         inflowProfileVx2.SetExpr("0.1*U*rangeRandom1()");
-         inflowProfileVx2.DefineConst("U", uLB);
-         inflowProfileVx2.DefineFun("rangeRandom1", rangeRandom1);
-         inflowProfileVx3.SetExpr("0.1*U*rangeRandom1()");
-         inflowProfileVx3.DefineConst("U", uLB);
-         inflowProfileVx3.DefineFun("rangeRandom1", rangeRandom1);
-
-         InitDistributionsBlockVisitor initVisitor1(nuLB, rhoLB);
-         initVisitor1.setVx1(fct);
-         ////initVisitor.setVx1(inflowProfileVx1);
-         ////initVisitor.setVx2(inflowProfileVx2);
-         ////initVisitor.setVx3(inflowProfileVx3);
-         ////initVisitor.setNu(nuLB);
-         grid->accept(initVisitor1);
-
-
-
-         ////set connectors
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         
-         //SPtr<Grid3D> oldGrid(new Grid3D(comm));
-         //
-         ////with MPIIORestartCoProcessor
-         //SPtr<UbScheduler> iSch(new UbScheduler());
-         //MPIIORestart1CoProcessor rcpInit(oldGrid, iSch, pathReInit, comm);
-         //rcpInit.setChunk(chunk);
-         //rcpInit.restart(stepReInit);
-
-         //////with MPIIORestart2CoProcessor
-         ////SPtr<UbScheduler> iSch(new UbScheduler());
-         ////MPIIORestart2CoProcessor rcp(oldGrid, iSch, pathReInit, comm);
-         ////rcp.readBlocks(stepReInit);
-         ////SPtr<Grid3DVisitor> newMetisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-         ////oldGrid->accept(newMetisVisitor);
-         ////rcp.readDataSet(stepReInit);
-         ////rcp.readBoundaryConds(stepReInit);
-
-         //InitDistributionsWithInterpolationGridVisitor initVisitor(oldGrid, iProcessor, nuLB);
-         //grid->accept(initVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //bcVisitor should be accept after initialization!!!!
-         grid->accept(bcVisitor);
-         if (myid==0) UBLOG(logINFO, "grid->accept(bcVisitor):end");
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 7");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-
-         //Postrozess
-         {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm);
-            ppgeo.process(0);
-         }
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "PID = "<<myid<<" Point 8");
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-         }
-
-         //fngIntrWhole1.reset();
-         fngIntrWhole2.reset();
-
-         ////SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-         ////MPIIORestartCoProcessor rcp(grid, rSch, pathOut, comm);
-
-         GbCuboid3DPtr sponfeLayerBB1(new GbCuboid3D(g_maxX1-750, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-         SpongeLayerBlockVisitor slVisitor(sponfeLayerBB1);
-
-         if (myid==0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         
-         //rcp2.process(restartStep);
-         //return;
-         //////////////////////////////////////////////////////////////////////////
-         //////MPIIORestart2CoProcessor
-         //SPtr<UbScheduler> iSch(new UbScheduler());
-         //rcp2.readBlocks(restartStep);
-         //grid->updateDistributedBlocks(comm);
-         
-         //SPtr<Grid3DVisitor> newMetisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-         //grid->accept(newMetisVisitor);
-         
-         //rcp2.restart((int)restartStep);
-         //grid->setTimeStep(restartStep);
-         
-         //rcp.readBlocks(restartStep);
-         //rcp.readDataSet(restartStep);
-         //rcp.readBoundaryConds(restartStep);
-         //grid->setTimeStep(restartStep);
-         
-         //setBC(grid, pathGeo, fngFileWhole2, zigZagTape, boundingBox, uLB, rhoLB, blockLength, bcProc);
-         
-         //rp.process(restartStep);
-
-         rcp3.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-         
-         //{
-            //WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut+"/mpiio3", WbWriterVtkXmlASCII::getInstance(), comm);
-            //ppblocks.process(0);
-         //}
-         
-         //{
-            //SPtr<UbScheduler> stepSch(new UbScheduler(1));
-            //WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathOut+"/mpiio3", WbWriterVtkXmlBinary::getInstance(), conv, comm);
-            //pp.process(restartStep);
-         //} 
- 
-         //{
-           
-            //SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            //WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut+"/mpiio3", WbWriterVtkXmlBinary::getInstance(), conv, comm);
-            //ppgeo.process(0);
-         //}
-
-         //rcp3.process(restartStep);
-         
-         //return;
-         
-         
-     
-            
-         
-                 
-         ////////////////////////////////////////////////////////////////////////////
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         grid->accept(bcVisitor);
-
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-         
-      }
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep,outTimeStart));
-
-
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 9");
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-
-      ////////////////////////////////////////////////////////////////////////
-      ////MPIIORestart2CoProcessor 
-      //grid->deleteBlockIDs();
-      //RenumberBlockVisitor renumber;
-      //grid->accept(renumber);
-      //SPtr<UbScheduler> iSch(new UbScheduler(1));
-      //MPIIORestart2CoProcessor rcpInit(grid, iSch, pathOut+"/mpiio2", comm);
-      //rcpInit.process(0);
-      ////////////////////////////////////////////////////////////////////////
-
-      //////////////////////////////////////////////////////////////////////////
-      ////MPIIORestartCoProcessor 
-      //SPtr<UbScheduler> iSch(new UbScheduler(1));
-      //MPIIORestartCoProcessor rcpInit(grid, iSch, pathOut, comm);
-      //rcpInit.process(0);
-      //////////////////////////////////////////////////////////////////////////
-
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm);
-      //pp.process(0);
-
-      //rcp.process(0);
-
-      //return;
-
-      //////////////////////////////////////////////////////////////////////////
-      ////Forces calculation
-      //////////////////////////////////////////////////////////////////////////
-      //if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:start");
-      //SPtr<GbTriFaceMesh3D> fngMeshWhole2 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileWhole2, "fngMeshWhole2", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-      //if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:end");
-      //fngMeshWhole2->rotate(0.0, 0.5, 0.0);
-      //SPtr<D3Q27TriFaceMeshInteractor> fngIntrWhole2 = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole2, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-      //SetSolidBlockVisitor fngVisitor(fngIntrWhole2, SetSolidBlockVisitor::BC);
-      //grid->accept(fngVisitor);
-      //fngIntrWhole2->initInteractor();
-      
-      //grid->accept(bcVisitor);
-
-      //string ZckbndFilename = pathGeo+"/"+zigZagTape;
-      //SPtr<GbTriFaceMesh3D> meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape1"));
-      //meshBand1->rotate(0.0, 5, 0.0);
-      //meshBand1->translate(15, 0, -12.850);
-      //// Zackenband2
-      //SPtr<GbTriFaceMesh3D> meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape2"));
-      //meshBand2->rotate(0.0, 5, 0.0);
-      //meshBand2->translate(15, 5, -12.850);
-
-      //SPtr<GbTriFaceMesh3D> meshBand5(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape5"));
-      //meshBand5->rotate(0.0, -1, 0.0);
-      //meshBand5->rotate(0.0, 0.0, 180.0);
-      //meshBand5->translate(30, 0, -37.2);
-      //// Zackenband6
-      //SPtr<GbTriFaceMesh3D> meshBand6(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape6"));
-      //meshBand6->rotate(0.0, -1, 0.0);
-      //meshBand6->rotate(0.0, 0.0, 180.0);
-      //meshBand6->translate(30, 5, -37.2);
-
-      //SPtr<D3Q27TriFaceMeshInteractor> triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-      //SPtr<D3Q27TriFaceMeshInteractor> triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-      //SPtr<D3Q27TriFaceMeshInteractor> triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand5, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-      //SPtr<D3Q27TriFaceMeshInteractor> triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand6, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-
-      //SetSolidOrTransBlockVisitor band1Visitor(triBand1Interactor, SetSolidOrTransBlockVisitor::TRANS);
-      //grid->accept(band1Visitor);
-      //triBand1Interactor->initInteractor();
-
-      //SetSolidOrTransBlockVisitor band2Visitor(triBand2Interactor, SetSolidOrTransBlockVisitor::TRANS);
-      //grid->accept(band2Visitor);
-      //triBand2Interactor->initInteractor();
-
-      //SetSolidOrTransBlockVisitor band3Visitor(triBand3Interactor, SetSolidOrTransBlockVisitor::TRANS);
-      //grid->accept(band3Visitor);
-      //triBand3Interactor->initInteractor();
-
-      //SetSolidOrTransBlockVisitor band4Visitor(triBand4Interactor, SetSolidOrTransBlockVisitor::TRANS);
-      //grid->accept(band4Visitor);
-      //triBand4Interactor->initInteractor();
-
-      //double b    = 30; //wingspan
-      //double t    = 300; //chord length
-      //double area = (b*t)/(deltaXcoarse*deltaXcoarse);
-      //double v    = uLB;
-
-      //CalculateForcesCoProcessor fp(grid, stepSch, pathOut + "/forces/forces.txt", comm, v, area);
-      //fp.addInteractor(fngIntrWhole2);
-      //fp.addInteractor(triBand1Interactor);
-      //fp.addInteractor(triBand2Interactor);
-      //fp.addInteractor(triBand3Interactor);
-      //fp.addInteractor(triBand4Interactor);
-      //////////////////////////////////////////////////////////////////////////
-
-      //////////////////////////////////////////////////////////////////////////
-      ////Cp calculation
-      //////////////////////////////////////////////////////////////////////////
-      //SPtr<UbScheduler> pcpSch(new UbScheduler(1, pcpStart, pcpStop));
-
-      //double planeCenter = g_minX2+(g_maxX2-g_minX2)/2.0;
-      //double planeX2min = planeCenter-deltaXfine;
-      //double planeX2max = planeCenter;//planeCenter+deltaXfine;
-      //GbCuboid3DPtr plane(new GbCuboid3D(g_minX1,planeX2min,g_minX3,g_maxX1,planeX2max,g_maxX3));
-      //if (myid==0) GbSystem3D::writeGeoObject(plane.get(), pathOut+"/geo/plane", WbWriterVtkXmlASCII::getInstance());
-
-      //PressureCoefficientCoProcessor pcp(grid, pcpSch, plane, pathOut+"/cp/cp", comm);
-      //pcp.addInteractor(fngIntrWhole2);
-      //////////////////////////////////////////////////////////////////////////
-
-      SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop));
-      TimeAveragedValuesSPtr<CoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,
-        TimeAveragedValuesCoProcessor::Density | TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations));
-      tav->setWithGhostLayer(true);
-
-      SPtr<IntegrateValuesHelper> mic1(new IntegrateValuesHelper(grid, comm,300-deltaXcoarse,35,-600-deltaXcoarse,
-         300,65,-600));
-      if (myid==0) GbSystem3D::writeGeoObject(mic1->getBoundingBox().get(), pathOut+"/geo/mic1", WbWriterVtkXmlBinary::getInstance());
-      SPtr<UbScheduler> stepMV(new UbScheduler(1));
-      //TimeseriesCoProcessor tsp1(grid, stepMV, mic1, pathOut+"/mic/mic1", comm);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch));
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, tavSch, CalculationManager::MPI));
-
-
-      const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::PREPOSTBC));
-
-      if (myid==0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid==0) UBLOG(logINFO, "Simulation-end");
-      
-      ////////////////////////////////////////////////////////////////////////
-      //MPIIORestart2CoProcessor 
-      //grid->deleteBlockIDs();
-      //RenumberBlockVisitor renumber;
-      //grid->accept(renumber);
-      //SPtr<UbScheduler> iSch(new UbScheduler(1));
-      //MPIIORestart2CoProcessor rcpInit(grid, iSch, pathOut+"/mpiio2", comm);
-      //rcpInit.process(0);
-      ////////////////////////////////////////////////////////////////////////
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Point 10");
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      }
-   }
-   catch (std::exception& e)
-   {
-      cerr<<e.what()<<endl<<flush;
-   }
-   catch (std::string& s)
-   {
-      cerr<<s<<endl;
-   }
-   catch (...)
-   {
-      cerr<<"unknown exception"<<endl;
-   }
-
-}
-
-int main(int argc, char* argv[])
-{
-
-   if (argv!=NULL)
-   {
-      if (argv[1]!=NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout<<"Configuration file must be set!: "<<argv[0]<<" <config file>"<<endl<<std::flush;
-      }
-   }
-
-   return 0;
-}
-
diff --git a/apps/cpu/DLR-F16/startJobPhoenix.slrm b/apps/cpu/DLR-F16/startJobPhoenix.slrm
deleted file mode 100644
index 6d6cddb976f0f5c82272068ec08b642f81f55415..0000000000000000000000000000000000000000
--- a/apps/cpu/DLR-F16/startJobPhoenix.slrm
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-#SBATCH -J f16 
-#SBATCH --ntasks=300
-#SBATCH --ntasks-per-node=1
-#SBATCH --time=08:00:00 
-
-module load lib/boost/1.63.0/intel
-module load mpi/intelmpi/2017.2.174
-module load intel-studio-2017
-
-APP=./f16
-CONF=./DLR-F16-Phoenix.cfg
-
-mpiexec $APP $CONF
\ No newline at end of file
diff --git a/apps/cpu/FallingSphere/CMakeLists.txt b/apps/cpu/FallingSphere/CMakeLists.txt
deleted file mode 100644
index 6166198643b30304eb1a943d9454cad1a0b8a12d..0000000000000000000000000000000000000000
--- a/apps/cpu/FallingSphere/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-PROJECT(FallingSphere)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES FallingSphere.cpp )
diff --git a/apps/cpu/FallingSphere/FallingSphere.cpp b/apps/cpu/FallingSphere/FallingSphere.cpp
deleted file mode 100644
index 7dfaedc9d93bffe1c159683152705b30f6f7c39a..0000000000000000000000000000000000000000
--- a/apps/cpu/FallingSphere/FallingSphere.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-#include <iostream>
-#include <string>
-#include <memory>
-
-#include "VirtualFluids.h"
-
-#include "LiggghtsCoupling/LiggghtsCoupling.h"
-
-using namespace std;
-
-
-int main(int argc, char *argv[])
-{
-    std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-    int myid                                        = comm->getProcessID();
-
-
-    // bounding box
-    double g_minX1 = 0;
-    double g_minX2 = 0;
-    double g_minX3 = 0;
-
-    double g_maxX1 = 1;
-    double g_maxX2 = 1;
-    double g_maxX3 = 10;
-
-    int blockNX[3] = { 32, 32, 32 };
-    double dx = 1./32.;
-
-    double d_part = 0.25;
-    double r_p    = d_part / 2.0;
-
-    //int blockNX[3] = { 10, 10, 10 };
-    //double dx      = 0.05;
-
-
-    double nuLB = 1e-2;
-
-    SPtr<LBMKernel> kernel   = make_shared<IBcumulantK17LBMKernel>();
-    SPtr<BCSet> bcProc = make_shared<BCSet>();
-    kernel->setBCSet(bcProc);
-
-    SPtr<BC> noSlipBC(new NoSlipBC());
-    noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-    //////////////////////////////////////////////////////////////////////////////////
-    // BC visitor
-    BoundaryConditionsBlockVisitor bcVisitor;
-    bcVisitor.addBC(noSlipBC);
-
-    SPtr<Grid3D> grid = make_shared<Grid3D>(comm);
-    grid->setPeriodicX1(true);
-    grid->setPeriodicX2(true);
-    grid->setPeriodicX3(false);
-    grid->setDeltaX(dx);
-    grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]);
-
-    string outputPath = "f:/temp/FallingSpheresTestMPI";
-
-    UbSystem::makeDirectory(outputPath);
-    UbSystem::makeDirectory(outputPath + "/liggghts");
-
-    SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE));
-    
-    SPtr<GbObject3D> gridCube = make_shared <GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
-    if (myid == 0)
-        GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-    GenBlocksGridVisitor genBlocks(gridCube);
-    grid->accept(genBlocks);
-
-    double dx2 = 2.0 * dx;
-    GbCuboid3DPtr wallZmin(
-        new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_minX3));
-    GbSystem3D::writeGeoObject(wallZmin.get(), outputPath + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
-    GbCuboid3DPtr wallZmax(
-        new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_maxX3, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2));
-    GbSystem3D::writeGeoObject(wallZmax.get(), outputPath + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
-
-    SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID));
-    SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID));
-
-
-    SPtr<SimulationObserver> ppblocks = make_shared<WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm);
-    ppblocks->update(0);
-
-    MPI_Comm mpi_comm = *(MPI_Comm *)(comm->getNativeCommunicator());
-    LiggghtsCouplingWrapper wrapper(argv, mpi_comm);
-    SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1);
-    string inFile1 = "d:/Projects/VirtualFluids_Develop/apps/cpu/FallingSphere/in.lbdem";
-    string inFile2 = "d:/Projects/VirtualFluids_Develop/apps/cpu/FallingSphere/in2.lbdem";
-
-    // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx);
-    // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx);
-    SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 0.1, 1000, r_p / dx, 0.01);
-    std::cout << units->toString() << std::endl;
-
-    double v_frac = 0.1;
-    double dt_phys = units->getFactorTimeLbToW();
-    int demSubsteps = 10;
-    double dt_dem = dt_phys / (double)demSubsteps;
-    int vtkSteps = 100;
-    string demOutDir = outputPath;
-
-    wrapper.execCommand("echo none");
-
-    wrapper.setVariable("d_part", d_part);
-    // wrapper.setVariable("r_part", d_part/2.);
-    // wrapper.setVariable("v_frac", v_frac);
-
-    wrapper.execFile((char *)inFile1.c_str());
-
-    SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, units);
-    SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>((g_maxX1 - g_minX1) / dx, (g_maxX2 - g_minX2) / dx, (g_maxX3 - g_minX3) / dx, wrapper.lmp);
-
-    //// set timestep and output directory
-    wrapper.setVariable("t_step", dt_dem);
-    wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps);
-    wrapper.setVariable("dmp_dir", demOutDir);
-
-    wrapper.execFile((char *)inFile2.c_str());
-    wrapper.runUpto(demSubsteps - 1);
-
-    InteractorsHelper intHelper(grid, partVisitor, false);
-    intHelper.addInteractor(wallZminInt);
-    intHelper.addInteractor(wallZmaxInt);
-    intHelper.selectBlocks();
-
-    ppblocks->update(1);
-    ppblocks.reset();
-
-    SetKernelBlockVisitor kernelVisitor(kernel, nuLB, 1e9, 1e9);
-    grid->accept(kernelVisitor);
-
-    intHelper.setBC();
-
-    InitDistributionsBlockVisitor initVisitor;
-    grid->accept(initVisitor);
-
-    // boundary conditions grid
-    {
-        SPtr<UbScheduler> geoSch(new UbScheduler(1));
-        SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(
-            grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
-        ppgeo->update(0);
-        ppgeo.reset();
-    }
-
-    grid->accept(bcVisitor);
-
-    OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-    grid->accept(setConnsVisitor);
-
-
-    // write data for visualization of macroscopic quantities
-    SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps));
-    SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(
-        new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(),
-                                                  SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-
-    int numOfThreads = 1;
-    omp_set_num_threads(numOfThreads);
-
-    int endTime = 3000; //20;
-    SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime));
-    simulation->addSimulationObserver(lcSimulationObserver);
-    simulation->addSimulationObserver(writeMQSimulationObserver);
-
-    if (myid == 0) UBLOG(logINFO, "Simulation-start");
-    simulation->run();
-    if (myid == 0) UBLOG(logINFO, "Simulation-end");
-
-
-    return 0;
-}
diff --git a/apps/cpu/FallingSphere/in.lbdem b/apps/cpu/FallingSphere/in.lbdem
deleted file mode 100644
index 5d0cfb511774c5270918f4e7007224d36080232c..0000000000000000000000000000000000000000
--- a/apps/cpu/FallingSphere/in.lbdem
+++ /dev/null
@@ -1,75 +0,0 @@
-echo none
-
-units		si
-atom_style	granular
-atom_modify	map array
-
-
-
-communicate	single vel yes
-
-boundary	f f f
-newton		off
-
-processors 1 1 *
-region		box block 0. 1. 0. 1. 0. 10. units box
-create_box	1 box
-
-variable	skin equal 0.01
-neighbor	${skin} bin
-neigh_modify	delay 0 binsize 0.01 one 1000
-
-fix grav all gravity 0.981 vector 0 0 -1
-
-
-fix 		m1 all property/global youngsModulus peratomtype 1e8
-fix 		m2 all property/global poissonsRatio peratomtype 0.4
-fix 		m3 all property/global coefficientRestitution peratomtypepair 1 0.95
-fix 		m4 all property/global coefficientFriction peratomtypepair 1 0.45
-fix 		m5 all property/global coefficientRollingFriction peratomtypepair 1 0.020
-
-# lb coupling fix
-fix lbcoupling all couple/lb/onetoone
-
-
-pair_style	gran model hertz tangential history rolling_friction cdt
-pair_coeff	* *
-
-fix		1 all nve/sphere
-
-fix xwalls1 all wall/gran model hertz tangential history primitive type 1 xplane 0.
-fix xwalls2 all wall/gran model hertz tangential history primitive type 1 xplane 1.
-fix ywalls1 all wall/gran model hertz tangential history primitive type 1 yplane 0.
-fix ywalls2 all wall/gran model hertz tangential history primitive type 1 yplane 1.
-fix zwalls1 all wall/gran model hertz tangential history primitive type 1 zplane 0.
-fix zwalls2 all wall/gran model hertz tangential history primitive type 1 zplane 10.
-
-create_atoms 1 single 0.5 0.5 9.75
-#create_atoms 1 single 0.38 0.05 0.05
-
-set group all diameter ${d_part} density 2400
-
-atom_modify sort 0 0.0
-
-#fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 1000 radius constant 0.015 
-#fix pts2 all particletemplate/sphere 1 atom_type 1 density constant 1000 radius constant 0.01 
-#fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 1100 radius constant ${r_part} 
-
-# fix pdd1 all particledistribution/discrete 6778  1 pts1 1.0
-# #fix pdd2 all particledistribution/discrete 6778  2 pts2 0.2 pts3 0.8
-
-# # region  insreg block 0.1 0.9 0.1 0.9 1.3 1.9 units box
-
-
-# #fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once &
-# #                         overlapcheck yes particles_in_region 350 region insreg ntry_mc 10000 
-# fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once &
-                        # overlapcheck yes volumefraction_region ${v_frac} region insreg ntry_mc 10000 
-# #fix ins all insert/pack seed 1001 distributiontemplate pdd2 insert_every once &
-# #                        overlapcheck yes volumefraction_region 0.05 region insreg ntry_mc 10000 
-# #fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once &
-# #                        overlapcheck yes particles_in_region 1 region insreg ntry_mc 10000 
-
-echo none
-
-run 1
diff --git a/apps/cpu/FallingSphere/in2.lbdem b/apps/cpu/FallingSphere/in2.lbdem
deleted file mode 100644
index f11767f12f37fd34e218c528761c8a09e968660c..0000000000000000000000000000000000000000
--- a/apps/cpu/FallingSphere/in2.lbdem
+++ /dev/null
@@ -1,25 +0,0 @@
-
-echo none
-
-timestep        ${t_step}      
-
-# thermo settings
-fix		ts all check/timestep/gran 10000 0.1 0.1
-compute		1 all erotate/sphere
-thermo_style	custom step atoms ke c_1 f_ts[1] f_ts[2] cpu
-thermo		10000
-thermo_modify	lost ignore norm no flush yes
-compute_modify	thermo_temp dynamic yes
-
-# particle dump
-variable dmp_fname string ${dmp_dir}d_*.liggghts
-
-# dump		dmp all custom ${dmp_stp} ${dmp_fname} & 
-#		id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius 
-
-# dump		dmp all custom ${dmp_stp} ${dmp_dir}d_*.liggghts & 
-# 		id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius 
-	
-dump   dmp all custom/vtk ${dmp_stp} ${dmp_dir}/liggghts/atom_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius 	
-
-echo none
\ No newline at end of file
diff --git a/apps/cpu/FlowAroundCylinder/cylinder.cpp b/apps/cpu/FlowAroundCylinder/cylinder.cpp
index 5de3c69d02d6778c842144a37938362ca44f3826..2ee3bfc7a036d28ed80c625c3c00edda47fac38f 100644
--- a/apps/cpu/FlowAroundCylinder/cylinder.cpp
+++ b/apps/cpu/FlowAroundCylinder/cylinder.cpp
@@ -82,22 +82,19 @@ void run(string configname)
 
       //BC
       SPtr<BC> noSlipAdapter(new NoSlipBC());
-      noSlipAdapter->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+      noSlipAdapter->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated()));
 
       mu::Parser fct;
       fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4");
       fct.DefineConst("U", uLB);
       fct.DefineConst("H", H);
       SPtr<BC> velBC(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST));
-      velBC->setBCStrategy(SPtr<BCStrategy>(new VelocityWithDensityBCStrategy()));
+      velBC->setBCStrategy(SPtr<BCStrategy>(new VelocityWithPressureInterpolated()));
 
-      SPtr<BC> denBC(new DensityBC(rhoLB));
-      denBC->setBCStrategy(SPtr<BCStrategy>(new NonReflectingOutflowBCStrategy()));
+      SPtr<BC> denBC(new PressureBC(rhoLB));
+      denBC->setBCStrategy(SPtr<BCStrategy>(new OutflowNonReflecting()));
       
       BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipAdapter);
-      bcVisitor.addBC(velBC);
-      bcVisitor.addBC(denBC);
 
       //////////////////////////////////////////////////////////////////////////
       //restart
@@ -291,11 +288,11 @@ void run(string configname)
          grid->accept(bcVisitor);
       }
 
-	  //set connectors
-	  //InterpolationProcessorPtr iProcessor(new CompressibleOffsetMomentsInterpolator());
-	  //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
+      //set connectors
+      //InterpolationProcessorPtr iProcessor(new CompressibleOffsetMomentsInterpolator());
+      //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
       OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-	  grid->accept(setConnsVisitor);
+      grid->accept(setConnsVisitor);
 
       SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolator());
     //   SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolationProcessor_old());
@@ -304,7 +301,7 @@ void run(string configname)
 
       SPtr<UbScheduler> stepSch(new UbScheduler(outTime));
 
-	  SPtr<SimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
+      SPtr<SimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
 
       real area = (2.0*radius*H)/(dx*dx);
       real v    = 4.0*uLB/9.0;
@@ -312,18 +309,18 @@ void run(string configname)
       SPtr<CalculateForcesSimulationObserver> fp = make_shared<CalculateForcesSimulationObserver>(grid, forceSch, pathOut + "/results/forces.txt", comm, v, area);
       fp->addInteractor(cylinderInt);
 
-	  SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-	  std::shared_ptr<SimulationObserver> nupsSimulationObserver(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
+      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
+      std::shared_ptr<SimulationObserver> nupsSimulationObserver(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
 
-	  omp_set_num_threads(numOfThreads);
-	  SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-	  SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-	  simulation->addSimulationObserver(nupsSimulationObserver);
+      omp_set_num_threads(numOfThreads);
+      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
+      SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
+      simulation->addSimulationObserver(nupsSimulationObserver);
      simulation->addSimulationObserver(fp);
      simulation->addSimulationObserver(writeMQSimulationObserver);
 
       if(myid == 0) UBLOG(logINFO,"Simulation-start");
-	  simulation->run();
+      simulation->run();
       if(myid == 0) UBLOG(logINFO,"Simulation-end");
    }
    catch(std::exception& e)
diff --git a/apps/cpu/FlowAroundCylinder/cylinder.cpp.old b/apps/cpu/FlowAroundCylinder/cylinder.cpp.old
index 774ed812b5fab63538a56744ddd41a2611eadc72..f411506ed807af5d1d6c0c8b5b099d2dfde79f14 100644
--- a/apps/cpu/FlowAroundCylinder/cylinder.cpp.old
+++ b/apps/cpu/FlowAroundCylinder/cylinder.cpp.old
@@ -45,13 +45,13 @@ void run(const char *cstr)
       double L2, L3, H;
       L2 = L3 = H = 0.41;
 
-      LBMReal radius = 0.05;
-      LBMReal rhoReal = 1.0; //kg/m^3
-      LBMReal uReal = 0.45;//m/s
-      LBMReal uLB = 0.05;
-      LBMReal Re = 20.0;
-      LBMReal rhoLB = 0.0;
-      LBMReal l = L2 / dx;
+      real radius = 0.05;
+      real rhoReal = 1.0; //kg/m^3
+      real uReal = 0.45;//m/s
+      real uLB = 0.05;
+      real Re = 20.0;
+      real rhoLB = 0.0;
+      real l = L2 / dx;
 
       //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter(1.0, 1/sqrt(3.0)*(uReal/uLB), 1.0, 1.0/dx, dx*dx*dx));
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
@@ -96,7 +96,7 @@ void run(const char *cstr)
 
       dx = (0.41+2.0*dx)/(10.0*(int)blocknx2);
 
-      LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
+      real nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
 
       double blockLength = blocknx1*dx;
 
@@ -199,12 +199,12 @@ void run(const char *cstr)
 
          if (refineLevel > 0)
          {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - start");    
             RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
             //refineHelper.addGbObject(refineCube, refineLevel);
             refineHelper.addGbObject(refCylinder, refineLevel);
             refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - end");    
          }
 
          MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
@@ -415,13 +415,13 @@ void run2(const char *cstr)
       double L2, L3, H;
       L2 = L3 = H = 0.41*2.0;
 
-      LBMReal radius = 0.05*2.0;
-      LBMReal rhoReal = 1.0; //kg/m^3
-      LBMReal uReal = 0.45;//m/s
-      LBMReal uLB = 0.05;
-      LBMReal Re = 20.0;
-      LBMReal rhoLB = 0.0;
-      LBMReal l = L2 / dx;
+      real radius = 0.05*2.0;
+      real rhoReal = 1.0; //kg/m^3
+      real uReal = 0.45;//m/s
+      real uLB = 0.05;
+      real Re = 20.0;
+      real rhoLB = 0.0;
+      real l = L2 / dx;
 
       //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter(1.0, 1/sqrt(3.0)*(uReal/uLB), 1.0, 1.0/dx, dx*dx*dx));
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
@@ -467,7 +467,7 @@ void run2(const char *cstr)
 
       //dx = (0.41+2.0*dx)/(10.0*(int)blocknx2);
 
-      LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
+      real nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
 
       double blockLength = blocknx1*dx;
 
@@ -570,12 +570,12 @@ void run2(const char *cstr)
 
          if (refineLevel > 0)
          {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - start");    
             RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
             //refineHelper.addGbObject(refineCube, refineLevel);
             refineHelper.addGbObject(refCylinder, refineLevel);
             refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - end");    
          }
 
          MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
diff --git a/apps/cpu/FlowAroundCylinder/cylinder.cpp1 b/apps/cpu/FlowAroundCylinder/cylinder.cpp1
index f4001248da3e7fec9921da00d6932c376ea6dc66..591002f9783d033aeb4c4b5123d7dca8da0d5bdc 100644
--- a/apps/cpu/FlowAroundCylinder/cylinder.cpp1
+++ b/apps/cpu/FlowAroundCylinder/cylinder.cpp1
@@ -84,13 +84,13 @@ void run(const char *cstr)
       double L2 = 0.41;
       double L3 = 0.41;
 
-      LBMReal radius = 0.05;
-      LBMReal uLB = 0.01;
-      LBMReal Re = 100.0;
-      LBMReal rhoLB = 1.0;
-      LBMReal l = L2 / dx;
-      //LBMReal nueLB = (uLB*l)/Re;
-      LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
+      real radius = 0.05;
+      real uLB = 0.01;
+      real Re = 100.0;
+      real rhoLB = 1.0;
+      real l = L2 / dx;
+      //real nueLB = (uLB*l)/Re;
+      real nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
 
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
 
@@ -207,7 +207,7 @@ void run(const char *cstr)
 
          if (refineLevel > 0)
          {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - start");    
             RefineCrossAndInsideGbObjectBlockVisitor refVisitor(refineCube, baseLevel, refineLevel-1);
             grid->accept(refVisitor);
 
@@ -224,7 +224,7 @@ void run(const char *cstr)
             D3Q27System::getLBMDirections(dirs);
             SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
             grid->accept(interDirsVisitor);
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - end");    
          }
 
          MetisPartitioningGridVisitor metisVisitor(numOfThreads, D3Q27System::B, comm, false);
diff --git a/apps/cpu/FlowAroundCylinder/cylinder.cpp2 b/apps/cpu/FlowAroundCylinder/cylinder.cpp2
index 107f4882f38dbada406a106ce6bfa2a8122f7379..9548681c7e510b0a9a216a743717bf665fd50b2f 100644
--- a/apps/cpu/FlowAroundCylinder/cylinder.cpp2
+++ b/apps/cpu/FlowAroundCylinder/cylinder.cpp2
@@ -97,13 +97,13 @@ void run(const char *cstr)
       double L2 = 0.41;
       double L3 = 0.41;
 
-      LBMReal radius = 0.05;
-      LBMReal uLB = 0.01;
-      LBMReal Re = 100.0;
-      LBMReal rhoLB = 1.0;
-      LBMReal l = L2 / dx;
-      //LBMReal nueLB = (uLB*l)/Re;
-      LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
+      real radius = 0.05;
+      real uLB = 0.01;
+      real Re = 100.0;
+      real rhoLB = 1.0;
+      real l = L2 / dx;
+      //real nueLB = (uLB*l)/Re;
+      real nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
 
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
 
@@ -221,7 +221,7 @@ void run(const char *cstr)
 
          if (refineLevel > 0)
          {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - start");    
             RefineCrossAndInsideGbObjectBlockVisitor refVisitor(refineCube, baseLevel, refineLevel-1);
             grid->accept(refVisitor);
 
@@ -238,7 +238,7 @@ void run(const char *cstr)
             D3Q27System::getLBMDirections(dirs);
             SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
             grid->accept(interDirsVisitor);
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - end");    
          }
 
          MetisPartitioningGridVisitor metisVisitor(numOfThreads, D3Q27System::B, comm, false);
diff --git a/apps/cpu/Hagen_Poiseuille_flow/pflow.cpp b/apps/cpu/Hagen_Poiseuille_flow/pflow.cpp
index e7f7bb84a4dece690ea0e93cc2d07b6cdd8932d2..8ff91ea401869e09453765e7e0b73d77650817ac 100644
--- a/apps/cpu/Hagen_Poiseuille_flow/pflow.cpp
+++ b/apps/cpu/Hagen_Poiseuille_flow/pflow.cpp
@@ -56,7 +56,7 @@ using namespace std;
 //      const int blocknx2 = blocknx[1];
 //      const int blocknx3 = blocknx[2];
 //
-//      LBMReal rhoLB = 0.0;
+//      real rhoLB = 0.0;
 //
 //      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
 //
@@ -325,7 +325,7 @@ void pflowdp(string configname)
       SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
       int myid = comm->getProcessID();
 
-      LBMReal rhoLB = 0.0;
+      real rhoLB = 0.0;
       double rhoLBinflow = dpLB * 3.0;
 
       SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
@@ -349,7 +349,7 @@ void pflowdp(string configname)
       double Re = (4 * h * Umax) / (3 * nuLB);
 
       //bc
-      LBMReal uLB = 0.01;
+      real uLB = 0.01;
       mu::Parser fct;
       fct.SetExpr("U");
       fct.DefineConst("U", uLB);
@@ -429,7 +429,7 @@ void pflowdp(string configname)
       //MPIIORestart1CoProcessor rcp(grid, rSch2, pathname, comm);
 
       SPtr<LBMKernel> kernel;
-      kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel());
+      kernel = SPtr<LBMKernel>(new InK15CompressibleNavierStokes());
 
       SPtr<BCProcessor> bcProc(new BCProcessor());
       //SPtr<BCProcessor> bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor());
@@ -591,8 +591,8 @@ void pflowdp(string configname)
          }
 
          //SPtr<LBMKernel> kernel;
-         //kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], IncompressibleCumulantLBMKernel::NORMAL));
-         //kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], CompressibleCumulantLBMKernel::NORMAL));
+         //kernel = SPtr<LBMKernel>(new InK15CompressibleNavierStokes(blocknx[0], blocknx[1], blocknx[2], InK15CompressibleNavierStokes::NORMAL));
+         //kernel = SPtr<LBMKernel>(new K15CompressibleNavierStokes(blocknx[0], blocknx[1], blocknx[2], K15CompressibleNavierStokes::NORMAL));
          //}
          //kernel->setWithForcing(true);
          //kernel->setForcingX1(2e-6);
diff --git a/apps/cpu/Hagen_Poiseuille_flow2/pflow2.cpp b/apps/cpu/Hagen_Poiseuille_flow2/pflow2.cpp
index e278fcb78fddc4f5606256a6805dbda4e344a19d..249634f990f9d77d9c7d5c34f12dbc150d86d410 100644
--- a/apps/cpu/Hagen_Poiseuille_flow2/pflow2.cpp
+++ b/apps/cpu/Hagen_Poiseuille_flow2/pflow2.cpp
@@ -32,7 +32,7 @@ void pflowdp(string configname)
       SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
       int myid = comm->getProcessID();
 
-      LBMReal rhoLB = 0.0;
+      real rhoLB = 0.0;
       double rhoLBinflow = dpLB*3.0;
 
       SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
@@ -232,7 +232,7 @@ void pflowdp(string configname)
 
          int kernelType = 2;
          SPtr<LBMKernel> kernel;
-         kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel());
+         kernel = SPtr<LBMKernel>(new InK15CompressibleNavierStokes());
          //}
 
          SPtr<BCProcessor> bcProc(new BCProcessor());
diff --git a/apps/cpu/HerschelBulkleyModel/CMakeLists.txt b/apps/cpu/HerschelBulkleyModel/CMakeLists.txt
deleted file mode 100644
index d2499fb70e451de1c40c841135607aa1a6799e93..0000000000000000000000000000000000000000
--- a/apps/cpu/HerschelBulkleyModel/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(HerschelBulkleyModel)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbflow.cpp )
\ No newline at end of file
diff --git a/apps/cpu/HerschelBulkleyModel/hbf1.cfg b/apps/cpu/HerschelBulkleyModel/hbf1.cfg
deleted file mode 100644
index 2eed172d57ee45a3c8884de41f67194381ee746a..0000000000000000000000000000000000000000
--- a/apps/cpu/HerschelBulkleyModel/hbf1.cfg
+++ /dev/null
@@ -1,37 +0,0 @@
-pathname = d:/temp/BinghamNewNewConvergenceAcousticScaling_20it/256
-
-#pathname = d:/temp/Newton45/32
-
-numOfThreads = 4
-availMem = 8e9
-logToFile = false
-
-# blocknx = 2 32 32
-# boundingBox = 0.25 32 32
-# deltax = 0.125 #0.25 #0.5 #1
-
-# nuLB = 0.05
-# forcing = 1e-7 #2e-7 #4e-7 #8e-7
-
-# outTime = 10000
-# endTime =  1920000 #480000 #120000 #30000
-
-blocknx = 2 32 2
-boundingBox = 2 32 2
-deltax = 1
-
-scaleFactor = 8
-
-nuLB = 0.005
-forcing = 6e-9
-tau0 = 3e-8
-
-#n = 0.8
-
-velocity = 1e-3
-n = 0.4
-Re = 1
-Bn = 0.01
-
-outTime = 1000
-endTime = 1000000
\ No newline at end of file
diff --git a/apps/cpu/HerschelBulkleyModel/hbflow.cpp b/apps/cpu/HerschelBulkleyModel/hbflow.cpp
deleted file mode 100644
index 5e4e193c1b038d6d8ceec670f45381c0e2a8f32b..0000000000000000000000000000000000000000
--- a/apps/cpu/HerschelBulkleyModel/hbflow.cpp
+++ /dev/null
@@ -1,370 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-
-void bflow(string configname)
-{
-    using namespace vf::lbm::dir;
-
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getValue<string>("pathname");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-      vector<real>  boundingBox = config.getVector<real>("boundingBox");
-      real          nuLB = config.getValue<real>("nuLB");
-      real          endTime = config.getValue<real>("endTime");
-      real          outTime = config.getValue<real>("outTime");
-      real          availMem = config.getValue<real>("availMem");
-      //int             refineLevel = config.getValue<int>("refineLevel");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      //double          restartStep = config.getValue<double>("restartStep");
-      real          deltax = config.getValue<real>("deltax");
-      //double          cpStep = config.getValue<double>("cpStep");
-      //double          cpStepStart = config.getValue<double>("cpStepStart");
-      //bool            newStart = config.getValue<bool>("newStart");
-      real          forcing = config.getValue<real>("forcing");
-      //double          n = config.getValue<double>("n");
-      //double          k = config.getValue<double>("k");
-      real          tau0 = config.getValue<real>("tau0");
-      real          velocity = config.getValue<real>("velocity");
-      real          n = config.getValue<real>("n");
-//      double          Re = config.getValue<double>("Re");
-//      double          Bn = config.getValue<double>("Bn");
-      real          scaleFactor = config.getValue<real>("scaleFactor");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      real rhoLB = 0.0;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      //bounding box
-      //double g_minX1 = -0.707107+1.0;
-      //double g_minX2 = -1.41421+1.0;
-      //double g_minX3 = 1.0;
-
-      //double g_maxX1 = boundingBox[0];
-      //double g_maxX2 = boundingBox[1];
-      //double g_maxX3 = boundingBox[2]+1.0;
-
-      real g_minX1 = 0.0;
-      real g_minX2 = -boundingBox[1]/2.0;
-      real g_minX3 = -boundingBox[2]/2.0;
-
-      real g_maxX1 = boundingBox[0];
-      real g_maxX2 = boundingBox[1]/2.0;
-      real g_maxX3 = boundingBox[2]/2.0;
-
-      
-
-      real blockLength = 3.0 * deltax;
-
-//      double h = (g_maxX2) / 2.0;
-//      double dex = g_maxX1;
-
-      //LBMReal tau0 = 1.2e-7;
-      //LBMReal k = nuLB;
-      //LBMReal n = 0.4;
-
-
-      real d = boundingBox[1];
-      real U = velocity;
-      real Gamma = U / d;
-
-      //double scaleFactor = 2.0;
-
-      // Diffusive Scaling
-
-      //double k = 0.005; // (U * d) / (Re * std::pow(Gamma, n - 1));
-      //double tau0 = 3e-5 / (scaleFactor * scaleFactor);// *4.0);//*4.0);// Bn* k* std::pow(Gamma, n);
-      //forcing /= scaleFactor * scaleFactor * scaleFactor; 
-      //endTime *= scaleFactor * scaleFactor;
-      //deltax /= scaleFactor;
-
-      // Acoustic Scaling
-
-      real k = nuLB * scaleFactor;
-      //double tau0 = 3e-5; 
-      forcing /= scaleFactor;
-      endTime *= scaleFactor;
-      deltax /= scaleFactor;
-
-      //outTime = endTime;
-
-      real beta = 14;
-      real c = 10; // 1.0 / 6.0;
-      real mu0 = 1e-4;
-
-      SPtr<Rheology> thix = Rheology::getInstance();
-      //Herschel-Bulkley
-      thix->setPowerIndex(n);
-      thix->setViscosityParameter(k);
-      thix->setYieldStress(tau0);
-      //Powell-Eyring
-      thix->setBeta(beta);
-      thix->setC(c);
-      thix->setMu0(mu0);
-
-      SPtr<BC> noSlipBC(new NoSlipBC());
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyHerschelBulkleyModelNoSlipBCStrategy()));
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyPowellEyringModelNoSlipBCStrategy()));
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelNoSlipBCStrategy()));
-
-      mu::Parser fctVx;
-      fctVx.SetExpr("u");
-      fctVx.DefineConst("u", 0.001);
- 
-
-      SPtr<BC> velocityBC(new VelocityBC(true, false, false, fctVx, 0, BCFunction::INFCONST));
-      //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-      velocityBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelVelocityBCStrategy()));
-
-      //BS visitor
-      BoundaryConditionsBlockVisitor bcVisitor;
-      //bcVisitor.addBC(noSlipBC);
-      //bcVisitor.addBC(velocityBC);
-
-      SPtr<BCSet> bcProc;
-      bcProc = SPtr<BCSet>(new BCSet());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new PowellEyringModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyK17LBMKernel());
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      
-      //double forcingXY = forcing / sqrt(2.0);
-      //kernel->setForcingX1(forcingXY);
-      //kernel->setForcingX2(forcingXY);
-      
-      kernel->setForcingX1(forcing);
-      kernel->setWithForcing(true);
-      kernel->setBCSet(bcProc);
-
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-      grid->setPeriodicX1(true);
-      grid->setPeriodicX2(false);
-      grid->setPeriodicX3(true);
-      grid->setDeltaX(deltax);
-      grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-      SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-      GenBlocksGridVisitor genBlocks(gridCube);
-      grid->accept(genBlocks);
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Parameters:");
-         UBLOG(logINFO, "forcing = " << forcing);
-         UBLOG(logINFO, "rho = " << rhoLB);
-         //UBLOG(logINFO, "nu = " << nuLB);
-         UBLOG(logINFO, "U = " << U);
-         UBLOG(logINFO, "Re = " << (U * d) / (k * std::pow(Gamma, n - 1)));
-         UBLOG(logINFO, "Bn = " << tau0 / (k * std::pow(Gamma, n)));
-         UBLOG(logINFO, "k = " << k);
-         UBLOG(logINFO, "n = " << n);
-         UBLOG(logINFO, "tau0 = " << tau0);
-         UBLOG(logINFO, "deltax = " << deltax);
-         //UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-         UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-         UBLOG(logINFO, "Preprozess - start");
-      }
-
-      //walls
-      //GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3));
-      //if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-      //GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-      //if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_minX2, g_maxX3 + blockLength));
-      if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname + "/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1 - blockLength, g_maxX2, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-      if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname + "/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-      //GbCuboid3DPtr addWallXY(new GbCuboid3D(g_minX1 - 0.5*deltax, g_minX2 - 0.5 * deltax, g_minX3 - 0.5 * deltax, g_maxX1 + 0.5 * deltax, g_maxX2 + 0.5 * deltax, g_maxX3 + 0.5 * deltax));
-      //if (myid == 0) GbSystem3D::writeGeoObject(addWallXY.get(), pathname + "/geo/addWallXY", WbWriterVtkXmlASCII::getInstance());
-
-      //SPtr<GbTriFaceMesh3D> wall45(new GbTriFaceMesh3D());
-      //wall45->readMeshFromSTLFile("d:/Projects/TRR277/Project/WP1/PF45/Geo/wall45_ASCII.stl", true);
-
-
-      //wall interactors
-      //SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBC, Interactor3D::SOLID));
-      //SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBC, Interactor3D::SOLID));
-
-      SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBC, Interactor3D::SOLID));
-      SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBC, Interactor3D::SOLID));
-
-      //SPtr<D3Q27TriFaceMeshInteractor> wall45Int(new D3Q27TriFaceMeshInteractor(wall45, grid, noSlipBC, Interactor3D::SOLID));
-
-      ////////////////////////////////////////////
-      //METIS
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
-      ////////////////////////////////////////////
-      /////delete solid blocks
-      if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-      InteractorsHelper intHelper(grid, metisVisitor);
-      //intHelper.addInteractor(addWallZminInt);
-      //intHelper.addInteractor(addWallZmaxInt);
-      intHelper.addInteractor(addWallYminInt);
-      intHelper.addInteractor(addWallYmaxInt);
-      //intHelper.addInteractor(wall45Int);
-      intHelper.selectBlocks();
-      if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-      //////////////////////////////////////
-
-      SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-      ppblocks->update(0);
-
-      unsigned long nob = grid->getNumberOfBlocks();
-      int gl = 3;
-      unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-      unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-      unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl);
-      real needMemAll = real(nodg * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4));
-      real needMem = needMemAll / real(comm->getNumberOfProcesses());
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Number of blocks = " << nob);
-         UBLOG(logINFO, "Number of nodes  = " << nod);
-         int minInitLevel = grid->getCoarsestInitializedLevel();
-         int maxInitLevel = grid->getFinestInitializedLevel();
-         for (int level = minInitLevel; level <= maxInitLevel; level++)
-         {
-            int nobl = grid->getNumberOfBlocks(level);
-            UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-            UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * nodb);
-         }
-         UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-         UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-         UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-      }
-
-      SetKernelBlockVisitor kernelVisitor(kernel, k, availMem, needMem);
-      grid->accept(kernelVisitor);
-
-      //BC
-      intHelper.setBC();
-
-      //initialization of distributions
-      InitDistributionsBlockVisitor initVisitor;
-      grid->accept(initVisitor);
-
-
-      if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-
-
-      //set connectors
-      //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-      //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, k, iProcessor);
-      //grid->accept(setConnsVisitor);
-
-      OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-      grid->accept(setConnsVisitor);
-
-      grid->accept(bcVisitor);
-
-      SPtr<UbScheduler> geoSch(new UbScheduler(1));
-      WriteBoundaryConditionsSimulationObserver ppgeo = WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm);
-      ppgeo.update(1);
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-      SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
-
-      SPtr<UbScheduler> forceSch(new UbScheduler(1000));
-      //real dummy = 1;
-      SPtr<CalculateTorqueSimulationObserver> fp = std::make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, pathname + "/forces/forces.csv", comm);
-      fp->addInteractor(addWallYminInt);
-
-      SPtr<CalculateTorqueSimulationObserver> fp2 = std::make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, pathname + "/forces/forces2.csv", comm);
-      fp2->addInteractor(addWallYmaxInt);
-
-      //write data for visualization of macroscopic quantities
-      SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-      SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, pathname,
-         WbWriterVtkXmlASCII::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-
-      SPtr<WriteThixotropyQuantitiesSimulationObserver> writeThixotropicMQSimulationObserver(new WriteThixotropyQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(outTime));
-      SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-      simulation->addSimulationObserver(npr);
-      simulation->addSimulationObserver(writeMQSimulationObserver);
-      simulation->addSimulationObserver(writeThixotropicMQSimulationObserver);
-      simulation->addSimulationObserver(fp);
-      simulation->addSimulationObserver(fp2);
-      //simulation->addSimulationObserver(migSimulationObserver);
-      //simulation->addSimulationObserver(restartSimulationObserver);
-
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      simulation->run();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         //pflowForcing(string(argv[1]));
-         bflow(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/HerschelBulkleySphere/CMakeLists.txt b/apps/cpu/HerschelBulkleySphere/CMakeLists.txt
deleted file mode 100644
index 87ecc61f0ce915be47d16b15133d155411067877..0000000000000000000000000000000000000000
--- a/apps/cpu/HerschelBulkleySphere/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(HerschelBulkleySphere)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbsphere.cpp )
\ No newline at end of file
diff --git a/apps/cpu/HerschelBulkleySphere/hbsphere.cfg b/apps/cpu/HerschelBulkleySphere/hbsphere.cfg
deleted file mode 100644
index ee4b49ef79ab0a589f355725a5b5bd61a376ee4c..0000000000000000000000000000000000000000
--- a/apps/cpu/HerschelBulkleySphere/hbsphere.cfg
+++ /dev/null
@@ -1,29 +0,0 @@
-outputPath = d:/temp/Herschel-Bulkley_sphere_Re_200_n_0.3_Bn_0.01_slip
-
-numOfThreads = 4
-availMem = 8e9
-logToFile = false
-
-blocknx = 25 25 25
-boundingBox = 125 50 50
-deltax = 1
-
-refineLevel = 0
-
-radius = 5
-sphereCenter = 25 25 25
-
-velocity = 1e-3
-n = 0.3
-Re = 200
-Bn = 0.01
-
-
-newStart = true
-restartStep = 100000
-
-cpStart = 100000
-cpStep = 100000
-
-outTime = 10000 
-endTime = 100000
\ No newline at end of file
diff --git a/apps/cpu/HerschelBulkleySphere/hbsphere.cpp b/apps/cpu/HerschelBulkleySphere/hbsphere.cpp
deleted file mode 100644
index 79ff327a61c37542c3af2d1367b0df5c58d3a853..0000000000000000000000000000000000000000
--- a/apps/cpu/HerschelBulkleySphere/hbsphere.cpp
+++ /dev/null
@@ -1,398 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-
-void bflow(string configname)
-{
-    using namespace vf::lbm::dir;
-
-   try
-   {
-      vf::basics::ConfigurationFile config;
-      config.load(configname);
-
-      string          outputPath = config.getValue<string>("outputPath");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-      vector<real>  boundingBox = config.getVector<real>("boundingBox");
-      //double          nuLB = config.getValue<double>("nuLB");
-      real          endTime = config.getValue<real>("endTime");
-      real          outTime = config.getValue<real>("outTime");
-      real          availMem = config.getValue<real>("availMem");
-      int             refineLevel = config.getValue<int>("refineLevel");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      real          restartStep = config.getValue<real>("restartStep");
-      real          deltax = config.getValue<real>("deltax");
-      real          radius = config.getValue<real>("radius");
-      real          cpStep = config.getValue<real>("cpStep");
-      real          cpStart = config.getValue<real>("cpStart");
-      bool            newStart = config.getValue<bool>("newStart");
-      real          velocity = config.getValue<real>("velocity");
-      real          n = config.getValue<real>("n");
-      real          Re = config.getValue<real>("Re");
-      real          Bn = config.getValue<real>("Bn");
-      vector<real>  sphereCenter = config.getVector<real>("sphereCenter");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = outputPath.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      real rhoLB = 0.0;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      //bounding box
-
-      real g_minX1 = 0;
-      real g_minX2 = 0;
-      real g_minX3 = 0;
-
-      real g_maxX1 = boundingBox[0];
-      real g_maxX2 = boundingBox[1];
-      real g_maxX3 = boundingBox[2];
-
-      //double g_minX1 = -boundingBox[0]/2.0;
-      //double g_minX2 = -boundingBox[1] / 2.0;
-      //double g_minX3 = -boundingBox[2]/2.0;
-
-      //double g_maxX1 = boundingBox[0]/2.0;
-      //double g_maxX2 = boundingBox[1]/2.0;
-      //double g_maxX3 = boundingBox[2]/2.0;
-
-      real blockLength = 3.0 * deltax;
-
-      real d = 2.0 * radius;
-      real U = velocity;
-      real Gamma = U / d;
-
-      real k = (U * d) / (Re * std::pow(Gamma, n - 1));
-      real tau0 = Bn * k * std::pow(Gamma, n);
-
-      //double k = 0.05; // (U * d) / (Re * std::pow(Gamma, n - 1));
-      //double tau0 = 3e-6; //Bn * k * std::pow(Gamma, n);
-
-      //double forcing = 8e-7;
-
-      real omegaMin = 1.0e-8;
-
-      SPtr<Rheology> thix = Rheology::getInstance();
-      thix->setPowerIndex(n);
-      thix->setViscosityParameter(k);
-      thix->setYieldStress(tau0);
-      thix->setOmegaMin(omegaMin);
-
-      SPtr<BC> noSlipBC(new NoSlipBC());
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-      noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyHerschelBulkleyModelNoSlipBCStrategy()));
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelNoSlipBCStrategy()));
-
-      SPtr<BC> slipBC(new SlipBC());
-      slipBC->setBCStrategy(SPtr<BCStrategy>(new SimpleSlipBCStrategy()));
-
-      mu::Parser fct;
-      fct.SetExpr("U");
-      fct.DefineConst("U", velocity);
-      //double H = boundingBox[1];
-      //mu::Parser fct;
-      //fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4");
-      //fct.DefineConst("U", U);
-      //fct.DefineConst("H", H);
-      SPtr<BC> velocityBC(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST));
-      velocityBC->setBCStrategy(SPtr<BCStrategy>(new SimpleVelocityBCStrategy()));
-      //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityWithDensityBCStrategy()));
-
-      SPtr<BC> densityBC(new DensityBC());
-      densityBC->setBCStrategy(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
-      //densityBC->setBCStrategy(SPtr<BCStrategy>(new NonReflectingOutflowBCStrategy()));
-
-
-      //BS visitor
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBC);
-      bcVisitor.addBC(slipBC);
-      bcVisitor.addBC(velocityBC);
-      bcVisitor.addBC(densityBC);
-      
-      SPtr<BCSet> bcProc;
-      bcProc = SPtr<BCSet>(new BCSet());
-
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyK17LBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel());
-      kernel->setBCSet(bcProc);
-      //kernel->setForcingX1(forcing);
-      //kernel->setWithForcing(true);
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-      grid->setPeriodicX1(false);
-      grid->setPeriodicX2(true);
-      grid->setPeriodicX3(true);
-      grid->setDeltaX(deltax);
-      grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-      SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-      //sphere
-      SPtr<GbObject3D> sphere(new GbSphere3D(sphereCenter[0], sphereCenter[1], sphereCenter[2], radius));
-      GbSystem3D::writeGeoObject(sphere.get(), outputPath + "/geo/sphere", WbWriterVtkXmlBinary::getInstance());
-      SPtr<D3Q27Interactor> sphereInt(new D3Q27Interactor(sphere, grid, noSlipBC, Interactor3D::SOLID));
-
-      ////////////////////////////////////////////
-      //METIS
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY));
-      ////////////////////////////////////////////
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIOMigrationSimulationObserver> restartSimulationObserver(new MPIIOMigrationSimulationObserver(grid, mSch, metisVisitor, outputPath, comm));
-      restartSimulationObserver->setLBMKernel(kernel);
-      restartSimulationObserver->setBCSet(bcProc);
-      //restartSimulationObserver->setNu(k);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Parameters:");
-         //UBLOG(logINFO, "forcing = " << forcing);
-         UBLOG(logINFO, "rho = " << rhoLB);
-         UBLOG(logINFO, "U = " << U);
-         UBLOG(logINFO, "Re = " << (U * d) / (k * std::pow(Gamma, n - 1)));
-         UBLOG(logINFO, "Bn = " << tau0 /(k * std::pow(Gamma, n)));
-         UBLOG(logINFO, "k = " << k);
-         UBLOG(logINFO, "n = " << n);
-         UBLOG(logINFO, "tau0 = " << tau0);
-         UBLOG(logINFO, "deltax = " << deltax);
-         UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-         UBLOG(logINFO, "number of threads = " << numOfThreads);
-         UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses());
-         UBLOG(logINFO, "blocknx = " << blocknx[0] << " " << blocknx[1] << " " << blocknx[2]);
-         UBLOG(logINFO, "boundingBox = " << boundingBox[0] << " " << boundingBox[1] << " " << boundingBox[2]);
-         UBLOG(logINFO, "sphereCenter = " << sphereCenter[0] << " " << sphereCenter[1] << " " << sphereCenter[2]);
-         UBLOG(logINFO, "output path = " << outputPath);
-         UBLOG(logINFO, "Preprozess - start");
-      }
-
-      if (newStart)
-      {
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if (refineLevel > 0)
-         {
-            GbCuboid3DPtr refCube(new GbCuboid3D(-10, -10, -10, 0, 0, 0));
-            if (myid == 0) GbSystem3D::writeGeoObject(refCube.get(), outputPath + "/geo/refCube", WbWriterVtkXmlASCII::getInstance());
-            
-            if (myid == 0) UBLOG(logINFO, "Refinement - start");
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm);
-            //refineHelper.addGbObject(sphere, refineLevel);
-            refineHelper.addGbObject(refCube, refineLevel);
-            refineHelper.refine();
-            if (myid == 0) UBLOG(logINFO, "Refinement - end");
-         }
-
-         //walls
-         GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(wallZmin.get(), outputPath + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(wallZmax.get(), outputPath + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_minX2, g_maxX3 + blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(wallYmin.get(), outputPath + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - blockLength, g_maxX2, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(wallYmax.get(), outputPath + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_minX1, g_maxX2 + blockLength, g_maxX3 + blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(wallXmin.get(), outputPath + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(wallXmax.get(), outputPath + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance());
-
-         //wall interactors
-         SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, slipBC, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, slipBC, Interactor3D::SOLID));
-                                                                               
-         SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, slipBC, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, slipBC, Interactor3D::SOLID));
-
-         SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, velocityBC, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, densityBC, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY));
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(wallXminInt);
-         intHelper.addInteractor(wallXmaxInt);
-         intHelper.addInteractor(wallYminInt);
-         intHelper.addInteractor(wallYmaxInt);
-         intHelper.addInteractor(wallZminInt);
-         intHelper.addInteractor(wallZmaxInt);
-         intHelper.addInteractor(sphereInt);
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->update(0);
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-         unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-         unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl);
-         real needMemAll = real(nodg * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4));
-         real needMem = needMemAll / real(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << nob);
-            UBLOG(logINFO, "Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         SetKernelBlockVisitor kernelVisitor(kernel, k, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         //BC
-         intHelper.setBC();
-
-         //initialization of distributions
-         InitDistributionsBlockVisitor initVisitor;
-         grid->accept(initVisitor);
-
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         restartSimulationObserver->restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-         SetBcBlocksBlockVisitor v(sphereInt);
-         grid->accept(v);
-         sphereInt->initInteractor();
-      }
-      
-      omp_set_num_threads(numOfThreads);
-
-      //set connectors
-      //InterpolationProcessorPtr iProcessor(new ThixotropyInterpolationProcessor());
-      //static_pointer_cast<ThixotropyInterpolationProcessor>(iProcessor)->setOmegaMin(thix->getOmegaMin());
-      //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, k, iProcessor);
-      //grid->accept(setConnsVisitor);
-
-      OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-      grid->accept(setConnsVisitor);
-
-      grid->accept(bcVisitor);
-
-      SPtr<UbScheduler> geoSch(new UbScheduler(1));
-      WriteBoundaryConditionsSimulationObserver ppgeo = WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlASCII::getInstance(), comm);
-      ppgeo.update(0);
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-      SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
-
-      //write data for visualization of macroscopic quantities
-      SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-      //SPtr<UbScheduler> visSch(new UbScheduler(10,1));
-      SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-      //writeMQSimulationObserver->update(0);
-
-      real area = UbMath::PI*radius*radius;
-      SPtr<UbScheduler> forceSch(new UbScheduler(100));
-      SPtr<CalculateForcesSimulationObserver> fp = make_shared<CalculateForcesSimulationObserver>(grid, forceSch, outputPath + "/forces/forces.txt", comm, velocity, area);
-      fp->addInteractor(sphereInt);
-
-      SPtr<WriteThixotropyQuantitiesSimulationObserver> writeThixotropicMQSimulationObserver(new WriteThixotropyQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-      SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-      simulation->addSimulationObserver(npr);
-      simulation->addSimulationObserver(fp);
-      simulation->addSimulationObserver(writeMQSimulationObserver);
-      simulation->addSimulationObserver(writeThixotropicMQSimulationObserver);
-      simulation->addSimulationObserver(restartSimulationObserver);
-
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      simulation->run();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         //pflowForcing(string(argv[1]));
-         bflow(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/InterfaceTest/itest.cpp b/apps/cpu/InterfaceTest/itest.cpp
index e8c93d4e5b3698b75964d63de0c18780a4566552..95430223945c7d6d6f2e15b16e6b03d51b305ff5 100644
--- a/apps/cpu/InterfaceTest/itest.cpp
+++ b/apps/cpu/InterfaceTest/itest.cpp
@@ -21,10 +21,10 @@ void run()
       string  pathname = "d:/temp/InterfaceTest";
       int  endTime = 2000;
       double  outTime = 100;
-      LBMReal dx =  0.05;
+      real dx =  0.05;
       
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = 3.97e-7;
+      real rhoLB = 0.0;
+      real nuLB = 3.97e-7;
 
       SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
 
@@ -134,8 +134,8 @@ void run()
       }
 
 
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel());
-      dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->setRelaxationParameter(CompressibleCumulantLBMKernel::NORMAL);
+      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K15CompressibleNavierStokes());
+      dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->setRelaxationParameter(K15CompressibleNavierStokes::NORMAL);
       //
       SPtr<BCProcessor> bcProcessor(new BCProcessor());
 
diff --git a/apps/cpu/JetBreakup/CMakeLists.txt b/apps/cpu/JetBreakup/CMakeLists.txt
deleted file mode 100644
index 9a21c8044d53cedaec4a27a37b420b687bd21132..0000000000000000000000000000000000000000
--- a/apps/cpu/JetBreakup/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(JetBreakup)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES JetBreakup.cpp )
\ No newline at end of file
diff --git a/apps/cpu/JetBreakup/JetBreakup.cfg b/apps/cpu/JetBreakup/JetBreakup.cfg
deleted file mode 100644
index abc2436d34371e663eca09ce83c3052cd2e71c37..0000000000000000000000000000000000000000
--- a/apps/cpu/JetBreakup/JetBreakup.cfg
+++ /dev/null
@@ -1,37 +0,0 @@
-pathname = D:/temp/JetBreakupSharpInterfaceShortTest3
-pathGeo = d:/Projects/TRR277/Project/WP2/JetBreakup
-
-numOfThreads = 18
-availMem = 10e9
-
-#Grid
-blocknx = 25 25 25
-
-factorLx = 2.0
-factorLy = 2.5
-factorLz = 2.5
-
-#Simulation
-case = 3
-U_LB = 0.003 #inlet velocity
-interfaceWidth = 3
-D = 10 #0.0001 # m
-D_LB = 50
-
-contactAngle = 110.0
-phi_L = 0.0
-phi_H = 1.0
-Phase-field Relaxation = 0.6
-Mobility = 0.02 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation parameter, to activate it need to change in kernel tauH to tauH1
-
-
-logToFile = false
-
-newStart = true
-restartStep = 10000
-
-cpStart = 10000
-cpStep = 10000
-
-outTime = 100
-endTime = 100000#36000
\ No newline at end of file
diff --git a/apps/cpu/JetBreakup/JetBreakup.cpp b/apps/cpu/JetBreakup/JetBreakup.cpp
deleted file mode 100644
index e966ddcd5b24762d57fb8c88b52ec887bea9d8dc..0000000000000000000000000000000000000000
--- a/apps/cpu/JetBreakup/JetBreakup.cpp
+++ /dev/null
@@ -1,687 +0,0 @@
-#include <iostream>
-#include <memory>
-#include <string>
-
-#include "MultiphaseFlow/MultiphaseFlow.h"
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-#include "VirtualFluids.h"
-
-using namespace std;
-
-void setInflowBC(real x1, real x2, real x3, real radius, int dir)
-{
-}
-
-void run(string configname)
-{
-    using namespace vf::lbm::dir;
-
-    try {
-
-        // Sleep(30000);
-
-        vf::basics::ConfigurationFile config;
-        config.load(configname);
-
-        string pathname = config.getValue<string>("pathname");
-        string pathGeo = config.getValue<string>("pathGeo");
-        int numOfThreads = config.getValue<int>("numOfThreads");
-        vector<int> blocknx = config.getVector<int>("blocknx");
-        real U_LB = config.getValue<real>("U_LB");
-        int interfaceWidth = config.getValue<int>("interfaceWidth");
-        real theta = config.getValue<real>("contactAngle");
-        real D_LB = config.getValue<real>("D_LB");
-        real phiL = config.getValue<real>("phi_L");
-        real phiH = config.getValue<real>("phi_H");
-        real tauH = config.getValue<real>("Phase-field Relaxation");
-        real mob = config.getValue<real>("Mobility");
-
-        real endTime = config.getValue<real>("endTime");
-        real outTime = config.getValue<real>("outTime");
-        real availMem = config.getValue<real>("availMem");
-
-        bool logToFile = config.getValue<bool>("logToFile");
-        real restartStep = config.getValue<real>("restartStep");
-        real cpStart = config.getValue<real>("cpStart");
-        real cpStep = config.getValue<real>("cpStep");
-        bool newStart = config.getValue<bool>("newStart");
-
-        int caseN = config.getValue<int>("case");
-
-        real factorLx = config.getValue<real>("factorLx");
-        real factorLy = config.getValue<real>("factorLy");
-        real factorLz = config.getValue<real>("factorLz");
-
-        //real dx = config.getValue<real>("dx");
-
-
-        SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-        int myid = comm->getProcessID();
-
-        if (myid == 0) UBLOG(logINFO, "Jet Breakup: Start!");
-
-        if (logToFile) {
-#if defined(__unix__)
-            if (myid == 0) {
-                const char *str = pathname.c_str();
-                mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-            }
-#endif
-
-            if (myid == 0) {
-                stringstream logFilename;
-                logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-                UbLog::output_policy::setStream(logFilename.str());
-            }
-        }
-
-        // Sleep(30000);
-
-        real rho_h = 0, rho_l = 0, r_rho = 0, mu_h = 0, /*mu_l,*/ Uo = 0, D = 0, sigma = 0;
-        real Dg = 10;
-
-        switch (caseN) {
-            case 1:
-                // density of heavy fluid (kg/m^3)
-                rho_h = 848;
-                // density of light fluid (kg/m^3)
-                rho_l = 34.5;
-                // density ratio
-                r_rho = rho_h / rho_l;
-                // dynamic viscosity of heavy fluid (Pa � s)
-                mu_h = 2.87e-3;
-                // dynamic viscosity of light fluid (Pa � s)
-                // mu_l = 1.97e-5;
-                // velocity (m/s)
-                Uo = 100;
-                // diameter of jet (m)
-                D = 0.0001;
-                // surface tension (N/m)
-                sigma = 0.03;
-                break;
-            case 2:
-                // density of heavy fluid (kg/m^3)
-                rho_h = 848;
-                // density of light fluid (kg/m^3)
-                rho_l = 1.205;
-                // density ratio
-                r_rho = rho_h / rho_l;
-                // dynamic viscosity of heavy fluid (Pa � s)
-                mu_h = 2.87e-3;
-                // dynamic viscosity of light fluid (Pa � s)
-                // mu_l = 1.84e-5;
-                // velocity (m/s)
-                Uo = 200;
-                // diameter of jet (m)
-                D = 0.0001;
-                // surface tension (N/m)
-                sigma = 0.03;
-                break;
-            case 3:
-                // density of heavy fluid (kg/m^3)
-                rho_h = 1000;
-                // density of light fluid (kg/m^3)
-                rho_l = 1.0;
-                // density ratio
-                r_rho = rho_h / rho_l;
-                // dynamic viscosity of heavy fluid (Pa � s)
-                mu_h = 2.87e-3;
-                // dynamic viscosity of light fluid (Pa � s)
-                // mu_l = 1.84e-5;
-                // velocity (m/s)
-                Uo = 200;
-                // diameter of jet (m)
-                D = 0.0001;
-                Dg = 100;
-                // surface tension (N/m)
-                sigma = 0.03;
-                break;
-        }
-
-        real Re = rho_h * Uo * D / mu_h;
-        real We = rho_h * Uo * Uo * D / sigma;
-
-        real dx = Dg / D_LB;
-        //real D_LB = Dg / dx;
-        real nu_h = U_LB * D_LB / Re;
-        real nu_l = nu_h;
-        nu_h *= 0.1;
-
-        //real rho_h_LB = 1;
-        // surface tension
-        real sigma_LB = 0.0; //rho_h_LB *U_LB *U_LB *D_LB / We;
-
-        // LBMReal dLB = 0; // = length[1] / dx;
-        real rhoLB = 0.0;
-        // LBMReal nuLB = nu_l; //(uLB*dLB) / Re;
-
-        real beta = 12.0 * sigma_LB / interfaceWidth;
-        real kappa = 1.5 * interfaceWidth * sigma_LB;
-
-        //double tau0 = 715.218181094648*1000.; // Pa
-        //double muConcrete = 2.1133054011798826; // [Pa s]
-        //real u = Uo; //[m/s]
-
-
-        //double Bm = (tau0 * D) / (muConcrete * u);
-        double tau0_LB = 0;
-        //0.02;
-        //Bm *nu_h *U_LB / (D / dx);
-
-        SPtr<Rheology> rheo = Rheology::getInstance();
-        rheo->setYieldStress(tau0_LB);
-
-
-        if (myid == 0) {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "U_LB = " << U_LB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nu_l = " << nu_l);
-            UBLOG(logINFO, "nu_h = " << nu_h);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "We = " << We);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "sigma = " << sigma);
-            UBLOG(logINFO, "sigma_LB = " << sigma_LB);
-            UBLOG(logINFO, "tau0_LB = " << tau0_LB);
-            UBLOG(logINFO, "density ratio = " << r_rho);
-            // UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-        }
-
-        // bounding box
-
-        real Lx = factorLx * Dg;
-        real Ly = factorLy * Dg;
-        real Lz = factorLz * Dg;
-
-        real g_minX1 = 0;
-        real g_minX2 = -0.5 * Ly;
-        real g_minX3 = -0.5 * Lz;
-
-        real g_maxX1 = Lx;
-        real g_maxX2 = 0.5 * Ly;
-        real g_maxX3 = 0.5 * Lz;
-
-        //real g_minX1 = -0.5 * Lx;
-        //real g_minX2 = 0;
-        //real g_minX3 = -0.5 * Lz;
-
-        //real g_maxX1 = 0.5 * Lx;
-        //real g_maxX2 = Ly;
-        //real g_maxX3 = 0.5 * Lz;
-
-        //real g_minX1 = -0.5 * Lx;
-        //real g_minX2 = -0.5 * Ly;
-        //real g_minX3 = 0;
-
-        //real g_maxX1 = 0.5 * Lx;
-        //real g_maxX2 = 0.5 * Ly;
-        //real g_maxX3 = Lz;
-
-
-        // double g_maxX1 = 8.0*D;
-        // double g_maxX2 = 2.5*D;
-        // double g_maxX3 = 2.5*D;
-
-        SPtr<LBMUnitConverter> conv(new LBMUnitConverter());
-
-        // const int baseLevel = 0;
-
-        SPtr<LBMKernel> kernel;
-
-        // kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel());
-        kernel = make_shared<MultiphaseScaleDistributionLBMKernel>();
-        //kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>();
-
-        kernel->setWithForcing(false);
-        kernel->setForcingX1(0.0);
-        kernel->setForcingX2(0.0);
-        kernel->setForcingX3(0.0);
-
-        kernel->setPhiL(phiL);
-        kernel->setPhiH(phiH);
-        kernel->setPhaseFieldRelaxation(tauH);
-        kernel->setMobility(mob);
-
-        // nuL, nuG, densityRatio, beta, kappa, theta,
-
-        kernel->setCollisionFactorMultiphase(nu_h, nu_l);
-        kernel->setDensityRatio(r_rho);
-        kernel->setMultiphaseModelParameters(beta, kappa);
-        kernel->setContactAngle(theta);
-        kernel->setInterfaceWidth(interfaceWidth);
-        // dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(0.0);
-        kernel->setSigma(sigma_LB);
-
-        SPtr<BCSet> bcProc(new BCSet());
-        // BCSetPtr bcProc(new ThinWallBCSet());
-
-        kernel->setBCSet(bcProc);
-
-        SPtr<Grid3D> grid(new Grid3D(comm));
-        // grid->setPeriodicX1(true);
-        // grid->setPeriodicX2(true);
-        // grid->setPeriodicX3(true);
-        grid->setGhostLayerWidth(2);
-
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
-
-        //////////////////////////////////////////////////////////////////////////
-        // restart
-        SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-        // SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm));
-        SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm));
-        // SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm));
-        // rcp->setNu(nuLB);
-        // rcp->setNuLG(nuL, nuG);
-        // rcp->setDensityRatio(densityRatio);
-
-        rcp->setLBMKernel(kernel);
-        rcp->setBCSet(bcProc);
-        //////////////////////////////////////////////////////////////////////////
-        // BC Adapter
-        //////////////////////////////////////////////////////////////////////////////
-        mu::Parser fctF1;
-        //u_actual(r) = U_max * (4 / (D^2) * (R^2 - r^2))
-        //fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-        //fctF1.SetExpr("vx1*(1-(sqrt((x2-y0)^2+(x3-z0)^2))/(R))");
-        //fctF1.SetExpr("vy1*(1-(sqrt((x2-x0)^2+(x3-z0)^2)/R))^0.1");
-        fctF1.SetExpr("vx1");
-        //fctF1.DefineConst("vx1", 0);
-        fctF1.DefineConst("vx1", U_LB);
-        fctF1.DefineConst("R", 0.5*Dg);
-        fctF1.DefineConst("y0", (g_minX2+g_maxX2)/2);
-        fctF1.DefineConst("z0", (g_minX3+g_maxX3)/2);
-        SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, BCFunction::INFCONST));
-
-        mu::Parser fctF2;
-        fctF2.SetExpr("vx1");
-        fctF2.DefineConst("vx1", U_LB);
-        fctF2.SetExpr("vx1");
-        fctF2.DefineConst("vx1", U_LB);
-
-        // real startTime = 1;
-        // SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, startTime));
-        //SPtr<BC> velBCF2(new MultiphaseVelocityBC(true, false, false, fctF2, phiH, startTime, endTime));
-        SPtr<BC> velBCF2(new MultiphaseVelocityBC(true, false, false, fctF2, phiL, 0.0, BCFunction::INFCONST));
-
-        SPtr<BC> noSlipBC(new NoSlipBC());
-        noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy()));
-
-        SPtr<BC> denBC(new DensityBC(rhoLB));
-        denBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-
-        SPtr<BC> slipBC(new SlipBC());
-        slipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseSlipBCStrategy()));
-
-        mu::Parser fctPhi_F1;
-        fctPhi_F1.SetExpr("phiH");
-        fctPhi_F1.DefineConst("phiH", phiH);
-
-        mu::Parser fctPhi_F2;
-        fctPhi_F2.SetExpr("phiL");
-        fctPhi_F2.DefineConst("phiL", phiL);
-
-        mu::Parser fctvel_F2_init;
-        fctvel_F2_init.SetExpr("U");
-        fctvel_F2_init.DefineConst("U", 0);
-
-        velBCF1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-        velBCF2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-
-        //////////////////////////////////////////////////////////////////////////////////
-        // BC visitor
-        MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
-        bcVisitor.addBC(noSlipBC);
-        //bcVisitor.addBC(slipBC);
-        bcVisitor.addBC(denBC);
-        bcVisitor.addBC(velBCF1);
-        //bcVisitor.addBC(velBCF2);
-
-        // SPtr<D3Q27Interactor> inflowF1Int;
-        // SPtr<D3Q27Interactor> cylInt;
-
-        SPtr<D3Q27Interactor> inflowInt;
-
-        //if (newStart) {
-
-            //  if (newStart) {
-
-
-
-            // geometry
-            SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-            // if (myid == 0)
-            //     UBLOG(logINFO, "Read geoFile:start");
-            // SPtr<GbTriFaceMesh3D> cylinder = make_shared<GbTriFaceMesh3D>();
-            // cylinder->readMeshFromSTLFileBinary(pathGeo + "/" + geoFile, false);
-            // GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-            // if (myid == 0)
-            //     UBLOG(logINFO, "Read geoFile:stop");
-            //  inflow
-            //  GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 *
-            //  dx, g_maxX3));
-            // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1 * 0.5 - dx, g_minX2 - dx, g_minX3 * 0.5 - dx,
-            //                                          g_maxX1 * 0.5 + dx, g_minX2, g_maxX3 * 0.5 + dx));
-            // if (myid == 0)
-            //     GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1",
-            //                                WbWriterVtkXmlASCII::getInstance());
-
-            GbCylinder3DPtr geoInflow(new GbCylinder3D(g_minX1 - 2.0*dx, 0.0, 0.0, g_minX1, 0.0, 0.0, Dg / 2.0));
-
-            //GbCylinder3DPtr geoInflow(new GbCylinder3D(0.0, g_minX2 - 2.0 * dx, 0.0, 0.0, g_minX2, 0.0, Dg / 2.0));
-
-            //GbCylinder3DPtr geoInflow(new GbCylinder3D(0.0, 0.0, g_minX3 - 2.0 * dx, 0.0, 0.0, g_minX3, Dg / 2.0));
-
-
-
-            //GbCylinder3DPtr geoSolid(new GbCylinder3D(g_minX1 - 2.0 * dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1+2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, 1.5*D / 2.0));
-            //if (myid == 0) GbSystem3D::writeGeoObject(geoSolid.get(), pathname + "/geo/geoSolid", WbWriterVtkXmlASCII::getInstance());
-
-            SPtr<GbTriFaceMesh3D> meshInflowPipe = std::make_shared<GbTriFaceMesh3D>();
-            if (myid == 0) UBLOG(logINFO, "Read meshInflowPipe:start");
-            //meshInflowPipe->readMeshFromSTLFileBinary(pathGeo + "/JetTube4.stl", false);
-            meshInflowPipe->readMeshFromSTLFileBinary(pathGeo + "/JetTubeX50.stl", false);
-            //meshInflowPipe->readMeshFromSTLFileASCII(pathGeo + "/JetTubeScaled5.stl", false);
-            if (myid == 0) UBLOG(logINFO, "Read meshInflowPipe:end");
-            //meshInflowPipe->scale(1e-04, 1e-04, 1e-04);
-            if (myid == 0) GbSystem3D::writeGeoObject(meshInflowPipe.get(), pathname + "/geo/meshInflowPipe", WbWriterVtkXmlBinary::getInstance());
-            SPtr<Interactor3D> intrInflowPipe = std::make_shared<D3Q27TriFaceMeshInteractor>(meshInflowPipe, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS);
-
-            // GbCylinder3DPtr cylinder2(
-            //    new GbCylinder3D(0.0, g_minX2 - 2.0 * dx / 2.0, 0.0, 0.0, g_minX2 + 4.0 * dx, 0.0, 8.0+2.0*dx));
-            // if (myid == 0)
-            //    GbSystem3D::writeGeoObject(cylinder2.get(), pathname + "/geo/cylinder2",
-            //                               WbWriterVtkXmlASCII::getInstance());
-            // outflow
-            // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original)
-            // GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx));
-            if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-            // double blockLength = blocknx[0] * dx;
-
-            if (myid == 0) {
-                UBLOG(logINFO, "Preprocess - start");
-            }
-
-            grid->setDeltaX(dx);
-            grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-            //grid->setPeriodicX1(false);
-            //grid->setPeriodicX2(false);
-            //grid->setPeriodicX3(false);
-
-            GenBlocksGridVisitor genBlocks(gridCube);
-            grid->accept(genBlocks);
-
-            SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-            // SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBC,
-            //                                                         Interactor3D::SOLID, Interactor3D::POINTS));
-
-            // inflowF1Int =
-            //    SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBC, Interactor3D::SOLID));
-            // inflowF1Int->addBC(velBCF2);
-
-            SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBC, Interactor3D::SOLID));
-
-            // Create boundary conditions geometry
-            GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_minX3));
-            GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_maxX3, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3 + 2.0*dx));
-            GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_minX2, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - 2.0 * dx, g_maxX2, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance());
-
-            // Add boundary conditions to grid generator
-            SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID));
-
-
-//////////////////////////
-            real inflowLength = 10;
-            real difX2 = (g_maxX2 - g_minX2) / 2.0 - 0.5*Dg;
-            real difX3 = (g_maxX3 - g_minX3) / 2.0 - 0.5 * Dg;
-            GbCuboid3DPtr wallInfZmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_minX3 + difX3));
-            GbSystem3D::writeGeoObject(wallInfZmin.get(), pathname + "/geo/wallInfZmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallInfZmax(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_maxX3 - difX3, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx));
-            GbSystem3D::writeGeoObject(wallInfZmax.get(), pathname + "/geo/wallInfZmax", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallInfYmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_minX2 + difX2, g_maxX3));
-            GbSystem3D::writeGeoObject(wallInfYmin.get(), pathname + "/geo/wallInfYmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallInfYmax(new GbCuboid3D(g_minX1 - 2.0 * dx, g_maxX2 - difX2, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_maxX3));
-            GbSystem3D::writeGeoObject(wallInfYmax.get(), pathname + "/geo/wallInfYmax", WbWriterVtkXmlASCII::getInstance());
-
-            // Add boundary conditions to grid generator
-            SPtr<D3Q27Interactor> wallInfZminInt(new D3Q27Interactor(wallInfZmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallInfZmaxInt(new D3Q27Interactor(wallInfZmax, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallInfYminInt(new D3Q27Interactor(wallInfYmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallInfYmaxInt(new D3Q27Interactor(wallInfYmax, grid, noSlipBC, Interactor3D::SOLID));
-
-
-
-            //GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 + difX2, g_minX3 + difX3, g_minX1 + 2.0 * dx, g_maxX2 - difX2, g_maxX3 - difX3));
-
-            if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-            //////////////////////////////////////
-
-
-
-
-
-            // cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCF1, Interactor3D::SOLID));
-            // cylInt->addBC(velBCF2);
-            //  SPtr<D3Q27Interactor> cyl2Int(new D3Q27Interactor(cylinder2, grid, noSlipBC,
-            //  Interactor3D::SOLID));
-
-            inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCF1, Interactor3D::SOLID));
-            //inflowInt->addBC(velBCF2);
-
-            GbCylinder3DPtr geoAirInflow(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1, g_maxX2 / 2.0, g_maxX3 / 2.0, D * 0.9 / 2.0));
-            if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), pathname + "/geo/geoAirInflow", WbWriterVtkXmlASCII::getInstance());            
-            SPtr<D3Q27Interactor> inflowAirInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoAirInflow, grid, velBCF2, Interactor3D::SOLID));
-
-            //SPtr<D3Q27Interactor> solidInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoSolid, grid, noSlipBC, Interactor3D::SOLID));
-
-
-            InteractorsHelper intHelper(grid, metisVisitor, false);
-            //intHelper.addInteractor(cylInt);
-            //intHelper.addInteractor(tubes);
-            //intHelper.addInteractor(outflowInt);
-            // intHelper.addInteractor(cyl2Int);
-            intHelper.addInteractor(intrInflowPipe);
-            intHelper.addInteractor(wallXminInt);
-            intHelper.addInteractor(wallXmaxInt);
-            intHelper.addInteractor(wallZminInt);
-            intHelper.addInteractor(wallZmaxInt);
-            intHelper.addInteractor(wallYminInt);
-            intHelper.addInteractor(wallYmaxInt);
-
-            //intHelper.addInteractor(wallInfZminInt);
-            //intHelper.addInteractor(wallInfZmaxInt);
-            //intHelper.addInteractor(wallInfYminInt);
-            //intHelper.addInteractor(wallInfYmaxInt);
-
-            intHelper.addInteractor(inflowInt);
-            //intHelper.addInteractor(outflowInt);
-            //intHelper.addInteractor(inflowAirInt);
-
-            intHelper.selectBlocks();
-
-            ppblocks->update(0);
-            ppblocks.reset();
-
-            unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-            int ghostLayer = 3;
-            unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]);
-            unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-            unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-            real needMemAll = real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4));
-            real needMem = needMemAll / real(comm->getNumberOfProcesses());
-
-            if (myid == 0) {
-                UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-                UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-                int minInitLevel = grid->getCoarsestInitializedLevel();
-                int maxInitLevel = grid->getFinestInitializedLevel();
-                for (int level = minInitLevel; level <= maxInitLevel; level++) {
-                    int nobl = grid->getNumberOfBlocks(level);
-                    UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-                    UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock);
-                }
-                UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-                UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-                UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-            }
-
-            MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h, nu_l, availMem, needMem);
-
-            grid->accept(kernelVisitor);
-
-            //if (!newStart) {
-            //    rcp->readBlocks((int)restartStep);
-            //    grid->accept(metisVisitor);
-            //    rcp->readDataSet((int)restartStep);
-            //    grid->setTimeStep(restartStep);
-            //}
-
-            intHelper.setBC();
-
-        if (newStart) {
-
-                // initialization of distributions
-                // mu::Parser fct1;
-                // fct1.SetExpr("phiL");
-                // fct1.DefineConst("phiL", phiL);
-                real x1c = g_minX1 - Dg*5; // (g_maxX1 - g_minX1-1)/2; //
-                real x2c = (g_minX2 + g_maxX2) / 2;
-                real x3c = (g_minX3 + g_maxX3) / 2;
-
-                mu::Parser fct1;
-                fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-                //fct1.SetExpr("(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness))-(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius2)/interfaceThickness))");
-                // fct1.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0");
-                fct1.DefineConst("x1c", x1c);
-                fct1.DefineConst("x2c", x2c);
-                fct1.DefineConst("x3c", x3c);
-                fct1.DefineConst("dx", dx);
-                fct1.DefineConst("radius", 5.0*Dg + (inflowLength-1)*dx /* + 2. * dx*/);
-                fct1.DefineConst("radius2", Dg / 4.);
-                fct1.DefineConst("interfaceThickness", interfaceWidth * dx);
-
-                mu::Parser fct2;
-                // fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-                fct2.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0");
-                fct2.DefineConst("x1c", x1c);
-                fct2.DefineConst("x2c", x2c);
-                fct2.DefineConst("x3c", x3c);
-                fct2.DefineConst("dx", dx);
-                fct2.DefineConst("radius", 0.5 * D /* + 2. * dx*/);
-                fct2.DefineConst("interfaceThickness", interfaceWidth * dx);
-
-                MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
-                //initVisitor.setPhi(fct1);
-                grid->accept(initVisitor);
-            }
-
-            // boundary conditions grid
-            {
-                SPtr<UbScheduler> geoSch(new UbScheduler(1));
-                SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-                ppgeo->update(0);
-                ppgeo.reset();
-            }
-
-            if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-        //} else {
-         if (!newStart) {
-            rcp->restart((int)restartStep);
-            grid->setTimeStep(restartStep);
-            SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppblocks->update(10000);
-            if (myid == 0) UBLOG(logINFO, "Restart - end");
-        }
-
-        //  TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-        //  grid->accept(setConnsVisitor);
-
-        // ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-
-        grid->accept(bcVisitor);
-
-        //ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        grid->accept(setConnsVisitor);
-
-        SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-        real t_ast, t;
-        t_ast = 7.19;
-        t = (int)(t_ast/(U_LB/(D_LB)));
-        visSch->addSchedule(t,t,t); //t=7.19
-        // SPtr<WriteMultiphaseQuantitiesSimulationObserver> pp(new WriteMultiphaseQuantitiesSimulationObserver(
-        //     grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-        SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> pp(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));        
-        pp->update(0);
-
-        SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-        SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
-
-        // SPtr<UbScheduler> timeBCSch(new UbScheduler(1, startTime, startTime));
-        // auto timeDepBC = make_shared<TimeDependentBCSimulationObserver>(TimeDependentBCSimulationObserver(grid, timeBCSch));
-        // timeDepBC->addInteractor(inflowInt);
-
-#ifdef _OPENMP
-        omp_set_num_threads(numOfThreads);
-#endif
-
-        SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-        SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-        simulation->addSimulationObserver(npr);
-        simulation->addSimulationObserver(pp);
-        // simulation->addSimulationObserver(timeDepBC);
-        // simulation->addSimulationObserver(timeDepBC);
-        simulation->addSimulationObserver(rcp);
-
-        if (myid == 0) UBLOG(logINFO, "Simulation-start");
-        simulation->run();
-        if (myid == 0) UBLOG(logINFO, "Simulation-end");
-    } catch (std::exception &e) {
-        cerr << e.what() << endl << flush;
-    } catch (std::string &s) {
-        cerr << s << endl;
-    } catch (...) {
-        cerr << "unknown exception" << endl;
-    }
-}
-int main(int argc, char *argv[])
-{
-    // Sleep(30000);
-    if (argv != NULL) {
-        if (argv[1] != NULL) {
-            run(string(argv[1]));
-        } else {
-            cout << "Configuration file is missing!" << endl;
-        }
-    }
-}
diff --git a/apps/cpu/JetBreakup/JetBreakup.cpp.new b/apps/cpu/JetBreakup/JetBreakup.cpp.new
deleted file mode 100644
index 1c03deebdc1c6bfa195735c2cdf1dbb4ba0a8212..0000000000000000000000000000000000000000
--- a/apps/cpu/JetBreakup/JetBreakup.cpp.new
+++ /dev/null
@@ -1,638 +0,0 @@
-#include <iostream>
-#include <memory>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-void setInflowBC(double x1, double x2, double x3, double radius, int dir)
-{
-
-}
-
-void run(string configname)
-{
-    try {
-
-        // Sleep(30000);
-
-        vf::basics::ConfigurationFile config;
-        config.load(configname);
-
-        string pathname = config.getValue<string>("pathname");
-        //string pathGeo = config.getValue<string>("pathGeo");
-        //string geoFile = config.getValue<string>("geoFile");
-        int numOfThreads = config.getValue<int>("numOfThreads");
-        vector<int> blocknx = config.getVector<int>("blocknx");
-        //vector<double> boundingBox = config.getVector<double>("boundingBox");
-        // vector<double>  length = config.getVector<double>("length");
-        double U_LB = config.getValue<double>("U_LB");
-        // double uF2                         = config.getValue<double>("uF2");
-        //double nuL = config.getValue<double>("nuL");
-        //double nuG = config.getValue<double>("nuG");
-        //double densityRatio = config.getValue<double>("densityRatio");
-        //double sigma = config.getValue<double>("sigma");
-        int interfaceWidth = config.getValue<int>("interfaceWidth");
-        //double D          = config.getValue<double>("D");
-        double theta = config.getValue<double>("contactAngle");
-        double D_LB = config.getValue<double>("D_LB");
-        double phiL = config.getValue<double>("phi_L");
-        double phiH = config.getValue<double>("phi_H");
-        double tauH = config.getValue<double>("Phase-field Relaxation");
-        double mob = config.getValue<double>("Mobility");
-
-        double endTime = config.getValue<double>("endTime");
-        double outTime = config.getValue<double>("outTime");
-        double availMem = config.getValue<double>("availMem");
-        //int refineLevel = config.getValue<int>("refineLevel");
-        //double Re = config.getValue<double>("Re");
-        
-        bool logToFile = config.getValue<bool>("logToFile");
-        double restartStep = config.getValue<double>("restartStep");
-        double cpStart = config.getValue<double>("cpStart");
-        double cpStep = config.getValue<double>("cpStep");
-        bool newStart = config.getValue<bool>("newStart");
-
-
-
-        int caseN = config.getValue<int>("case");
-
-        SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-        int myid = comm->getProcessID();
-
-        if (myid == 0)
-            UBLOG(logINFO, "Jet Breakup: Start!");
-
-        if (logToFile) {
-#if defined(__unix__)
-            if (myid == 0) {
-                const char *str = pathname.c_str();
-                mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-            }
-#endif
-
-            if (myid == 0) {
-                stringstream logFilename;
-                logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-                UbLog::output_policy::setStream(logFilename.str());
-            }
-        }
-
-        // Sleep(30000);
-
-        double rho_h, rho_l, r_rho, mu_h, mu_l, Uo, D, sigma;
-
-        switch (caseN) {
-            case 1: 
-                //density of heavy fluid (kg/m^3)
-                rho_h = 848; 
-                //density of light fluid (kg/m^3)
-                rho_l =  34.5;
-                //density ratio
-                r_rho = rho_h / rho_l;
-                //dynamic viscosity of heavy fluid (Pa � s)
-                mu_h = 2.87e-3;
-                //dynamic viscosity of light fluid (Pa � s)
-                mu_l = 1.97e-5;
-                //velocity (m/s)
-                Uo = 100;
-                //diameter of jet (m)
-                D = 0.0001;
-                //surface tension (N/m)
-                sigma = 0.03;
-                break;
-            case 2:
-                // density of heavy fluid (kg/m^3)
-                rho_h = 848;
-                // density of light fluid (kg/m^3)
-                rho_l = 1.205;
-                // density ratio
-                r_rho = rho_h / rho_l;
-                // dynamic viscosity of heavy fluid (Pa � s)
-                mu_h = 2.87e-3;
-                // dynamic viscosity of light fluid (Pa � s)
-                mu_l = 1.84e-5;
-                // velocity (m/s)
-                Uo = 200;
-                // diameter of jet (m)
-                D = 0.0001;
-                // surface tension (N/m)
-                sigma = 0.03;
-                break;
-            case 3:
-                // density of heavy fluid (kg/m^3)
-                rho_h = 1000;
-                // density of light fluid (kg/m^3)
-                rho_l = 1.0;
-                // density ratio
-                r_rho = rho_h / rho_l;
-                // dynamic viscosity of heavy fluid (Pa � s)
-                mu_h = 2.87e-3;
-                // dynamic viscosity of light fluid (Pa � s)
-                mu_l = 1.84e-5;
-                // velocity (m/s)
-                Uo = 200;
-                // diameter of jet (m)
-                D = 0.0001;
-                // surface tension (N/m)
-                sigma = 0.03;
-                break;
-        }
-
-        double Re = rho_h * Uo * D / mu_h;
-        double We = rho_h * Uo * Uo * D / sigma;
-
-        double dx = D / D_LB;
-        double nu_h = U_LB * D_LB / Re;
-        double nu_l = nu_h;
-
-        double rho_h_LB = 1;
-        //surface tension
-        double sigma_LB = rho_h_LB * U_LB * U_LB * D_LB / We;
-
-        // LBMReal dLB = 0; // = length[1] / dx;
-        LBMReal rhoLB = 0.0;
-        LBMReal nuLB = nu_l; //(uLB*dLB) / Re;
-
-        double beta = 12.0 * sigma_LB / interfaceWidth;
-        double kappa = 1.5 * interfaceWidth * sigma_LB;
-
-        if (myid == 0) {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "U_LB = " << U_LB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nu_l = " << nu_l);
-            UBLOG(logINFO, "nu_h = " << nu_h);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "We = " << We);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "sigma = " << sigma);
-            UBLOG(logINFO, "density ratio = " << r_rho);
-            // UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-        }
-
-        SPtr<LBMUnitConverter> conv(new LBMUnitConverter());
-
-        // const int baseLevel = 0;
-
-        SPtr<LBMKernel> kernel;
-
-        // kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel());
-        kernel = SPtr<LBMKernel>(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel());
-        //kernel = SPtr<LBMKernel>(new MultiphaseVelocityBaseSplitDistributionLBMKernel());
-        //kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel());
-
-        kernel->setWithForcing(true);
-        kernel->setForcingX1(0.0);
-        kernel->setForcingX2(0.0);
-        kernel->setForcingX3(0.0);
-
-        kernel->setPhiL(phiL);
-        kernel->setPhiH(phiH);
-        kernel->setPhaseFieldRelaxation(tauH);
-        kernel->setMobility(mob);
-
-        // nuL, nuG, densityRatio, beta, kappa, theta,
-
-        kernel->setCollisionFactorMultiphase(nu_h, nu_l);
-        kernel->setDensityRatio(r_rho);
-        kernel->setMultiphaseModelParameters(beta, kappa);
-        kernel->setContactAngle(theta);
-        kernel->setInterfaceWidth(interfaceWidth);
-        //dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(0.0);
-
-        SPtr<BCProcessor> bcProc(new BCProcessor());
-        // BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-        kernel->setBCProcessor(bcProc);
-
-        SPtr<Grid3D> grid(new Grid3D(comm));
-        // grid->setPeriodicX1(true);
-        // grid->setPeriodicX2(true);
-        // grid->setPeriodicX3(true);
-        grid->setGhostLayerWidth(2);
-
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(
-            comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE));
-
-        //////////////////////////////////////////////////////////////////////////
-        // restart
-        SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-        // SPtr<MPIIORestartCoProcessor> rcp(new MPIIORestartCoProcessor(grid, rSch, pathname, comm));
-        SPtr<MPIIOMigrationCoProcessor> rcp(new MPIIOMigrationCoProcessor(grid, rSch, metisVisitor, pathname, comm));
-        // SPtr<MPIIOMigrationBECoProcessor> rcp(new MPIIOMigrationBECoProcessor(grid, rSch, pathname, comm));
-        // rcp->setNu(nuLB);
-        // rcp->setNuLG(nuL, nuG);
-        // rcp->setDensityRatio(densityRatio);
-
-        rcp->setLBMKernel(kernel);
-        rcp->setBCProcessor(bcProc);
-        //////////////////////////////////////////////////////////////////////////
-        // BC Adapter
-        //////////////////////////////////////////////////////////////////////////////
-            // bounding box
-        double g_minX1 = 0;
-        double g_minX2 = 0;
-        double g_minX3 = 0;
-
-        double g_maxX1 = 8.0 * D;//8.0 * D;
-        double g_maxX2 = 5.0 * D;
-        double g_maxX3 = 5.0 * D;
-
-        //double g_maxX1 = 1.0 * D; // 8.0 * D;
-        //double g_maxX2 = 2.0 * D;
-        //double g_maxX3 = 2.0 * D;
-
-
-        LBMReal x1c = 0;  // (g_maxX1 - g_minX1-1)/2; //
-        LBMReal x2c = (g_maxX2 - g_minX2) / 2;
-        LBMReal x3c = (g_maxX3 - g_minX3) / 2;
-        
-        mu::Parser fctF1;
-        // fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))");
-        // fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1");
-        fctF1.SetExpr("vy1");
-        fctF1.DefineConst("vy1", 0.0);
-        fctF1.DefineConst("R", 8.0);
-        fctF1.DefineConst("x0", 0.0);
-        fctF1.DefineConst("z0", 0.0);
-        // SPtr<BCAdapter> velBCAdapterF1(
-        //    new MultiphaseVelocityBCAdapter(false, true, false, fctF1, phiH, 0.0, BCFunction::INFCONST));
-
-        mu::Parser fctF2;
-        fctF2.SetExpr("vy1");//*(1-(sqrt((x2-x2c)*(x2-x2c)+(x3-x3c)*(x3-x3c))/R))");
-        fctF2.DefineConst("vy1", U_LB);
-        fctF2.DefineConst("R", D*0.5);
-        fctF2.DefineConst("x1c", x1c);
-        fctF2.DefineConst("x2c", x2c);
-        fctF2.DefineConst("x3c", x3c);
-
-
-        double startTime = 1;
-        SPtr<BCAdapter> velBCAdapterF1(
-            new MultiphaseVelocityBCAdapter(true, false, false, fctF1, phiH, 0.0, startTime));
-        SPtr<BCAdapter> velBCAdapterF2(
-            new MultiphaseVelocityBCAdapter(true, false, false, fctF2, phiH, startTime, endTime));
-
-        SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-        noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseNoSlipBCAlgorithm()));
-
-        SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB));
-        denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseNonReflectingOutflowBCAlgorithm()));
-
-        mu::Parser fctPhi_F1;
-        fctPhi_F1.SetExpr("phiH");
-        fctPhi_F1.DefineConst("phiH", phiH);
-
-        mu::Parser fctPhi_F2;
-        fctPhi_F2.SetExpr("phiL");
-        fctPhi_F2.DefineConst("phiL", phiL);
-
-        mu::Parser fctvel_F2_init;
-        fctvel_F2_init.SetExpr("U");
-        fctvel_F2_init.DefineConst("U", 0);
-
-        velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseVelocityBCAlgorithm()));
-        //////////////////////////////////////////////////////////////////////////////////
-        // BC visitor
-        MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
-        bcVisitor.addBC(noSlipBCAdapter);
-        bcVisitor.addBC(denBCAdapter); // Ohne das BB?
-        bcVisitor.addBC(velBCAdapterF1);
-
-        //SPtr<D3Q27Interactor> inflowF1Int;
-        //SPtr<D3Q27Interactor> cylInt;
-
-        SPtr<D3Q27Interactor> inflowInt;
-
-        if (newStart) {
-
-            //  if (newStart) {
-
-
-
-
-
-            // geometry
-            SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            if (myid == 0)
-                GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube",
-                                           WbWriterVtkXmlBinary::getInstance());
-
-            //if (myid == 0)
-            //    UBLOG(logINFO, "Read geoFile:start");
-            //SPtr<GbTriFaceMesh3D> cylinder = make_shared<GbTriFaceMesh3D>();
-            //cylinder->readMeshFromSTLFileBinary(pathGeo + "/" + geoFile, false);
-            //GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-            //if (myid == 0)
-            //    UBLOG(logINFO, "Read geoFile:stop");
-            // inflow
-            // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 *
-            // dx, g_maxX3));
-            //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1 * 0.5 - dx, g_minX2 - dx, g_minX3 * 0.5 - dx,
-            //                                         g_maxX1 * 0.5 + dx, g_minX2, g_maxX3 * 0.5 + dx));
-            //if (myid == 0)
-            //    GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1",
-            //                               WbWriterVtkXmlASCII::getInstance());
-
-            GbCylinder3DPtr geoInflow(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1,
-                                                       g_maxX2 / 2.0,
-                                                       g_maxX3 / 2.0, D / 2.0));
-            if (myid == 0)
-                GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow",
-                                           WbWriterVtkXmlASCII::getInstance());
-
-            GbCylinder3DPtr geoSolid(new GbCylinder3D(g_minX1 - 2.0 * dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1-dx,
-                                                       g_maxX2 / 2.0, g_maxX3 / 2.0, 1.5*D / 2.0));
-            if (myid == 0)
-                GbSystem3D::writeGeoObject(geoSolid.get(), pathname + "/geo/geoSolid",
-                                           WbWriterVtkXmlASCII::getInstance());
-
-
-            // GbCylinder3DPtr cylinder2(
-            //    new GbCylinder3D(0.0, g_minX2 - 2.0 * dx / 2.0, 0.0, 0.0, g_minX2 + 4.0 * dx, 0.0, 8.0+2.0*dx));
-            // if (myid == 0)
-            //    GbSystem3D::writeGeoObject(cylinder2.get(), pathname + "/geo/cylinder2",
-            //                               WbWriterVtkXmlASCII::getInstance());
-            // outflow
-            // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original)
-            // GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3));
-            if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow",                                         WbWriterVtkXmlASCII::getInstance());
-
-            // double blockLength = blocknx[0] * dx;
-
-            if (myid == 0) {
-                UBLOG(logINFO, "Preprocess - start");
-            }
-
-            grid->setDeltaX(dx);
-            grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-            grid->setPeriodicX1(false);
-            grid->setPeriodicX2(false);
-            grid->setPeriodicX3(false);
-
-            GenBlocksGridVisitor genBlocks(gridCube);
-            grid->accept(genBlocks);
-
-            SPtr<WriteBlocksCoProcessor> ppblocks(new WriteBlocksCoProcessor(
-                grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-            //SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter,
-            //                                                        Interactor3D::SOLID, Interactor3D::POINTS));
-
-            // inflowF1Int =
-            //    SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBCAdapter, Interactor3D::SOLID));
-            // inflowF1Int->addBCAdapter(velBCAdapterF2);
-
-            SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
-
-            // Create boundary conditions geometry
-            GbCuboid3DPtr wallXmin(
-                new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_minX1, g_maxX2 + 2.0*dx, g_maxX3));
-            GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallXmax(
-                new GbCuboid3D(g_maxX1, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3));
-            GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallZmin(
-                new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_minX3));
-            GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallZmax(
-                new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_maxX3, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3 + 2.0*dx));
-            GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallYmin(
-                new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_minX2, g_maxX3));
-            GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallYmax(
-                new GbCuboid3D(g_minX1 - 2.0*dx, g_maxX2, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3));
-            GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance());
-
-            // Add boundary conditions to grid generator
-            SPtr<D3Q27Interactor> wallXminInt(
-                new D3Q27Interactor(wallXmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallXmaxInt(
-                new D3Q27Interactor(wallXmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallZminInt(
-                new D3Q27Interactor(wallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallZmaxInt(
-                new D3Q27Interactor(wallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallYminInt(
-                new D3Q27Interactor(wallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallYmaxInt(
-                new D3Q27Interactor(wallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            //cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCAdapterF1, Interactor3D::SOLID));
-            //cylInt->addBCAdapter(velBCAdapterF2);
-            // SPtr<D3Q27Interactor> cyl2Int(new D3Q27Interactor(cylinder2, grid, noSlipBCAdapter,
-            // Interactor3D::SOLID));
-
-            inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapterF1, Interactor3D::SOLID));
-            inflowInt->addBCAdapter(velBCAdapterF2);
-
-            SPtr<D3Q27Interactor> solidInt =
-                SPtr<D3Q27Interactor>(new D3Q27Interactor(geoSolid, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            InteractorsHelper intHelper(grid, metisVisitor, true);
-            //intHelper.addInteractor(cylInt);
-            //intHelper.addInteractor(tubes);
-            intHelper.addInteractor(outflowInt);
-            // intHelper.addInteractor(cyl2Int);
-
-            intHelper.addInteractor(wallXminInt);
-            //intHelper.addInteractor(wallXmaxInt);
-            intHelper.addInteractor(wallZminInt);
-            intHelper.addInteractor(wallZmaxInt);
-            intHelper.addInteractor(wallYminInt);
-            intHelper.addInteractor(wallYmaxInt);
-            intHelper.addInteractor(inflowInt);
-            //intHelper.addInteractor(solidInt);
-
-            intHelper.selectBlocks();
-
-            ppblocks->process(0);
-            ppblocks.reset();
-
-            unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-            int ghostLayer = 3;
-            unsigned long long numberOfNodesPerBlock =
-                (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]);
-            unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-            unsigned long long numberOfNodesPerBlockWithGhostLayer =
-                numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-            double needMemAll =
-                double(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-            double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-            if (myid == 0) {
-                UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-                UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-                int minInitLevel = grid->getCoarsestInitializedLevel();
-                int maxInitLevel = grid->getFinestInitializedLevel();
-                for (int level = minInitLevel; level <= maxInitLevel; level++) {
-                    int nobl = grid->getNumberOfBlocks(level);
-                    UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-                    UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock);
-                }
-                UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-                UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-                UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-            }
-
-            MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h, nu_l,0,0,0,0, availMem, needMem);
-
-            grid->accept(kernelVisitor);
-
-            //if (refineLevel > 0) {
-            //    SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            //    grid->accept(undefNodesVisitor);
-            //}
-
-            intHelper.setBC();
-
-            // initialization of distributions
-            //mu::Parser fct1;
-            //fct1.SetExpr("phiL");
-            //fct1.DefineConst("phiL", phiL);
-            
-            mu::Parser fct1;
-            fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
-            fct1.DefineConst("x1c", x1c);
-            fct1.DefineConst("x2c", x2c);
-            fct1.DefineConst("x3c", x3c);
-            fct1.DefineConst("radius", 0.5*D);
-            fct1.DefineConst("interfaceThickness", interfaceWidth*dx);
-
-            MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
-            initVisitor.setPhi(fct1);
-            grid->accept(initVisitor);
-            ///////////////////////////////////////////////////////////////////////////////////////////
-            //{
-            // std::vector<std::vector<SPtr<Block3D>>> blockVector;
-            // int gridRank = comm->getProcessID();
-            // int minInitLevel = grid->getCoarsestInitializedLevel();
-            // int maxInitLevel = grid->getFinestInitializedLevel();
-            // blockVector.resize(maxInitLevel + 1);
-            // for (int level = minInitLevel; level <= maxInitLevel; level++) {
-            //    grid->getBlocks(level, gridRank, true, blockVector[level]);
-            //}
-            //    for (int level = minInitLevel; level <= maxInitLevel; level++) {
-            //    for (SPtr<Block3D> block : blockVector[level]) {
-            //        if (block) {
-            //            int ix1 = block->getX1();
-            //            int ix2 = block->getX2();
-            //            int ix3 = block->getX3();
-            //            int level = block->getLevel();
-
-            //            for (int dir = 0; dir < D3Q27System::ENDDIR; dir++) {
-            //                SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, ix1, ix2, ix3, level);
-
-            //                if (!neighBlock) {
-
-            //                }
-            //            }
-            //        }
-            //    }
-            //}
-            //    SPtr<Block3D> block = grid->getBlock(0, 0, 0, 0);
-            //    SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel());
-            //    SPtr<BCArray3D> bcArray = kernel->getBCProcessor()->getBCArray();
-
-            //    for (int ix3 = 0; ix3 <= 13; ix3++) {
-            //        for (int ix2 = 0; ix2 <= 13; ix2++) {
-            //            for (int ix1 = 0; ix1 <= 13; ix1++) {
-            //                if (ix1 == 0 || ix2 == 0 || ix3 == 0 || ix1 == 13 || ix2 == 13 || ix3 == 13)
-            //                    bcArray->setUndefined(ix1, ix2, ix3);
-            //            }
-            //        }
-            //    }
-            //}
-            ////////////////////////////////////////////////////////////////////////////////////////////
-            // boundary conditions grid
-            {
-                SPtr<UbScheduler> geoSch(new UbScheduler(1));
-                SPtr<WriteBoundaryConditionsCoProcessor> ppgeo(new WriteBoundaryConditionsCoProcessor(
-                    grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-                ppgeo->process(0);
-                ppgeo.reset();
-            }
-
-            if (myid == 0)
-                UBLOG(logINFO, "Preprocess - end");
-        } else {
-            rcp->restart((int)restartStep);
-            grid->setTimeStep(restartStep);
-
-            if (myid == 0)
-                UBLOG(logINFO, "Restart - end");
-        }
-        
-        //  TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-        //  grid->accept(setConnsVisitor);
-
-        // ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-
-        grid->accept(bcVisitor);
-
-         ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        //TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        grid->accept(setConnsVisitor);
-
-        SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-        double t_ast, t;
-        t_ast = 7.19;
-        t = (int)(t_ast/(U_LB/(D_LB)));
-        visSch->addSchedule(t,t,t); //t=7.19
-        SPtr<WriteMultiphaseQuantitiesCoProcessor> pp(new WriteMultiphaseQuantitiesCoProcessor(
-            grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-        pp->process(0);
-
-        SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-        SPtr<NUPSCounterCoProcessor> npr(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm));
-
-        SPtr<UbScheduler> timeBCSch(new UbScheduler(1, startTime, startTime));
-        auto timeDepBC = make_shared<TimeDependentBCCoProcessor>(TimeDependentBCCoProcessor(grid, timeBCSch));
-        timeDepBC->addInteractor(inflowInt);
-
-#ifdef _OPENMP
-        omp_set_num_threads(numOfThreads);
-#endif
-
-        SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-        SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime));
-        calculator->addCoProcessor(npr);
-        calculator->addCoProcessor(pp);
-        calculator->addCoProcessor(timeDepBC);
-        calculator->addCoProcessor(rcp);
-
-        if (myid == 0)
-            UBLOG(logINFO, "Simulation-start");
-        calculator->calculate();
-        if (myid == 0)
-            UBLOG(logINFO, "Simulation-end");
-    } catch (std::exception &e) {
-        cerr << e.what() << endl << flush;
-    } catch (std::string &s) {
-        cerr << s << endl;
-    } catch (...) {
-        cerr << "unknown exception" << endl;
-    }
-}
-int main(int argc, char *argv[])
-{
-    // Sleep(30000);
-    if (argv != NULL) {
-        if (argv[1] != NULL) {
-            run(string(argv[1]));
-        } else {
-            cout << "Configuration file is missing!" << endl;
-        }
-    }
-}
diff --git a/apps/cpu/LaminarTubeFlow/ltf.cpp b/apps/cpu/LaminarTubeFlow/ltf.cpp
index 086e743df39a2a0ba4598a9ce5438bc7b2ca0393..a2eb39dadcab7d9761a3c6c3a1ebf5d2fd1167df 100644
--- a/apps/cpu/LaminarTubeFlow/ltf.cpp
+++ b/apps/cpu/LaminarTubeFlow/ltf.cpp
@@ -67,23 +67,23 @@ void run(string configname)
       //BC Adapter
       //////////////////////////////////////////////////////////////////////////////
       SPtr<BC> noSlipBC(new NoSlipBC());
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new ThinWallNoSlipBCStrategy()));
-      //SPtr<BC> denBC(new DensityBC(rhoLB));
+      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new ThinWallNoSlip()));
+      //SPtr<BC> denBC(new PressureBC(rhoLB));
       //denBC->setBCStrategy(SPtr<BCStrategy>(new EqDensityBCStrategy()));
 
-      noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+      noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated()));
 
-      SPtr<BC> denBC(new DensityBC(rhoLB));
-      denBC->setBCStrategy(SPtr<BCStrategy>(new NonReflectingOutflowBCStrategy()));
-      //denBC->setBCStrategy(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
+      SPtr<BC> denBC(new PressureBC(rhoLB));
+      denBC->setBCStrategy(SPtr<BCStrategy>(new OutflowNonReflecting()));
+      //denBC->setBCStrategy(SPtr<BCStrategy>(new PressureNonEquilibrium()));
 
       //double startTime = 5;
       mu::Parser fct1;
       fct1.SetExpr("U");
       fct1.DefineConst("U", uLB);
       SPtr<BC> velBC1(new VelocityBC(true, false, false, fct1, 0, BCFunction::INFCONST));
-      //velBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-      velBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityWithDensityBCStrategy()));
+      //velBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated()));
+      velBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityWithPressureInterpolated()));
 
       //mu::Parser fct2;
       //fct2.SetExpr("U");
@@ -93,19 +93,16 @@ void run(string configname)
       //////////////////////////////////////////////////////////////////////////////////
       //BS visitor
       BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBC);
-      bcVisitor.addBC(denBC);
-      //bcVisitor.addBC(velBC1);
 
       SPtr<Grid3D> grid(new Grid3D(comm));
 
       SPtr<BCSet> bcProc;
       bcProc = SPtr<BCSet>(new BCSet());
 
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
+      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K17CompressibleNavierStokes());
       //double bulckViscosity = 3700*nuLB;
-      //dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(bulckViscosity);
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantK17LBMKernel());
+      //dynamicPointerCast<K17CompressibleNavierStokes>(kernel)->setBulkViscosity(bulckViscosity);
+      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K17CompressibleNavierStokes());
       kernel->setBCSet(bcProc);
       kernel->setBCSet(bcProc);
 
@@ -212,8 +209,8 @@ void run(string configname)
          ////fct.DefineConst("z0", cx3);
          ////fct.DefineConst("nue", nuLB);
          //SPtr<BC> velBC(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST));
-         //velBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-         //velBC->setBCStrategy(SPtr<BCStrategy>(new VelocityWithDensityBCStrategy()));
+         //velBC->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated()));
+         //velBC->setBCStrategy(SPtr<BCStrategy>(new VelocityWithPressureInterpolated()));
          
          inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBC1, Interactor3D::SOLID));
          //inflowInt->addBC(velBC2);
@@ -268,7 +265,7 @@ void run(string configname)
 
          intHelper.setBC();
 
-         bcVisitor.addBC(velBC1);
+         //bcVisitor.addBC(velBC1);
          grid->accept(bcVisitor);
 
          //initialization of distributions
diff --git a/apps/cpu/LaminarTubeFlowConv/ltf.cpp b/apps/cpu/LaminarTubeFlowConv/ltf.cpp
index d7515d44bfd135d95a103aa758f38e376421b01c..a9a789ce045d6d9a3b3ff14a602ba6cf7d3ce53a 100644
--- a/apps/cpu/LaminarTubeFlowConv/ltf.cpp
+++ b/apps/cpu/LaminarTubeFlowConv/ltf.cpp
@@ -68,9 +68,9 @@ void run(int tn)
       double L2 = y[tn];
       double L3 = z[tn];
 
-      LBMReal dLB = L2;
-      LBMReal rhoLB = 0.0;
-      LBMReal l = L2 / dx;
+      real dLB = L2;
+      real rhoLB = 0.0;
+      real l = L2 / dx;
 
 
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
diff --git a/apps/cpu/LiggghtsApp/CMakeLists.txt b/apps/cpu/LiggghtsApp/CMakeLists.txt
deleted file mode 100644
index f7b099fc25f800781aff631d098d4dd4dfe48359..0000000000000000000000000000000000000000
--- a/apps/cpu/LiggghtsApp/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-PROJECT(LiggghtsApp)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES LiggghtsApp.cpp )
diff --git a/apps/cpu/LiggghtsApp/LiggghtsApp.cpp b/apps/cpu/LiggghtsApp/LiggghtsApp.cpp
deleted file mode 100644
index 825d63ea14f8bded7331990e9ffa428ae4c0b258..0000000000000000000000000000000000000000
--- a/apps/cpu/LiggghtsApp/LiggghtsApp.cpp
+++ /dev/null
@@ -1,262 +0,0 @@
-#include <iostream>
-#include <string>
-#include <memory>
-
-#include "VirtualFluids.h"
-
-//#include "lammps.h"
-//#include "input.h"
-//#include "atom.h"
-//#include "modify.h"
-//#include "fix_lb_coupling_onetoone.h"
-
-#include "LiggghtsCoupling/LiggghtsCoupling.h"
-
-using namespace std;
-
-
-int main(int argc, char *argv[])
-{
-    //Sleep(30000);
-
-    std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-    int myid                                        = comm->getProcessID();
-
-
-    // bounding box
-    double g_minX1 = 0;
-    double g_minX2 = 0;
-    double g_minX3 = 0;
-
-    double g_maxX1 = 1;
-    double g_maxX2 = 1;
-    double g_maxX3 = 2;
-
-    int blockNX[3] = { 16, 16, 16 };
-
-    double dx = 1./32.;
-
-
-    double d_part = 0.25;
-    double r_p    = d_part / 2.0;
-
-    // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx);
-    // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx);
-    // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 0.1, 1000, r_p / dx, 0.01);
-    SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 0.1, 1000, r_p / dx, 0.01);
-    //SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::OIL, r_p / dx);
-    std::cout << units->toString() << std::endl;
-
-    //double Re   = 300;
-    double nuLB = 1e-2; // 5e-5;
-
-    SPtr<LBMKernel> kernel   = make_shared<IBcumulantK17LBMKernel>();
-    SPtr<BCSet> bcProc = make_shared<BCSet>();
-    kernel->setBCSet(bcProc);
-
-    SPtr<BC> noSlipBC(new NoSlipBC());
-    noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-    //////////////////////////////////////////////////////////////////////////////////
-    // BC visitor
-    BoundaryConditionsBlockVisitor bcVisitor;
-    bcVisitor.addBC(noSlipBC);
-
-
-
-
-    SPtr<Grid3D> grid = make_shared<Grid3D>(comm);
-    grid->setPeriodicX1(true);
-    grid->setPeriodicX2(true);
-    grid->setPeriodicX3(false);
-    grid->setDeltaX(dx);
-    grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]);
-
-    string outputPath = "d:/temp/LiggghtsCoupling";
-    UbSystem::makeDirectory(outputPath);
-    UbSystem::makeDirectory(outputPath + "/liggghts");
-
-    SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE));
-    
-    SPtr<GbObject3D> gridCube = make_shared <GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
-    if (myid == 0)
-        GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-    GenBlocksGridVisitor genBlocks(gridCube);
-    grid->accept(genBlocks);
-
-    SPtr<SimulationObserver> ppblocks =
-        make_shared <WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath,
-                                                          WbWriterVtkXmlBinary::getInstance(), comm);
-    ppblocks->update(0);
-    ppblocks.reset();
-
-    double dx2 = 2.0 * dx;
-    GbCuboid3DPtr wallZmin(
-        new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_minX3));
-    GbSystem3D::writeGeoObject(wallZmin.get(), outputPath + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
-    GbCuboid3DPtr wallZmax(
-        new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_maxX3, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2));
-    GbSystem3D::writeGeoObject(wallZmax.get(), outputPath + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
-
-    SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID));
-    SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID));
-
-    InteractorsHelper intHelper(grid, metisVisitor, true);
-    intHelper.addInteractor(wallZminInt);
-    intHelper.addInteractor(wallZmaxInt);
-    intHelper.selectBlocks();
-
-    SetKernelBlockVisitor kernelVisitor(kernel, nuLB, 1e9, 1e9);
-    grid->accept(kernelVisitor);
-
-    intHelper.setBC();
-
-    InitDistributionsBlockVisitor initVisitor;
-    grid->accept(initVisitor);
-
-    SPtr<UbScheduler> lScheduler                    = make_shared<UbScheduler>(1);
-    string inFile1                                   = "d:/Projects/VirtualFluids_Develop/apps/cpu/LiggghtsApp/in.lbdem";
-    //string inFile1 = "d:/Tools/LIGGGHTS/examples/LIGGGHTS/Tutorials_public/chute_wear/in.chute_wear2";
-    string inFile2                                   = "d:/Projects/VirtualFluids_Develop/apps/cpu/LiggghtsApp/in2.lbdem";
-    MPI_Comm mpi_comm       = *(MPI_Comm*)(comm->getNativeCommunicator());
-    LiggghtsCouplingWrapper wrapper(argv, mpi_comm);
-
-
-    double v_frac = 0.1;
-    double dt_phys   = units->getFactorTimeLbToW();
-    int demSubsteps = 10;
-    double dt_dem   = dt_phys / (double)demSubsteps;
-    int vtkSteps    = 100;
-    string demOutDir = outputPath; //    "d:/temp/lll2/";
-
-    //wrapper.execCommand("echo none");
-
-    wrapper.setVariable("r_part", d_part / 2);
-    wrapper.setVariable("v_frac", v_frac);
-
-    wrapper.execFile((char*)inFile1.c_str());
-
- 
-    //// set timestep and output directory
-    wrapper.setVariable("t_step", dt_dem);
-    wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps);
-    wrapper.setVariable("dmp_dir", demOutDir);
-
-    wrapper.execFile((char *)inFile2.c_str());
-    wrapper.runUpto(demSubsteps - 1);
-
-  
-    SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver =
-        make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, units);
-
-    // boundary conditions grid
-    {
-        SPtr<UbScheduler> geoSch(new UbScheduler(1));
-        SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(
-            grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
-        ppgeo->update(0);
-        ppgeo.reset();
-    }
-
-    grid->accept(bcVisitor);
-
-    OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-    grid->accept(setConnsVisitor);
-
-
-    // write data for visualization of macroscopic quantities
-    SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps));
-    SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(
-        new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(),
-                                                  SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-
-    int endTime = 3000; //20;
-    SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime));
-    simulation->addSimulationObserver(lcSimulationObserver);
-    simulation->addSimulationObserver(writeMQSimulationObserver);
-
-    if (myid == 0) UBLOG(logINFO, "Simulation-start");
-    simulation->run();
-    if (myid == 0) UBLOG(logINFO, "Simulation-end");
-
-    //MPI_Init(&argc, &argv);
-    //MPI_Comm mpi_comm       = *(MPI_Comm*)(comm->getNativeCommunicator());
-    //LiggghtsCouplingWrapper wrapper(argv, mpi_comm);
-
-    //wrapper.execFile("in2.lbdem");
-    //wrapper.runUpto(demSubsteps - 1);
-
-	//LAMMPS_NS::LAMMPS *lmp;
- //   // custom argument vector for LAMMPS library
- //   const char *lmpargv[] {"liblammps", "-log", "none"};
- //   int lmpargc = sizeof(lmpargv)/sizeof(const char *);
-
- //   // explicitly initialize MPI
- //   MPI_Init(&argc, &argv);
-
- //   // create LAMMPS instance
- //   lmp = new LAMMPS_NS::LAMMPS(lmpargc, (char **)lmpargv, MPI_COMM_WORLD);
- //   lmp->input->file("in.lbdem");
- //   //lmp->input->one("run 1");
- //   
- //   //# Try extracting a global value
- //   //    print("")
- //   //    print("Attempting to get the number of atoms in simulation")
- //   //    numAtoms = lmp.extract_global("natoms", 0)
- //   //    print("natoms =", numAtoms)
-
- //   //    # Try extracting atom's positions
- //   //    print("")
- //   //    print("Attempting to get the atom's positions")
- //   //    pos = lmp.extract_atom("x",3)
- //   //    for k in range(0,numAtoms):
- //   //        print("Pos[%i] = [%f, %f, %f]" % (k, pos[k][0], pos[k][1], pos[k][2]))
-
- //   LAMMPS_NS::FixLbCouplingOnetoone 
- //       *couplingFix 
- //       = dynamic_cast<LAMMPS_NS::FixLbCouplingOnetoone*>
- //       (lmp->modify->find_fix_style("couple/lb/onetoone",0));
-
- //   cout << "test1\n";
- //   
- //   //double **t_liggghts = couplingFix->get_torque_ptr();
- //   cout << "test2\n";
-
- //   lmp->input->one("run 9 upto");
-
- //   for (int step = 0; step < 10; step++)
- //   {
- //       
-
- //       int numAtoms = lmp->atom->natoms;
-
- //       //double** pos = (double**)lmp->atom->extract("x");
- //       double** pos = lmp->atom->x;
- //       
- //       //double* forceX = lmp->atom->fx;
-
- //       for (int i = 0; i < numAtoms; i++)
- //       {
- //           double **f_liggghts = couplingFix->get_force_ptr();
- //           double** force = lmp->atom->f;
- //           cout << "Pos[" << i << "] = [" << pos[i][0] << ", " << pos[i][1] << ", " << pos[i][2] << "]\n";
- //           cout << "Force1[" << i << "] = [" << f_liggghts[i][0] << ", " << f_liggghts[i][1] << ", " << f_liggghts[i][2] << "]\n";
- //           f_liggghts[i][0] += 0;
- //           f_liggghts[i][1] += 0;
- //           f_liggghts[i][2] += 500;
- //           cout << "Force2[" << i << "] = [" << force[i][0] << ", " << force[i][1] << ", " << force[i][2] << "]\n";
- //       }
-
- //       couplingFix->comm_force_torque();
-
- //       lmp->input->one("run 10000");
- //      
- //   }
-
- //   // delete LAMMPS instance
- //   delete lmp;
-
- //   // stop MPI environment
-    //MPI_Finalize();
-    return 0;
-}
diff --git a/apps/cpu/LiggghtsApp/in.lbdem b/apps/cpu/LiggghtsApp/in.lbdem
deleted file mode 100644
index 4c38d79268d38d284d536ea3d32b1038314e35ba..0000000000000000000000000000000000000000
--- a/apps/cpu/LiggghtsApp/in.lbdem
+++ /dev/null
@@ -1,76 +0,0 @@
-#verbose no
-
-units		si
-atom_style	granular
-atom_modify	map array
-
-
-
-communicate	single vel yes
-
-boundary	f f f
-newton		off
-
-processors * * 1
-region		box block 0. 1. 0. 1. 0. 2. units box
-create_box	1 box
-
-variable	skin equal 0.01
-neighbor	${skin} bin
-neigh_modify	delay 0 binsize 0.01 one 1000
-
-fix grav all gravity 0.981 vector 0 0 -1
-
-
-fix 		m1 all property/global youngsModulus peratomtype 1e8
-fix 		m2 all property/global poissonsRatio peratomtype 0.4
-fix 		m3 all property/global coefficientRestitution peratomtypepair 1 0.95
-fix 		m4 all property/global coefficientFriction peratomtypepair 1 0.45
-fix 		m5 all property/global coefficientRollingFriction peratomtypepair 1 0.020
-
-# lb coupling fix
-fix lbcoupling all couple/lb/onetoone
-
-
-pair_style	gran model hertz tangential history rolling_friction cdt
-pair_coeff	* *
-
-fix		1 all nve/sphere
-
-fix xwalls1 all wall/gran model hertz tangential history primitive type 1 xplane 0.
-fix xwalls2 all wall/gran model hertz tangential history primitive type 1 xplane 1.
-fix ywalls1 all wall/gran model hertz tangential history primitive type 1 yplane 0.
-fix ywalls2 all wall/gran model hertz tangential history primitive type 1 yplane 1.
-fix zwalls1 all wall/gran model hertz tangential history primitive type 1 zplane 0.
-fix zwalls2 all wall/gran model hertz tangential history primitive type 1 zplane 2.
-
-#create_atoms 1 single 0.5 0.5 9.75
-#create_atoms 1 single 0.38 0.05 0.05
-
-#set group all diameter 0.25 density 2400
-
-#atom_modify sort 0 0.0
-
-#fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 1000 radius constant 0.015 
-#fix pts2 all particletemplate/sphere 1 atom_type 1 density constant 1000 radius constant 0.01 
-#fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 1100 radius constant ${r_part} 
-fix  pts1 all particletemplate/sphere 15485863 atom_type 1 density constant 2500 radius constant 0.01
-
-fix pdd1 all particledistribution/discrete 32452843  1 pts1 1.0
-#fix pdd2 all particledistribution/discrete 6778  2 pts2 0.2 pts3 0.8
-
-region  insreg block 0.1 0.9 0.1 0.9 1.3 1.9 units box
-
-
-#fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once &
-#                         overlapcheck yes particles_in_region 350 region insreg ntry_mc 10000 
-#fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once &
-#                        overlapcheck yes volumefraction_region ${v_frac} region insreg ntry_mc 10000 
-fix ins all insert/pack seed 32452867 distributiontemplate pdd1 insert_every once &
-                        overlapcheck yes volumefraction_region 0.1 region insreg ntry_mc 1001 
-#fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once &
-#                        overlapcheck yes particles_in_region 1 region insreg ntry_mc 10000 
-
-echo none
-
-run 1
diff --git a/apps/cpu/LiggghtsApp/in2.lbdem b/apps/cpu/LiggghtsApp/in2.lbdem
deleted file mode 100644
index aee0cc8dbdb5cd6bd72969343300eff2c2802a3d..0000000000000000000000000000000000000000
--- a/apps/cpu/LiggghtsApp/in2.lbdem
+++ /dev/null
@@ -1,27 +0,0 @@
-
-echo none
-
-timestep        ${t_step}      
-
-# thermo settings
-fix		ts all check/timestep/gran 10000 0.1 0.1
-compute		1 all erotate/sphere
-thermo_style	custom step atoms ke c_1 f_ts[1] f_ts[2] cpu
-thermo		10000
-thermo_modify	lost ignore norm no flush yes
-compute_modify	thermo_temp dynamic yes
-
-# particle dump
-variable dmp_fname string ${dmp_dir}d_*.liggghts
-
-#dump		dmp all custom ${dmp_stp} ${dmp_fname} & 
-#		 id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius 
-
-#dump		dmp all custom ${dmp_stp} ${dmp_dir}d_*.liggghts & 
-# 		id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius 
-
-
-	
-dump   dmp all custom/vtk ${dmp_stp} ${dmp_dir}/liggghts/atom_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius 	
-
-echo none
\ No newline at end of file
diff --git a/apps/cpu/Multiphase/CMakeLists.txt b/apps/cpu/Multiphase/CMakeLists.txt
deleted file mode 100644
index 2ce781c801fd0cac3770783919682b85ec511ad5..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-PROJECT(Multiphase)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow FILES Multiphase.cpp )
diff --git a/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup b/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup
deleted file mode 100644
index c0ca32e5ce1980af048c769e01aca95c1df9f0dd..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup	
+++ /dev/null
@@ -1,482 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-	  string		  pathGeo = config.getString("pathGeo");
-	  string		  geoFile = config.getString("geoFile");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-	  vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //vector<double>  length = config.getVector<double>("length");
-	  double      uLB = config.getDouble("uLB");
-	  double      uF2 = config.getDouble("uF2");
-	  double		  nuL = config.getDouble("nuL");
-	  double		  nuG = config.getDouble("nuG");
-	  double		  densityRatio = config.getDouble("densityRatio");
-	  double		  sigma = config.getDouble("sigma");
-	  int		     interfaceThickness = config.getInt("interfaceThickness");
-	  double		  radius = config.getDouble("radius");
-	  double		  theta = config.getDouble("contactAngle");
-	  double		  gr = config.getDouble("gravity");
-	  double		  phiL = config.getDouble("phi_L");
-	  double		  phiH = config.getDouble("phi_H");
-	  double		  tauH = config.getDouble("Phase-field Relaxation");
-	  double		  mob = config.getDouble("Mobility");
-
-
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      double          Re = config.getDouble("Re");
-      double          dx = config.getDouble("dx");
-      bool            logToFile = config.getBool("logToFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      bool            newStart = config.getValue<bool>("newStart");
-
-      double beta  = 12*sigma/interfaceThickness;
-	  double kappa = 1.5*interfaceThickness*sigma;
-	  
-	  CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      LBMReal dLB; // = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = nuL; //(uLB*dLB) / Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
- 
-      
-      Grid3DPtr grid(new Grid3D(comm));
-      //grid->setPeriodicX1(true);
-	  //grid->setPeriodicX2(true);
-	  //grid->setPeriodicX3(true);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-	  
-	  
-
-	  if (newStart)
-      {
-
-         //bounding box
-         /*double g_minX1 = 0.0;
-         double g_minX2 = -length[1] / 2.0;
-         double g_minX3 = -length[2] / 2.0;
-
-         double g_maxX1 = length[0];
-         double g_maxX2 = length[1] / 2.0;
-         double g_maxX3 = length[2] / 2.0;*/
-
-		 double g_minX1 = boundingBox[0];
-		 double g_minX2 = boundingBox[2];
-		 double g_minX3 = boundingBox[4];
-
-		 double g_maxX1 = boundingBox[1];
-		 double g_maxX2 = boundingBox[3];
-		 double g_maxX3 = boundingBox[5];
-
-         //geometry
-
-		 GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, 20.0));
-		 GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance());
-		 
-		 GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-         double blockLength = blocknx[0] * dx;
-
-
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "Preprocess - start");
-         }
-
-         grid->setDeltaX(dx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-		 grid->setPeriodicX1(true);
-		 grid->setPeriodicX2(true);
-		 grid->setPeriodicX3(true);
-
-         
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-		 //inflow
-		 //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-		 //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-34.0, -20.0, 1.0, -31.5, 16.0, 46.0));
-		 //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-24.0, 3, 20.0, -22.0, 24.0, 42.0));
-		 //if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance());
-
-		 /*GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(-24.0, -24.0, 0.0, 26.0, 26.0, 3.5));
-		 if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance());
-		 
-		 GbCuboid3DPtr geoInflowF2_2(new GbCuboid3D(-24.0, -24.0, 56.5, 26.0, 26.0, 59.9));
-		 if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_2.get(), pathname+"/geo/geoInflowF2_2", WbWriterVtkXmlASCII::getInstance());*/
-		 
-		 //outflow
-		 //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0-50, -20.0, 1.0, 130.0-50, 16.0, 46.0));
-		 //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0, -20.0, 1.0, 130.0, 16.0, 46.0));
-		 //GbCuboid3DPtr geoOutflow(new GbCuboid3D(78.0, 3, 20.0, 81.0, 24.0, 42.0));
-		 //if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-		 //BC Adapter
-		 //////////////////////////////////////////////////////////////////////////////
-		 //BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-		 //noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-
-
-		//BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-		//denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-		
-		double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius();
-		double cx1 = g_minX1;
-		double cx2 = 0.0; //cylinder->getX2Centroid();
-		double cx3 = 0.0; //cylinder->getX3Centroid();
-
-		mu::Parser fctF1;
-		fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		//fctF1.SetExpr("vx1");
-		fctF1.DefineConst("R", 10.0);
-		//fctF1.DefineConst("R", 8.0); // FlowFocusingSS
-		fctF1.DefineConst("vx1", uLB);
-		fctF1.DefineConst("y0", 1.0);
-		fctF1.DefineConst("z0", 31.0);
-		
-		mu::Parser fctF2_1;
-		fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-		//fctF2_1.SetExpr("vx3");
-		fctF2_1.DefineConst("R", 12.0);
-		fctF2_1.DefineConst("vx3", uF2);
-		fctF2_1.DefineConst("x0", 1.0);
-		fctF2_1.DefineConst("y0", 1.0);
-
-		mu::Parser fctF2_2;
-		fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-		//fctF2_2.SetExpr("vx3");
-		fctF2_2.DefineConst("R", 12.0);
-		fctF2_2.DefineConst("vx3", -uF2);
-		fctF2_2.DefineConst("x0", 1.0);
-		fctF2_2.DefineConst("y0", 1.0);
-		
-		mu::Parser fctPhi_F1;
-		fctPhi_F1.SetExpr("phiH");
-		fctPhi_F1.DefineConst("phiH", phiH);
-
-		mu::Parser fctPhi_F2;
-		fctPhi_F2.SetExpr("phiL");
-		fctPhi_F2.DefineConst("phiL", phiL);
-		
-		mu::Parser fctvel_F2_init;
-		fctvel_F2_init.SetExpr("U");
-		fctvel_F2_init.DefineConst("U", 0);
-
-		//fct.SetExpr("U");
-		//fct.DefineConst("U", uLB);
-		//BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		//BCAdapterPtr velBCAdapterF1(new VelocityBCAdapterMultiphase(true, false, false, fctF1, phiH, 0.0, endTime));
-		
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime));
-
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		
-		//velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		//velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		//velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		 
-		 
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-		 //mu::Parser fct;
-		 //fct.SetExpr("U");
-		 //fct.DefineConst("U", uLB);
-		 //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm()));
-
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //BC visitor
-		 BoundaryConditionsBlockVisitorMultiphase bcVisitor;
-		 /*bcVisitor.addBC(noSlipBCAdapter);
-		 bcVisitor.addBC(denBCAdapter);
-		 bcVisitor.addBC(velBCAdapterF1);
-		 bcVisitor.addBC(velBCAdapterF2_1_init);
-		 bcVisitor.addBC(velBCAdapterF2_2_init);*/
-
-
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         ppblocks->process(0);
-
-         //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID));
-		 
-
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-         InteractorsHelper intHelper(grid, metisVisitor);
-		 //intHelper.addInteractor(tubes);
-
-         intHelper.selectBlocks();
-
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-
-         kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL));
-
-         kernel->setWithForcing(false);
-		 kernel->setForcingX1(gr);
-		 kernel->setForcingX2(0.0);
-		 kernel->setForcingX3(0.0);
-
-		 kernel->setPhiL(phiL);
-		 kernel->setPhiH(phiH);
-		 kernel->setPhaseFieldRelaxation(tauH);
-		 kernel->setMobility(mob);
-
-         BCProcessorPtr bcProc(new BCProcessor());
-         //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem);
-         
-		 grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-
-
-         //intHelper.setBC();
-         //grid->accept(bcVisitor);
-
-         //initialization of distributions
-		 //initialization of distributions
-		 LBMReal x1c = (g_maxX1 - g_minX1-1)/2;
-		 LBMReal x2c = (g_maxX2 - g_minX2-1)/2;
-		 LBMReal x3c = (g_maxX3 - g_minX3-1)/2;
-		 mu::Parser fct1;
-		 fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct1.DefineConst("x1c", x1c);
-		 fct1.DefineConst("x2c", x2c);
-		 fct1.DefineConst("x3c", x3c);
-		 fct1.DefineConst("radius", radius);
-		 fct1.DefineConst("interfaceThickness", interfaceThickness);
-		 
-		 mu::Parser fct2;
-		 //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		 //fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 //fct2.SetExpr("vx1");
-		 /*fct2.DefineConst("R", 10.0);
-		 fct2.DefineConst("vx1", uLB);
-		 fct2.DefineConst("y0", 1.0);
-		 fct2.DefineConst("z0", 31.0);*/
-		 fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct2.DefineConst("uLB", uLB);
-		 fct2.DefineConst("x1c", x1c);
-		 fct2.DefineConst("x2c", x2c);
-		 fct2.DefineConst("x3c", x3c);
-		 fct2.DefineConst("radius", radius);
-		 fct2.DefineConst("interfaceThickness", interfaceThickness);
-
-
-		 InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius);
-         initVisitor.setPhi(fct1);
-         //initVisitor.setVx1(fct2);
-         grid->accept(initVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         //ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-         //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         //grid->accept(pqPartVisitor);
-
-
-
-
-         //boundary conditions grid
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-      }
-      else
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-         //bcVisitor.addBC(velBCAdapter);
-         //grid->accept(bcVisitor);
-
-         //set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      //WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-	  
-	  
-	  
-
-	  
-	  UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000));
-	  TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch));
-	  //inflowF2->addInteractor(inflowF2_1Int);
-	  //inflowF2->addInteractor(inflowF2_2Int);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-	if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup b/apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup
deleted file mode 100644
index d43a61d6767b4193f443bcb1fede89cf3f37bc5f..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup	
+++ /dev/null
@@ -1,508 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-	  string		  pathGeo = config.getString("pathGeo");
-	  string		  geoFile = config.getString("geoFile");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-	  vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //vector<double>  length = config.getVector<double>("length");
-	  double          uLB = config.getDouble("uLB");
-	  double          uF2 = config.getDouble("uF2");
-	  double		  nuL = config.getDouble("nuL");
-	  double		  nuG = config.getDouble("nuG");
-	  double		  densityRatio = config.getDouble("densityRatio");
-	  double		  sigma = config.getDouble("sigma");
-	  int		      interfaceThickness = config.getInt("interfaceThickness");
-	  double		  radius = config.getDouble("radius");
-	  double		  theta = config.getDouble("contactAngle");
-	  double		  gr = config.getDouble("gravity");
-	  double		  phiL = config.getDouble("phi_L");
-	  double		  phiH = config.getDouble("phi_H");
-	  double		  tauH = config.getDouble("Phase-field Relaxation");
-	  double		  mob = config.getDouble("Mobility");
-
-
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      double          Re = config.getDouble("Re");
-      double          dx = config.getDouble("dx");
-      bool            logToFile = config.getBool("logToFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      bool            newStart = config.getValue<bool>("newStart");
-
-      double beta  = 12*sigma/interfaceThickness;
-	  double kappa = 1.5*interfaceThickness*sigma;
-	  
-	  CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      LBMReal dLB; // = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = nuL; //(uLB*dLB) / Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
- 
-      
-      Grid3DPtr grid(new Grid3D(comm));
-      //grid->setPeriodicX1(true);
-	  //grid->setPeriodicX2(true);
-	  //grid->setPeriodicX3(true);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-	  
-
-
-      
-	  
-	  mu::Parser fctF1;
-	  //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))");
-	  //fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1");
-	  fctF1.SetExpr("vy1");
-	  fctF1.DefineConst("vy1", -uLB);
-	  fctF1.DefineConst("R", 8.0);
-	  fctF1.DefineConst("x0", 0.0);
-	  fctF1.DefineConst("z0", 0.0);
-	  
-
-	  if (newStart)
-      {
-
-         //bounding box
-         /*double g_minX1 = 0.0;
-         double g_minX2 = -length[1] / 2.0;
-         double g_minX3 = -length[2] / 2.0;
-
-         double g_maxX1 = length[0];
-         double g_maxX2 = length[1] / 2.0;
-         double g_maxX3 = length[2] / 2.0;*/
-
-		 double g_minX1 = boundingBox[0];
-		 double g_minX2 = boundingBox[2];
-		 double g_minX3 = boundingBox[4];
-
-		 double g_maxX1 = boundingBox[1];
-		 double g_maxX2 = boundingBox[3];
-		 double g_maxX3 = boundingBox[5];
-
-         //geometry
-
-         //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2));
-
-		 //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius));
-		 //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 
-		 //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 //GbObject3DPtr cylinders(new GbObject3DManager());
-		 //GbObject3DPtr cylinders1(new GbObjectGroup3D());
-		 
-
-		 
-		 
-		 GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-		 GbTriFaceMesh3DPtr cylinder;
-		 if (myid==0) UBLOG(logINFO, "Read geoFile:start");
-		 //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-		 cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT));
-		 GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-
-         
-         
-         //inflow
-		//GbCuboid3DPtr geoInflowF1(new GbCuboid3D(40.0, 628.0, 40.0, 80, 631.0, 80.0));  // For JetBreakup (Original)
-		GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2-0.5*dx, g_minX3, g_maxX1, g_minX2 - 1.0*dx, g_maxX3));
-		if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance());
-
-
-		//outflow
-		//GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original)
-		GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-		if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-         
-         
-         double blockLength = blocknx[0] * dx;
-
-
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "Preprocess - start");
-         }
-
-         grid->setDeltaX(dx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-		 grid->setPeriodicX1(false);
-		 grid->setPeriodicX2(false);
-		 grid->setPeriodicX3(false);
-
-         
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-
-
-		 //BC Adapter
-		 //////////////////////////////////////////////////////////////////////////////
-		 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-		 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-
-
-		BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-		denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-		
-		double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius();
-		double cx1 = g_minX1;
-		double cx2 = 0.0; //cylinder->getX2Centroid();
-		double cx3 = 0.0; //cylinder->getX3Centroid();
-
-
-		
-		mu::Parser fctPhi_F1;
-		fctPhi_F1.SetExpr("phiH");
-		fctPhi_F1.DefineConst("phiH", phiH);
-
-		mu::Parser fctPhi_F2;
-		fctPhi_F2.SetExpr("phiL");
-		fctPhi_F2.DefineConst("phiL", phiL);
-		
-		mu::Parser fctvel_F2_init;
-		fctvel_F2_init.SetExpr("U");
-		fctvel_F2_init.DefineConst("U", 0);
-
-		//fct.SetExpr("U");
-		//fct.DefineConst("U", uLB);
-		//BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		
-		BCAdapterPtr velBCAdapterF1       (new VelocityBCAdapterMultiphase(false, true, false, fctF1  , phiH, 0.0, endTime));
-		
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime));
-
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		
-		velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		//velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		//velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		 
-		 
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-		 //mu::Parser fct;
-		 //fct.SetExpr("U");
-		 //fct.DefineConst("U", uLB);
-		 //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm()));
-
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //BC visitor
-		 BoundaryConditionsBlockVisitorMultiphase bcVisitor;
-		 bcVisitor.addBC(noSlipBCAdapter);
-		 bcVisitor.addBC(denBCAdapter);
-		 bcVisitor.addBC(velBCAdapterF1);
-		 //bcVisitor.addBC(velBCAdapterF2_1_init);
-		 //bcVisitor.addBC(velBCAdapterF2_2_init);
-
-
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         ppblocks->process(0);
-
-         Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID));
-		 
-	     D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID));
-
-		 //D3Q27InteractorPtr inflowF2_1Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1_init, Interactor3D::SOLID));
-
-		 //D3Q27InteractorPtr inflowF2_2Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2_init, Interactor3D::SOLID));
-
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
-
-		 //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor1);
-		 //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor2);
-
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW));
-         InteractorsHelper intHelper(grid, metisVisitor);
-		 intHelper.addInteractor(tubes);
-         intHelper.addInteractor(inflowF1Int);
-         intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-
-         kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL));
-
-         kernel->setWithForcing(true);
-		 kernel->setForcingX1(0.0);
-		 kernel->setForcingX2(gr);
-		 kernel->setForcingX3(0.0);
-
-		 kernel->setPhiL(phiL);
-		 kernel->setPhiH(phiH);
-		 kernel->setPhaseFieldRelaxation(tauH);
-		 kernel->setMobility(mob);
-
-         BCProcessorPtr bcProc(new BCProcessor());
-         //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem);
-         
-		 grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-		 //inflowF2_1Int->initInteractor();
-		 //inflowF2_2Int->initInteractor();
-
-         intHelper.setBC();
-		 
-        
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-		 LBMReal x1c =  radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2;
-		 LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2;
-		 LBMReal x3c = (g_maxX3+g_minX3)/2;
-		 mu::Parser fct1;
-		 
-		 //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))");
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)");
-		 fct1.SetExpr("phiL");
-		 fct1.DefineConst("x1c", x1c);
-		 fct1.DefineConst("x2c", x2c);
-		 fct1.DefineConst("x3c", x3c);
-		 fct1.DefineConst("phiL", phiL);
-		 fct1.DefineConst("phiH", phiH);
-		 fct1.DefineConst("radius", radius);
-		 fct1.DefineConst("interfaceThickness", interfaceThickness);
-		 
-		 mu::Parser fct2;
-		 //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		 fct2.SetExpr("vx1");
-		 fct2.DefineConst("R", 10.0);
-		 fct2.DefineConst("vx1", uLB);
-		 fct2.DefineConst("y0", 1.0);
-		 fct2.DefineConst("z0", 31.0);
-		 /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct2.DefineConst("uLB", uLB);
-		 fct2.DefineConst("x1c", x1c);
-		 fct2.DefineConst("x2c", x2c);
-		 fct2.DefineConst("x3c", x3c);
-		 fct2.DefineConst("radius", radius);
-		 fct2.DefineConst("interfaceThickness", interfaceThickness);*/
-
-
-		 InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius);
-         initVisitor.setPhi(fct1);
-         //initVisitor.setVx1(fct2);
-         grid->accept(initVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         //ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-         //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         //grid->accept(pqPartVisitor);
-
-
-
-
-         //boundary conditions grid
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-      }
-      else
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-         //bcVisitor.addBC(velBCAdapter);
-         //grid->accept(bcVisitor);
-
-         //set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-	  
-	  
-	  
-
-	  
-	  //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000));
-	  //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch));
-	  //inflowF2->addInteractor(inflowF2_1Int);
-	  //inflowF2->addInteractor(inflowF2_2Int);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-	if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/Multiphase/Multiphase.cfg b/apps/cpu/Multiphase/Multiphase.cfg
deleted file mode 100644
index b2f435db04ce51f915c3994b8418ba97b49c4843..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/Multiphase.cfg
+++ /dev/null
@@ -1,61 +0,0 @@
-pathname = d:/temp/JetBreakup
-#pathGeo = d:/Projects/VirtualFluids-Multiphase/source/Applications/Multiphase/backup
-pathGeo = d:/Projects/VirtualFluidsCombined/apps/cpu/Multiphase/backup
-#geoFile = JetBreakupR.ASCII.stl
-#geoFile = inlet1.stl
-geoFile = tubeTransformed.stl
-
-numOfThreads = 1
-availMem = 10e9
-
-#Grid
-
-#boundingBox = -1.0 121.0 0.5 629.0 -1.0 121.0 #(Jet Breakup) (Original with inlet length)
-#boundingBox = -60.5 60.5 -1.0 -201.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length)
-#blocknx = 22 20 22
-
-#boundingBox = -60.5 60.5 -1.0 -101.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length)
-#blocknx = 22 20 22
-
-#boundingBox = -40 40 -1.0 -21.0 -40 40 #(Jet Breakup2) (Original without inlet length)
-#boundingBox = -40 40 1.0 11.0 -40 40 #(Jet Breakup2) (Original without inlet length)
-#boundingBox = -40e-3 40e-3 1.0e-3 11.0e-3 -403-3 40e-3 #(Jet Breakup2) (Original without inlet length)
-#blocknx = 20 20 20
-
-#boundingBox = 6.0e-3 46.0e-3 -5e-3 5e-3 -5e-3 5e-3
-#blocknx = 20 20 20
-boundingBox = 0 9 0 9 0 9
-blocknx = 10 10 10
-
-dx = 1 #1.66666666667e-4
-refineLevel = 0
-
-#Simulation
-uLB = 0.005 #inlet velocity
-#uF2 = 0.0001
-Re = 10
-nuL =1e-3# 1.0e-5 #!1e-2
-nuG =1e-6# 1.16e-4 #!1e-2
-densityRatio = 1000
-sigma = 0 #1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5
-interfaceWidth = 5
-radius = 615.0 (Jet Breakup)
-contactAngle = 110.0
-gravity = 0.0
-#gravity = -5.04e-6
-phi_L = 0.0
-phi_H = 1.0
-Phase-field Relaxation = 0.6
-Mobility = 0.02 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation parameter, to activate it need to change in kernel tauH to tauH1
-
-
-logToFile = false
-
-newStart = true
-restartStep = 100000
-
-cpStart = 100000
-cpStep = 100000
-
-outTime = 1
-endTime = 10000
\ No newline at end of file
diff --git a/apps/cpu/Multiphase/Multiphase.cpp b/apps/cpu/Multiphase/Multiphase.cpp
deleted file mode 100644
index 08f4ea8cdc9fa2fb2466617782790c2ffb40f645..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/Multiphase.cpp
+++ /dev/null
@@ -1,508 +0,0 @@
-#include <iostream>
-#include <string>
-#include <memory>
-
-#include "VirtualFluids.h"
-#include "MultiphaseFlow/MultiphaseFlow.h"
-
-using namespace std;
-
-void run(string configname)
-{
-    using namespace vf::lbm::dir;
-
-    try {
-
-        //Sleep(30000);
-
-        vf::basics::ConfigurationFile config;
-        config.load(configname);
-
-        string pathname            = config.getValue<string>("pathname");
-        string pathGeo             = config.getValue<string>("pathGeo");
-        string geoFile             = config.getValue<string>("geoFile");
-        int numOfThreads           = config.getValue<int>("numOfThreads");
-        vector<int> blocknx        = config.getVector<int>("blocknx");
-        vector<real> boundingBox = config.getVector<real>("boundingBox");
-        // vector<double>  length = config.getVector<double>("length");
-        real uLB = config.getValue<real>("uLB");
-        // double uF2                         = config.getValue<double>("uF2");
-        real nuL             = config.getValue<real>("nuL");
-        real nuG             = config.getValue<real>("nuG");
-        real densityRatio    = config.getValue<real>("densityRatio");
-        real sigma           = config.getValue<real>("sigma");
-        int interfaceWidth = config.getValue<int>("interfaceWidth");
-        //double radius          = config.getValue<double>("radius");
-        real theta           = config.getValue<real>("contactAngle");
-        real gr              = config.getValue<real>("gravity");
-        real phiL            = config.getValue<real>("phi_L");
-        real phiH            = config.getValue<real>("phi_H");
-        real tauH            = config.getValue<real>("Phase-field Relaxation");
-        real mob             = config.getValue<real>("Mobility");
-
-        real endTime     = config.getValue<real>("endTime");
-        real outTime     = config.getValue<real>("outTime");
-        real availMem    = config.getValue<real>("availMem");
-        int refineLevel    = config.getValue<int>("refineLevel");
-        real Re          = config.getValue<real>("Re");
-        real dx          = config.getValue<real>("dx");
-        bool logToFile     = config.getValue<bool>("logToFile");
-        real restartStep = config.getValue<real>("restartStep");
-        real cpStart     = config.getValue<real>("cpStart");
-        real cpStep      = config.getValue<real>("cpStep");
-        bool newStart      = config.getValue<bool>("newStart");
-
-        real beta = 12 * sigma / interfaceWidth;
-        real kappa = 1.5 * interfaceWidth * sigma;
-
-        SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-        int myid                = comm->getProcessID();
-
-        if (myid == 0)
-            UBLOG(logINFO, "Jet Breakup: Start!");
-
-        if (logToFile) {
-#if defined(__unix__)
-            if (myid == 0) {
-                const char *str = pathname.c_str();
-                mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-            }
-#endif
-
-            if (myid == 0) {
-                stringstream logFilename;
-                logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-                UbLog::output_policy::setStream(logFilename.str());
-            }
-        }
-
-        // Sleep(30000);
-
-        // LBMReal dLB = 0; // = length[1] / dx;
-        real rhoLB = 0.0;
-        real nuLB  = nuL; //(uLB*dLB) / Re;
-
-        SPtr<LBMUnitConverter> conv(new LBMUnitConverter());
-
-        //const int baseLevel = 0;
-
-        SPtr<LBMKernel> kernel;
-
-        //kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel());
-        //kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel());
-        //kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel());
-        //kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel());
-       // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel());
-        kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel());
-
-        kernel->setWithForcing(true);
-        kernel->setForcingX1(0.0);
-        kernel->setForcingX2(gr);
-        kernel->setForcingX3(0.0);
-
-        kernel->setPhiL(phiL);
-        kernel->setPhiH(phiH);
-        kernel->setPhaseFieldRelaxation(tauH);
-        kernel->setMobility(mob);
-
-        //nuL, nuG, densityRatio, beta, kappa, theta,
-
-        kernel->setCollisionFactorMultiphase(nuL, nuG);
-        kernel->setDensityRatio(densityRatio);
-        kernel->setMultiphaseModelParameters(beta, kappa);
-        kernel->setContactAngle(theta);
-        kernel->setInterfaceWidth(interfaceWidth);
-
-        SPtr<BCSet> bcProc(new BCSet());
-        // BCSetPtr bcProc(new ThinWallBCSet());
-
-        kernel->setBCSet(bcProc);
-
-        SPtr<Grid3D> grid(new Grid3D(comm));
-         //grid->setPeriodicX1(true);
-         //grid->setPeriodicX2(true);
-         //grid->setPeriodicX3(true);
-        grid->setGhostLayerWidth(2);
-
-       
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
-
-        //////////////////////////////////////////////////////////////////////////
-        // restart
-        SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-        //SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm));
-        SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm));
-        //SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm));
-        //rcp->setNu(nuLB);
-        //rcp->setNuLG(nuL, nuG);
-        //rcp->setDensityRatio(densityRatio);
-
-        rcp->setLBMKernel(kernel);
-        rcp->setBCSet(bcProc);
-        //////////////////////////////////////////////////////////////////////////
-        // BC Adapter
-        //////////////////////////////////////////////////////////////////////////////
-        mu::Parser fctF1;
-        // fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))");
-        // fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1");
-        fctF1.SetExpr("vy1");
-        fctF1.DefineConst("vy1", 0.0);
-        fctF1.DefineConst("R", 8.0);
-        fctF1.DefineConst("x0", 0.0);
-        fctF1.DefineConst("z0", 0.0);
-        //SPtr<BC> velBCF1(
-        //    new MultiphaseVelocityBC(false, true, false, fctF1, phiH, 0.0, BCFunction::INFCONST));
-
-        mu::Parser fctF2;
-        fctF2.SetExpr("vy1");
-        fctF2.DefineConst("vy1", uLB);
-
-        real startTime = 30;
-        SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, startTime));
-        SPtr<BC> velBCF2(new MultiphaseVelocityBC(true, false, false, fctF2, phiH, startTime, endTime));
-
-        SPtr<BC> noSlipBC(new NoSlipBC());
-        noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy()));
-
-        SPtr<BC> denBC(new DensityBC(rhoLB));
-        denBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy()));
-
-        mu::Parser fctPhi_F1;
-        fctPhi_F1.SetExpr("phiH");
-        fctPhi_F1.DefineConst("phiH", phiH);
-
-        mu::Parser fctPhi_F2;
-        fctPhi_F2.SetExpr("phiL");
-        fctPhi_F2.DefineConst("phiL", phiL);
-
-        mu::Parser fctvel_F2_init;
-        fctvel_F2_init.SetExpr("U");
-        fctvel_F2_init.DefineConst("U", 0);
-
-        velBCF1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-        //////////////////////////////////////////////////////////////////////////////////
-        // BC visitor
-        MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
-        bcVisitor.addBC(noSlipBC);
-        bcVisitor.addBC(denBC); //Ohne das BB?
-        bcVisitor.addBC(velBCF1);
-
-        SPtr<D3Q27Interactor> inflowF1Int;
-        SPtr<D3Q27Interactor> cylInt;
-        if (newStart) {
-
-            //  if (newStart) {
-
-            // bounding box
-            /*double g_minX1 = 0.0;
-            double g_minX2 = -length[1] / 2.0;
-            double g_minX3 = -length[2] / 2.0;
-
-            double g_maxX1 = length[0];
-            double g_maxX2 = length[1] / 2.0;
-            double g_maxX3 = length[2] / 2.0;*/
-
-            real g_minX1 = boundingBox[0];
-            real g_minX2 = boundingBox[2];
-            real g_minX3 = boundingBox[4];
-
-            real g_maxX1 = boundingBox[1];
-            real g_maxX2 = boundingBox[3];
-            real g_maxX3 = boundingBox[5];
-
-            // geometry
-            SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            if (myid == 0)
-                GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube",
-                    WbWriterVtkXmlBinary::getInstance());
-
-            if (myid == 0) UBLOG(logINFO, "Read geoFile:start");
-            SPtr<GbTriFaceMesh3D> cylinder = make_shared<GbTriFaceMesh3D>();
-            cylinder->readMeshFromSTLFileBinary(pathGeo + "/" + geoFile, false);
-            GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-            if (myid == 0) UBLOG(logINFO, "Read geoFile:stop");
-            // inflow
-            //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 * dx, g_maxX3));
-            GbCuboid3DPtr geoInflowF1(
-                new GbCuboid3D(g_minX1*0.5 - dx, g_minX2 - dx, g_minX3*0.5 - dx, g_maxX1*0.5 + dx, g_minX2, g_maxX3*0.5 + dx));
-            if (myid == 0)  GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1",                                           WbWriterVtkXmlASCII::getInstance());
-
-            GbCylinder3DPtr cylinder1(new GbCylinder3D(g_minX1-dx, 0.0, 0.0, g_minX1+dx, 0.0, 0.0, 3e-3));
-            if (myid == 0)
-                GbSystem3D::writeGeoObject(cylinder1.get(), pathname + "/geo/cylinder1",
-                    WbWriterVtkXmlASCII::getInstance());
-
-            //GbCylinder3DPtr cylinder2(
-            //    new GbCylinder3D(0.0, g_minX2 - 2.0 * dx / 2.0, 0.0, 0.0, g_minX2 + 4.0 * dx, 0.0, 8.0+2.0*dx));
-            //if (myid == 0)
-            //    GbSystem3D::writeGeoObject(cylinder2.get(), pathname + "/geo/cylinder2",
-            //                               WbWriterVtkXmlASCII::getInstance());
-            // outflow
-            // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original)
-            //GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2, g_minX3, g_maxX1, g_maxX2 + dx, g_maxX3));
-            if (myid == 0)
-                GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow",
-                    WbWriterVtkXmlASCII::getInstance());
-
-            // double blockLength = blocknx[0] * dx;
-
-            if (myid == 0) {
-                UBLOG(logINFO, "uLb = " << uLB);
-                UBLOG(logINFO, "rho = " << rhoLB);
-                UBLOG(logINFO, "nuLb = " << nuLB);
-                UBLOG(logINFO, "Re = " << Re);
-                UBLOG(logINFO, "dx = " << dx);
-                UBLOG(logINFO, "Preprocess - start");
-            }
-
-            grid->setDeltaX(dx);
-            grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-            grid->setPeriodicX1(false);
-            grid->setPeriodicX2(false);
-            grid->setPeriodicX3(false);
-
-            GenBlocksGridVisitor genBlocks(gridCube);
-            grid->accept(genBlocks);
-
-            SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(
-                grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-            SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS));
-
-            //inflowF1Int =
-            //    SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBC, Interactor3D::SOLID));
-            //inflowF1Int->addBC(velBCF2);
-
-            SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBC, Interactor3D::SOLID));
-
-            // Create boundary conditions geometry
-            GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_minX1, g_maxX2 + dx, g_maxX3));
-            GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_maxX3));
-            GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_minX3));
-            GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_maxX3, g_maxX1 + dx, g_maxX2 + dx, g_maxX3 + dx));
-            GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_minX2, g_maxX3));
-            GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - dx, g_maxX2, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_maxX3));
-            GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance());
-
-            // Add boundary conditions to grid generator
-            SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID));
-
-
-            cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCF1, Interactor3D::SOLID));
-            cylInt->addBC(velBCF2);
-            //SPtr<D3Q27Interactor> cyl2Int(new D3Q27Interactor(cylinder2, grid, noSlipBC, Interactor3D::SOLID));
-
-
-            InteractorsHelper intHelper(grid, metisVisitor, true);
-            intHelper.addInteractor(cylInt);
-            intHelper.addInteractor(tubes);
-            //intHelper.addInteractor(outflowInt);
-            //intHelper.addInteractor(cyl2Int);
-
-
-            intHelper.addInteractor(wallXminInt);
-            intHelper.addInteractor(wallXmaxInt);
-            intHelper.addInteractor(wallZminInt);
-            intHelper.addInteractor(wallZmaxInt);
-            intHelper.addInteractor(wallYminInt);
-            intHelper.addInteractor(wallYmaxInt);
-            //intHelper.addInteractor(inflowF1Int);
-
-
-            intHelper.selectBlocks();
-
-            ppblocks->update(0);
-            ppblocks.reset();
-
-            unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-            int ghostLayer                    = 3;
-            unsigned long long numberOfNodesPerBlock =
-                (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]);
-            unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-            unsigned long long numberOfNodesPerBlockWithGhostLayer =
-                numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-            real needMemAll =
-                real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4));
-            real needMem = needMemAll / real(comm->getNumberOfProcesses());
-
-            if (myid == 0) {
-                UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-                UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-                int minInitLevel = grid->getCoarsestInitializedLevel();
-                int maxInitLevel = grid->getFinestInitializedLevel();
-                for (int level = minInitLevel; level <= maxInitLevel; level++) {
-                    int nobl = grid->getNumberOfBlocks(level);
-                    UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-                    UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock);
-                }
-                UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-                UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-                UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-            }
-
-            MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nuL, nuG, availMem, needMem);
-
-            grid->accept(kernelVisitor);
-
-            if (refineLevel > 0) {
-                SetUndefinedNodesBlockVisitor undefNodesVisitor;
-                grid->accept(undefNodesVisitor);
-            }
-
-            intHelper.setBC();
-
-            // initialization of distributions
-            mu::Parser fct1;
-            fct1.SetExpr("phiL");
-            fct1.DefineConst("phiL", phiL);
-            //MultiphaseInitDistributionsBlockVisitor initVisitor(interfaceThickness);
-            MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
-            initVisitor.setPhi(fct1);
-            grid->accept(initVisitor);
-///////////////////////////////////////////////////////////////////////////////////////////
-            //{
-                // std::vector<std::vector<SPtr<Block3D>>> blockVector;
-                // int gridRank = comm->getProcessID();
-                // int minInitLevel = grid->getCoarsestInitializedLevel();
-                // int maxInitLevel = grid->getFinestInitializedLevel();
-                // blockVector.resize(maxInitLevel + 1);
-                // for (int level = minInitLevel; level <= maxInitLevel; level++) {
-                //    grid->getBlocks(level, gridRank, true, blockVector[level]);
-                //}
-                //    for (int level = minInitLevel; level <= maxInitLevel; level++) {
-                //    for (SPtr<Block3D> block : blockVector[level]) {
-                //        if (block) {
-                //            int ix1 = block->getX1();
-                //            int ix2 = block->getX2();
-                //            int ix3 = block->getX3();
-                //            int level = block->getLevel();
-
-                //            for (int dir = 0; dir < D3Q27System::ENDDIR; dir++) {
-                //                SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, ix1, ix2, ix3, level);
-
-                //                if (!neighBlock) {
-
-                //                }
-                //            }
-                //        }
-                //    }
-                //}
-            //    SPtr<Block3D> block = grid->getBlock(0, 0, 0, 0);
-            //    SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel());
-            //    SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray();
-
-            //    for (int ix3 = 0; ix3 <= 13; ix3++) {
-            //        for (int ix2 = 0; ix2 <= 13; ix2++) {
-            //            for (int ix1 = 0; ix1 <= 13; ix1++) {
-            //                if (ix1 == 0 || ix2 == 0 || ix3 == 0 || ix1 == 13 || ix2 == 13 || ix3 == 13)
-            //                    bcArray->setUndefined(ix1, ix2, ix3);
-            //            }
-            //        }
-            //    }
-            //}
-            ////////////////////////////////////////////////////////////////////////////////////////////
-            // boundary conditions grid
-            {
-                SPtr<UbScheduler> geoSch(new UbScheduler(1));
-                SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(
-                    grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-                ppgeo->update(0);
-                ppgeo.reset();
-            }
-
-            if (myid == 0)
-                UBLOG(logINFO, "Preprocess - end");
-        } else {
-            if (myid == 0) {
-                UBLOG(logINFO, "Parameters:");
-                UBLOG(logINFO, "uLb = " << uLB);
-                UBLOG(logINFO, "rho = " << rhoLB);
-                UBLOG(logINFO, "nuLb = " << nuLB);
-                UBLOG(logINFO, "Re = " << Re);
-                UBLOG(logINFO, "dx = " << dx);
-                UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-                UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-                UBLOG(logINFO, "path = " << pathname);
-            }
-
-            rcp->restart((int)restartStep);
-            grid->setTimeStep(restartStep);
-
-            if (myid == 0)
-                UBLOG(logINFO, "Restart - end");
-        }
-
-      //  TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-      //  grid->accept(setConnsVisitor);
-
-       //ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-
-        grid->accept(bcVisitor);
-
-        //ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        grid->accept(setConnsVisitor);
-
-        SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-        SPtr<WriteMultiphaseQuantitiesSimulationObserver> pp(new WriteMultiphaseQuantitiesSimulationObserver(
-            //SPtr<WriteMacroscopicQuantitiesSimulationObserver> pp(new WriteMacroscopicQuantitiesSimulationObserver(
-            grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-        pp->update(0);
-
-        SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-        SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
-
-        SPtr<UbScheduler> timeBCSch(new UbScheduler(1, startTime, startTime));
-        auto timeDepBC = make_shared<TimeDependentBCSimulationObserver>(TimeDependentBCSimulationObserver(grid, timeBCSch));
-        timeDepBC->addInteractor(cylInt);
-
-#ifdef _OPENMP
-        omp_set_num_threads(numOfThreads);
-#endif
-
-        SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-        SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-        simulation->addSimulationObserver(npr);
-        simulation->addSimulationObserver(pp);
-        simulation->addSimulationObserver(timeDepBC);
-        simulation->addSimulationObserver(rcp);
-
-
-
-
-        if (myid == 0)
-            UBLOG(logINFO, "Simulation-start");
-        simulation->run();
-        if (myid == 0)
-            UBLOG(logINFO, "Simulation-end");
-    } catch (std::exception &e) {
-        cerr << e.what() << endl << flush;
-    } catch (std::string &s) {
-        cerr << s << endl;
-    } catch (...) {
-        cerr << "unknown exception" << endl;
-    }
-}
-int main(int argc, char *argv[])
-{
-    // Sleep(30000);
-    if (argv != NULL) {
-        if (argv[1] != NULL) {
-            run(string(argv[1]));
-        } else {
-            cout << "Configuration file is missing!" << endl;
-        }
-    }
-}
diff --git a/apps/cpu/Multiphase/MultiphaseGeier.cfg b/apps/cpu/Multiphase/MultiphaseGeier.cfg
deleted file mode 100644
index d701725832cfd7337d383e9c98a60243c0c9b54e..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/MultiphaseGeier.cfg
+++ /dev/null
@@ -1,68 +0,0 @@
-#pathname = E:/Multiphase/HesamCodeWithCumulantsDensRatio
-#pathname = E:/Multiphase/HesamCodeWithCumulantsQuartic
-#pathname = E:/Multiphase/HesamCode
-pathname = E:/Multiphase/VelocityFormSig1e-3SVarDens
-pathGeo = C:/Users/geier/Documents/VirtualFluids_dev_Kostya/apps/cpu/Multiphase/backup
-geoFile=tubeTransformed.stl
-#geoFile = JetBreakup2.ASCII.stl
-numOfThreads = 4
-availMem = 10e9
-
-#Grid
-
-#boundingBox = -1.0 121.0 0.5 629.0 -1.0 121.0 #(Jet Breakup) (Original with inlet length)
-#boundingBox = -60.5 60.5 -1.0 -201.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length)
-#blocknx = 22 20 22
-
-#boundingBox = -60.5 60.5 -1.0 -21.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length)
-#boundingBox = -60.5 60.5 -21.0 -1.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length)
-#blocknx = 22 20 22
-
-
-#dx = 0.5
-
-#boundingBox = 6.0e-3 46.0e-3 -5e-3 5e-3 -5e-3 5e-3
-#boundingBox = 6.0e-3 86.0e-3 -5e-3 5e-3 -5e-3 5e-3
-#blocknx = 480 60 60 #20 20 20
-
-boundingBox = 6.0e-3 16.0e-3 -5e-3 5e-3 -5e-3 5e-3
-blocknx = 20 20 20
-
-#boundingBox = 6.0e-3 16.0e-3 -5e-3 5e-3 -5e-3 5e-3
-#blocknx = 60 60 60 #20 20 20
-
-
-dx = 1.66666666667e-4
-
-refineLevel = 0
-
-#Simulation
-uLB =0.005# 0.0000005 #inlet velocity
-#uLB=0.001
-uF2 = 0.0001
-Re = 10
-nuL =1e-3#1e-2# 1.0e-5  #!1e-2
-nuG =1e-6#1e-2# 1.16e-4 #!1e-2
-densityRatio = 1000#1000#1000 #30
-sigma =1e-3# 1e-4 #4.66e-3 #surface tension 1e-4 ./. 1e-5
-interfaceThickness = 5
-radius = 615.0   (Jet Breakup)
-contactAngle = 110.0
-gravity = 0.0
-#gravity = -5.04e-6
-phi_L = 0.0
-phi_H = 1.0
-Phase-field Relaxation = 0.6
-Mobility = 0.1 #0.02 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation parameter, to activate it need to change in kernel tauH to tauH1 
-
-
-logToFile = false
-
-newStart = true
-restartStep = 100000
-
-cpStart = 100000
-cpStep = 100000
-
-outTime = 100
-endTime = 200000000
\ No newline at end of file
diff --git a/apps/cpu/Multiphase/backup/3D flow-focusing.STL b/apps/cpu/Multiphase/backup/3D flow-focusing.STL
deleted file mode 100644
index 88aa3e365ce64c70526dc909d3578ac35a72f815..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/3D flow-focusing.STL and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/Cubic_jet.stl b/apps/cpu/Multiphase/backup/Cubic_jet.stl
deleted file mode 100644
index c72bd5e4cc997a156f43cc526b38d7fb49077aa1..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/Cubic_jet.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp b/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp
deleted file mode 100644
index a667643c51186f3494d4e80018c482494ed8af30..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp	
+++ /dev/null
@@ -1,2006 +0,0 @@
-#include "MultiphaseCumulantLBMKernel.h"
-#include "D3Q27System.h"
-#include "Interpolator.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <math.h>
-#include <omp.h>
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel()
-{
-   this->nx1 = 0;
-   this->nx2 = 0;
-   this->nx3 = 0;
-   this->parameter = NORMAL;
-   this->OxyyMxzz = 1.0;
-   this->compressible = false;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel(int nx1, int nx2, int nx3, Parameter p) 
-{
-   this->nx1 = nx1;
-   this->nx2 = nx2;
-   this->nx3 = nx3;
-   parameter = p;
-   this->compressible = false;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseCumulantLBMKernel::~MultiphaseCumulantLBMKernel(void)
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::init()
-{
-   //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0));
-   DistributionArray3DPtr f(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0));
-   DistributionArray3DPtr h(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); // For phase-field
-   //PhaseFieldArray3DPtr phi(new CbArray3D<LBMReal,IndexerX3X2X1>(nx1+2, nx2+2, nx3+2, -999.0));
-   dataSet->setFdistributions(f);
-   dataSet->setHdistributions(h); // For phase-field
-   //dataSet->setPhaseField(phi);
-}
-//////////////////////////////////////////////////////////////////////////
-LBMKernelPtr MultiphaseCumulantLBMKernel::clone()
-{
-   LBMKernelPtr kernel(new MultiphaseCumulantLBMKernel(nx1, nx2, nx3, parameter));
-   boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->init();
-   
-   kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-   kernel->setDensityRatio(this->densityRatio);
-   kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-   kernel->setContactAngle(this->contactAngle);
-   kernel->setPhiL(this->phiL);
-   kernel->setPhiH(this->phiH);
-   kernel->setPhaseFieldRelaxation(this->tauH);
-
-   kernel->setBCProcessor(bcProcessor->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   kernel->setDeltaT(deltaT);
-   switch (parameter)
-   {
-   case NORMAL:
-      boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 1.0;
-   	break;
-   case MAGIC:
-      boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 2.0 +(-collFactor);
-      break;
-   }
-   return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::calculate()
-{
-   timer.resetAndStart();
-   collideAll();
-   timer.stop();
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::collideAll()
-{
-   using namespace D3Q27System;
-
-   //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);
-
-   LBMReal forcingX1 = 0;
-   LBMReal forcingX2 = 0;
-   LBMReal forcingX3 = 0;
-   }*/
-   forcingX1 = 0.0;
-   forcingX2 = 0.0;
-   forcingX3 = 0.0;
-   /////////////////////////////////////
-
-   localDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   localDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-   nonLocalDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-   zeroDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-   //phaseField = dataSet->getPhaseField();
-
-   BCArray3DPtr 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;
-
-
-//#pragma omp parallel num_threads(8)
-   {
-   //   int i = omp_get_thread_num();
-   //   printf_s("Hello from thread %d\n", i);
-   //}
-//#pragma omp for 
-
-
-
-/*
-/////// Filling ghost nodes for FD computations //////////
-	for(int x1 = minX1; x1 < maxX1; x1++)
-	{
-		for(int x2 = minX2; x2 < maxX2; x2++)
-		{
-			int x3 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1);
-			x3 = maxX3;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3);
-		}
-	}
-	for(int x2 = minX2; x2 < maxX2; x2++)
-	{
-		for(int x3 = minX3; x3 < maxX3; x3++)
-		{
-			int x1 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3);
-			x1 = maxX1;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3);
-		}
-	}
-	for(int x1 = minX1; x1 < maxX1; x1++)
-	{
-		for(int x3 = minX3; x3 < maxX3; x3++)
-		{
-			int x2 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3);
-			x2 = maxX2;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3);
-		}
-	}
-	(*phaseField)(0, 0,     0    ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1);
-	(*phaseField)(0, 0,     maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3  );
-	(*phaseField)(0, maxX2, 0    ) = (*phaseField)(maxX1-1, minX2, maxX3-1  );
-	(*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3    );
-
-	(*phaseField)(maxX1, 0,     0    ) = (*phaseField)(minX1, maxX2-1, maxX3-1);
-	(*phaseField)(maxX1, 0,     maxX3) = (*phaseField)(minX1, maxX2-1, minX3  );
-	(*phaseField)(maxX1, maxX2, 0    ) = (*phaseField)(minX1, minX2, maxX3-1  );
-	(*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3    );
-
-/////////////////////////////////////////////////////////   
-*/
-   
-   CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-   
-   //CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999);
-   
-
-   for(int x3 = 0; x3 <= maxX3; x3++)
-   {
-      for(int x2 = 0; x2 <= maxX2; x2++)
-      {
-         for(int x1 = 0; x1 <= maxX1; x1++)
-         {
-            if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-            {
-				int x1p = x1 + 1;
-				int x2p = x2 + 1;
-				int x3p = x3 + 1;
-
-				h[E  ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3);
-				h[N  ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); 
-				h[T  ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3);
-				h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3);
-				h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3);
-				h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3);
-				h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3);
-				h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3);
-				h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3);
-				h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3);
-				h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3);
-				h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3);
-				h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-				h[W  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3  );
-				h[S  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3  );
-				h[B  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p  );
-				h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 );
-				h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 );
-				h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p );
-				h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p );
-				h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p );
-				h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p );
-				h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-				h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p);
-				h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p);
-				h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-				h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3);
-				//LBMReal phase = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + 
-				//	h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];
-				//if (phase > 1.0) phase = 1.0e0;
-				//(*phaseField)(x1,x2,x3) = phase;
-				(*phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + 
-					h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];
-			}
-		 }
-	  }
-   }
-   
-   
-   LBMReal collFactorM;
-   LBMReal forcingTerm[D3Q27System::ENDF+1];
-   LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, m220, m202, m022, m211, m121, m112, m221, m212, m122, m222;
-   LBMReal k000, k100, k010, k001, k110, k101, k011, k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, k122, k222;
-   LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222;
-
-   LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, 
-	   k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022;
-
-   LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, 
-	   c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022;
-
-   LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10;
-   
-   w2  = 1.0;
-   w3  = 1.0;
-   w4  = 1.0;
-   w5  = 1.0;
-   w6  = 1.0;
-   w7  = 1.0;
-   w8  = 1.0;
-   w9  = 1.0;
-   w10 = 1.0;
-
-   for(int x3 = minX3; x3 < maxX3; x3++)
-   {
-      for(int x2 = minX2; x2 < maxX2; x2++)
-      {
-         for(int x1 = minX1; x1 < maxX1; x1++)
-         {
-            if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-            {
-               int x1p = x1 + 1;
-               int x2p = x2 + 1;
-               int x3p = x3 + 1;
-
-
-               //////////////////////////////////////////////////////////////////////////
-               //Read distributions and phase field
-               ////////////////////////////////////////////////////////////////////////////
-               //////////////////////////////////////////////////////////////////////////
-
-               //E   N  T
-               //c   c  c
-               //////////
-               //W   S  B
-               //a   a  a
-
-               //Rest ist b
-
-               //mfxyz
-               //a - negative
-               //b - null
-               //c - positive
-               
-               // a b c
-               //-1 0 1
-			   
-			   /*
-			   phi[ZERO] = (phaseField)(x1,x2,x3);
-			   phi[E  ] = (phaseField)(x1 + DX1[E  ], x2 + DX2[E  ], x3 + DX3[E  ]);
-			   phi[N  ] = (phaseField)(x1 + DX1[N  ], x2 + DX2[N  ], x3 + DX3[N  ]);
-			   phi[T  ] = (phaseField)(x1 + DX1[T  ], x2 + DX2[T  ], x3 + DX3[T  ]);
-			   phi[W  ] = (phaseField)(x1 + DX1[W  ], x2 + DX2[W  ], x3 + DX3[W  ]);
-			   phi[S  ] = (phaseField)(x1 + DX1[S  ], x2 + DX2[S  ], x3 + DX3[S  ]);
-			   phi[B  ] = (phaseField)(x1 + DX1[B  ], x2 + DX2[B  ], x3 + DX3[B  ]);
-			   phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]);
-			   phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]);
-			   phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]);
-			   phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]);
-			   phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]);
-			   phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]);
-			   phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]);
-			   phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]);
-			   phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]);
-			   phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]);
-			   phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]);
-			   phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]);
-			   phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]);
-			   phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]);
-			   phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]);
-			   phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]);
-			   phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]);
-			   phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]);
-			   phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]);
-			   phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]);
-			   */
-			   findNeighbors(phaseField, x1, x2, x3);
-
-			   g[E  ] = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3);
-			   g[N  ] = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); 
-			   g[T  ] = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3);
-			   g[NE ] = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3);
-			   g[NW ] = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3);
-			   g[TE ] = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3);
-			   g[TW ] = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3);
-			   g[TN ] = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3);
-			   g[TS ] = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3);
-			   g[TNE] = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3);
-			   g[TNW] = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3);
-			   g[TSE] = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3);
-			   g[TSW] = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-			   g[W  ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3  );
-			   g[S  ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3  );
-			   g[B  ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p  );
-			   g[SW ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 );
-			   g[SE ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 );
-			   g[BW ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p );
-			   g[BE ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p );
-			   g[BS ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p );
-			   g[BN ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p );
-			   g[BSW] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-			   g[BSE] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p);
-			   g[BNW] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p);
-			   g[BNE] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-			   g[ZERO] = (*this->zeroDistributionsF)(x1,x2,x3);
-
-			   
-			   
-			   h[E  ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3);
-			   h[N  ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); 
-			   h[T  ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3);
-			   h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3);
-			   h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3);
-			   h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3);
-			   h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3);
-			   h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3);
-			   h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3);
-			   h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3);
-			   h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3);
-			   h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3);
-			   h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-			   h[W  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3  );
-			   h[S  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3  );
-			   h[B  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p  );
-			   h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 );
-			   h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 );
-			   h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p );
-			   h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p );
-			   h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p );
-			   h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p );
-			   h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-			   h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p);
-			   h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p);
-			   h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-			   h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3);
-
-			   LBMReal rhoH = 1.0;
-			   LBMReal rhoL = 1.0/densityRatio;
-
-			   //LBMReal rhoToPhi = (1.0 - 1.0/densityRatio);
-			   LBMReal rhoToPhi = (rhoH - rhoL)/(phiH - phiL);
-
-			   //collFactorM = phi[ZERO]*collFactorL + (1-phi[ZERO])*collFactorG;
-			   //collFactorM = phi[ZERO]*collFactorG + (1-phi[ZERO])*collFactorL;
-			   collFactorM = collFactorL + (collFactorL - collFactorG)*(phi[ZERO] - phiH)/(phiH - phiL);
-
-			   w1 = collFactorM;
-			   //LBMReal tauH = 1.0;
-			   LBMReal dX1_phi = gradX1_phi();
-			   LBMReal dX2_phi = gradX2_phi();
-			   LBMReal dX3_phi = gradX3_phi();
-			   LBMReal mu = 2*beta*phi[ZERO]*(phi[ZERO]-1)*(2*phi[ZERO]-1) - kappa*nabla2_phi();
-			   
-			   //LBMReal rhoToPhi = (1.0/densityRatio - 1.0);
-			   
-			   			   
-
-			   //----------- Calculating Macroscopic Values -------------
-
-			   //LBMReal rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio;
-			   LBMReal rho = rhoH + rhoToPhi*(phi[ZERO] - phiH);
-			   //LBMReal rho = phi[ZERO]*1.0/densityRatio + (1.0 - phi[ZERO]);
-
-			   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();
-
-				   LBMReal rho_m = 1.0/densityRatio;
-				   forcingX1 = forcingX1*(rho-rho_m);
-				   forcingX2 = forcingX2*(rho-rho_m);
-				   forcingX3 = forcingX3*(rho-rho_m);
-
-				   //ux += forcingX1*deltaT*0.5; // X
-				   //uy += forcingX2*deltaT*0.5; // Y
-				   //uz += forcingX3*deltaT*0.5; // Z
-			   }
-
-			   LBMReal ux = (g[BE] + g[BNE] - g[BNW] + g[BSE] - g[BSW] - g[BW] + g[E] + g[NE] - g[NW] + g[SE] - g[SW] + g[TE] + 
-			   g[TNE] - g[TNW] + g[TSE] - g[TSW] - g[TW] - g[W]) / (rho*c1o3) + (mu*dX1_phi + forcingX1)/(2*rho);
-
-			   LBMReal uy = (g[BN] + g[BNE] + g[BNW] - g[BS] - g[BSE] - g[BSW] + g[N] + g[NE] + g[NW] - g[S] - g[SE] - g[SW] + 
-			   g[TN] + g[TNE] + g[TNW] - g[TS] - g[TSE] - g[TSW]) / (rho*c1o3) + (mu*dX2_phi + forcingX2)/(2*rho);
-
-			   LBMReal uz = (g[T] + g[TE] + g[TN] + g[TNE] + g[TNW] + g[TS] + g[TSE] + g[TSW] + g[TW] - g[B] - g[BE] - g[BN] - 
-			   g[BNE] - g[BNW] - g[BS] - g[BSE] - g[BSW] - g[BW]) / (rho*c1o3) + (mu*dX3_phi + forcingX3)/(2*rho);
-
-			   LBMReal p1 = (g[ZERO] + g[E] + g[W] + g[N] + g[S] + g[T] + g[B] + g[NE] + g[SW] + g[SE] + g[NW] + g[TE] + g[BW] + 
-			   g[BE] + g[TW] + g[TN] + g[BS] + g[BN] + g[TS] + g[TNE] + g[TNW] + g[TSE] + g[TSW] + g[BNE] + g[BNW] + g[BSE] + g[BSW]) +
-			   (ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0;
-			   
-			   //vvx = 0.0; vvy = 0.0; vvz = 0.0;
-			   //--------------------------------------------------------
-			   
-
-
-
-			   LBMReal ux2 = ux*ux;
-			   LBMReal uy2 = uy*uy;
-			   LBMReal uz2 = uz*uz;
-			   LBMReal ux_uy = ux*uy;
-			   LBMReal ux_uz = ux*uz;
-			   LBMReal uy_uz = uy*uz;
-			   LBMReal ux_uy_uz = ux*uy*uz;
-
-
-/*
-			   //----------- Calculating Forcing Terms -------------
-			   LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi);
-			   for (int dir = STARTF; dir < (ENDF+1); dir++)
-			   {
-				   if (dir != ZERO)
-				   {
-					   LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0;
-					   forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + mu*dirGrad_phi*WEIGTH[dir] - 
-						   (forcingTerm1)*WEIGTH[dir];
-				   } 
-				   else
-				   {
-					   forcingTerm[ZERO] =  -(forcingTerm1)*WEIGTH[ZERO];
-				   }
-			   }
-			  //--------------------------------------------------------
-*/
-
-			   //----------- Calculating Forcing Terms * -------------
-			   //LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi);
-			   for (int dir = STARTF; dir <= (FENDDIR); dir++)
-			   {
-				   LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz;
-				   LBMReal velSq1 = velProd*velProd;
-				   LBMReal gamma = WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2));
-				   
-				   //forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) + 
-					//   (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + 
-					//   (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);
-				   
-				   LBMReal fac1 = (gamma - WEIGTH[dir])*c1o3*rhoToPhi;
-				   //LBMReal fac2 = gamma*mu;
-				   //LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0;
-				   //LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi;
-				   /*forcingTerm[dir] = (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3) -
-				   (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - 
-				   (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - 
-				   (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi);*/
-				   forcingTerm[dir] = (DX1[dir] - ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) +
-									  (DX2[dir] - uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) +
-									  (DX3[dir] - uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3));
-
-			   }
-
-			   LBMReal gamma = WEIGTH[ZERO]*(1 - 1.5*(ux2+uy2+uz2));
-			   /*forcingTerm[ZERO] = -(ux)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - 
-				   (uy)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - 
-				   (uz)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/
-			   LBMReal fac1 = (gamma - WEIGTH[ZERO])*c1o3*rhoToPhi;
-			   forcingTerm[ZERO] = (-ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) +
-								   (-uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) +
-							       (-uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3));
-			   
-			   //--------------------------------------------------------
-
-/*			   
-			   f1[E  ] = (g[E  ] + 0.5*forcingTerm[E  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[E  ]/c1o3;
-			   f1[N  ] = (g[N  ] + 0.5*forcingTerm[N  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[N  ]/c1o3;
-			   f1[T  ] = (g[T  ] + 0.5*forcingTerm[T  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[T  ]/c1o3;
-			   f1[NE ] = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NE ]/c1o3;
-			   f1[NW ] = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NW ]/c1o3;
-			   f1[TE ] = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TE ]/c1o3;
-			   f1[TW ] = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TW ]/c1o3;
-			   f1[TN ] = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TN ]/c1o3;
-			   f1[TS ] = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TS ]/c1o3;
-			   f1[TNE] = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNE]/c1o3;
-			   f1[TNW] = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNW]/c1o3;
-			   f1[TSE] = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSE]/c1o3;
-			   f1[TSW] = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSW]/c1o3;
-			   f1[W  ] = (g[W  ] + 0.5*forcingTerm[W  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[W  ]/c1o3;
-			   f1[S  ] = (g[S  ] + 0.5*forcingTerm[S  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[S  ]/c1o3;
-			   f1[B  ] = (g[B  ] + 0.5*forcingTerm[B  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[B  ]/c1o3;
-			   f1[SW ] = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SW ]/c1o3;
-			   f1[SE ] = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SE ]/c1o3;
-			   f1[BW ] = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BW ]/c1o3;
-			   f1[BE ] = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BE ]/c1o3;
-			   f1[BS ] = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BS ]/c1o3;
-			   f1[BN ] = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BN ]/c1o3;
-			   f1[BSW] = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSW]/c1o3;
-			   f1[BSE] = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSE]/c1o3;
-			   f1[BNW] = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNW]/c1o3;
-			   f1[BNE] = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNE]/c1o3;
-			   f1[ZERO] = (g[ZERO] + 0.5*forcingTerm[ZERO])/c1o3 - (p1 - rho*c1o3)*WEIGTH[ZERO]/c1o3;
-*/
-			   
-			   LBMReal mfcbb = (g[E  ] + 0.5*forcingTerm[E  ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[E  ]/c1o3;
-			   LBMReal mfbcb = (g[N  ] + 0.5*forcingTerm[N  ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[N  ]/c1o3;
-			   LBMReal mfbbc = (g[T  ] + 0.5*forcingTerm[T  ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[T  ]/c1o3;
-			   LBMReal mfccb = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[NE ]/c1o3;
-			   LBMReal mfacb = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[NW ]/c1o3;
-			   LBMReal mfcbc = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TE ]/c1o3;
-			   LBMReal mfabc = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TW ]/c1o3;
-			   LBMReal mfbcc = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TN ]/c1o3;
-			   LBMReal mfbac = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TS ]/c1o3;
-			   LBMReal mfccc = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TNE]/c1o3;
-			   LBMReal mfacc = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TNW]/c1o3;
-			   LBMReal mfcac = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TSE]/c1o3;
-			   LBMReal mfaac = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TSW]/c1o3;
-			   LBMReal mfabb = (g[W  ] + 0.5*forcingTerm[W  ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[W  ]/c1o3;
-			   LBMReal mfbab = (g[S  ] + 0.5*forcingTerm[S  ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[S  ]/c1o3;
-			   LBMReal mfbba = (g[B  ] + 0.5*forcingTerm[B  ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[B  ]/c1o3;
-			   LBMReal mfaab = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[SW ]/c1o3;
-			   LBMReal mfcab = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[SE ]/c1o3;
-			   LBMReal mfaba = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BW ]/c1o3;
-			   LBMReal mfcba = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BE ]/c1o3;
-			   LBMReal mfbaa = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BS ]/c1o3;
-			   LBMReal mfbca = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BN ]/c1o3;
-			   LBMReal mfaaa = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BSW]/c1o3;
-			   LBMReal mfcaa = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BSE]/c1o3;
-			   LBMReal mfaca = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BNW]/c1o3;
-			   LBMReal mfcca = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BNE]/c1o3;
-
-			   LBMReal mfbbb = (g[ZERO] + 0.5*forcingTerm[ZERO])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[ZERO]/c1o3;
-			   
-               
-
-			   /*
-               //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();
-
-                  vvx += forcingX1*deltaT*0.5; // X
-                  vvy += forcingX2*deltaT*0.5; // Y
-                  vvz += forcingX3*deltaT*0.5; // Z
-               }
-               /////////////////////////////////////////////////////////////////////////////////////////// 
-			   */
-              
-			   LBMReal oMdrho, m0, m1, m2;
-               
-			   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 = rho - (oMdrho + p1/c1o3);
-
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               LBMReal wadjust;
-               LBMReal qudricLimit = 0.01;
-               ////////////////////////////////////////////////////////////////////////////////////
-               //Hin
-               ////////////////////////////////////////////////////////////////////////////////////
-               // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Z - Dir
-               m2    = mfaaa + mfaac;
-               m1    = mfaac - mfaaa;
-               m0    = m2          + mfaab;
-               mfaaa = m0;
-               m0   += c1o36 * oMdrho;   
-               mfaab = m1 -        m0 * uz;
-               mfaac = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaba  + mfabc;
-               m1    = mfabc  - mfaba;
-               m0    = m2          + mfabb;
-               mfaba = m0;
-               m0   += c1o9 * oMdrho;
-               mfabb = m1 -        m0 * uz;
-               mfabc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaca  + mfacc;
-               m1    = mfacc  - mfaca;
-               m0    = m2          + mfacb;
-               mfaca = m0;
-               m0   += c1o36 * oMdrho;
-               mfacb = m1 -        m0 * uz;
-               mfacc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbaa + mfbac;
-               m1    = mfbac - mfbaa;
-               m0    = m2          + mfbab;
-               mfbaa = m0;
-               m0   += c1o9 * oMdrho;
-               mfbab = m1 -        m0 * uz;
-               mfbac = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbba  + mfbbc;
-               m1    = mfbbc  - mfbba;
-               m0    = m2          + mfbbb;
-               mfbba = m0;
-               m0   += c4o9 * oMdrho;
-               mfbbb = m1 -        m0 * uz;
-               mfbbc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbca  + mfbcc;
-               m1    = mfbcc  - mfbca;
-               m0    = m2          + mfbcb;
-               mfbca = m0;
-               m0   += c1o9 * oMdrho;
-               mfbcb = m1 -        m0 * uz;
-               mfbcc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcaa + mfcac;
-               m1    = mfcac - mfcaa;
-               m0    = m2          + mfcab;
-               mfcaa = m0;
-               m0   += c1o36 * oMdrho;
-               mfcab = m1 -        m0 * uz;
-               mfcac = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcba  + mfcbc;
-               m1    = mfcbc  - mfcba;
-               m0    = m2          + mfcbb;
-               mfcba = m0;
-               m0   += c1o9 * oMdrho;
-               mfcbb = m1 -        m0 * uz;
-               mfcbc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcca  + mfccc;
-               m1    = mfccc  - mfcca;
-               m0    = m2          + mfccb;
-               mfcca = m0;
-               m0   += c1o36 * oMdrho;
-               mfccb = m1 -        m0 * uz;
-               mfccc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               m2    = mfaaa + mfaca;
-               m1    = mfaca - mfaaa;
-               m0    = m2          + mfaba;
-               mfaaa = m0;
-               m0   += c1o6 * oMdrho;
-               mfaba = m1 -        m0 * uy;
-               mfaca = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaab  + mfacb;
-               m1    = mfacb  - mfaab;
-               m0    = m2          + mfabb;
-               mfaab = m0;
-               mfabb = m1 -        m0 * uy;
-               mfacb = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaac  + mfacc;
-               m1    = mfacc  - mfaac;
-               m0    = m2          + mfabc;
-               mfaac = m0;
-               m0   += c1o18 * oMdrho;
-               mfabc = m1 -        m0 * uy;
-               mfacc = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbaa + mfbca;
-               m1    = mfbca - mfbaa;
-               m0    = m2          + mfbba;
-               mfbaa = m0;
-               m0   += c2o3 * oMdrho;
-               mfbba = m1 -        m0 * uy;
-               mfbca = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbab  + mfbcb;
-               m1    = mfbcb  - mfbab;
-               m0    = m2          + mfbbb;
-               mfbab = m0;
-               mfbbb = m1 -        m0 * uy;
-               mfbcb = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbac  + mfbcc;
-               m1    = mfbcc  - mfbac;
-               m0    = m2          + mfbbc;
-               mfbac = m0;
-               m0   += c2o9 * oMdrho;
-               mfbbc = m1 -        m0 * uy;
-               mfbcc = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcaa + mfcca;
-               m1    = mfcca - mfcaa;
-               m0    = m2          + mfcba;
-               mfcaa = m0;
-               m0   += c1o6 * oMdrho;
-               mfcba = m1 -        m0 * uy;
-               mfcca = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcab  + mfccb;
-               m1    = mfccb  - mfcab;
-               m0    = m2          + mfcbb;
-               mfcab = m0;
-               mfcbb = m1 -        m0 * uy;
-               mfccb = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcac  + mfccc;
-               m1    = mfccc  - mfcac;
-               m0    = m2          + mfcbc;
-               mfcac = m0;
-               m0   += c1o18 * oMdrho;
-               mfcbc = m1 -        m0 * uy;
-               mfccc = m2 - 2. *   m1 * uy + uy2 * 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 * ux;
-               mfcaa = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaba  + mfcba;
-               m1    = mfcba  - mfaba;
-               m0    = m2          + mfbba;
-               mfaba = m0;
-               mfbba = m1 -        m0 * ux;
-               mfcba = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaca  + mfcca;
-               m1    = mfcca  - mfaca;
-               m0    = m2          + mfbca;
-               mfaca = m0;
-               m0   += c1o3 * oMdrho;
-               mfbca = m1 -        m0 * ux;
-               mfcca = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaab + mfcab;
-               m1    = mfcab - mfaab;
-               m0    = m2          + mfbab;
-               mfaab = m0;
-               mfbab = m1 -        m0 * ux;
-               mfcab = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfabb  + mfcbb;
-               m1    = mfcbb  - mfabb;
-               m0    = m2          + mfbbb;
-               mfabb = m0;
-               mfbbb = m1 -        m0 * ux;
-               mfcbb = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfacb  + mfccb;
-               m1    = mfccb  - mfacb;
-               m0    = m2          + mfbcb;
-               mfacb = m0;
-               mfbcb = m1 -        m0 * ux;
-               mfccb = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaac + mfcac;
-               m1    = mfcac - mfaac;
-               m0    = m2          + mfbac;
-               mfaac = m0;
-               m0   += c1o3 * oMdrho;
-               mfbac = m1 -        m0 * ux;
-               mfcac = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfabc  + mfcbc;
-               m1    = mfcbc  - mfabc;
-               m0    = m2          + mfbbc;
-               mfabc = m0;
-               mfbbc = m1 -        m0 * ux;
-               mfcbc = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfacc  + mfccc;
-               m1    = mfccc  - mfacc;
-               m0    = m2          + mfbcc;
-               mfacc = m0;
-               m0   += c1o9 * oMdrho;
-               mfbcc = m1 -        m0 * ux;
-               mfccc = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Cumulants
-               ////////////////////////////////////////////////////////////////////////////////////
-               LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity
-               LBMReal OxyyPxzz  = 1.;//-s9;//2+s9;//
-               //LBMReal OxyyMxzz  = 1.;//2+s9;//
-               LBMReal O4        = 1.;
-               LBMReal O5        = 1.;
-               LBMReal O6        = 1.;
-
-               //Cum 4.
-               //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-               //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-               //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-               LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab);
-               LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb);
-               LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb);
-
-			   LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho);
-			   LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho);
-			   LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho);
-
-			   //LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho);
-			   //LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho);
-			   //LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho);
-
-               //Cum 5.
-               LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-               LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-               LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-               //Cum 6.
-               LBMReal CUMccc = mfccc  +((-4. *  mfbbb * mfbbb 
-                  -       (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-                  -  4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-                  -  2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-                  +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-                  +  2. * (mfcaa * mfaca * mfaac)
-                  + 16. *  mfbba * mfbab * mfabb)
-                  - c1o3* (mfacc + mfcac + mfcca) * oMdrho  -c1o9*oMdrho*oMdrho
-                  - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho)
-                  +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-                  +       (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho;
-
-               //2.
-               // linear combinations
-               LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
-               LBMReal mxxMyy    = mfcaa - mfaca;
-               LBMReal mxxMzz         = mfcaa - mfaac;
-
-               LBMReal dxux = -c1o2 * collFactorM *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz);
-               LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-               LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-
-               //relax
-               mxxPyyPzz += OxxPyyPzz*(mfaaa  - mxxPyyPzz)- 3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz);
-               mxxMyy    += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy);
-               mxxMzz    += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz);
-
-               mfabb     += collFactorM * (-mfabb);
-               mfbab     += collFactorM * (-mfbab);
-               mfbba     += collFactorM * (-mfbba);
-
-               // linear combinations back
-               mfcaa = c1o3 * (       mxxMyy +      mxxMzz + mxxPyyPzz);
-               mfaca = c1o3 * (-2. *  mxxMyy +      mxxMzz + mxxPyyPzz);
-               mfaac = c1o3 * (       mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-               //3.
-               // linear combinations
-               LBMReal mxxyPyzz = mfcba + mfabc;
-               LBMReal mxxyMyzz = mfcba - mfabc;
-
-               LBMReal mxxzPyyz = mfcab + mfacb;
-               LBMReal mxxzMyyz = mfcab - mfacb;
-
-               LBMReal mxyyPxzz = mfbca + mfbac;
-               LBMReal mxyyMxzz = mfbca - mfbac;
-
-               //relax
-               wadjust    = OxyyMxzz+(1.-OxyyMxzz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimit);
-               mfbbb     += wadjust * (-mfbbb);
-               wadjust    = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimit);
-               mxxyPyzz  += wadjust * (-mxxyPyzz);
-               wadjust    = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimit);
-               mxxyMyzz  += wadjust * (-mxxyMyzz);
-               wadjust    = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimit);
-               mxxzPyyz  += wadjust * (-mxxzPyyz);
-               wadjust    = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimit);
-               mxxzMyyz  += wadjust * (-mxxzMyyz);
-               wadjust    = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimit);
-               mxyyPxzz  += wadjust * (-mxyyPxzz);
-               wadjust    = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimit);
-               mxyyMxzz  += wadjust * (-mxyyMxzz);
-
-               // linear combinations back
-               mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2;
-               mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-               mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2;
-               mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-               mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2;
-               mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-               //4.
-               CUMacc += O4 * (-CUMacc);
-               CUMcac += O4 * (-CUMcac);
-               CUMcca += O4 * (-CUMcca);
-
-               CUMbbc += O4 * (-CUMbbc);
-               CUMbcb += O4 * (-CUMbcb);
-               CUMcbb += O4 * (-CUMcbb);
-
-               //5.
-               CUMbcc += O5 * (-CUMbcc);
-               CUMcbc += O5 * (-CUMcbc);
-               CUMccb += O5 * (-CUMccb);
-
-               //6.
-               CUMccc += O6 * (-CUMccc);
-
-               //back cumulants to central moments
-               //4.
-               //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-               //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-               //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-               mfcbb = CUMcbb + ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab);
-               mfbcb = CUMbcb + ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb);
-               mfbbc = CUMbbc + ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb);
-
-               mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-               mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-               mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-
-			   //mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho;
-			   //mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho;
-			   //mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho;
-
-               //5.
-               mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-               mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-               mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-               //6.
-               mfccc = CUMccc  -((-4. *  mfbbb * mfbbb 
-                  -       (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-                  -  4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-                  -  2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-                  +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-                  +  2. * (mfcaa * mfaca * mfaac)
-                  + 16. *  mfbba * mfbab * mfabb)
-                  - c1o3* (mfacc + mfcac + mfcca) * oMdrho  -c1o9*oMdrho*oMdrho
-                  - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho)
-                  +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-                  +       (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho;
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               //forcing
-               mfbaa=-mfbaa;
-               mfaba=-mfaba;
-               mfaab=-mfaab;
-               //////////////////////////////////////////////////////////////////////////////////////
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               //back
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Z - Dir
-               m0 =  mfaac * c1o2 +      mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * (     uz2 - uz) * c1o2;
-               m1 = -mfaac        - 2. * mfaab *  uz         +  mfaaa                * (1. - uz2)              - 1. * oMdrho * uz2;
-               m2 =  mfaac * c1o2 +      mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * (     uz2 + uz) * c1o2;
-               mfaaa = m0;
-               mfaab = m1;
-               mfaac = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfabc * c1o2 +      mfabb * (uz - c1o2) + mfaba * (     uz2 - uz) * c1o2;
-               m1 = -mfabc        - 2. * mfabb *  uz         + mfaba * (1. - uz2);
-               m2 =  mfabc * c1o2 +      mfabb * (uz + c1o2) + mfaba * (     uz2 + uz) * c1o2;
-               mfaba = m0;
-               mfabb = m1;
-               mfabc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfacc * c1o2 +      mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (     uz2 - uz) * c1o2;
-               m1 = -mfacc        - 2. * mfacb *  uz         +  mfaca                  * (1. - uz2)              - c1o3 * oMdrho * uz2;
-               m2 =  mfacc * c1o2 +      mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (     uz2 + uz) * c1o2;
-               mfaca = m0;
-               mfacb = m1;
-               mfacc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfbac * c1o2 +      mfbab * (uz - c1o2) + mfbaa * (     uz2 - uz) * c1o2;
-               m1 = -mfbac        - 2. * mfbab *  uz         + mfbaa * (1. - uz2);
-               m2 =  mfbac * c1o2 +      mfbab * (uz + c1o2) + mfbaa * (     uz2 + uz) * c1o2;
-               mfbaa = m0;
-               mfbab = m1;
-               mfbac = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbbc * c1o2 +      mfbbb * (uz - c1o2) + mfbba * (     uz2 - uz) * c1o2;
-               m1 = -mfbbc        - 2. * mfbbb *  uz         + mfbba * (1. - uz2);
-               m2 =  mfbbc * c1o2 +      mfbbb * (uz + c1o2) + mfbba * (     uz2 + uz) * c1o2;
-               mfbba = m0;
-               mfbbb = m1;
-               mfbbc = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbcc * c1o2 +      mfbcb * (uz - c1o2) + mfbca * (     uz2 - uz) * c1o2;
-               m1 = -mfbcc        - 2. * mfbcb *  uz         + mfbca * (1. - uz2);
-               m2 =  mfbcc * c1o2 +      mfbcb * (uz + c1o2) + mfbca * (     uz2 + uz) * c1o2;
-               mfbca = m0;
-               mfbcb = m1;
-               mfbcc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcac * c1o2 +      mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (     uz2 - uz) * c1o2;
-               m1 = -mfcac        - 2. * mfcab *  uz         +  mfcaa                  * (1. - uz2)              - c1o3 * oMdrho * uz2;
-               m2 =  mfcac * c1o2 +      mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (     uz2 + uz) * c1o2;
-               mfcaa = m0;
-               mfcab = m1;
-               mfcac = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfcbc * c1o2 +      mfcbb * (uz - c1o2) + mfcba * (     uz2 - uz) * c1o2;
-               m1 = -mfcbc        - 2. * mfcbb *  uz         + mfcba * (1. - uz2);
-               m2 =  mfcbc * c1o2 +      mfcbb * (uz + c1o2) + mfcba * (     uz2 + uz) * c1o2;
-               mfcba = m0;
-               mfcbb = m1;
-               mfcbc = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfccc * c1o2 +      mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (     uz2 - uz) * c1o2;
-               m1 = -mfccc        - 2. * mfccb *  uz         +  mfcca                  * (1. - uz2)              - c1o9 * oMdrho * uz2;
-               m2 =  mfccc * c1o2 +      mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (     uz2 + uz) * c1o2;
-               mfcca = m0;
-               mfccb = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               m0 =  mfaca * c1o2 +      mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfaca        - 2. * mfaba *  uy         +  mfaaa                  * (1. - uy2)              - c1o6 * oMdrho * uy2;
-               m2 =  mfaca * c1o2 +      mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfaaa = m0;
-               mfaba = m1;
-               mfaca = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfacb * c1o2 +      mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfacb        - 2. * mfabb *  uy         +  mfaab                  * (1. - uy2)              - c2o3 * oMdrho * uy2;
-               m2 =  mfacb * c1o2 +      mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfaab = m0;
-               mfabb = m1;
-               mfacb = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfacc * c1o2 +      mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfacc        - 2. * mfabc *  uy         +  mfaac                  * (1. - uy2)              - c1o6 * oMdrho * uy2;
-               m2 =  mfacc * c1o2 +      mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfaac = m0;
-               mfabc = m1;
-               mfacc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfbca * c1o2 +      mfbba * (uy - c1o2) + mfbaa * (     uy2 - uy) * c1o2;
-               m1 = -mfbca        - 2. * mfbba *  uy         + mfbaa * (1. - uy2);
-               m2 =  mfbca * c1o2 +      mfbba * (uy + c1o2) + mfbaa * (     uy2 + uy) * c1o2;
-               mfbaa = m0;
-               mfbba = m1;
-               mfbca = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbcb * c1o2 +      mfbbb * (uy - c1o2) + mfbab * (     uy2 - uy) * c1o2;
-               m1 = -mfbcb        - 2. * mfbbb *  uy         + mfbab * (1. - uy2);
-               m2 =  mfbcb * c1o2 +      mfbbb * (uy + c1o2) + mfbab * (     uy2 + uy) * c1o2;
-               mfbab = m0;
-               mfbbb = m1;
-               mfbcb = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbcc * c1o2 +      mfbbc * (uy - c1o2) + mfbac * (     uy2 - uy) * c1o2;
-               m1 = -mfbcc        - 2. * mfbbc *  uy         + mfbac * (1. - uy2);
-               m2 =  mfbcc * c1o2 +      mfbbc * (uy + c1o2) + mfbac * (     uy2 + uy) * c1o2;
-               mfbac = m0;
-               mfbbc = m1;
-               mfbcc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcca * c1o2 +      mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfcca        - 2. * mfcba *  uy         +  mfcaa                   * (1. - uy2)              - c1o18 * oMdrho * uy2;
-               m2 =  mfcca * c1o2 +      mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfcaa = m0;
-               mfcba = m1;
-               mfcca = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfccb * c1o2 +      mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfccb        - 2. * mfcbb *  uy         +  mfcab                  * (1. - uy2)              - c2o9 * oMdrho * uy2;
-               m2 =  mfccb * c1o2 +      mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfcab = m0;
-               mfcbb = m1;
-               mfccb = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfccc * c1o2 +      mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfccc        - 2. * mfcbc *  uy         +  mfcac                   * (1. - uy2)              - c1o18 * oMdrho * uy2;
-               m2 =  mfccc * c1o2 +      mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfcac = m0;
-               mfcbc = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // X - Dir
-               m0 =  mfcaa * c1o2 +      mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcaa        - 2. * mfbaa *  ux         +  mfaaa                   * (1. - ux2)              - c1o36 * oMdrho * ux2;
-               m2 =  mfcaa * c1o2 +      mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfaaa = m0;
-               mfbaa = m1;
-               mfcaa = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcba * c1o2 +      mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcba        - 2. * mfbba *  ux         +  mfaba                  * (1. - ux2)              - c1o9 * oMdrho * ux2;
-               m2 =  mfcba * c1o2 +      mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfaba = m0;
-               mfbba = m1;
-               mfcba = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcca * c1o2 +      mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcca        - 2. * mfbca *  ux         +  mfaca                   * (1. - ux2)              - c1o36 * oMdrho * ux2;
-               m2 =  mfcca * c1o2 +      mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfaca = m0;
-               mfbca = m1;
-               mfcca = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcab * c1o2 +      mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcab        - 2. * mfbab *  ux         +  mfaab                  * (1. - ux2)              - c1o9 * oMdrho * ux2;
-               m2 =  mfcab * c1o2 +      mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfaab = m0;
-               mfbab = m1;
-               mfcab = m2;
-               ///////////b////////////////////////////////////////////////////////////////////////
-               m0 =  mfcbb * c1o2 +      mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcbb        - 2. * mfbbb *  ux         +  mfabb                  * (1. - ux2)              - c4o9 * oMdrho * ux2;
-               m2 =  mfcbb * c1o2 +      mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfabb = m0;
-               mfbbb = m1;
-               mfcbb = m2;
-               ///////////b////////////////////////////////////////////////////////////////////////
-               m0 =  mfccb * c1o2 +      mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfccb        - 2. * mfbcb *  ux         +  mfacb                  * (1. - ux2)              - c1o9 * oMdrho * ux2;
-               m2 =  mfccb * c1o2 +      mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfacb = m0;
-               mfbcb = m1;
-               mfccb = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcac * c1o2 +      mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcac        - 2. * mfbac *  ux         +  mfaac                   * (1. - ux2)              - c1o36 * oMdrho * ux2;
-               m2 =  mfcac * c1o2 +      mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfaac = m0;
-               mfbac = m1;
-               mfcac = m2;
-               ///////////c////////////////////////////////////////////////////////////////////////
-               m0 =  mfcbc * c1o2 +      mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcbc        - 2. * mfbbc *  ux         +  mfabc                  * (1. - ux2)              - c1o9 * oMdrho * ux2;
-               m2 =  mfcbc * c1o2 +      mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfabc = m0;
-               mfbbc = m1;
-               mfcbc = m2;
-               ///////////c////////////////////////////////////////////////////////////////////////
-               m0 =  mfccc * c1o2 +      mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfccc        - 2. * mfbcc *  ux         +  mfacc                   * (1. - ux2)              - c1o36 * oMdrho * ux2;
-               m2 =  mfccc * c1o2 +      mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfacc = m0;
-               mfbcc = m1;
-               mfccc = m2;
-
-
-
-///////////////////////////////////////////////////////////////////////////
-
-/*
-			    m000 = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + 
-					   f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW];
-				
-				m100 = f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[E] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW] - f1[W];
-				m010 = f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[N] + f1[NE] + f1[NW] - f1[S] - f1[SE] - f1[SW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW];
-				m001 = f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW] - f1[B] - f1[BE] - f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] - f1[BW];
-
-				m110 =  f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[NE] - f1[NW] - f1[SE] + f1[SW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW];
-				m101 = -f1[BE] - f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW];
-				m011 = -f1[BN] - f1[BNE] - f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW];
-				m200 =  f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[E] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW] + f1[W];
-				m020 =  f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[N] + f1[NE] + f1[NW] + f1[S] + f1[SE] + f1[SW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW];
-				m002 =  f1[B] + f1[BE] + f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[BW] + f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW];
-				m120 =  f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW];
-				m102 =  f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW];
-				m210 =  f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[NE] + f1[NW] - f1[SE] - f1[SW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW];
-				m012 =  f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW];
-				m201 = -f1[BE] - f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW];
-				m021 = -f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW];
-				m111 = -f1[BNE] + f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW];
-				m220 =  f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW];
-				m202 =  f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW];
-				m022 =  f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW];
-				m211 = -f1[BNE] - f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW];
-				m121 = -f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW];
-				m112 =  f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW];
-				m221 = -f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW];
-				m212 =  f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW];
-				m122 =  f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW];
-				m222 =  f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW];
-
-				k200 = m200 - m000*ux2;
-				k020 = m020 - m000*uy2;
-				k002 = m002 - m000*uz2; 
-				k110 = m110 - m000*ux_uy;          
-				k101 = m101 - m000*ux_uz;
-				k011 = m011 - m000*uy_uz;
-
-				k021 = m021 - (m020*uz + 2.0*uy*k011);          
-				k012 = m012 - (uy*m002 + 2.0*uz*k011);
-				k102 = m102 - (ux*m002 + 2.0*uz*k101);
-				k201 = m201 - (m200*uz + 2.0*ux*k101 );
-				k210 = m210 - (m200*uy + 2.0*ux*k110 );
-				k120 = m120 - (ux*m020 + 2.0*uy*k110);
-				k111 = m111 - (ux_uy_uz + ux*k011 + uy*k101 + uz*k110);
-
-				k121 = m121 - (uz*m120+ 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111); 
-				k112 = m112 - (uy*m102+ 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111);
-				k211 = m211 - (uz*m210+ 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111); 
-
-
-				k220 = m220 - ( ux2*m020+ 4.0*ux_uy*k110 + 2.0*ux*k120 + uy2*k200 + 2.0*uy*k210); 
-				k022 = m022 - ( uy2*m002+ 4.0*uy_uz*k011 + 2.0*uy*k012 + uz2*k020 + 2.0*uz*k021);
-				k202 = m202 - ( ux2*m002+ 4.0*ux_uz*k101 + 2.0*ux*k102 + uz2*k200 + 2.0*uz*k201); 
-
-				k221 = m221 - (uz*m220+
-					2.0*ux2*uy*k011  + ux2*k021 + 2.0*ux*uy2*k101  +4.0*ux_uy*k111 + 
-					2.0*ux*k121 + uy2*k201 + 2.0*uy*k211);
-				k122 = m122 - (ux*m022 
-					+ 2.0*uy2*uz*k101 + uy2*k102 + 2.0*uy*uz2*k110 + 4.0*uy_uz*k111 +
-					2.0*uy*k112 + uz2*k120 + 2.0*uz*k121);
-				k212 = m212 - (uy*m202
-					+ 2.0*ux2*uz*k011 +ux2*k012  + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 +
-					2.0*ux*k112 + uz2*k210 + 2.0*uz*k211);
-
-				k222 = m222 - (ux2*m022 
-					+ 4.0* ux*uy2*uz*k101   + 
-					2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ 
-					8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + 
-					2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + 
-					uy2*uz2*k200 + 2.0* uy2*uz*k201  + 
-					uy2*k202     + 2.0* uy*uz2*k210  + 4.0*uy_uz*k211 + 
-					2.0* uy*k212 + uz2*k220 +2.0* uz*k221);
-
-				//////////////// Central moments to Cumulants \\\\\\\\\\\\\\\\\\\\\\\\\
-
-				c200 = k200;
-				c020 = k020;
-				c002 = k002;
-				c110 = k110;
-				c101 = k101;
-				c011 = k011;
-
-				c021 = k021;
-				c012 = k012;
-				c102 = k102;
-				c201 = k201;
-				c210 = k210;
-				c120 = k120;
-				c111 = k111;
-
-				c121 = k121 - (k020*k101 + 2*k011*k110)/m000;
-				c211 = k211 - (k200*k011 + 2*k110*k101)/m000;
-				c112 = k112 - (k002*k110 + 2*k011*k101)/m000;
-
-				c220 = k220 - (k200*k020 + 2*k110*k110)/m000;
-				c202 = k202 - (k200*k002 + 2*k101*k101)/m000;
-				c022 = k022 - (k020*k002 + 2*k011*k011)/m000;
-
-				c122 = k122 - (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000;
-				c212 = k212 - (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000;
-				c221 = k221 - (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000;
-
-				c222 = k222 - (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112)
-					+ 2*(k120*k102 + k210*k012 + k201*k021))/m000
-					+ (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000);
-
-				c200_pl_c020_pl_c002 = c200 + c020 + c002;
-				c200_mi_c020 = c200 - c020;
-				c200_mi_c002 = c200 - c002;
-
-				c210_pl_c012  =  c210+c012;
-				c210_mi_c012  =  c210-c012;
-				c201_pl_c021  =  c201+c021;
-				c201_mi_c021  =  c201-c021;
-				c120_pl_c102  =  c120+c102;
-				c120_mi_c102  =  c120-c102;
-
-				c220_pl_c202_pl_c022  = c220 + c202 + c022;
-				c220_mi2_c202_pl_c022 = c220 - 2.0*c202 + c022;
-				c220_pl_c202_mi2_c022 = c220 + c202 - 2.0*c022;
-
-				/////////////////////////// Relaxation \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
-
-				c110 = c110*(1-w1);
-				c101 = c101*(1-w1);
-				c011 = c011*(1-w1);
-
-				c200_mi_c020 = c200_mi_c020*(1-w1); 
-				c200_mi_c002 = c200_mi_c002*(1-w1); 
-
-				c200_pl_c020_pl_c002 = c200_pl_c020_pl_c002*(1-w2) + m000*w2;
-
-				c120_pl_c102 = c120_pl_c102*(1-w3);
-				c210_pl_c012 = c210_pl_c012*(1-w3);
-				c201_pl_c021 = c201_pl_c021*(1-w3); 
-
-
-				c120_mi_c102 = c120_mi_c102*(1-w4); 
-				c210_mi_c012 = c210_mi_c012*(1-w4);
-				c201_mi_c021 = c201_mi_c021*(1-w4);
-
-				c111 = c111*(1-w5);
-
-				c220_mi2_c202_pl_c022 = c220_mi2_c202_pl_c022*(1-w6);
-				c220_pl_c202_mi2_c022 = c220_pl_c202_mi2_c022*(1-w6);
-
-				c220_pl_c202_pl_c022 =  c220_pl_c202_pl_c022*(1-w7);
-
-				c211 = c211*(1-w8);
-				c121 = c121*(1-w8);
-				c112 = c112*(1-w8);
-
-
-				c221 = c221*(1-w9);
-				c212 = c212*(1-w9);
-				c122 = c122*(1-w9);
-
-				c222 = c222*(1-w10);
-
-
-				c200 = c1o3 *c200_mi_c020 + c1o3 *c200_mi_c002 +  c1o3* c200_pl_c020_pl_c002; 
-				c020 = -2*c1o3* c200_mi_c020+ c1o3* c200_mi_c002 +  c1o3* c200_pl_c020_pl_c002; 
-				c002 = c1o3   * c200_mi_c020 -2*c1o3 *c200_mi_c002 +  c1o3* c200_pl_c020_pl_c002; 
-
-				c210 = (c210_mi_c012 + c210_pl_c012)*0.5; 
-				c012 = 0.5*(-c210_mi_c012 + c210_pl_c012); 
-				c120 =(c120_mi_c102 + c120_pl_c102)*0.5; 
-				c102 = 0.5*(-c120_mi_c102 + c120_pl_c102); 
-				c201 = (c201_mi_c021 + c201_pl_c021)*0.5; 
-				c021 = 0.5*(-c201_mi_c021 + c201_pl_c021);
-
-				c220 =  c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_mi2_c022 +  c1o3*c220_pl_c202_pl_c022; 
-				c202 = -c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_pl_c022; 
-				c022 = -c1o3* c220_pl_c202_mi2_c022 + c1o3* c220_pl_c202_pl_c022;
-
-
-				////////////////////// Cumulants to Central moments   \\\\\\\\\\\\\\\\\\\\\\\\\
-
-				k200 = c200;
-				k020 = c020;
-				k002 = c002;
-				k110 = c110;
-				k101 = c101;
-				k011 = c011;
-
-				k021 = c021;
-				k012 = c012;
-				k102 = c102;
-				k201 = c201;
-				k210 = c210;
-				k120 = c120;
-				k111 = c111;
-
-				k121 = c121 + (k020*k101 + 2*k011*k110)/m000;
-				k211 = c211 + (k200*k011 + 2*k110*k101)/m000;
-				k112 = c112 + (k002*k110 + 2*k011*k101)/m000;
-
-				k220 = c220 + (k200*k020 + 2*k110*k110)/m000;
-				k202 = c202 + (k200*k002 + 2*k101*k101)/m000;
-				k022 = c022 + (k020*k002 + 2*k011*k011)/m000;
-
-				k122 = c122 + (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000;
-				k212 = c212 + (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000;
-				k221 = c221 + (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000;
-
-				k222 = c222 + (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112)
-					+ 2*(k120*k102 + k210*k012 + k201*k021))/m000
-					- (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000);
-
-				///////////////////////////////////////////////////////////////////////////////
-
-
-				m200 = k200 + m000*ux2;
-				m020 = k020 + m000*uy2;
-				m002 = k002 + m000*uz2; 
-				m110 = k110 + m000*ux_uy;          
-				m101 = k101 + m000*ux_uz;
-				m011 = k011 + m000*uy_uz;
-
-				m021 = m020*uz + 2.0*uy*k011  + k021;          
-				m012 = uy*m002 + 2.0*uz*k011 + k012;
-				m102 = ux*m002 + 2.0*uz*k101 + k102;
-				m112 = uy*m102 + 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111+k112;
-
-				m201 = m200*uz + 2.0*ux*k101  + k201;
-				m210 = m200*uy + 2.0*ux*k110  + k210;
-				m211 = uz*m210 + 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111+k211; 
-
-				m120 = ux*m020 + 2.0*uy*k110 + k120;
-				m121 = uz*m120 + 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111+ k121; 
-
-				m111 = ux_uy_uz + ux*k011 + uy*k101 + uz*k110+k111;
-
-				m220 = ux2*m020 + 4.0*ux_uy*k110 + 2.0*ux*k120  + uy2*k200 + 2.0*uy*k210 +  k220; 
-
-				m221 = uz*m220 + 2.0*ux2*uy*k011  + ux2*k021 + 2.0*ux*uy2*k101  +4.0*ux_uy*k111+ 
-					2.0*ux*k121  +    uy2*k201  + 2.0*uy*k211  + k221;
-
-				m022 = uy2*m002 + 4.0*uy_uz*k011  +2.0*uy*k012+ uz2*k020+ 2.0*uz*k021 +  k022;
-
-				m122 = ux*m022 + 2.0*uy2*uz*k101 + uy2*k102 + 
-					2.0*uy*uz2*k110 + 4.0*uy_uz*k111 + 2.0*uy*k112 +uz2*k120 + 2.0*uz*k121 + k122;
-
-				m202 = ux2*m002 + 4.0*ux_uz*k101+ 2.0*ux*k102 + uz2*k200+ 2.0*uz*k201 + k202; 
-
-				m212 = uy*m202 + 2.0*ux2*uz*k011 +ux2*k012  + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 
-					+ 2.0*ux*k112  + uz2*k210 +  2.0*uz*k211 + k212;
-
-				m222 = ux2*m022 
-					+ 4.0* ux*uy2*uz*k101   + 
-					2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ 
-					8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + 
-					2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + 
-					uy2*uz2*k200 + 2.0* uy2*uz*k201  + 
-					uy2*k202     + 2.0* uy*uz2*k210  + 4.0*uy_uz*k211 + 
-					2.0* uy*k212 + uz2*k220 +2.0* uz*k221 + k222;
-
-				f1[ZERO] = (-m200 + m220 - m222 + m202 - m020 + m022 - m002 + m000);
-				f1[E] = 0.5* (m200 -  m220 + m222 - m202 - m120 + m122 - m102 +m100);
-				f1[W] = 0.5* (m200 - m220 + m222 - m202 + m120 - m122 + m102 -m100);
-				f1[N] = 0.5* (-m210 - m220 + m222 + m212 + m020 - m022 - m012 +m010);
-				f1[S] = 0.5* (m210 -  m220 + m222 - m212 + m020 - m022 + m012 -m010);
-				f1[T] = 0.5* (m221 +  m222 - m201 - m202 - m021 - m022 + m002 +m001);
-				f1[B] = 0.5* (-m221 + m222 + m201  - m202 + m021 - m022 + m002-m001);
-
-				f1[NE] = 0.25*( m210  + m220- m222 - m212 + m110+ m120- m122 -m112); 
-				f1[SW] = 0.25*(-m210 + m220- m222 + m212 + m110- m120+ m122 -m112); 
-				f1[SE] = 0.25*(-m210 + m220- m222 + m212 - m110+ m120- m122 +m112); 
-				f1[NW] = 0.25*( m210  + m220- m222 - m212 - m110- m120+ m122 + m112); 
-				f1[TE] = 0.25*(-m221 - m222 + m201 + m202 - m121 - m122 + m101 + m102); 
-				f1[BW] = 0.25*( m221  -m222 - m201 + m202 - m121 + m122 + m101 - m102);
-				f1[BE] = 0.25*(m221 - m222 - m201 + m202 + m121 - m122 - m101 +m102);
-				f1[TW] = 0.25*(-m221 - m222 + m201 + m202 + m121 + m122 - m101 -m102); 
-				f1[TN] = 0.25*(-m221 - m222 - m211 - m212 + m021 + m022 + m011+m012);
-				f1[BS] = 0.25*( m221 - m222 - m211 + m212 - m021 + m022 + m011 - m012);
-				f1[BN] = 0.25*( m221 - m222 + m211 - m212 - m021 + m022 - m011 + m012);
-				f1[TS] = 0.25*(-m221 - m222 + m211 + m212 + m021 + m022 - m011 -m012); 
-
-				f1[TNE]=0.125*( m221 + m222 + m211 + m212 + m121 + m122 + m111 + m112); 
-				f1[BNE]=0.125*(-m221 + m222 -m211 + m212 -m121 + m122 -m111 + m112);
-				f1[TSE]=0.125*( m221 + m222 - m211 - m212 + m121 + m122 - m111 - m112); 
-				f1[BSE]=0.125*(-m221 + m222 +m211 - m212 -m121 + m122 +m111 - m112); 
-				f1[TNW]=0.125*( m221 + m222 + m211 + m212 - m121 - m122 - m111 - m112); 
-				f1[BNW]=0.125*(-m221 + m222 -m211 + m212 +m121 - m122 +m111 - m112); 
-				f1[TSW]=0.125*( m221 + m222 - m211 - m212 - m121 - m122 + m111 + m112); 
-				f1[BSW]=0.125*(-m221 + m222+m211 - m212+m121 - m122-m111 + m112);
-			   
-*/
-			   //////////////////////////////////////////////////////////////////////////
-               //proof correctness
-               //////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-			   LBMReal rho_post = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca)
-			   +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc)
-			   +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb;
-				
-				/*LBMReal rho_post = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + 
-					f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; */
-               //LBMReal dif = fabs(rho - rho_post);
-               LBMReal dif = rho - rho_post;
-#ifdef SINGLEPRECISION
-               if(dif > 10.0E-7 || dif < -10.0E-7)
-#else
-               if(dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-               {
-				   UB_THROW(UbException(UB_EXARGS,"rho="+UbSystem::toString(rho)+", rho_post="+UbSystem::toString(rho_post)
-                     +" dif="+UbSystem::toString(dif)
-                     +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)));
-                  //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-                  //exit(EXIT_FAILURE);
-               }
-#endif
-               /*
-			   g[E  ] = (f1[E  ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[E  ] + 0.5*forcingTerm[E  ]);
-			   g[N  ] = (f1[N  ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[N  ] + 0.5*forcingTerm[N  ]);
-			   g[T  ] = (f1[T  ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[T  ] + 0.5*forcingTerm[T  ]);
-			   g[NE ] = (f1[NE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[NE ] + 0.5*forcingTerm[NE ]);
-			   g[NW ] = (f1[NW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[NW ] + 0.5*forcingTerm[NW ]);
-			   g[TE ] = (f1[TE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TE ] + 0.5*forcingTerm[TE ]);
-			   g[TW ] = (f1[TW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TW ] + 0.5*forcingTerm[TW ]);
-			   g[TN ] = (f1[TN ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TN ] + 0.5*forcingTerm[TN ]);
-			   g[TS ] = (f1[TS ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TS ] + 0.5*forcingTerm[TS ]);
-			   g[TNE] = (f1[TNE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TNE] + 0.5*forcingTerm[TNE]);
-			   g[TNW] = (f1[TNW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TNW] + 0.5*forcingTerm[TNW]);
-			   g[TSE] = (f1[TSE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TSE] + 0.5*forcingTerm[TSE]);
-			   g[TSW] = (f1[TSW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TSW] + 0.5*forcingTerm[TSW]);
-			   g[W  ] = (f1[W  ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[W  ] + 0.5*forcingTerm[W  ]);
-			   g[S  ] = (f1[S  ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[S  ] + 0.5*forcingTerm[S  ]);
-			   g[B  ] = (f1[B  ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[B  ] + 0.5*forcingTerm[B  ]);
-			   g[SW ] = (f1[SW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[SW ] + 0.5*forcingTerm[SW ]);
-			   g[SE ] = (f1[SE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[SE ] + 0.5*forcingTerm[SE ]);
-			   g[BW ] = (f1[BW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BW ] + 0.5*forcingTerm[BW ]);
-			   g[BE ] = (f1[BE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BE ] + 0.5*forcingTerm[BE ]);
-			   g[BS ] = (f1[BS ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BS ] + 0.5*forcingTerm[BS ]);
-			   g[BN ] = (f1[BN ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BN ] + 0.5*forcingTerm[BN ]);
-			   g[BSW] = (f1[BSW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BSW] + 0.5*forcingTerm[BSW]);
-			   g[BSE] = (f1[BSE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BSE] + 0.5*forcingTerm[BSE]);
-			   g[BNW] = (f1[BNW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BNW] + 0.5*forcingTerm[BNW]);
-			   g[BNE] = (f1[BNE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BNE] + 0.5*forcingTerm[BNE]);
-
-			   g[ZERO] = (f1[ZERO]*c1o3 + (p1 - rho*c1o3)*WEIGTH[ZERO] + 0.5*forcingTerm[ZERO]);
-			   */
-			   
-			   
-			   mfcbb = (mfcbb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[E  ] + 0.5*forcingTerm[E  ]);
-			   mfbcb = (mfbcb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[N  ] + 0.5*forcingTerm[N  ]);
-			   mfbbc = (mfbbc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[T  ] + 0.5*forcingTerm[T  ]);
-			   mfccb = (mfccb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[NE ] + 0.5*forcingTerm[NE ]);
-			   mfacb = (mfacb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[NW ] + 0.5*forcingTerm[NW ]);
-			   mfcbc = (mfcbc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TE ] + 0.5*forcingTerm[TE ]);
-			   mfabc = (mfabc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TW ] + 0.5*forcingTerm[TW ]);
-			   mfbcc = (mfbcc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TN ] + 0.5*forcingTerm[TN ]);
-			   mfbac = (mfbac*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TS ] + 0.5*forcingTerm[TS ]);
-			   mfccc = (mfccc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TNE] + 0.5*forcingTerm[TNE]);
-			   mfacc = (mfacc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TNW] + 0.5*forcingTerm[TNW]);
-			   mfcac = (mfcac*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TSE] + 0.5*forcingTerm[TSE]);
-			   mfaac = (mfaac*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TSW] + 0.5*forcingTerm[TSW]);
-			   mfabb = (mfabb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[W  ] + 0.5*forcingTerm[W  ]);
-			   mfbab = (mfbab*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[S  ] + 0.5*forcingTerm[S  ]);
-			   mfbba = (mfbba*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[B  ] + 0.5*forcingTerm[B  ]);
-			   mfaab = (mfaab*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[SW ] + 0.5*forcingTerm[SW ]);
-			   mfcab = (mfcab*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[SE ] + 0.5*forcingTerm[SE ]);
-			   mfaba = (mfaba*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BW ] + 0.5*forcingTerm[BW ]);
-			   mfcba = (mfcba*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BE ] + 0.5*forcingTerm[BE ]);
-			   mfbaa = (mfbaa*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BS ] + 0.5*forcingTerm[BS ]);
-			   mfbca = (mfbca*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BN ] + 0.5*forcingTerm[BN ]);
-			   mfaaa = (mfaaa*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BSW] + 0.5*forcingTerm[BSW]);
-			   mfcaa = (mfcaa*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BSE] + 0.5*forcingTerm[BSE]);
-			   mfaca = (mfaca*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BNW] + 0.5*forcingTerm[BNW]);
-			   mfcca = (mfcca*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BNE] + 0.5*forcingTerm[BNE]);
-
-			   mfbbb = (mfbbb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[ZERO] + 0.5*forcingTerm[ZERO]);
-			   
-
-
-
-			   LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-9;
-			   for (int dir = STARTF; dir < (ENDF+1); dir++)
-			   {
-				   LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz;
-				   LBMReal velSq1 = velProd*velProd;
-				   LBMReal hEq, gEq;
-				   
-				   if (dir != ZERO)
-				   {
-					   LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0;
-					   LBMReal hSource = (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])*(dirGrad_phi)/denom;
-					   hEq = phi[ZERO]*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)) + hSource*WEIGTH[dir];
-					   //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir];
-					   //h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5));  /// This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). 
-					   h[dir] = h[dir] - (h[dir] - hEq)/(tauH);
-					   //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir];
-
-				   } 
-				   else
-				   {
-					   hEq = phi[ZERO]*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2));
-					   //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir];
-					   //h[dir] = hEq;
-					   h[dir] = h[dir] - (h[dir] - hEq)/(tauH);
-					   //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir];
-				   }
-			   }
-			   
-			   //////////////////////////////////////////////////////////////////////////
-               //write distribution
-               //////////////////////////////////////////////////////////////////////////
-               
-			   (*this->localDistributionsF)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-               (*this->localDistributionsF)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-               (*this->localDistributionsF)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-               (*this->localDistributionsF)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-               (*this->localDistributionsF)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-               (*this->localDistributionsF)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-               (*this->localDistributionsF)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-               (*this->localDistributionsF)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-               (*this->localDistributionsF)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-               (*this->localDistributionsF)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-               (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-               (*this->localDistributionsF)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-               (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-               (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-               (*this->zeroDistributionsF)(x1,x2,x3) = mfbbb;
-			   
-
-			   /*
-			   (*this->localDistributionsF)(D3Q27System::ET_E,   x1,  x2,  x3) = g[D3Q27System::INV_E];
-			   (*this->localDistributionsF)(D3Q27System::ET_N,   x1,  x2,  x3) = g[D3Q27System::INV_N];
-			   (*this->localDistributionsF)(D3Q27System::ET_T,   x1,  x2,  x3) = g[D3Q27System::INV_T];
-			   (*this->localDistributionsF)(D3Q27System::ET_NE,  x1,  x2,  x3) = g[D3Q27System::INV_NE];
-			   (*this->localDistributionsF)(D3Q27System::ET_NW,  x1p, x2,  x3) = g[D3Q27System::INV_NW];
-			   (*this->localDistributionsF)(D3Q27System::ET_TE,  x1,  x2,  x3) = g[D3Q27System::INV_TE];
-			   (*this->localDistributionsF)(D3Q27System::ET_TW,  x1p, x2,  x3) = g[D3Q27System::INV_TW];
-			   (*this->localDistributionsF)(D3Q27System::ET_TN,  x1,  x2,  x3) = g[D3Q27System::INV_TN];
-			   (*this->localDistributionsF)(D3Q27System::ET_TS,  x1,  x2p, x3) = g[D3Q27System::INV_TS];
-			   (*this->localDistributionsF)(D3Q27System::ET_TNE, x1,  x2,  x3) = g[D3Q27System::INV_TNE];
-			   (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2,  x3) = g[D3Q27System::INV_TNW];
-			   (*this->localDistributionsF)(D3Q27System::ET_TSE, x1,  x2p, x3) = g[D3Q27System::INV_TSE];
-			   (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = g[D3Q27System::INV_TSW];
-
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_W,   x1p, x2,  x3 ) = g[D3Q27System::INV_W ];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_S,   x1,  x2p, x3 ) = g[D3Q27System::INV_S ];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_B,   x1,  x2,  x3p) = g[D3Q27System::INV_B ];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = g[D3Q27System::INV_SW];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = g[D3Q27System::INV_SE];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,  x1p, x2,  x3p) = g[D3Q27System::INV_BW];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,  x1,  x2,  x3p) = g[D3Q27System::INV_BE];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,  x1,  x2p, x3p) = g[D3Q27System::INV_BS];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,  x1,  x2,  x3p) = g[D3Q27System::INV_BN];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = g[D3Q27System::INV_BSW];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1,  x2p, x3p) = g[D3Q27System::INV_BSE];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2,  x3p) = g[D3Q27System::INV_BNW];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1,  x2,  x3p) = g[D3Q27System::INV_BNE];
-
-			   (*this->zeroDistributionsF)(x1,x2,x3) = g[D3Q27System::ZERO];
-			   */
-
-
-			   (*this->localDistributionsH)(D3Q27System::ET_E,   x1,  x2,  x3) = h[D3Q27System::INV_E];
-			   (*this->localDistributionsH)(D3Q27System::ET_N,   x1,  x2,  x3) = h[D3Q27System::INV_N];
-			   (*this->localDistributionsH)(D3Q27System::ET_T,   x1,  x2,  x3) = h[D3Q27System::INV_T];
-			   (*this->localDistributionsH)(D3Q27System::ET_NE,  x1,  x2,  x3) = h[D3Q27System::INV_NE];
-			   (*this->localDistributionsH)(D3Q27System::ET_NW,  x1p, x2,  x3) = h[D3Q27System::INV_NW];
-			   (*this->localDistributionsH)(D3Q27System::ET_TE,  x1,  x2,  x3) = h[D3Q27System::INV_TE];
-			   (*this->localDistributionsH)(D3Q27System::ET_TW,  x1p, x2,  x3) = h[D3Q27System::INV_TW];
-			   (*this->localDistributionsH)(D3Q27System::ET_TN,  x1,  x2,  x3) = h[D3Q27System::INV_TN];
-			   (*this->localDistributionsH)(D3Q27System::ET_TS,  x1,  x2p, x3) = h[D3Q27System::INV_TS];
-			   (*this->localDistributionsH)(D3Q27System::ET_TNE, x1,  x2,  x3) = h[D3Q27System::INV_TNE];
-			   (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2,  x3) = h[D3Q27System::INV_TNW];
-			   (*this->localDistributionsH)(D3Q27System::ET_TSE, x1,  x2p, x3) = h[D3Q27System::INV_TSE];
-			   (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW];
-			   
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_W,   x1p, x2,  x3 ) = h[D3Q27System::INV_W ];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_S,   x1,  x2p, x3 ) = h[D3Q27System::INV_S ];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_B,   x1,  x2,  x3p) = h[D3Q27System::INV_B ];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = h[D3Q27System::INV_SW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = h[D3Q27System::INV_SE];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,  x1p, x2,  x3p) = h[D3Q27System::INV_BW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,  x1,  x2,  x3p) = h[D3Q27System::INV_BE];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,  x1,  x2p, x3p) = h[D3Q27System::INV_BS];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,  x1,  x2,  x3p) = h[D3Q27System::INV_BN];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1,  x2p, x3p) = h[D3Q27System::INV_BSE];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2,  x3p) = h[D3Q27System::INV_BNW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1,  x2,  x3p) = h[D3Q27System::INV_BNE];
-			   
-			   (*this->zeroDistributionsH)(x1,x2,x3) = h[D3Q27System::ZERO];
-               //////////////////////////////////////////////////////////////////////////
-
-            }
-         }
-      }
-   }
-   
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-double MultiphaseCumulantLBMKernel::getCallculationTime()
-{
-   //return timer.getDuration();
-   return timer.getTotalTime();
-}
-//////////////////////////////////////////////////////////////////////////
-
-LBMReal MultiphaseCumulantLBMKernel::gradX1_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX1[k]*phi[k];
-	}
-	return 3.0*sum;
-}
-
-LBMReal MultiphaseCumulantLBMKernel::gradX2_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX2[k]*phi[k];
-	}
-	return 3.0*sum;
-}
-
-LBMReal MultiphaseCumulantLBMKernel::gradX3_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX3[k]*phi[k];
-	}
-	return 3.0*sum;
-}
-
-LBMReal MultiphaseCumulantLBMKernel::nabla2_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*(phi[k] - phi[ZERO]);
-	}
-	return 6.0*sum;
-}
-///// Commnets neeeded ////////
-
-void MultiphaseCumulantLBMKernel::computePhasefield()
-{
-	using namespace D3Q27System;
-	DistributionArray3DPtr distributionsH = dataSet->getHdistributions();
-
-	//const int bcArrayMaxX1 = (int)distributionsH->getNX1();
-	//const int bcArrayMaxX2 = (int)distributionsH->getNX2();
-	//const int bcArrayMaxX3 = (int)distributionsH->getNX3();
-
-	int minX1 = ghostLayerWidth;
-	int minX2 = ghostLayerWidth;
-	int minX3 = ghostLayerWidth;
-	int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-	int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-	int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-	//------------- Computing the phase-field ------------------
-	for(int x3 = minX3; x3 < maxX3; x3++)
-	{
-		for(int x2 = minX2; x2 < maxX2; x2++)
-		{
-			for(int x1 = minX1; x1 < maxX1; x1++)
-			{
-				//if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-				{
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					h[E  ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3);
-					h[N  ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); 
-					h[T  ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3);
-					h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3);
-					h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3);
-					h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3);
-					h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3);
-					h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3);
-					h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3);
-					h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3);
-					h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3);
-					h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3);
-					h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-					h[W  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3  );
-					h[S  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3  );
-					h[B  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p  );
-					h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 );
-					h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 );
-					h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p );
-					h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p );
-					h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p );
-					h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p );
-					h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-					h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p);
-					h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p);
-					h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-					h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3);
-
-					/*(*this->phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + 
-						h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];*/
-
-				}
-			}
-		}
-	}
-	//----------------------------------------------------------
-	
-/*
-	/////// Filling ghost nodes for FD computations //////////
-	for(int x1 = minX1; x1 < maxX1; x1++)
-	{
-		for(int x2 = minX2; x2 < maxX2; x2++)
-		{
-			int x3 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1);
-			x3 = maxX3;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3);
-		}
-	}
-	for(int x2 = minX2; x2 < maxX2; x2++)
-	{
-		for(int x3 = minX3; x3 < maxX3; x3++)
-		{
-			int x1 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3);
-			x1 = maxX1;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3);
-		}
-	}
-	for(int x1 = minX1; x1 < maxX1; x1++)
-	{
-		for(int x3 = minX3; x3 < maxX3; x3++)
-		{
-			int x2 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3);
-			x2 = maxX2;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3);
-		}
-	}
-	(*phaseField)(0, 0,     0    ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1);
-	(*phaseField)(0, 0,     maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3  );
-	(*phaseField)(0, maxX2, 0    ) = (*phaseField)(maxX1-1, minX2, maxX3-1  );
-	(*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3    );
-
-	(*phaseField)(maxX1, 0,     0    ) = (*phaseField)(minX1, maxX2-1, maxX3-1);
-	(*phaseField)(maxX1, 0,     maxX3) = (*phaseField)(minX1, maxX2-1, minX3  );
-	(*phaseField)(maxX1, maxX2, 0    ) = (*phaseField)(minX1, minX2, maxX3-1  );
-	(*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3    );
-
-	///////////////////////////////////////////////////////// 
-*/
-}
-
-void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3)
-{
-	using namespace D3Q27System;
-	
-	BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray();
-
-	phi[ZERO] = (*ph)(x1,x2,x3);
-	
-	LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*PI/180);
-	LBMReal a1 = 1 + a;
-	
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]))
-		{
-			phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		} 
-		else
-		{
-			/*
-			if (phi[ZERO] < 1e-2)
-			{
-				phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]);
-			}
-			else
-			{
-				LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]);
-				phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f;
-			}
-			*/
-			phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]);
-			
-			
-		}
-	}
-
-	/*
-	phi[E  ] = (*ph)(x1 + DX1[E  ], x2 + DX2[E  ], x3 + DX3[E  ]);
-	phi[N  ] = (*ph)(x1 + DX1[N  ], x2 + DX2[N  ], x3 + DX3[N  ]);
-	phi[T  ] = (*ph)(x1 + DX1[T  ], x2 + DX2[T  ], x3 + DX3[T  ]);
-	phi[W  ] = (*ph)(x1 + DX1[W  ], x2 + DX2[W  ], x3 + DX3[W  ]);
-	phi[S  ] = (*ph)(x1 + DX1[S  ], x2 + DX2[S  ], x3 + DX3[S  ]);
-	phi[B  ] = (*ph)(x1 + DX1[B  ], x2 + DX2[B  ], x3 + DX3[B  ]);
-	phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]);
-	phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]);
-	phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]);
-	phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]);
-	phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]);
-	phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]);
-	phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]);
-	phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]);
-	phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]);
-	phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]);
-	phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]);
-	phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]);
-	phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]);
-	phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]);
-	phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]);
-	phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]);
-	phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]);
-	phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]);
-	phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]);
-	phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]);
-	*/
-}
-
-void MultiphaseCumulantLBMKernel::swapDistributions()
-{
-   dataSet->getFdistributions()->swap();
-   dataSet->getHdistributions()->swap();
-   //computePhasefield();
-}
\ No newline at end of file
diff --git a/apps/cpu/Multiphase/backup/Final.ast b/apps/cpu/Multiphase/backup/Final.ast
deleted file mode 100644
index d1909c7ae985f4014060a4e9b19e1f0bc093fe92..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Final.ast
+++ /dev/null
@@ -1,5042 +0,0 @@
-solid Mesh
-  facet normal -0.945841 -0.324629 0.000002
-    outer loop
-      vertex -190.759033 12.614820 -497.317169
-      vertex -190.732468 12.537620 -470.000000
-      vertex -190.758972 12.614843 -470.000000
-    endloop
-  endfacet
-  facet normal -0.913815 -0.406131 -0.000259
-    outer loop
-      vertex -190.716019 12.517895 -497.096222
-      vertex -190.692001 12.446568 -470.000000
-      vertex -190.732468 12.537620 -470.000000
-    endloop
-  endfacet
-  facet normal -0.913813 -0.406134 -0.000259
-    outer loop
-      vertex -190.732468 12.537620 -470.000000
-      vertex -190.759033 12.614820 -497.317169
-      vertex -190.716019 12.517895 -497.096222
-    endloop
-  endfacet
-  facet normal -0.913987 -0.405744 0.000002
-    outer loop
-      vertex -190.759033 12.614820 -497.317169
-      vertex -190.758972 12.614843 -470.000000
-      vertex -190.829590 12.773918 -470.000000
-    endloop
-  endfacet
-  facet normal -0.914011 -0.405689 0.000002
-    outer loop
-      vertex -190.829590 12.773918 -470.000000
-      vertex -190.833801 12.783269 -497.701202
-      vertex -190.759033 12.614820 -497.317169
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915769 -0.401705
-    outer loop
-      vertex -190.716019 12.517895 -497.096222
-      vertex -90.000000 12.563623 -497.200470
-      vertex -90.000000 12.517895 -497.096222
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915761 -0.401724
-    outer loop
-      vertex -190.716019 12.517895 -497.096222
-      vertex -190.759033 12.614820 -497.317169
-      vertex -90.000000 12.563623 -497.200470
-    endloop
-  endfacet
-  facet normal -0.928601 -0.371080 -0.000154
-    outer loop
-      vertex -190.571716 12.156562 -496.543152
-      vertex -190.555878 12.105928 -470.000000
-      vertex -190.692001 12.446568 -470.000000
-    endloop
-  endfacet
-  facet normal -0.928600 -0.371082 -0.000154
-    outer loop
-      vertex -190.692001 12.446568 -470.000000
-      vertex -190.716019 12.517895 -497.096222
-      vertex -190.571716 12.156562 -496.543152
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915773 -0.401697
-    outer loop
-      vertex -190.759033 12.614820 -497.317169
-      vertex -90.000000 12.783269 -497.701202
-      vertex -90.000000 12.703794 -497.520020
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915776 -0.401689
-    outer loop
-      vertex -190.759033 12.614820 -497.317169
-      vertex -190.833801 12.783269 -497.701202
-      vertex -90.000000 12.783269 -497.701202
-    endloop
-  endfacet
-  facet normal -0.904908 -0.425607 -0.000006
-    outer loop
-      vertex -190.833801 12.783269 -497.701202
-      vertex -190.829590 12.773918 -470.000000
-      vertex -190.871490 12.863006 -470.000000
-    endloop
-  endfacet
-  facet normal -0.904902 -0.425620 -0.000006
-    outer loop
-      vertex -190.871490 12.863006 -470.000000
-      vertex -190.878250 12.877775 -498.018738
-      vertex -190.833801 12.783269 -497.701202
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837180 -0.546928
-    outer loop
-      vertex -190.716019 12.517895 -497.096222
-      vertex -90.000000 12.517895 -497.096222
-      vertex -90.000000 12.327077 -496.804138
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915770 -0.401704
-    outer loop
-      vertex -190.759033 12.614820 -497.317169
-      vertex -90.000000 12.703794 -497.520020
-      vertex -90.000000 12.563623 -497.200470
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837160 -0.546958
-    outer loop
-      vertex -190.571716 12.156562 -496.543152
-      vertex -90.000000 12.327077 -496.804138
-      vertex -90.000000 12.156562 -496.543152
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837171 -0.546942
-    outer loop
-      vertex -190.571716 12.156562 -496.543152
-      vertex -190.716019 12.517895 -497.096222
-      vertex -90.000000 12.327077 -496.804138
-    endloop
-  endfacet
-  facet normal -0.945346 -0.326068 -0.000058
-    outer loop
-      vertex -190.417419 11.709126 -496.057098
-      vertex -190.409958 11.682874 -470.000000
-      vertex -190.555878 12.105928 -470.000000
-    endloop
-  endfacet
-  facet normal -0.945348 -0.326063 -0.000058
-    outer loop
-      vertex -190.571716 12.156562 -496.543152
-      vertex -190.417419 11.709126 -496.057098
-      vertex -190.555878 12.105928 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.958450 -0.285260
-    outer loop
-      vertex -190.833801 12.783269 -497.701202
-      vertex -90.000000 12.827829 -497.850922
-      vertex -90.000000 12.783269 -497.701202
-    endloop
-  endfacet
-  facet normal 0.000000 -0.958451 -0.285258
-    outer loop
-      vertex -190.833801 12.783269 -497.701202
-      vertex -190.878250 12.877775 -498.018738
-      vertex -90.000000 12.827829 -497.850922
-    endloop
-  endfacet
-  facet normal -0.900645 -0.434557 -0.000012
-    outer loop
-      vertex -190.878250 12.877775 -498.018738
-      vertex -190.871490 12.863006 -470.000000
-      vertex -190.902206 12.926666 -470.000000
-    endloop
-  endfacet
-  facet normal -0.900605 -0.434639 -0.000012
-    outer loop
-      vertex -190.902206 12.926666 -470.000000
-      vertex -190.910904 12.945445 -498.341614
-      vertex -190.878250 12.877775 -498.018738
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735719 -0.677287
-    outer loop
-      vertex -190.571716 12.156562 -496.543152
-      vertex -90.000000 12.156562 -496.543152
-      vertex -90.000000 11.920433 -496.286652
-    endloop
-  endfacet
-  facet normal -0.962260 -0.272134 0.000001
-    outer loop
-      vertex -190.276031 11.209196 -495.667999
-      vertex -190.276001 11.209205 -470.000000
-      vertex -190.409958 11.682874 -470.000000
-    endloop
-  endfacet
-  facet normal -0.962258 -0.272141 0.000001
-    outer loop
-      vertex -190.417419 11.709126 -496.057098
-      vertex -190.276031 11.209196 -495.667999
-      vertex -190.409958 11.682874 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735742 -0.677262
-    outer loop
-      vertex -190.417419 11.709126 -496.057098
-      vertex -90.000000 11.920433 -496.286652
-      vertex -90.000000 11.709126 -496.057098
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735730 -0.677275
-    outer loop
-      vertex -190.417419 11.709126 -496.057098
-      vertex -190.571716 12.156562 -496.543152
-      vertex -90.000000 11.920433 -496.286652
-    endloop
-  endfacet
-  facet normal -0.000072 -0.969398 -0.245496
-    outer loop
-      vertex -190.878250 12.877775 -498.018738
-      vertex -90.000000 12.913538 -498.189362
-      vertex -90.000000 12.827829 -497.850922
-    endloop
-  endfacet
-  facet normal -0.897461 -0.441094 -0.000017
-    outer loop
-      vertex -190.910904 12.945445 -498.341614
-      vertex -190.902206 12.926666 -470.000000
-      vertex -190.920990 12.964884 -470.000000
-    endloop
-  endfacet
-  facet normal -0.897547 -0.440920 -0.000017
-    outer loop
-      vertex -190.920990 12.964884 -470.000000
-      vertex -190.930923 12.986210 -498.668121
-      vertex -190.910904 12.945445 -498.341614
-    endloop
-  endfacet
-  facet normal 0.000000 -0.978739 -0.205112
-    outer loop
-      vertex -190.878250 12.877775 -498.018738
-      vertex -90.000000 12.945445 -498.341614
-      vertex -90.000000 12.913538 -498.189362
-    endloop
-  endfacet
-  facet normal 0.000000 -0.978735 -0.205128
-    outer loop
-      vertex -190.878250 12.877775 -498.018738
-      vertex -190.910904 12.945445 -498.341614
-      vertex -90.000000 12.945445 -498.341614
-    endloop
-  endfacet
-  facet normal 0.000000 -0.614219 -0.789136
-    outer loop
-      vertex -90.000000 11.709126 -496.057098
-      vertex -90.000000 11.472660 -495.873047
-      vertex -190.276031 11.209196 -495.667999
-    endloop
-  endfacet
-  facet normal 0.000000 -0.614201 -0.789149
-    outer loop
-      vertex -90.000000 11.709126 -496.057098
-      vertex -190.276031 11.209196 -495.667999
-      vertex -190.417419 11.709126 -496.057098
-    endloop
-  endfacet
-  facet normal -0.986371 -0.164536 0.000001
-    outer loop
-      vertex -190.276031 11.209196 -495.667999
-      vertex -190.263336 11.133281 -470.000000
-      vertex -190.276001 11.209205 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.992295 -0.123895
-    outer loop
-      vertex -190.910904 12.945445 -498.341614
-      vertex -90.000000 12.964661 -498.495514
-      vertex -90.000000 12.945445 -498.341614
-    endloop
-  endfacet
-  facet normal 0.000000 -0.992296 -0.123889
-    outer loop
-      vertex -190.910904 12.945445 -498.341614
-      vertex -190.930923 12.986210 -498.668121
-      vertex -90.000000 12.964661 -498.495514
-    endloop
-  endfacet
-  facet normal -0.896136 -0.443780 -0.000020
-    outer loop
-      vertex -190.930923 12.986210 -498.668121
-      vertex -190.920990 12.964884 -470.000000
-      vertex -190.927307 12.977640 -470.000000
-    endloop
-  endfacet
-  facet normal -0.896165 -0.443720 -0.000020
-    outer loop
-      vertex -190.927307 12.977640 -470.000000
-      vertex -190.937744 13.000000 -499.000000
-      vertex -190.930923 12.986210 -498.668121
-    endloop
-  endfacet
-  facet normal 0.000000 -0.614203 -0.789148
-    outer loop
-      vertex -90.000000 11.472660 -495.873047
-      vertex -90.000000 11.197916 -495.659210
-      vertex -190.276031 11.209196 -495.667999
-    endloop
-  endfacet
-  facet normal -0.961940 -0.273261 -0.000332
-    outer loop
-      vertex -190.269958 11.187792 -495.651337
-      vertex -190.257584 11.113030 -470.000000
-      vertex -190.263336 11.133281 -470.000000
-    endloop
-  endfacet
-  facet normal -0.961959 -0.273194 -0.000332
-    outer loop
-      vertex -190.276031 11.209196 -495.667999
-      vertex -190.269958 11.187792 -495.651337
-      vertex -190.263336 11.133281 -470.000000
-    endloop
-  endfacet
-  facet normal -0.000072 -0.996585 -0.082575
-    outer loop
-      vertex -190.930923 12.986210 -498.668121
-      vertex -90.000000 12.993500 -498.843567
-      vertex -90.000000 12.964661 -498.495514
-    endloop
-  endfacet
-  facet normal 0.000000 -0.999138 -0.041517
-    outer loop
-      vertex -190.930923 12.986210 -498.668121
-      vertex -90.000000 13.000000 -499.000000
-      vertex -90.000000 12.993500 -498.843567
-    endloop
-  endfacet
-  facet normal 0.000000 -0.999138 -0.041516
-    outer loop
-      vertex -190.930923 12.986210 -498.668121
-      vertex -190.937744 13.000000 -499.000000
-      vertex -90.000000 13.000000 -499.000000
-    endloop
-  endfacet
-  facet normal -0.879513 -0.475874 -0.000050
-    outer loop
-      vertex -190.937744 13.000000 -499.000000
-      vertex -190.927307 12.977640 -470.000000
-      vertex -190.968414 13.053615 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.613899 -0.789384
-    outer loop
-      vertex -90.000000 11.197916 -495.659210
-      vertex -90.000000 11.187792 -495.651337
-      vertex -190.269958 11.187792 -495.651337
-    endloop
-  endfacet
-  facet normal 0.000000 -0.614281 -0.789087
-    outer loop
-      vertex -90.000000 11.197916 -495.659210
-      vertex -190.269958 11.187792 -495.651337
-      vertex -190.276031 11.209196 -495.667999
-    endloop
-  endfacet
-  facet normal -0.977484 -0.211011 -0.000143
-    outer loop
-      vertex -190.144592 10.606782 -495.336914
-      vertex -190.138763 10.562610 -470.000000
-      vertex -190.257584 11.113030 -470.000000
-    endloop
-  endfacet
-  facet normal -0.977488 -0.210993 -0.000143
-    outer loop
-      vertex -190.269958 11.187792 -495.651337
-      vertex -190.144592 10.606782 -495.336914
-      vertex -190.257584 11.113030 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -190.937744 13.000000 -499.000000
-      vertex -90.000000 13.000000 -499.942719
-      vertex -90.000000 13.000000 -499.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -190.937744 13.000000 -499.000000
-      vertex -190.937744 13.000000 -501.000000
-      vertex -90.000000 13.000000 -499.942719
-    endloop
-  endfacet
-  facet normal -0.868067 -0.496447 0.000000
-    outer loop
-      vertex -190.937744 13.000000 -499.000000
-      vertex -190.968414 13.053615 -470.000000
-      vertex -190.970398 13.057083 -470.000000
-    endloop
-  endfacet
-  facet normal -0.868015 -0.496539 0.000000
-    outer loop
-      vertex -190.970398 13.057083 -470.000000
-      vertex -190.937744 13.000000 -501.000000
-      vertex -190.937744 13.000000 -499.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.475973 -0.879460
-    outer loop
-      vertex -90.000000 11.187792 -495.651337
-      vertex -90.000000 10.881607 -495.485626
-      vertex -190.269958 11.187792 -495.651337
-    endloop
-  endfacet
-  facet normal -0.989593 -0.143898 -0.000024
-    outer loop
-      vertex -190.053726 9.981941 -495.122406
-      vertex -190.052567 9.969829 -470.000000
-      vertex -190.138763 10.562610 -470.000000
-    endloop
-  endfacet
-  facet normal -0.989590 -0.143917 -0.000023
-    outer loop
-      vertex -190.144592 10.606782 -495.336914
-      vertex -190.053726 9.981941 -495.122406
-      vertex -190.138763 10.562610 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.475908 -0.879495
-    outer loop
-      vertex -90.000000 10.881607 -495.485626
-      vertex -90.000000 10.606782 -495.336914
-      vertex -190.144592 10.606782 -495.336914
-    endloop
-  endfacet
-  facet normal 0.000000 -0.475942 -0.879476
-    outer loop
-      vertex -90.000000 10.881607 -495.485626
-      vertex -190.144592 10.606782 -495.336914
-      vertex -190.269958 11.187792 -495.651337
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -190.937744 13.000000 -501.000000
-      vertex -90.000000 13.000000 -501.000000
-      vertex -90.000000 13.000000 -499.942719
-    endloop
-  endfacet
-  facet normal -0.868001 -0.496562 0.000000
-    outer loop
-      vertex -190.937744 13.000000 -501.000000
-      vertex -190.970398 13.057083 -470.000000
-      vertex -191.465500 13.922533 -470.000000
-    endloop
-  endfacet
-  facet normal -0.868002 -0.496561 0.000000
-    outer loop
-      vertex -191.465500 13.922533 -530.000000
-      vertex -190.968414 13.053615 -530.000000
-      vertex -190.937744 13.000000 -501.000000
-    endloop
-  endfacet
-  facet normal -0.868002 -0.496560 0.000000
-    outer loop
-      vertex -191.465500 13.922533 -470.000000
-      vertex -191.465500 13.922533 -530.000000
-      vertex -190.937744 13.000000 -501.000000
-    endloop
-  endfacet
-  facet normal -0.995390 -0.095910 0.000000
-    outer loop
-      vertex -190.030731 9.743214 -495.069641
-      vertex -190.030731 9.743214 -470.000000
-      vertex -190.052567 9.969829 -470.000000
-    endloop
-  endfacet
-  facet normal -0.995393 -0.095879 0.000000
-    outer loop
-      vertex -190.053726 9.981941 -495.122406
-      vertex -190.030731 9.743214 -495.069641
-      vertex -190.052567 9.969829 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.324699 -0.945817
-    outer loop
-      vertex -90.000000 10.277694 -495.223938
-      vertex -90.000000 9.981941 -495.122406
-      vertex -190.053726 9.981941 -495.122406
-    endloop
-  endfacet
-  facet normal 0.000000 -0.324699 -0.945817
-    outer loop
-      vertex -90.000000 10.277694 -495.223938
-      vertex -190.053726 9.981941 -495.122406
-      vertex -190.144592 10.606782 -495.336914
-    endloop
-  endfacet
-  facet normal 0.000000 -0.324699 -0.945817
-    outer loop
-      vertex -90.000000 10.606782 -495.336914
-      vertex -90.000000 10.277694 -495.223938
-      vertex -190.144592 10.606782 -495.336914
-    endloop
-  endfacet
-  facet normal 0.000000 -0.999143 0.041403
-    outer loop
-      vertex -190.930969 12.986291 -501.330841
-      vertex -90.000000 12.993538 -501.155945
-      vertex -90.000000 13.000000 -501.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.999143 0.041401
-    outer loop
-      vertex -190.937744 13.000000 -501.000000
-      vertex -190.930969 12.986291 -501.330841
-      vertex -90.000000 13.000000 -501.000000
-    endloop
-  endfacet
-  facet normal -0.895361 -0.445340 0.000124
-    outer loop
-      vertex -190.968414 13.053615 -530.000000
-      vertex -190.961700 13.040116 -530.000000
-      vertex -190.930969 12.986291 -501.330841
-    endloop
-  endfacet
-  facet normal -0.895315 -0.445434 0.000123
-    outer loop
-      vertex -190.937744 13.000000 -501.000000
-      vertex -190.968414 13.053615 -530.000000
-      vertex -190.930969 12.986291 -501.330841
-    endloop
-  endfacet
-  facet normal -0.789137 -0.614218 0.000000
-    outer loop
-      vertex -191.465500 13.922533 -530.000000
-      vertex -191.465500 13.922533 -470.000000
-      vertex -191.894608 14.473844 -470.000000
-    endloop
-  endfacet
-  facet normal -0.789137 -0.614218 0.000000
-    outer loop
-      vertex -191.949387 14.544223 -530.000000
-      vertex -191.465500 13.922533 -530.000000
-      vertex -191.894608 14.473844 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.215817 -0.976434
-    outer loop
-      vertex -90.000000 9.981941 -495.122406
-      vertex -190.030731 9.743214 -495.069641
-      vertex -190.053726 9.981941 -495.122406
-    endloop
-  endfacet
-  facet normal 0.000000 -0.215851 -0.976426
-    outer loop
-      vertex -90.000000 9.981941 -495.122406
-      vertex -90.000000 9.868878 -495.097412
-      vertex -190.030731 9.743214 -495.069641
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -190.030731 9.743214 -495.069641
-      vertex -190.030731 9.667943 -470.000000
-      vertex -190.030731 9.743214 -470.000000
-    endloop
-  endfacet
-  facet normal -0.000072 -0.996585 0.082575
-    outer loop
-      vertex -190.930969 12.986291 -501.330841
-      vertex -90.000000 12.964699 -501.503998
-      vertex -90.000000 12.993538 -501.155945
-    endloop
-  endfacet
-  facet normal -0.897115 -0.441797 0.000132
-    outer loop
-      vertex -190.961700 13.040116 -530.000000
-      vertex -190.942444 13.001014 -530.000000
-      vertex -190.910904 12.945445 -501.658386
-    endloop
-  endfacet
-  facet normal -0.897128 -0.441770 0.000132
-    outer loop
-      vertex -190.930969 12.986291 -501.330841
-      vertex -190.961700 13.040116 -530.000000
-      vertex -190.910904 12.945445 -501.658386
-    endloop
-  endfacet
-  facet normal -0.789137 -0.614218 0.000000
-    outer loop
-      vertex -191.949387 14.544223 -530.000000
-      vertex -191.894608 14.473844 -470.000000
-      vertex -192.378494 15.095533 -470.000000
-    endloop
-  endfacet
-  facet normal -0.789137 -0.614218 0.000000
-    outer loop
-      vertex -192.378494 15.095533 -530.000000
-      vertex -191.949387 14.544223 -530.000000
-      vertex -192.378494 15.095533 -470.000000
-    endloop
-  endfacet
-  facet normal -0.000106 -0.134402 -0.990927
-    outer loop
-      vertex -90.000000 9.868878 -495.097412
-      vertex -190.006058 9.330317 -495.013641
-      vertex -190.030731 9.743214 -495.069641
-    endloop
-  endfacet
-  facet normal -0.000107 -0.134359 -0.990933
-    outer loop
-      vertex -90.000000 9.868878 -495.097412
-      vertex -90.000000 9.673287 -495.070892
-      vertex -190.006058 9.330317 -495.013641
-    endloop
-  endfacet
-  facet normal -0.998219 -0.059664 -0.000179
-    outer loop
-      vertex -190.006058 9.330317 -495.013641
-      vertex -190.007309 9.276071 -470.000000
-      vertex -190.030731 9.667943 -470.000000
-    endloop
-  endfacet
-  facet normal -0.998218 -0.059675 -0.000179
-    outer loop
-      vertex -190.030731 9.743214 -495.069641
-      vertex -190.006058 9.330317 -495.013641
-      vertex -190.030731 9.667943 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.992313 0.123751
-    outer loop
-      vertex -190.910904 12.945445 -501.658386
-      vertex -90.000000 12.945445 -501.658386
-      vertex -90.000000 12.964699 -501.503998
-    endloop
-  endfacet
-  facet normal 0.000000 -0.992314 0.123745
-    outer loop
-      vertex -190.930969 12.986291 -501.330841
-      vertex -190.910904 12.945445 -501.658386
-      vertex -90.000000 12.964699 -501.503998
-    endloop
-  endfacet
-  facet normal -0.900340 -0.435187 0.000149
-    outer loop
-      vertex -190.942444 13.001014 -530.000000
-      vertex -190.910950 12.935857 -530.000000
-      vertex -190.877899 12.877043 -501.984131
-    endloop
-  endfacet
-  facet normal -0.900362 -0.435142 0.000149
-    outer loop
-      vertex -190.910904 12.945445 -501.658386
-      vertex -190.942444 13.001014 -530.000000
-      vertex -190.877899 12.877043 -501.984131
-    endloop
-  endfacet
-  facet normal -0.677284 -0.735722 0.000000
-    outer loop
-      vertex -192.892487 15.568697 -470.000000
-      vertex -192.958099 15.629101 -530.000000
-      vertex -192.378494 15.095533 -530.000000
-    endloop
-  endfacet
-  facet normal -0.677282 -0.735724 0.000000
-    outer loop
-      vertex -192.378494 15.095533 -470.000000
-      vertex -192.892487 15.568697 -470.000000
-      vertex -192.378494 15.095533 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.164649 -0.986352
-    outer loop
-      vertex -90.000000 9.673287 -495.070892
-      vertex -90.000000 9.330317 -495.013641
-      vertex -190.006058 9.330317 -495.013641
-    endloop
-  endfacet
-  facet normal -0.999830 -0.018425 -0.000090
-    outer loop
-      vertex -190.000000 9.001518 -495.000000
-      vertex -190.001556 8.963905 -470.000000
-      vertex -190.007309 9.276071 -470.000000
-    endloop
-  endfacet
-  facet normal -0.999830 -0.018424 -0.000090
-    outer loop
-      vertex -190.006058 9.330317 -495.013641
-      vertex -190.000000 9.001518 -495.000000
-      vertex -190.007309 9.276071 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.978657 0.205501
-    outer loop
-      vertex -190.877899 12.877043 -501.984131
-      vertex -90.000000 12.913193 -501.811981
-      vertex -90.000000 12.945445 -501.658386
-    endloop
-  endfacet
-  facet normal 0.000000 -0.978656 0.205505
-    outer loop
-      vertex -190.910904 12.945445 -501.658386
-      vertex -190.877899 12.877043 -501.984131
-      vertex -90.000000 12.945445 -501.658386
-    endloop
-  endfacet
-  facet normal -0.904717 -0.426013 0.000173
-    outer loop
-      vertex -190.910950 12.935857 -530.000000
-      vertex -190.868958 12.846679 -530.000000
-      vertex -190.833801 12.783269 -502.298767
-    endloop
-  endfacet
-  facet normal -0.904710 -0.426027 0.000173
-    outer loop
-      vertex -190.877899 12.877043 -501.984131
-      vertex -190.910950 12.935857 -530.000000
-      vertex -190.833801 12.783269 -502.298767
-    endloop
-  endfacet
-  facet normal -0.677282 -0.735724 0.000000
-    outer loop
-      vertex -193.472092 16.102264 -470.000000
-      vertex -193.472092 16.102264 -530.000000
-      vertex -192.958099 15.629101 -530.000000
-    endloop
-  endfacet
-  facet normal -0.677284 -0.735722 0.000000
-    outer loop
-      vertex -192.892487 15.568697 -470.000000
-      vertex -193.472092 16.102264 -470.000000
-      vertex -192.958099 15.629101 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.041453 -0.999140
-    outer loop
-      vertex -90.000000 9.330317 -495.013641
-      vertex -190.000000 9.001518 -495.000000
-      vertex -190.006058 9.330317 -495.013641
-    endloop
-  endfacet
-  facet normal 0.000000 -0.041504 -0.999138
-    outer loop
-      vertex -90.000000 9.330317 -495.013641
-      vertex -90.000000 9.174570 -495.007172
-      vertex -190.000000 9.001518 -495.000000
-    endloop
-  endfacet
-  facet normal -0.999833 0.018254 -0.000035
-    outer loop
-      vertex -190.000000 9.001518 -495.000000
-      vertex -190.007309 8.648817 -470.000000
-      vertex -190.001556 8.963905 -470.000000
-    endloop
-  endfacet
-  facet normal -0.999833 0.018254 -0.000035
-    outer loop
-      vertex -190.000000 9.001518 -495.000000
-      vertex -190.006058 8.669682 -495.013641
-      vertex -190.007309 8.648817 -470.000000
-    endloop
-  endfacet
-  facet normal -0.000072 -0.969398 0.245496
-    outer loop
-      vertex -190.877899 12.877043 -501.984131
-      vertex -90.000000 12.827484 -502.150421
-      vertex -90.000000 12.913193 -501.811981
-    endloop
-  endfacet
-  facet normal 0.000000 -0.958338 0.285637
-    outer loop
-      vertex -190.833801 12.783269 -502.298767
-      vertex -90.000000 12.783269 -502.298767
-      vertex -90.000000 12.827484 -502.150421
-    endloop
-  endfacet
-  facet normal 0.000000 -0.958342 0.285623
-    outer loop
-      vertex -190.877899 12.877043 -501.984131
-      vertex -190.833801 12.783269 -502.298767
-      vertex -90.000000 12.827484 -502.150421
-    endloop
-  endfacet
-  facet normal -0.913816 -0.406128 0.000230
-    outer loop
-      vertex -190.868958 12.846679 -530.000000
-      vertex -190.797836 12.686651 -530.000000
-      vertex -190.759033 12.614820 -502.682800
-    endloop
-  endfacet
-  facet normal -0.913815 -0.406131 0.000230
-    outer loop
-      vertex -190.833801 12.783269 -502.298767
-      vertex -190.868958 12.846679 -530.000000
-      vertex -190.759033 12.614820 -502.682800
-    endloop
-  endfacet
-  facet normal -0.546945 -0.837169 0.000000
-    outer loop
-      vertex -194.056946 16.484375 -470.000000
-      vertex -194.131622 16.533154 -530.000000
-      vertex -193.472092 16.102264 -530.000000
-    endloop
-  endfacet
-  facet normal -0.546955 -0.837162 0.000000
-    outer loop
-      vertex -193.472092 16.102264 -470.000000
-      vertex -194.056946 16.484375 -470.000000
-      vertex -193.472092 16.102264 -530.000000
-    endloop
-  endfacet
-  facet normal -0.000143 0.041077 -0.999156
-    outer loop
-      vertex -90.000000 9.017395 -495.013641
-      vertex -190.006058 8.669682 -495.013641
-      vertex -190.000000 9.001518 -495.000000
-    endloop
-  endfacet
-  facet normal -0.000143 0.041128 -0.999154
-    outer loop
-      vertex -90.000000 9.174570 -495.007172
-      vertex -90.000000 9.017395 -495.013641
-      vertex -190.000000 9.001518 -495.000000
-    endloop
-  endfacet
-  facet normal -0.998220 0.059639 0.000000
-    outer loop
-      vertex -190.006058 8.669682 -495.013641
-      vertex -190.030731 8.256785 -470.000000
-      vertex -190.007309 8.648817 -470.000000
-    endloop
-  endfacet
-  facet normal -0.998219 0.059651 0.000000
-    outer loop
-      vertex -190.006058 8.669682 -495.013641
-      vertex -190.030731 8.256785 -495.069641
-      vertex -190.030731 8.256785 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915789 0.401660
-    outer loop
-      vertex -190.833801 12.783269 -502.298767
-      vertex -90.000000 12.643049 -502.618469
-      vertex -90.000000 12.783269 -502.298767
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915764 0.401717
-    outer loop
-      vertex -190.759033 12.614820 -502.682800
-      vertex -90.000000 12.563623 -502.799530
-      vertex -90.000000 12.643049 -502.618469
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915776 0.401689
-    outer loop
-      vertex -190.833801 12.783269 -502.298767
-      vertex -190.759033 12.614820 -502.682800
-      vertex -90.000000 12.643049 -502.618469
-    endloop
-  endfacet
-  facet normal -0.879455 -0.475982 -0.000002
-    outer loop
-      vertex -190.797836 12.686651 -530.000000
-      vertex -190.758972 12.614843 -530.000000
-      vertex -190.759033 12.614820 -502.682800
-    endloop
-  endfacet
-  facet normal -0.546955 -0.837162 0.000000
-    outer loop
-      vertex -194.716476 16.915264 -470.000000
-      vertex -194.716476 16.915264 -530.000000
-      vertex -194.131622 16.533154 -530.000000
-    endloop
-  endfacet
-  facet normal -0.546945 -0.837169 0.000000
-    outer loop
-      vertex -194.056946 16.484375 -470.000000
-      vertex -194.716476 16.915264 -470.000000
-      vertex -194.131622 16.533154 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -190.006058 8.669682 -495.013641
-      vertex -90.000000 9.017395 -495.013641
-      vertex -90.000000 8.669682 -495.013641
-    endloop
-  endfacet
-  facet normal 0.000000 0.134396 -0.990928
-    outer loop
-      vertex -90.000000 8.474131 -495.040161
-      vertex -190.030731 8.256785 -495.069641
-      vertex -190.006058 8.669682 -495.013641
-    endloop
-  endfacet
-  facet normal 0.000000 0.134386 -0.990929
-    outer loop
-      vertex -90.000000 8.669682 -495.013641
-      vertex -90.000000 8.474131 -495.040161
-      vertex -190.006058 8.669682 -495.013641
-    endloop
-  endfacet
-  facet normal -0.986359 0.164606 0.000000
-    outer loop
-      vertex -190.030731 8.256785 -495.069641
-      vertex -190.043121 8.182541 -470.000000
-      vertex -190.030731 8.256785 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915813 0.401606
-    outer loop
-      vertex -190.716019 12.517895 -502.903809
-      vertex -90.000000 12.517895 -502.903809
-      vertex -90.000000 12.563623 -502.799530
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915801 0.401631
-    outer loop
-      vertex -190.759033 12.614820 -502.682800
-      vertex -190.716019 12.517895 -502.903809
-      vertex -90.000000 12.563623 -502.799530
-    endloop
-  endfacet
-  facet normal -0.914051 -0.405598 -0.000002
-    outer loop
-      vertex -190.758972 12.614843 -530.000000
-      vertex -190.718307 12.523202 -530.000000
-      vertex -190.716019 12.517895 -502.903809
-    endloop
-  endfacet
-  facet normal -0.914034 -0.405637 -0.000002
-    outer loop
-      vertex -190.759033 12.614820 -502.682800
-      vertex -190.758972 12.614843 -530.000000
-      vertex -190.716019 12.517895 -502.903809
-    endloop
-  endfacet
-  facet normal -0.401696 -0.915773 0.000000
-    outer loop
-      vertex -195.356247 17.195898 -470.000000
-      vertex -195.437927 17.231722 -530.000000
-      vertex -194.716476 16.915264 -530.000000
-    endloop
-  endfacet
-  facet normal -0.401701 -0.915771 0.000000
-    outer loop
-      vertex -194.716476 16.915264 -470.000000
-      vertex -195.356247 17.195898 -470.000000
-      vertex -194.716476 16.915264 -530.000000
-    endloop
-  endfacet
-  facet normal -0.000181 0.215833 -0.976430
-    outer loop
-      vertex -90.000000 8.361105 -495.065155
-      vertex -190.053726 8.018058 -495.122406
-      vertex -190.030731 8.256785 -495.069641
-    endloop
-  endfacet
-  facet normal -0.000181 0.215918 -0.976411
-    outer loop
-      vertex -90.000000 8.474131 -495.040161
-      vertex -90.000000 8.361105 -495.065155
-      vertex -190.030731 8.256785 -495.069641
-    endloop
-  endfacet
-  facet normal -0.995390 0.095915 -0.000208
-    outer loop
-      vertex -190.030731 8.256785 -495.069641
-      vertex -190.064972 7.955779 -470.000000
-      vertex -190.043121 8.182541 -470.000000
-    endloop
-  endfacet
-  facet normal -0.995389 0.095925 -0.000208
-    outer loop
-      vertex -190.030731 8.256785 -495.069641
-      vertex -190.053726 8.018058 -495.122406
-      vertex -190.064972 7.955779 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837147 0.546978
-    outer loop
-      vertex -190.571716 12.156562 -503.456818
-      vertex -90.000000 12.347251 -503.164978
-      vertex -90.000000 12.517895 -502.903809
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837143 0.546984
-    outer loop
-      vertex -190.716019 12.517895 -502.903809
-      vertex -190.571716 12.156562 -503.456818
-      vertex -90.000000 12.517895 -502.903809
-    endloop
-  endfacet
-  facet normal -0.928683 -0.370874 0.000006
-    outer loop
-      vertex -190.718307 12.523202 -530.000000
-      vertex -190.581680 12.181082 -530.000000
-      vertex -190.571716 12.156562 -503.456818
-    endloop
-  endfacet
-  facet normal -0.928678 -0.370887 0.000006
-    outer loop
-      vertex -190.716019 12.517895 -502.903809
-      vertex -190.718307 12.523202 -530.000000
-      vertex -190.571716 12.156562 -503.456818
-    endloop
-  endfacet
-  facet normal -0.401701 -0.915771 0.000000
-    outer loop
-      vertex -196.077698 17.512356 -470.000000
-      vertex -196.077698 17.512356 -530.000000
-      vertex -195.437927 17.231722 -530.000000
-    endloop
-  endfacet
-  facet normal -0.401696 -0.915773 0.000000
-    outer loop
-      vertex -195.356247 17.195898 -470.000000
-      vertex -196.077698 17.512356 -470.000000
-      vertex -195.437927 17.231722 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.164613 -0.986358
-    outer loop
-      vertex -90.000000 8.361105 -495.065155
-      vertex -90.000000 8.018058 -495.122406
-      vertex -190.053726 8.018058 -495.122406
-    endloop
-  endfacet
-  facet normal -0.989587 0.143938 -0.000087
-    outer loop
-      vertex -190.053726 8.018058 -495.122406
-      vertex -190.144592 7.393218 -495.336914
-      vertex -190.151291 7.362395 -470.000000
-    endloop
-  endfacet
-  facet normal -0.989584 0.143954 -0.000086
-    outer loop
-      vertex -190.053726 8.018058 -495.122406
-      vertex -190.151291 7.362395 -470.000000
-      vertex -190.064972 7.955779 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837139 0.546990
-    outer loop
-      vertex -190.571716 12.156562 -503.456818
-      vertex -90.000000 12.156562 -503.456818
-      vertex -90.000000 12.347251 -503.164978
-    endloop
-  endfacet
-  facet normal -0.945350 -0.326059 0.000054
-    outer loop
-      vertex -190.581680 12.181082 -530.000000
-      vertex -190.417419 11.709126 -503.942902
-      vertex -190.571716 12.156562 -503.456818
-    endloop
-  endfacet
-  facet normal -0.945351 -0.326054 0.000054
-    outer loop
-      vertex -190.581680 12.181082 -530.000000
-      vertex -190.435318 11.756723 -530.000000
-      vertex -190.417419 11.709126 -503.942902
-    endloop
-  endfacet
-  facet normal -0.245483 -0.969401 0.000000
-    outer loop
-      vertex -196.754944 17.683857 -470.000000
-      vertex -196.841400 17.705750 -530.000000
-      vertex -196.077698 17.512356 -530.000000
-    endloop
-  endfacet
-  facet normal -0.245484 -0.969401 0.000000
-    outer loop
-      vertex -196.077698 17.512356 -470.000000
-      vertex -196.754944 17.683857 -470.000000
-      vertex -196.077698 17.512356 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.324667 -0.945828
-    outer loop
-      vertex -90.000000 8.018058 -495.122406
-      vertex -90.000000 7.689111 -495.235321
-      vertex -190.053726 8.018058 -495.122406
-    endloop
-  endfacet
-  facet normal -0.977242 0.212130 0.000000
-    outer loop
-      vertex -190.144592 7.393218 -495.336914
-      vertex -190.270752 6.812060 -470.000000
-      vertex -190.151291 7.362395 -470.000000
-    endloop
-  endfacet
-  facet normal -0.977241 0.212134 0.000000
-    outer loop
-      vertex -190.144592 7.393218 -495.336914
-      vertex -190.270493 6.813230 -495.653198
-      vertex -190.270752 6.812060 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.324700 -0.945817
-    outer loop
-      vertex -90.000000 7.393218 -495.336914
-      vertex -190.144592 7.393218 -495.336914
-      vertex -190.053726 8.018058 -495.122406
-    endloop
-  endfacet
-  facet normal 0.000000 0.324736 -0.945805
-    outer loop
-      vertex -90.000000 7.689111 -495.235321
-      vertex -90.000000 7.393218 -495.336914
-      vertex -190.053726 8.018058 -495.122406
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735737 0.677268
-    outer loop
-      vertex -190.417419 11.709126 -503.942902
-      vertex -90.000000 11.945083 -503.686554
-      vertex -90.000000 12.156562 -503.456818
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735751 0.677253
-    outer loop
-      vertex -190.571716 12.156562 -503.456818
-      vertex -190.417419 11.709126 -503.942902
-      vertex -90.000000 12.156562 -503.456818
-    endloop
-  endfacet
-  facet normal -0.961883 -0.273460 0.000161
-    outer loop
-      vertex -190.435318 11.756723 -530.000000
-      vertex -190.275406 11.209369 -504.334442
-      vertex -190.417419 11.709126 -503.942902
-    endloop
-  endfacet
-  facet normal -0.961882 -0.273466 0.000161
-    outer loop
-      vertex -190.435318 11.756723 -530.000000
-      vertex -190.300400 11.282166 -530.000000
-      vertex -190.275406 11.209369 -504.334442
-    endloop
-  endfacet
-  facet normal -0.245484 -0.969401 0.000000
-    outer loop
-      vertex -197.518646 17.877251 -470.000000
-      vertex -197.518646 17.877251 -530.000000
-      vertex -196.841400 17.705750 -530.000000
-    endloop
-  endfacet
-  facet normal -0.245483 -0.969401 0.000000
-    outer loop
-      vertex -196.754944 17.683857 -470.000000
-      vertex -197.518646 17.877251 -470.000000
-      vertex -196.841400 17.705750 -530.000000
-    endloop
-  endfacet
-  facet normal -0.977221 0.212222 0.000000
-    outer loop
-      vertex -190.270493 6.813230 -495.653198
-      vertex -190.275406 6.790630 -470.000000
-      vertex -190.270752 6.812060 -470.000000
-    endloop
-  endfacet
-  facet normal -0.977173 0.212444 0.000000
-    outer loop
-      vertex -190.270493 6.813230 -495.653198
-      vertex -190.275406 6.790630 -495.665527
-      vertex -190.275406 6.790630 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000011 0.478766 -0.877943
-    outer loop
-      vertex -90.000000 6.812691 -495.652222
-      vertex -190.270493 6.813230 -495.653198
-      vertex -190.144592 7.393218 -495.336914
-    endloop
-  endfacet
-  facet normal 0.000011 0.478802 -0.877923
-    outer loop
-      vertex -90.000000 7.087213 -495.502502
-      vertex -90.000000 6.812691 -495.652222
-      vertex -190.144592 7.393218 -495.336914
-    endloop
-  endfacet
-  facet normal 0.000000 0.475919 -0.879489
-    outer loop
-      vertex -90.000000 7.393218 -495.336914
-      vertex -90.000000 7.087213 -495.502502
-      vertex -190.144592 7.393218 -495.336914
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735763 0.677239
-    outer loop
-      vertex -190.417419 11.709126 -503.942902
-      vertex -90.000000 11.709126 -503.942902
-      vertex -90.000000 11.945083 -503.686554
-    endloop
-  endfacet
-  facet normal -0.000011 -0.616727 0.787177
-    outer loop
-      vertex -90.000000 11.434198 -504.156891
-      vertex -190.417419 11.709126 -503.942902
-      vertex -190.275406 11.209369 -504.334442
-    endloop
-  endfacet
-  facet normal -0.000011 -0.616734 0.787171
-    outer loop
-      vertex -90.000000 11.197998 -504.341949
-      vertex -90.000000 11.434198 -504.156891
-      vertex -190.275406 11.209369 -504.334442
-    endloop
-  endfacet
-  facet normal -0.945806 -0.324731 0.000000
-    outer loop
-      vertex -190.300400 11.282166 -530.000000
-      vertex -190.275406 11.209369 -530.000000
-      vertex -190.275406 11.209369 -504.334442
-    endloop
-  endfacet
-  facet normal -0.082581 -0.996584 0.000000
-    outer loop
-      vertex -198.214890 17.934942 -470.000000
-      vertex -198.303757 17.942308 -530.000000
-      vertex -197.518646 17.877251 -530.000000
-    endloop
-  endfacet
-  facet normal -0.082578 -0.996585 0.000000
-    outer loop
-      vertex -197.518646 17.877251 -470.000000
-      vertex -198.214890 17.934942 -470.000000
-      vertex -197.518646 17.877251 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000011 0.478910 -0.877864
-    outer loop
-      vertex -90.000000 6.802001 -495.658051
-      vertex -190.275406 6.790630 -495.665527
-      vertex -190.270493 6.813230 -495.653198
-    endloop
-  endfacet
-  facet normal 0.000011 0.478731 -0.877961
-    outer loop
-      vertex -90.000000 6.812691 -495.652222
-      vertex -90.000000 6.802001 -495.658051
-      vertex -190.270493 6.813230 -495.653198
-    endloop
-  endfacet
-  facet normal -0.945806 0.324731 0.000000
-    outer loop
-      vertex -190.275406 6.790630 -495.665527
-      vertex -190.300400 6.717834 -470.000000
-      vertex -190.275406 6.790630 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.614221 0.789134
-    outer loop
-      vertex -90.000000 11.434198 -504.156891
-      vertex -90.000000 11.709126 -503.942902
-      vertex -190.417419 11.709126 -503.942902
-    endloop
-  endfacet
-  facet normal 0.000011 -0.479830 0.877361
-    outer loop
-      vertex -90.000000 11.197998 -504.341949
-      vertex -190.275406 11.209369 -504.334442
-      vertex -190.270493 11.186769 -504.346802
-    endloop
-  endfacet
-  facet normal 0.000011 -0.480660 0.876907
-    outer loop
-      vertex -90.000000 11.187308 -504.347809
-      vertex -90.000000 11.197998 -504.341949
-      vertex -190.270493 11.186769 -504.346802
-    endloop
-  endfacet
-  facet normal -0.977172 -0.212448 0.000000
-    outer loop
-      vertex -190.275406 11.209369 -530.000000
-      vertex -190.270493 11.186769 -504.346802
-      vertex -190.275406 11.209369 -504.334442
-    endloop
-  endfacet
-  facet normal -0.977221 -0.212222 0.000000
-    outer loop
-      vertex -190.275406 11.209369 -530.000000
-      vertex -190.270752 11.187939 -530.000000
-      vertex -190.270493 11.186769 -504.346802
-    endloop
-  endfacet
-  facet normal -0.082578 -0.996585 0.000000
-    outer loop
-      vertex -199.000000 18.000000 -470.000000
-      vertex -199.000000 18.000000 -530.000000
-      vertex -198.303757 17.942308 -530.000000
-    endloop
-  endfacet
-  facet normal -0.082581 -0.996584 0.000000
-    outer loop
-      vertex -198.214890 17.934942 -470.000000
-      vertex -199.000000 18.000000 -470.000000
-      vertex -198.303757 17.942308 -530.000000
-    endloop
-  endfacet
-  facet normal -0.000011 0.616756 -0.787154
-    outer loop
-      vertex -90.000000 6.565801 -495.843109
-      vertex -190.417419 6.290874 -496.057098
-      vertex -190.275406 6.790630 -495.665527
-    endloop
-  endfacet
-  facet normal -0.000011 0.616734 -0.787171
-    outer loop
-      vertex -90.000000 6.802001 -495.658051
-      vertex -90.000000 6.565801 -495.843109
-      vertex -190.275406 6.790630 -495.665527
-    endloop
-  endfacet
-  facet normal -0.961882 0.273466 -0.000161
-    outer loop
-      vertex -190.275406 6.790630 -495.665527
-      vertex -190.435318 6.243276 -470.000000
-      vertex -190.300400 6.717834 -470.000000
-    endloop
-  endfacet
-  facet normal -0.961883 0.273460 -0.000161
-    outer loop
-      vertex -190.275406 6.790630 -495.665527
-      vertex -190.417419 6.290874 -496.057098
-      vertex -190.435318 6.243276 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000011 -0.478801 0.877923
-    outer loop
-      vertex -90.000000 11.187308 -504.347809
-      vertex -190.270493 11.186769 -504.346802
-      vertex -190.144592 10.606782 -504.663116
-    endloop
-  endfacet
-  facet normal 0.000011 -0.478802 0.877923
-    outer loop
-      vertex -90.000000 10.912786 -504.497528
-      vertex -90.000000 11.187308 -504.347809
-      vertex -190.144592 10.606782 -504.663116
-    endloop
-  endfacet
-  facet normal -0.977241 -0.212134 0.000000
-    outer loop
-      vertex -190.270752 11.187939 -530.000000
-      vertex -190.144592 10.606782 -504.663116
-      vertex -190.270493 11.186769 -504.346802
-    endloop
-  endfacet
-  facet normal -0.977241 -0.212130 0.000000
-    outer loop
-      vertex -190.270752 11.187939 -530.000000
-      vertex -190.151291 10.637605 -530.000000
-      vertex -190.144592 10.606782 -504.663116
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -199.000000 18.000000 -470.000000
-      vertex -199.940002 18.000000 -530.000000
-      vertex -199.000000 18.000000 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -200.059998 18.000000 -470.000000
-      vertex -199.940002 18.000000 -530.000000
-      vertex -199.000000 18.000000 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.614221 -0.789134
-    outer loop
-      vertex -90.000000 6.565801 -495.843109
-      vertex -90.000000 6.290874 -496.057098
-      vertex -190.417419 6.290874 -496.057098
-    endloop
-  endfacet
-  facet normal -0.945351 0.326054 -0.000054
-    outer loop
-      vertex -190.417419 6.290874 -496.057098
-      vertex -190.581680 5.818917 -470.000000
-      vertex -190.435318 6.243276 -470.000000
-    endloop
-  endfacet
-  facet normal -0.945349 0.326059 -0.000054
-    outer loop
-      vertex -190.571716 5.843437 -496.543152
-      vertex -190.581680 5.818917 -470.000000
-      vertex -190.417419 6.290874 -496.057098
-    endloop
-  endfacet
-  facet normal 0.000000 -0.475920 0.879489
-    outer loop
-      vertex -90.000000 10.606782 -504.663116
-      vertex -90.000000 10.912786 -504.497528
-      vertex -190.144592 10.606782 -504.663116
-    endloop
-  endfacet
-  facet normal -0.989587 -0.143938 0.000087
-    outer loop
-      vertex -190.151291 10.637605 -530.000000
-      vertex -190.053726 9.981941 -504.877625
-      vertex -190.144592 10.606782 -504.663116
-    endloop
-  endfacet
-  facet normal -0.989584 -0.143954 0.000086
-    outer loop
-      vertex -190.151291 10.637605 -530.000000
-      vertex -190.064972 10.044221 -530.000000
-      vertex -190.053726 9.981941 -504.877625
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -200.059998 18.000000 -470.000000
-      vertex -201.000000 18.000000 -530.000000
-      vertex -199.940002 18.000000 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -201.000000 18.000000 -470.000000
-      vertex -201.000000 18.000000 -530.000000
-      vertex -200.059998 18.000000 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.735722 -0.677283
-    outer loop
-      vertex -190.417419 6.290874 -496.057098
-      vertex -90.000000 6.290874 -496.057098
-      vertex -90.000000 6.054916 -496.313416
-    endloop
-  endfacet
-  facet normal -0.928683 0.370874 -0.000006
-    outer loop
-      vertex -190.571716 5.843437 -496.543152
-      vertex -190.718307 5.476798 -470.000000
-      vertex -190.581680 5.818917 -470.000000
-    endloop
-  endfacet
-  facet normal -0.928678 0.370887 -0.000006
-    outer loop
-      vertex -190.716019 5.482105 -497.096222
-      vertex -190.718307 5.476798 -470.000000
-      vertex -190.571716 5.843437 -496.543152
-    endloop
-  endfacet
-  facet normal 0.000000 0.735737 -0.677267
-    outer loop
-      vertex -190.417419 6.290874 -496.057098
-      vertex -90.000000 6.054916 -496.313416
-      vertex -90.000000 5.843437 -496.543152
-    endloop
-  endfacet
-  facet normal 0.000000 0.735729 -0.677275
-    outer loop
-      vertex -190.571716 5.843437 -496.543152
-      vertex -190.417419 6.290874 -496.057098
-      vertex -90.000000 5.843437 -496.543152
-    endloop
-  endfacet
-  facet normal 0.000000 -0.324699 0.945817
-    outer loop
-      vertex -90.000000 10.606782 -504.663116
-      vertex -190.144592 10.606782 -504.663116
-      vertex -190.053726 9.981941 -504.877625
-    endloop
-  endfacet
-  facet normal 0.000000 -0.324735 0.945805
-    outer loop
-      vertex -90.000000 10.310888 -504.764709
-      vertex -90.000000 10.606782 -504.663116
-      vertex -190.053726 9.981941 -504.877625
-    endloop
-  endfacet
-  facet normal -0.995389 -0.095925 0.000208
-    outer loop
-      vertex -190.064972 10.044221 -530.000000
-      vertex -190.030731 9.743214 -504.930389
-      vertex -190.053726 9.981941 -504.877625
-    endloop
-  endfacet
-  facet normal -0.995390 -0.095914 0.000208
-    outer loop
-      vertex -190.064972 10.044221 -530.000000
-      vertex -190.043121 9.817457 -530.000000
-      vertex -190.030731 9.743214 -504.930389
-    endloop
-  endfacet
-  facet normal 0.082581 -0.996584 0.000000
-    outer loop
-      vertex -201.696243 17.942308 -470.000000
-      vertex -201.785110 17.934942 -530.000000
-      vertex -201.000000 18.000000 -530.000000
-    endloop
-  endfacet
-  facet normal 0.082578 -0.996585 0.000000
-    outer loop
-      vertex -201.000000 18.000000 -470.000000
-      vertex -201.696243 17.942308 -470.000000
-      vertex -201.000000 18.000000 -530.000000
-    endloop
-  endfacet
-  facet normal -0.914052 0.405597 0.000002
-    outer loop
-      vertex -190.716019 5.482105 -497.096222
-      vertex -190.758972 5.385156 -470.000000
-      vertex -190.718307 5.476798 -470.000000
-    endloop
-  endfacet
-  facet normal -0.914034 0.405637 0.000002
-    outer loop
-      vertex -190.759033 5.385180 -497.317169
-      vertex -190.758972 5.385156 -470.000000
-      vertex -190.716019 5.482105 -497.096222
-    endloop
-  endfacet
-  facet normal 0.000000 0.837176 -0.546933
-    outer loop
-      vertex -190.571716 5.843437 -496.543152
-      vertex -90.000000 5.652749 -496.835022
-      vertex -90.000000 5.482105 -497.096222
-    endloop
-  endfacet
-  facet normal 0.000000 0.837171 -0.546941
-    outer loop
-      vertex -190.716019 5.482105 -497.096222
-      vertex -190.571716 5.843437 -496.543152
-      vertex -90.000000 5.482105 -497.096222
-    endloop
-  endfacet
-  facet normal 0.000000 0.837166 -0.546949
-    outer loop
-      vertex -190.571716 5.843437 -496.543152
-      vertex -90.000000 5.843437 -496.543152
-      vertex -90.000000 5.652749 -496.835022
-    endloop
-  endfacet
-  facet normal 0.000000 -0.324667 0.945828
-    outer loop
-      vertex -90.000000 9.981941 -504.877625
-      vertex -90.000000 10.310888 -504.764709
-      vertex -190.053726 9.981941 -504.877625
-    endloop
-  endfacet
-  facet normal -0.000181 -0.215833 0.976430
-    outer loop
-      vertex -90.000000 9.638894 -504.934875
-      vertex -190.053726 9.981941 -504.877625
-      vertex -190.030731 9.743214 -504.930389
-    endloop
-  endfacet
-  facet normal -0.000181 -0.215667 0.976467
-    outer loop
-      vertex -90.000000 9.525868 -504.959839
-      vertex -90.000000 9.638894 -504.934875
-      vertex -190.030731 9.743214 -504.930389
-    endloop
-  endfacet
-  facet normal -0.986359 -0.164609 0.000000
-    outer loop
-      vertex -190.043121 9.817457 -530.000000
-      vertex -190.030731 9.743214 -530.000000
-      vertex -190.030731 9.743214 -504.930389
-    endloop
-  endfacet
-  facet normal 0.082578 -0.996585 0.000000
-    outer loop
-      vertex -202.481354 17.877251 -470.000000
-      vertex -202.481354 17.877251 -530.000000
-      vertex -201.785110 17.934942 -530.000000
-    endloop
-  endfacet
-  facet normal 0.082581 -0.996584 0.000000
-    outer loop
-      vertex -201.696243 17.942308 -470.000000
-      vertex -202.481354 17.877251 -470.000000
-      vertex -201.785110 17.934942 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.915768 -0.401708
-    outer loop
-      vertex -190.716019 5.482105 -497.096222
-      vertex -90.000000 5.482105 -497.096222
-      vertex -90.000000 5.436376 -497.200470
-    endloop
-  endfacet
-  facet normal 0.000000 0.915761 -0.401724
-    outer loop
-      vertex -190.759033 5.385180 -497.317169
-      vertex -190.716019 5.482105 -497.096222
-      vertex -90.000000 5.436376 -497.200470
-    endloop
-  endfacet
-  facet normal -0.879454 0.475985 0.000002
-    outer loop
-      vertex -190.759033 5.385180 -497.317169
-      vertex -190.797836 5.313348 -470.000000
-      vertex -190.758972 5.385156 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.164613 0.986358
-    outer loop
-      vertex -90.000000 9.638894 -504.934875
-      vertex -90.000000 9.981941 -504.877625
-      vertex -190.053726 9.981941 -504.877625
-    endloop
-  endfacet
-  facet normal 0.000000 -0.134324 0.990937
-    outer loop
-      vertex -90.000000 9.525868 -504.959839
-      vertex -190.030731 9.743214 -504.930389
-      vertex -190.006058 9.330317 -504.986359
-    endloop
-  endfacet
-  facet normal 0.000000 -0.134386 0.990929
-    outer loop
-      vertex -90.000000 9.330317 -504.986359
-      vertex -90.000000 9.525868 -504.959839
-      vertex -190.006058 9.330317 -504.986359
-    endloop
-  endfacet
-  facet normal -0.998219 -0.059651 0.000000
-    outer loop
-      vertex -190.030731 9.743214 -530.000000
-      vertex -190.006058 9.330317 -504.986359
-      vertex -190.030731 9.743214 -504.930389
-    endloop
-  endfacet
-  facet normal -0.998220 -0.059639 0.000000
-    outer loop
-      vertex -190.030731 9.743214 -530.000000
-      vertex -190.007309 9.351182 -530.000000
-      vertex -190.006058 9.330317 -504.986359
-    endloop
-  endfacet
-  facet normal 0.245483 -0.969401 0.000000
-    outer loop
-      vertex -203.158600 17.705750 -470.000000
-      vertex -203.245056 17.683857 -530.000000
-      vertex -202.481354 17.877251 -530.000000
-    endloop
-  endfacet
-  facet normal 0.245484 -0.969401 0.000000
-    outer loop
-      vertex -202.481354 17.877251 -470.000000
-      vertex -203.158600 17.705750 -470.000000
-      vertex -202.481354 17.877251 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.915765 -0.401715
-    outer loop
-      vertex -190.759033 5.385180 -497.317169
-      vertex -90.000000 5.436376 -497.200470
-      vertex -90.000000 5.356950 -497.381531
-    endloop
-  endfacet
-  facet normal 0.000000 0.915776 -0.401689
-    outer loop
-      vertex -190.833801 5.216731 -497.701202
-      vertex -190.759033 5.385180 -497.317169
-      vertex -90.000000 5.356950 -497.381531
-    endloop
-  endfacet
-  facet normal -0.913816 0.406129 -0.000230
-    outer loop
-      vertex -190.759033 5.385180 -497.317169
-      vertex -190.868958 5.153321 -470.000000
-      vertex -190.797836 5.313348 -470.000000
-    endloop
-  endfacet
-  facet normal -0.913815 0.406131 -0.000230
-    outer loop
-      vertex -190.833801 5.216731 -497.701202
-      vertex -190.868958 5.153321 -470.000000
-      vertex -190.759033 5.385180 -497.317169
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -90.000000 9.330317 -504.986359
-      vertex -190.006058 9.330317 -504.986359
-      vertex -90.000000 8.982604 -504.986359
-    endloop
-  endfacet
-  facet normal -0.999833 -0.018254 0.000035
-    outer loop
-      vertex -190.007309 9.351182 -530.000000
-      vertex -190.000000 8.998481 -505.000000
-      vertex -190.006058 9.330317 -504.986359
-    endloop
-  endfacet
-  facet normal -0.999833 -0.018254 0.000035
-    outer loop
-      vertex -190.007309 9.351182 -530.000000
-      vertex -190.001556 9.036094 -530.000000
-      vertex -190.000000 8.998481 -505.000000
-    endloop
-  endfacet
-  facet normal 0.245484 -0.969401 0.000000
-    outer loop
-      vertex -203.922302 17.512356 -470.000000
-      vertex -203.922302 17.512356 -530.000000
-      vertex -203.245056 17.683857 -530.000000
-    endloop
-  endfacet
-  facet normal 0.245483 -0.969401 0.000000
-    outer loop
-      vertex -203.158600 17.705750 -470.000000
-      vertex -203.922302 17.512356 -470.000000
-      vertex -203.245056 17.683857 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.915775 -0.401692
-    outer loop
-      vertex -190.833801 5.216731 -497.701202
-      vertex -90.000000 5.356950 -497.381531
-      vertex -90.000000 5.216731 -497.701202
-    endloop
-  endfacet
-  facet normal -0.904718 0.426011 -0.000173
-    outer loop
-      vertex -190.833801 5.216731 -497.701202
-      vertex -190.910950 5.064143 -470.000000
-      vertex -190.868958 5.153321 -470.000000
-    endloop
-  endfacet
-  facet normal -0.904710 0.426027 -0.000173
-    outer loop
-      vertex -190.877899 5.122957 -498.015839
-      vertex -190.910950 5.064143 -470.000000
-      vertex -190.833801 5.216731 -497.701202
-    endloop
-  endfacet
-  facet normal -0.000143 -0.041077 0.999156
-    outer loop
-      vertex -90.000000 8.982604 -504.986359
-      vertex -190.006058 9.330317 -504.986359
-      vertex -190.000000 8.998481 -505.000000
-    endloop
-  endfacet
-  facet normal -0.000143 -0.041128 0.999154
-    outer loop
-      vertex -90.000000 8.825429 -504.992828
-      vertex -90.000000 8.982604 -504.986359
-      vertex -190.000000 8.998481 -505.000000
-    endloop
-  endfacet
-  facet normal -0.999830 0.018424 0.000090
-    outer loop
-      vertex -190.007309 8.723928 -530.000000
-      vertex -190.006058 8.669682 -504.986359
-      vertex -190.000000 8.998481 -505.000000
-    endloop
-  endfacet
-  facet normal -0.999830 0.018425 0.000090
-    outer loop
-      vertex -190.001556 9.036094 -530.000000
-      vertex -190.007309 8.723928 -530.000000
-      vertex -190.000000 8.998481 -505.000000
-    endloop
-  endfacet
-  facet normal 0.401696 -0.915773 0.000000
-    outer loop
-      vertex -204.562073 17.231722 -470.000000
-      vertex -204.643753 17.195898 -530.000000
-      vertex -203.922302 17.512356 -530.000000
-    endloop
-  endfacet
-  facet normal 0.401701 -0.915771 0.000000
-    outer loop
-      vertex -203.922302 17.512356 -470.000000
-      vertex -204.562073 17.231722 -470.000000
-      vertex -203.922302 17.512356 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.958339 -0.285634
-    outer loop
-      vertex -190.833801 5.216731 -497.701202
-      vertex -90.000000 5.216731 -497.701202
-      vertex -90.000000 5.172516 -497.849548
-    endloop
-  endfacet
-  facet normal 0.000000 0.958342 -0.285623
-    outer loop
-      vertex -190.877899 5.122957 -498.015839
-      vertex -190.833801 5.216731 -497.701202
-      vertex -90.000000 5.172516 -497.849548
-    endloop
-  endfacet
-  facet normal -0.900340 0.435187 -0.000149
-    outer loop
-      vertex -190.877899 5.122957 -498.015839
-      vertex -190.942444 4.998986 -470.000000
-      vertex -190.910950 5.064143 -470.000000
-    endloop
-  endfacet
-  facet normal -0.900362 0.435142 -0.000149
-    outer loop
-      vertex -190.910904 5.054554 -498.341614
-      vertex -190.942444 4.998986 -470.000000
-      vertex -190.877899 5.122957 -498.015839
-    endloop
-  endfacet
-  facet normal 0.000000 0.041453 0.999140
-    outer loop
-      vertex -90.000000 8.669682 -504.986359
-      vertex -190.000000 8.998481 -505.000000
-      vertex -190.006058 8.669682 -504.986359
-    endloop
-  endfacet
-  facet normal 0.000000 0.041504 0.999138
-    outer loop
-      vertex -90.000000 8.669682 -504.986359
-      vertex -90.000000 8.825429 -504.992828
-      vertex -190.000000 8.998481 -505.000000
-    endloop
-  endfacet
-  facet normal -0.998218 0.059675 0.000179
-    outer loop
-      vertex -190.030731 8.332056 -530.000000
-      vertex -190.030731 8.256785 -504.930389
-      vertex -190.006058 8.669682 -504.986359
-    endloop
-  endfacet
-  facet normal -0.998219 0.059664 0.000179
-    outer loop
-      vertex -190.007309 8.723928 -530.000000
-      vertex -190.030731 8.332056 -530.000000
-      vertex -190.006058 8.669682 -504.986359
-    endloop
-  endfacet
-  facet normal 0.401701 -0.915771 0.000000
-    outer loop
-      vertex -205.283524 16.915264 -470.000000
-      vertex -205.283524 16.915264 -530.000000
-      vertex -204.643753 17.195898 -530.000000
-    endloop
-  endfacet
-  facet normal 0.401696 -0.915773 0.000000
-    outer loop
-      vertex -204.562073 17.231722 -470.000000
-      vertex -205.283524 16.915264 -470.000000
-      vertex -204.643753 17.195898 -530.000000
-    endloop
-  endfacet
-  facet normal -0.000072 0.969402 -0.245478
-    outer loop
-      vertex -190.877899 5.122957 -498.015839
-      vertex -90.000000 5.172516 -497.849548
-      vertex -90.000000 5.086806 -498.188019
-    endloop
-  endfacet
-  facet normal 0.000000 0.978657 -0.205498
-    outer loop
-      vertex -190.877899 5.122957 -498.015839
-      vertex -90.000000 5.086806 -498.188019
-      vertex -90.000000 5.054554 -498.341614
-    endloop
-  endfacet
-  facet normal 0.000000 0.978660 -0.205487
-    outer loop
-      vertex -190.910904 5.054554 -498.341614
-      vertex -190.877899 5.122957 -498.015839
-      vertex -90.000000 5.054554 -498.341614
-    endloop
-  endfacet
-  facet normal -0.897122 0.441784 -0.000132
-    outer loop
-      vertex -190.910904 5.054554 -498.341614
-      vertex -190.961700 4.959882 -470.000000
-      vertex -190.942444 4.998986 -470.000000
-    endloop
-  endfacet
-  facet normal -0.897133 0.441762 -0.000132
-    outer loop
-      vertex -190.930969 5.013708 -498.669128
-      vertex -190.961700 4.959882 -470.000000
-      vertex -190.910904 5.054554 -498.341614
-    endloop
-  endfacet
-  facet normal 0.000000 0.164564 0.986367
-    outer loop
-      vertex -90.000000 8.326712 -504.929138
-      vertex -90.000000 8.669682 -504.986359
-      vertex -190.006058 8.669682 -504.986359
-    endloop
-  endfacet
-  facet normal -0.000106 0.134331 0.990937
-    outer loop
-      vertex -90.000000 8.131121 -504.902618
-      vertex -190.006058 8.669682 -504.986359
-      vertex -190.030731 8.256785 -504.930389
-    endloop
-  endfacet
-  facet normal -0.000106 0.134359 0.990933
-    outer loop
-      vertex -90.000000 8.131121 -504.902618
-      vertex -90.000000 8.326712 -504.929138
-      vertex -190.006058 8.669682 -504.986359
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -190.030731 8.332056 -530.000000
-      vertex -190.030731 8.256785 -530.000000
-      vertex -190.030731 8.256785 -504.930389
-    endloop
-  endfacet
-  facet normal 0.546945 -0.837169 0.000000
-    outer loop
-      vertex -205.868393 16.533154 -470.000000
-      vertex -205.943054 16.484375 -530.000000
-      vertex -205.283524 16.915264 -530.000000
-    endloop
-  endfacet
-  facet normal 0.546944 -0.837169 0.000000
-    outer loop
-      vertex -205.283524 16.915264 -470.000000
-      vertex -205.868393 16.533154 -470.000000
-      vertex -205.283524 16.915264 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.992313 -0.123754
-    outer loop
-      vertex -190.910904 5.054554 -498.341614
-      vertex -90.000000 5.054554 -498.341614
-      vertex -90.000000 5.035300 -498.496002
-    endloop
-  endfacet
-  facet normal 0.000000 0.992312 -0.123759
-    outer loop
-      vertex -190.930969 5.013708 -498.669128
-      vertex -190.910904 5.054554 -498.341614
-      vertex -90.000000 5.035300 -498.496002
-    endloop
-  endfacet
-  facet normal -0.895336 0.445391 -0.000124
-    outer loop
-      vertex -190.930969 5.013708 -498.669128
-      vertex -190.968414 4.946385 -470.000000
-      vertex -190.961700 4.959882 -470.000000
-    endloop
-  endfacet
-  facet normal -0.895303 0.445458 -0.000123
-    outer loop
-      vertex -190.937744 5.000000 -499.000000
-      vertex -190.968414 4.946385 -470.000000
-      vertex -190.930969 5.013708 -498.669128
-    endloop
-  endfacet
-  facet normal 0.000000 0.215817 0.976434
-    outer loop
-      vertex -90.000000 8.018058 -504.877625
-      vertex -190.030731 8.256785 -504.930389
-      vertex -190.053726 8.018058 -504.877625
-    endloop
-  endfacet
-  facet normal 0.000000 0.215851 0.976426
-    outer loop
-      vertex -90.000000 8.018058 -504.877625
-      vertex -90.000000 8.131121 -504.902618
-      vertex -190.030731 8.256785 -504.930389
-    endloop
-  endfacet
-  facet normal -0.995393 0.095879 0.000000
-    outer loop
-      vertex -190.052567 8.030170 -530.000000
-      vertex -190.053726 8.018058 -504.877625
-      vertex -190.030731 8.256785 -504.930389
-    endloop
-  endfacet
-  facet normal -0.995390 0.095910 0.000000
-    outer loop
-      vertex -190.030731 8.256785 -530.000000
-      vertex -190.052567 8.030170 -530.000000
-      vertex -190.030731 8.256785 -504.930389
-    endloop
-  endfacet
-  facet normal 0.546944 -0.837169 0.000000
-    outer loop
-      vertex -206.527924 16.102264 -470.000000
-      vertex -206.527924 16.102264 -530.000000
-      vertex -205.943054 16.484375 -530.000000
-    endloop
-  endfacet
-  facet normal 0.546945 -0.837169 0.000000
-    outer loop
-      vertex -205.868393 16.533154 -470.000000
-      vertex -206.527924 16.102264 -470.000000
-      vertex -205.943054 16.484375 -530.000000
-    endloop
-  endfacet
-  facet normal -0.000072 0.996584 -0.082583
-    outer loop
-      vertex -190.930969 5.013708 -498.669128
-      vertex -90.000000 5.035300 -498.496002
-      vertex -90.000000 5.006461 -498.844025
-    endloop
-  endfacet
-  facet normal -0.868002 0.496561 0.000000
-    outer loop
-      vertex -190.937744 5.000000 -499.000000
-      vertex -191.465500 4.077466 -470.000000
-      vertex -190.968414 4.946385 -470.000000
-    endloop
-  endfacet
-  facet normal -0.868002 0.496561 0.000000
-    outer loop
-      vertex -190.970398 4.942916 -530.000000
-      vertex -191.465500 4.077466 -530.000000
-      vertex -190.937744 5.000000 -499.000000
-    endloop
-  endfacet
-  facet normal -0.868002 0.496560 0.000000
-    outer loop
-      vertex -191.465500 4.077466 -530.000000
-      vertex -191.465500 4.077466 -470.000000
-      vertex -190.937744 5.000000 -499.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.999143 -0.041392
-    outer loop
-      vertex -190.930969 5.013708 -498.669128
-      vertex -90.000000 5.006461 -498.844025
-      vertex -90.000000 5.000000 -499.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.999143 -0.041395
-    outer loop
-      vertex -190.937744 5.000000 -499.000000
-      vertex -190.930969 5.013708 -498.669128
-      vertex -90.000000 5.000000 -499.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.324700 0.945817
-    outer loop
-      vertex -90.000000 7.722306 -504.776093
-      vertex -90.000000 8.018058 -504.877625
-      vertex -190.053726 8.018058 -504.877625
-    endloop
-  endfacet
-  facet normal 0.000000 0.324700 0.945817
-    outer loop
-      vertex -90.000000 7.722306 -504.776093
-      vertex -190.053726 8.018058 -504.877625
-      vertex -190.144592 7.393218 -504.663116
-    endloop
-  endfacet
-  facet normal -0.989590 0.143917 0.000023
-    outer loop
-      vertex -190.138763 7.437390 -530.000000
-      vertex -190.144592 7.393218 -504.663116
-      vertex -190.053726 8.018058 -504.877625
-    endloop
-  endfacet
-  facet normal -0.989593 0.143898 0.000024
-    outer loop
-      vertex -190.052567 8.030170 -530.000000
-      vertex -190.138763 7.437390 -530.000000
-      vertex -190.053726 8.018058 -504.877625
-    endloop
-  endfacet
-  facet normal 0.677284 -0.735722 0.000000
-    outer loop
-      vertex -207.041916 15.629101 -470.000000
-      vertex -207.107529 15.568697 -530.000000
-      vertex -206.527924 16.102264 -530.000000
-    endloop
-  endfacet
-  facet normal 0.677282 -0.735724 0.000000
-    outer loop
-      vertex -206.527924 16.102264 -470.000000
-      vertex -207.041916 15.629101 -470.000000
-      vertex -206.527924 16.102264 -530.000000
-    endloop
-  endfacet
-  facet normal -0.868096 0.496396 0.000000
-    outer loop
-      vertex -190.968414 4.946385 -530.000000
-      vertex -190.970398 4.942916 -530.000000
-      vertex -190.937744 5.000000 -501.000000
-    endloop
-  endfacet
-  facet normal -0.868015 0.496539 0.000000
-    outer loop
-      vertex -190.970398 4.942916 -530.000000
-      vertex -190.937744 5.000000 -499.000000
-      vertex -190.937744 5.000000 -501.000000
-    endloop
-  endfacet
-  facet normal -0.789137 0.614217 0.000000
-    outer loop
-      vertex -191.894608 3.526156 -530.000000
-      vertex -191.949387 3.455776 -470.000000
-      vertex -191.465500 4.077466 -470.000000
-    endloop
-  endfacet
-  facet normal -0.789137 0.614218 0.000000
-    outer loop
-      vertex -191.465500 4.077466 -530.000000
-      vertex -191.894608 3.526156 -530.000000
-      vertex -191.465500 4.077466 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -190.937744 5.000000 -499.000000
-      vertex -90.000000 5.000000 -499.000000
-      vertex -90.000000 5.000000 -500.057281
-    endloop
-  endfacet
-  facet normal 0.000000 0.324699 0.945817
-    outer loop
-      vertex -90.000000 7.393218 -504.663116
-      vertex -90.000000 7.722306 -504.776093
-      vertex -190.144592 7.393218 -504.663116
-    endloop
-  endfacet
-  facet normal -0.977488 0.210993 0.000143
-    outer loop
-      vertex -190.257584 6.886968 -530.000000
-      vertex -190.269958 6.812207 -504.348694
-      vertex -190.144592 7.393218 -504.663116
-    endloop
-  endfacet
-  facet normal -0.977484 0.211010 0.000143
-    outer loop
-      vertex -190.138763 7.437390 -530.000000
-      vertex -190.257584 6.886968 -530.000000
-      vertex -190.144592 7.393218 -504.663116
-    endloop
-  endfacet
-  facet normal 0.677282 -0.735724 0.000000
-    outer loop
-      vertex -207.621521 15.095533 -470.000000
-      vertex -207.621521 15.095533 -530.000000
-      vertex -207.107529 15.568697 -530.000000
-    endloop
-  endfacet
-  facet normal 0.677284 -0.735722 0.000000
-    outer loop
-      vertex -207.041916 15.629101 -470.000000
-      vertex -207.621521 15.095533 -470.000000
-      vertex -207.107529 15.568697 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -190.937744 5.000000 -501.000000
-      vertex -90.000000 5.000000 -500.057281
-      vertex -90.000000 5.000000 -501.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -190.937744 5.000000 -501.000000
-      vertex -190.937744 5.000000 -499.000000
-      vertex -90.000000 5.000000 -500.057281
-    endloop
-  endfacet
-  facet normal -0.879512 0.475877 0.000050
-    outer loop
-      vertex -190.927307 5.022359 -530.000000
-      vertex -190.968414 4.946385 -530.000000
-      vertex -190.937744 5.000000 -501.000000
-    endloop
-  endfacet
-  facet normal -0.789137 0.614218 0.000000
-    outer loop
-      vertex -192.378494 2.904465 -530.000000
-      vertex -192.378494 2.904465 -470.000000
-      vertex -191.949387 3.455776 -470.000000
-    endloop
-  endfacet
-  facet normal -0.789137 0.614217 0.000000
-    outer loop
-      vertex -191.894608 3.526156 -530.000000
-      vertex -192.378494 2.904465 -530.000000
-      vertex -191.949387 3.455776 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.475908 0.879495
-    outer loop
-      vertex -90.000000 7.118392 -504.514404
-      vertex -90.000000 7.393218 -504.663116
-      vertex -190.144592 7.393218 -504.663116
-    endloop
-  endfacet
-  facet normal 0.000000 0.475942 0.879477
-    outer loop
-      vertex -90.000000 7.118392 -504.514404
-      vertex -190.144592 7.393218 -504.663116
-      vertex -190.269958 6.812207 -504.348694
-    endloop
-  endfacet
-  facet normal -0.961957 0.273200 0.000332
-    outer loop
-      vertex -190.263336 6.866718 -530.000000
-      vertex -190.276031 6.790803 -504.332001
-      vertex -190.269958 6.812207 -504.348694
-    endloop
-  endfacet
-  facet normal -0.961937 0.273273 0.000332
-    outer loop
-      vertex -190.257584 6.886968 -530.000000
-      vertex -190.263336 6.866718 -530.000000
-      vertex -190.269958 6.812207 -504.348694
-    endloop
-  endfacet
-  facet normal 0.789137 -0.614218 0.000000
-    outer loop
-      vertex -207.621521 15.095533 -530.000000
-      vertex -207.621521 15.095533 -470.000000
-      vertex -208.050629 14.544223 -470.000000
-    endloop
-  endfacet
-  facet normal 0.789137 -0.614218 0.000000
-    outer loop
-      vertex -208.105408 14.473844 -530.000000
-      vertex -207.621521 15.095533 -530.000000
-      vertex -208.050629 14.544223 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.999138 0.041517
-    outer loop
-      vertex -190.930923 5.013789 -501.331879
-      vertex -90.000000 5.000000 -501.000000
-      vertex -90.000000 5.006500 -501.156433
-    endloop
-  endfacet
-  facet normal 0.000000 0.999138 0.041514
-    outer loop
-      vertex -190.930923 5.013789 -501.331879
-      vertex -190.937744 5.000000 -501.000000
-      vertex -90.000000 5.000000 -501.000000
-    endloop
-  endfacet
-  facet normal -0.896122 0.443807 0.000020
-    outer loop
-      vertex -190.920990 5.035115 -530.000000
-      vertex -190.927307 5.022359 -530.000000
-      vertex -190.930923 5.013789 -501.331879
-    endloop
-  endfacet
-  facet normal -0.896159 0.443733 0.000020
-    outer loop
-      vertex -190.927307 5.022359 -530.000000
-      vertex -190.937744 5.000000 -501.000000
-      vertex -190.930923 5.013789 -501.331879
-    endloop
-  endfacet
-  facet normal -0.677282 0.735724 0.000000
-    outer loop
-      vertex -192.378494 2.904465 -470.000000
-      vertex -192.378494 2.904465 -530.000000
-      vertex -192.892487 2.431302 -530.000000
-    endloop
-  endfacet
-  facet normal -0.677284 0.735722 0.000000
-    outer loop
-      vertex -192.958099 2.370898 -470.000000
-      vertex -192.378494 2.904465 -470.000000
-      vertex -192.892487 2.431302 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.475972 0.879460
-    outer loop
-      vertex -90.000000 6.812207 -504.348694
-      vertex -90.000000 7.118392 -504.514404
-      vertex -190.269958 6.812207 -504.348694
-    endloop
-  endfacet
-  facet normal 0.000000 0.615397 0.788217
-    outer loop
-      vertex -90.000000 6.802083 -504.340790
-      vertex -90.000000 6.812207 -504.348694
-      vertex -190.269958 6.812207 -504.348694
-    endloop
-  endfacet
-  facet normal 0.000000 0.614990 0.788535
-    outer loop
-      vertex -90.000000 6.802083 -504.340790
-      vertex -190.269958 6.812207 -504.348694
-      vertex -190.276031 6.790803 -504.332001
-    endloop
-  endfacet
-  facet normal -0.986371 0.164535 -0.000001
-    outer loop
-      vertex -190.263336 6.866718 -530.000000
-      vertex -190.276001 6.790794 -530.000000
-      vertex -190.276031 6.790803 -504.332001
-    endloop
-  endfacet
-  facet normal 0.789137 -0.614218 0.000000
-    outer loop
-      vertex -208.105408 14.473844 -530.000000
-      vertex -208.050629 14.544223 -470.000000
-      vertex -208.534515 13.922533 -470.000000
-    endloop
-  endfacet
-  facet normal 0.789137 -0.614218 0.000000
-    outer loop
-      vertex -208.534515 13.922533 -530.000000
-      vertex -208.105408 14.473844 -530.000000
-      vertex -208.534515 13.922533 -470.000000
-    endloop
-  endfacet
-  facet normal -0.000072 0.996585 0.082575
-    outer loop
-      vertex -190.930923 5.013789 -501.331879
-      vertex -90.000000 5.006500 -501.156433
-      vertex -90.000000 5.035339 -501.504486
-    endloop
-  endfacet
-  facet normal -0.897463 0.441089 0.000017
-    outer loop
-      vertex -190.902206 5.073333 -530.000000
-      vertex -190.920990 5.035115 -530.000000
-      vertex -190.910904 5.054554 -501.658386
-    endloop
-  endfacet
-  facet normal -0.897549 0.440916 0.000017
-    outer loop
-      vertex -190.920990 5.035115 -530.000000
-      vertex -190.930923 5.013789 -501.331879
-      vertex -190.910904 5.054554 -501.658386
-    endloop
-  endfacet
-  facet normal -0.677284 0.735722 0.000000
-    outer loop
-      vertex -192.958099 2.370898 -470.000000
-      vertex -192.892487 2.431302 -530.000000
-      vertex -193.472092 1.897735 -530.000000
-    endloop
-  endfacet
-  facet normal -0.677282 0.735724 0.000000
-    outer loop
-      vertex -193.472092 1.897735 -470.000000
-      vertex -192.958099 2.370898 -470.000000
-      vertex -193.472092 1.897735 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.614203 0.789148
-    outer loop
-      vertex -90.000000 6.527339 -504.126953
-      vertex -90.000000 6.802083 -504.340790
-      vertex -190.276031 6.790803 -504.332001
-    endloop
-  endfacet
-  facet normal -0.962258 0.272141 -0.000001
-    outer loop
-      vertex -190.409958 6.317125 -530.000000
-      vertex -190.417419 6.290874 -503.942902
-      vertex -190.276031 6.790803 -504.332001
-    endloop
-  endfacet
-  facet normal -0.962260 0.272134 -0.000001
-    outer loop
-      vertex -190.276001 6.790794 -530.000000
-      vertex -190.409958 6.317125 -530.000000
-      vertex -190.276031 6.790803 -504.332001
-    endloop
-  endfacet
-  facet normal 0.868006 -0.496553 0.000000
-    outer loop
-      vertex -209.062256 13.000000 -494.000000
-      vertex -208.534515 13.922533 -470.000000
-      vertex -209.036621 13.044820 -470.000000
-    endloop
-  endfacet
-  facet normal 0.868011 -0.496545 0.000000
-    outer loop
-      vertex -209.024704 13.065635 -530.000000
-      vertex -208.534515 13.922533 -530.000000
-      vertex -209.062256 13.000000 -494.000000
-    endloop
-  endfacet
-  facet normal 0.868008 -0.496549 0.000000
-    outer loop
-      vertex -208.534515 13.922533 -530.000000
-      vertex -208.534515 13.922533 -470.000000
-      vertex -209.062256 13.000000 -494.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.992295 0.123895
-    outer loop
-      vertex -190.910904 5.054554 -501.658386
-      vertex -90.000000 5.035339 -501.504486
-      vertex -90.000000 5.054554 -501.658386
-    endloop
-  endfacet
-  facet normal 0.000000 0.992296 0.123891
-    outer loop
-      vertex -190.910904 5.054554 -501.658386
-      vertex -190.930923 5.013789 -501.331879
-      vertex -90.000000 5.035339 -501.504486
-    endloop
-  endfacet
-  facet normal -0.900643 0.434559 0.000012
-    outer loop
-      vertex -190.871490 5.136993 -530.000000
-      vertex -190.902206 5.073333 -530.000000
-      vertex -190.878250 5.122224 -501.981262
-    endloop
-  endfacet
-  facet normal -0.900604 0.434641 0.000012
-    outer loop
-      vertex -190.902206 5.073333 -530.000000
-      vertex -190.910904 5.054554 -501.658386
-      vertex -190.878250 5.122224 -501.981262
-    endloop
-  endfacet
-  facet normal -0.546954 0.837163 0.000000
-    outer loop
-      vertex -193.472092 1.897735 -470.000000
-      vertex -193.472092 1.897735 -530.000000
-      vertex -194.056946 1.515625 -530.000000
-    endloop
-  endfacet
-  facet normal -0.546945 0.837168 0.000000
-    outer loop
-      vertex -194.131622 1.466845 -470.000000
-      vertex -193.472092 1.897735 -470.000000
-      vertex -194.056946 1.515625 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.614220 0.789135
-    outer loop
-      vertex -90.000000 6.290874 -503.942902
-      vertex -90.000000 6.527339 -504.126953
-      vertex -190.276031 6.790803 -504.332001
-    endloop
-  endfacet
-  facet normal 0.000000 0.614201 0.789149
-    outer loop
-      vertex -90.000000 6.290874 -503.942902
-      vertex -190.276031 6.790803 -504.332001
-      vertex -190.417419 6.290874 -503.942902
-    endloop
-  endfacet
-  facet normal -0.945348 0.326063 0.000058
-    outer loop
-      vertex -190.555878 5.894070 -530.000000
-      vertex -190.571716 5.843437 -503.456818
-      vertex -190.417419 6.290874 -503.942902
-    endloop
-  endfacet
-  facet normal -0.945346 0.326068 0.000058
-    outer loop
-      vertex -190.409958 6.317125 -530.000000
-      vertex -190.555878 5.894070 -530.000000
-      vertex -190.417419 6.290874 -503.942902
-    endloop
-  endfacet
-  facet normal 0.867832 -0.496858 -0.000001
-    outer loop
-      vertex -209.036621 13.044820 -530.000000
-      vertex -209.024704 13.065635 -530.000000
-      vertex -209.062256 13.000000 -505.999969
-    endloop
-  endfacet
-  facet normal 0.867979 -0.496601 0.000000
-    outer loop
-      vertex -209.024704 13.065635 -530.000000
-      vertex -209.062256 13.000000 -494.000000
-      vertex -209.062256 13.000000 -505.999969
-    endloop
-  endfacet
-  facet normal 0.895214 -0.445636 -0.000124
-    outer loop
-      vertex -209.069046 12.986291 -493.669128
-      vertex -209.036621 13.044820 -470.000000
-      vertex -209.043411 13.031179 -470.000000
-    endloop
-  endfacet
-  facet normal 0.894924 -0.446218 -0.000123
-    outer loop
-      vertex -209.062256 13.000000 -494.000000
-      vertex -209.036621 13.044820 -470.000000
-      vertex -209.069046 12.986291 -493.669128
-    endloop
-  endfacet
-  facet normal 0.000000 0.978739 0.205109
-    outer loop
-      vertex -190.878250 5.122224 -501.981262
-      vertex -90.000000 5.054554 -501.658386
-      vertex -90.000000 5.086461 -501.810638
-    endloop
-  endfacet
-  facet normal 0.000000 0.978735 0.205127
-    outer loop
-      vertex -190.878250 5.122224 -501.981262
-      vertex -190.910904 5.054554 -501.658386
-      vertex -90.000000 5.054554 -501.658386
-    endloop
-  endfacet
-  facet normal -0.904911 0.425601 0.000006
-    outer loop
-      vertex -190.829590 5.226082 -530.000000
-      vertex -190.871490 5.136993 -530.000000
-      vertex -190.833801 5.216731 -502.298767
-    endloop
-  endfacet
-  facet normal -0.904903 0.425618 0.000006
-    outer loop
-      vertex -190.871490 5.136993 -530.000000
-      vertex -190.878250 5.122224 -501.981262
-      vertex -190.833801 5.216731 -502.298767
-    endloop
-  endfacet
-  facet normal -0.546945 0.837168 0.000000
-    outer loop
-      vertex -194.131622 1.466845 -470.000000
-      vertex -194.056946 1.515625 -530.000000
-      vertex -194.716476 1.084736 -530.000000
-    endloop
-  endfacet
-  facet normal -0.546954 0.837163 0.000000
-    outer loop
-      vertex -194.716476 1.084736 -470.000000
-      vertex -194.131622 1.466845 -470.000000
-      vertex -194.716476 1.084736 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.735742 0.677262
-    outer loop
-      vertex -190.417419 6.290874 -503.942902
-      vertex -90.000000 6.079566 -503.713348
-      vertex -90.000000 6.290874 -503.942902
-    endloop
-  endfacet
-  facet normal 0.000000 0.735751 0.677253
-    outer loop
-      vertex -190.417419 6.290874 -503.942902
-      vertex -190.571716 5.843437 -503.456818
-      vertex -90.000000 6.079566 -503.713348
-    endloop
-  endfacet
-  facet normal -0.928601 0.371080 0.000154
-    outer loop
-      vertex -190.555878 5.894070 -530.000000
-      vertex -190.692001 5.553431 -530.000000
-      vertex -190.571716 5.843437 -503.456818
-    endloop
-  endfacet
-  facet normal -0.928600 0.371083 0.000154
-    outer loop
-      vertex -190.692001 5.553431 -530.000000
-      vertex -190.716019 5.482105 -502.903809
-      vertex -190.571716 5.843437 -503.456818
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -230.000000 13.000000 -494.253540
-      vertex -230.000000 13.000000 -505.999969
-      vertex -209.062256 13.000000 -505.999969
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -230.000000 13.000000 -494.253540
-      vertex -209.062256 13.000000 -505.999969
-      vertex -209.062256 13.000000 -494.000000
-    endloop
-  endfacet
-  facet normal 0.879521 -0.475861 0.000051
-    outer loop
-      vertex -209.070984 12.981308 -530.000000
-      vertex -209.036621 13.044820 -530.000000
-      vertex -209.062256 13.000000 -505.999969
-    endloop
-  endfacet
-  facet normal 0.897251 -0.441521 -0.000134
-    outer loop
-      vertex -209.089096 12.945445 -493.341614
-      vertex -209.043411 13.031179 -470.000000
-      vertex -209.062851 12.991674 -470.000000
-    endloop
-  endfacet
-  facet normal 0.897254 -0.441514 -0.000134
-    outer loop
-      vertex -209.069046 12.986291 -493.669128
-      vertex -209.043411 13.031179 -470.000000
-      vertex -209.089096 12.945445 -493.341614
-    endloop
-  endfacet
-  facet normal 0.000000 -0.999143 -0.041398
-    outer loop
-      vertex -230.000000 13.000000 -494.000000
-      vertex -209.062256 13.000000 -494.000000
-      vertex -209.069046 12.986291 -493.669128
-    endloop
-  endfacet
-  facet normal 0.000000 -0.999143 -0.041397
-    outer loop
-      vertex -230.000000 12.986581 -493.676117
-      vertex -230.000000 13.000000 -494.000000
-      vertex -209.069046 12.986291 -493.669128
-    endloop
-  endfacet
-  facet normal -0.000072 0.969392 0.245518
-    outer loop
-      vertex -190.878250 5.122224 -501.981262
-      vertex -90.000000 5.086461 -501.810638
-      vertex -90.000000 5.172170 -502.149048
-    endloop
-  endfacet
-  facet normal -0.913986 0.405746 -0.000002
-    outer loop
-      vertex -190.758972 5.385156 -530.000000
-      vertex -190.829590 5.226082 -530.000000
-      vertex -190.759033 5.385180 -502.682800
-    endloop
-  endfacet
-  facet normal -0.914011 0.405689 -0.000002
-    outer loop
-      vertex -190.829590 5.226082 -530.000000
-      vertex -190.833801 5.216731 -502.298767
-      vertex -190.759033 5.385180 -502.682800
-    endloop
-  endfacet
-  facet normal 0.000000 0.958450 0.285260
-    outer loop
-      vertex -190.833801 5.216731 -502.298767
-      vertex -90.000000 5.172170 -502.149048
-      vertex -90.000000 5.216731 -502.298767
-    endloop
-  endfacet
-  facet normal 0.000000 0.958443 0.285285
-    outer loop
-      vertex -190.833801 5.216731 -502.298767
-      vertex -190.878250 5.122224 -501.981262
-      vertex -90.000000 5.172170 -502.149048
-    endloop
-  endfacet
-  facet normal -0.401700 0.915771 0.000000
-    outer loop
-      vertex -194.716476 1.084736 -470.000000
-      vertex -194.716476 1.084736 -530.000000
-      vertex -195.356247 0.804103 -530.000000
-    endloop
-  endfacet
-  facet normal -0.401696 0.915773 0.000000
-    outer loop
-      vertex -195.437927 0.768277 -470.000000
-      vertex -194.716476 1.084736 -470.000000
-      vertex -195.356247 0.804103 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.735759 0.677244
-    outer loop
-      vertex -190.571716 5.843437 -503.456818
-      vertex -90.000000 5.843437 -503.456818
-      vertex -90.000000 6.079566 -503.713348
-    endloop
-  endfacet
-  facet normal 0.000000 0.837131 0.547002
-    outer loop
-      vertex -190.571716 5.843437 -503.456818
-      vertex -90.000000 5.672922 -503.195862
-      vertex -90.000000 5.843437 -503.456818
-    endloop
-  endfacet
-  facet normal 0.000000 0.837143 0.546984
-    outer loop
-      vertex -190.571716 5.843437 -503.456818
-      vertex -190.716019 5.482105 -502.903809
-      vertex -90.000000 5.672922 -503.195862
-    endloop
-  endfacet
-  facet normal -0.913815 0.406131 0.000259
-    outer loop
-      vertex -190.692001 5.553431 -530.000000
-      vertex -190.732468 5.462380 -530.000000
-      vertex -190.716019 5.482105 -502.903809
-    endloop
-  endfacet
-  facet normal -0.913813 0.406135 0.000259
-    outer loop
-      vertex -190.732468 5.462380 -530.000000
-      vertex -190.759033 5.385180 -502.682800
-      vertex -190.716019 5.482105 -502.903809
-    endloop
-  endfacet
-  facet normal 0.000000 -0.999138 0.041518
-    outer loop
-      vertex -230.000000 13.000000 -505.999969
-      vertex -230.000000 12.986501 -506.324829
-      vertex -209.069092 12.986210 -506.331848
-    endloop
-  endfacet
-  facet normal 0.000000 -0.999138 0.041516
-    outer loop
-      vertex -230.000000 13.000000 -505.999969
-      vertex -209.069092 12.986210 -506.331848
-      vertex -209.062256 13.000000 -505.999969
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -230.000000 13.000000 -494.000000
-      vertex -230.000000 13.000000 -494.253540
-      vertex -209.062256 13.000000 -494.000000
-    endloop
-  endfacet
-  facet normal 0.895763 -0.444533 0.000020
-    outer loop
-      vertex -209.077377 12.968425 -530.000000
-      vertex -209.070984 12.981308 -530.000000
-      vertex -209.069092 12.986210 -506.331848
-    endloop
-  endfacet
-  facet normal 0.895763 -0.444533 0.000020
-    outer loop
-      vertex -209.070984 12.981308 -530.000000
-      vertex -209.062256 13.000000 -505.999969
-      vertex -209.069092 12.986210 -506.331848
-    endloop
-  endfacet
-  facet normal 0.000000 -0.992313 -0.123756
-    outer loop
-      vertex -230.000000 12.985428 -493.662201
-      vertex -209.069046 12.986291 -493.669128
-      vertex -209.089096 12.945445 -493.341614
-    endloop
-  endfacet
-  facet normal 0.000000 -0.992312 -0.123759
-    outer loop
-      vertex -230.000000 12.945445 -493.341614
-      vertex -230.000000 12.985428 -493.662201
-      vertex -209.089096 12.945445 -493.341614
-    endloop
-  endfacet
-  facet normal 0.900352 -0.435162 -0.000150
-    outer loop
-      vertex -209.122101 12.877043 -493.015869
-      vertex -209.062851 12.991674 -470.000000
-      vertex -209.094666 12.925850 -470.000000
-    endloop
-  endfacet
-  facet normal 0.900359 -0.435149 -0.000151
-    outer loop
-      vertex -209.089096 12.945445 -493.341614
-      vertex -209.062851 12.991674 -470.000000
-      vertex -209.122101 12.877043 -493.015869
-    endloop
-  endfacet
-  facet normal 0.000014 -0.996585 -0.082571
-    outer loop
-      vertex -230.000000 12.985428 -493.662201
-      vertex -230.000000 12.986581 -493.676117
-      vertex -209.069046 12.986291 -493.669128
-    endloop
-  endfacet
-  facet normal 0.000000 0.915773 0.401697
-    outer loop
-      vertex -190.759033 5.385180 -502.682800
-      vertex -90.000000 5.216731 -502.298767
-      vertex -90.000000 5.296205 -502.479950
-    endloop
-  endfacet
-  facet normal 0.000000 0.915776 0.401689
-    outer loop
-      vertex -190.759033 5.385180 -502.682800
-      vertex -190.833801 5.216731 -502.298767
-      vertex -90.000000 5.216731 -502.298767
-    endloop
-  endfacet
-  facet normal -0.945842 0.324627 -0.000002
-    outer loop
-      vertex -190.732468 5.462380 -530.000000
-      vertex -190.758972 5.385156 -530.000000
-      vertex -190.759033 5.385180 -502.682800
-    endloop
-  endfacet
-  facet normal -0.401696 0.915773 0.000000
-    outer loop
-      vertex -195.437927 0.768277 -470.000000
-      vertex -195.356247 0.804103 -530.000000
-      vertex -196.077698 0.487644 -530.000000
-    endloop
-  endfacet
-  facet normal -0.401700 0.915771 0.000000
-    outer loop
-      vertex -196.077698 0.487644 -470.000000
-      vertex -195.437927 0.768277 -470.000000
-      vertex -196.077698 0.487644 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.837154 0.546967
-    outer loop
-      vertex -190.716019 5.482105 -502.903809
-      vertex -90.000000 5.482105 -502.903809
-      vertex -90.000000 5.672922 -503.195862
-    endloop
-  endfacet
-  facet normal 0.000000 0.915811 0.401610
-    outer loop
-      vertex -190.716019 5.482105 -502.903809
-      vertex -90.000000 5.436376 -502.799530
-      vertex -90.000000 5.482105 -502.903809
-    endloop
-  endfacet
-  facet normal 0.000000 0.915801 0.401631
-    outer loop
-      vertex -190.716019 5.482105 -502.903809
-      vertex -190.759033 5.385180 -502.682800
-      vertex -90.000000 5.436376 -502.799530
-    endloop
-  endfacet
-  facet normal 0.000014 -0.996591 0.082503
-    outer loop
-      vertex -230.000000 12.986501 -506.324829
-      vertex -230.000000 12.985349 -506.338745
-      vertex -209.069092 12.986210 -506.331848
-    endloop
-  endfacet
-  facet normal 0.897655 -0.440700 0.000017
-    outer loop
-      vertex -209.096329 12.929823 -530.000000
-      vertex -209.077377 12.968425 -530.000000
-      vertex -209.089096 12.945445 -506.658386
-    endloop
-  endfacet
-  facet normal 0.897680 -0.440648 0.000017
-    outer loop
-      vertex -209.077377 12.968425 -530.000000
-      vertex -209.069092 12.986210 -506.331848
-      vertex -209.089096 12.945445 -506.658386
-    endloop
-  endfacet
-  facet normal 0.000000 -0.978656 -0.205505
-    outer loop
-      vertex -230.000000 12.945445 -493.341614
-      vertex -209.089096 12.945445 -493.341614
-      vertex -209.122101 12.877043 -493.015869
-    endloop
-  endfacet
-  facet normal 0.000000 -0.978655 -0.205508
-    outer loop
-      vertex -230.000000 12.878484 -493.022736
-      vertex -230.000000 12.945445 -493.341614
-      vertex -209.122101 12.877043 -493.015869
-    endloop
-  endfacet
-  facet normal 0.904666 -0.426122 -0.000174
-    outer loop
-      vertex -209.166199 12.783269 -492.701202
-      vertex -209.094666 12.925850 -470.000000
-      vertex -209.137100 12.835760 -470.000000
-    endloop
-  endfacet
-  facet normal 0.904708 -0.426033 -0.000175
-    outer loop
-      vertex -209.122101 12.877043 -493.015869
-      vertex -209.094666 12.925850 -470.000000
-      vertex -209.166199 12.783269 -492.701202
-    endloop
-  endfacet
-  facet normal 0.000000 0.915784 0.401671
-    outer loop
-      vertex -190.759033 5.385180 -502.682800
-      vertex -90.000000 5.296205 -502.479950
-      vertex -90.000000 5.436376 -502.799530
-    endloop
-  endfacet
-  facet normal -0.245484 0.969401 0.000000
-    outer loop
-      vertex -196.077698 0.487644 -470.000000
-      vertex -196.077698 0.487644 -530.000000
-      vertex -196.754944 0.316143 -530.000000
-    endloop
-  endfacet
-  facet normal -0.245484 0.969401 0.000000
-    outer loop
-      vertex -196.841400 0.294249 -470.000000
-      vertex -196.077698 0.487644 -470.000000
-      vertex -196.754944 0.316143 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.992298 0.123877
-    outer loop
-      vertex -230.000000 12.985349 -506.338745
-      vertex -230.000000 12.945445 -506.658386
-      vertex -209.089096 12.945445 -506.658386
-    endloop
-  endfacet
-  facet normal 0.000000 -0.992298 0.123878
-    outer loop
-      vertex -230.000000 12.985349 -506.338745
-      vertex -209.089096 12.945445 -506.658386
-      vertex -209.069092 12.986210 -506.331848
-    endloop
-  endfacet
-  facet normal 0.900591 -0.434668 0.000012
-    outer loop
-      vertex -209.127365 12.865519 -530.000000
-      vertex -209.096329 12.929823 -530.000000
-      vertex -209.121750 12.877775 -506.981262
-    endloop
-  endfacet
-  facet normal 0.900605 -0.434639 0.000012
-    outer loop
-      vertex -209.096329 12.929823 -530.000000
-      vertex -209.089096 12.945445 -506.658386
-      vertex -209.121750 12.877775 -506.981262
-    endloop
-  endfacet
-  facet normal 0.000014 -0.969380 -0.245566
-    outer loop
-      vertex -230.000000 12.875067 -493.009247
-      vertex -230.000000 12.878484 -493.022736
-      vertex -209.122101 12.877043 -493.015869
-    endloop
-  endfacet
-  facet normal 0.000000 -0.958350 -0.285598
-    outer loop
-      vertex -230.000000 12.875067 -493.009247
-      vertex -209.122101 12.877043 -493.015869
-      vertex -209.166199 12.783269 -492.701202
-    endloop
-  endfacet
-  facet normal 0.000000 -0.958352 -0.285591
-    outer loop
-      vertex -230.000000 12.783269 -492.701202
-      vertex -230.000000 12.875067 -493.009247
-      vertex -209.166199 12.783269 -492.701202
-    endloop
-  endfacet
-  facet normal 0.913835 -0.406086 -0.000233
-    outer loop
-      vertex -209.240967 12.614820 -492.317169
-      vertex -209.137100 12.835760 -470.000000
-      vertex -209.208939 12.674099 -470.000000
-    endloop
-  endfacet
-  facet normal 0.913813 -0.406135 -0.000232
-    outer loop
-      vertex -209.166199 12.783269 -492.701202
-      vertex -209.137100 12.835760 -470.000000
-      vertex -209.240967 12.614820 -492.317169
-    endloop
-  endfacet
-  facet normal -0.245484 0.969401 0.000000
-    outer loop
-      vertex -196.841400 0.294249 -470.000000
-      vertex -196.754944 0.316143 -530.000000
-      vertex -197.518646 0.122748 -530.000000
-    endloop
-  endfacet
-  facet normal -0.245484 0.969401 0.000000
-    outer loop
-      vertex -197.518646 0.122748 -470.000000
-      vertex -196.841400 0.294249 -470.000000
-      vertex -197.518646 0.122748 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.978735 0.205130
-    outer loop
-      vertex -230.000000 12.945445 -506.658386
-      vertex -230.000000 12.879201 -506.974457
-      vertex -209.121750 12.877775 -506.981262
-    endloop
-  endfacet
-  facet normal 0.000000 -0.978735 0.205128
-    outer loop
-      vertex -230.000000 12.945445 -506.658386
-      vertex -209.121750 12.877775 -506.981262
-      vertex -209.089096 12.945445 -506.658386
-    endloop
-  endfacet
-  facet normal 0.904899 -0.425627 0.000006
-    outer loop
-      vertex -209.169693 12.775528 -530.000000
-      vertex -209.127365 12.865519 -530.000000
-      vertex -209.166199 12.783269 -507.298828
-    endloop
-  endfacet
-  facet normal 0.904902 -0.425620 0.000006
-    outer loop
-      vertex -209.127365 12.865519 -530.000000
-      vertex -209.121750 12.877775 -506.981262
-      vertex -209.166199 12.783269 -507.298828
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915829 -0.401568
-    outer loop
-      vertex -230.000000 12.777689 -492.688477
-      vertex -230.000000 12.783269 -492.701202
-      vertex -209.166199 12.783269 -492.701202
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915776 -0.401689
-    outer loop
-      vertex -230.000000 12.777689 -492.688477
-      vertex -209.166199 12.783269 -492.701202
-      vertex -209.240967 12.614820 -492.317169
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915778 -0.401684
-    outer loop
-      vertex -230.000000 12.612789 -492.312531
-      vertex -230.000000 12.777689 -492.688477
-      vertex -209.240967 12.614820 -492.317169
-    endloop
-  endfacet
-  facet normal 0.879447 -0.475998 0.000002
-    outer loop
-      vertex -209.240967 12.614820 -492.317169
-      vertex -209.208939 12.674099 -470.000000
-      vertex -209.241013 12.614840 -470.000000
-    endloop
-  endfacet
-  facet normal -0.082578 0.996585 0.000000
-    outer loop
-      vertex -197.518646 0.122748 -470.000000
-      vertex -197.518646 0.122748 -530.000000
-      vertex -198.214890 0.065057 -530.000000
-    endloop
-  endfacet
-  facet normal -0.082580 0.996584 0.000000
-    outer loop
-      vertex -198.303757 0.057692 -470.000000
-      vertex -197.518646 0.122748 -470.000000
-      vertex -198.214890 0.065057 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000014 -0.969380 0.245566
-    outer loop
-      vertex -230.000000 12.879201 -506.974457
-      vertex -230.000000 12.875784 -506.987946
-      vertex -209.121750 12.877775 -506.981262
-    endloop
-  endfacet
-  facet normal 0.914017 -0.405675 -0.000002
-    outer loop
-      vertex -209.241013 12.614840 -530.000000
-      vertex -209.169693 12.775528 -530.000000
-      vertex -209.240967 12.614820 -507.682800
-    endloop
-  endfacet
-  facet normal 0.914011 -0.405688 -0.000002
-    outer loop
-      vertex -209.169693 12.775528 -530.000000
-      vertex -209.166199 12.783269 -507.298828
-      vertex -209.240967 12.614820 -507.682800
-    endloop
-  endfacet
-  facet normal 0.000000 -0.958460 0.285226
-    outer loop
-      vertex -230.000000 12.875784 -506.987946
-      vertex -230.000000 12.783269 -507.298828
-      vertex -209.166199 12.783269 -507.298828
-    endloop
-  endfacet
-  facet normal 0.000000 -0.958458 0.285233
-    outer loop
-      vertex -230.000000 12.875784 -506.987946
-      vertex -209.166199 12.783269 -507.298828
-      vertex -209.121750 12.877775 -506.981262
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915761 -0.401724
-    outer loop
-      vertex -230.000000 12.612789 -492.312531
-      vertex -209.240967 12.614820 -492.317169
-      vertex -209.283997 12.517895 -492.096222
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915754 -0.401740
-    outer loop
-      vertex -230.000000 12.517895 -492.096222
-      vertex -230.000000 12.612789 -492.312531
-      vertex -209.283997 12.517895 -492.096222
-    endloop
-  endfacet
-  facet normal 0.914001 -0.405712 0.000002
-    outer loop
-      vertex -209.283997 12.517895 -492.096222
-      vertex -209.241013 12.614840 -470.000000
-      vertex -209.282104 12.522266 -470.000000
-    endloop
-  endfacet
-  facet normal 0.913981 -0.405757 0.000002
-    outer loop
-      vertex -209.240967 12.614820 -492.317169
-      vertex -209.241013 12.614840 -470.000000
-      vertex -209.283997 12.517895 -492.096222
-    endloop
-  endfacet
-  facet normal -0.082580 0.996584 0.000000
-    outer loop
-      vertex -198.303757 0.057692 -470.000000
-      vertex -198.214890 0.065057 -530.000000
-      vertex -199.000000 0.000000 -530.000000
-    endloop
-  endfacet
-  facet normal -0.082578 0.996585 0.000000
-    outer loop
-      vertex -199.000000 0.000000 -470.000000
-      vertex -198.303757 0.057692 -470.000000
-      vertex -199.000000 0.000000 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915748 0.401753
-    outer loop
-      vertex -230.000000 12.783269 -507.298828
-      vertex -230.000000 12.618349 -507.674744
-      vertex -209.240967 12.614820 -507.682800
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915753 0.401743
-    outer loop
-      vertex -230.000000 12.783269 -507.298828
-      vertex -209.240967 12.614820 -507.682800
-      vertex -209.166199 12.783269 -507.298828
-    endloop
-  endfacet
-  facet normal 0.945806 -0.324732 -0.000002
-    outer loop
-      vertex -209.262894 12.551109 -530.000000
-      vertex -209.241013 12.614840 -530.000000
-      vertex -209.240967 12.614820 -507.682800
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837170 -0.546942
-    outer loop
-      vertex -230.000000 12.517895 -492.096222
-      vertex -209.283997 12.517895 -492.096222
-      vertex -209.428299 12.156562 -491.543152
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837175 -0.546935
-    outer loop
-      vertex -230.000000 12.164065 -491.554626
-      vertex -230.000000 12.517895 -492.096222
-      vertex -209.428299 12.156562 -491.543152
-    endloop
-  endfacet
-  facet normal 0.928671 -0.370905 -0.000006
-    outer loop
-      vertex -209.428299 12.156562 -491.543152
-      vertex -209.282104 12.522266 -470.000000
-      vertex -209.420135 12.176665 -470.000000
-    endloop
-  endfacet
-  facet normal 0.928678 -0.370887 -0.000006
-    outer loop
-      vertex -209.283997 12.517895 -492.096222
-      vertex -209.282104 12.522266 -470.000000
-      vertex -209.428299 12.156562 -491.543152
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -199.000000 0.000000 -530.000000
-      vertex -199.940002 0.000000 -470.000000
-      vertex -199.000000 0.000000 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -200.059998 0.000000 -530.000000
-      vertex -199.940002 0.000000 -470.000000
-      vertex -199.000000 0.000000 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.916006 0.401165
-    outer loop
-      vertex -230.000000 12.618349 -507.674744
-      vertex -230.000000 12.612789 -507.687439
-      vertex -209.240967 12.614820 -507.682800
-    endloop
-  endfacet
-  facet normal 0.913746 -0.406286 0.000262
-    outer loop
-      vertex -209.303787 12.459139 -530.000000
-      vertex -209.262894 12.551109 -530.000000
-      vertex -209.283997 12.517895 -507.903809
-    endloop
-  endfacet
-  facet normal 0.913757 -0.406260 0.000262
-    outer loop
-      vertex -209.262894 12.551109 -530.000000
-      vertex -209.240967 12.614820 -507.682800
-      vertex -209.283997 12.517895 -507.903809
-    endloop
-  endfacet
-  facet normal 0.000000 -0.836940 -0.547294
-    outer loop
-      vertex -230.000000 12.156562 -491.543152
-      vertex -230.000000 12.164065 -491.554626
-      vertex -209.428299 12.156562 -491.543152
-    endloop
-  endfacet
-  facet normal 0.945359 -0.326031 -0.000054
-    outer loop
-      vertex -209.582581 11.709126 -491.057098
-      vertex -209.420135 12.176665 -470.000000
-      vertex -209.567978 11.747981 -470.000000
-    endloop
-  endfacet
-  facet normal 0.945359 -0.326030 -0.000054
-    outer loop
-      vertex -209.428299 12.156562 -491.543152
-      vertex -209.420135 12.176665 -470.000000
-      vertex -209.582581 11.709126 -491.057098
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -200.059998 0.000000 -530.000000
-      vertex -201.000000 0.000000 -470.000000
-      vertex -199.940002 0.000000 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -201.000000 0.000000 -530.000000
-      vertex -201.000000 0.000000 -470.000000
-      vertex -200.059998 0.000000 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915795 0.401645
-    outer loop
-      vertex -230.000000 12.612789 -507.687439
-      vertex -230.000000 12.517895 -507.903809
-      vertex -209.283997 12.517895 -507.903809
-    endloop
-  endfacet
-  facet normal 0.000000 -0.915801 0.401631
-    outer loop
-      vertex -230.000000 12.612789 -507.687439
-      vertex -209.283997 12.517895 -507.903809
-      vertex -209.240967 12.614820 -507.682800
-    endloop
-  endfacet
-  facet normal 0.928606 -0.371067 0.000155
-    outer loop
-      vertex -209.441284 12.115048 -530.000000
-      vertex -209.303787 12.459139 -530.000000
-      vertex -209.428299 12.156562 -508.456818
-    endloop
-  endfacet
-  facet normal 0.928599 -0.371084 0.000155
-    outer loop
-      vertex -209.303787 12.459139 -530.000000
-      vertex -209.283997 12.517895 -507.903809
-      vertex -209.428299 12.156562 -508.456818
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735729 -0.677276
-    outer loop
-      vertex -230.000000 12.156562 -491.543152
-      vertex -209.428299 12.156562 -491.543152
-      vertex -209.582581 11.709126 -491.057098
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735737 -0.677268
-    outer loop
-      vertex -230.000000 11.718349 -491.067108
-      vertex -230.000000 12.156562 -491.543152
-      vertex -209.582581 11.709126 -491.057098
-    endloop
-  endfacet
-  facet normal 0.961875 -0.273488 -0.000162
-    outer loop
-      vertex -209.724609 11.209369 -490.665527
-      vertex -209.567978 11.747981 -470.000000
-      vertex -209.704285 11.268581 -470.000000
-    endloop
-  endfacet
-  facet normal 0.961875 -0.273488 -0.000162
-    outer loop
-      vertex -209.724609 11.209369 -490.665527
-      vertex -209.582581 11.709126 -491.057098
-      vertex -209.567978 11.747981 -470.000000
-    endloop
-  endfacet
-  facet normal 0.082578 0.996585 0.000000
-    outer loop
-      vertex -201.000000 0.000000 -470.000000
-      vertex -201.000000 0.000000 -530.000000
-      vertex -201.696243 0.057692 -530.000000
-    endloop
-  endfacet
-  facet normal 0.082580 0.996584 0.000000
-    outer loop
-      vertex -201.785110 0.065057 -470.000000
-      vertex -201.000000 0.000000 -470.000000
-      vertex -201.696243 0.057692 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837186 0.546918
-    outer loop
-      vertex -230.000000 12.517895 -507.903809
-      vertex -230.000000 12.510339 -507.915375
-      vertex -209.283997 12.517895 -507.903809
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837142 0.546986
-    outer loop
-      vertex -230.000000 12.510339 -507.915375
-      vertex -230.000000 12.156562 -508.456818
-      vertex -209.428299 12.156562 -508.456818
-    endloop
-  endfacet
-  facet normal 0.000000 -0.837143 0.546984
-    outer loop
-      vertex -230.000000 12.510339 -507.915375
-      vertex -209.428299 12.156562 -508.456818
-      vertex -209.283997 12.517895 -507.903809
-    endloop
-  endfacet
-  facet normal 0.945358 -0.326035 0.000058
-    outer loop
-      vertex -209.441284 12.115048 -530.000000
-      vertex -209.428299 12.156562 -508.456818
-      vertex -209.582581 11.709126 -508.942902
-    endloop
-  endfacet
-  facet normal 0.945358 -0.326033 0.000058
-    outer loop
-      vertex -209.588669 11.687696 -530.000000
-      vertex -209.441284 12.115048 -530.000000
-      vertex -209.582581 11.709126 -508.942902
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735383 -0.677651
-    outer loop
-      vertex -230.000000 11.709126 -491.057098
-      vertex -230.000000 11.718349 -491.067108
-      vertex -209.582581 11.709126 -491.057098
-    endloop
-  endfacet
-  facet normal 0.000002 -0.616772 -0.787142
-    outer loop
-      vertex -209.724609 11.209369 -490.665527
-      vertex -230.000000 11.208927 -490.665222
-      vertex -230.000000 11.698379 -491.048737
-    endloop
-  endfacet
-  facet normal 0.000002 -0.616755 -0.787155
-    outer loop
-      vertex -209.582581 11.709126 -491.057098
-      vertex -209.724609 11.209369 -490.665527
-      vertex -230.000000 11.698379 -491.048737
-    endloop
-  endfacet
-  facet normal 0.945832 -0.324656 0.000000
-    outer loop
-      vertex -209.724609 11.209369 -490.665527
-      vertex -209.704285 11.268581 -470.000000
-      vertex -209.724609 11.209369 -470.000000
-    endloop
-  endfacet
-  facet normal 0.082580 0.996584 0.000000
-    outer loop
-      vertex -201.785110 0.065057 -470.000000
-      vertex -201.696243 0.057692 -530.000000
-      vertex -202.481354 0.122748 -530.000000
-    endloop
-  endfacet
-  facet normal 0.082578 0.996585 0.000000
-    outer loop
-      vertex -202.481354 0.122748 -470.000000
-      vertex -201.785110 0.065057 -470.000000
-      vertex -202.481354 0.122748 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735953 0.677032
-    outer loop
-      vertex -230.000000 12.156562 -508.456818
-      vertex -230.000000 12.147269 -508.466919
-      vertex -209.428299 12.156562 -508.456818
-    endloop
-  endfacet
-  facet normal 0.962250 -0.272168 -0.000001
-    outer loop
-      vertex -209.588669 11.687696 -530.000000
-      vertex -209.582581 11.709126 -508.942902
-      vertex -209.723984 11.209196 -509.332001
-    endloop
-  endfacet
-  facet normal 0.962246 -0.272180 -0.000002
-    outer loop
-      vertex -209.724014 11.209204 -530.000000
-      vertex -209.588669 11.687696 -530.000000
-      vertex -209.723984 11.209196 -509.332001
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735746 0.677257
-    outer loop
-      vertex -230.000000 12.147269 -508.466919
-      vertex -230.000000 11.709126 -508.942902
-      vertex -209.582581 11.709126 -508.942902
-    endloop
-  endfacet
-  facet normal 0.000000 -0.735751 0.677253
-    outer loop
-      vertex -230.000000 12.147269 -508.466919
-      vertex -209.582581 11.709126 -508.942902
-      vertex -209.428299 12.156562 -508.456818
-    endloop
-  endfacet
-  facet normal 0.000000 -0.614081 -0.789243
-    outer loop
-      vertex -209.582581 11.709126 -491.057098
-      vertex -230.000000 11.698379 -491.048737
-      vertex -230.000000 11.709126 -491.057098
-    endloop
-  endfacet
-  facet normal -0.000002 -0.477302 -0.878739
-    outer loop
-      vertex -209.729507 11.186769 -490.653229
-      vertex -230.000000 11.186790 -490.653198
-      vertex -230.000000 11.208927 -490.665222
-    endloop
-  endfacet
-  facet normal -0.000003 -0.478005 -0.878357
-    outer loop
-      vertex -209.724609 11.209369 -490.665527
-      vertex -209.729507 11.186769 -490.653229
-      vertex -230.000000 11.208927 -490.665222
-    endloop
-  endfacet
-  facet normal 0.977380 -0.211493 0.000000
-    outer loop
-      vertex -209.729507 11.186769 -490.653229
-      vertex -209.724609 11.209369 -470.000000
-      vertex -209.729294 11.187720 -470.000000
-    endloop
-  endfacet
-  facet normal 0.977309 -0.211818 0.000000
-    outer loop
-      vertex -209.729507 11.186769 -490.653229
-      vertex -209.724609 11.209369 -490.665527
-      vertex -209.724609 11.209369 -470.000000
-    endloop
-  endfacet
-  facet normal 0.245484 0.969401 0.000000
-    outer loop
-      vertex -202.481354 0.122748 -470.000000
-      vertex -202.481354 0.122748 -530.000000
-      vertex -203.158600 0.294249 -530.000000
-    endloop
-  endfacet
-  facet normal 0.245484 0.969401 0.000000
-    outer loop
-      vertex -203.245056 0.316143 -470.000000
-      vertex -202.481354 0.122748 -470.000000
-      vertex -203.158600 0.294249 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.614203 0.789148
-    outer loop
-      vertex -209.723984 11.209196 -509.332001
-      vertex -230.000000 11.709126 -508.942902
-      vertex -230.000000 11.219432 -509.324036
-    endloop
-  endfacet
-  facet normal 0.000000 -0.614201 0.789149
-    outer loop
-      vertex -209.723984 11.209196 -509.332001
-      vertex -209.582581 11.709126 -508.942902
-      vertex -230.000000 11.709126 -508.942902
-    endloop
-  endfacet
-  facet normal 0.986377 -0.164503 -0.000002
-    outer loop
-      vertex -209.734314 11.147446 -530.000000
-      vertex -209.724014 11.209204 -530.000000
-      vertex -209.723984 11.209196 -509.332001
-    endloop
-  endfacet
-  facet normal -0.000002 -0.478835 -0.877905
-    outer loop
-      vertex -209.855408 10.606782 -490.336884
-      vertex -230.000000 10.618603 -490.343292
-      vertex -230.000000 11.186790 -490.653198
-    endloop
-  endfacet
-  facet normal -0.000002 -0.478838 -0.877903
-    outer loop
-      vertex -209.729507 11.186769 -490.653229
-      vertex -209.855408 10.606782 -490.336884
-      vertex -230.000000 11.186790 -490.653198
-    endloop
-  endfacet
-  facet normal 0.977241 -0.212134 0.000000
-    outer loop
-      vertex -209.855408 10.606782 -490.336884
-      vertex -209.729294 11.187720 -470.000000
-      vertex -209.849976 10.631775 -470.000000
-    endloop
-  endfacet
-  facet normal 0.977241 -0.212134 0.000000
-    outer loop
-      vertex -209.855408 10.606782 -490.336884
-      vertex -209.729507 11.186769 -490.653229
-      vertex -209.729294 11.187720 -470.000000
-    endloop
-  endfacet
-  facet normal 0.245484 0.969401 0.000000
-    outer loop
-      vertex -203.245056 0.316143 -470.000000
-      vertex -203.158600 0.294249 -530.000000
-      vertex -203.922302 0.487644 -530.000000
-    endloop
-  endfacet
-  facet normal 0.245484 0.969401 0.000000
-    outer loop
-      vertex -203.922302 0.487644 -470.000000
-      vertex -203.245056 0.316143 -470.000000
-      vertex -203.922302 0.487644 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.613867 0.789409
-    outer loop
-      vertex -209.723984 11.209196 -509.332001
-      vertex -230.000000 11.219432 -509.324036
-      vertex -230.000000 11.208757 -509.332336
-    endloop
-  endfacet
-  facet normal 0.962139 -0.272560 0.000333
-    outer loop
-      vertex -209.734314 11.147446 -530.000000
-      vertex -209.723984 11.209196 -509.332001
-      vertex -209.730042 11.187792 -509.348694
-    endloop
-  endfacet
-  facet normal 0.962094 -0.272718 0.000334
-    outer loop
-      vertex -209.740112 11.126990 -530.000000
-      vertex -209.734314 11.147446 -530.000000
-      vertex -209.730042 11.187792 -509.348694
-    endloop
-  endfacet
-  facet normal 0.000000 -0.476614 -0.879112
-    outer loop
-      vertex -209.855408 10.606782 -490.336884
-      vertex -230.000000 10.606782 -490.336884
-      vertex -230.000000 10.618603 -490.343292
-    endloop
-  endfacet
-  facet normal 0.989587 -0.143938 -0.000087
-    outer loop
-      vertex -209.946274 9.981941 -490.122406
-      vertex -209.855408 10.606782 -490.336884
-      vertex -209.849976 10.631775 -470.000000
-    endloop
-  endfacet
-  facet normal 0.989583 -0.143960 -0.000087
-    outer loop
-      vertex -209.946274 9.981941 -490.122406
-      vertex -209.849976 10.631775 -470.000000
-      vertex -209.937180 10.032334 -470.000000
-    endloop
-  endfacet
-  facet normal 0.401700 0.915771 0.000000
-    outer loop
-      vertex -203.922302 0.487644 -470.000000
-      vertex -203.922302 0.487644 -530.000000
-      vertex -204.562073 0.768277 -530.000000
-    endloop
-  endfacet
-  facet normal 0.401696 0.915773 0.000000
-    outer loop
-      vertex -204.643753 0.804103 -470.000000
-      vertex -203.922302 0.487644 -470.000000
-      vertex -204.562073 0.768277 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.615132 0.788424
-    outer loop
-      vertex -209.730042 11.187792 -509.348694
-      vertex -230.000000 11.208757 -509.332336
-      vertex -230.000000 11.187792 -509.348694
-    endloop
-  endfacet
-  facet normal 0.000000 -0.614981 0.788542
-    outer loop
-      vertex -209.730042 11.187792 -509.348694
-      vertex -209.723984 11.209196 -509.332001
-      vertex -230.000000 11.208757 -509.332336
-    endloop
-  endfacet
-  facet normal 0.977487 -0.210994 0.000145
-    outer loop
-      vertex -209.740112 11.126990 -530.000000
-      vertex -209.730042 11.187792 -509.348694
-      vertex -209.855408 10.606782 -509.663116
-    endloop
-  endfacet
-  facet normal 0.977491 -0.210978 0.000145
-    outer loop
-      vertex -209.860123 10.570965 -530.000000
-      vertex -209.740112 11.126990 -530.000000
-      vertex -209.855408 10.606782 -509.663116
-    endloop
-  endfacet
-  facet normal -0.000001 -0.324673 -0.945826
-    outer loop
-      vertex -209.946274 9.981941 -490.122406
-      vertex -230.000000 9.994597 -490.126740
-      vertex -230.000000 10.606782 -490.336884
-    endloop
-  endfacet
-  facet normal 0.000000 -0.324658 -0.945831
-    outer loop
-      vertex -209.855408 10.606782 -490.336884
-      vertex -209.946274 9.981941 -490.122406
-      vertex -230.000000 10.606782 -490.336884
-    endloop
-  endfacet
-  facet normal 0.995394 -0.095874 -0.000210
-    outer loop
-      vertex -209.969269 9.743214 -490.069672
-      vertex -209.937180 10.032334 -470.000000
-      vertex -209.959244 9.803257 -470.000000
-    endloop
-  endfacet
-  facet normal 0.995389 -0.095925 -0.000210
-    outer loop
-      vertex -209.969269 9.743214 -490.069672
-      vertex -209.946274 9.981941 -490.122406
-      vertex -209.937180 10.032334 -470.000000
-    endloop
-  endfacet
-  facet normal 0.401696 0.915773 0.000000
-    outer loop
-      vertex -204.643753 0.804103 -470.000000
-      vertex -204.562073 0.768277 -530.000000
-      vertex -205.283524 1.084736 -530.000000
-    endloop
-  endfacet
-  facet normal 0.401700 0.915771 0.000000
-    outer loop
-      vertex -205.283524 1.084736 -470.000000
-      vertex -204.643753 0.804103 -470.000000
-      vertex -205.283524 1.084736 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.476142 0.879368
-    outer loop
-      vertex -209.730042 11.187792 -509.348694
-      vertex -230.000000 11.187792 -509.348694
-      vertex -230.000000 11.175900 -509.355133
-    endloop
-  endfacet
-  facet normal 0.989590 -0.143917 0.000024
-    outer loop
-      vertex -209.860123 10.570965 -530.000000
-      vertex -209.855408 10.606782 -509.663116
-      vertex -209.946274 9.981941 -509.877625
-    endloop
-  endfacet
-  facet normal 0.989588 -0.143932 0.000024
-    outer loop
-      vertex -209.947220 9.972140 -530.000000
-      vertex -209.860123 10.570965 -530.000000
-      vertex -209.946274 9.981941 -509.877625
-    endloop
-  endfacet
-  facet normal 0.000000 -0.475938 0.879479
-    outer loop
-      vertex -209.855408 10.606782 -509.663116
-      vertex -230.000000 11.175900 -509.355133
-      vertex -230.000000 10.606782 -509.663116
-    endloop
-  endfacet
-  facet normal 0.000000 -0.475942 0.879476
-    outer loop
-      vertex -209.855408 10.606782 -509.663116
-      vertex -209.730042 11.187792 -509.348694
-      vertex -230.000000 11.175900 -509.355133
-    endloop
-  endfacet
-  facet normal 0.000000 -0.323938 -0.946078
-    outer loop
-      vertex -209.946274 9.981941 -490.122406
-      vertex -230.000000 9.981941 -490.122406
-      vertex -230.000000 9.994597 -490.126740
-    endloop
-  endfacet
-  facet normal 0.000035 -0.215706 -0.976458
-    outer loop
-      vertex -209.969269 9.743214 -490.069672
-      vertex -230.000000 9.734859 -490.068542
-      vertex -230.000000 9.968742 -490.120209
-    endloop
-  endfacet
-  facet normal 0.000035 -0.215701 -0.976459
-    outer loop
-      vertex -209.946274 9.981941 -490.122406
-      vertex -209.969269 9.743214 -490.069672
-      vertex -230.000000 9.968742 -490.120209
-    endloop
-  endfacet
-  facet normal 0.986346 -0.164684 0.000000
-    outer loop
-      vertex -209.969269 9.743214 -490.069672
-      vertex -209.959244 9.803257 -470.000000
-      vertex -209.969269 9.743214 -470.000000
-    endloop
-  endfacet
-  facet normal 0.546944 0.837169 0.000000
-    outer loop
-      vertex -205.283524 1.084736 -470.000000
-      vertex -205.283524 1.084736 -530.000000
-      vertex -205.868393 1.466845 -530.000000
-    endloop
-  endfacet
-  facet normal 0.546945 0.837168 0.000000
-    outer loop
-      vertex -205.943054 1.515625 -470.000000
-      vertex -205.283524 1.084736 -470.000000
-      vertex -205.868393 1.466845 -530.000000
-    endloop
-  endfacet
-  facet normal 0.995393 -0.095879 0.000000
-    outer loop
-      vertex -209.947220 9.972140 -530.000000
-      vertex -209.946274 9.981941 -509.877625
-      vertex -209.969269 9.743214 -509.930359
-    endloop
-  endfacet
-  facet normal 0.995394 -0.095871 0.000000
-    outer loop
-      vertex -209.969269 9.743214 -530.000000
-      vertex -209.947220 9.972140 -530.000000
-      vertex -209.969269 9.743214 -509.930359
-    endloop
-  endfacet
-  facet normal 0.000000 -0.324700 0.945817
-    outer loop
-      vertex -209.946274 9.981941 -509.877625
-      vertex -230.000000 10.594069 -509.667480
-      vertex -230.000000 9.981941 -509.877625
-    endloop
-  endfacet
-  facet normal 0.000000 -0.324699 0.945817
-    outer loop
-      vertex -209.946274 9.981941 -509.877625
-      vertex -209.855408 10.606782 -509.663116
-      vertex -230.000000 10.594069 -509.667480
-    endloop
-  endfacet
-  facet normal 0.000000 -0.324687 0.945821
-    outer loop
-      vertex -209.855408 10.606782 -509.663116
-      vertex -230.000000 10.606782 -509.663116
-      vertex -230.000000 10.594069 -509.667480
-    endloop
-  endfacet
-  facet normal 0.000000 -0.164214 -0.986425
-    outer loop
-      vertex -209.946274 9.981941 -490.122406
-      vertex -230.000000 9.968742 -490.120209
-      vertex -230.000000 9.981941 -490.122406
-    endloop
-  endfacet
-  facet normal 0.000000 -0.134406 -0.990926
-    outer loop
-      vertex -209.993942 9.330317 -490.013672
-      vertex -230.000000 9.330317 -490.013672
-      vertex -230.000000 9.734859 -490.068542
-    endloop
-  endfacet
-  facet normal 0.000000 -0.134396 -0.990928
-    outer loop
-      vertex -209.969269 9.743214 -490.069672
-      vertex -209.993942 9.330317 -490.013672
-      vertex -230.000000 9.734859 -490.068542
-    endloop
-  endfacet
-  facet normal 0.998219 -0.059652 0.000000
-    outer loop
-      vertex -209.993942 9.330317 -490.013672
-      vertex -209.969269 9.743214 -470.000000
-      vertex -209.992935 9.347181 -470.000000
-    endloop
-  endfacet
-  facet normal 0.998219 -0.059651 0.000000
-    outer loop
-      vertex -209.993942 9.330317 -490.013672
-      vertex -209.969269 9.743214 -490.069672
-      vertex -209.969269 9.743214 -470.000000
-    endloop
-  endfacet
-  facet normal 0.546945 0.837168 0.000000
-    outer loop
-      vertex -205.943054 1.515625 -470.000000
-      vertex -205.868393 1.466845 -530.000000
-      vertex -206.527924 1.897735 -530.000000
-    endloop
-  endfacet
-  facet normal 0.546944 0.837169 0.000000
-    outer loop
-      vertex -206.527924 1.897735 -470.000000
-      vertex -205.943054 1.515625 -470.000000
-      vertex -206.527924 1.897735 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.215698 0.976460
-    outer loop
-      vertex -209.969269 9.743214 -509.930359
-      vertex -209.946274 9.981941 -509.877625
-      vertex -230.000000 9.981941 -509.877625
-    endloop
-  endfacet
-  facet normal 0.000000 -0.215693 0.976461
-    outer loop
-      vertex -209.969269 9.743214 -509.930359
-      vertex -230.000000 9.981941 -509.877625
-      vertex -230.000000 9.748044 -509.929291
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex -209.969269 9.743214 -509.930359
-      vertex -209.969269 9.682341 -530.000000
-      vertex -209.969269 9.743214 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -209.993942 9.330317 -490.013672
-      vertex -230.000000 9.316967 -490.013672
-      vertex -230.000000 9.330317 -490.013672
-    endloop
-  endfacet
-  facet normal 0.999832 -0.018309 -0.000035
-    outer loop
-      vertex -210.000015 8.998481 -490.000000
-      vertex -209.992935 9.347181 -470.000000
-      vertex -209.998764 9.028878 -470.000000
-    endloop
-  endfacet
-  facet normal 0.999833 -0.018300 -0.000035
-    outer loop
-      vertex -210.000015 8.998481 -490.000000
-      vertex -209.993942 9.330317 -490.013672
-      vertex -209.992935 9.347181 -470.000000
-    endloop
-  endfacet
-  facet normal 0.677282 0.735724 0.000000
-    outer loop
-      vertex -206.527924 1.897735 -470.000000
-      vertex -206.527924 1.897735 -530.000000
-      vertex -207.041916 2.370898 -530.000000
-    endloop
-  endfacet
-  facet normal 0.677284 0.735722 0.000000
-    outer loop
-      vertex -207.107529 2.431302 -470.000000
-      vertex -206.527924 1.897735 -470.000000
-      vertex -207.041916 2.370898 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000020 -0.134327 0.990937
-    outer loop
-      vertex -209.993942 9.330317 -509.986328
-      vertex -230.000000 9.748044 -509.929291
-      vertex -230.000000 9.343486 -509.984131
-    endloop
-  endfacet
-  facet normal 0.000020 -0.134326 0.990937
-    outer loop
-      vertex -209.993942 9.330317 -509.986328
-      vertex -209.969269 9.743214 -509.930359
-      vertex -230.000000 9.748044 -509.929291
-    endloop
-  endfacet
-  facet normal 0.998218 -0.059675 0.000181
-    outer loop
-      vertex -209.969269 9.682341 -530.000000
-      vertex -209.969269 9.743214 -509.930359
-      vertex -209.993942 9.330317 -509.986328
-    endloop
-  endfacet
-  facet normal 0.998218 -0.059677 0.000181
-    outer loop
-      vertex -209.992935 9.286471 -530.000000
-      vertex -209.969269 9.682341 -530.000000
-      vertex -209.993942 9.330317 -509.986328
-    endloop
-  endfacet
-  facet normal 0.000027 -0.041171 -0.999152
-    outer loop
-      vertex -210.000015 8.998481 -490.000000
-      vertex -230.000000 8.991838 -490.000275
-      vertex -230.000000 9.316967 -490.013672
-    endloop
-  endfacet
-  facet normal 0.000027 -0.041166 -0.999152
-    outer loop
-      vertex -209.993942 9.330317 -490.013672
-      vertex -210.000015 8.998481 -490.000000
-      vertex -230.000000 9.316967 -490.013672
-    endloop
-  endfacet
-  facet normal 0.999829 0.018481 -0.000091
-    outer loop
-      vertex -210.000015 8.998481 -490.000000
-      vertex -209.998764 9.028878 -470.000000
-      vertex -209.992935 8.713528 -470.000000
-    endloop
-  endfacet
-  facet normal 0.999829 0.018471 -0.000091
-    outer loop
-      vertex -209.993942 8.669682 -490.013672
-      vertex -210.000015 8.998481 -490.000000
-      vertex -209.992935 8.713528 -470.000000
-    endloop
-  endfacet
-  facet normal 0.677284 0.735722 0.000000
-    outer loop
-      vertex -207.107529 2.431302 -470.000000
-      vertex -207.041916 2.370898 -530.000000
-      vertex -207.621521 2.904465 -530.000000
-    endloop
-  endfacet
-  facet normal 0.677282 0.735724 0.000000
-    outer loop
-      vertex -207.621521 2.904465 -470.000000
-      vertex -207.107529 2.431302 -470.000000
-      vertex -207.621521 2.904465 -530.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.164584 0.986363
-    outer loop
-      vertex -209.993942 9.330317 -509.986328
-      vertex -230.000000 9.343486 -509.984131
-      vertex -230.000000 9.330317 -509.986328
-    endloop
-  endfacet
-  facet normal 0.999829 -0.018471 0.000091
-    outer loop
-      vertex -209.992935 9.286471 -530.000000
-      vertex -209.993942 9.330317 -509.986328
-      vertex -210.000015 9.001518 -510.000000
-    endloop
-  endfacet
-  facet normal 0.999829 -0.018481 0.000091
-    outer loop
-      vertex -209.998764 8.971121 -530.000000
-      vertex -209.992935 9.286471 -530.000000
-      vertex -210.000015 9.001518 -510.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.041545 -0.999137
-    outer loop
-      vertex -210.000015 8.998481 -490.000000
-      vertex -209.993942 8.669682 -490.013672
-      vertex -230.000000 8.669682 -490.013672
-    endloop
-  endfacet
-  facet normal 0.000000 0.041550 -0.999136
-    outer loop
-      vertex -210.000015 8.998481 -490.000000
-      vertex -230.000000 8.669682 -490.013672
-      vertex -230.000000 8.991838 -490.000275
-    endloop
-  endfacet
-  facet normal 0.998218 0.059677 -0.000181
-    outer loop
-      vertex -209.993942 8.669682 -490.013672
-      vertex -209.992935 8.713528 -470.000000
-      vertex -209.969269 8.317658 -470.000000
-    endloop
-  endfacet
-  facet normal 0.998218 0.059675 -0.000181
-    outer loop
-      vertex -209.969269 8.256785 -490.069672
-      vertex -209.993942 8.669682 -490.013672
-      vertex -209.969269 8.317658 -470.000000
-    endloop
-  endfacet
-  facet normal 0.789137 0.614217 0.000000
-    outer loop
-      vertex -208.050629 3.455776 -530.000000
-      vertex -208.105408 3.526156 -470.000000
-      vertex -207.621521 2.904465 -470.000000
-    endloop
-  endfacet
-  facet normal 0.789137 0.614218 0.000000
-    outer loop
-      vertex -207.621521 2.904465 -530.000000
-      vertex -208.050629 3.455776 -530.000000
-      vertex -207.621521 2.904465 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.041545 0.999137
-    outer loop
-      vertex -210.000015 9.001518 -510.000000
-      vertex -209.993942 9.330317 -509.986328
-      vertex -230.000000 9.330317 -509.986328
-    endloop
-  endfacet
-  facet normal 0.000000 -0.041550 0.999136
-    outer loop
-      vertex -210.000015 9.001518 -510.000000
-      vertex -230.000000 9.330317 -509.986328
-      vertex -230.000000 9.008161 -509.999725
-    endloop
-  endfacet
-  facet normal 0.999833 0.018300 0.000035
-    outer loop
-      vertex -209.992935 8.652818 -530.000000
-      vertex -210.000015 9.001518 -510.000000
-      vertex -209.993942 8.669682 -509.986328
-    endloop
-  endfacet
-  facet normal 0.999832 0.018309 0.000035
-    outer loop
-      vertex -209.992935 8.652818 -530.000000
-      vertex -209.998764 8.971121 -530.000000
-      vertex -210.000015 9.001518 -510.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.164584 -0.986363
-    outer loop
-      vertex -209.993942 8.669682 -490.013672
-      vertex -230.000000 8.656513 -490.015869
-      vertex -230.000000 8.669682 -490.013672
-    endloop
-  endfacet
-  facet normal 0.000020 0.134400 -0.990927
-    outer loop
-      vertex -209.993942 8.669682 -490.013672
-      vertex -230.000000 8.251955 -490.070740
-      vertex -230.000000 8.656513 -490.015869
-    endloop
-  endfacet
-  facet normal 0.000020 0.134397 -0.990927
-    outer loop
-      vertex -209.993942 8.669682 -490.013672
-      vertex -209.969269 8.256785 -490.069672
-      vertex -230.000000 8.251955 -490.070740
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex -209.969269 8.256785 -490.069672
-      vertex -209.969269 8.317658 -470.000000
-      vertex -209.969269 8.256785 -470.000000
-    endloop
-  endfacet
-  facet normal 0.789137 0.614218 0.000000
-    outer loop
-      vertex -208.534515 4.077466 -530.000000
-      vertex -208.534515 4.077466 -470.000000
-      vertex -208.105408 3.526156 -470.000000
-    endloop
-  endfacet
-  facet normal 0.789137 0.614217 0.000000
-    outer loop
-      vertex -208.050629 3.455776 -530.000000
-      vertex -208.534515 4.077466 -530.000000
-      vertex -208.105408 3.526156 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000027 0.041171 0.999152
-    outer loop
-      vertex -210.000015 9.001518 -510.000000
-      vertex -230.000000 9.008161 -509.999725
-      vertex -230.000000 8.683032 -509.986328
-    endloop
-  endfacet
-  facet normal 0.000027 0.041166 0.999152
-    outer loop
-      vertex -209.993942 8.669682 -509.986328
-      vertex -210.000015 9.001518 -510.000000
-      vertex -230.000000 8.683032 -509.986328
-    endloop
-  endfacet
-  facet normal 0.998219 0.059651 0.000000
-    outer loop
-      vertex -209.969269 8.256785 -530.000000
-      vertex -209.993942 8.669682 -509.986328
-      vertex -209.969269 8.256785 -509.930359
-    endloop
-  endfacet
-  facet normal 0.998219 0.059652 0.000000
-    outer loop
-      vertex -209.969269 8.256785 -530.000000
-      vertex -209.992935 8.652818 -530.000000
-      vertex -209.993942 8.669682 -509.986328
-    endloop
-  endfacet
-  facet normal 0.000000 0.215698 -0.976460
-    outer loop
-      vertex -209.969269 8.256785 -490.069672
-      vertex -209.946274 8.018058 -490.122406
-      vertex -230.000000 8.018058 -490.122406
-    endloop
-  endfacet
-  facet normal 0.000000 0.215693 -0.976461
-    outer loop
-      vertex -209.969269 8.256785 -490.069672
-      vertex -230.000000 8.018058 -490.122406
-      vertex -230.000000 8.251955 -490.070740
-    endloop
-  endfacet
-  facet normal 0.995394 0.095871 0.000000
-    outer loop
-      vertex -209.969269 8.256785 -490.069672
-      vertex -209.969269 8.256785 -470.000000
-      vertex -209.947220 8.027859 -470.000000
-    endloop
-  endfacet
-  facet normal 0.995393 0.095879 0.000000
-    outer loop
-      vertex -209.946274 8.018058 -490.122406
-      vertex -209.969269 8.256785 -490.069672
-      vertex -209.947220 8.027859 -470.000000
-    endloop
-  endfacet
-  facet normal 0.868007 0.496552 0.000000
-    outer loop
-      vertex -209.062256 5.000000 -494.000000
-      vertex -209.036621 4.955180 -470.000000
-      vertex -208.534515 4.077466 -470.000000
-    endloop
-  endfacet
-  facet normal 0.868011 0.496545 0.000000
-    outer loop
-      vertex -208.534515 4.077466 -530.000000
-      vertex -209.024704 4.934365 -530.000000
-      vertex -209.062256 5.000000 -494.000000
-    endloop
-  endfacet
-  facet normal 0.868009 0.496549 0.000000
-    outer loop
-      vertex -208.534515 4.077466 -470.000000
-      vertex -208.534515 4.077466 -530.000000
-      vertex -209.062256 5.000000 -494.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -209.993942 8.669682 -509.986328
-      vertex -230.000000 8.683032 -509.986328
-      vertex -230.000000 8.669682 -509.986328
-    endloop
-  endfacet
-  facet normal 0.000000 0.134332 0.990936
-    outer loop
-      vertex -209.993942 8.669682 -509.986328
-      vertex -230.000000 8.669682 -509.986328
-      vertex -230.000000 8.265140 -509.931488
-    endloop
-  endfacet
-  facet normal 0.000000 0.134324 0.990937
-    outer loop
-      vertex -209.969269 8.256785 -509.930359
-      vertex -209.993942 8.669682 -509.986328
-      vertex -230.000000 8.265140 -509.931488
-    endloop
-  endfacet
-  facet normal 0.986346 0.164684 0.000000
-    outer loop
-      vertex -209.959244 8.196742 -530.000000
-      vertex -209.969269 8.256785 -530.000000
-      vertex -209.969269 8.256785 -509.930359
-    endloop
-  endfacet
-  facet normal 0.000000 0.324658 -0.945832
-    outer loop
-      vertex -209.946274 8.018058 -490.122406
-      vertex -230.000000 7.405930 -490.332520
-      vertex -230.000000 8.018058 -490.122406
-    endloop
-  endfacet
-  facet normal 0.000000 0.324658 -0.945831
-    outer loop
-      vertex -209.946274 8.018058 -490.122406
-      vertex -209.855408 7.393218 -490.336884
-      vertex -230.000000 7.405930 -490.332520
-    endloop
-  endfacet
-  facet normal 0.989588 0.143932 -0.000024
-    outer loop
-      vertex -209.946274 8.018058 -490.122406
-      vertex -209.947220 8.027859 -470.000000
-      vertex -209.860123 7.429034 -470.000000
-    endloop
-  endfacet
-  facet normal 0.989590 0.143917 -0.000024
-    outer loop
-      vertex -209.855408 7.393218 -490.336884
-      vertex -209.946274 8.018058 -490.122406
-      vertex -209.860123 7.429034 -470.000000
-    endloop
-  endfacet
-  facet normal 0.879519 0.475863 -0.000051
-    outer loop
-      vertex -209.062256 5.000000 -494.000000
-      vertex -209.070984 5.018692 -470.000000
-      vertex -209.036621 4.955180 -470.000000
-    endloop
-  endfacet
-  facet normal 0.867837 0.496850 -0.000001
-    outer loop
-      vertex -209.024704 4.934365 -530.000000
-      vertex -209.036621 4.955180 -530.000000
-      vertex -209.062256 5.000000 -505.999969
-    endloop
-  endfacet
-  facet normal 0.867979 0.496601 0.000000
-    outer loop
-      vertex -209.062256 5.000000 -494.000000
-      vertex -209.024704 4.934365 -530.000000
-      vertex -209.062256 5.000000 -505.999969
-    endloop
-  endfacet
-  facet normal 0.000035 0.215706 0.976458
-    outer loop
-      vertex -209.969269 8.256785 -509.930359
-      vertex -230.000000 8.265140 -509.931488
-      vertex -230.000000 8.031257 -509.879822
-    endloop
-  endfacet
-  facet normal 0.000035 0.215701 0.976459
-    outer loop
-      vertex -209.946274 8.018058 -509.877625
-      vertex -209.969269 8.256785 -509.930359
-      vertex -230.000000 8.031257 -509.879822
-    endloop
-  endfacet
-  facet normal 0.995389 0.095925 0.000210
-    outer loop
-      vertex -209.937180 7.967665 -530.000000
-      vertex -209.969269 8.256785 -509.930359
-      vertex -209.946274 8.018058 -509.877625
-    endloop
-  endfacet
-  facet normal 0.995393 0.095874 0.000210
-    outer loop
-      vertex -209.937180 7.967665 -530.000000
-      vertex -209.959244 8.196742 -530.000000
-      vertex -209.969269 8.256785 -509.930359
-    endloop
-  endfacet
-  facet normal 0.000000 0.324687 -0.945821
-    outer loop
-      vertex -209.855408 7.393218 -490.336884
-      vertex -230.000000 7.393218 -490.336884
-      vertex -230.000000 7.405930 -490.332520
-    endloop
-  endfacet
-  facet normal 0.977491 0.210978 -0.000145
-    outer loop
-      vertex -209.855408 7.393218 -490.336884
-      vertex -209.860123 7.429034 -470.000000
-      vertex -209.740112 6.873009 -470.000000
-    endloop
-  endfacet
-  facet normal 0.977488 0.210993 -0.000145
-    outer loop
-      vertex -209.730042 6.812207 -490.651337
-      vertex -209.855408 7.393218 -490.336884
-      vertex -209.740112 6.873009 -470.000000
-    endloop
-  endfacet
-  facet normal 0.895750 0.444559 -0.000020
-    outer loop
-      vertex -209.069092 5.013789 -493.668152
-      vertex -209.077377 5.031574 -470.000000
-      vertex -209.070984 5.018692 -470.000000
-    endloop
-  endfacet
-  facet normal 0.895756 0.444545 -0.000020
-    outer loop
-      vertex -209.070984 5.018692 -470.000000
-      vertex -209.062256 5.000000 -494.000000
-      vertex -209.069092 5.013789 -493.668152
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -230.000000 5.000000 -505.746429
-      vertex -230.000000 5.000000 -494.000000
-      vertex -209.062256 5.000000 -494.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -230.000000 5.000000 -505.746429
-      vertex -209.062256 5.000000 -494.000000
-      vertex -209.062256 5.000000 -505.999969
-    endloop
-  endfacet
-  facet normal 0.895196 0.445673 0.000124
-    outer loop
-      vertex -209.036621 4.955180 -530.000000
-      vertex -209.043411 4.968819 -530.000000
-      vertex -209.069046 5.013708 -506.330841
-    endloop
-  endfacet
-  facet normal 0.894912 0.446242 0.000123
-    outer loop
-      vertex -209.062256 5.000000 -505.999969
-      vertex -209.036621 4.955180 -530.000000
-      vertex -209.069046 5.013708 -506.330841
-    endloop
-  endfacet
-  facet normal 0.000000 0.164214 0.986425
-    outer loop
-      vertex -209.946274 8.018058 -509.877625
-      vertex -230.000000 8.031257 -509.879822
-      vertex -230.000000 8.018058 -509.877625
-    endloop
-  endfacet
-  facet normal 0.989587 0.143939 0.000087
-    outer loop
-      vertex -209.849976 7.368225 -530.000000
-      vertex -209.946274 8.018058 -509.877625
-      vertex -209.855408 7.393218 -509.663116
-    endloop
-  endfacet
-  facet normal 0.989583 0.143960 0.000087
-    outer loop
-      vertex -209.849976 7.368225 -530.000000
-      vertex -209.937180 7.967665 -530.000000
-      vertex -209.946274 8.018058 -509.877625
-    endloop
-  endfacet
-  facet normal 0.000000 0.475975 -0.879459
-    outer loop
-      vertex -209.855408 7.393218 -490.336884
-      vertex -230.000000 6.824100 -490.644897
-      vertex -230.000000 7.393218 -490.336884
-    endloop
-  endfacet
-  facet normal 0.000000 0.475978 -0.879457
-    outer loop
-      vertex -209.855408 7.393218 -490.336884
-      vertex -209.730042 6.812207 -490.651337
-      vertex -230.000000 6.824100 -490.644897
-    endloop
-  endfacet
-  facet normal 0.962094 0.272718 -0.000334
-    outer loop
-      vertex -209.730042 6.812207 -490.651337
-      vertex -209.740112 6.873009 -470.000000
-      vertex -209.734314 6.852553 -470.000000
-    endloop
-  endfacet
-  facet normal 0.962137 0.272565 -0.000333
-    outer loop
-      vertex -209.723984 6.790803 -490.667999
-      vertex -209.730042 6.812207 -490.651337
-      vertex -209.734314 6.852553 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.999138 -0.041519
-    outer loop
-      vertex -230.000000 5.000000 -494.000000
-      vertex -230.000000 5.013498 -493.675171
-      vertex -209.069092 5.013789 -493.668152
-    endloop
-  endfacet
-  facet normal 0.000000 0.999138 -0.041518
-    outer loop
-      vertex -230.000000 5.000000 -494.000000
-      vertex -209.069092 5.013789 -493.668152
-      vertex -209.062256 5.000000 -494.000000
-    endloop
-  endfacet
-  facet normal 0.897659 0.440691 -0.000017
-    outer loop
-      vertex -209.089096 5.054554 -493.341614
-      vertex -209.096329 5.070177 -470.000000
-      vertex -209.077377 5.031574 -470.000000
-    endloop
-  endfacet
-  facet normal 0.897682 0.440644 -0.000017
-    outer loop
-      vertex -209.077377 5.031574 -470.000000
-      vertex -209.069092 5.013789 -493.668152
-      vertex -209.089096 5.054554 -493.341614
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -230.000000 5.000000 -505.999969
-      vertex -230.000000 5.000000 -505.746429
-      vertex -209.062256 5.000000 -505.999969
-    endloop
-  endfacet
-  facet normal 0.000000 0.999143 0.041395
-    outer loop
-      vertex -230.000000 5.000000 -505.999969
-      vertex -209.062256 5.000000 -505.999969
-      vertex -209.069046 5.013708 -506.330841
-    endloop
-  endfacet
-  facet normal 0.000000 0.999143 0.041395
-    outer loop
-      vertex -230.000000 5.013418 -506.323853
-      vertex -230.000000 5.000000 -505.999969
-      vertex -209.069046 5.013708 -506.330841
-    endloop
-  endfacet
-  facet normal 0.897255 0.441512 0.000134
-    outer loop
-      vertex -209.043411 4.968819 -530.000000
-      vertex -209.062851 5.008325 -530.000000
-      vertex -209.089096 5.054554 -506.658386
-    endloop
-  endfacet
-  facet normal 0.897258 0.441506 0.000134
-    outer loop
-      vertex -209.069046 5.013708 -506.330841
-      vertex -209.043411 4.968819 -530.000000
-      vertex -209.089096 5.054554 -506.658386
-    endloop
-  endfacet
-  facet normal 0.000000 0.323938 0.946078
-    outer loop
-      vertex -209.946274 8.018058 -509.877625
-      vertex -230.000000 8.018058 -509.877625
-      vertex -230.000000 8.005402 -509.873291
-    endloop
-  endfacet
-  facet normal 0.977241 0.212134 0.000000
-    outer loop
-      vertex -209.729294 6.812279 -530.000000
-      vertex -209.855408 7.393218 -509.663116
-      vertex -209.729507 6.813230 -509.346771
-    endloop
-  endfacet
-  facet normal 0.977241 0.212134 0.000000
-    outer loop
-      vertex -209.729294 6.812279 -530.000000
-      vertex -209.849976 7.368225 -530.000000
-      vertex -209.855408 7.393218 -509.663116
-    endloop
-  endfacet
-  facet normal -0.000001 0.324715 0.945812
-    outer loop
-      vertex -209.946274 8.018058 -509.877625
-      vertex -230.000000 8.005402 -509.873291
-      vertex -230.000000 7.393218 -509.663116
-    endloop
-  endfacet
-  facet normal 0.000000 0.324700 0.945817
-    outer loop
-      vertex -209.855408 7.393218 -509.663116
-      vertex -209.946274 8.018058 -509.877625
-      vertex -230.000000 7.393218 -509.663116
-    endloop
-  endfacet
-  facet normal 0.000000 0.476128 -0.879376
-    outer loop
-      vertex -209.730042 6.812207 -490.651337
-      vertex -230.000000 6.812207 -490.651337
-      vertex -230.000000 6.824100 -490.644897
-    endloop
-  endfacet
-  facet normal 0.000000 0.614417 -0.788981
-    outer loop
-      vertex -209.730042 6.812207 -490.651337
-      vertex -230.000000 6.791241 -490.667664
-      vertex -230.000000 6.812207 -490.651337
-    endloop
-  endfacet
-  facet normal 0.000000 0.614290 -0.789080
-    outer loop
-      vertex -209.730042 6.812207 -490.651337
-      vertex -209.723984 6.790803 -490.667999
-      vertex -230.000000 6.791241 -490.667664
-    endloop
-  endfacet
-  facet normal 0.986376 0.164504 0.000002
-    outer loop
-      vertex -209.723984 6.790803 -490.667999
-      vertex -209.734314 6.852553 -470.000000
-      vertex -209.724014 6.790796 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000014 0.996588 -0.082537
-    outer loop
-      vertex -230.000000 5.013498 -493.675171
-      vertex -230.000000 5.014650 -493.661255
-      vertex -209.069092 5.013789 -493.668152
-    endloop
-  endfacet
-  facet normal 0.000000 0.992297 -0.123879
-    outer loop
-      vertex -230.000000 5.014650 -493.661255
-      vertex -230.000000 5.054554 -493.341614
-      vertex -209.089096 5.054554 -493.341614
-    endloop
-  endfacet
-  facet normal 0.000000 0.992297 -0.123879
-    outer loop
-      vertex -230.000000 5.014650 -493.661255
-      vertex -209.089096 5.054554 -493.341614
-      vertex -209.069092 5.013789 -493.668152
-    endloop
-  endfacet
-  facet normal 0.900589 0.434671 -0.000012
-    outer loop
-      vertex -209.121750 5.122224 -493.018738
-      vertex -209.127365 5.134480 -470.000000
-      vertex -209.096329 5.070177 -470.000000
-    endloop
-  endfacet
-  facet normal 0.900603 0.434642 -0.000012
-    outer loop
-      vertex -209.096329 5.070177 -470.000000
-      vertex -209.089096 5.054554 -493.341614
-      vertex -209.121750 5.122224 -493.018738
-    endloop
-  endfacet
-  facet normal 0.000014 0.996591 0.082503
-    outer loop
-      vertex -230.000000 5.014570 -506.337769
-      vertex -230.000000 5.013418 -506.323853
-      vertex -209.069046 5.013708 -506.330841
-    endloop
-  endfacet
-  facet normal 0.000000 0.992314 0.123747
-    outer loop
-      vertex -230.000000 5.014570 -506.337769
-      vertex -209.069046 5.013708 -506.330841
-      vertex -209.089096 5.054554 -506.658386
-    endloop
-  endfacet
-  facet normal 0.000000 0.992313 0.123751
-    outer loop
-      vertex -230.000000 5.054554 -506.658386
-      vertex -230.000000 5.014570 -506.337769
-      vertex -209.089096 5.054554 -506.658386
-    endloop
-  endfacet
-  facet normal 0.900351 0.435165 0.000150
-    outer loop
-      vertex -209.062851 5.008325 -530.000000
-      vertex -209.094666 5.074149 -530.000000
-      vertex -209.122101 5.122957 -506.984100
-    endloop
-  endfacet
-  facet normal 0.900359 0.435148 0.000151
-    outer loop
-      vertex -209.089096 5.054554 -506.658386
-      vertex -209.062851 5.008325 -530.000000
-      vertex -209.122101 5.122957 -506.984100
-    endloop
-  endfacet
-  facet normal 0.977310 0.211814 0.000000
-    outer loop
-      vertex -209.724609 6.790630 -530.000000
-      vertex -209.729507 6.813230 -509.346771
-      vertex -209.724609 6.790630 -509.334442
-    endloop
-  endfacet
-  facet normal 0.977380 0.211493 0.000000
-    outer loop
-      vertex -209.724609 6.790630 -530.000000
-      vertex -209.729294 6.812279 -530.000000
-      vertex -209.729507 6.813230 -509.346771
-    endloop
-  endfacet
-  facet normal -0.000002 0.478835 0.877905
-    outer loop
-      vertex -209.855408 7.393218 -509.663116
-      vertex -230.000000 7.381397 -509.656708
-      vertex -230.000000 6.813209 -509.346802
-    endloop
-  endfacet
-  facet normal -0.000002 0.478838 0.877903
-    outer loop
-      vertex -209.729507 6.813230 -509.346771
-      vertex -209.855408 7.393218 -509.663116
-      vertex -230.000000 6.813209 -509.346802
-    endloop
-  endfacet
-  facet normal 0.000000 0.476614 0.879112
-    outer loop
-      vertex -209.855408 7.393218 -509.663116
-      vertex -230.000000 7.393218 -509.663116
-      vertex -230.000000 7.381397 -509.656708
-    endloop
-  endfacet
-  facet normal 0.000000 0.613867 -0.789409
-    outer loop
-      vertex -209.723984 6.790803 -490.667999
-      vertex -230.000000 6.780567 -490.675964
-      vertex -230.000000 6.791241 -490.667664
-    endloop
-  endfacet
-  facet normal 0.962247 0.272179 0.000002
-    outer loop
-      vertex -209.723984 6.790803 -490.667999
-      vertex -209.724014 6.790796 -470.000000
-      vertex -209.588669 6.312304 -470.000000
-    endloop
-  endfacet
-  facet normal 0.962250 0.272168 0.000001
-    outer loop
-      vertex -209.582581 6.290874 -491.057098
-      vertex -209.723984 6.790803 -490.667999
-      vertex -209.588669 6.312304 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.978735 -0.205128
-    outer loop
-      vertex -230.000000 5.054554 -493.341614
-      vertex -230.000000 5.120798 -493.025543
-      vertex -209.121750 5.122224 -493.018738
-    endloop
-  endfacet
-  facet normal 0.000000 0.978735 -0.205127
-    outer loop
-      vertex -230.000000 5.054554 -493.341614
-      vertex -209.121750 5.122224 -493.018738
-      vertex -209.089096 5.054554 -493.341614
-    endloop
-  endfacet
-  facet normal 0.904900 0.425625 -0.000006
-    outer loop
-      vertex -209.166199 5.216731 -492.701202
-      vertex -209.169693 5.224472 -470.000000
-      vertex -209.127365 5.134480 -470.000000
-    endloop
-  endfacet
-  facet normal 0.904903 0.425618 -0.000006
-    outer loop
-      vertex -209.127365 5.134480 -470.000000
-      vertex -209.121750 5.122224 -493.018738
-      vertex -209.166199 5.216731 -492.701202
-    endloop
-  endfacet
-  facet normal 0.000000 0.978652 0.205524
-    outer loop
-      vertex -230.000000 5.054554 -506.658386
-      vertex -209.089096 5.054554 -506.658386
-      vertex -209.122101 5.122957 -506.984100
-    endloop
-  endfacet
-  facet normal 0.000000 0.978652 0.205525
-    outer loop
-      vertex -230.000000 5.121515 -506.977234
-      vertex -230.000000 5.054554 -506.658386
-      vertex -209.122101 5.122957 -506.984100
-    endloop
-  endfacet
-  facet normal 0.904666 0.426122 0.000174
-    outer loop
-      vertex -209.094666 5.074149 -530.000000
-      vertex -209.137100 5.164239 -530.000000
-      vertex -209.166199 5.216731 -507.298828
-    endloop
-  endfacet
-  facet normal 0.904707 0.426033 0.000175
-    outer loop
-      vertex -209.122101 5.122957 -506.984100
-      vertex -209.094666 5.074149 -530.000000
-      vertex -209.166199 5.216731 -507.298828
-    endloop
-  endfacet
-  facet normal -0.000002 0.478229 0.878235
-    outer loop
-      vertex -209.729507 6.813230 -509.346771
-      vertex -230.000000 6.813209 -509.346802
-      vertex -230.000000 6.791072 -509.334747
-    endloop
-  endfacet
-  facet normal -0.000003 0.478911 0.877863
-    outer loop
-      vertex -209.724609 6.790630 -509.334442
-      vertex -209.729507 6.813230 -509.346771
-      vertex -230.000000 6.791072 -509.334747
-    endloop
-  endfacet
-  facet normal 0.945831 0.324658 0.000000
-    outer loop
-      vertex -209.704285 6.731418 -530.000000
-      vertex -209.724609 6.790630 -530.000000
-      vertex -209.724609 6.790630 -509.334442
-    endloop
-  endfacet
-  facet normal 0.000000 0.614203 -0.789148
-    outer loop
-      vertex -209.723984 6.790803 -490.667999
-      vertex -230.000000 6.290874 -491.057098
-      vertex -230.000000 6.780567 -490.675964
-    endloop
-  endfacet
-  facet normal 0.000000 0.614201 -0.789149
-    outer loop
-      vertex -209.723984 6.790803 -490.667999
-      vertex -209.582581 6.290874 -491.057098
-      vertex -230.000000 6.290874 -491.057098
-    endloop
-  endfacet
-  facet normal 0.945358 0.326033 -0.000058
-    outer loop
-      vertex -209.582581 6.290874 -491.057098
-      vertex -209.588669 6.312304 -470.000000
-      vertex -209.441284 5.884950 -470.000000
-    endloop
-  endfacet
-  facet normal 0.945358 0.326035 -0.000058
-    outer loop
-      vertex -209.428299 5.843437 -491.543152
-      vertex -209.582581 6.290874 -491.057098
-      vertex -209.441284 5.884950 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000014 0.969380 -0.245566
-    outer loop
-      vertex -230.000000 5.120798 -493.025543
-      vertex -230.000000 5.124215 -493.012054
-      vertex -209.121750 5.122224 -493.018738
-    endloop
-  endfacet
-  facet normal 0.000000 0.958452 -0.285254
-    outer loop
-      vertex -230.000000 5.124215 -493.012054
-      vertex -230.000000 5.216731 -492.701202
-      vertex -209.166199 5.216731 -492.701202
-    endloop
-  endfacet
-  facet normal 0.000000 0.958450 -0.285260
-    outer loop
-      vertex -230.000000 5.124215 -493.012054
-      vertex -209.166199 5.216731 -492.701202
-      vertex -209.121750 5.122224 -493.018738
-    endloop
-  endfacet
-  facet normal 0.914017 0.405675 0.000002
-    outer loop
-      vertex -209.240967 5.385180 -492.317169
-      vertex -209.241013 5.385160 -470.000000
-      vertex -209.169693 5.224472 -470.000000
-    endloop
-  endfacet
-  facet normal 0.914011 0.405688 0.000002
-    outer loop
-      vertex -209.169693 5.224472 -470.000000
-      vertex -209.166199 5.216731 -492.701202
-      vertex -209.240967 5.385180 -492.317169
-    endloop
-  endfacet
-  facet normal 0.000014 0.969372 0.245598
-    outer loop
-      vertex -230.000000 5.124933 -506.990723
-      vertex -230.000000 5.121515 -506.977234
-      vertex -209.122101 5.122957 -506.984100
-    endloop
-  endfacet
-  facet normal 0.000000 0.958365 0.285547
-    outer loop
-      vertex -230.000000 5.124933 -506.990723
-      vertex -209.122101 5.122957 -506.984100
-      vertex -209.166199 5.216731 -507.298828
-    endloop
-  endfacet
-  facet normal 0.000000 0.958367 0.285539
-    outer loop
-      vertex -230.000000 5.216731 -507.298828
-      vertex -230.000000 5.124933 -506.990723
-      vertex -209.166199 5.216731 -507.298828
-    endloop
-  endfacet
-  facet normal 0.913835 0.406086 0.000233
-    outer loop
-      vertex -209.137100 5.164239 -530.000000
-      vertex -209.208939 5.325900 -530.000000
-      vertex -209.240967 5.385180 -507.682800
-    endloop
-  endfacet
-  facet normal 0.913813 0.406135 0.000232
-    outer loop
-      vertex -209.166199 5.216731 -507.298828
-      vertex -209.137100 5.164239 -530.000000
-      vertex -209.240967 5.385180 -507.682800
-    endloop
-  endfacet
-  facet normal 0.000002 0.616742 0.787165
-    outer loop
-      vertex -209.724609 6.790630 -509.334442
-      vertex -230.000000 6.791072 -509.334747
-      vertex -230.000000 6.301621 -508.951263
-    endloop
-  endfacet
-  facet normal 0.000002 0.616725 0.787179
-    outer loop
-      vertex -209.582581 6.290874 -508.942902
-      vertex -209.724609 6.790630 -509.334442
-      vertex -230.000000 6.301621 -508.951263
-    endloop
-  endfacet
-  facet normal 0.961875 0.273488 0.000162
-    outer loop
-      vertex -209.567978 6.252017 -530.000000
-      vertex -209.724609 6.790630 -509.334442
-      vertex -209.582581 6.290874 -508.942902
-    endloop
-  endfacet
-  facet normal 0.961875 0.273488 0.000162
-    outer loop
-      vertex -209.567978 6.252017 -530.000000
-      vertex -209.704285 6.731418 -530.000000
-      vertex -209.724609 6.790630 -509.334442
-    endloop
-  endfacet
-  facet normal 0.000000 0.735724 -0.677281
-    outer loop
-      vertex -230.000000 5.852729 -491.533051
-      vertex -230.000000 6.290874 -491.057098
-      vertex -209.582581 6.290874 -491.057098
-    endloop
-  endfacet
-  facet normal 0.000000 0.735729 -0.677276
-    outer loop
-      vertex -230.000000 5.852729 -491.533051
-      vertex -209.582581 6.290874 -491.057098
-      vertex -209.428299 5.843437 -491.543152
-    endloop
-  endfacet
-  facet normal 0.928606 0.371068 -0.000155
-    outer loop
-      vertex -209.428299 5.843437 -491.543152
-      vertex -209.441284 5.884950 -470.000000
-      vertex -209.303787 5.540861 -470.000000
-    endloop
-  endfacet
-  facet normal 0.928599 0.371084 -0.000155
-    outer loop
-      vertex -209.303787 5.540861 -470.000000
-      vertex -209.283997 5.482105 -492.096222
-      vertex -209.428299 5.843437 -491.543152
-    endloop
-  endfacet
-  facet normal 0.000000 0.915772 -0.401698
-    outer loop
-      vertex -230.000000 5.216731 -492.701202
-      vertex -230.000000 5.381650 -492.325226
-      vertex -209.240967 5.385180 -492.317169
-    endloop
-  endfacet
-  facet normal 0.000000 0.915776 -0.401689
-    outer loop
-      vertex -230.000000 5.216731 -492.701202
-      vertex -209.240967 5.385180 -492.317169
-      vertex -209.166199 5.216731 -492.701202
-    endloop
-  endfacet
-  facet normal 0.945806 0.324732 0.000002
-    outer loop
-      vertex -209.240967 5.385180 -492.317169
-      vertex -209.262894 5.448890 -470.000000
-      vertex -209.241013 5.385160 -470.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.915829 0.401568
-    outer loop
-      vertex -230.000000 5.222311 -507.311554
-      vertex -230.000000 5.216731 -507.298828
-      vertex -209.166199 5.216731 -507.298828
-    endloop
-  endfacet
-  facet normal 0.000000 0.915753 0.401743
-    outer loop
-      vertex -230.000000 5.222311 -507.311554
-      vertex -209.166199 5.216731 -507.298828
-      vertex -209.240967 5.385180 -507.682800
-    endloop
-  endfacet
-  facet normal 0.000000 0.915754 0.401740
-    outer loop
-      vertex -230.000000 5.387211 -507.687439
-      vertex -230.000000 5.222311 -507.311554
-      vertex -209.240967 5.385180 -507.682800
-    endloop
-  endfacet
-  facet normal 0.879448 0.475995 -0.000002
-    outer loop
-      vertex -209.208939 5.325900 -530.000000
-      vertex -209.241013 5.385160 -530.000000
-      vertex -209.240967 5.385180 -507.682800
-    endloop
-  endfacet
-  facet normal 0.000000 0.614064 0.789256
-    outer loop
-      vertex -209.582581 6.290874 -508.942902
-      vertex -230.000000 6.301621 -508.951263
-      vertex -230.000000 6.290874 -508.942902
-    endloop
-  endfacet
-  facet normal 0.945359 0.326030 0.000054
-    outer loop
-      vertex -209.420135 5.823334 -530.000000
-      vertex -209.582581 6.290874 -508.942902
-      vertex -209.428299 5.843437 -508.456818
-    endloop
-  endfacet
-  facet normal 0.945359 0.326031 0.000054
-    outer loop
-      vertex -209.420135 5.823334 -530.000000
-      vertex -209.567978 6.252017 -530.000000
-      vertex -209.582581 6.290874 -508.942902
-    endloop
-  endfacet
-  facet normal 0.000000 0.735970 -0.677014
-    outer loop
-      vertex -230.000000 5.843437 -491.543152
-      vertex -230.000000 5.852729 -491.533051
-      vertex -209.428299 5.843437 -491.543152
-    endloop
-  endfacet
-  facet normal 0.000000 0.837170 -0.546943
-    outer loop
-      vertex -230.000000 5.489660 -492.084656
-      vertex -230.000000 5.843437 -491.543152
-      vertex -209.428299 5.843437 -491.543152
-    endloop
-  endfacet
-  facet normal 0.000000 0.837171 -0.546942
-    outer loop
-      vertex -230.000000 5.489660 -492.084656
-      vertex -209.428299 5.843437 -491.543152
-      vertex -209.283997 5.482105 -492.096222
-    endloop
-  endfacet
-  facet normal 0.913746 0.406286 -0.000262
-    outer loop
-      vertex -209.283997 5.482105 -492.096222
-      vertex -209.303787 5.540861 -470.000000
-      vertex -209.262894 5.448890 -470.000000
-    endloop
-  endfacet
-  facet normal 0.913757 0.406260 -0.000262
-    outer loop
-      vertex -209.262894 5.448890 -470.000000
-      vertex -209.240967 5.385180 -492.317169
-      vertex -209.283997 5.482105 -492.096222
-    endloop
-  endfacet
-  facet normal 0.000000 0.915993 -0.401194
-    outer loop
-      vertex -230.000000 5.381650 -492.325226
-      vertex -230.000000 5.387211 -492.312531
-      vertex -209.240967 5.385180 -492.317169
-    endloop
-  endfacet
-  facet normal 0.000000 0.915801 0.401631
-    outer loop
-      vertex -230.000000 5.387211 -507.687439
-      vertex -209.240967 5.385180 -507.682800
-      vertex -209.283997 5.482105 -507.903809
-    endloop
-  endfacet
-  facet normal 0.000000 0.915796 0.401644
-    outer loop
-      vertex -230.000000 5.482105 -507.903809
-      vertex -230.000000 5.387211 -507.687439
-      vertex -209.283997 5.482105 -507.903809
-    endloop
-  endfacet
-  facet normal 0.914001 0.405712 -0.000002
-    outer loop
-      vertex -209.241013 5.385160 -530.000000
-      vertex -209.282104 5.477733 -530.000000
-      vertex -209.283997 5.482105 -507.903809
-    endloop
-  endfacet
-  facet normal 0.913981 0.405757 -0.000002
-    outer loop
-      vertex -209.240967 5.385180 -507.682800
-      vertex -209.241013 5.385160 -530.000000
-      vertex -209.283997 5.482105 -507.903809
-    endloop
-  endfacet
-  facet normal 0.000000 0.735383 0.677651
-    outer loop
-      vertex -230.000000 6.290874 -508.942902
-      vertex -230.000000 6.281650 -508.932892
-      vertex -209.582581 6.290874 -508.942902
-    endloop
-  endfacet
-  facet normal 0.928670 0.370906 0.000006
-    outer loop
-      vertex -209.282104 5.477733 -530.000000
-      vertex -209.420135 5.823334 -530.000000
-      vertex -209.428299 5.843437 -508.456818
-    endloop
-  endfacet
-  facet normal 0.928678 0.370888 0.000006
-    outer loop
-      vertex -209.283997 5.482105 -507.903809
-      vertex -209.282104 5.477733 -530.000000
-      vertex -209.428299 5.843437 -508.456818
-    endloop
-  endfacet
-  facet normal 0.000000 0.735751 0.677253
-    outer loop
-      vertex -230.000000 5.843437 -508.456818
-      vertex -209.428299 5.843437 -508.456818
-      vertex -209.582581 6.290874 -508.942902
-    endloop
-  endfacet
-  facet normal 0.000000 0.735758 0.677244
-    outer loop
-      vertex -230.000000 6.281650 -508.932892
-      vertex -230.000000 5.843437 -508.456818
-      vertex -209.582581 6.290874 -508.942902
-    endloop
-  endfacet
-  facet normal 0.000000 0.837202 -0.546894
-    outer loop
-      vertex -230.000000 5.482105 -492.096222
-      vertex -230.000000 5.489660 -492.084656
-      vertex -209.283997 5.482105 -492.096222
-    endloop
-  endfacet
-  facet normal 0.000000 0.915754 -0.401739
-    outer loop
-      vertex -230.000000 5.387211 -492.312531
-      vertex -230.000000 5.482105 -492.096222
-      vertex -209.283997 5.482105 -492.096222
-    endloop
-  endfacet
-  facet normal 0.000000 0.915761 -0.401724
-    outer loop
-      vertex -230.000000 5.387211 -492.312531
-      vertex -209.283997 5.482105 -492.096222
-      vertex -209.240967 5.385180 -492.317169
-    endloop
-  endfacet
-  facet normal 0.000000 0.837143 0.546984
-    outer loop
-      vertex -230.000000 5.482105 -507.903809
-      vertex -209.283997 5.482105 -507.903809
-      vertex -209.428299 5.843437 -508.456818
-    endloop
-  endfacet
-  facet normal 0.000000 0.837148 0.546977
-    outer loop
-      vertex -230.000000 5.835933 -508.445343
-      vertex -230.000000 5.482105 -507.903809
-      vertex -209.428299 5.843437 -508.456818
-    endloop
-  endfacet
-  facet normal 0.000000 0.836924 0.547319
-    outer loop
-      vertex -230.000000 5.843437 -508.456818
-      vertex -230.000000 5.835933 -508.445343
-      vertex -209.428299 5.843437 -508.456818
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/Final.stl b/apps/cpu/Multiphase/backup/Final.stl
deleted file mode 100644
index a164dcafa1f68e70277d5d2c41d853c7416e4cff..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/Final.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd b/apps/cpu/Multiphase/backup/FlowFocusing.FCStd
deleted file mode 100644
index 80e088eaddb292386f6349b11f0cbefa75824501..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1
deleted file mode 100644
index 9d5186df8e258a78afc0f27af756cf28d259af14..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.ast b/apps/cpu/Multiphase/backup/FlowFocusing.ast
deleted file mode 100644
index 062fb6d037177063808c135f8bb8a3ef48f430db..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/FlowFocusing.ast
+++ /dev/null
@@ -1,3194 +0,0 @@
-solid Mesh
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 -5.325651 1.935894
-      vertex 165.500000 -5.500000 0.500000
-      vertex 165.500000 -5.325651 -0.935894
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 -5.325651 1.935894
-      vertex 165.500000 -5.325651 -0.935894
-      vertex 165.500000 -4.812736 -2.288339
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 -5.325651 1.935894
-      vertex 165.500000 -4.812736 -2.288339
-      vertex 165.500000 -3.991065 -3.478736
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 -5.325651 1.935894
-      vertex 165.500000 -3.991065 -3.478736
-      vertex 165.500000 -2.908388 -4.437903
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 -5.325651 1.935894
-      vertex 165.500000 -2.908388 -4.437903
-      vertex 165.500000 -1.627629 -5.110097
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 3.908388 -4.437903
-      vertex 165.500000 1.223220 -5.456253
-      vertex 165.500000 2.627629 -5.110097
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 -1.627629 6.110097
-      vertex 165.500000 -2.908388 5.437903
-      vertex 165.500000 -3.991065 4.478736
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 -1.627629 6.110097
-      vertex 165.500000 -3.991065 4.478736
-      vertex 165.500000 -4.812736 3.288339
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 -1.627629 6.110097
-      vertex 165.500000 -4.812736 3.288339
-      vertex 165.500000 -5.325651 1.935894
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 6.325651 -0.935894
-      vertex 165.500000 3.908388 -4.437903
-      vertex 165.500000 4.991065 -3.478736
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 6.325651 -0.935894
-      vertex 165.500000 4.991065 -3.478736
-      vertex 165.500000 5.812736 -2.288339
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 6.325651 1.935894
-      vertex 165.500000 6.325651 -0.935894
-      vertex 165.500000 6.500000 0.500000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 1.223220 6.456253
-      vertex 165.500000 -0.223220 6.456253
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 -0.223220 6.456253
-      vertex 165.500000 -1.627629 6.110097
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 -1.627629 -5.110097
-      vertex 165.500000 -0.223220 -5.456253
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 -0.223220 -5.456253
-      vertex 165.500000 1.223220 -5.456253
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 1.223220 -5.456253
-      vertex 165.500000 3.908388 -4.437903
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 -5.325651 1.935894
-      vertex 165.500000 -1.627629 -5.110097
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 3.908388 -4.437903
-      vertex 165.500000 6.325651 -0.935894
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 -1.627629 6.110097
-      vertex 165.500000 -5.325651 1.935894
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 6.325651 -0.935894
-      vertex 165.500000 6.325651 1.935894
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 4.991065 4.478736
-      vertex 165.500000 6.325651 1.935894
-      vertex 165.500000 5.812736 3.288339
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 4.991065 4.478736
-      vertex 165.500000 3.908388 5.437903
-      vertex 165.500000 2.627629 6.110097
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 165.500000 4.991065 4.478736
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 6.325651 1.935894
-    endloop
-  endfacet
-  facet normal -0.000107 -0.772860 -0.634577
-    outer loop
-      vertex 165.500000 -3.991065 -3.478736
-      vertex 50.729084 -4.406632 -2.953253
-      vertex 50.899483 -3.842341 -3.640540
-    endloop
-  endfacet
-  facet normal 0.000185 -0.667672 -0.744456
-    outer loop
-      vertex 165.500000 -3.991065 -3.478736
-      vertex 50.899483 -3.842341 -3.640540
-      vertex 51.079292 -3.144950 -4.265956
-    endloop
-  endfacet
-  facet normal 0.000379 -0.822984 -0.568065
-    outer loop
-      vertex 165.500000 -3.991065 -3.478736
-      vertex 165.500000 -4.812736 -2.288339
-      vertex 50.729084 -4.406632 -2.953253
-    endloop
-  endfacet
-  facet normal -0.000154 -0.538308 -0.842748
-    outer loop
-      vertex 165.500000 -2.908388 -4.437903
-      vertex 51.079292 -3.144950 -4.265956
-      vertex 51.254513 -2.292002 -4.810812
-    endloop
-  endfacet
-  facet normal 0.000000 0.993822 0.110987
-    outer loop
-      vertex 165.500000 6.500000 0.500000
-      vertex 50.332397 6.500000 0.500000
-      vertex 50.391338 6.352184 1.823611
-    endloop
-  endfacet
-  facet normal 0.000246 -0.663123 -0.748511
-    outer loop
-      vertex 165.500000 -2.908388 -4.437903
-      vertex 165.500000 -3.991065 -3.478736
-      vertex 51.079292 -3.144950 -4.265956
-    endloop
-  endfacet
-  facet normal -0.000102 0.944707 0.327915
-    outer loop
-      vertex 165.500000 6.325651 1.935894
-      vertex 50.391338 6.352184 1.823611
-      vertex 50.556267 5.913767 3.086720
-    endloop
-  endfacet
-  facet normal -0.000216 -0.379672 -0.925121
-    outer loop
-      vertex 165.500000 -1.627629 -5.110097
-      vertex 51.254513 -2.292002 -4.810812
-      vertex 51.404663 -1.244035 -5.240935
-    endloop
-  endfacet
-  facet normal 0.000111 0.992709 0.120537
-    outer loop
-      vertex 165.500000 6.325651 1.935894
-      vertex 165.500000 6.500000 0.500000
-      vertex 50.391338 6.352184 1.823611
-    endloop
-  endfacet
-  facet normal 0.000383 -0.464723 -0.885456
-    outer loop
-      vertex 165.500000 -1.627629 -5.110097
-      vertex 165.500000 -2.908388 -4.437903
-      vertex 51.254513 -2.292002 -4.810812
-    endloop
-  endfacet
-  facet normal -0.000188 0.847029 0.531547
-    outer loop
-      vertex 165.500000 5.812736 3.288339
-      vertex 50.556267 5.913767 3.086720
-      vertex 50.799007 5.184052 4.249620
-    endloop
-  endfacet
-  facet normal 0.000200 0.935016 0.354605
-    outer loop
-      vertex 165.500000 5.812736 3.288339
-      vertex 165.500000 6.325651 1.935894
-      vertex 50.556267 5.913767 3.086720
-    endloop
-  endfacet
-  facet normal 0.000158 -0.223303 -0.974749
-    outer loop
-      vertex 165.500000 -0.223220 -5.456253
-      vertex 51.404663 -1.244035 -5.240935
-      vertex 51.473011 -0.428928 -5.427655
-    endloop
-  endfacet
-  facet normal -0.000110 -0.077642 -0.996981
-    outer loop
-      vertex 165.500000 -0.223220 -5.456253
-      vertex 51.473011 -0.428928 -5.427655
-      vertex 51.500000 0.500000 -5.500000
-    endloop
-  endfacet
-  facet normal 0.000309 -0.239316 -0.970942
-    outer loop
-      vertex 165.500000 -0.223220 -5.456253
-      vertex 165.500000 -1.627629 -5.110097
-      vertex 51.404663 -1.244035 -5.240935
-    endloop
-  endfacet
-  facet normal -0.000252 0.699064 0.715059
-    outer loop
-      vertex 165.500000 4.991065 4.478736
-      vertex 50.799007 5.184052 4.249620
-      vertex 51.079708 4.143171 5.267316
-    endloop
-  endfacet
-  facet normal 0.000250 0.822984 0.568065
-    outer loop
-      vertex 165.500000 4.991065 4.478736
-      vertex 165.500000 5.812736 3.288339
-      vertex 50.799007 5.184052 4.249620
-    endloop
-  endfacet
-  facet normal -0.000351 0.115384 -0.993321
-    outer loop
-      vertex 165.500000 1.223220 -5.456253
-      vertex 51.500000 0.500000 -5.500000
-      vertex 51.440762 1.875535 -5.340197
-    endloop
-  endfacet
-  facet normal -0.000250 0.505199 0.863003
-    outer loop
-      vertex 165.500000 3.908388 5.437903
-      vertex 51.079708 4.143171 5.267316
-      vertex 51.322906 2.873937 6.010392
-    endloop
-  endfacet
-  facet normal 0.000384 0.000000 -1.000000
-    outer loop
-      vertex 165.500000 1.223220 -5.456253
-      vertex 165.500000 -0.223220 -5.456253
-      vertex 51.500000 0.500000 -5.500000
-    endloop
-  endfacet
-  facet normal 0.000245 0.663123 0.748511
-    outer loop
-      vertex 165.500000 3.908388 5.437903
-      vertex 165.500000 4.991065 4.478736
-      vertex 51.079708 4.143171 5.267316
-    endloop
-  endfacet
-  facet normal -0.000226 0.323714 -0.946155
-    outer loop
-      vertex 165.500000 2.627629 -5.110097
-      vertex 51.440762 1.875535 -5.340197
-      vertex 51.304974 2.990543 -4.958681
-    endloop
-  endfacet
-  facet normal -0.000167 0.307643 0.951502
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 51.322906 2.873937 6.010392
-      vertex 51.446964 1.801675 6.357102
-    endloop
-  endfacet
-  facet normal 0.000229 0.464723 0.885456
-    outer loop
-      vertex 165.500000 2.627629 6.110097
-      vertex 165.500000 3.908388 5.437903
-      vertex 51.322906 2.873937 6.010392
-    endloop
-  endfacet
-  facet normal 0.000381 0.239316 -0.970942
-    outer loop
-      vertex 165.500000 2.627629 -5.110097
-      vertex 165.500000 1.223220 -5.456253
-      vertex 51.440762 1.875535 -5.340197
-    endloop
-  endfacet
-  facet normal 0.000011 0.492470 -0.870329
-    outer loop
-      vertex 165.500000 3.908388 -4.437903
-      vertex 51.304974 2.990543 -4.958681
-      vertex 51.135273 3.896791 -4.445888
-    endloop
-  endfacet
-  facet normal -0.000010 0.629979 -0.776612
-    outer loop
-      vertex 165.500000 3.908388 -4.437903
-      vertex 51.135273 3.896791 -4.445888
-      vertex 50.955387 4.638966 -3.843842
-    endloop
-  endfacet
-  facet normal -0.000311 0.109112 0.994029
-    outer loop
-      vertex 165.500000 1.223220 6.456253
-      vertex 51.446964 1.801675 6.357102
-      vertex 51.500000 0.500000 6.500000
-    endloop
-  endfacet
-  facet normal 0.000370 0.239316 0.970942
-    outer loop
-      vertex 165.500000 1.223220 6.456253
-      vertex 165.500000 2.627629 6.110097
-      vertex 51.446964 1.801675 6.357102
-    endloop
-  endfacet
-  facet normal 0.000303 0.464723 -0.885456
-    outer loop
-      vertex 165.500000 3.908388 -4.437903
-      vertex 165.500000 2.627629 -5.110097
-      vertex 51.304974 2.990543 -4.958681
-    endloop
-  endfacet
-  facet normal -0.000351 -0.115384 0.993321
-    outer loop
-      vertex 165.500000 -0.223220 6.456253
-      vertex 51.500000 0.500000 6.500000
-      vertex 51.440762 -0.875535 6.340197
-    endloop
-  endfacet
-  facet normal -0.000146 0.742297 -0.670071
-    outer loop
-      vertex 165.500000 4.991065 -3.478736
-      vertex 50.955387 4.638966 -3.843842
-      vertex 50.780647 5.243602 -3.173995
-    endloop
-  endfacet
-  facet normal 0.000384 -0.000000 1.000000
-    outer loop
-      vertex 165.500000 -0.223220 6.456253
-      vertex 165.500000 1.223220 6.456253
-      vertex 51.500000 0.500000 6.500000
-    endloop
-  endfacet
-  facet normal 0.000347 0.663123 -0.748511
-    outer loop
-      vertex 165.500000 4.991065 -3.478736
-      vertex 165.500000 3.908388 -4.437903
-      vertex 50.955387 4.638966 -3.843842
-    endloop
-  endfacet
-  facet normal 0.000381 -0.239316 0.970942
-    outer loop
-      vertex 165.500000 -1.627629 6.110097
-      vertex 165.500000 -0.223220 6.456253
-      vertex 51.440762 -0.875535 6.340197
-    endloop
-  endfacet
-  facet normal -0.000226 -0.323713 0.946155
-    outer loop
-      vertex 165.500000 -1.627629 6.110097
-      vertex 51.440762 -0.875535 6.340197
-      vertex 51.304974 -1.990543 5.958681
-    endloop
-  endfacet
-  facet normal 0.000138 0.833077 -0.553157
-    outer loop
-      vertex 165.500000 5.812736 -2.288339
-      vertex 50.780647 5.243602 -3.173995
-      vertex 50.622238 5.726650 -2.446545
-    endloop
-  endfacet
-  facet normal -0.000088 0.903881 -0.427784
-    outer loop
-      vertex 165.500000 5.812736 -2.288339
-      vertex 50.622238 5.726650 -2.446545
-      vertex 50.490826 6.092421 -1.673668
-    endloop
-  endfacet
-  facet normal 0.000303 0.822984 -0.568065
-    outer loop
-      vertex 165.500000 5.812736 -2.288339
-      vertex 165.500000 4.991065 -3.478736
-      vertex 50.780647 5.243602 -3.173995
-    endloop
-  endfacet
-  facet normal -0.000040 0.955261 -0.295765
-    outer loop
-      vertex 165.500000 6.325651 -0.935894
-      vertex 50.490826 6.092421 -1.673668
-      vertex 50.395226 6.342282 -0.866653
-    endloop
-  endfacet
-  facet normal 0.000039 0.985167 -0.171597
-    outer loop
-      vertex 165.500000 6.325651 -0.935894
-      vertex 50.395226 6.342282 -0.866653
-      vertex 50.348400 6.460290 -0.189163
-    endloop
-  endfacet
-  facet normal 0.000303 -0.464723 0.885456
-    outer loop
-      vertex 165.500000 -2.908388 5.437903
-      vertex 165.500000 -1.627629 6.110097
-      vertex 51.304974 -1.990543 5.958681
-    endloop
-  endfacet
-  facet normal 0.000011 -0.492470 0.870329
-    outer loop
-      vertex 165.500000 -2.908388 5.437903
-      vertex 51.304974 -1.990543 5.958681
-      vertex 51.135273 -2.896791 5.445888
-    endloop
-  endfacet
-  facet normal 0.000379 0.935016 -0.354605
-    outer loop
-      vertex 165.500000 6.325651 -0.935894
-      vertex 165.500000 5.812736 -2.288339
-      vertex 50.490826 6.092421 -1.673668
-    endloop
-  endfacet
-  facet normal -0.000010 -0.629979 0.776612
-    outer loop
-      vertex 165.500000 -2.908388 5.437903
-      vertex 51.135273 -2.896791 5.445888
-      vertex 50.955387 -3.638966 4.843842
-    endloop
-  endfacet
-  facet normal 0.000000 0.998344 -0.057525
-    outer loop
-      vertex 165.500000 6.500000 0.500000
-      vertex 50.348400 6.460290 -0.189163
-      vertex 50.332397 6.500000 0.500000
-    endloop
-  endfacet
-  facet normal 0.000379 0.992709 -0.120537
-    outer loop
-      vertex 165.500000 6.500000 0.500000
-      vertex 165.500000 6.325651 -0.935894
-      vertex 50.348400 6.460290 -0.189163
-    endloop
-  endfacet
-  facet normal 0.000347 -0.663123 0.748511
-    outer loop
-      vertex 165.500000 -3.991065 4.478736
-      vertex 165.500000 -2.908388 5.437903
-      vertex 50.955387 -3.638966 4.843842
-    endloop
-  endfacet
-  facet normal -0.000146 -0.742263 0.670108
-    outer loop
-      vertex 165.500000 -3.991065 4.478736
-      vertex 50.955387 -3.638966 4.843842
-      vertex 50.780762 -4.243235 4.174469
-    endloop
-  endfacet
-  facet normal 0.000302 -0.822984 0.568065
-    outer loop
-      vertex 165.500000 -4.812736 3.288339
-      vertex 165.500000 -3.991065 4.478736
-      vertex 50.780762 -4.243235 4.174469
-    endloop
-  endfacet
-  facet normal 0.000142 -0.832783 0.553599
-    outer loop
-      vertex 165.500000 -4.812736 3.288339
-      vertex 50.780762 -4.243235 4.174469
-      vertex 50.623219 -4.723814 3.451571
-    endloop
-  endfacet
-  facet normal -0.000089 -0.903265 0.429084
-    outer loop
-      vertex 165.500000 -4.812736 3.288339
-      vertex 50.623219 -4.723814 3.451571
-      vertex 50.492382 -5.088249 2.684370
-    endloop
-  endfacet
-  facet normal -0.000032 -0.954624 0.297812
-    outer loop
-      vertex 165.500000 -5.325651 1.935894
-      vertex 50.492382 -5.088249 2.684370
-      vertex 50.396503 -5.339019 1.880529
-    endloop
-  endfacet
-  facet normal 0.000037 -0.986889 0.161399
-    outer loop
-      vertex 165.500000 -5.325651 1.935894
-      vertex 50.396503 -5.339019 1.880529
-      vertex 50.342648 -5.474597 1.051531
-    endloop
-  endfacet
-  facet normal 0.000378 -0.935016 0.354605
-    outer loop
-      vertex 165.500000 -5.325651 1.935894
-      vertex 165.500000 -4.812736 3.288339
-      vertex 50.492382 -5.088249 2.684370
-    endloop
-  endfacet
-  facet normal -0.000115 -0.999759 0.021950
-    outer loop
-      vertex 165.500000 -5.500000 0.500000
-      vertex 50.342648 -5.474597 1.051531
-      vertex 50.335209 -5.493046 0.211204
-    endloop
-  endfacet
-  facet normal 0.000236 -0.993023 -0.117918
-    outer loop
-      vertex 165.500000 -5.500000 0.500000
-      vertex 50.335209 -5.493046 0.211204
-      vertex 50.374840 -5.393991 -0.622882
-    endloop
-  endfacet
-  facet normal 0.000358 -0.992709 0.120537
-    outer loop
-      vertex 165.500000 -5.500000 0.500000
-      vertex 165.500000 -5.325651 1.935894
-      vertex 50.342648 -5.474597 1.051531
-    endloop
-  endfacet
-  facet normal -0.000121 -0.966795 -0.255552
-    outer loop
-      vertex 165.500000 -5.325651 -0.935894
-      vertex 50.374840 -5.393991 -0.622882
-      vertex 50.458221 -5.179053 -1.436066
-    endloop
-  endfacet
-  facet normal 0.000262 -0.992709 -0.120537
-    outer loop
-      vertex 165.500000 -5.325651 -0.935894
-      vertex 165.500000 -5.500000 0.500000
-      vertex 50.374840 -5.393991 -0.622882
-    endloop
-  endfacet
-  facet normal 0.000055 -0.921408 -0.388597
-    outer loop
-      vertex 165.500000 -4.812736 -2.288339
-      vertex 50.458221 -5.179053 -1.436066
-      vertex 50.578938 -4.850290 -2.215583
-    endloop
-  endfacet
-  facet normal -0.000046 -0.856947 -0.515404
-    outer loop
-      vertex 165.500000 -4.812736 -2.288339
-      vertex 50.578938 -4.850290 -2.215583
-      vertex 50.729084 -4.406632 -2.953253
-    endloop
-  endfacet
-  facet normal 0.000350 -0.935016 -0.354605
-    outer loop
-      vertex 165.500000 -4.812736 -2.288339
-      vertex 165.500000 -5.325651 -0.935894
-      vertex 50.458221 -5.179053 -1.436066
-    endloop
-  endfacet
-  facet normal 0.997451 0.071339 -0.001616
-    outer loop
-      vertex 51.440762 1.875535 -5.340197
-      vertex 51.500000 0.500000 -29.500000
-      vertex 51.337143 2.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.999074 0.043026 0.000000
-    outer loop
-      vertex 51.440762 1.875535 -5.340197
-      vertex 51.500000 0.500000 -5.500000
-      vertex 51.500000 0.500000 -29.500000
-    endloop
-  endfacet
-  facet normal 0.999171 0.040710 0.000000
-    outer loop
-      vertex 51.500000 0.500000 30.500000
-      vertex 51.500000 0.500000 6.500000
-      vertex 51.446964 1.801675 6.357102
-    endloop
-  endfacet
-  facet normal 0.992676 0.120805 0.000250
-    outer loop
-      vertex 51.304974 2.990543 -4.958681
-      vertex 51.440762 1.875535 -5.340197
-      vertex 51.337143 2.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.977146 0.212565 -0.001627
-    outer loop
-      vertex 51.135273 3.896791 -4.445888
-      vertex 51.337143 2.777037 -29.500000
-      vertex 50.851887 5.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.982883 0.184229 -0.000314
-    outer loop
-      vertex 51.135273 3.896791 -4.445888
-      vertex 51.304974 2.990543 -4.958681
-      vertex 51.337143 2.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.971762 0.235962 -0.000529
-    outer loop
-      vertex 50.955387 4.638966 -3.843842
-      vertex 51.135273 3.896791 -4.445888
-      vertex 50.851887 5.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.982114 0.188285 0.000174
-    outer loop
-      vertex 51.337143 2.777037 30.500000
-      vertex 51.322906 2.873937 6.010392
-      vertex 51.079708 4.143171 5.267316
-    endloop
-  endfacet
-  facet normal 0.993378 0.114891 -0.000123
-    outer loop
-      vertex 51.337143 2.777037 30.500000
-      vertex 51.446964 1.801675 6.357102
-      vertex 51.322906 2.873937 6.010392
-    endloop
-  endfacet
-  facet normal 0.997451 0.071339 0.001655
-    outer loop
-      vertex 51.337143 2.777037 30.500000
-      vertex 51.500000 0.500000 30.500000
-      vertex 51.446964 1.801675 6.357102
-    endloop
-  endfacet
-  facet normal 0.960719 0.277522 0.000113
-    outer loop
-      vertex 50.780647 5.243602 -3.173995
-      vertex 50.955387 4.638966 -3.843842
-      vertex 50.851887 5.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.950111 0.311913 -0.000224
-    outer loop
-      vertex 50.622238 5.726650 -2.446545
-      vertex 50.780647 5.243602 -3.173995
-      vertex 50.851887 5.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.940392 0.340090 -0.001055
-    outer loop
-      vertex 50.490826 6.092421 -1.673668
-      vertex 50.622238 5.726650 -2.446545
-      vertex 50.851887 5.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.936949 0.349464 -0.001465
-    outer loop
-      vertex 50.490826 6.092421 -1.673668
-      vertex 50.851887 5.007721 -29.500000
-      vertex 50.054111 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.932892 0.360154 -0.000996
-    outer loop
-      vertex 50.395226 6.342282 -0.866653
-      vertex 50.490826 6.092421 -1.673668
-      vertex 50.054111 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.928288 0.371862 -0.000613
-    outer loop
-      vertex 50.348400 6.460290 -0.189163
-      vertex 50.395226 6.342282 -0.866653
-      vertex 50.054111 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.925109 0.379701 -0.000397
-    outer loop
-      vertex 50.332397 6.500000 0.500000
-      vertex 50.348400 6.460290 -0.189163
-      vertex 50.054111 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.948776 0.315948 0.000211
-    outer loop
-      vertex 50.851887 5.007721 30.500000
-      vertex 50.799007 5.184052 4.249620
-      vertex 50.556267 5.913767 3.086720
-    endloop
-  endfacet
-  facet normal 0.965556 0.260195 -0.000197
-    outer loop
-      vertex 50.851887 5.007721 30.500000
-      vertex 51.079708 4.143171 5.267316
-      vertex 50.799007 5.184052 4.249620
-    endloop
-  endfacet
-  facet normal 0.977146 0.212565 0.001539
-    outer loop
-      vertex 50.851887 5.007721 30.500000
-      vertex 51.337143 2.777037 30.500000
-      vertex 51.079708 4.143171 5.267316
-    endloop
-  endfacet
-  facet normal 0.877677 0.479248 0.002189
-    outer loop
-      vertex 48.960056 9.150253 -29.500000
-      vertex 50.332397 6.500000 0.500000
-      vertex 50.054111 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.936949 0.349464 0.001446
-    outer loop
-      vertex 50.054111 7.146640 30.500000
-      vertex 50.851887 5.007721 30.500000
-      vertex 50.556267 5.913767 3.086720
-    endloop
-  endfacet
-  facet normal 0.927238 0.374473 0.000530
-    outer loop
-      vertex 50.054111 7.146640 30.500000
-      vertex 50.391338 6.352184 1.823611
-      vertex 50.332397 6.500000 0.500000
-    endloop
-  endfacet
-  facet normal 0.934857 0.355022 0.001158
-    outer loop
-      vertex 50.054111 7.146640 30.500000
-      vertex 50.556267 5.913767 3.086720
-      vertex 50.391338 6.352184 1.823611
-    endloop
-  endfacet
-  facet normal 0.888010 0.459825 0.000000
-    outer loop
-      vertex 48.960056 9.150253 30.500000
-      vertex 50.332397 6.500000 0.500000
-      vertex 48.960056 9.150253 -29.500000
-    endloop
-  endfacet
-  facet normal 0.877677 0.479248 -0.002189
-    outer loop
-      vertex 48.960056 9.150253 30.500000
-      vertex 50.054111 7.146640 30.500000
-      vertex 50.332397 6.500000 0.500000
-    endloop
-  endfacet
-  facet normal 0.800541 0.599278 0.000000
-    outer loop
-      vertex 47.591991 10.977772 30.500000
-      vertex 48.960056 9.150253 30.500000
-      vertex 48.960056 9.150253 -29.500000
-    endloop
-  endfacet
-  facet normal 0.800541 0.599278 0.000000
-    outer loop
-      vertex 47.591991 10.977772 30.500000
-      vertex 48.960056 9.150253 -29.500000
-      vertex 47.591991 10.977772 -29.500000
-    endloop
-  endfacet
-  facet normal 0.707107 0.707106 0.000000
-    outer loop
-      vertex 45.977772 12.591993 30.500000
-      vertex 47.591991 10.977772 -29.500000
-      vertex 45.977772 12.591993 -29.500000
-    endloop
-  endfacet
-  facet normal 0.707107 0.707106 0.000000
-    outer loop
-      vertex 45.977772 12.591993 30.500000
-      vertex 47.591991 10.977772 30.500000
-      vertex 47.591991 10.977772 -29.500000
-    endloop
-  endfacet
-  facet normal 0.599278 0.800541 0.000000
-    outer loop
-      vertex 44.150253 13.960056 30.500000
-      vertex 45.977772 12.591993 30.500000
-      vertex 45.977772 12.591993 -29.500000
-    endloop
-  endfacet
-  facet normal 0.599278 0.800541 0.000000
-    outer loop
-      vertex 44.150253 13.960056 30.500000
-      vertex 45.977772 12.591993 -29.500000
-      vertex 44.150253 13.960056 -29.500000
-    endloop
-  endfacet
-  facet normal 0.479249 0.877679 0.000000
-    outer loop
-      vertex 42.146641 15.054111 30.500000
-      vertex 44.150253 13.960056 -29.500000
-      vertex 42.146641 15.054111 -29.500000
-    endloop
-  endfacet
-  facet normal 0.479249 0.877679 0.000000
-    outer loop
-      vertex 42.146641 15.054111 30.500000
-      vertex 44.150253 13.960056 30.500000
-      vertex 44.150253 13.960056 -29.500000
-    endloop
-  endfacet
-  facet normal 0.349464 0.936950 0.000000
-    outer loop
-      vertex 40.007721 15.851888 30.500000
-      vertex 42.146641 15.054111 -29.500000
-      vertex 40.007721 15.851888 -29.500000
-    endloop
-  endfacet
-  facet normal 0.349464 0.936950 0.000000
-    outer loop
-      vertex 40.007721 15.851888 30.500000
-      vertex 42.146641 15.054111 30.500000
-      vertex 42.146641 15.054111 -29.500000
-    endloop
-  endfacet
-  facet normal 0.212565 0.977147 0.000000
-    outer loop
-      vertex 37.777039 16.337143 30.500000
-      vertex 40.007721 15.851888 -29.500000
-      vertex 37.777039 16.337143 -29.500000
-    endloop
-  endfacet
-  facet normal 0.212565 0.977147 0.000000
-    outer loop
-      vertex 37.777039 16.337143 30.500000
-      vertex 40.007721 15.851888 30.500000
-      vertex 40.007721 15.851888 -29.500000
-    endloop
-  endfacet
-  facet normal 0.071339 0.997452 0.000000
-    outer loop
-      vertex 35.500000 16.500000 30.500000
-      vertex 37.777039 16.337143 -29.500000
-      vertex 35.500000 16.500000 -29.500000
-    endloop
-  endfacet
-  facet normal 0.071339 0.997452 0.000000
-    outer loop
-      vertex 35.500000 16.500000 30.500000
-      vertex 37.777039 16.337143 30.500000
-      vertex 37.777039 16.337143 -29.500000
-    endloop
-  endfacet
-  facet normal -0.071339 0.997452 0.000000
-    outer loop
-      vertex 33.222961 16.337143 30.500000
-      vertex 35.500000 16.500000 -29.500000
-      vertex 33.222961 16.337143 -29.500000
-    endloop
-  endfacet
-  facet normal -0.071339 0.997452 0.000000
-    outer loop
-      vertex 33.222961 16.337143 30.500000
-      vertex 35.500000 16.500000 30.500000
-      vertex 35.500000 16.500000 -29.500000
-    endloop
-  endfacet
-  facet normal -0.212565 0.977147 0.000000
-    outer loop
-      vertex 30.992279 15.851888 30.500000
-      vertex 33.222961 16.337143 -29.500000
-      vertex 30.992279 15.851888 -29.500000
-    endloop
-  endfacet
-  facet normal -0.212565 0.977147 0.000000
-    outer loop
-      vertex 30.992279 15.851888 30.500000
-      vertex 33.222961 16.337143 30.500000
-      vertex 33.222961 16.337143 -29.500000
-    endloop
-  endfacet
-  facet normal -0.349464 0.936950 0.000000
-    outer loop
-      vertex 28.853359 15.054111 30.500000
-      vertex 30.992279 15.851888 -29.500000
-      vertex 28.853359 15.054111 -29.500000
-    endloop
-  endfacet
-  facet normal -0.479249 0.877679 0.000000
-    outer loop
-      vertex 28.853359 15.054111 30.500000
-      vertex 28.853359 15.054111 -29.500000
-      vertex 26.849747 13.960056 -29.500000
-    endloop
-  endfacet
-  facet normal -0.349464 0.936950 0.000000
-    outer loop
-      vertex 28.853359 15.054111 30.500000
-      vertex 30.992279 15.851888 30.500000
-      vertex 30.992279 15.851888 -29.500000
-    endloop
-  endfacet
-  facet normal -0.479249 0.877679 0.000000
-    outer loop
-      vertex 26.849747 13.960056 30.500000
-      vertex 28.853359 15.054111 30.500000
-      vertex 26.849747 13.960056 -29.500000
-    endloop
-  endfacet
-  facet normal -0.599278 0.800541 0.000000
-    outer loop
-      vertex 25.022228 12.591993 30.500000
-      vertex 26.849747 13.960056 -29.500000
-      vertex 25.022228 12.591993 -29.500000
-    endloop
-  endfacet
-  facet normal -0.599278 0.800541 0.000000
-    outer loop
-      vertex 25.022228 12.591993 30.500000
-      vertex 26.849747 13.960056 30.500000
-      vertex 26.849747 13.960056 -29.500000
-    endloop
-  endfacet
-  facet normal -0.707107 0.707107 0.000000
-    outer loop
-      vertex 23.408007 10.977772 30.500000
-      vertex 25.022228 12.591993 -29.500000
-      vertex 23.408007 10.977772 -29.500000
-    endloop
-  endfacet
-  facet normal -0.707107 0.707107 0.000000
-    outer loop
-      vertex 23.408007 10.977772 30.500000
-      vertex 25.022228 12.591993 30.500000
-      vertex 25.022228 12.591993 -29.500000
-    endloop
-  endfacet
-  facet normal -0.800539 0.599276 0.002413
-    outer loop
-      vertex 21.643593 8.500000 0.500000
-      vertex 23.408007 10.977772 -29.500000
-      vertex 22.039944 9.150253 -29.500000
-    endloop
-  endfacet
-  facet normal -0.814576 0.580057 0.000000
-    outer loop
-      vertex 21.643593 8.500000 0.500000
-      vertex 23.408007 10.977772 30.500000
-      vertex 23.408007 10.977772 -29.500000
-    endloop
-  endfacet
-  facet normal -0.864717 0.502259 -0.000538
-    outer loop
-      vertex 21.589144 8.404941 -0.729599
-      vertex 21.643593 8.500000 0.500000
-      vertex 22.039944 9.150253 -29.500000
-    endloop
-  endfacet
-  facet normal -0.877678 0.479248 -0.001475
-    outer loop
-      vertex 21.434671 8.126698 -1.915257
-      vertex 22.039944 9.150253 -29.500000
-      vertex 20.945889 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal -0.872464 0.488677 -0.001011
-    outer loop
-      vertex 21.434671 8.126698 -1.915257
-      vertex 21.589144 8.404941 -0.729599
-      vertex 22.039944 9.150253 -29.500000
-    endloop
-  endfacet
-  facet normal -0.886204 0.463295 -0.000757
-    outer loop
-      vertex 21.186325 7.649735 -3.089051
-      vertex 21.434671 8.126698 -1.915257
-      vertex 20.945889 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal -0.866438 0.499284 0.000625
-    outer loop
-      vertex 22.039944 9.150253 30.500000
-      vertex 21.643593 8.500000 0.500000
-      vertex 21.547388 8.331002 2.135666
-    endloop
-  endfacet
-  facet normal -0.878497 0.477746 0.001457
-    outer loop
-      vertex 22.039944 9.150253 30.500000
-      vertex 21.547388 8.331002 2.135666
-      vertex 21.283375 7.840816 3.680002
-    endloop
-  endfacet
-  facet normal -0.800539 0.599276 -0.002413
-    outer loop
-      vertex 22.039944 9.150253 30.500000
-      vertex 23.408007 10.977772 30.500000
-      vertex 21.643593 8.500000 0.500000
-    endloop
-  endfacet
-  facet normal -0.904627 0.426204 0.000117
-    outer loop
-      vertex 20.875492 6.990284 -4.177202
-      vertex 21.186325 7.649735 -3.089051
-      vertex 20.945889 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal -0.936949 0.349464 -0.001673
-    outer loop
-      vertex 20.525652 6.136390 -5.177245
-      vertex 20.945889 7.146640 -29.500000
-      vertex 20.148113 5.007721 -29.500000
-    endloop
-  endfacet
-  facet normal -0.925255 0.379346 -0.000230
-    outer loop
-      vertex 20.525652 6.136390 -5.177245
-      vertex 20.875492 6.990284 -4.177202
-      vertex 20.945889 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal -0.897180 0.441664 0.000142
-    outer loop
-      vertex 20.945889 7.146640 30.500000
-      vertex 21.283375 7.840816 3.680002
-      vertex 21.008848 7.282812 4.741870
-    endloop
-  endfacet
-  facet normal -0.916945 0.399014 -0.000132
-    outer loop
-      vertex 20.945889 7.146640 30.500000
-      vertex 21.008848 7.282812 4.741870
-      vertex 20.661827 6.485701 5.807673
-    endloop
-  endfacet
-  facet normal -0.877678 0.479248 0.001360
-    outer loop
-      vertex 20.945889 7.146640 30.500000
-      vertex 22.039944 9.150253 30.500000
-      vertex 21.283375 7.840816 3.680002
-    endloop
-  endfacet
-  facet normal -0.947762 0.318978 -0.000091
-    outer loop
-      vertex 20.164255 5.062339 -6.071534
-      vertex 20.525652 6.136390 -5.177245
-      vertex 20.148113 5.007721 -29.500000
-    endloop
-  endfacet
-  facet normal -0.968710 0.248196 0.000089
-    outer loop
-      vertex 19.860142 3.875627 -6.752940
-      vertex 20.164255 5.062339 -6.071534
-      vertex 20.148113 5.007721 -29.500000
-    endloop
-  endfacet
-  facet normal -0.977145 0.212565 -0.001791
-    outer loop
-      vertex 19.860142 3.875627 -6.752940
-      vertex 20.148113 5.007721 -29.500000
-      vertex 19.662857 2.777037 -29.500000
-    endloop
-  endfacet
-  facet normal -0.936949 0.349464 0.001425
-    outer loop
-      vertex 20.148113 5.007721 30.500000
-      vertex 20.945889 7.146640 30.500000
-      vertex 20.661827 6.485701 5.807673
-    endloop
-  endfacet
-  facet normal -0.939211 0.343340 0.001011
-    outer loop
-      vertex 20.148113 5.007721 30.500000
-      vertex 20.661827 6.485701 5.807673
-      vertex 20.290781 5.467865 6.770592
-    endloop
-  endfacet
-  facet normal -0.962769 0.270325 -0.000546
-    outer loop
-      vertex 20.148113 5.007721 30.500000
-      vertex 20.290781 5.467865 6.770592
-      vertex 19.930262 4.185544 7.600476
-    endloop
-  endfacet
-  facet normal -0.984117 0.177521 -0.000038
-    outer loop
-      vertex 19.666361 2.801282 -7.161860
-      vertex 19.860142 3.875627 -6.752940
-      vertex 19.662857 2.777037 -29.500000
-    endloop
-  endfacet
-  facet normal -0.994642 0.103380 0.000044
-    outer loop
-      vertex 19.531559 1.504439 -7.436693
-      vertex 19.666361 2.801282 -7.161860
-      vertex 19.662857 2.777037 -29.500000
-    endloop
-  endfacet
-  facet normal -0.997450 0.071339 -0.001821
-    outer loop
-      vertex 19.531559 1.504439 -7.436693
-      vertex 19.662857 2.777037 -29.500000
-      vertex 19.500000 0.500000 -29.500000
-    endloop
-  endfacet
-  facet normal -0.977145 0.212565 0.001664
-    outer loop
-      vertex 19.662857 2.777037 30.500000
-      vertex 20.148113 5.007721 30.500000
-      vertex 19.930262 4.185544 7.600476
-    endloop
-  endfacet
-  facet normal -0.982769 0.184837 -0.000107
-    outer loop
-      vertex 19.662857 2.777037 30.500000
-      vertex 19.930262 4.185544 7.600476
-      vertex 19.655348 2.724181 8.184596
-    endloop
-  endfacet
-  facet normal -0.995239 0.097467 0.000104
-    outer loop
-      vertex 19.524847 1.391352 8.450188
-      vertex 19.662857 2.777037 30.500000
-      vertex 19.655348 2.724181 8.184596
-    endloop
-  endfacet
-  facet normal -0.999889 0.014895 0.000752
-    outer loop
-      vertex 19.508701 -0.027632 -7.482581
-      vertex 19.531559 1.504439 -7.436693
-      vertex 19.500000 0.500000 -29.500000
-    endloop
-  endfacet
-  facet normal -0.997451 -0.071339 -0.001315
-    outer loop
-      vertex 19.662857 -1.777037 -29.500000
-      vertex 19.508701 -0.027632 -7.482581
-      vertex 19.500000 0.500000 -29.500000
-    endloop
-  endfacet
-  facet normal -0.997029 -0.077021 -0.000861
-    outer loop
-      vertex 19.616875 -1.430375 -7.263611
-      vertex 19.508701 -0.027632 -7.482581
-      vertex 19.662857 -1.777037 -29.500000
-    endloop
-  endfacet
-  facet normal -0.997451 0.071339 0.001760
-    outer loop
-      vertex 19.500000 0.500000 30.500000
-      vertex 19.662857 2.777037 30.500000
-      vertex 19.524847 1.391352 8.450188
-    endloop
-  endfacet
-  facet normal -0.999940 0.010913 -0.000686
-    outer loop
-      vertex 19.500000 0.500000 30.500000
-      vertex 19.524847 1.391352 8.450188
-      vertex 19.509182 -0.041983 8.481620
-    endloop
-  endfacet
-  facet normal -0.985730 -0.168334 0.000586
-    outer loop
-      vertex 19.877827 -2.956544 -6.714728
-      vertex 19.616875 -1.430375 -7.263611
-      vertex 19.662857 -1.777037 -29.500000
-    endloop
-  endfacet
-  facet normal -0.977145 -0.212565 -0.001785
-    outer loop
-      vertex 19.877827 -2.956544 -6.714728
-      vertex 19.662857 -1.777037 -29.500000
-      vertex 20.148113 -4.007721 -29.500000
-    endloop
-  endfacet
-  facet normal -0.997198 -0.074802 0.001065
-    outer loop
-      vertex 19.662857 -1.777037 30.500000
-      vertex 19.509182 -0.041983 8.481620
-      vertex 19.606678 -1.344529 8.284453
-    endloop
-  endfacet
-  facet normal -0.988853 -0.148894 -0.000398
-    outer loop
-      vertex 19.662857 -1.777037 30.500000
-      vertex 19.606678 -1.344529 8.284453
-      vertex 19.768930 -2.421203 7.947588
-    endloop
-  endfacet
-  facet normal -0.997451 -0.071339 0.001340
-    outer loop
-      vertex 19.662857 -1.777037 30.500000
-      vertex 19.500000 0.500000 30.500000
-      vertex 19.509182 -0.041983 8.481620
-    endloop
-  endfacet
-  facet normal -0.967217 -0.253952 0.000242
-    outer loop
-      vertex 20.196081 -4.167983 -5.996918
-      vertex 19.877827 -2.956544 -6.714728
-      vertex 20.148113 -4.007721 -29.500000
-    endloop
-  endfacet
-  facet normal -0.946432 -0.322902 -0.000270
-    outer loop
-      vertex 20.531864 -5.152869 -5.160837
-      vertex 20.196081 -4.167983 -5.996918
-      vertex 20.148113 -4.007721 -29.500000
-    endloop
-  endfacet
-  facet normal -0.936948 -0.349464 -0.001669
-    outer loop
-      vertex 20.531864 -5.152869 -5.160837
-      vertex 20.148113 -4.007721 -29.500000
-      vertex 20.945889 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal -0.925574 -0.378566 -0.000288
-    outer loop
-      vertex 20.856667 -5.947697 -4.235737
-      vertex 20.531864 -5.152869 -5.160837
-      vertex 20.945889 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal -0.975386 -0.220501 0.000888
-    outer loop
-      vertex 20.148113 -4.007721 30.500000
-      vertex 19.768930 -2.421203 7.947588
-      vertex 20.038578 -3.616358 7.359708
-    endloop
-  endfacet
-  facet normal -0.956607 -0.291382 -0.000400
-    outer loop
-      vertex 20.148113 -4.007721 30.500000
-      vertex 20.038578 -3.616358 7.359708
-      vertex 20.372141 -4.710361 6.570597
-    endloop
-  endfacet
-  facet normal -0.977146 -0.212565 0.001476
-    outer loop
-      vertex 20.148113 -4.007721 30.500000
-      vertex 19.662857 -1.777037 30.500000
-      vertex 19.768930 -2.421203 7.947588
-    endloop
-  endfacet
-  facet normal -0.906353 -0.422522 0.000126
-    outer loop
-      vertex 21.149296 -6.575117 -3.233994
-      vertex 20.856667 -5.947697 -4.235737
-      vertex 20.945889 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal -0.877678 -0.479248 -0.001469
-    outer loop
-      vertex 21.390741 -7.045117 -2.159174
-      vertex 20.945889 -6.146640 -29.500000
-      vertex 22.039944 -8.150253 -29.500000
-    endloop
-  endfacet
-  facet normal -0.888948 -0.458008 -0.000587
-    outer loop
-      vertex 21.390741 -7.045117 -2.159174
-      vertex 21.149296 -6.575117 -3.233994
-      vertex 20.945889 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal -0.874730 -0.484610 -0.001182
-    outer loop
-      vertex 21.560614 -7.354522 -1.018713
-      vertex 21.390741 -7.045117 -2.159174
-      vertex 22.039944 -8.150253 -29.500000
-    endloop
-  endfacet
-  facet normal -0.866417 -0.499321 -0.000631
-    outer loop
-      vertex 21.639618 -7.493109 0.168034
-      vertex 21.560614 -7.354522 -1.018713
-      vertex 22.039944 -8.150253 -29.500000
-    endloop
-  endfacet
-  facet normal -0.935060 -0.354488 0.001143
-    outer loop
-      vertex 20.945889 -6.146640 30.500000
-      vertex 20.372141 -4.710361 6.570597
-      vertex 20.706879 -5.596193 5.680389
-    endloop
-  endfacet
-  facet normal -0.915154 -0.403104 -0.000127
-    outer loop
-      vertex 20.945889 -6.146640 30.500000
-      vertex 20.706879 -5.596193 5.680389
-      vertex 21.018789 -6.304007 4.707789
-    endloop
-  endfacet
-  facet normal -0.896713 -0.442613 0.000166
-    outer loop
-      vertex 20.945889 -6.146640 30.500000
-      vertex 21.018789 -6.304007 4.707789
-      vertex 21.287531 -6.848857 3.661376
-    endloop
-  endfacet
-  facet normal -0.936949 -0.349464 0.001490
-    outer loop
-      vertex 20.945889 -6.146640 30.500000
-      vertex 20.148113 -4.007721 30.500000
-      vertex 20.372141 -4.710361 6.570597
-    endloop
-  endfacet
-  facet normal -0.800539 -0.599276 0.002472
-    outer loop
-      vertex 23.408007 -9.977772 -29.500000
-      vertex 21.639618 -7.493109 0.168034
-      vertex 22.039944 -8.150253 -29.500000
-    endloop
-  endfacet
-  facet normal -0.879958 -0.475049 0.001634
-    outer loop
-      vertex 22.039944 -8.150253 30.500000
-      vertex 21.287531 -6.848857 3.661376
-      vertex 21.493242 -7.233742 2.546763
-    endloop
-  endfacet
-  facet normal -0.869705 -0.493571 0.000827
-    outer loop
-      vertex 22.039944 -8.150253 30.500000
-      vertex 21.493242 -7.233742 2.546763
-      vertex 21.616100 -7.452191 1.373303
-    endloop
-  endfacet
-  facet normal -0.861961 -0.506974 0.000393
-    outer loop
-      vertex 22.039944 -8.150253 30.500000
-      vertex 21.616100 -7.452191 1.373303
-      vertex 21.639618 -7.493109 0.168034
-    endloop
-  endfacet
-  facet normal -0.877678 -0.479248 0.001367
-    outer loop
-      vertex 22.039944 -8.150253 30.500000
-      vertex 20.945889 -6.146640 30.500000
-      vertex 21.287531 -6.848857 3.661376
-    endloop
-  endfacet
-  facet normal -0.707107 -0.707107 -0.000000
-    outer loop
-      vertex 23.408007 -9.977772 30.500000
-      vertex 23.408007 -9.977772 -29.500000
-      vertex 25.022228 -11.591993 -29.500000
-    endloop
-  endfacet
-  facet normal -0.814720 -0.579854 -0.000000
-    outer loop
-      vertex 23.408007 -9.977772 30.500000
-      vertex 21.639618 -7.493109 0.168034
-      vertex 23.408007 -9.977772 -29.500000
-    endloop
-  endfacet
-  facet normal -0.800539 -0.599276 -0.002418
-    outer loop
-      vertex 23.408007 -9.977772 30.500000
-      vertex 22.039944 -8.150253 30.500000
-      vertex 21.639618 -7.493109 0.168034
-    endloop
-  endfacet
-  facet normal -0.707107 -0.707107 -0.000000
-    outer loop
-      vertex 25.022228 -11.591993 30.500000
-      vertex 23.408007 -9.977772 30.500000
-      vertex 25.022228 -11.591993 -29.500000
-    endloop
-  endfacet
-  facet normal -0.599278 -0.800541 -0.000000
-    outer loop
-      vertex 26.849747 -12.960056 30.500000
-      vertex 25.022228 -11.591993 -29.500000
-      vertex 26.849747 -12.960056 -29.500000
-    endloop
-  endfacet
-  facet normal -0.479249 -0.877679 -0.000000
-    outer loop
-      vertex 26.849747 -12.960056 30.500000
-      vertex 26.849747 -12.960056 -29.500000
-      vertex 28.853359 -14.054111 -29.500000
-    endloop
-  endfacet
-  facet normal -0.599278 -0.800541 0.000000
-    outer loop
-      vertex 26.849747 -12.960056 30.500000
-      vertex 25.022228 -11.591993 30.500000
-      vertex 25.022228 -11.591993 -29.500000
-    endloop
-  endfacet
-  facet normal -0.479249 -0.877679 -0.000000
-    outer loop
-      vertex 28.853359 -14.054111 30.500000
-      vertex 26.849747 -12.960056 30.500000
-      vertex 28.853359 -14.054111 -29.500000
-    endloop
-  endfacet
-  facet normal -0.349464 -0.936950 0.000000
-    outer loop
-      vertex 30.992279 -14.851888 30.500000
-      vertex 28.853359 -14.054111 30.500000
-      vertex 28.853359 -14.054111 -29.500000
-    endloop
-  endfacet
-  facet normal -0.349464 -0.936950 -0.000000
-    outer loop
-      vertex 30.992279 -14.851888 30.500000
-      vertex 28.853359 -14.054111 -29.500000
-      vertex 30.992279 -14.851888 -29.500000
-    endloop
-  endfacet
-  facet normal -0.212565 -0.977147 -0.000000
-    outer loop
-      vertex 30.992279 -14.851888 30.500000
-      vertex 30.992279 -14.851888 -29.500000
-      vertex 33.222961 -15.337143 -29.500000
-    endloop
-  endfacet
-  facet normal -0.212565 -0.977147 -0.000000
-    outer loop
-      vertex 33.222961 -15.337143 30.500000
-      vertex 30.992279 -14.851888 30.500000
-      vertex 33.222961 -15.337143 -29.500000
-    endloop
-  endfacet
-  facet normal -0.071339 -0.997452 0.000000
-    outer loop
-      vertex 35.500000 -15.500000 30.500000
-      vertex 33.222961 -15.337143 30.500000
-      vertex 33.222961 -15.337143 -29.500000
-    endloop
-  endfacet
-  facet normal -0.071339 -0.997452 -0.000000
-    outer loop
-      vertex 35.500000 -15.500000 30.500000
-      vertex 33.222961 -15.337143 -29.500000
-      vertex 35.500000 -15.500000 -29.500000
-    endloop
-  endfacet
-  facet normal 0.071339 -0.997452 0.000000
-    outer loop
-      vertex 35.500000 -15.500000 30.500000
-      vertex 35.500000 -15.500000 -29.500000
-      vertex 37.777039 -15.337143 -29.500000
-    endloop
-  endfacet
-  facet normal 0.071339 -0.997452 0.000000
-    outer loop
-      vertex 37.777039 -15.337143 30.500000
-      vertex 35.500000 -15.500000 30.500000
-      vertex 37.777039 -15.337143 -29.500000
-    endloop
-  endfacet
-  facet normal 0.212565 -0.977147 0.000000
-    outer loop
-      vertex 40.007721 -14.851888 30.500000
-      vertex 37.777039 -15.337143 30.500000
-      vertex 37.777039 -15.337143 -29.500000
-    endloop
-  endfacet
-  facet normal 0.212565 -0.977147 0.000000
-    outer loop
-      vertex 40.007721 -14.851888 30.500000
-      vertex 37.777039 -15.337143 -29.500000
-      vertex 40.007721 -14.851888 -29.500000
-    endloop
-  endfacet
-  facet normal 0.349464 -0.936950 0.000000
-    outer loop
-      vertex 40.007721 -14.851888 30.500000
-      vertex 40.007721 -14.851888 -29.500000
-      vertex 42.146641 -14.054111 -29.500000
-    endloop
-  endfacet
-  facet normal 0.349464 -0.936950 0.000000
-    outer loop
-      vertex 42.146641 -14.054111 30.500000
-      vertex 40.007721 -14.851888 30.500000
-      vertex 42.146641 -14.054111 -29.500000
-    endloop
-  endfacet
-  facet normal 0.479249 -0.877679 0.000000
-    outer loop
-      vertex 44.150253 -12.960056 30.500000
-      vertex 42.146641 -14.054111 30.500000
-      vertex 42.146641 -14.054111 -29.500000
-    endloop
-  endfacet
-  facet normal 0.479249 -0.877679 0.000000
-    outer loop
-      vertex 44.150253 -12.960056 30.500000
-      vertex 42.146641 -14.054111 -29.500000
-      vertex 44.150253 -12.960056 -29.500000
-    endloop
-  endfacet
-  facet normal 0.599278 -0.800541 0.000000
-    outer loop
-      vertex 44.150253 -12.960056 30.500000
-      vertex 44.150253 -12.960056 -29.500000
-      vertex 45.977772 -11.591993 -29.500000
-    endloop
-  endfacet
-  facet normal 0.599278 -0.800541 0.000000
-    outer loop
-      vertex 45.977772 -11.591993 30.500000
-      vertex 44.150253 -12.960056 30.500000
-      vertex 45.977772 -11.591993 -29.500000
-    endloop
-  endfacet
-  facet normal 0.707107 -0.707106 0.000000
-    outer loop
-      vertex 47.591991 -9.977772 30.500000
-      vertex 45.977772 -11.591993 30.500000
-      vertex 45.977772 -11.591993 -29.500000
-    endloop
-  endfacet
-  facet normal 0.707107 -0.707106 0.000000
-    outer loop
-      vertex 47.591991 -9.977772 30.500000
-      vertex 45.977772 -11.591993 -29.500000
-      vertex 47.591991 -9.977772 -29.500000
-    endloop
-  endfacet
-  facet normal 0.800541 -0.599278 0.000000
-    outer loop
-      vertex 47.591991 -9.977772 30.500000
-      vertex 47.591991 -9.977772 -29.500000
-      vertex 48.960056 -8.150253 -29.500000
-    endloop
-  endfacet
-  facet normal 0.800541 -0.599278 0.000000
-    outer loop
-      vertex 48.960056 -8.150253 30.500000
-      vertex 47.591991 -9.977772 30.500000
-      vertex 48.960056 -8.150253 -29.500000
-    endloop
-  endfacet
-  facet normal 0.888117 -0.459617 0.000000
-    outer loop
-      vertex 50.335209 -5.493046 0.211204
-      vertex 48.960056 -8.150253 30.500000
-      vertex 48.960056 -8.150253 -29.500000
-    endloop
-  endfacet
-  facet normal 0.877677 -0.479248 0.002239
-    outer loop
-      vertex 50.335209 -5.493046 0.211204
-      vertex 48.960056 -8.150253 -29.500000
-      vertex 50.054111 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.926941 -0.375206 -0.000516
-    outer loop
-      vertex 50.374840 -5.393991 -0.622882
-      vertex 50.335209 -5.493046 0.211204
-      vertex 50.054111 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.931224 -0.364446 -0.000844
-    outer loop
-      vertex 50.458221 -5.179053 -1.436066
-      vertex 50.374840 -5.393991 -0.622882
-      vertex 50.054111 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.937556 -0.347830 -0.001508
-    outer loop
-      vertex 50.578938 -4.850290 -2.215583
-      vertex 50.458221 -5.179053 -1.436066
-      vertex 50.054111 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.936949 -0.349464 -0.001419
-    outer loop
-      vertex 50.578938 -4.850290 -2.215583
-      vertex 50.054111 -6.146640 -29.500000
-      vertex 50.851887 -4.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.947000 -0.321234 -0.000446
-    outer loop
-      vertex 50.729084 -4.406632 -2.953253
-      vertex 50.578938 -4.850290 -2.215583
-      vertex 50.851887 -4.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.932978 -0.359933 0.001005
-    outer loop
-      vertex 50.054111 -6.146640 30.500000
-      vertex 50.396503 -5.339019 1.880529
-      vertex 50.492382 -5.088249 2.684370
-    endloop
-  endfacet
-  facet normal 0.928104 -0.372320 0.000597
-    outer loop
-      vertex 50.054111 -6.146640 30.500000
-      vertex 50.342648 -5.474597 1.051531
-      vertex 50.396503 -5.339019 1.880529
-    endloop
-  endfacet
-  facet normal 0.923121 -0.384509 0.000270
-    outer loop
-      vertex 50.054111 -6.146640 30.500000
-      vertex 50.335209 -5.493046 0.211204
-      vertex 50.342648 -5.474597 1.051531
-    endloop
-  endfacet
-  facet normal 0.877677 -0.479248 -0.002196
-    outer loop
-      vertex 50.054111 -6.146640 30.500000
-      vertex 48.960056 -8.150253 30.500000
-      vertex 50.335209 -5.493046 0.211204
-    endloop
-  endfacet
-  facet normal 0.957335 -0.288981 0.000086
-    outer loop
-      vertex 50.899483 -3.842341 -3.640540
-      vertex 50.729084 -4.406632 -2.953253
-      vertex 50.851887 -4.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.968292 -0.249822 -0.000185
-    outer loop
-      vertex 51.079292 -3.144950 -4.265956
-      vertex 50.899483 -3.842341 -3.640540
-      vertex 50.851887 -4.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.977146 -0.212565 -0.001538
-    outer loop
-      vertex 51.079292 -3.144950 -4.265956
-      vertex 50.851887 -4.007721 -29.500000
-      vertex 51.337143 -1.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.979427 -0.201798 -0.000931
-    outer loop
-      vertex 51.254513 -2.292002 -4.810812
-      vertex 51.079292 -3.144950 -4.265956
-      vertex 51.337143 -1.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.971762 -0.235962 0.000529
-    outer loop
-      vertex 50.851887 -4.007721 30.500000
-      vertex 50.955387 -3.638966 4.843842
-      vertex 51.135273 -2.896791 5.445888
-    endloop
-  endfacet
-  facet normal 0.960723 -0.277510 -0.000113
-    outer loop
-      vertex 50.851887 -4.007721 30.500000
-      vertex 50.780762 -4.243235 4.174469
-      vertex 50.955387 -3.638966 4.843842
-    endloop
-  endfacet
-  facet normal 0.950144 -0.311811 0.000222
-    outer loop
-      vertex 50.851887 -4.007721 30.500000
-      vertex 50.623219 -4.723814 3.451571
-      vertex 50.780762 -4.243235 4.174469
-    endloop
-  endfacet
-  facet normal 0.940481 -0.339846 0.001046
-    outer loop
-      vertex 50.851887 -4.007721 30.500000
-      vertex 50.492382 -5.088249 2.684370
-      vertex 50.623219 -4.723814 3.451571
-    endloop
-  endfacet
-  facet normal 0.936949 -0.349464 0.001466
-    outer loop
-      vertex 50.851887 -4.007721 30.500000
-      vertex 50.054111 -6.146640 30.500000
-      vertex 50.492382 -5.088249 2.684370
-    endloop
-  endfacet
-  facet normal 0.989912 -0.141685 0.000358
-    outer loop
-      vertex 51.404663 -1.244035 -5.240935
-      vertex 51.254513 -2.292002 -4.810812
-      vertex 51.337143 -1.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.997451 -0.071339 -0.001635
-    outer loop
-      vertex 51.473011 -0.428928 -5.427655
-      vertex 51.337143 -1.777037 -29.500000
-      vertex 51.500000 0.500000 -29.500000
-    endloop
-  endfacet
-  facet normal 0.996485 -0.083770 -0.000933
-    outer loop
-      vertex 51.473011 -0.428928 -5.427655
-      vertex 51.404663 -1.244035 -5.240935
-      vertex 51.337143 -1.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.992676 -0.120805 -0.000250
-    outer loop
-      vertex 51.337143 -1.777037 30.500000
-      vertex 51.304974 -1.990543 5.958681
-      vertex 51.440762 -0.875535 6.340197
-    endloop
-  endfacet
-  facet normal 0.982883 -0.184229 0.000314
-    outer loop
-      vertex 51.337143 -1.777037 30.500000
-      vertex 51.135273 -2.896791 5.445888
-      vertex 51.304974 -1.990543 5.958681
-    endloop
-  endfacet
-  facet normal 0.977146 -0.212565 0.001627
-    outer loop
-      vertex 51.337143 -1.777037 30.500000
-      vertex 50.851887 -4.007721 30.500000
-      vertex 51.135273 -2.896791 5.445888
-    endloop
-  endfacet
-  facet normal 0.999578 -0.029042 0.000000
-    outer loop
-      vertex 51.500000 0.500000 -5.500000
-      vertex 51.473011 -0.428928 -5.427655
-      vertex 51.500000 0.500000 -29.500000
-    endloop
-  endfacet
-  facet normal 0.999074 -0.043026 0.000000
-    outer loop
-      vertex 51.500000 0.500000 30.500000
-      vertex 51.440762 -0.875535 6.340197
-      vertex 51.500000 0.500000 6.500000
-    endloop
-  endfacet
-  facet normal 0.997451 -0.071339 0.001616
-    outer loop
-      vertex 51.500000 0.500000 30.500000
-      vertex 51.337143 -1.777037 30.500000
-      vertex 51.440762 -0.875535 6.340197
-    endloop
-  endfacet
-  facet normal -0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 37.777039 16.337143 -29.500000
-      vertex 40.007721 15.851888 -29.500000
-      vertex 35.500000 16.500000 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 51.500000 0.500000 -29.500000
-      vertex 50.054111 7.146640 -29.500000
-      vertex 51.337143 2.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 51.337143 2.777037 -29.500000
-      vertex 50.054111 7.146640 -29.500000
-      vertex 50.851887 5.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 22.039944 -8.150253 -29.500000
-      vertex 20.945889 -6.146640 -29.500000
-      vertex 23.408007 -9.977772 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 23.408007 -9.977772 -29.500000
-      vertex 20.945889 -6.146640 -29.500000
-      vertex 25.022228 -11.591993 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 25.022228 -11.591993 -29.500000
-      vertex 20.945889 -6.146640 -29.500000
-      vertex 26.849747 -12.960056 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 26.849747 -12.960056 -29.500000
-      vertex 30.992279 -14.851888 -29.500000
-      vertex 28.853359 -14.054111 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 20.945889 -6.146640 -29.500000
-      vertex 30.992279 -14.851888 -29.500000
-      vertex 26.849747 -12.960056 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 50.054111 7.146640 -29.500000
-      vertex 47.591991 10.977772 -29.500000
-      vertex 48.960056 9.150253 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 51.500000 0.500000 -29.500000
-      vertex 47.591991 10.977772 -29.500000
-      vertex 50.054111 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 51.337143 -1.777037 -29.500000
-      vertex 47.591991 10.977772 -29.500000
-      vertex 51.500000 0.500000 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 28.853359 15.054111 -29.500000
-      vertex 45.977772 12.591993 -29.500000
-      vertex 51.337143 -1.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 35.500000 16.500000 -29.500000
-      vertex 45.977772 12.591993 -29.500000
-      vertex 28.853359 15.054111 -29.500000
-    endloop
-  endfacet
-  facet normal -0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 44.150253 13.960056 -29.500000
-      vertex 45.977772 12.591993 -29.500000
-      vertex 42.146641 15.054111 -29.500000
-    endloop
-  endfacet
-  facet normal -0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 42.146641 15.054111 -29.500000
-      vertex 45.977772 12.591993 -29.500000
-      vertex 40.007721 15.851888 -29.500000
-    endloop
-  endfacet
-  facet normal -0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 40.007721 15.851888 -29.500000
-      vertex 45.977772 12.591993 -29.500000
-      vertex 35.500000 16.500000 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 51.337143 -1.777037 -29.500000
-      vertex 45.977772 12.591993 -29.500000
-      vertex 47.591991 10.977772 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 30.992279 -14.851888 -29.500000
-      vertex 35.500000 -15.500000 -29.500000
-      vertex 33.222961 -15.337143 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 20.945889 -6.146640 -29.500000
-      vertex 35.500000 -15.500000 -29.500000
-      vertex 30.992279 -14.851888 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 19.662857 -1.777037 -29.500000
-      vertex 19.500000 0.500000 -29.500000
-      vertex 20.148113 -4.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 20.148113 -4.007721 -29.500000
-      vertex 19.500000 0.500000 -29.500000
-      vertex 20.945889 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 20.945889 -6.146640 -29.500000
-      vertex 37.777039 -15.337143 -29.500000
-      vertex 35.500000 -15.500000 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 19.500000 0.500000 -29.500000
-      vertex 19.662857 2.777037 -29.500000
-      vertex 20.945889 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 37.777039 -15.337143 -29.500000
-      vertex 42.146641 -14.054111 -29.500000
-      vertex 40.007721 -14.851888 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 20.945889 -6.146640 -29.500000
-      vertex 42.146641 -14.054111 -29.500000
-      vertex 37.777039 -15.337143 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 20.148113 5.007721 -29.500000
-      vertex 20.945889 7.146640 -29.500000
-      vertex 19.662857 2.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 42.146641 -14.054111 -29.500000
-      vertex 45.977772 -11.591993 -29.500000
-      vertex 44.150253 -12.960056 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 42.146641 -14.054111 -29.500000
-      vertex 47.591991 -9.977772 -29.500000
-      vertex 45.977772 -11.591993 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 23.408007 10.977772 -29.500000
-      vertex 25.022228 12.591993 -29.500000
-      vertex 22.039944 9.150253 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 22.039944 9.150253 -29.500000
-      vertex 25.022228 12.591993 -29.500000
-      vertex 20.945889 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 47.591991 -9.977772 -29.500000
-      vertex 50.054111 -6.146640 -29.500000
-      vertex 48.960056 -8.150253 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 19.662857 2.777037 -29.500000
-      vertex 50.054111 -6.146640 -29.500000
-      vertex 20.945889 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 20.945889 7.146640 -29.500000
-      vertex 50.054111 -6.146640 -29.500000
-      vertex 19.662857 2.777037 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 20.945889 -6.146640 -29.500000
-      vertex 50.054111 -6.146640 -29.500000
-      vertex 42.146641 -14.054111 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 25.022228 12.591993 -29.500000
-      vertex 50.054111 -6.146640 -29.500000
-      vertex 20.945889 7.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 42.146641 -14.054111 -29.500000
-      vertex 50.054111 -6.146640 -29.500000
-      vertex 47.591991 -9.977772 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 26.849747 13.960056 -29.500000
-      vertex 28.853359 15.054111 -29.500000
-      vertex 25.022228 12.591993 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 50.054111 -6.146640 -29.500000
-      vertex 51.337143 -1.777037 -29.500000
-      vertex 50.851887 -4.007721 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 28.853359 15.054111 -29.500000
-      vertex 51.337143 -1.777037 -29.500000
-      vertex 25.022228 12.591993 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 25.022228 12.591993 -29.500000
-      vertex 51.337143 -1.777037 -29.500000
-      vertex 50.054111 -6.146640 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 30.992279 15.851888 -29.500000
-      vertex 33.222961 16.337143 -29.500000
-      vertex 28.853359 15.054111 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 33.222961 16.337143 -29.500000
-      vertex 35.500000 16.500000 -29.500000
-      vertex 28.853359 15.054111 -29.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 40.007721 15.851888 30.500000
-      vertex 35.500000 16.500000 30.500000
-      vertex 28.853359 15.054111 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 40.007721 15.851888 30.500000
-      vertex 37.777039 16.337143 30.500000
-      vertex 35.500000 16.500000 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 40.007721 15.851888 30.500000
-      vertex 51.337143 -1.777037 30.500000
-      vertex 51.500000 0.500000 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 50.054111 7.146640 30.500000
-      vertex 51.337143 2.777037 30.500000
-      vertex 50.851887 5.007721 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 20.945889 -6.146640 30.500000
-      vertex 22.039944 -8.150253 30.500000
-      vertex 23.408007 -9.977772 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 20.945889 -6.146640 30.500000
-      vertex 23.408007 -9.977772 30.500000
-      vertex 25.022228 -11.591993 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 20.945889 -6.146640 30.500000
-      vertex 25.022228 -11.591993 30.500000
-      vertex 26.849747 -12.960056 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 47.591991 10.977772 30.500000
-      vertex 50.054111 7.146640 30.500000
-      vertex 48.960056 9.150253 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 30.992279 -14.851888 30.500000
-      vertex 26.849747 -12.960056 30.500000
-      vertex 28.853359 -14.054111 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 45.977772 12.591993 30.500000
-      vertex 51.500000 0.500000 30.500000
-      vertex 51.337143 2.777037 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 30.992279 -14.851888 30.500000
-      vertex 20.945889 -6.146640 30.500000
-      vertex 26.849747 -12.960056 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 45.977772 12.591993 30.500000
-      vertex 44.150253 13.960056 30.500000
-      vertex 42.146641 15.054111 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 45.977772 12.591993 30.500000
-      vertex 42.146641 15.054111 30.500000
-      vertex 40.007721 15.851888 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 45.977772 12.591993 30.500000
-      vertex 40.007721 15.851888 30.500000
-      vertex 51.500000 0.500000 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 45.977772 12.591993 30.500000
-      vertex 51.337143 2.777037 30.500000
-      vertex 50.054111 7.146640 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 45.977772 12.591993 30.500000
-      vertex 50.054111 7.146640 30.500000
-      vertex 47.591991 10.977772 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 35.500000 -15.500000 30.500000
-      vertex 30.992279 -14.851888 30.500000
-      vertex 33.222961 -15.337143 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 35.500000 -15.500000 30.500000
-      vertex 20.945889 -6.146640 30.500000
-      vertex 30.992279 -14.851888 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 19.500000 0.500000 30.500000
-      vertex 19.662857 -1.777037 30.500000
-      vertex 20.148113 -4.007721 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 19.500000 0.500000 30.500000
-      vertex 20.148113 -4.007721 30.500000
-      vertex 20.945889 -6.146640 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 37.777039 -15.337143 30.500000
-      vertex 20.945889 -6.146640 30.500000
-      vertex 35.500000 -15.500000 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 19.662857 2.777037 30.500000
-      vertex 19.500000 0.500000 30.500000
-      vertex 20.945889 -6.146640 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 42.146641 -14.054111 30.500000
-      vertex 37.777039 -15.337143 30.500000
-      vertex 40.007721 -14.851888 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 42.146641 -14.054111 30.500000
-      vertex 20.945889 -6.146640 30.500000
-      vertex 37.777039 -15.337143 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 20.945889 7.146640 30.500000
-      vertex 20.148113 5.007721 30.500000
-      vertex 19.662857 2.777037 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 45.977772 -11.591993 30.500000
-      vertex 42.146641 -14.054111 30.500000
-      vertex 44.150253 -12.960056 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 47.591991 -9.977772 30.500000
-      vertex 42.146641 -14.054111 30.500000
-      vertex 45.977772 -11.591993 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 25.022228 12.591993 30.500000
-      vertex 23.408007 10.977772 30.500000
-      vertex 22.039944 9.150253 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 25.022228 12.591993 30.500000
-      vertex 22.039944 9.150253 30.500000
-      vertex 20.945889 7.146640 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 50.054111 -6.146640 30.500000
-      vertex 47.591991 -9.977772 30.500000
-      vertex 48.960056 -8.150253 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 50.054111 -6.146640 30.500000
-      vertex 19.662857 2.777037 30.500000
-      vertex 20.945889 -6.146640 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 50.054111 -6.146640 30.500000
-      vertex 20.945889 7.146640 30.500000
-      vertex 19.662857 2.777037 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 50.054111 -6.146640 30.500000
-      vertex 20.945889 -6.146640 30.500000
-      vertex 42.146641 -14.054111 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 50.054111 -6.146640 30.500000
-      vertex 25.022228 12.591993 30.500000
-      vertex 20.945889 7.146640 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 50.054111 -6.146640 30.500000
-      vertex 42.146641 -14.054111 30.500000
-      vertex 47.591991 -9.977772 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 28.853359 15.054111 30.500000
-      vertex 26.849747 13.960056 30.500000
-      vertex 25.022228 12.591993 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 51.337143 -1.777037 30.500000
-      vertex 50.054111 -6.146640 30.500000
-      vertex 50.851887 -4.007721 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 51.337143 -1.777037 30.500000
-      vertex 28.853359 15.054111 30.500000
-      vertex 25.022228 12.591993 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 51.337143 -1.777037 30.500000
-      vertex 25.022228 12.591993 30.500000
-      vertex 50.054111 -6.146640 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 33.222961 16.337143 30.500000
-      vertex 30.992279 15.851888 30.500000
-      vertex 28.853359 15.054111 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 35.500000 16.500000 30.500000
-      vertex 33.222961 16.337143 30.500000
-      vertex 28.853359 15.054111 30.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 40.007721 15.851888 30.500000
-      vertex 28.853359 15.054111 30.500000
-      vertex 51.337143 -1.777037 30.500000
-    endloop
-  endfacet
-  facet normal 0.000661 -0.983098 0.183081
-    outer loop
-      vertex 21.616100 -7.452191 1.373303
-      vertex 21.493242 -7.233742 2.546763
-      vertex 0.500000 -7.289563 2.322828
-    endloop
-  endfacet
-  facet normal -0.000747 -0.988280 0.152649
-    outer loop
-      vertex 21.616100 -7.452191 1.373303
-      vertex 0.500000 -7.289563 2.322828
-      vertex 0.500000 -7.476526 1.112394
-    endloop
-  endfacet
-  facet normal -0.000784 -1.000000 0.000000
-    outer loop
-      vertex 21.639618 -7.493109 0.168034
-      vertex 0.500000 -7.476526 1.112394
-      vertex 0.500000 -7.476526 -0.112394
-    endloop
-  endfacet
-  facet normal 0.000732 -0.999423 0.033944
-    outer loop
-      vertex 21.639618 -7.493109 0.168034
-      vertex 21.616100 -7.452191 1.373303
-      vertex 0.500000 -7.476526 1.112394
-    endloop
-  endfacet
-  facet normal 0.000000 0.997066 0.076549
-    outer loop
-      vertex 21.643593 8.500000 0.500000
-      vertex 0.500000 8.500000 0.500000
-      vertex 0.500000 8.406243 1.721194
-    endloop
-  endfacet
-  facet normal -0.000844 -0.988280 -0.152649
-    outer loop
-      vertex 21.560614 -7.354522 -1.018713
-      vertex 0.500000 -7.476526 -0.112394
-      vertex 0.500000 -7.289563 -1.322828
-    endloop
-  endfacet
-  facet normal 0.000760 -0.993244 -0.116041
-    outer loop
-      vertex 21.560614 -7.354522 -1.018713
-      vertex 21.639618 -7.493109 0.168034
-      vertex 0.500000 -7.476526 -0.112394
-    endloop
-  endfacet
-  facet normal -0.001006 0.973695 0.227853
-    outer loop
-      vertex 21.547388 8.331002 2.135666
-      vertex 0.500000 8.406243 1.721194
-      vertex 0.500000 8.127172 2.913765
-    endloop
-  endfacet
-  facet normal 0.001530 0.994694 0.102862
-    outer loop
-      vertex 21.547388 8.331002 2.135666
-      vertex 21.643593 8.500000 0.500000
-      vertex 0.500000 8.406243 1.721194
-    endloop
-  endfacet
-  facet normal -0.000923 -0.953396 -0.301720
-    outer loop
-      vertex 21.390741 -7.045117 -2.159174
-      vertex 0.500000 -7.289563 -1.322828
-      vertex 0.500000 -6.920020 -2.490537
-    endloop
-  endfacet
-  facet normal 0.000806 -0.965082 -0.261945
-    outer loop
-      vertex 21.390741 -7.045117 -2.159174
-      vertex 21.560614 -7.354522 -1.018713
-      vertex 0.500000 -7.289563 -1.322828
-    endloop
-  endfacet
-  facet normal -0.001003 0.927502 0.373817
-    outer loop
-      vertex 21.283375 7.840816 3.680002
-      vertex 0.500000 8.127172 2.913765
-      vertex 0.500000 7.669324 4.049759
-    endloop
-  endfacet
-  facet normal 0.001966 0.953040 0.302839
-    outer loop
-      vertex 21.283375 7.840816 3.680002
-      vertex 21.547388 8.331002 2.135666
-      vertex 0.500000 8.127172 2.913765
-    endloop
-  endfacet
-  facet normal -0.001007 -0.896165 -0.443720
-    outer loop
-      vertex 21.149296 -6.575117 -3.233994
-      vertex 0.500000 -6.920020 -2.490537
-      vertex 0.500000 -6.376557 -3.588150
-    endloop
-  endfacet
-  facet normal 0.000871 -0.916158 -0.400816
-    outer loop
-      vertex 21.149296 -6.575117 -3.233994
-      vertex 21.390741 -7.045117 -2.159174
-      vertex 0.500000 -6.920020 -2.490537
-    endloop
-  endfacet
-  facet normal -0.001046 0.859569 0.511018
-    outer loop
-      vertex 21.008848 7.282812 4.741870
-      vertex 0.500000 7.669324 4.049759
-      vertex 0.500000 7.043435 5.102549
-    endloop
-  endfacet
-  facet normal 0.000976 0.885114 0.465374
-    outer loop
-      vertex 21.008848 7.282812 4.741870
-      vertex 21.283375 7.840816 3.680002
-      vertex 0.500000 7.669324 4.049759
-    endloop
-  endfacet
-  facet normal -0.001071 -0.817929 -0.575318
-    outer loop
-      vertex 20.856667 -5.947697 -4.235737
-      vertex 0.500000 -6.376557 -3.588150
-      vertex 0.500000 -5.671914 -4.589940
-    endloop
-  endfacet
-  facet normal 0.000959 -0.847365 -0.531009
-    outer loop
-      vertex 20.856667 -5.947697 -4.235737
-      vertex 21.149296 -6.575117 -3.233994
-      vertex 0.500000 -6.376557 -3.588150
-    endloop
-  endfacet
-  facet normal 0.001193 0.800620 0.599171
-    outer loop
-      vertex 20.661827 6.485701 5.807673
-      vertex 21.008848 7.282812 4.741870
-      vertex 0.500000 7.043435 5.102549
-    endloop
-  endfacet
-  facet normal -0.000910 0.771489 0.636242
-    outer loop
-      vertex 20.661827 6.485701 5.807673
-      vertex 0.500000 7.043435 5.102549
-      vertex 0.500000 6.264173 6.047460
-    endloop
-  endfacet
-  facet normal -0.001093 -0.720521 -0.693432
-    outer loop
-      vertex 20.531864 -5.152869 -5.160837
-      vertex 0.500000 -5.671914 -4.589940
-      vertex 0.500000 -4.822606 -5.472426
-    endloop
-  endfacet
-  facet normal 0.001070 -0.758306 -0.651898
-    outer loop
-      vertex 20.531864 -5.152869 -5.160837
-      vertex 20.856667 -5.947697 -4.235737
-      vertex 0.500000 -5.671914 -4.589940
-    endloop
-  endfacet
-  facet normal 0.001093 0.687027 0.726631
-    outer loop
-      vertex 20.290781 5.467865 6.770592
-      vertex 20.661827 6.485701 5.807673
-      vertex 0.500000 6.264173 6.047460
-    endloop
-  endfacet
-  facet normal -0.000508 0.665326 0.746553
-    outer loop
-      vertex 20.290781 5.467865 6.770592
-      vertex 0.500000 6.264173 6.047460
-      vertex 0.500000 5.349803 6.862343
-    endloop
-  endfacet
-  facet normal -0.001029 -0.606225 -0.795292
-    outer loop
-      vertex 20.196081 -4.167983 -5.996918
-      vertex 0.500000 -4.822606 -5.472426
-      vertex 0.500000 -3.848540 -6.214923
-    endloop
-  endfacet
-  facet normal 0.001195 -0.646929 -0.762549
-    outer loop
-      vertex 20.196081 -4.167983 -5.996918
-      vertex 20.531864 -5.152869 -5.160837
-      vertex 0.500000 -4.822606 -5.472426
-    endloop
-  endfacet
-  facet normal 0.000652 0.543190 0.839610
-    outer loop
-      vertex 19.930262 4.185544 7.600476
-      vertex 20.290781 5.467865 6.770592
-      vertex 0.500000 5.349803 6.862343
-    endloop
-  endfacet
-  facet normal -0.000669 -0.477720 -0.878512
-    outer loop
-      vertex 19.877827 -2.956544 -6.714728
-      vertex 0.500000 -3.848540 -6.214923
-      vertex 0.500000 -2.772549 -6.800029
-    endloop
-  endfacet
-  facet normal 0.000684 0.543568 0.839365
-    outer loop
-      vertex 19.930262 4.185544 7.600476
-      vertex 0.500000 5.349803 6.862343
-      vertex 0.500000 4.321759 7.528098
-    endloop
-  endfacet
-  facet normal -0.000531 0.409068 0.912504
-    outer loop
-      vertex 19.930262 4.185544 7.600476
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 3.204135 8.029120
-    endloop
-  endfacet
-  facet normal 0.001260 -0.509515 -0.860461
-    outer loop
-      vertex 19.877827 -2.956544 -6.714728
-      vertex 20.196081 -4.167983 -5.996918
-      vertex 0.500000 -3.848540 -6.214923
-    endloop
-  endfacet
-  facet normal 0.001755 0.370872 0.928682
-    outer loop
-      vertex 19.655348 2.724181 8.184596
-      vertex 19.930262 4.185544 7.600476
-      vertex 0.500000 3.204135 8.029120
-    endloop
-  endfacet
-  facet normal -0.001187 0.264981 0.964253
-    outer loop
-      vertex 19.655348 2.724181 8.184596
-      vertex 0.500000 3.204135 8.029120
-      vertex 0.500000 2.023129 8.353666
-    endloop
-  endfacet
-  facet normal 0.000909 -0.338017 -0.941140
-    outer loop
-      vertex 19.616875 -1.430375 -7.263611
-      vertex 0.500000 -2.772549 -6.800029
-      vertex 0.500000 -1.619852 -7.214028
-    endloop
-  endfacet
-  facet normal -0.000659 -0.190391 -0.981708
-    outer loop
-      vertex 19.616875 -1.430375 -7.263611
-      vertex 0.500000 -1.619852 -7.214028
-      vertex 0.500000 -0.417467 -7.447217
-    endloop
-  endfacet
-  facet normal 0.000930 -0.338285 -0.941043
-    outer loop
-      vertex 19.616875 -1.430375 -7.263611
-      vertex 19.877827 -2.956544 -6.714728
-      vertex 0.500000 -2.772549 -6.800029
-    endloop
-  endfacet
-  facet normal 0.001509 0.195285 0.980745
-    outer loop
-      vertex 19.524847 1.391352 8.450188
-      vertex 19.655348 2.724181 8.184596
-      vertex 0.500000 2.023129 8.353666
-    endloop
-  endfacet
-  facet normal -0.001232 0.114683 0.993401
-    outer loop
-      vertex 19.524847 1.391352 8.450188
-      vertex 0.500000 2.023129 8.353666
-      vertex 0.500000 0.806422 8.494129
-    endloop
-  endfacet
-  facet normal -0.001074 -0.038303 -0.999266
-    outer loop
-      vertex 19.508701 -0.027632 -7.482581
-      vertex 0.500000 -0.417467 -7.447217
-      vertex 0.500000 0.806422 -7.494130
-    endloop
-  endfacet
-  facet normal 0.001323 -0.154134 -0.988049
-    outer loop
-      vertex 19.508701 -0.027632 -7.482581
-      vertex 19.616875 -1.430375 -7.263611
-      vertex 0.500000 -0.417467 -7.447217
-    endloop
-  endfacet
-  facet normal 0.001636 0.021906 0.999759
-    outer loop
-      vertex 19.509182 -0.041983 8.481620
-      vertex 19.524847 1.391352 8.450188
-      vertex 0.500000 0.806422 8.494129
-    endloop
-  endfacet
-  facet normal -0.001052 -0.038302 0.999266
-    outer loop
-      vertex 19.509182 -0.041983 8.481620
-      vertex 0.500000 0.806422 8.494129
-      vertex 0.500000 -0.417467 8.447217
-    endloop
-  endfacet
-  facet normal 0.001920 0.029909 -0.999551
-    outer loop
-      vertex 19.531559 1.504439 -7.436693
-      vertex 19.508701 -0.027632 -7.482581
-      vertex 0.500000 0.806422 -7.494130
-    endloop
-  endfacet
-  facet normal -0.001208 0.114683 -0.993401
-    outer loop
-      vertex 19.531559 1.504439 -7.436693
-      vertex 0.500000 0.806422 -7.494130
-      vertex 0.500000 2.023129 -7.353667
-    endloop
-  endfacet
-  facet normal 0.001165 -0.149580 0.988749
-    outer loop
-      vertex 19.606678 -1.344529 8.284453
-      vertex 19.509182 -0.041983 8.481620
-      vertex 0.500000 -0.417467 8.447217
-    endloop
-  endfacet
-  facet normal -0.000875 -0.190391 0.981708
-    outer loop
-      vertex 19.606678 -1.344529 8.284453
-      vertex 0.500000 -0.417467 8.447217
-      vertex 0.500000 -1.619852 8.214028
-    endloop
-  endfacet
-  facet normal 0.001379 0.207183 -0.978301
-    outer loop
-      vertex 19.666361 2.801282 -7.161860
-      vertex 19.531559 1.504439 -7.436693
-      vertex 0.500000 2.023129 -7.353667
-    endloop
-  endfacet
-  facet normal -0.001109 0.264982 -0.964253
-    outer loop
-      vertex 19.666361 2.801282 -7.161860
-      vertex 0.500000 2.023129 -7.353667
-      vertex 0.500000 3.204135 -7.029120
-    endloop
-  endfacet
-  facet normal 0.000783 -0.298494 0.954411
-    outer loop
-      vertex 19.768930 -2.421203 7.947588
-      vertex 19.606678 -1.344529 8.284453
-      vertex 0.500000 -1.619852 8.214028
-    endloop
-  endfacet
-  facet normal -0.001044 -0.338017 0.941139
-    outer loop
-      vertex 19.768930 -2.421203 7.947588
-      vertex 0.500000 -1.619852 8.214028
-      vertex 0.500000 -2.772549 7.800029
-    endloop
-  endfacet
-  facet normal 0.001001 0.355568 -0.934650
-    outer loop
-      vertex 19.860142 3.875627 -6.752940
-      vertex 19.666361 2.801282 -7.161860
-      vertex 0.500000 3.204135 -7.029120
-    endloop
-  endfacet
-  facet normal -0.001171 0.409068 -0.912503
-    outer loop
-      vertex 19.860142 3.875627 -6.752940
-      vertex 0.500000 3.204135 -7.029120
-      vertex 0.500000 4.321759 -6.528098
-    endloop
-  endfacet
-  facet normal 0.001172 -0.441166 0.897425
-    outer loop
-      vertex 20.038578 -3.616358 7.359708
-      vertex 19.768930 -2.421203 7.947588
-      vertex 0.500000 -2.772549 7.800029
-    endloop
-  endfacet
-  facet normal -0.000833 -0.477720 0.878512
-    outer loop
-      vertex 20.038578 -3.616358 7.359708
-      vertex 0.500000 -2.772549 7.800029
-      vertex 0.500000 -3.848540 7.214923
-    endloop
-  endfacet
-  facet normal 0.001395 0.497678 -0.867361
-    outer loop
-      vertex 20.164255 5.062339 -6.071534
-      vertex 19.860142 3.875627 -6.752940
-      vertex 0.500000 4.321759 -6.528098
-    endloop
-  endfacet
-  facet normal -0.000983 0.543567 -0.839365
-    outer loop
-      vertex 20.164255 5.062339 -6.071534
-      vertex 0.500000 4.321759 -6.528098
-      vertex 0.500000 5.349803 -5.862343
-    endloop
-  endfacet
-  facet normal 0.000939 -0.584814 0.811167
-    outer loop
-      vertex 20.372141 -4.710361 6.570597
-      vertex 20.038578 -3.616358 7.359708
-      vertex 0.500000 -3.848540 7.214923
-    endloop
-  endfacet
-  facet normal -0.000505 -0.606225 0.795293
-    outer loop
-      vertex 20.372141 -4.710361 6.570597
-      vertex 0.500000 -3.848540 7.214923
-      vertex 0.500000 -4.822606 6.472426
-    endloop
-  endfacet
-  facet normal 0.001173 0.639633 -0.768680
-    outer loop
-      vertex 20.525652 6.136390 -5.177245
-      vertex 20.164255 5.062339 -6.071534
-      vertex 0.500000 5.349803 -5.862343
-    endloop
-  endfacet
-  facet normal -0.000593 0.665326 -0.746553
-    outer loop
-      vertex 20.525652 6.136390 -5.177245
-      vertex 0.500000 5.349803 -5.862343
-      vertex 0.500000 6.264173 -5.047460
-    endloop
-  endfacet
-  facet normal 0.000518 -0.708749 0.705460
-    outer loop
-      vertex 20.706879 -5.596193 5.680389
-      vertex 20.372141 -4.710361 6.570597
-      vertex 0.500000 -4.822606 6.472426
-    endloop
-  endfacet
-  facet normal -0.000404 -0.720521 0.693432
-    outer loop
-      vertex 20.706879 -5.596193 5.680389
-      vertex 0.500000 -4.822606 6.472426
-      vertex 0.500000 -5.671914 5.589940
-    endloop
-  endfacet
-  facet normal 0.000643 0.760379 -0.649480
-    outer loop
-      vertex 20.875492 6.990284 -4.177202
-      vertex 20.525652 6.136390 -5.177245
-      vertex 0.500000 6.264173 -5.047460
-    endloop
-  endfacet
-  facet normal -0.000319 0.771489 -0.636243
-    outer loop
-      vertex 20.875492 6.990284 -4.177202
-      vertex 0.500000 6.264173 -5.047460
-      vertex 0.500000 7.043435 -4.102549
-    endloop
-  endfacet
-  facet normal 0.000395 -0.808490 0.588510
-    outer loop
-      vertex 21.018789 -6.304007 4.707789
-      vertex 20.706879 -5.596193 5.680389
-      vertex 0.500000 -5.671914 5.589940
-    endloop
-  endfacet
-  facet normal -0.000463 -0.817929 0.575319
-    outer loop
-      vertex 21.018789 -6.304007 4.707789
-      vertex 0.500000 -5.671914 5.589940
-      vertex 0.500000 -6.376557 4.588150
-    endloop
-  endfacet
-  facet normal 0.000332 0.855168 -0.518351
-    outer loop
-      vertex 21.186325 7.649735 -3.089051
-      vertex 20.875492 6.990284 -4.177202
-      vertex 0.500000 7.043435 -4.102549
-    endloop
-  endfacet
-  facet normal -0.000157 0.859570 -0.511019
-    outer loop
-      vertex 21.186325 7.649735 -3.089051
-      vertex 0.500000 7.043435 -4.102549
-      vertex 0.500000 7.669324 -3.049759
-    endloop
-  endfacet
-  facet normal 0.000168 0.927502 -0.373817
-    outer loop
-      vertex 21.186325 7.649735 -3.089051
-      vertex 0.500000 7.669324 -3.049759
-      vertex 0.500000 8.127172 -1.913765
-    endloop
-  endfacet
-  facet normal 0.000443 -0.886922 0.461919
-    outer loop
-      vertex 21.287531 -6.848857 3.661376
-      vertex 21.018789 -6.304007 4.707789
-      vertex 0.500000 -6.376557 4.588150
-    endloop
-  endfacet
-  facet normal -0.000579 -0.896165 0.443720
-    outer loop
-      vertex 21.287531 -6.848857 3.661376
-      vertex 0.500000 -6.376557 4.588150
-      vertex 0.500000 -6.920020 3.490537
-    endloop
-  endfacet
-  facet normal -0.000006 0.926437 -0.376450
-    outer loop
-      vertex 21.434671 8.126698 -1.915257
-      vertex 21.186325 7.649735 -3.089051
-      vertex 0.500000 8.127172 -1.913765
-    endloop
-  endfacet
-  facet normal 0.000006 0.973696 -0.227853
-    outer loop
-      vertex 21.434671 8.126698 -1.915257
-      vertex 0.500000 8.127172 -1.913765
-      vertex 0.500000 8.406243 -0.721194
-    endloop
-  endfacet
-  facet normal -0.000683 -0.953396 0.301720
-    outer loop
-      vertex 21.493242 -7.233742 2.546763
-      vertex 0.500000 -6.920020 3.490537
-      vertex 0.500000 -7.289563 2.322828
-    endloop
-  endfacet
-  facet normal 0.000553 -0.945201 0.326487
-    outer loop
-      vertex 21.493242 -7.233742 2.546763
-      vertex 21.287531 -6.848857 3.661376
-      vertex 0.500000 -6.920020 3.490537
-    endloop
-  endfacet
-  facet normal -0.000031 0.973553 -0.228463
-    outer loop
-      vertex 21.589144 8.404941 -0.729599
-      vertex 21.434671 8.126698 -1.915257
-      vertex 0.500000 8.406243 -0.721194
-    endloop
-  endfacet
-  facet normal 0.000031 0.997066 -0.076549
-    outer loop
-      vertex 21.589144 8.404941 -0.729599
-      vertex 0.500000 8.406243 -0.721194
-      vertex 0.500000 8.500000 0.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.997025 -0.077079
-    outer loop
-      vertex 21.643593 8.500000 0.500000
-      vertex 21.589144 8.404941 -0.729599
-      vertex 0.500000 8.500000 0.500000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 8.406243 1.721194
-      vertex 0.500000 7.669324 4.049759
-      vertex 0.500000 8.127172 2.913765
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 8.406243 -0.721194
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 8.406243 1.721194
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.500000 0.806422 8.494129
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 -4.822606 6.472426
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex 0.500000 3.204135 8.029120
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 2.023129 8.353666
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -5.671914 -4.589940
-      vertex 0.500000 -3.848540 -6.214923
-      vertex 0.500000 -4.822606 -5.472426
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex 0.500000 2.023129 8.353666
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 0.806422 8.494129
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 0.806422 -7.494130
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 5.349803 -5.862343
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -4.822606 6.472426
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 0.806422 -7.494130
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 5.349803 -5.862343
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 7.669324 -3.049759
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 7.669324 -3.049759
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 8.406243 -0.721194
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 7.043435 5.102549
-      vertex 0.500000 8.406243 1.721194
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 8.406243 1.721194
-      vertex 0.500000 7.043435 5.102549
-      vertex 0.500000 7.669324 4.049759
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -5.671914 -4.589940
-      vertex 0.500000 -2.772549 -6.800029
-      vertex 0.500000 -3.848540 -6.214923
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -6.376557 -3.588150
-      vertex 0.500000 -6.920020 -2.490537
-      vertex 0.500000 -5.671914 -4.589940
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex 0.500000 5.349803 6.862343
-      vertex 0.500000 6.264173 6.047460
-      vertex 0.500000 4.321759 7.528098
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 4.321759 7.528098
-      vertex 0.500000 6.264173 6.047460
-      vertex 0.500000 7.043435 5.102549
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -2.772549 -6.800029
-      vertex 0.500000 -0.417467 -7.447217
-      vertex 0.500000 -1.619852 -7.214028
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -5.671914 -4.589940
-      vertex 0.500000 -0.417467 -7.447217
-      vertex 0.500000 -2.772549 -6.800029
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -7.289563 -1.322828
-      vertex 0.500000 -7.476526 -0.112394
-      vertex 0.500000 -6.920020 -2.490537
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -6.920020 -2.490537
-      vertex 0.500000 -7.476526 -0.112394
-      vertex 0.500000 -5.671914 -4.589940
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -0.417467 -7.447217
-      vertex 0.500000 -7.476526 1.112394
-      vertex 0.500000 0.806422 -7.494130
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -5.671914 -4.589940
-      vertex 0.500000 -7.476526 1.112394
-      vertex 0.500000 -0.417467 -7.447217
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -7.476526 -0.112394
-      vertex 0.500000 -7.476526 1.112394
-      vertex 0.500000 -5.671914 -4.589940
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.500000 -7.289563 2.322828
-      vertex 0.500000 -6.920020 3.490537
-      vertex 0.500000 -7.476526 1.112394
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -7.476526 1.112394
-      vertex 0.500000 -6.920020 3.490537
-      vertex 0.500000 0.806422 -7.494130
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 0.806422 -7.494130
-      vertex 0.500000 4.321759 -6.528098
-      vertex 0.500000 2.023129 -7.353667
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 2.023129 -7.353667
-      vertex 0.500000 4.321759 -6.528098
-      vertex 0.500000 3.204135 -7.029120
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 0.806422 -7.494130
-      vertex 0.500000 5.349803 -5.862343
-      vertex 0.500000 4.321759 -6.528098
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.500000 -6.376557 4.588150
-      vertex 0.500000 -5.671914 5.589940
-      vertex 0.500000 -6.920020 3.490537
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 -6.920020 3.490537
-      vertex 0.500000 -4.822606 6.472426
-      vertex 0.500000 0.806422 -7.494130
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.500000 -5.671914 5.589940
-      vertex 0.500000 -4.822606 6.472426
-      vertex 0.500000 -6.920020 3.490537
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 5.349803 -5.862343
-      vertex 0.500000 7.669324 -3.049759
-      vertex 0.500000 6.264173 -5.047460
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 6.264173 -5.047460
-      vertex 0.500000 7.669324 -3.049759
-      vertex 0.500000 7.043435 -4.102549
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.500000 -3.848540 7.214923
-      vertex 0.500000 -2.772549 7.800029
-      vertex 0.500000 -4.822606 6.472426
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.500000 -2.772549 7.800029
-      vertex 0.500000 -1.619852 8.214028
-      vertex 0.500000 -4.822606 6.472426
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 7.669324 -3.049759
-      vertex 0.500000 8.406243 -0.721194
-      vertex 0.500000 8.127172 -1.913765
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.500000 -0.417467 8.447217
-      vertex 0.500000 0.806422 8.494129
-      vertex 0.500000 -1.619852 8.214028
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.500000 -1.619852 8.214028
-      vertex 0.500000 0.806422 8.494129
-      vertex 0.500000 -4.822606 6.472426
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 8.406243 -0.721194
-      vertex 0.500000 8.406243 1.721194
-      vertex 0.500000 8.500000 0.500000
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.stl b/apps/cpu/Multiphase/backup/FlowFocusing.stl
deleted file mode 100644
index da02cc8b14f6358e7878ab6d19bd66f9fdf408ef..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusing.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS.ast b/apps/cpu/Multiphase/backup/FlowFocusingS.ast
deleted file mode 100644
index 147c1ff7a665b9bf91d4257b93c1af7c9bad65a2..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/FlowFocusingS.ast
+++ /dev/null
@@ -1,3082 +0,0 @@
-solid Mesh
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.594930 28.182674
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 10.898214 29.576851
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.898214 29.576851
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 11.000000 31.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 7.548607 23.442505
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 7.548607 23.442505
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 9.412536 25.593592
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 9.412536 25.593592
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 10.594930 28.182674
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -0.423148 40.898216
-      vertex -34.000000 2.423148 40.898216
-      vertex -34.000000 -3.154150 40.096321
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 1.000000 41.000000
-      vertex -34.000000 2.423148 40.898216
-      vertex -34.000000 -0.423148 40.898216
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 2.423148 40.898216
-      vertex -34.000000 10.898214 32.423149
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -6.557496 24.451393
-      vertex -34.000000 -7.412535 25.593592
-      vertex -34.000000 -5.548607 23.442505
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 10.096320 35.154152
-      vertex -34.000000 10.594930 33.817326
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex -34.000000 3.817326 40.594929
-      vertex -34.000000 5.154150 40.096321
-      vertex -34.000000 2.423148 40.898216
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -8.096320 26.845850
-      vertex -34.000000 -8.594930 28.182674
-      vertex -34.000000 -7.412535 25.593592
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -7.412535 25.593592
-      vertex -34.000000 -8.594930 28.182674
-      vertex -34.000000 -5.548607 23.442505
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.096320 35.154152
-      vertex -34.000000 8.557496 37.548607
-      vertex -34.000000 9.412536 36.406406
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -3.154150 21.903681
-      vertex -34.000000 -0.423148 21.101786
-      vertex -34.000000 -1.817326 21.405069
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex -34.000000 6.406408 39.412537
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 5.154150 40.096321
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 2.423148 40.898216
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 10.898214 32.423149
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex -34.000000 5.154150 40.096321
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 2.423148 40.898216
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 10.096320 35.154152
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.096320 35.154152
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 8.557496 37.548607
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -8.898214 29.576851
-      vertex -34.000000 -9.000000 31.000000
-      vertex -34.000000 -8.594930 28.182674
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -5.548607 23.442505
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 -4.406408 22.587465
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -4.406408 22.587465
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 -3.154150 21.903681
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -0.423148 21.101786
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 1.000000 21.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -3.154150 21.903681
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 -0.423148 21.101786
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -8.898214 32.423149
-      vertex -34.000000 -8.594930 33.817326
-      vertex -34.000000 -9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -9.000000 31.000000
-      vertex -34.000000 -8.594930 33.817326
-      vertex -34.000000 -8.594930 28.182674
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 6.406408 22.587465
-      vertex -34.000000 3.817326 21.405069
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 3.817326 21.405069
-      vertex -34.000000 6.406408 22.587465
-      vertex -34.000000 5.154150 21.903681
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -8.096320 35.154152
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 -8.594930 33.817326
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -8.594930 28.182674
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 -5.548607 23.442505
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -5.548607 23.442505
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 2.423148 21.101786
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -8.594930 33.817326
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 -8.594930 28.182674
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 6.406408 22.587465
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -6.557496 37.548607
-      vertex -34.000000 -5.548607 38.557495
-      vertex -34.000000 -7.412535 36.406406
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 7.548607 23.442505
-      vertex -34.000000 9.412536 25.593592
-      vertex -34.000000 8.557496 24.451393
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -4.406408 39.412537
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 -5.548607 38.557495
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 6.406408 22.587465
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 7.548607 23.442505
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 6.406408 22.587465
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -5.548607 38.557495
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 -7.412535 36.406406
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 9.412536 25.593592
-      vertex -34.000000 10.594930 28.182674
-      vertex -34.000000 10.096320 26.845850
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -1.817326 40.594929
-      vertex -34.000000 -0.423148 40.898216
-      vertex -34.000000 -3.154150 40.096321
-    endloop
-  endfacet
-  facet normal -0.000919 0.936949 -0.349464
-    outer loop
-      vertex -6.470624 10.390941 27.563398
-      vertex -34.000000 10.096320 26.845850
-      vertex -34.000000 10.594930 28.182674
-    endloop
-  endfacet
-  facet normal -0.000773 -0.936950 0.349464
-    outer loop
-      vertex -6.375164 -8.466096 34.223824
-      vertex -34.000000 -8.096320 35.154152
-      vertex -34.000000 -8.594930 33.817326
-    endloop
-  endfacet
-  facet normal 0.001442 -0.913852 0.406044
-    outer loop
-      vertex -6.375164 -8.466096 34.223824
-      vertex -7.218598 -7.743835 35.852356
-      vertex -34.000000 -8.096320 35.154152
-    endloop
-  endfacet
-  facet normal 0.000657 0.958118 -0.286375
-    outer loop
-      vertex -6.012733 10.737638 28.724386
-      vertex -6.470624 10.390941 27.563398
-      vertex -34.000000 10.594930 28.182674
-    endloop
-  endfacet
-  facet normal -0.000868 0.977146 -0.212565
-    outer loop
-      vertex -6.012733 10.737638 28.724386
-      vertex -34.000000 10.594930 28.182674
-      vertex -34.000000 10.898214 29.576851
-    endloop
-  endfacet
-  facet normal -0.000896 -0.977146 0.212565
-    outer loop
-      vertex -5.941191 -8.788762 33.044537
-      vertex -34.000000 -8.594930 33.817326
-      vertex -34.000000 -8.898214 32.423149
-    endloop
-  endfacet
-  facet normal 0.000612 -0.964490 0.264120
-    outer loop
-      vertex -5.941191 -8.788762 33.044537
-      vertex -6.375164 -8.466096 34.223824
-      vertex -34.000000 -8.594930 33.817326
-    endloop
-  endfacet
-  facet normal 0.000376 0.984892 -0.173172
-    outer loop
-      vertex -5.737499 10.930061 29.819368
-      vertex -6.012733 10.737638 28.724386
-      vertex -34.000000 10.898214 29.576851
-    endloop
-  endfacet
-  facet normal -0.000512 0.997452 -0.071339
-    outer loop
-      vertex -5.737499 10.930061 29.819368
-      vertex -34.000000 10.898214 29.576851
-      vertex -34.000000 11.000000 31.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.998250 -0.059135
-    outer loop
-      vertex -5.633250 11.000000 31.000000
-      vertex -5.737499 10.930061 29.819368
-      vertex -34.000000 11.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000873 -0.997452 0.071339
-    outer loop
-      vertex -5.659541 -8.982511 31.591177
-      vertex -34.000000 -8.898214 32.423149
-      vertex -34.000000 -9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000307 0.997452 0.071339
-    outer loop
-      vertex -5.757563 10.916418 32.290215
-      vertex -34.000000 11.000000 31.000000
-      vertex -34.000000 10.898214 32.423149
-    endloop
-  endfacet
-  facet normal 0.000936 -0.991207 0.132320
-    outer loop
-      vertex -5.659541 -8.982511 31.591177
-      vertex -5.941191 -8.788762 33.044537
-      vertex -34.000000 -8.898214 32.423149
-    endloop
-  endfacet
-  facet normal 0.000000 0.997908 0.064646
-    outer loop
-      vertex -5.757563 10.916418 32.290215
-      vertex -5.633250 11.000000 31.000000
-      vertex -34.000000 11.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000887 -0.997452 -0.071339
-    outer loop
-      vertex -5.681127 -8.968077 30.201591
-      vertex -34.000000 -9.000000 31.000000
-      vertex -34.000000 -8.898214 29.576851
-    endloop
-  endfacet
-  facet normal 0.000834 -0.999946 -0.010400
-    outer loop
-      vertex -5.681127 -8.968077 30.201591
-      vertex -5.659541 -8.982511 31.591177
-      vertex -34.000000 -9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000681 0.977147 0.212565
-    outer loop
-      vertex -6.080200 10.688693 33.475727
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 10.594930 33.817326
-    endloop
-  endfacet
-  facet normal 0.000255 0.982033 0.188708
-    outer loop
-      vertex -6.080200 10.688693 33.475727
-      vertex -5.757563 10.916418 32.290215
-      vertex -34.000000 10.898214 32.423149
-    endloop
-  endfacet
-  facet normal -0.000863 -0.977147 -0.212565
-    outer loop
-      vertex -5.919753 -8.803929 29.029472
-      vertex -34.000000 -8.898214 29.576851
-      vertex -34.000000 -8.594930 28.182674
-    endloop
-  endfacet
-  facet normal 0.000619 -0.990318 -0.138813
-    outer loop
-      vertex -5.919753 -8.803929 29.029472
-      vertex -5.681127 -8.968077 30.201591
-      vertex -34.000000 -8.898214 29.576851
-    endloop
-  endfacet
-  facet normal 0.000499 0.953166 0.302446
-    outer loop
-      vertex -6.528029 10.344987 34.559666
-      vertex -6.080200 10.688693 33.475727
-      vertex -34.000000 10.594930 33.817326
-    endloop
-  endfacet
-  facet normal -0.000919 0.936949 0.349463
-    outer loop
-      vertex -6.528029 10.344987 34.559666
-      vertex -34.000000 10.594930 33.817326
-      vertex -34.000000 10.096320 35.154152
-    endloop
-  endfacet
-  facet normal -0.000511 -0.936950 -0.349464
-    outer loop
-      vertex -6.298790 -8.525107 27.954950
-      vertex -34.000000 -8.594930 28.182674
-      vertex -34.000000 -8.096320 26.845850
-    endloop
-  endfacet
-  facet normal 0.000374 -0.967912 -0.251290
-    outer loop
-      vertex -6.298790 -8.525107 27.954950
-      vertex -5.919753 -8.803929 29.029472
-      vertex -34.000000 -8.594930 28.182674
-    endloop
-  endfacet
-  facet normal 0.000978 0.905646 0.424035
-    outer loop
-      vertex -7.240622 9.723082 35.889565
-      vertex -6.528029 10.344987 34.559666
-      vertex -34.000000 10.096320 35.154152
-    endloop
-  endfacet
-  facet normal -0.000929 0.877678 0.479250
-    outer loop
-      vertex -7.240622 9.723082 35.889565
-      vertex -34.000000 10.096320 35.154152
-      vertex -34.000000 9.412536 36.406406
-    endloop
-  endfacet
-  facet normal -0.000508 -0.877679 -0.479249
-    outer loop
-      vertex -6.938873 -7.998572 26.638153
-      vertex -34.000000 -8.096320 26.845850
-      vertex -34.000000 -7.412535 25.593592
-    endloop
-  endfacet
-  facet normal 0.000502 -0.928437 -0.371490
-    outer loop
-      vertex -6.938873 -7.998572 26.638153
-      vertex -6.298790 -8.525107 27.954950
-      vertex -34.000000 -8.096320 26.845850
-    endloop
-  endfacet
-  facet normal 0.001581 0.818925 0.573899
-    outer loop
-      vertex -8.299619 8.584002 37.517891
-      vertex -7.240622 9.723082 35.889565
-      vertex -34.000000 9.412536 36.406406
-    endloop
-  endfacet
-  facet normal -0.000109 0.800542 0.599277
-    outer loop
-      vertex -8.299619 8.584002 37.517891
-      vertex -34.000000 9.412536 36.406406
-      vertex -34.000000 8.557496 37.548607
-    endloop
-  endfacet
-  facet normal 0.000116 0.707107 0.707107
-    outer loop
-      vertex -8.299619 8.584002 37.517891
-      vertex -34.000000 8.557496 37.548607
-      vertex -34.000000 7.548607 38.557495
-    endloop
-  endfacet
-  facet normal -0.000754 -0.800541 -0.599278
-    outer loop
-      vertex -7.758467 -7.203003 25.280670
-      vertex -34.000000 -7.412535 25.593592
-      vertex -34.000000 -6.557496 24.451393
-    endloop
-  endfacet
-  facet normal 0.000853 -0.862528 -0.506009
-    outer loop
-      vertex -7.758467 -7.203003 25.280670
-      vertex -6.938873 -7.998572 26.638153
-      vertex -34.000000 -7.412535 25.593592
-    endloop
-  endfacet
-  facet normal -0.000997 -0.707106 -0.707106
-    outer loop
-      vertex -8.734071 -6.017682 23.875946
-      vertex -34.000000 -6.557496 24.451393
-      vertex -34.000000 -5.548607 23.442505
-    endloop
-  endfacet
-  facet normal 0.001184 0.693748 0.720217
-    outer loop
-      vertex -9.250660 7.238907 38.815117
-      vertex -8.299619 8.584002 37.517891
-      vertex -34.000000 7.548607 38.557495
-    endloop
-  endfacet
-  facet normal 0.001614 -0.763715 -0.645552
-    outer loop
-      vertex -8.734071 -6.017682 23.875946
-      vertex -7.758467 -7.203003 25.280670
-      vertex -34.000000 -6.557496 24.451393
-    endloop
-  endfacet
-  facet normal -0.000834 0.599278 0.800540
-    outer loop
-      vertex -9.250660 7.238907 38.815117
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 6.406408 39.412537
-    endloop
-  endfacet
-  facet normal 0.001572 -0.631668 -0.775238
-    outer loop
-      vertex -9.627810 -4.572220 22.696363
-      vertex -8.734071 -6.017682 23.875946
-      vertex -34.000000 -5.548607 23.442505
-    endloop
-  endfacet
-  facet normal -0.000500 -0.599278 -0.800541
-    outer loop
-      vertex -9.627810 -4.572220 22.696363
-      vertex -34.000000 -5.548607 23.442505
-      vertex -34.000000 -4.406408 22.587465
-    endloop
-  endfacet
-  facet normal 0.001037 0.562496 0.826800
-    outer loop
-      vertex -9.915038 5.986175 39.668221
-      vertex -9.250660 7.238907 38.815117
-      vertex -34.000000 6.406408 39.412537
-    endloop
-  endfacet
-  facet normal -0.000955 0.479249 0.877679
-    outer loop
-      vertex -9.915038 5.986175 39.668221
-      vertex -34.000000 6.406408 39.412537
-      vertex -34.000000 5.154150 40.096321
-    endloop
-  endfacet
-  facet normal 0.000575 -0.488490 -0.872569
-    outer loop
-      vertex -10.252209 -3.169867 21.910873
-      vertex -9.627810 -4.572220 22.696363
-      vertex -34.000000 -4.406408 22.587465
-    endloop
-  endfacet
-  facet normal -0.000051 -0.479249 -0.877679
-    outer loop
-      vertex -10.252209 -3.169867 21.910873
-      vertex -34.000000 -4.406408 22.587465
-      vertex -34.000000 -3.154150 21.903681
-    endloop
-  endfacet
-  facet normal 0.001741 0.417216 0.908806
-    outer loop
-      vertex -10.527491 4.334210 40.427780
-      vertex -9.915038 5.986175 39.668221
-      vertex -34.000000 5.154150 40.096321
-    endloop
-  endfacet
-  facet normal 0.000052 -0.349465 -0.936949
-    outer loop
-      vertex -10.252209 -3.169867 21.910873
-      vertex -34.000000 -3.154150 21.903681
-      vertex -34.000000 -1.817326 21.405069
-    endloop
-  endfacet
-  facet normal -0.001023 0.349463 0.936950
-    outer loop
-      vertex -10.527491 4.334210 40.427780
-      vertex -34.000000 5.154150 40.096321
-      vertex -34.000000 3.817326 40.594929
-    endloop
-  endfacet
-  facet normal -0.000469 -0.212565 -0.977147
-    outer loop
-      vertex -10.703868 -1.649430 21.357359
-      vertex -34.000000 -1.817326 21.405069
-      vertex -34.000000 -0.423148 21.101786
-    endloop
-  endfacet
-  facet normal 0.001080 0.262953 0.964808
-    outer loop
-      vertex -10.846192 2.915130 40.814899
-      vertex -10.527491 4.334210 40.427780
-      vertex -34.000000 3.817326 40.594929
-    endloop
-  endfacet
-  facet normal 0.000540 -0.341944 -0.939720
-    outer loop
-      vertex -10.703868 -1.649430 21.357359
-      vertex -10.252209 -3.169867 21.910873
-      vertex -34.000000 -1.817326 21.405069
-    endloop
-  endfacet
-  facet normal -0.001001 0.212567 0.977146
-    outer loop
-      vertex -10.846192 2.915130 40.814899
-      vertex -34.000000 3.817326 40.594929
-      vertex -34.000000 2.423148 40.898216
-    endloop
-  endfacet
-  facet normal 0.000954 -0.186630 -0.982430
-    outer loop
-      vertex -10.951837 -0.074060 21.057848
-      vertex -10.703868 -1.649430 21.357359
-      vertex -34.000000 -0.423148 21.101786
-    endloop
-  endfacet
-  facet normal -0.000821 -0.071339 -0.997452
-    outer loop
-      vertex -10.951837 -0.074060 21.057848
-      vertex -34.000000 -0.423148 21.101786
-      vertex -34.000000 1.000000 21.000000
-    endloop
-  endfacet
-  facet normal 0.001328 0.105907 0.994375
-    outer loop
-      vertex -10.998376 1.197410 40.998051
-      vertex -10.846192 2.915130 40.814899
-      vertex -34.000000 2.423148 40.898216
-    endloop
-  endfacet
-  facet normal -0.000528 0.071338 0.997452
-    outer loop
-      vertex -10.998376 1.197410 40.998051
-      vertex -34.000000 2.423148 40.898216
-      vertex -34.000000 1.000000 41.000000
-    endloop
-  endfacet
-  facet normal 0.001303 -0.025876 -0.999664
-    outer loop
-      vertex -10.987032 1.557723 21.015564
-      vertex -10.951837 -0.074060 21.057848
-      vertex -34.000000 1.000000 21.000000
-    endloop
-  endfacet
-  facet normal -0.001054 0.071339 -0.997451
-    outer loop
-      vertex -10.987032 1.557723 21.015564
-      vertex -34.000000 1.000000 21.000000
-      vertex -34.000000 2.423148 21.101786
-    endloop
-  endfacet
-  facet normal 0.000652 -0.066086 0.997814
-    outer loop
-      vertex -10.903988 -0.514951 40.884579
-      vertex -10.998376 1.197410 40.998051
-      vertex -34.000000 1.000000 41.000000
-    endloop
-  endfacet
-  facet normal 0.000305 -0.071338 0.997452
-    outer loop
-      vertex -10.903988 -0.514951 40.884579
-      vertex -34.000000 1.000000 41.000000
-      vertex -34.000000 -0.423148 40.898216
-    endloop
-  endfacet
-  facet normal 0.001446 0.137151 -0.990549
-    outer loop
-      vertex -10.800443 3.179347 21.240366
-      vertex -10.987032 1.557723 21.015564
-      vertex -34.000000 2.423148 21.101786
-    endloop
-  endfacet
-  facet normal -0.001092 0.212565 -0.977146
-    outer loop
-      vertex -10.800443 3.179347 21.240366
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 3.817326 21.405069
-    endloop
-  endfacet
-  facet normal -0.000259 -0.210447 0.977605
-    outer loop
-      vertex -10.695628 -1.685570 40.632637
-      vertex -10.903988 -0.514951 40.884579
-      vertex -34.000000 -0.423148 40.898216
-    endloop
-  endfacet
-  facet normal -0.000379 -0.212567 0.977146
-    outer loop
-      vertex -10.695628 -1.685570 40.632637
-      vertex -34.000000 -0.423148 40.898216
-      vertex -34.000000 -1.817326 40.594929
-    endloop
-  endfacet
-  facet normal 0.001252 0.292401 -0.956295
-    outer loop
-      vertex -10.429211 4.656930 21.692644
-      vertex -10.800443 3.179347 21.240366
-      vertex -34.000000 3.817326 21.405069
-    endloop
-  endfacet
-  facet normal -0.001017 0.349465 -0.936949
-    outer loop
-      vertex -10.429211 4.656930 21.692644
-      vertex -34.000000 3.817326 21.405069
-      vertex -34.000000 5.154150 21.903681
-    endloop
-  endfacet
-  facet normal 0.000342 -0.330589 0.943775
-    outer loop
-      vertex -10.343766 -2.913946 40.202229
-      vertex -10.695628 -1.685570 40.632637
-      vertex -34.000000 -1.817326 40.594929
-    endloop
-  endfacet
-  facet normal -0.000646 -0.349463 0.936950
-    outer loop
-      vertex -10.343766 -2.913946 40.202229
-      vertex -34.000000 -1.817326 40.594929
-      vertex -34.000000 -3.154150 40.096321
-    endloop
-  endfacet
-  facet normal 0.000892 0.426229 -0.904615
-    outer loop
-      vertex -9.974246 5.854475 22.257341
-      vertex -10.429211 4.656930 21.692644
-      vertex -34.000000 5.154150 21.903681
-    endloop
-  endfacet
-  facet normal -0.001050 0.479249 -0.877679
-    outer loop
-      vertex -9.974246 5.854475 22.257341
-      vertex -34.000000 5.154150 21.903681
-      vertex -34.000000 6.406408 22.587465
-    endloop
-  endfacet
-  facet normal 0.000565 -0.449518 0.893271
-    outer loop
-      vertex -9.880333 -4.061458 39.624477
-      vertex -10.343766 -2.913946 40.202229
-      vertex -34.000000 -3.154150 40.096321
-    endloop
-  endfacet
-  facet normal -0.000858 -0.479249 0.877679
-    outer loop
-      vertex -9.880333 -4.061458 39.624477
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 -4.406408 39.412537
-    endloop
-  endfacet
-  facet normal 0.001231 0.552229 -0.833691
-    outer loop
-      vertex -9.295414 7.164775 23.126274
-      vertex -9.974246 5.854475 22.257341
-      vertex -34.000000 6.406408 22.587465
-    endloop
-  endfacet
-  facet normal -0.000936 0.599277 -0.800541
-    outer loop
-      vertex -9.295414 7.164775 23.126274
-      vertex -34.000000 6.406408 22.587465
-      vertex -34.000000 7.548607 23.442505
-    endloop
-  endfacet
-  facet normal 0.000947 -0.570730 0.821137
-    outer loop
-      vertex -9.197071 -5.326117 38.744690
-      vertex -9.880333 -4.061458 39.624477
-      vertex -34.000000 -4.406408 39.412537
-    endloop
-  endfacet
-  facet normal -0.000666 -0.599279 0.800540
-    outer loop
-      vertex -9.197071 -5.326117 38.744690
-      vertex -34.000000 -4.406408 39.412537
-      vertex -34.000000 -5.548607 38.557495
-    endloop
-  endfacet
-  facet normal 0.001325 0.685290 -0.728269
-    outer loop
-      vertex -8.372675 8.493528 24.378290
-      vertex -9.295414 7.164775 23.126274
-      vertex -34.000000 7.548607 23.442505
-    endloop
-  endfacet
-  facet normal 0.000902 -0.700754 0.713403
-    outer loop
-      vertex -8.256754 -6.636262 37.456585
-      vertex -9.197071 -5.326117 38.744690
-      vertex -34.000000 -5.548607 38.557495
-    endloop
-  endfacet
-  facet normal -0.000252 0.707107 -0.707107
-    outer loop
-      vertex -8.372675 8.493528 24.378290
-      vertex -34.000000 7.548607 23.442505
-      vertex -34.000000 8.557496 24.451393
-    endloop
-  endfacet
-  facet normal 0.000364 -0.707107 0.707107
-    outer loop
-      vertex -8.256754 -6.636262 37.456585
-      vertex -34.000000 -5.548607 38.557495
-      vertex -34.000000 -6.557496 37.548607
-    endloop
-  endfacet
-  facet normal 0.000289 0.800541 -0.599278
-    outer loop
-      vertex -8.372675 8.493528 24.378290
-      vertex -34.000000 8.557496 24.451393
-      vertex -34.000000 9.412536 25.593592
-    endloop
-  endfacet
-  facet normal -0.000307 -0.800542 0.599277
-    outer loop
-      vertex -8.256754 -6.636262 37.456585
-      vertex -34.000000 -6.557496 37.548607
-      vertex -34.000000 -7.412535 36.406406
-    endloop
-  endfacet
-  facet normal 0.001198 0.809614 -0.586961
-    outer loop
-      vertex -7.338007 9.630043 25.948034
-      vertex -8.372675 8.493528 24.378290
-      vertex -34.000000 9.412536 25.593592
-    endloop
-  endfacet
-  facet normal -0.000789 0.877679 -0.479249
-    outer loop
-      vertex -7.338007 9.630043 25.948034
-      vertex -34.000000 9.412536 25.593592
-      vertex -34.000000 10.096320 26.845850
-    endloop
-  endfacet
-  facet normal -0.000943 -0.877678 0.479250
-    outer loop
-      vertex -7.218598 -7.743835 35.852356
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 -8.096320 35.154152
-    endloop
-  endfacet
-  facet normal 0.001594 -0.822439 0.568851
-    outer loop
-      vertex -7.218598 -7.743835 35.852356
-      vertex -8.256754 -6.636262 37.456585
-      vertex -34.000000 -7.412535 36.406406
-    endloop
-  endfacet
-  facet normal 0.001445 0.904362 -0.426764
-    outer loop
-      vertex -6.470624 10.390941 27.563398
-      vertex -7.338007 9.630043 25.948034
-      vertex -34.000000 10.096320 26.845850
-    endloop
-  endfacet
-  facet normal 0.995973 0.089639 -0.001845
-    outer loop
-      vertex 12.906315 2.496555 23.141226
-      vertex 13.000000 1.000000 1.000000
-      vertex 12.807155 3.142683 1.000000
-    endloop
-  endfacet
-  facet normal 0.998046 0.062478 0.000000
-    outer loop
-      vertex 12.906315 2.496555 23.141226
-      vertex 13.000000 1.000000 23.000000
-      vertex 13.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.998997 0.044772 0.000000
-    outer loop
-      vertex 13.000000 1.000000 61.000000
-      vertex 13.000000 1.000000 39.000000
-      vertex 12.951891 2.073451 38.927654
-    endloop
-  endfacet
-  facet normal 0.984363 0.176153 0.000732
-    outer loop
-      vertex 12.685336 3.730003 23.480221
-      vertex 12.906315 2.496555 23.141226
-      vertex 12.807155 3.142683 1.000000
-    endloop
-  endfacet
-  facet normal 0.963961 0.266036 -0.001727
-    outer loop
-      vertex 12.234818 5.216498 1.000000
-      vertex 12.685336 3.730003 23.480221
-      vertex 12.807155 3.142683 1.000000
-    endloop
-  endfacet
-  facet normal 0.962709 0.270535 -0.001404
-    outer loop
-      vertex 12.401385 4.742783 23.929527
-      vertex 12.685336 3.730003 23.480221
-      vertex 12.234818 5.216498 1.000000
-    endloop
-  endfacet
-  facet normal 0.995972 0.089639 0.002189
-    outer loop
-      vertex 12.807155 3.142683 61.000000
-      vertex 13.000000 1.000000 61.000000
-      vertex 12.951891 2.073451 38.927654
-    endloop
-  endfacet
-  facet normal 0.991662 0.128868 0.000260
-    outer loop
-      vertex 12.807155 3.142683 61.000000
-      vertex 12.951891 2.073451 38.927654
-      vertex 12.829484 3.015767 38.741879
-    endloop
-  endfacet
-  facet normal 0.973905 0.226955 -0.000317
-    outer loop
-      vertex 12.501177 4.423876 38.230289
-      vertex 12.807155 3.142683 61.000000
-      vertex 12.829484 3.015767 38.741879
-    endloop
-  endfacet
-  facet normal 0.933649 0.358189 0.000618
-    outer loop
-      vertex 11.975570 5.851481 24.638937
-      vertex 12.401385 4.742783 23.929527
-      vertex 12.234818 5.216498 1.000000
-    endloop
-  endfacet
-  facet normal 0.900968 0.433883 -0.001774
-    outer loop
-      vertex 11.301386 7.154791 1.000000
-      vertex 11.975570 5.851481 24.638937
-      vertex 12.234818 5.216498 1.000000
-    endloop
-  endfacet
-  facet normal 0.894453 0.447161 -0.000856
-    outer loop
-      vertex 11.475355 6.853796 25.547195
-      vertex 11.975570 5.851481 24.638937
-      vertex 11.301386 7.154791 1.000000
-    endloop
-  endfacet
-  facet normal 0.938377 0.345613 -0.001054
-    outer loop
-      vertex 12.234818 5.216498 61.000000
-      vertex 12.501177 4.423876 38.230289
-      vertex 11.968547 5.867337 37.348938
-    endloop
-  endfacet
-  facet normal 0.963961 0.266036 0.002016
-    outer loop
-      vertex 12.234818 5.216498 61.000000
-      vertex 12.807155 3.142683 61.000000
-      vertex 12.501177 4.423876 38.230289
-    endloop
-  endfacet
-  facet normal 0.853562 0.520991 0.000339
-    outer loop
-      vertex 10.990158 7.648063 26.549915
-      vertex 11.475355 6.853796 25.547195
-      vertex 11.301386 7.154791 1.000000
-    endloop
-  endfacet
-  facet normal 0.809016 0.587785 -0.001708
-    outer loop
-      vertex 10.553408 8.261708 27.643276
-      vertex 11.301386 7.154791 1.000000
-      vertex 10.036858 8.895265 1.000000
-    endloop
-  endfacet
-  facet normal 0.813608 0.581412 -0.001314
-    outer loop
-      vertex 10.553408 8.261708 27.643276
-      vertex 10.990158 7.648063 26.549915
-      vertex 11.301386 7.154791 1.000000
-    endloop
-  endfacet
-  facet normal 0.845588 0.533836 -0.000276
-    outer loop
-      vertex 11.301386 7.154791 61.000000
-      vertex 11.405221 6.977572 36.316826
-      vertex 10.866963 7.829570 35.166172
-    endloop
-  endfacet
-  facet normal 0.891587 0.452849 0.000499
-    outer loop
-      vertex 11.301386 7.154791 61.000000
-      vertex 11.968547 5.867337 37.348938
-      vertex 11.405221 6.977572 36.316826
-    endloop
-  endfacet
-  facet normal 0.900967 0.433883 0.001796
-    outer loop
-      vertex 11.301386 7.154791 61.000000
-      vertex 12.234818 5.216498 61.000000
-      vertex 11.968547 5.867337 37.348938
-    endloop
-  endfacet
-  facet normal 0.781345 0.624100 -0.000308
-    outer loop
-      vertex 10.203491 8.700374 28.831072
-      vertex 10.553408 8.261708 27.643276
-      vertex 10.036858 8.895265 1.000000
-    endloop
-  endfacet
-  facet normal 0.759111 0.650961 0.000013
-    outer loop
-      vertex 10.013048 8.922435 29.888680
-      vertex 10.203491 8.700374 28.831072
-      vertex 10.036858 8.895265 1.000000
-    endloop
-  endfacet
-  facet normal 0.748174 0.663503 -0.000007
-    outer loop
-      vertex 9.944272 9.000000 31.000000
-      vertex 10.013048 8.922435 29.888680
-      vertex 10.036858 8.895265 1.000000
-    endloop
-  endfacet
-  facet normal 0.691063 0.722795 -0.000391
-    outer loop
-      vertex 8.481877 10.381978 1.000000
-      vertex 9.944272 9.000000 31.000000
-      vertex 10.036858 8.895265 1.000000
-    endloop
-  endfacet
-  facet normal 0.750689 0.660656 -0.000010
-    outer loop
-      vertex 10.036858 8.895265 61.000000
-      vertex 10.070409 8.856697 32.507420
-      vertex 9.944272 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal 0.769816 0.638266 0.000043
-    outer loop
-      vertex 10.036858 8.895265 61.000000
-      vertex 10.402563 8.455991 33.899689
-      vertex 10.070409 8.856697 32.507420
-    endloop
-  endfacet
-  facet normal 0.802209 0.597042 0.001148
-    outer loop
-      vertex 10.036858 8.895265 61.000000
-      vertex 10.866963 7.829570 35.166172
-      vertex 10.402563 8.455991 33.899689
-    endloop
-  endfacet
-  facet normal 0.809016 0.587785 0.001748
-    outer loop
-      vertex 10.036858 8.895265 61.000000
-      vertex 11.301386 7.154791 61.000000
-      vertex 10.866963 7.829570 35.166172
-    endloop
-  endfacet
-  facet normal 0.691063 0.722795 0.000391
-    outer loop
-      vertex 8.481877 10.381978 61.000000
-      vertex 10.036858 8.895265 61.000000
-      vertex 9.944272 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal 0.550897 0.834573 0.000000
-    outer loop
-      vertex 8.481877 10.381978 61.000000
-      vertex 8.481877 10.381978 1.000000
-      vertex 6.686424 11.567146 1.000000
-    endloop
-  endfacet
-  facet normal 0.686841 0.726808 0.000000
-    outer loop
-      vertex 8.481877 10.381978 61.000000
-      vertex 9.944272 9.000000 31.000000
-      vertex 8.481877 10.381978 1.000000
-    endloop
-  endfacet
-  facet normal 0.550897 0.834573 0.000000
-    outer loop
-      vertex 6.686424 11.567146 61.000000
-      vertex 8.481877 10.381978 61.000000
-      vertex 6.686424 11.567146 1.000000
-    endloop
-  endfacet
-  facet normal 0.393025 0.919528 0.000000
-    outer loop
-      vertex 6.686424 11.567146 61.000000
-      vertex 6.686424 11.567146 1.000000
-      vertex 4.708204 12.412678 1.000000
-    endloop
-  endfacet
-  facet normal 0.393025 0.919528 0.000000
-    outer loop
-      vertex 4.708204 12.412678 61.000000
-      vertex 6.686424 11.567146 61.000000
-      vertex 4.708204 12.412678 1.000000
-    endloop
-  endfacet
-  facet normal 0.222521 0.974928 0.000000
-    outer loop
-      vertex 4.708204 12.412678 61.000000
-      vertex 4.708204 12.412678 1.000000
-      vertex 2.610799 12.891397 1.000000
-    endloop
-  endfacet
-  facet normal 0.222521 0.974928 0.000000
-    outer loop
-      vertex 2.610799 12.891397 61.000000
-      vertex 4.708204 12.412678 61.000000
-      vertex 2.610799 12.891397 1.000000
-    endloop
-  endfacet
-  facet normal 0.044865 0.998993 0.000000
-    outer loop
-      vertex 2.610799 12.891397 61.000000
-      vertex 2.610799 12.891397 1.000000
-      vertex 0.461622 12.987917 1.000000
-    endloop
-  endfacet
-  facet normal -0.134233 0.990950 0.000000
-    outer loop
-      vertex 0.461622 12.987917 61.000000
-      vertex 0.461622 12.987917 1.000000
-      vertex -1.670251 12.699135 1.000000
-    endloop
-  endfacet
-  facet normal 0.044865 0.998993 0.000000
-    outer loop
-      vertex 0.461622 12.987917 61.000000
-      vertex 2.610799 12.891397 61.000000
-      vertex 0.461622 12.987917 1.000000
-    endloop
-  endfacet
-  facet normal -0.309017 0.951057 0.000000
-    outer loop
-      vertex -1.670251 12.699135 61.000000
-      vertex -1.670251 12.699135 1.000000
-      vertex -3.716300 12.034333 1.000000
-    endloop
-  endfacet
-  facet normal -0.134233 0.990950 0.000000
-    outer loop
-      vertex -1.670251 12.699135 61.000000
-      vertex 0.461622 12.987917 61.000000
-      vertex -1.670251 12.699135 1.000000
-    endloop
-  endfacet
-  facet normal -0.309017 0.951057 0.000000
-    outer loop
-      vertex -3.716300 12.034333 61.000000
-      vertex -1.670251 12.699135 61.000000
-      vertex -3.716300 12.034333 1.000000
-    endloop
-  endfacet
-  facet normal -0.473869 0.880596 0.000082
-    outer loop
-      vertex -5.633250 11.000000 31.000000
-      vertex -3.716300 12.034333 1.000000
-      vertex -5.610764 11.014879 1.000000
-    endloop
-  endfacet
-  facet normal -0.474858 0.880063 0.000000
-    outer loop
-      vertex -5.633250 11.000000 31.000000
-      vertex -3.716300 12.034333 61.000000
-      vertex -3.716300 12.034333 1.000000
-    endloop
-  endfacet
-  facet normal -0.557076 0.830461 -0.000006
-    outer loop
-      vertex -5.737499 10.930061 29.819368
-      vertex -5.633250 11.000000 31.000000
-      vertex -5.610764 11.014879 1.000000
-    endloop
-  endfacet
-  facet normal -0.572700 0.819765 -0.000106
-    outer loop
-      vertex -6.012733 10.737638 28.724386
-      vertex -5.737499 10.930061 29.819368
-      vertex -5.610764 11.014879 1.000000
-    endloop
-  endfacet
-  facet normal -0.623489 0.781830 -0.001818
-    outer loop
-      vertex -6.470624 10.390941 27.563398
-      vertex -5.610764 11.014879 1.000000
-      vertex -7.292752 9.673538 1.000000
-    endloop
-  endfacet
-  facet normal -0.602432 0.798170 -0.000753
-    outer loop
-      vertex -6.470624 10.390941 27.563398
-      vertex -6.012733 10.737638 28.724386
-      vertex -5.610764 11.014879 1.000000
-    endloop
-  endfacet
-  facet normal -0.557913 0.829899 0.000007
-    outer loop
-      vertex -5.610764 11.014879 61.000000
-      vertex -5.633250 11.000000 31.000000
-      vertex -5.757563 10.916418 32.290215
-    endloop
-  endfacet
-  facet normal -0.576298 0.817240 0.000144
-    outer loop
-      vertex -5.610764 11.014879 61.000000
-      vertex -5.757563 10.916418 32.290215
-      vertex -6.080200 10.688693 33.475727
-    endloop
-  endfacet
-  facet normal -0.607404 0.794393 0.000945
-    outer loop
-      vertex -5.610764 11.014879 61.000000
-      vertex -6.080200 10.688693 33.475727
-      vertex -6.528029 10.344987 34.559666
-    endloop
-  endfacet
-  facet normal -0.473869 0.880596 -0.000082
-    outer loop
-      vertex -5.610764 11.014879 61.000000
-      vertex -3.716300 12.034333 61.000000
-      vertex -5.633250 11.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.659575 0.751638 0.000114
-    outer loop
-      vertex -7.338007 9.630043 25.948034
-      vertex -6.470624 10.390941 27.563398
-      vertex -7.292752 9.673538 1.000000
-    endloop
-  endfacet
-  facet normal -0.753070 0.657938 -0.001578
-    outer loop
-      vertex -8.372675 8.493528 24.378290
-      vertex -7.292752 9.673538 1.000000
-      vertex -8.708204 8.053423 1.000000
-    endloop
-  endfacet
-  facet normal -0.739348 0.673324 -0.000167
-    outer loop
-      vertex -8.372675 8.493528 24.378290
-      vertex -7.338007 9.630043 25.948034
-      vertex -7.292752 9.673538 1.000000
-    endloop
-  endfacet
-  facet normal -0.657409 0.753534 0.000122
-    outer loop
-      vertex -7.292752 9.673538 61.000000
-      vertex -6.528029 10.344987 34.559666
-      vertex -7.240622 9.723082 35.889565
-    endloop
-  endfacet
-  facet normal -0.623489 0.781830 0.001822
-    outer loop
-      vertex -7.292752 9.673538 61.000000
-      vertex -5.610764 11.014879 61.000000
-      vertex -6.528029 10.344987 34.559666
-    endloop
-  endfacet
-  facet normal -0.732509 0.680757 -0.000178
-    outer loop
-      vertex -8.299619 8.584002 37.517891
-      vertex -7.292752 9.673538 61.000000
-      vertex -7.240622 9.723082 35.889565
-    endloop
-  endfacet
-  facet normal -0.858447 0.512898 -0.002183
-    outer loop
-      vertex -9.295414 7.164775 23.126274
-      vertex -8.708204 8.053423 1.000000
-      vertex -9.811626 6.206605 1.000000
-    endloop
-  endfacet
-  facet normal -0.821844 0.569712 0.001070
-    outer loop
-      vertex -9.295414 7.164775 23.126274
-      vertex -8.372675 8.493528 24.378290
-      vertex -8.708204 8.053423 1.000000
-    endloop
-  endfacet
-  facet normal -0.817061 0.576550 -0.001190
-    outer loop
-      vertex -8.708204 8.053423 61.000000
-      vertex -8.299619 8.584002 37.517891
-      vertex -9.250660 7.238907 38.815117
-    endloop
-  endfacet
-  facet normal -0.753070 0.657938 0.001763
-    outer loop
-      vertex -8.708204 8.053423 61.000000
-      vertex -7.292752 9.673538 61.000000
-      vertex -8.299619 8.584002 37.517891
-    endloop
-  endfacet
-  facet normal -0.888137 0.459578 0.000819
-    outer loop
-      vertex -9.974246 5.854475 22.257341
-      vertex -9.295414 7.164775 23.126274
-      vertex -9.811626 6.206605 1.000000
-    endloop
-  endfacet
-  facet normal -0.936234 0.351374 -0.001628
-    outer loop
-      vertex -10.429211 4.656930 21.692644
-      vertex -9.811626 6.206605 1.000000
-      vertex -10.567554 4.192442 1.000000
-    endloop
-  endfacet
-  facet normal -0.934612 0.355666 -0.001258
-    outer loop
-      vertex -10.429211 4.656930 21.692644
-      vertex -9.974246 5.854475 22.257341
-      vertex -9.811626 6.206605 1.000000
-    endloop
-  endfacet
-  facet normal -0.883604 0.468235 -0.000555
-    outer loop
-      vertex -9.811626 6.206605 61.000000
-      vertex -9.250660 7.238907 38.815117
-      vertex -9.915038 5.986175 39.668221
-    endloop
-  endfacet
-  facet normal -0.858447 0.512898 0.002159
-    outer loop
-      vertex -9.811626 6.206605 61.000000
-      vertex -8.708204 8.053423 61.000000
-      vertex -9.250660 7.238907 38.815117
-    endloop
-  endfacet
-  facet normal -0.969932 0.243376 0.001022
-    outer loop
-      vertex -10.800443 3.179347 21.240366
-      vertex -10.429211 4.656930 21.692644
-      vertex -10.567554 4.192442 1.000000
-    endloop
-  endfacet
-  facet normal -0.983927 0.178556 -0.002384
-    outer loop
-      vertex -10.951692 2.075672 1.000000
-      vertex -10.800443 3.179347 21.240366
-      vertex -10.567554 4.192442 1.000000
-    endloop
-  endfacet
-  facet normal -0.937549 0.347852 0.000571
-    outer loop
-      vertex -10.567554 4.192442 61.000000
-      vertex -9.915038 5.986175 39.668221
-      vertex -10.527491 4.334210 40.427780
-    endloop
-  endfacet
-  facet normal -0.936235 0.351375 0.000908
-    outer loop
-      vertex -10.567554 4.192442 61.000000
-      vertex -9.811626 6.206605 61.000000
-      vertex -9.915038 5.986175 39.668221
-    endloop
-  endfacet
-  facet normal -0.975719 0.219024 -0.000391
-    outer loop
-      vertex -10.846192 2.915130 40.814899
-      vertex -10.567554 4.192442 61.000000
-      vertex -10.527491 4.334210 40.427780
-    endloop
-  endfacet
-  facet normal -0.993463 0.114145 0.001200
-    outer loop
-      vertex -10.987032 1.557723 21.015564
-      vertex -10.800443 3.179347 21.240366
-      vertex -10.951692 2.075672 1.000000
-    endloop
-  endfacet
-  facet normal -0.999999 0.000000 -0.001766
-    outer loop
-      vertex -10.951692 -0.075672 1.000000
-      vertex -10.987032 1.557723 21.015564
-      vertex -10.951692 2.075672 1.000000
-    endloop
-  endfacet
-  facet normal -0.996112 0.088087 -0.001543
-    outer loop
-      vertex -10.951692 2.075672 61.000000
-      vertex -10.846192 2.915130 40.814899
-      vertex -10.998376 1.197410 40.998051
-    endloop
-  endfacet
-  facet normal -0.983927 0.178556 0.002283
-    outer loop
-      vertex -10.951692 2.075672 61.000000
-      vertex -10.567554 4.192442 61.000000
-      vertex -10.846192 2.915130 40.814899
-    endloop
-  endfacet
-  facet normal -0.999767 -0.021564 -0.000005
-    outer loop
-      vertex -10.951837 -0.074060 21.057848
-      vertex -10.987032 1.557723 21.015564
-      vertex -10.951692 -0.075672 1.000000
-    endloop
-  endfacet
-  facet normal -0.987838 -0.155488 0.000005
-    outer loop
-      vertex -10.703868 -1.649430 21.357359
-      vertex -10.951837 -0.074060 21.057848
-      vertex -10.951692 -0.075672 1.000000
-    endloop
-  endfacet
-  facet normal -0.983928 -0.178557 -0.001826
-    outer loop
-      vertex -10.703868 -1.649430 21.357359
-      vertex -10.951692 -0.075672 1.000000
-      vertex -10.567554 -2.192442 1.000000
-    endloop
-  endfacet
-  facet normal -0.999997 0.000000 0.002334
-    outer loop
-      vertex -10.951692 -0.075672 61.000000
-      vertex -10.951692 2.075672 61.000000
-      vertex -10.998376 1.197410 40.998051
-    endloop
-  endfacet
-  facet normal -0.998488 -0.054961 -0.001168
-    outer loop
-      vertex -10.951692 -0.075672 61.000000
-      vertex -10.998376 1.197410 40.998051
-      vertex -10.903988 -0.514951 40.884579
-    endloop
-  endfacet
-  facet normal -0.984469 -0.175549 0.001499
-    outer loop
-      vertex -10.695628 -1.685570 40.632637
-      vertex -10.951692 -0.075672 61.000000
-      vertex -10.903988 -0.514951 40.884579
-    endloop
-  endfacet
-  facet normal -0.958714 -0.284370 0.001166
-    outer loop
-      vertex -10.252209 -3.169867 21.910873
-      vertex -10.703868 -1.649430 21.357359
-      vertex -10.567554 -2.192442 1.000000
-    endloop
-  endfacet
-  facet normal -0.936232 -0.351374 -0.002305
-    outer loop
-      vertex -9.811626 -4.206605 1.000000
-      vertex -10.252209 -3.169867 21.910873
-      vertex -10.567554 -2.192442 1.000000
-    endloop
-  endfacet
-  facet normal -0.983928 -0.178557 0.001743
-    outer loop
-      vertex -10.567554 -2.192442 61.000000
-      vertex -10.951692 -0.075672 61.000000
-      vertex -10.695628 -1.685570 40.632637
-    endloop
-  endfacet
-  facet normal -0.961412 -0.275111 -0.000801
-    outer loop
-      vertex -10.567554 -2.192442 61.000000
-      vertex -10.695628 -1.685570 40.632637
-      vertex -10.343766 -2.913946 40.202229
-    endloop
-  endfacet
-  facet normal -0.913724 -0.406335 0.000894
-    outer loop
-      vertex -9.627810 -4.572220 22.696363
-      vertex -10.252209 -3.169867 21.910873
-      vertex -9.811626 -4.206605 1.000000
-    endloop
-  endfacet
-  facet normal -0.858448 -0.512899 -0.001370
-    outer loop
-      vertex -8.708204 -6.053423 1.000000
-      vertex -9.627810 -4.572220 22.696363
-      vertex -9.811626 -4.206605 1.000000
-    endloop
-  endfacet
-  facet normal -0.927161 -0.374662 0.000436
-    outer loop
-      vertex -9.811626 -4.206605 61.000000
-      vertex -10.343766 -2.913946 40.202229
-      vertex -9.880333 -4.061458 39.624477
-    endloop
-  endfacet
-  facet normal -0.936233 -0.351374 0.002116
-    outer loop
-      vertex -9.811626 -4.206605 61.000000
-      vertex -10.567554 -2.192442 61.000000
-      vertex -10.343766 -2.913946 40.202229
-    endloop
-  endfacet
-  facet normal -0.879920 -0.475121 -0.000398
-    outer loop
-      vertex -9.197071 -5.326117 38.744690
-      vertex -9.811626 -4.206605 61.000000
-      vertex -9.880333 -4.061458 39.624477
-    endloop
-  endfacet
-  facet normal -0.850496 -0.525982 -0.000140
-    outer loop
-      vertex -8.734071 -6.017682 23.875946
-      vertex -9.627810 -4.572220 22.696363
-      vertex -8.708204 -6.053423 1.000000
-    endloop
-  endfacet
-  facet normal -0.772173 -0.635412 0.000120
-    outer loop
-      vertex -7.758467 -7.203003 25.280670
-      vertex -8.734071 -6.017682 23.875946
-      vertex -8.708204 -6.053423 1.000000
-    endloop
-  endfacet
-  facet normal -0.753070 -0.657938 -0.001694
-    outer loop
-      vertex -7.758467 -7.203003 25.280670
-      vertex -8.708204 -6.053423 1.000000
-      vertex -7.292752 -7.673538 1.000000
-    endloop
-  endfacet
-  facet normal -0.812957 -0.582322 -0.001173
-    outer loop
-      vertex -8.708204 -6.053423 61.000000
-      vertex -9.197071 -5.326117 38.744690
-      vertex -8.256754 -6.636262 37.456585
-    endloop
-  endfacet
-  facet normal -0.858447 -0.512898 0.002095
-    outer loop
-      vertex -8.708204 -6.053423 61.000000
-      vertex -9.811626 -4.206605 61.000000
-      vertex -9.197071 -5.326117 38.744690
-    endloop
-  endfacet
-  facet normal -0.696962 -0.717107 0.000529
-    outer loop
-      vertex -6.938873 -7.998572 26.638153
-      vertex -7.758467 -7.203003 25.280670
-      vertex -7.292752 -7.673538 1.000000
-    endloop
-  endfacet
-  facet normal -0.623489 -0.781830 -0.001709
-    outer loop
-      vertex -6.298790 -8.525107 27.954950
-      vertex -7.292752 -7.673538 1.000000
-      vertex -5.610764 -9.014879 1.000000
-    endloop
-  endfacet
-  facet normal -0.633988 -0.773343 -0.001053
-    outer loop
-      vertex -6.298790 -8.525107 27.954950
-      vertex -6.938873 -7.998572 26.638153
-      vertex -7.292752 -7.673538 1.000000
-    endloop
-  endfacet
-  facet normal -0.729775 -0.683688 -0.000241
-    outer loop
-      vertex -7.292752 -7.673538 61.000000
-      vertex -8.256754 -6.636262 37.456585
-      vertex -7.218598 -7.743835 35.852356
-    endloop
-  endfacet
-  facet normal -0.650207 -0.759757 0.000207
-    outer loop
-      vertex -7.292752 -7.673538 61.000000
-      vertex -7.218598 -7.743835 35.852356
-      vertex -6.375164 -8.466096 34.223824
-    endloop
-  endfacet
-  facet normal -0.753070 -0.657938 0.001848
-    outer loop
-      vertex -7.292752 -7.673538 61.000000
-      vertex -8.708204 -6.053423 61.000000
-      vertex -8.256754 -6.636262 37.456585
-    endloop
-  endfacet
-  facet normal -0.591715 -0.806147 -0.000456
-    outer loop
-      vertex -5.919753 -8.803929 29.029472
-      vertex -6.298790 -8.525107 27.954950
-      vertex -5.610764 -9.014879 1.000000
-    endloop
-  endfacet
-  facet normal -0.566597 -0.823995 -0.000045
-    outer loop
-      vertex -5.681127 -8.968077 30.201591
-      vertex -5.919753 -8.803929 29.029472
-      vertex -5.610764 -9.014879 1.000000
-    endloop
-  endfacet
-  facet normal -0.492774 -0.870156 -0.001384
-    outer loop
-      vertex -3.716300 -10.034333 1.000000
-      vertex -5.659541 -8.982511 31.591177
-      vertex -5.681127 -8.968077 30.201591
-    endloop
-  endfacet
-  facet normal -0.473869 -0.880595 0.000270
-    outer loop
-      vertex -3.716300 -10.034333 1.000000
-      vertex -5.681127 -8.968077 30.201591
-      vertex -5.610764 -9.014879 1.000000
-    endloop
-  endfacet
-  facet normal -0.595712 -0.803198 0.000545
-    outer loop
-      vertex -5.610764 -9.014879 61.000000
-      vertex -6.375164 -8.466096 34.223824
-      vertex -5.941191 -8.788762 33.044537
-    endloop
-  endfacet
-  facet normal -0.566640 -0.823965 0.000033
-    outer loop
-      vertex -5.610764 -9.014879 61.000000
-      vertex -5.941191 -8.788762 33.044537
-      vertex -5.659541 -8.982511 31.591177
-    endloop
-  endfacet
-  facet normal -0.623489 -0.781830 0.001775
-    outer loop
-      vertex -5.610764 -9.014879 61.000000
-      vertex -7.292752 -7.673538 61.000000
-      vertex -6.375164 -8.466096 34.223824
-    endloop
-  endfacet
-  facet normal -0.476015 -0.879437 -0.000000
-    outer loop
-      vertex -3.716300 -10.034333 61.000000
-      vertex -5.659541 -8.982511 31.591177
-      vertex -3.716300 -10.034333 1.000000
-    endloop
-  endfacet
-  facet normal -0.473869 -0.880596 -0.000183
-    outer loop
-      vertex -3.716300 -10.034333 61.000000
-      vertex -5.610764 -9.014879 61.000000
-      vertex -5.659541 -8.982511 31.591177
-    endloop
-  endfacet
-  facet normal -0.309017 -0.951057 -0.000000
-    outer loop
-      vertex -1.670251 -10.699135 61.000000
-      vertex -3.716300 -10.034333 1.000000
-      vertex -1.670251 -10.699135 1.000000
-    endloop
-  endfacet
-  facet normal -0.309017 -0.951057 0.000000
-    outer loop
-      vertex -1.670251 -10.699135 61.000000
-      vertex -3.716300 -10.034333 61.000000
-      vertex -3.716300 -10.034333 1.000000
-    endloop
-  endfacet
-  facet normal -0.134233 -0.990950 -0.000000
-    outer loop
-      vertex 0.461622 -10.987917 61.000000
-      vertex -1.670251 -10.699135 1.000000
-      vertex 0.461622 -10.987917 1.000000
-    endloop
-  endfacet
-  facet normal -0.134233 -0.990950 0.000000
-    outer loop
-      vertex 0.461622 -10.987917 61.000000
-      vertex -1.670251 -10.699135 61.000000
-      vertex -1.670251 -10.699135 1.000000
-    endloop
-  endfacet
-  facet normal 0.044865 -0.998993 0.000000
-    outer loop
-      vertex 2.610799 -10.891397 61.000000
-      vertex 0.461622 -10.987917 1.000000
-      vertex 2.610799 -10.891397 1.000000
-    endloop
-  endfacet
-  facet normal 0.044865 -0.998993 0.000000
-    outer loop
-      vertex 2.610799 -10.891397 61.000000
-      vertex 0.461622 -10.987917 61.000000
-      vertex 0.461622 -10.987917 1.000000
-    endloop
-  endfacet
-  facet normal 0.222521 -0.974928 0.000000
-    outer loop
-      vertex 4.708204 -10.412678 61.000000
-      vertex 2.610799 -10.891397 1.000000
-      vertex 4.708204 -10.412678 1.000000
-    endloop
-  endfacet
-  facet normal 0.222521 -0.974928 0.000000
-    outer loop
-      vertex 4.708204 -10.412678 61.000000
-      vertex 2.610799 -10.891397 61.000000
-      vertex 2.610799 -10.891397 1.000000
-    endloop
-  endfacet
-  facet normal 0.393025 -0.919528 0.000000
-    outer loop
-      vertex 6.686424 -9.567146 61.000000
-      vertex 4.708204 -10.412678 1.000000
-      vertex 6.686424 -9.567146 1.000000
-    endloop
-  endfacet
-  facet normal 0.393025 -0.919528 0.000000
-    outer loop
-      vertex 6.686424 -9.567146 61.000000
-      vertex 4.708204 -10.412678 61.000000
-      vertex 4.708204 -10.412678 1.000000
-    endloop
-  endfacet
-  facet normal 0.550897 -0.834573 0.000000
-    outer loop
-      vertex 8.481877 -8.381978 61.000000
-      vertex 6.686424 -9.567146 1.000000
-      vertex 8.481877 -8.381978 1.000000
-    endloop
-  endfacet
-  facet normal 0.550897 -0.834573 0.000000
-    outer loop
-      vertex 8.481877 -8.381978 61.000000
-      vertex 6.686424 -9.567146 61.000000
-      vertex 6.686424 -9.567146 1.000000
-    endloop
-  endfacet
-  facet normal 0.691063 -0.722795 -0.000345
-    outer loop
-      vertex 9.957149 -6.985579 30.519876
-      vertex 8.481877 -8.381978 1.000000
-      vertex 10.036858 -6.895265 1.000000
-    endloop
-  endfacet
-  facet normal 0.687426 -0.726254 0.000000
-    outer loop
-      vertex 9.957149 -6.985579 30.519876
-      vertex 8.481877 -8.381978 61.000000
-      vertex 8.481877 -8.381978 1.000000
-    endloop
-  endfacet
-  facet normal 0.708120 -0.706089 0.001925
-    outer loop
-      vertex 9.987243 -6.951696 31.877798
-      vertex 8.481877 -8.381978 61.000000
-      vertex 9.957149 -6.985579 30.519876
-    endloop
-  endfacet
-  facet normal 0.753489 -0.657461 0.000023
-    outer loop
-      vertex 10.123698 -6.794750 29.199480
-      vertex 9.957149 -6.985579 30.519876
-      vertex 10.036858 -6.895265 1.000000
-    endloop
-  endfacet
-  facet normal 0.773520 -0.633772 -0.000123
-    outer loop
-      vertex 10.441307 -6.406870 27.977043
-      vertex 10.123698 -6.794750 29.199480
-      vertex 10.036858 -6.895265 1.000000
-    endloop
-  endfacet
-  facet normal 0.803340 -0.595519 -0.001263
-    outer loop
-      vertex 10.859378 -5.840517 26.851828
-      vertex 10.441307 -6.406870 27.977043
-      vertex 10.036858 -6.895265 1.000000
-    endloop
-  endfacet
-  facet normal 0.809016 -0.587784 -0.001759
-    outer loop
-      vertex 10.859378 -5.840517 26.851828
-      vertex 10.036858 -6.895265 1.000000
-      vertex 11.301386 -5.154791 1.000000
-    endloop
-  endfacet
-  facet normal 0.691063 -0.722795 0.000223
-    outer loop
-      vertex 10.036858 -6.895265 61.000000
-      vertex 8.481877 -8.381978 61.000000
-      vertex 9.987243 -6.951696 31.877798
-    endloop
-  endfacet
-  facet normal 0.781345 -0.624099 0.000308
-    outer loop
-      vertex 10.036858 -6.895265 61.000000
-      vertex 10.203491 -6.700374 33.168926
-      vertex 10.553408 -6.261708 34.356724
-    endloop
-  endfacet
-  facet normal 0.758090 -0.652150 -0.000028
-    outer loop
-      vertex 10.036858 -6.895265 61.000000
-      vertex 9.987243 -6.951696 31.877798
-      vertex 10.203491 -6.700374 33.168926
-    endloop
-  endfacet
-  facet normal 0.842107 -0.539311 0.000093
-    outer loop
-      vertex 11.336069 -5.096366 25.819815
-      vertex 10.859378 -5.840517 26.851828
-      vertex 11.301386 -5.154791 1.000000
-    endloop
-  endfacet
-  facet normal 0.883041 -0.469295 -0.000129
-    outer loop
-      vertex 11.837209 -4.153146 24.880760
-      vertex 11.336069 -5.096366 25.819815
-      vertex 11.301386 -5.154791 1.000000
-    endloop
-  endfacet
-  facet normal 0.900967 -0.433883 -0.002017
-    outer loop
-      vertex 11.837209 -4.153146 24.880760
-      vertex 11.301386 -5.154791 1.000000
-      vertex 12.234818 -3.216498 1.000000
-    endloop
-  endfacet
-  facet normal 0.853562 -0.520991 -0.000339
-    outer loop
-      vertex 11.301386 -5.154791 61.000000
-      vertex 10.990158 -5.648063 35.450085
-      vertex 11.475355 -4.853796 36.452805
-    endloop
-  endfacet
-  facet normal 0.813608 -0.581412 0.001314
-    outer loop
-      vertex 11.301386 -5.154791 61.000000
-      vertex 10.553408 -6.261708 34.356724
-      vertex 10.990158 -5.648063 35.450085
-    endloop
-  endfacet
-  facet normal 0.809016 -0.587785 0.001708
-    outer loop
-      vertex 11.301386 -5.154791 61.000000
-      vertex 10.036858 -6.895265 61.000000
-      vertex 10.553408 -6.261708 34.356724
-    endloop
-  endfacet
-  facet normal 0.894453 -0.447161 0.000856
-    outer loop
-      vertex 11.975570 -3.851482 37.361065
-      vertex 11.301386 -5.154791 61.000000
-      vertex 11.475355 -4.853796 36.452805
-    endloop
-  endfacet
-  facet normal 0.920709 -0.390251 0.000023
-    outer loop
-      vertex 12.239279 -3.204594 24.194017
-      vertex 11.837209 -4.153146 24.880760
-      vertex 12.234818 -3.216498 1.000000
-    endloop
-  endfacet
-  facet normal 0.951728 -0.306942 -0.000025
-    outer loop
-      vertex 12.578117 -2.153920 23.647940
-      vertex 12.239279 -3.204594 24.194017
-      vertex 12.234818 -3.216498 1.000000
-    endloop
-  endfacet
-  facet normal 0.963961 -0.266036 -0.002130
-    outer loop
-      vertex 12.578117 -2.153920 23.647940
-      vertex 12.234818 -3.216498 1.000000
-      vertex 12.807155 -1.142683 1.000000
-    endloop
-  endfacet
-  facet normal 0.933649 -0.358189 -0.000618
-    outer loop
-      vertex 12.234818 -3.216498 61.000000
-      vertex 11.975570 -3.851482 37.361065
-      vertex 12.401385 -2.742783 38.070473
-    endloop
-  endfacet
-  facet normal 0.900968 -0.433883 0.001774
-    outer loop
-      vertex 12.234818 -3.216498 61.000000
-      vertex 11.301386 -5.154791 61.000000
-      vertex 11.975570 -3.851482 37.361065
-    endloop
-  endfacet
-  facet normal 0.962709 -0.270535 0.001404
-    outer loop
-      vertex 12.685336 -1.730003 38.519779
-      vertex 12.234818 -3.216498 61.000000
-      vertex 12.401385 -2.742783 38.070473
-    endloop
-  endfacet
-  facet normal 0.977880 -0.209164 0.000550
-    outer loop
-      vertex 12.854566 -0.862602 23.219851
-      vertex 12.578117 -2.153920 23.647940
-      vertex 12.807155 -1.142683 1.000000
-    endloop
-  endfacet
-  facet normal 0.992916 -0.118816 -0.000621
-    outer loop
-      vertex 12.959556 0.015602 23.060797
-      vertex 12.854566 -0.862602 23.219851
-      vertex 12.807155 -1.142683 1.000000
-    endloop
-  endfacet
-  facet normal 0.995972 -0.089639 -0.002174
-    outer loop
-      vertex 12.959556 0.015602 23.060797
-      vertex 12.807155 -1.142683 1.000000
-      vertex 13.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.984363 -0.176153 -0.000732
-    outer loop
-      vertex 12.807155 -1.142683 61.000000
-      vertex 12.685336 -1.730003 38.519779
-      vertex 12.906315 -0.496555 38.858772
-    endloop
-  endfacet
-  facet normal 0.963961 -0.266036 0.001727
-    outer loop
-      vertex 12.807155 -1.142683 61.000000
-      vertex 12.234818 -3.216498 61.000000
-      vertex 12.685336 -1.730003 38.519779
-    endloop
-  endfacet
-  facet normal 0.999157 -0.041051 0.000000
-    outer loop
-      vertex 13.000000 1.000000 23.000000
-      vertex 12.959556 0.015602 23.060797
-      vertex 13.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.998046 -0.062478 0.000000
-    outer loop
-      vertex 13.000000 1.000000 61.000000
-      vertex 12.906315 -0.496555 38.858772
-      vertex 13.000000 1.000000 39.000000
-    endloop
-  endfacet
-  facet normal 0.995973 -0.089639 0.001845
-    outer loop
-      vertex 13.000000 1.000000 61.000000
-      vertex 12.807155 -1.142683 61.000000
-      vertex 12.906315 -0.496555 38.858772
-    endloop
-  endfacet
-  facet normal -0.000014 -0.989717 -0.143040
-    outer loop
-      vertex 131.000000 -6.799423 29.219833
-      vertex 9.957149 -6.985579 30.519876
-      vertex 10.123698 -6.794750 29.199480
-    endloop
-  endfacet
-  facet normal 0.000014 -0.953169 -0.302437
-    outer loop
-      vertex 131.000000 -6.799423 29.219833
-      vertex 10.123698 -6.794750 29.199480
-      vertex 10.441307 -6.406870 27.977043
-    endloop
-  endfacet
-  facet normal 0.000326 -0.993712 -0.111965
-    outer loop
-      vertex 131.000000 -6.799423 29.219833
-      vertex 131.000000 -7.000000 31.000000
-      vertex 9.957149 -6.985579 30.519876
-    endloop
-  endfacet
-  facet normal 0.000000 0.995512 0.094638
-    outer loop
-      vertex 131.000000 9.000000 31.000000
-      vertex 9.944272 9.000000 31.000000
-      vertex 10.070409 8.856697 32.507420
-    endloop
-  endfacet
-  facet normal -0.000196 -0.893205 -0.449649
-    outer loop
-      vertex 131.000000 -6.207751 27.528931
-      vertex 10.441307 -6.406870 27.977043
-      vertex 10.859378 -5.840517 26.851828
-    endloop
-  endfacet
-  facet normal -0.000169 0.960980 0.276618
-    outer loop
-      vertex 131.000000 8.799423 32.780167
-      vertex 10.070409 8.856697 32.507420
-      vertex 10.402563 8.455991 33.899689
-    endloop
-  endfacet
-  facet normal 0.000331 -0.943883 -0.330279
-    outer loop
-      vertex 131.000000 -6.207751 27.528931
-      vertex 131.000000 -6.799423 29.219833
-      vertex 10.441307 -6.406870 27.977043
-    endloop
-  endfacet
-  facet normal 0.000218 0.993712 0.111965
-    outer loop
-      vertex 131.000000 8.799423 32.780167
-      vertex 131.000000 9.000000 31.000000
-      vertex 10.070409 8.856697 32.507420
-    endloop
-  endfacet
-  facet normal -0.000133 -0.811094 -0.584915
-    outer loop
-      vertex 131.000000 -5.254652 26.012081
-      vertex 10.859378 -5.840517 26.851828
-      vertex 11.336069 -5.096366 25.819815
-    endloop
-  endfacet
-  facet normal 0.000410 -0.846724 -0.532032
-    outer loop
-      vertex 131.000000 -5.254652 26.012081
-      vertex 131.000000 -6.207751 27.528931
-      vertex 10.859378 -5.840517 26.851828
-    endloop
-  endfacet
-  facet normal -0.000256 0.896312 0.443423
-    outer loop
-      vertex 131.000000 8.207751 34.471069
-      vertex 10.402563 8.455991 33.899689
-      vertex 10.866963 7.829570 35.166172
-    endloop
-  endfacet
-  facet normal 0.000378 0.943883 0.330279
-    outer loop
-      vertex 131.000000 8.207751 34.471069
-      vertex 131.000000 8.799423 32.780167
-      vertex 10.402563 8.455991 33.899689
-    endloop
-  endfacet
-  facet normal 0.000173 -0.705586 -0.708624
-    outer loop
-      vertex 131.000000 -3.987918 24.745348
-      vertex 11.336069 -5.096366 25.819815
-      vertex 11.837209 -4.153146 24.880760
-    endloop
-  endfacet
-  facet normal -0.000107 -0.586402 -0.810021
-    outer loop
-      vertex 131.000000 -3.987918 24.745348
-      vertex 11.837209 -4.153146 24.880760
-      vertex 12.239279 -3.204594 24.194017
-    endloop
-  endfacet
-  facet normal -0.000225 0.803620 0.595143
-    outer loop
-      vertex 131.000000 7.254652 35.987919
-      vertex 10.866963 7.829570 35.166172
-      vertex 11.405221 6.977572 36.316826
-    endloop
-  endfacet
-  facet normal 0.000201 -0.707107 -0.707107
-    outer loop
-      vertex 131.000000 -3.987918 24.745348
-      vertex 131.000000 -5.254652 26.012081
-      vertex 11.336069 -5.096366 25.819815
-    endloop
-  endfacet
-  facet normal 0.000413 0.846724 0.532032
-    outer loop
-      vertex 131.000000 7.254652 35.987919
-      vertex 131.000000 8.207751 34.471069
-      vertex 10.866963 7.829570 35.166172
-    endloop
-  endfacet
-  facet normal -0.000154 -0.461132 -0.887331
-    outer loop
-      vertex 131.000000 -2.471070 23.792250
-      vertex 12.239279 -3.204594 24.194017
-      vertex 12.578117 -2.153920 23.647940
-    endloop
-  endfacet
-  facet normal -0.000110 0.680839 0.732433
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 11.405221 6.977572 36.316826
-      vertex 11.968547 5.867337 37.348938
-    endloop
-  endfacet
-  facet normal 0.000422 -0.532032 -0.846724
-    outer loop
-      vertex 131.000000 -2.471070 23.792250
-      vertex 131.000000 -3.987918 24.745348
-      vertex 12.239279 -3.204594 24.194017
-    endloop
-  endfacet
-  facet normal 0.000306 0.707106 0.707107
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 7.254652 35.987919
-      vertex 11.405221 6.977572 36.316826
-    endloop
-  endfacet
-  facet normal -0.000045 0.521109 0.853490
-    outer loop
-      vertex 131.000000 4.471070 38.207752
-      vertex 11.968547 5.867337 37.348938
-      vertex 12.501177 4.423876 38.230289
-    endloop
-  endfacet
-  facet normal 0.000043 0.341486 0.939887
-    outer loop
-      vertex 131.000000 4.471070 38.207752
-      vertex 12.501177 4.423876 38.230289
-      vertex 12.829484 3.015767 38.741879
-    endloop
-  endfacet
-  facet normal 0.000132 0.532033 0.846723
-    outer loop
-      vertex 131.000000 4.471070 38.207752
-      vertex 131.000000 5.987918 37.254650
-      vertex 11.968547 5.867337 37.348938
-    endloop
-  endfacet
-  facet normal 0.000065 -0.314685 -0.949196
-    outer loop
-      vertex 131.000000 -0.780167 23.200577
-      vertex 12.578117 -2.153920 23.647940
-      vertex 12.854566 -0.862602 23.219851
-    endloop
-  endfacet
-  facet normal -0.000036 -0.178209 -0.983993
-    outer loop
-      vertex 131.000000 -0.780167 23.200577
-      vertex 12.854566 -0.862602 23.219851
-      vertex 12.959556 0.015602 23.060797
-    endloop
-  endfacet
-  facet normal 0.000266 -0.330279 -0.943883
-    outer loop
-      vertex 131.000000 -0.780167 23.200577
-      vertex 131.000000 -2.471070 23.792250
-      vertex 12.578117 -2.153920 23.647940
-    endloop
-  endfacet
-  facet normal -0.000092 0.193413 0.981117
-    outer loop
-      vertex 131.000000 2.780168 38.799423
-      vertex 12.829484 3.015767 38.741879
-      vertex 12.951891 2.073451 38.927654
-    endloop
-  endfacet
-  facet normal 0.000199 0.330278 0.943884
-    outer loop
-      vertex 131.000000 2.780168 38.799423
-      vertex 131.000000 4.471070 38.207752
-      vertex 12.829484 3.015767 38.741879
-    endloop
-  endfacet
-  facet normal 0.000000 0.093950 -0.995577
-    outer loop
-      vertex 131.000000 1.000000 23.000000
-      vertex 13.000000 1.000000 23.000000
-      vertex 12.906315 2.496555 23.141226
-    endloop
-  endfacet
-  facet normal -0.000000 -0.061643 -0.998098
-    outer loop
-      vertex 131.000000 1.000000 23.000000
-      vertex 12.959556 0.015602 23.060797
-      vertex 13.000000 1.000000 23.000000
-    endloop
-  endfacet
-  facet normal 0.000422 -0.111965 -0.993712
-    outer loop
-      vertex 131.000000 1.000000 23.000000
-      vertex 131.000000 -0.780167 23.200577
-      vertex 12.959556 0.015602 23.060797
-    endloop
-  endfacet
-  facet normal 0.000409 0.111965 0.993712
-    outer loop
-      vertex 131.000000 1.000000 39.000000
-      vertex 131.000000 2.780168 38.799423
-      vertex 12.951891 2.073451 38.927654
-    endloop
-  endfacet
-  facet normal 0.000000 -0.093951 0.995577
-    outer loop
-      vertex 131.000000 1.000000 39.000000
-      vertex 13.000000 1.000000 39.000000
-      vertex 12.906315 -0.496555 38.858772
-    endloop
-  endfacet
-  facet normal 0.000000 0.067243 0.997737
-    outer loop
-      vertex 131.000000 1.000000 39.000000
-      vertex 12.951891 2.073451 38.927654
-      vertex 13.000000 1.000000 39.000000
-    endloop
-  endfacet
-  facet normal -0.000152 0.264984 -0.964253
-    outer loop
-      vertex 131.000000 2.780168 23.200577
-      vertex 12.906315 2.496555 23.141226
-      vertex 12.685336 3.730003 23.480221
-    endloop
-  endfacet
-  facet normal 0.000231 0.111965 -0.993712
-    outer loop
-      vertex 131.000000 2.780168 23.200577
-      vertex 131.000000 1.000000 23.000000
-      vertex 12.906315 2.496555 23.141226
-    endloop
-  endfacet
-  facet normal -0.000152 -0.264982 0.964253
-    outer loop
-      vertex 131.000000 -0.780167 38.799423
-      vertex 12.906315 -0.496555 38.858772
-      vertex 12.685336 -1.730003 38.519779
-    endloop
-  endfacet
-  facet normal -0.000129 0.405492 -0.914099
-    outer loop
-      vertex 131.000000 4.471070 23.792250
-      vertex 12.685336 3.730003 23.480221
-      vertex 12.401385 4.742783 23.929527
-    endloop
-  endfacet
-  facet normal 0.000231 -0.111965 0.993712
-    outer loop
-      vertex 131.000000 -0.780167 38.799423
-      vertex 131.000000 1.000000 39.000000
-      vertex 12.906315 -0.496555 38.858772
-    endloop
-  endfacet
-  facet normal 0.000421 0.330279 -0.943883
-    outer loop
-      vertex 131.000000 4.471070 23.792250
-      vertex 131.000000 2.780168 23.200577
-      vertex 12.685336 3.730003 23.480221
-    endloop
-  endfacet
-  facet normal -0.000129 -0.405492 0.914099
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 12.685336 -1.730003 38.519779
-      vertex 12.401385 -2.742783 38.070473
-    endloop
-  endfacet
-  facet normal 0.000421 -0.330278 0.943883
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -0.780167 38.799423
-      vertex 12.685336 -1.730003 38.519779
-    endloop
-  endfacet
-  facet normal 0.000135 0.539006 -0.842302
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 12.401385 4.742783 23.929527
-      vertex 11.975570 5.851481 24.638937
-    endloop
-  endfacet
-  facet normal -0.000107 0.671454 -0.741046
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 11.975570 5.851481 24.638937
-      vertex 11.475355 6.853796 25.547195
-    endloop
-  endfacet
-  facet normal 0.000239 0.532032 -0.846724
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 131.000000 4.471070 23.792250
-      vertex 12.401385 4.742783 23.929527
-    endloop
-  endfacet
-  facet normal -0.000213 0.783825 -0.620981
-    outer loop
-      vertex 131.000000 7.254652 26.012081
-      vertex 11.475355 6.853796 25.547195
-      vertex 10.990158 7.648063 26.549915
-    endloop
-  endfacet
-  facet normal 0.000239 -0.532033 0.846723
-    outer loop
-      vertex 131.000000 -3.987918 37.254650
-      vertex 131.000000 -2.471070 38.207752
-      vertex 12.401385 -2.742783 38.070473
-    endloop
-  endfacet
-  facet normal 0.000135 -0.539005 0.842303
-    outer loop
-      vertex 131.000000 -3.987918 37.254650
-      vertex 12.401385 -2.742783 38.070473
-      vertex 11.975570 -3.851482 37.361065
-    endloop
-  endfacet
-  facet normal -0.000107 -0.671455 0.741046
-    outer loop
-      vertex 131.000000 -3.987918 37.254650
-      vertex 11.975570 -3.851482 37.361065
-      vertex 11.475355 -4.853796 36.452805
-    endloop
-  endfacet
-  facet normal 0.000379 0.707107 -0.707107
-    outer loop
-      vertex 131.000000 7.254652 26.012081
-      vertex 131.000000 5.987918 24.745348
-      vertex 11.475355 6.853796 25.547195
-    endloop
-  endfacet
-  facet normal -0.000213 -0.783825 0.620981
-    outer loop
-      vertex 131.000000 -5.254652 35.987919
-      vertex 11.475355 -4.853796 36.452805
-      vertex 10.990158 -5.648063 35.450085
-    endloop
-  endfacet
-  facet normal -0.000074 0.872030 -0.489453
-    outer loop
-      vertex 131.000000 8.207751 27.528931
-      vertex 10.990158 7.648063 26.549915
-      vertex 10.553408 8.261708 27.643276
-    endloop
-  endfacet
-  facet normal 0.000091 0.938081 -0.346416
-    outer loop
-      vertex 131.000000 8.207751 27.528931
-      vertex 10.553408 8.261708 27.643276
-      vertex 10.203491 8.700374 28.831072
-    endloop
-  endfacet
-  facet normal 0.000379 -0.707106 0.707107
-    outer loop
-      vertex 131.000000 -5.254652 35.987919
-      vertex 131.000000 -3.987918 37.254650
-      vertex 11.475355 -4.853796 36.452805
-    endloop
-  endfacet
-  facet normal 0.000391 0.846724 -0.532032
-    outer loop
-      vertex 131.000000 8.207751 27.528931
-      vertex 131.000000 7.254652 26.012081
-      vertex 10.990158 7.648063 26.549915
-    endloop
-  endfacet
-  facet normal -0.000074 -0.872030 0.489453
-    outer loop
-      vertex 131.000000 -6.207751 34.471069
-      vertex 10.990158 -5.648063 35.450085
-      vertex 10.553408 -6.261708 34.356724
-    endloop
-  endfacet
-  facet normal 0.000091 -0.938081 0.346416
-    outer loop
-      vertex 131.000000 -6.207751 34.471069
-      vertex 10.553408 -6.261708 34.356724
-      vertex 10.203491 -6.700374 33.168926
-    endloop
-  endfacet
-  facet normal 0.000391 -0.846724 0.532032
-    outer loop
-      vertex 131.000000 -6.207751 34.471069
-      vertex 131.000000 -5.254652 35.987919
-      vertex 10.990158 -5.648063 35.450085
-    endloop
-  endfacet
-  facet normal -0.000141 0.978655 -0.205509
-    outer loop
-      vertex 131.000000 8.799423 29.219833
-      vertex 10.203491 8.700374 28.831072
-      vertex 10.013048 8.922435 29.888680
-    endloop
-  endfacet
-  facet normal 0.000289 0.943883 -0.330279
-    outer loop
-      vertex 131.000000 8.799423 29.219833
-      vertex 131.000000 8.207751 27.528931
-      vertex 10.203491 8.700374 28.831072
-    endloop
-  endfacet
-  facet normal 0.000391 0.993712 -0.111965
-    outer loop
-      vertex 131.000000 9.000000 31.000000
-      vertex 131.000000 8.799423 29.219833
-      vertex 10.013048 8.922435 29.888680
-    endloop
-  endfacet
-  facet normal 0.000000 0.997573 -0.069626
-    outer loop
-      vertex 131.000000 9.000000 31.000000
-      vertex 10.013048 8.922435 29.888680
-      vertex 9.944272 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000190 -0.981571 0.191098
-    outer loop
-      vertex 131.000000 -6.799423 32.780167
-      vertex 10.203491 -6.700374 33.168926
-      vertex 9.987243 -6.951696 31.877798
-    endloop
-  endfacet
-  facet normal 0.000289 -0.943883 0.330279
-    outer loop
-      vertex 131.000000 -6.799423 32.780167
-      vertex 131.000000 -6.207751 34.471069
-      vertex 10.203491 -6.700374 33.168926
-    endloop
-  endfacet
-  facet normal -0.000218 -0.999689 0.024950
-    outer loop
-      vertex 131.000000 -7.000000 31.000000
-      vertex 9.987243 -6.951696 31.877798
-      vertex 9.957149 -6.985579 30.519876
-    endloop
-  endfacet
-  facet normal 0.000416 -0.993712 0.111965
-    outer loop
-      vertex 131.000000 -7.000000 31.000000
-      vertex 131.000000 -6.799423 32.780167
-      vertex 9.987243 -6.951696 31.877798
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 10.036858 -6.895265 1.000000
-      vertex 8.481877 10.381978 1.000000
-      vertex 12.234818 5.216498 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.234818 5.216498 1.000000
-      vertex 8.481877 10.381978 1.000000
-      vertex 11.301386 7.154791 1.000000
-    endloop
-  endfacet
-  facet normal -0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 6.686424 11.567146 1.000000
-      vertex 8.481877 10.381978 1.000000
-      vertex 4.708204 12.412678 1.000000
-    endloop
-  endfacet
-  facet normal -0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 4.708204 12.412678 1.000000
-      vertex 8.481877 10.381978 1.000000
-      vertex 2.610799 12.891397 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.951692 -0.075672 1.000000
-      vertex 8.481877 10.381978 1.000000
-      vertex -9.811626 -4.206605 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -8.708204 -6.053423 1.000000
-      vertex -3.716300 -10.034333 1.000000
-      vertex -7.292752 -7.673538 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -9.811626 6.206605 1.000000
-      vertex 8.481877 10.381978 1.000000
-      vertex -10.951692 -0.075672 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -7.292752 -7.673538 1.000000
-      vertex -3.716300 -10.034333 1.000000
-      vertex -5.610764 -9.014879 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -9.811626 -4.206605 1.000000
-      vertex 8.481877 10.381978 1.000000
-      vertex 10.036858 -6.895265 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 2.610799 12.891397 1.000000
-      vertex 8.481877 10.381978 1.000000
-      vertex -9.811626 6.206605 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 8.481877 10.381978 1.000000
-      vertex 10.036858 8.895265 1.000000
-      vertex 11.301386 7.154791 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.567554 -2.192442 1.000000
-      vertex -10.951692 -0.075672 1.000000
-      vertex -9.811626 -4.206605 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -3.716300 -10.034333 1.000000
-      vertex 0.461622 -10.987917 1.000000
-      vertex -1.670251 -10.699135 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -8.708204 -6.053423 1.000000
-      vertex 0.461622 -10.987917 1.000000
-      vertex -3.716300 -10.034333 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 0.461622 -10.987917 1.000000
-      vertex 4.708204 -10.412678 1.000000
-      vertex 2.610799 -10.891397 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -10.567554 4.192442 1.000000
-      vertex -9.811626 6.206605 1.000000
-      vertex -10.951692 2.075672 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.951692 2.075672 1.000000
-      vertex -9.811626 6.206605 1.000000
-      vertex -10.951692 -0.075672 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -8.708204 8.053423 1.000000
-      vertex -7.292752 9.673538 1.000000
-      vertex -9.811626 6.206605 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -9.811626 -4.206605 1.000000
-      vertex 10.036858 -6.895265 1.000000
-      vertex -8.708204 -6.053423 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 4.708204 -10.412678 1.000000
-      vertex 10.036858 -6.895265 1.000000
-      vertex 6.686424 -9.567146 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 6.686424 -9.567146 1.000000
-      vertex 10.036858 -6.895265 1.000000
-      vertex 8.481877 -8.381978 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -8.708204 -6.053423 1.000000
-      vertex 10.036858 -6.895265 1.000000
-      vertex 0.461622 -10.987917 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 0.461622 -10.987917 1.000000
-      vertex 10.036858 -6.895265 1.000000
-      vertex 4.708204 -10.412678 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 10.036858 -6.895265 1.000000
-      vertex 12.234818 -3.216498 1.000000
-      vertex 11.301386 -5.154791 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -1.670251 12.699135 1.000000
-      vertex 0.461622 12.987917 1.000000
-      vertex -3.716300 12.034333 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -3.716300 12.034333 1.000000
-      vertex 0.461622 12.987917 1.000000
-      vertex -5.610764 11.014879 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -5.610764 11.014879 1.000000
-      vertex 2.610799 12.891397 1.000000
-      vertex -7.292752 9.673538 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -7.292752 9.673538 1.000000
-      vertex 2.610799 12.891397 1.000000
-      vertex -9.811626 6.206605 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 0.461622 12.987917 1.000000
-      vertex 2.610799 12.891397 1.000000
-      vertex -5.610764 11.014879 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.807155 -1.142683 1.000000
-      vertex 12.807155 3.142683 1.000000
-      vertex 13.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.234818 -3.216498 1.000000
-      vertex 12.234818 5.216498 1.000000
-      vertex 12.807155 -1.142683 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 10.036858 -6.895265 1.000000
-      vertex 12.234818 5.216498 1.000000
-      vertex 12.234818 -3.216498 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.807155 -1.142683 1.000000
-      vertex 12.234818 5.216498 1.000000
-      vertex 12.807155 3.142683 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.481877 10.381978 61.000000
-      vertex 12.234818 5.216498 61.000000
-      vertex 11.301386 7.154791 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.481877 10.381978 61.000000
-      vertex 6.686424 11.567146 61.000000
-      vertex 4.708204 12.412678 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.481877 10.381978 61.000000
-      vertex 4.708204 12.412678 61.000000
-      vertex 2.610799 12.891397 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.481877 10.381978 61.000000
-      vertex 2.610799 12.891397 61.000000
-      vertex -5.610764 11.014879 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.481877 10.381978 61.000000
-      vertex -5.610764 11.014879 61.000000
-      vertex 12.234818 5.216498 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -3.716300 -10.034333 61.000000
-      vertex -8.708204 -6.053423 61.000000
-      vertex -7.292752 -7.673538 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 8.895265 61.000000
-      vertex 8.481877 10.381978 61.000000
-      vertex 11.301386 7.154791 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -3.716300 -10.034333 61.000000
-      vertex -7.292752 -7.673538 61.000000
-      vertex -5.610764 -9.014879 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -10.951692 -0.075672 61.000000
-      vertex -10.567554 -2.192442 61.000000
-      vertex -9.811626 -4.206605 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.461622 -10.987917 61.000000
-      vertex -3.716300 -10.034333 61.000000
-      vertex -1.670251 -10.699135 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.461622 -10.987917 61.000000
-      vertex -8.708204 -6.053423 61.000000
-      vertex -3.716300 -10.034333 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 4.708204 -10.412678 61.000000
-      vertex 0.461622 -10.987917 61.000000
-      vertex 2.610799 -10.891397 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -9.811626 6.206605 61.000000
-      vertex -10.567554 4.192442 61.000000
-      vertex -10.951692 2.075672 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -9.811626 6.206605 61.000000
-      vertex -10.951692 2.075672 61.000000
-      vertex -10.951692 -0.075672 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -7.292752 9.673538 61.000000
-      vertex -8.708204 8.053423 61.000000
-      vertex -9.811626 6.206605 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 -6.895265 61.000000
-      vertex -9.811626 -4.206605 61.000000
-      vertex -8.708204 -6.053423 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 -6.895265 61.000000
-      vertex 4.708204 -10.412678 61.000000
-      vertex 6.686424 -9.567146 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 -6.895265 61.000000
-      vertex 6.686424 -9.567146 61.000000
-      vertex 8.481877 -8.381978 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 -6.895265 61.000000
-      vertex -8.708204 -6.053423 61.000000
-      vertex 0.461622 -10.987917 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 -6.895265 61.000000
-      vertex 0.461622 -10.987917 61.000000
-      vertex 4.708204 -10.412678 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 -3.216498 61.000000
-      vertex 10.036858 -6.895265 61.000000
-      vertex 11.301386 -5.154791 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.461622 12.987917 61.000000
-      vertex -1.670251 12.699135 61.000000
-      vertex -3.716300 12.034333 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.461622 12.987917 61.000000
-      vertex -3.716300 12.034333 61.000000
-      vertex -5.610764 11.014879 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 2.610799 12.891397 61.000000
-      vertex 0.461622 12.987917 61.000000
-      vertex -5.610764 11.014879 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.807155 3.142683 61.000000
-      vertex 12.807155 -1.142683 61.000000
-      vertex 13.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 61.000000
-      vertex -5.610764 11.014879 61.000000
-      vertex -7.292752 9.673538 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 61.000000
-      vertex 12.234818 -3.216498 61.000000
-      vertex 12.807155 -1.142683 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 61.000000
-      vertex -10.951692 -0.075672 61.000000
-      vertex -9.811626 -4.206605 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 61.000000
-      vertex -7.292752 9.673538 61.000000
-      vertex -9.811626 6.206605 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 61.000000
-      vertex -9.811626 6.206605 61.000000
-      vertex -10.951692 -0.075672 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 61.000000
-      vertex -9.811626 -4.206605 61.000000
-      vertex 10.036858 -6.895265 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 61.000000
-      vertex 10.036858 -6.895265 61.000000
-      vertex 12.234818 -3.216498 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 61.000000
-      vertex 12.807155 -1.142683 61.000000
-      vertex 12.807155 3.142683 61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 23.792250
-      vertex 131.000000 -5.254652 26.012081
-      vertex 131.000000 -3.987918 24.745348
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 1.000000 23.000000
-      vertex 131.000000 -2.471070 23.792250
-      vertex 131.000000 -0.780167 23.200577
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 2.780168 23.200577
-      vertex 131.000000 -2.471070 23.792250
-      vertex 131.000000 1.000000 23.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 131.000000 2.780168 23.200577
-      vertex 131.000000 4.471070 23.792250
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 131.000000 -5.254652 26.012081
-      vertex 131.000000 -2.471070 23.792250
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 131.000000 -2.471070 23.792250
-      vertex 131.000000 2.780168 23.200577
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -5.254652 35.987919
-      vertex 131.000000 -6.207751 34.471069
-      vertex 131.000000 -6.799423 32.780167
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 7.254652 26.012081
-      vertex 131.000000 -6.799423 29.219833
-      vertex 131.000000 -6.207751 27.528931
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 7.254652 26.012081
-      vertex 131.000000 -6.207751 27.528931
-      vertex 131.000000 -5.254652 26.012081
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 7.254652 26.012081
-      vertex 131.000000 -5.254652 26.012081
-      vertex 131.000000 5.987918 24.745348
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -3.987918 37.254650
-      vertex 131.000000 -5.254652 35.987919
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -6.799423 32.780167
-      vertex 131.000000 -7.000000 31.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -7.000000 31.000000
-      vertex 131.000000 -6.799423 29.219833
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 7.254652 26.012081
-      vertex 131.000000 8.207751 27.528931
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -6.799423 29.219833
-      vertex 131.000000 7.254652 26.012081
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -5.254652 35.987919
-      vertex 131.000000 -6.799423 32.780167
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 8.799423 32.780167
-      vertex 131.000000 8.207751 27.528931
-      vertex 131.000000 8.799423 29.219833
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 8.799423 32.780167
-      vertex 131.000000 8.799423 29.219833
-      vertex 131.000000 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 2.780168 38.799423
-      vertex 131.000000 1.000000 39.000000
-      vertex 131.000000 -0.780167 38.799423
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 8.207751 34.471069
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 8.207751 27.528931
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 8.207751 34.471069
-      vertex 131.000000 8.207751 27.528931
-      vertex 131.000000 8.799423 32.780167
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 8.207751 34.471069
-      vertex 131.000000 7.254652 35.987919
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 4.471070 38.207752
-      vertex 131.000000 2.780168 38.799423
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 -0.780167 38.799423
-      vertex 131.000000 -2.471070 38.207752
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 2.780168 38.799423
-      vertex 131.000000 -0.780167 38.799423
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 8.207751 34.471069
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS.stl b/apps/cpu/Multiphase/backup/FlowFocusingS.stl
deleted file mode 100644
index b84a5e8ff64c351fb616a33ae55c5f4477705f4a..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingS.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2.ast b/apps/cpu/Multiphase/backup/FlowFocusingS2.ast
deleted file mode 100644
index 1b356112100b7d690d87a99b62b13c8dc58cc6be..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/FlowFocusingS2.ast
+++ /dev/null
@@ -1,422 +0,0 @@
-solid Mesh
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 1.000000 16.000000 1.000000
-      vertex 51.000000 1.000000 1.000000
-      vertex 1.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 1.000000 16.000000 1.000000
-      vertex 51.000000 16.000000 1.000000
-      vertex 51.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 16.000000 26.000000
-      vertex 1.000000 16.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 1.000000 26.000000
-      vertex 1.000000 16.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 11.000000 16.000000 26.000000
-      vertex 1.000000 16.000000 1.000000
-      vertex 1.000000 16.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 16.000000 16.000000 26.000000
-      vertex 1.000000 16.000000 1.000000
-      vertex 11.000000 16.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 51.000000 16.000000 1.000000
-      vertex 1.000000 16.000000 1.000000
-      vertex 16.000000 16.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 51.000000 16.000000 26.000000
-      vertex 51.000000 16.000000 1.000000
-      vertex 16.000000 16.000000 26.000000
-    endloop
-  endfacet
-  facet normal 1.000000 -0.000000 0.000000
-    outer loop
-      vertex 51.000000 1.000000 26.000000
-      vertex 51.000000 16.000000 1.000000
-      vertex 51.000000 16.000000 26.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 51.000000 1.000000 26.000000
-      vertex 51.000000 1.000000 1.000000
-      vertex 51.000000 16.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 11.000000 1.000000 26.000000
-      vertex 1.000000 1.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 16.000000 1.000000 26.000000
-      vertex 11.000000 1.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 51.000000 1.000000 1.000000
-      vertex 16.000000 1.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 51.000000 1.000000 1.000000
-      vertex 51.000000 1.000000 26.000000
-      vertex 16.000000 1.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -24.000000 1.000000 26.000000
-      vertex 1.000000 16.000000 26.000000
-      vertex 1.000000 1.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -24.000000 16.000000 26.000000
-      vertex 1.000000 16.000000 26.000000
-      vertex -24.000000 1.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 51.000000 16.000000 26.000000
-      vertex 16.000000 16.000000 76.000000
-      vertex 51.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 51.000000 16.000000 26.000000
-      vertex 16.000000 16.000000 26.000000
-      vertex 16.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 16.000000 16.000000 26.000000
-      vertex 11.000000 16.000000 76.000000
-      vertex 16.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 16.000000 16.000000 26.000000
-      vertex 11.000000 16.000000 26.000000
-      vertex 11.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 1.000000 16.000000 26.000000
-      vertex 1.000000 16.000000 76.000000
-      vertex 11.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 11.000000 16.000000 26.000000
-      vertex 1.000000 16.000000 26.000000
-      vertex 11.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 51.000000 1.000000 26.000000
-      vertex 181.000000 16.000000 26.000000
-      vertex 181.000000 1.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 51.000000 16.000000 26.000000
-      vertex 181.000000 16.000000 26.000000
-      vertex 51.000000 1.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 16.000000 1.000000 76.000000
-      vertex 51.000000 1.000000 26.000000
-      vertex 51.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 16.000000 1.000000 26.000000
-      vertex 51.000000 1.000000 26.000000
-      vertex 16.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 11.000000 1.000000 76.000000
-      vertex 16.000000 1.000000 26.000000
-      vertex 16.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 11.000000 1.000000 26.000000
-      vertex 16.000000 1.000000 26.000000
-      vertex 11.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 76.000000
-      vertex 1.000000 1.000000 26.000000
-      vertex 11.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 26.000000
-      vertex 11.000000 1.000000 26.000000
-      vertex 11.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 1.000000 16.000000 26.000000
-      vertex -24.000000 16.000000 76.000000
-      vertex 1.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 1.000000 16.000000 26.000000
-      vertex -24.000000 16.000000 26.000000
-      vertex -24.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -24.000000 1.000000 76.000000
-      vertex 1.000000 1.000000 26.000000
-      vertex 1.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -24.000000 1.000000 26.000000
-      vertex 1.000000 1.000000 26.000000
-      vertex -24.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -24.000000 1.000000 26.000000
-      vertex -24.000000 1.000000 76.000000
-      vertex -24.000000 16.000000 26.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -24.000000 1.000000 76.000000
-      vertex -24.000000 16.000000 76.000000
-      vertex -24.000000 16.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 181.000000 16.000000 26.000000
-      vertex 51.000000 16.000000 76.000000
-      vertex 181.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 181.000000 16.000000 26.000000
-      vertex 51.000000 16.000000 26.000000
-      vertex 51.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 1.000000 16.000000 101.000000
-      vertex 11.000000 16.000000 76.000000
-      vertex 1.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 1.000000 16.000000 101.000000
-      vertex 16.000000 16.000000 76.000000
-      vertex 11.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 51.000000 16.000000 101.000000
-      vertex 51.000000 16.000000 76.000000
-      vertex 16.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 51.000000 16.000000 101.000000
-      vertex 16.000000 16.000000 76.000000
-      vertex 1.000000 16.000000 101.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 181.000000 1.000000 76.000000
-      vertex 181.000000 1.000000 26.000000
-      vertex 181.000000 16.000000 26.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 181.000000 16.000000 76.000000
-      vertex 181.000000 1.000000 76.000000
-      vertex 181.000000 16.000000 26.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 51.000000 1.000000 76.000000
-      vertex 181.000000 1.000000 26.000000
-      vertex 181.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 51.000000 1.000000 26.000000
-      vertex 181.000000 1.000000 26.000000
-      vertex 51.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 11.000000 1.000000 76.000000
-      vertex 1.000000 1.000000 101.000000
-      vertex 1.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 16.000000 1.000000 76.000000
-      vertex 1.000000 1.000000 101.000000
-      vertex 11.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 51.000000 1.000000 76.000000
-      vertex 51.000000 1.000000 101.000000
-      vertex 16.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 16.000000 1.000000 76.000000
-      vertex 51.000000 1.000000 101.000000
-      vertex 1.000000 1.000000 101.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 1.000000 16.000000 76.000000
-      vertex -24.000000 1.000000 76.000000
-      vertex 1.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 1.000000 16.000000 76.000000
-      vertex -24.000000 16.000000 76.000000
-      vertex -24.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 181.000000 16.000000 76.000000
-      vertex 51.000000 1.000000 76.000000
-      vertex 181.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 181.000000 16.000000 76.000000
-      vertex 51.000000 16.000000 76.000000
-      vertex 51.000000 1.000000 76.000000
-    endloop
-  endfacet
-  facet normal 1.000000 -0.000000 0.000000
-    outer loop
-      vertex 51.000000 1.000000 101.000000
-      vertex 51.000000 16.000000 76.000000
-      vertex 51.000000 16.000000 101.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 51.000000 1.000000 101.000000
-      vertex 51.000000 1.000000 76.000000
-      vertex 51.000000 16.000000 76.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 51.000000 1.000000 101.000000
-      vertex 1.000000 16.000000 101.000000
-      vertex 1.000000 1.000000 101.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 51.000000 16.000000 101.000000
-      vertex 1.000000 16.000000 101.000000
-      vertex 51.000000 1.000000 101.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 16.000000 76.000000
-      vertex 1.000000 1.000000 101.000000
-      vertex 1.000000 16.000000 101.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 76.000000
-      vertex 1.000000 1.000000 101.000000
-      vertex 1.000000 16.000000 76.000000
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2.stl b/apps/cpu/Multiphase/backup/FlowFocusingS2.stl
deleted file mode 100644
index f44acdfeb1595248f244f916f71c95cc1290a5b2..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingS2.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast b/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast
deleted file mode 100644
index 0bbb5c2eae41623c5564009a4d59e434c3ff08d9..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast
+++ /dev/null
@@ -1,366 +0,0 @@
-solid Mesh
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 0.500000 9.500000 0.500000
-      vertex 15.500000 0.500000 0.500000
-      vertex 0.500000 0.500000 0.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 0.500000 9.500000 0.500000
-      vertex 15.500000 9.500000 0.500000
-      vertex 15.500000 0.500000 0.500000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 0.500000 0.500000
-      vertex 0.500000 9.500000 25.500000
-      vertex 0.500000 9.500000 0.500000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 0.500000 0.500000
-      vertex 0.500000 0.500000 25.500000
-      vertex 0.500000 9.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 10.500000 9.500000 25.500000
-      vertex 0.500000 9.500000 0.500000
-      vertex 0.500000 9.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 10.500000 9.500000 25.500000
-      vertex 15.500000 9.500000 0.500000
-      vertex 0.500000 9.500000 0.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 15.500000 9.500000 25.500000
-      vertex 15.500000 9.500000 0.500000
-      vertex 10.500000 9.500000 25.500000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 15.500000 9.500000 25.500000
-      vertex 15.500000 0.500000 0.500000
-      vertex 15.500000 9.500000 0.500000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 15.500000 0.500000 25.500000
-      vertex 15.500000 0.500000 0.500000
-      vertex 15.500000 9.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 0.500000 0.500000 0.500000
-      vertex 10.500000 0.500000 25.500000
-      vertex 0.500000 0.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 15.500000 0.500000 0.500000
-      vertex 10.500000 0.500000 25.500000
-      vertex 0.500000 0.500000 0.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 15.500000 0.500000 0.500000
-      vertex 15.500000 0.500000 25.500000
-      vertex 10.500000 0.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -24.500000 0.500000 25.500000
-      vertex 0.500000 9.500000 25.500000
-      vertex 0.500000 0.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -24.500000 9.500000 25.500000
-      vertex 0.500000 9.500000 25.500000
-      vertex -24.500000 0.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 15.500000 9.500000 25.500000
-      vertex 10.500000 9.500000 40.500000
-      vertex 15.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 15.500000 9.500000 25.500000
-      vertex 10.500000 9.500000 25.500000
-      vertex 10.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.500000 9.500000 25.500000
-      vertex 0.500000 9.500000 40.500000
-      vertex 10.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 10.500000 9.500000 25.500000
-      vertex 0.500000 9.500000 25.500000
-      vertex 10.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 15.500000 0.500000 25.500000
-      vertex 180.500000 9.500000 25.500000
-      vertex 180.500000 0.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 15.500000 9.500000 25.500000
-      vertex 180.500000 9.500000 25.500000
-      vertex 15.500000 0.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 10.500000 0.500000 40.500000
-      vertex 15.500000 0.500000 25.500000
-      vertex 15.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 10.500000 0.500000 25.500000
-      vertex 15.500000 0.500000 25.500000
-      vertex 10.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 0.500000 0.500000 40.500000
-      vertex 0.500000 0.500000 25.500000
-      vertex 10.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 0.500000 0.500000 25.500000
-      vertex 10.500000 0.500000 25.500000
-      vertex 10.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.500000 9.500000 40.500000
-      vertex -24.500000 9.500000 25.500000
-      vertex -24.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.500000 9.500000 25.500000
-      vertex -24.500000 9.500000 25.500000
-      vertex 0.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -24.500000 0.500000 25.500000
-      vertex 0.500000 0.500000 40.500000
-      vertex -24.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -24.500000 0.500000 25.500000
-      vertex 0.500000 0.500000 25.500000
-      vertex 0.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -24.500000 0.500000 25.500000
-      vertex -24.500000 0.500000 40.500000
-      vertex -24.500000 9.500000 25.500000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -24.500000 0.500000 40.500000
-      vertex -24.500000 9.500000 40.500000
-      vertex -24.500000 9.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 180.500000 9.500000 40.500000
-      vertex 15.500000 9.500000 25.500000
-      vertex 15.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 180.500000 9.500000 25.500000
-      vertex 15.500000 9.500000 25.500000
-      vertex 180.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.500000 9.500000 65.500000
-      vertex 10.500000 9.500000 40.500000
-      vertex 0.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 15.500000 9.500000 65.500000
-      vertex 15.500000 9.500000 40.500000
-      vertex 10.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 15.500000 9.500000 65.500000
-      vertex 10.500000 9.500000 40.500000
-      vertex 0.500000 9.500000 65.500000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.500000 0.500000 40.500000
-      vertex 180.500000 0.500000 25.500000
-      vertex 180.500000 9.500000 25.500000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.500000 9.500000 40.500000
-      vertex 180.500000 0.500000 40.500000
-      vertex 180.500000 9.500000 25.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 15.500000 0.500000 25.500000
-      vertex 180.500000 0.500000 40.500000
-      vertex 15.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 15.500000 0.500000 25.500000
-      vertex 180.500000 0.500000 25.500000
-      vertex 180.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 10.500000 0.500000 40.500000
-      vertex 0.500000 0.500000 65.500000
-      vertex 0.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 15.500000 0.500000 40.500000
-      vertex 15.500000 0.500000 65.500000
-      vertex 10.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 10.500000 0.500000 40.500000
-      vertex 15.500000 0.500000 65.500000
-      vertex 0.500000 0.500000 65.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.500000 9.500000 40.500000
-      vertex -24.500000 0.500000 40.500000
-      vertex 0.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.500000 9.500000 40.500000
-      vertex -24.500000 9.500000 40.500000
-      vertex -24.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 180.500000 9.500000 40.500000
-      vertex 15.500000 0.500000 40.500000
-      vertex 180.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 180.500000 9.500000 40.500000
-      vertex 15.500000 9.500000 40.500000
-      vertex 15.500000 0.500000 40.500000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 15.500000 0.500000 65.500000
-      vertex 15.500000 9.500000 40.500000
-      vertex 15.500000 9.500000 65.500000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 15.500000 0.500000 65.500000
-      vertex 15.500000 0.500000 40.500000
-      vertex 15.500000 9.500000 40.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 15.500000 0.500000 65.500000
-      vertex 0.500000 9.500000 65.500000
-      vertex 0.500000 0.500000 65.500000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 15.500000 9.500000 65.500000
-      vertex 0.500000 9.500000 65.500000
-      vertex 15.500000 0.500000 65.500000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 9.500000 40.500000
-      vertex 0.500000 0.500000 65.500000
-      vertex 0.500000 9.500000 65.500000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.500000 0.500000 40.500000
-      vertex 0.500000 0.500000 65.500000
-      vertex 0.500000 9.500000 40.500000
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.stl b/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.stl
deleted file mode 100644
index 012423f0625912bb76dcae9c5040a1dcad1d2bda..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSL.ast b/apps/cpu/Multiphase/backup/FlowFocusingSL.ast
deleted file mode 100644
index 0ee1706e4e8935e56b2b2e07f82cd308448016f8..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/FlowFocusingSL.ast
+++ /dev/null
@@ -1,3082 +0,0 @@
-solid Mesh
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 10.036858 -6.895265 -29.000000
-      vertex 8.481877 10.381978 -29.000000
-      vertex 12.234818 5.216498 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.234818 5.216498 -29.000000
-      vertex 8.481877 10.381978 -29.000000
-      vertex 11.301386 7.154791 -29.000000
-    endloop
-  endfacet
-  facet normal -0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 6.686424 11.567146 -29.000000
-      vertex 8.481877 10.381978 -29.000000
-      vertex 4.708204 12.412678 -29.000000
-    endloop
-  endfacet
-  facet normal -0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 4.708204 12.412678 -29.000000
-      vertex 8.481877 10.381978 -29.000000
-      vertex 2.610799 12.891397 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.951692 -0.075672 -29.000000
-      vertex 8.481877 10.381978 -29.000000
-      vertex -9.811626 -4.206605 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -8.708204 -6.053423 -29.000000
-      vertex -3.716300 -10.034333 -29.000000
-      vertex -7.292752 -7.673538 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -9.811626 6.206605 -29.000000
-      vertex 8.481877 10.381978 -29.000000
-      vertex -10.951692 -0.075672 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -7.292752 -7.673538 -29.000000
-      vertex -3.716300 -10.034333 -29.000000
-      vertex -5.610764 -9.014879 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -9.811626 -4.206605 -29.000000
-      vertex 8.481877 10.381978 -29.000000
-      vertex 10.036858 -6.895265 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 2.610799 12.891397 -29.000000
-      vertex 8.481877 10.381978 -29.000000
-      vertex -9.811626 6.206605 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 8.481877 10.381978 -29.000000
-      vertex 10.036858 8.895265 -29.000000
-      vertex 11.301386 7.154791 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.567554 -2.192442 -29.000000
-      vertex -10.951692 -0.075672 -29.000000
-      vertex -9.811626 -4.206605 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -3.716300 -10.034333 -29.000000
-      vertex 0.461622 -10.987917 -29.000000
-      vertex -1.670251 -10.699135 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -8.708204 -6.053423 -29.000000
-      vertex 0.461622 -10.987917 -29.000000
-      vertex -3.716300 -10.034333 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 0.461622 -10.987917 -29.000000
-      vertex 4.708204 -10.412678 -29.000000
-      vertex 2.610799 -10.891397 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -10.567554 4.192442 -29.000000
-      vertex -9.811626 6.206605 -29.000000
-      vertex -10.951692 2.075672 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.951692 2.075672 -29.000000
-      vertex -9.811626 6.206605 -29.000000
-      vertex -10.951692 -0.075672 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -8.708204 8.053423 -29.000000
-      vertex -7.292752 9.673538 -29.000000
-      vertex -9.811626 6.206605 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -9.811626 -4.206605 -29.000000
-      vertex 10.036858 -6.895265 -29.000000
-      vertex -8.708204 -6.053423 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 4.708204 -10.412678 -29.000000
-      vertex 10.036858 -6.895265 -29.000000
-      vertex 6.686424 -9.567146 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 6.686424 -9.567146 -29.000000
-      vertex 10.036858 -6.895265 -29.000000
-      vertex 8.481877 -8.381978 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -8.708204 -6.053423 -29.000000
-      vertex 10.036858 -6.895265 -29.000000
-      vertex 0.461622 -10.987917 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 0.461622 -10.987917 -29.000000
-      vertex 10.036858 -6.895265 -29.000000
-      vertex 4.708204 -10.412678 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 10.036858 -6.895265 -29.000000
-      vertex 12.234818 -3.216498 -29.000000
-      vertex 11.301386 -5.154791 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -1.670251 12.699135 -29.000000
-      vertex 0.461622 12.987917 -29.000000
-      vertex -3.716300 12.034333 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -3.716300 12.034333 -29.000000
-      vertex 0.461622 12.987917 -29.000000
-      vertex -5.610764 11.014879 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -5.610764 11.014879 -29.000000
-      vertex 2.610799 12.891397 -29.000000
-      vertex -7.292752 9.673538 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -7.292752 9.673538 -29.000000
-      vertex 2.610799 12.891397 -29.000000
-      vertex -9.811626 6.206605 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 0.461622 12.987917 -29.000000
-      vertex 2.610799 12.891397 -29.000000
-      vertex -5.610764 11.014879 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.807155 -1.142683 -29.000000
-      vertex 12.807155 3.142683 -29.000000
-      vertex 13.000000 1.000000 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.234818 -3.216498 -29.000000
-      vertex 12.234818 5.216498 -29.000000
-      vertex 12.807155 -1.142683 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 10.036858 -6.895265 -29.000000
-      vertex 12.234818 5.216498 -29.000000
-      vertex 12.234818 -3.216498 -29.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.807155 -1.142683 -29.000000
-      vertex 12.234818 5.216498 -29.000000
-      vertex 12.807155 3.142683 -29.000000
-    endloop
-  endfacet
-  facet normal 0.995974 0.089639 -0.000783
-    outer loop
-      vertex 12.906315 2.496555 23.141226
-      vertex 13.000000 1.000000 -29.000000
-      vertex 12.807155 3.142683 -29.000000
-    endloop
-  endfacet
-  facet normal 0.998046 0.062478 0.000000
-    outer loop
-      vertex 12.906315 2.496555 23.141226
-      vertex 13.000000 1.000000 23.000000
-      vertex 13.000000 1.000000 -29.000000
-    endloop
-  endfacet
-  facet normal 0.998997 0.044772 0.000000
-    outer loop
-      vertex 13.000000 1.000000 91.000000
-      vertex 13.000000 1.000000 39.000000
-      vertex 12.951891 2.073451 38.927654
-    endloop
-  endfacet
-  facet normal 0.984343 0.176264 0.000312
-    outer loop
-      vertex 12.685336 3.730003 23.480221
-      vertex 12.906315 2.496555 23.141226
-      vertex 12.807155 3.142683 -29.000000
-    endloop
-  endfacet
-  facet normal 0.963963 0.266037 -0.000740
-    outer loop
-      vertex 12.234818 5.216498 -29.000000
-      vertex 12.685336 3.730003 23.480221
-      vertex 12.807155 3.142683 -29.000000
-    endloop
-  endfacet
-  facet normal 0.962801 0.270210 -0.000612
-    outer loop
-      vertex 12.401385 4.742783 23.929527
-      vertex 12.685336 3.730003 23.480221
-      vertex 12.234818 5.216498 -29.000000
-    endloop
-  endfacet
-  facet normal 0.995974 0.089639 0.000928
-    outer loop
-      vertex 12.807155 3.142683 91.000000
-      vertex 13.000000 1.000000 91.000000
-      vertex 12.951891 2.073451 38.927654
-    endloop
-  endfacet
-  facet normal 0.973891 0.227018 -0.000135
-    outer loop
-      vertex 12.807155 3.142683 91.000000
-      vertex 12.829484 3.015767 38.741879
-      vertex 12.501177 4.423876 38.230289
-    endloop
-  endfacet
-  facet normal 0.991665 0.128839 0.000111
-    outer loop
-      vertex 12.807155 3.142683 91.000000
-      vertex 12.951891 2.073451 38.927654
-      vertex 12.829484 3.015767 38.741879
-    endloop
-  endfacet
-  facet normal 0.933574 0.358383 0.000270
-    outer loop
-      vertex 11.975570 5.851481 24.638937
-      vertex 12.401385 4.742783 23.929527
-      vertex 12.234818 5.216498 -29.000000
-    endloop
-  endfacet
-  facet normal 0.900969 0.433883 -0.000782
-    outer loop
-      vertex 11.301386 7.154791 -29.000000
-      vertex 11.975570 5.851481 24.638937
-      vertex 12.234818 5.216498 -29.000000
-    endloop
-  endfacet
-  facet normal 0.963963 0.266037 0.000870
-    outer loop
-      vertex 12.234818 5.216498 91.000000
-      vertex 12.807155 3.142683 91.000000
-      vertex 12.501177 4.423876 38.230289
-    endloop
-  endfacet
-  facet normal 0.938259 0.345932 -0.000460
-    outer loop
-      vertex 12.234818 5.216498 91.000000
-      vertex 12.501177 4.423876 38.230289
-      vertex 11.968547 5.867337 37.348938
-    endloop
-  endfacet
-  facet normal 0.894623 0.446821 -0.000388
-    outer loop
-      vertex 11.475355 6.853796 25.547195
-      vertex 11.975570 5.851481 24.638937
-      vertex 11.301386 7.154791 -29.000000
-    endloop
-  endfacet
-  facet normal 0.853458 0.521161 0.000154
-    outer loop
-      vertex 10.990158 7.648063 26.549915
-      vertex 11.475355 6.853796 25.547195
-      vertex 11.301386 7.154791 -29.000000
-    endloop
-  endfacet
-  facet normal 0.809017 0.587785 -0.000803
-    outer loop
-      vertex 10.553408 8.261708 27.643276
-      vertex 11.301386 7.154791 -29.000000
-      vertex 10.036858 8.895265 -29.000000
-    endloop
-  endfacet
-  facet normal 0.814217 0.580561 -0.000593
-    outer loop
-      vertex 10.553408 8.261708 27.643276
-      vertex 10.990158 7.648063 26.549915
-      vertex 11.301386 7.154791 -29.000000
-    endloop
-  endfacet
-  facet normal 0.845496 0.533982 -0.000125
-    outer loop
-      vertex 11.301386 7.154791 91.000000
-      vertex 11.405221 6.977572 36.316826
-      vertex 10.866963 7.829570 35.166172
-    endloop
-  endfacet
-  facet normal 0.891689 0.452648 0.000226
-    outer loop
-      vertex 11.301386 7.154791 91.000000
-      vertex 11.968547 5.867337 37.348938
-      vertex 11.405221 6.977572 36.316826
-    endloop
-  endfacet
-  facet normal 0.900969 0.433883 0.000792
-    outer loop
-      vertex 11.301386 7.154791 91.000000
-      vertex 12.234818 5.216498 91.000000
-      vertex 11.968547 5.867337 37.348938
-    endloop
-  endfacet
-  facet normal 0.781554 0.623838 -0.000150
-    outer loop
-      vertex 10.203491 8.700374 28.831072
-      vertex 10.553408 8.261708 27.643276
-      vertex 10.036858 8.895265 -29.000000
-    endloop
-  endfacet
-  facet normal 0.759095 0.650980 0.000007
-    outer loop
-      vertex 10.013048 8.922435 29.888680
-      vertex 10.203491 8.700374 28.831072
-      vertex 10.036858 8.895265 -29.000000
-    endloop
-  endfacet
-  facet normal 0.748201 0.663472 -0.000004
-    outer loop
-      vertex 9.944272 9.000000 31.000000
-      vertex 10.013048 8.922435 29.888680
-      vertex 10.036858 8.895265 -29.000000
-    endloop
-  endfacet
-  facet normal 0.691063 0.722795 -0.000195
-    outer loop
-      vertex 8.481877 10.381978 -29.000000
-      vertex 9.944272 9.000000 31.000000
-      vertex 10.036858 8.895265 -29.000000
-    endloop
-  endfacet
-  facet normal 0.809017 0.587785 0.000809
-    outer loop
-      vertex 10.036858 8.895265 91.000000
-      vertex 11.301386 7.154791 91.000000
-      vertex 10.866963 7.829570 35.166172
-    endloop
-  endfacet
-  facet normal 0.750661 0.660687 -0.000005
-    outer loop
-      vertex 10.036858 8.895265 91.000000
-      vertex 10.070409 8.856697 32.507420
-      vertex 9.944272 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal 0.769853 0.638221 0.000021
-    outer loop
-      vertex 10.036858 8.895265 91.000000
-      vertex 10.402563 8.455991 33.899689
-      vertex 10.070409 8.856697 32.507420
-    endloop
-  endfacet
-  facet normal 0.802784 0.596269 0.000554
-    outer loop
-      vertex 10.036858 8.895265 91.000000
-      vertex 10.866963 7.829570 35.166172
-      vertex 10.402563 8.455991 33.899689
-    endloop
-  endfacet
-  facet normal 0.691063 0.722795 0.000195
-    outer loop
-      vertex 8.481877 10.381978 91.000000
-      vertex 10.036858 8.895265 91.000000
-      vertex 9.944272 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal 0.686841 0.726808 0.000000
-    outer loop
-      vertex 8.481877 10.381978 91.000000
-      vertex 9.944272 9.000000 31.000000
-      vertex 8.481877 10.381978 -29.000000
-    endloop
-  endfacet
-  facet normal 0.550897 0.834573 0.000000
-    outer loop
-      vertex 8.481877 10.381978 91.000000
-      vertex 8.481877 10.381978 -29.000000
-      vertex 6.686424 11.567146 -29.000000
-    endloop
-  endfacet
-  facet normal 0.550897 0.834573 0.000000
-    outer loop
-      vertex 6.686424 11.567146 91.000000
-      vertex 8.481877 10.381978 91.000000
-      vertex 6.686424 11.567146 -29.000000
-    endloop
-  endfacet
-  facet normal 0.393025 0.919528 0.000000
-    outer loop
-      vertex 6.686424 11.567146 91.000000
-      vertex 6.686424 11.567146 -29.000000
-      vertex 4.708204 12.412678 -29.000000
-    endloop
-  endfacet
-  facet normal 0.393025 0.919528 0.000000
-    outer loop
-      vertex 4.708204 12.412678 91.000000
-      vertex 6.686424 11.567146 91.000000
-      vertex 4.708204 12.412678 -29.000000
-    endloop
-  endfacet
-  facet normal 0.222521 0.974928 0.000000
-    outer loop
-      vertex 4.708204 12.412678 91.000000
-      vertex 4.708204 12.412678 -29.000000
-      vertex 2.610799 12.891397 -29.000000
-    endloop
-  endfacet
-  facet normal 0.222521 0.974928 0.000000
-    outer loop
-      vertex 2.610799 12.891397 91.000000
-      vertex 4.708204 12.412678 91.000000
-      vertex 2.610799 12.891397 -29.000000
-    endloop
-  endfacet
-  facet normal 0.044865 0.998993 0.000000
-    outer loop
-      vertex 2.610799 12.891397 91.000000
-      vertex 2.610799 12.891397 -29.000000
-      vertex 0.461622 12.987917 -29.000000
-    endloop
-  endfacet
-  facet normal -0.134233 0.990950 0.000000
-    outer loop
-      vertex 0.461622 12.987917 91.000000
-      vertex 0.461622 12.987917 -29.000000
-      vertex -1.670251 12.699135 -29.000000
-    endloop
-  endfacet
-  facet normal 0.044865 0.998993 0.000000
-    outer loop
-      vertex 0.461622 12.987917 91.000000
-      vertex 2.610799 12.891397 91.000000
-      vertex 0.461622 12.987917 -29.000000
-    endloop
-  endfacet
-  facet normal -0.309017 0.951057 0.000000
-    outer loop
-      vertex -1.670251 12.699135 91.000000
-      vertex -1.670251 12.699135 -29.000000
-      vertex -3.716300 12.034333 -29.000000
-    endloop
-  endfacet
-  facet normal -0.134233 0.990950 0.000000
-    outer loop
-      vertex -1.670251 12.699135 91.000000
-      vertex 0.461622 12.987917 91.000000
-      vertex -1.670251 12.699135 -29.000000
-    endloop
-  endfacet
-  facet normal -0.309017 0.951057 0.000000
-    outer loop
-      vertex -3.716300 12.034333 91.000000
-      vertex -1.670251 12.699135 91.000000
-      vertex -3.716300 12.034333 -29.000000
-    endloop
-  endfacet
-  facet normal -0.473869 0.880596 0.000041
-    outer loop
-      vertex -5.633250 11.000000 31.000000
-      vertex -3.716300 12.034333 -29.000000
-      vertex -5.610764 11.014879 -29.000000
-    endloop
-  endfacet
-  facet normal -0.474858 0.880063 0.000000
-    outer loop
-      vertex -5.633250 11.000000 31.000000
-      vertex -3.716300 12.034333 91.000000
-      vertex -3.716300 12.034333 -29.000000
-    endloop
-  endfacet
-  facet normal -0.557098 0.830446 -0.000003
-    outer loop
-      vertex -5.737499 10.930061 29.819370
-      vertex -5.633250 11.000000 31.000000
-      vertex -5.610764 11.014879 -29.000000
-    endloop
-  endfacet
-  facet normal -0.572844 0.819664 -0.000052
-    outer loop
-      vertex -6.012732 10.737638 28.724388
-      vertex -5.737499 10.930061 29.819370
-      vertex -5.610764 11.014879 -29.000000
-    endloop
-  endfacet
-  facet normal -0.623490 0.781831 -0.000854
-    outer loop
-      vertex -6.470624 10.390942 27.563400
-      vertex -5.610764 11.014879 -29.000000
-      vertex -7.292752 9.673538 -29.000000
-    endloop
-  endfacet
-  facet normal -0.603052 0.797702 -0.000368
-    outer loop
-      vertex -6.470624 10.390942 27.563400
-      vertex -6.012732 10.737638 28.724388
-      vertex -5.610764 11.014879 -29.000000
-    endloop
-  endfacet
-  facet normal -0.557937 0.829883 0.000003
-    outer loop
-      vertex -5.610764 11.014879 91.000000
-      vertex -5.633250 11.000000 31.000000
-      vertex -5.757563 10.916418 32.290215
-    endloop
-  endfacet
-  facet normal -0.576477 0.817113 0.000071
-    outer loop
-      vertex -5.610764 11.014879 91.000000
-      vertex -5.757563 10.916418 32.290215
-      vertex -6.080200 10.688693 33.475727
-    endloop
-  endfacet
-  facet normal -0.608142 0.793828 0.000462
-    outer loop
-      vertex -5.610764 11.014879 91.000000
-      vertex -6.080200 10.688693 33.475727
-      vertex -6.528029 10.344987 34.559666
-    endloop
-  endfacet
-  facet normal -0.473869 0.880596 -0.000041
-    outer loop
-      vertex -5.610764 11.014879 91.000000
-      vertex -3.716300 12.034333 91.000000
-      vertex -5.633250 11.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.659510 0.751695 0.000052
-    outer loop
-      vertex -7.338006 9.630043 25.948034
-      vertex -6.470624 10.390942 27.563400
-      vertex -7.292752 9.673538 -29.000000
-    endloop
-  endfacet
-  facet normal -0.753071 0.657939 -0.000691
-    outer loop
-      vertex -8.372674 8.493528 24.378292
-      vertex -7.292752 9.673538 -29.000000
-      vertex -8.708204 8.053423 -29.000000
-    endloop
-  endfacet
-  facet normal -0.739411 0.673255 -0.000076
-    outer loop
-      vertex -8.372674 8.493528 24.378292
-      vertex -7.338006 9.630043 25.948034
-      vertex -7.292752 9.673538 -29.000000
-    endloop
-  endfacet
-  facet normal -0.657479 0.753473 0.000055
-    outer loop
-      vertex -7.292752 9.673538 91.000000
-      vertex -6.528029 10.344987 34.559666
-      vertex -7.240622 9.723082 35.889565
-    endloop
-  endfacet
-  facet normal -0.623490 0.781831 0.000853
-    outer loop
-      vertex -7.292752 9.673538 91.000000
-      vertex -5.610764 11.014879 91.000000
-      vertex -6.528029 10.344987 34.559666
-    endloop
-  endfacet
-  facet normal -0.732440 0.680831 -0.000081
-    outer loop
-      vertex -8.299619 8.584002 37.517891
-      vertex -7.292752 9.673538 91.000000
-      vertex -7.240622 9.723082 35.889565
-    endloop
-  endfacet
-  facet normal -0.858449 0.512899 -0.000927
-    outer loop
-      vertex -9.295414 7.164775 23.126276
-      vertex -8.708204 8.053423 -29.000000
-      vertex -9.811626 6.206605 -29.000000
-    endloop
-  endfacet
-  facet normal -0.821576 0.570099 0.000464
-    outer loop
-      vertex -9.295414 7.164775 23.126276
-      vertex -8.372674 8.493528 24.378292
-      vertex -8.708204 8.053423 -29.000000
-    endloop
-  endfacet
-  facet normal -0.816755 0.576984 -0.000516
-    outer loop
-      vertex -8.708204 8.053423 91.000000
-      vertex -8.299619 8.584002 37.517891
-      vertex -9.250660 7.238907 38.815117
-    endloop
-  endfacet
-  facet normal -0.753071 0.657939 0.000774
-    outer loop
-      vertex -8.708204 8.053423 91.000000
-      vertex -7.292752 9.673538 91.000000
-      vertex -8.299619 8.584002 37.517891
-    endloop
-  endfacet
-  facet normal -0.888008 0.459827 0.000342
-    outer loop
-      vertex -9.974246 5.854475 22.257341
-      vertex -9.295414 7.164775 23.126276
-      vertex -9.811626 6.206605 -29.000000
-    endloop
-  endfacet
-  facet normal -0.936235 0.351375 -0.000665
-    outer loop
-      vertex -10.429211 4.656930 21.692644
-      vertex -9.811626 6.206605 -29.000000
-      vertex -10.567554 4.192442 -29.000000
-    endloop
-  endfacet
-  facet normal -0.934728 0.355364 -0.000524
-    outer loop
-      vertex -10.429211 4.656930 21.692644
-      vertex -9.974246 5.854475 22.257341
-      vertex -9.811626 6.206605 -29.000000
-    endloop
-  endfacet
-  facet normal -0.883513 0.468407 -0.000232
-    outer loop
-      vertex -9.811626 6.206605 91.000000
-      vertex -9.250660 7.238907 38.815117
-      vertex -9.915038 5.986175 39.668221
-    endloop
-  endfacet
-  facet normal -0.858448 0.512899 0.000918
-    outer loop
-      vertex -9.811626 6.206605 91.000000
-      vertex -8.708204 8.053423 91.000000
-      vertex -9.250660 7.238907 38.815117
-    endloop
-  endfacet
-  facet normal -0.983929 0.178557 -0.000960
-    outer loop
-      vertex -10.800443 3.179347 21.240366
-      vertex -10.567554 4.192442 -29.000000
-      vertex -10.951692 2.075672 -29.000000
-    endloop
-  endfacet
-  facet normal -0.969888 0.243550 0.000415
-    outer loop
-      vertex -10.800443 3.179347 21.240366
-      vertex -10.429211 4.656930 21.692644
-      vertex -10.567554 4.192442 -29.000000
-    endloop
-  endfacet
-  facet normal -0.937600 0.347714 0.000232
-    outer loop
-      vertex -10.567554 4.192442 91.000000
-      vertex -9.915038 5.986175 39.668221
-      vertex -10.527491 4.334210 40.427780
-    endloop
-  endfacet
-  facet normal -0.936235 0.351375 0.000377
-    outer loop
-      vertex -10.567554 4.192442 91.000000
-      vertex -9.811626 6.206605 91.000000
-      vertex -9.915038 5.986175 39.668221
-    endloop
-  endfacet
-  facet normal -0.975706 0.219084 -0.000159
-    outer loop
-      vertex -10.846192 2.915130 40.814899
-      vertex -10.567554 4.192442 91.000000
-      vertex -10.527491 4.334210 40.427780
-    endloop
-  endfacet
-  facet normal -0.993453 0.114243 0.000481
-    outer loop
-      vertex -10.987032 1.557722 21.015564
-      vertex -10.800443 3.179347 21.240366
-      vertex -10.951692 2.075672 -29.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000707
-    outer loop
-      vertex -10.951692 -0.075672 -29.000000
-      vertex -10.987032 1.557722 21.015564
-      vertex -10.951692 2.075672 -29.000000
-    endloop
-  endfacet
-  facet normal -0.996104 0.088185 -0.000619
-    outer loop
-      vertex -10.951692 2.075672 91.000000
-      vertex -10.846192 2.915130 40.814899
-      vertex -10.998376 1.197410 40.998051
-    endloop
-  endfacet
-  facet normal -0.983929 0.178557 0.000918
-    outer loop
-      vertex -10.951692 2.075672 91.000000
-      vertex -10.567554 4.192442 91.000000
-      vertex -10.846192 2.915130 40.814899
-    endloop
-  endfacet
-  facet normal -0.999767 -0.021564 -0.000002
-    outer loop
-      vertex -10.951837 -0.074060 21.057848
-      vertex -10.987032 1.557722 21.015564
-      vertex -10.951692 -0.075672 -29.000000
-    endloop
-  endfacet
-  facet normal -0.987838 -0.155489 0.000002
-    outer loop
-      vertex -10.703868 -1.649430 21.357359
-      vertex -10.951837 -0.074060 21.057848
-      vertex -10.951692 -0.075672 -29.000000
-    endloop
-  endfacet
-  facet normal -0.983929 -0.178557 -0.000738
-    outer loop
-      vertex -10.703868 -1.649430 21.357359
-      vertex -10.951692 -0.075672 -29.000000
-      vertex -10.567554 -2.192442 -29.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000934
-    outer loop
-      vertex -10.951692 -0.075672 91.000000
-      vertex -10.951692 2.075672 91.000000
-      vertex -10.998376 1.197410 40.998051
-    endloop
-  endfacet
-  facet normal -0.998486 -0.055007 -0.000468
-    outer loop
-      vertex -10.951692 -0.075672 91.000000
-      vertex -10.998376 1.197410 40.998051
-      vertex -10.903988 -0.514951 40.884579
-    endloop
-  endfacet
-  facet normal -0.984504 -0.175362 0.000600
-    outer loop
-      vertex -10.695628 -1.685570 40.632637
-      vertex -10.951692 -0.075672 91.000000
-      vertex -10.903988 -0.514951 40.884579
-    endloop
-  endfacet
-  facet normal -0.958646 -0.284602 0.000474
-    outer loop
-      vertex -10.252209 -3.169867 21.910873
-      vertex -10.703868 -1.649430 21.357359
-      vertex -10.567554 -2.192442 -29.000000
-    endloop
-  endfacet
-  facet normal -0.936234 -0.351375 -0.000947
-    outer loop
-      vertex -10.252209 -3.169867 21.910873
-      vertex -10.567554 -2.192442 -29.000000
-      vertex -9.811626 -4.206605 -29.000000
-    endloop
-  endfacet
-  facet normal -0.983929 -0.178557 0.000705
-    outer loop
-      vertex -10.567554 -2.192442 91.000000
-      vertex -10.951692 -0.075672 91.000000
-      vertex -10.695628 -1.685570 40.632637
-    endloop
-  endfacet
-  facet normal -0.961368 -0.275265 -0.000326
-    outer loop
-      vertex -10.567554 -2.192442 91.000000
-      vertex -10.695628 -1.685570 40.632637
-      vertex -10.343766 -2.913946 40.202229
-    endloop
-  endfacet
-  facet normal -0.913616 -0.406579 0.000373
-    outer loop
-      vertex -9.627810 -4.572220 22.696365
-      vertex -10.252209 -3.169867 21.910873
-      vertex -9.811626 -4.206605 -29.000000
-    endloop
-  endfacet
-  facet normal -0.858449 -0.512899 -0.000575
-    outer loop
-      vertex -8.708204 -6.053423 -29.000000
-      vertex -9.627810 -4.572220 22.696365
-      vertex -9.811626 -4.206605 -29.000000
-    endloop
-  endfacet
-  facet normal -0.927206 -0.374552 0.000182
-    outer loop
-      vertex -9.811626 -4.206605 91.000000
-      vertex -10.343766 -2.913946 40.202229
-      vertex -9.880333 -4.061458 39.624477
-    endloop
-  endfacet
-  facet normal -0.879853 -0.475247 -0.000166
-    outer loop
-      vertex -9.811626 -4.206605 91.000000
-      vertex -9.880333 -4.061458 39.624477
-      vertex -9.197070 -5.326117 38.744690
-    endloop
-  endfacet
-  facet normal -0.936234 -0.351375 0.000866
-    outer loop
-      vertex -9.811626 -4.206605 91.000000
-      vertex -10.567554 -2.192442 91.000000
-      vertex -10.343766 -2.913946 40.202229
-    endloop
-  endfacet
-  facet normal -0.753071 -0.657939 -0.000758
-    outer loop
-      vertex -7.758466 -7.203003 25.280670
-      vertex -8.708204 -6.053423 -29.000000
-      vertex -7.292752 -7.673538 -29.000000
-    endloop
-  endfacet
-  facet normal -0.858449 -0.512899 0.000892
-    outer loop
-      vertex -8.708204 -6.053423 91.000000
-      vertex -9.811626 -4.206605 91.000000
-      vertex -9.197070 -5.326117 38.744690
-    endloop
-  endfacet
-  facet normal -0.696717 -0.717346 0.000241
-    outer loop
-      vertex -6.938873 -7.998572 26.638153
-      vertex -7.758466 -7.203003 25.280670
-      vertex -7.292752 -7.673538 -29.000000
-    endloop
-  endfacet
-  facet normal -0.623490 -0.781831 -0.000809
-    outer loop
-      vertex -6.298790 -8.525107 27.954950
-      vertex -7.292752 -7.673538 -29.000000
-      vertex -5.610764 -9.014879 -29.000000
-    endloop
-  endfacet
-  facet normal -0.634695 -0.772762 -0.000478
-    outer loop
-      vertex -6.298790 -8.525107 27.954950
-      vertex -6.938873 -7.998572 26.638153
-      vertex -7.292752 -7.673538 -29.000000
-    endloop
-  endfacet
-  facet normal -0.650332 -0.759650 0.000094
-    outer loop
-      vertex -7.292752 -7.673538 91.000000
-      vertex -7.218597 -7.743835 35.852356
-      vertex -6.375163 -8.466096 34.223824
-    endloop
-  endfacet
-  facet normal -0.753071 -0.657939 0.000812
-    outer loop
-      vertex -7.292752 -7.673538 91.000000
-      vertex -8.708204 -6.053423 91.000000
-      vertex -8.256754 -6.636262 37.456585
-    endloop
-  endfacet
-  facet normal -0.592141 -0.805834 -0.000224
-    outer loop
-      vertex -5.919753 -8.803928 29.029472
-      vertex -6.298790 -8.525107 27.954950
-      vertex -5.610764 -9.014879 -29.000000
-    endloop
-  endfacet
-  facet normal -0.566671 -0.823944 -0.000022
-    outer loop
-      vertex -5.681127 -8.968076 30.201591
-      vertex -5.919753 -8.803928 29.029472
-      vertex -5.610764 -9.014879 -29.000000
-    endloop
-  endfacet
-  facet normal -0.555733 -0.831361 -0.000003
-    outer loop
-      vertex -5.659541 -8.982511 31.591177
-      vertex -5.681127 -8.968076 30.201591
-      vertex -5.610764 -9.014879 -29.000000
-    endloop
-  endfacet
-  facet normal -0.473869 -0.880596 0.000089
-    outer loop
-      vertex -3.716300 -10.034333 -29.000000
-      vertex -5.659541 -8.982511 31.591177
-      vertex -5.610764 -9.014879 -29.000000
-    endloop
-  endfacet
-  facet normal -0.596199 -0.802837 0.000267
-    outer loop
-      vertex -5.610764 -9.014879 91.000000
-      vertex -6.375163 -8.466096 34.223824
-      vertex -5.941191 -8.788762 33.044537
-    endloop
-  endfacet
-  facet normal -0.566698 -0.823926 0.000016
-    outer loop
-      vertex -5.610764 -9.014879 91.000000
-      vertex -5.941191 -8.788762 33.044537
-      vertex -5.659541 -8.982511 31.591177
-    endloop
-  endfacet
-  facet normal -0.623490 -0.781831 0.000837
-    outer loop
-      vertex -5.610764 -9.014879 91.000000
-      vertex -7.292752 -7.673538 91.000000
-      vertex -6.375163 -8.466096 34.223824
-    endloop
-  endfacet
-  facet normal -0.473869 -0.880596 -0.000091
-    outer loop
-      vertex -3.716300 -10.034333 91.000000
-      vertex -5.610764 -9.014879 91.000000
-      vertex -5.659541 -8.982511 31.591177
-    endloop
-  endfacet
-  facet normal -0.476015 -0.879437 -0.000000
-    outer loop
-      vertex -3.716300 -10.034333 91.000000
-      vertex -5.659541 -8.982511 31.591177
-      vertex -3.716300 -10.034333 -29.000000
-    endloop
-  endfacet
-  facet normal -0.309017 -0.951057 -0.000000
-    outer loop
-      vertex -1.670251 -10.699135 91.000000
-      vertex -3.716300 -10.034333 -29.000000
-      vertex -1.670251 -10.699135 -29.000000
-    endloop
-  endfacet
-  facet normal -0.309017 -0.951057 0.000000
-    outer loop
-      vertex -1.670251 -10.699135 91.000000
-      vertex -3.716300 -10.034333 91.000000
-      vertex -3.716300 -10.034333 -29.000000
-    endloop
-  endfacet
-  facet normal -0.134233 -0.990950 -0.000000
-    outer loop
-      vertex 0.461622 -10.987917 91.000000
-      vertex -1.670251 -10.699135 -29.000000
-      vertex 0.461622 -10.987917 -29.000000
-    endloop
-  endfacet
-  facet normal -0.134233 -0.990950 0.000000
-    outer loop
-      vertex 0.461622 -10.987917 91.000000
-      vertex -1.670251 -10.699135 91.000000
-      vertex -1.670251 -10.699135 -29.000000
-    endloop
-  endfacet
-  facet normal 0.044865 -0.998993 0.000000
-    outer loop
-      vertex 2.610799 -10.891397 91.000000
-      vertex 0.461622 -10.987917 -29.000000
-      vertex 2.610799 -10.891397 -29.000000
-    endloop
-  endfacet
-  facet normal 0.044865 -0.998993 0.000000
-    outer loop
-      vertex 2.610799 -10.891397 91.000000
-      vertex 0.461622 -10.987917 91.000000
-      vertex 0.461622 -10.987917 -29.000000
-    endloop
-  endfacet
-  facet normal 0.222521 -0.974928 0.000000
-    outer loop
-      vertex 4.708204 -10.412678 91.000000
-      vertex 2.610799 -10.891397 -29.000000
-      vertex 4.708204 -10.412678 -29.000000
-    endloop
-  endfacet
-  facet normal 0.222521 -0.974928 0.000000
-    outer loop
-      vertex 4.708204 -10.412678 91.000000
-      vertex 2.610799 -10.891397 91.000000
-      vertex 2.610799 -10.891397 -29.000000
-    endloop
-  endfacet
-  facet normal 0.393025 -0.919528 0.000000
-    outer loop
-      vertex 6.686424 -9.567146 91.000000
-      vertex 4.708204 -10.412678 -29.000000
-      vertex 6.686424 -9.567146 -29.000000
-    endloop
-  endfacet
-  facet normal 0.393025 -0.919528 0.000000
-    outer loop
-      vertex 6.686424 -9.567146 91.000000
-      vertex 4.708204 -10.412678 91.000000
-      vertex 4.708204 -10.412678 -29.000000
-    endloop
-  endfacet
-  facet normal 0.550897 -0.834573 0.000000
-    outer loop
-      vertex 8.481877 -8.381978 91.000000
-      vertex 6.686424 -9.567146 -29.000000
-      vertex 8.481877 -8.381978 -29.000000
-    endloop
-  endfacet
-  facet normal 0.550897 -0.834573 0.000000
-    outer loop
-      vertex 8.481877 -8.381978 91.000000
-      vertex 6.686424 -9.567146 91.000000
-      vertex 6.686424 -9.567146 -29.000000
-    endloop
-  endfacet
-  facet normal 0.687426 -0.726254 0.000000
-    outer loop
-      vertex 9.957150 -6.985579 30.519876
-      vertex 8.481877 -8.381978 91.000000
-      vertex 8.481877 -8.381978 -29.000000
-    endloop
-  endfacet
-  facet normal 0.691063 -0.722795 -0.000171
-    outer loop
-      vertex 9.957150 -6.985579 30.519876
-      vertex 8.481877 -8.381978 -29.000000
-      vertex 10.036858 -6.895265 -29.000000
-    endloop
-  endfacet
-  facet normal 0.753451 -0.657504 0.000011
-    outer loop
-      vertex 10.123698 -6.794750 29.199480
-      vertex 9.957150 -6.985579 30.519876
-      vertex 10.036858 -6.895265 -29.000000
-    endloop
-  endfacet
-  facet normal 0.773617 -0.633653 -0.000060
-    outer loop
-      vertex 10.441307 -6.406870 27.977041
-      vertex 10.123698 -6.794750 29.199480
-      vertex 10.036858 -6.895265 -29.000000
-    endloop
-  endfacet
-  facet normal 0.803962 -0.594680 -0.000609
-    outer loop
-      vertex 10.859378 -5.840517 26.851830
-      vertex 10.441307 -6.406870 27.977041
-      vertex 10.036858 -6.895265 -29.000000
-    endloop
-  endfacet
-  facet normal 0.809017 -0.587785 -0.000814
-    outer loop
-      vertex 10.859378 -5.840517 26.851830
-      vertex 10.036858 -6.895265 -29.000000
-      vertex 11.301386 -5.154791 -29.000000
-    endloop
-  endfacet
-  facet normal 0.691063 -0.722795 0.000169
-    outer loop
-      vertex 10.036858 -6.895265 91.000000
-      vertex 8.481877 -8.381978 91.000000
-      vertex 9.957150 -6.985579 30.519876
-    endloop
-  endfacet
-  facet normal 0.781554 -0.623838 0.000150
-    outer loop
-      vertex 10.036858 -6.895265 91.000000
-      vertex 10.203491 -6.700374 33.168926
-      vertex 10.553408 -6.261708 34.356724
-    endloop
-  endfacet
-  facet normal 0.758054 -0.652192 -0.000014
-    outer loop
-      vertex 10.036858 -6.895265 91.000000
-      vertex 9.987243 -6.951696 31.877798
-      vertex 10.203491 -6.700374 33.168926
-    endloop
-  endfacet
-  facet normal 0.747557 -0.664197 0.000007
-    outer loop
-      vertex 10.036858 -6.895265 91.000000
-      vertex 9.957150 -6.985579 30.519876
-      vertex 9.987243 -6.951696 31.877798
-    endloop
-  endfacet
-  facet normal 0.842075 -0.539361 0.000042
-    outer loop
-      vertex 11.336068 -5.096367 25.819815
-      vertex 10.859378 -5.840517 26.851830
-      vertex 11.301386 -5.154791 -29.000000
-    endloop
-  endfacet
-  facet normal 0.883071 -0.469240 -0.000059
-    outer loop
-      vertex 11.837208 -4.153147 24.880762
-      vertex 11.336068 -5.096367 25.819815
-      vertex 11.301386 -5.154791 -29.000000
-    endloop
-  endfacet
-  facet normal 0.900969 -0.433883 -0.000894
-    outer loop
-      vertex 11.837208 -4.153147 24.880762
-      vertex 11.301386 -5.154791 -29.000000
-      vertex 12.234818 -3.216498 -29.000000
-    endloop
-  endfacet
-  facet normal 0.853458 -0.521161 -0.000154
-    outer loop
-      vertex 11.301386 -5.154791 91.000000
-      vertex 10.990158 -5.648063 35.450085
-      vertex 11.475355 -4.853796 36.452805
-    endloop
-  endfacet
-  facet normal 0.814216 -0.580561 0.000593
-    outer loop
-      vertex 11.301386 -5.154791 91.000000
-      vertex 10.553408 -6.261708 34.356724
-      vertex 10.990158 -5.648063 35.450085
-    endloop
-  endfacet
-  facet normal 0.809017 -0.587785 0.000803
-    outer loop
-      vertex 11.301386 -5.154791 91.000000
-      vertex 10.036858 -6.895265 91.000000
-      vertex 10.553408 -6.261708 34.356724
-    endloop
-  endfacet
-  facet normal 0.894623 -0.446821 0.000388
-    outer loop
-      vertex 11.975570 -3.851482 37.361065
-      vertex 11.301386 -5.154791 91.000000
-      vertex 11.475355 -4.853796 36.452805
-    endloop
-  endfacet
-  facet normal 0.920705 -0.390260 0.000010
-    outer loop
-      vertex 12.239279 -3.204595 24.194019
-      vertex 11.837208 -4.153147 24.880762
-      vertex 12.234818 -3.216498 -29.000000
-    endloop
-  endfacet
-  facet normal 0.951731 -0.306935 -0.000011
-    outer loop
-      vertex 12.578116 -2.153921 23.647940
-      vertex 12.239279 -3.204595 24.194019
-      vertex 12.234818 -3.216498 -29.000000
-    endloop
-  endfacet
-  facet normal 0.963963 -0.266037 -0.000916
-    outer loop
-      vertex 12.578116 -2.153921 23.647940
-      vertex 12.234818 -3.216498 -29.000000
-      vertex 12.807155 -1.142683 -29.000000
-    endloop
-  endfacet
-  facet normal 0.933574 -0.358383 -0.000270
-    outer loop
-      vertex 12.234818 -3.216498 91.000000
-      vertex 11.975570 -3.851482 37.361065
-      vertex 12.401385 -2.742783 38.070473
-    endloop
-  endfacet
-  facet normal 0.900969 -0.433883 0.000782
-    outer loop
-      vertex 12.234818 -3.216498 91.000000
-      vertex 11.301386 -5.154791 91.000000
-      vertex 11.975570 -3.851482 37.361065
-    endloop
-  endfacet
-  facet normal 0.962801 -0.270210 0.000612
-    outer loop
-      vertex 12.685336 -1.730003 38.519779
-      vertex 12.234818 -3.216498 91.000000
-      vertex 12.401385 -2.742783 38.070473
-    endloop
-  endfacet
-  facet normal 0.977859 -0.209265 0.000235
-    outer loop
-      vertex 12.854565 -0.862604 23.219852
-      vertex 12.578116 -2.153921 23.647940
-      vertex 12.807155 -1.142683 -29.000000
-    endloop
-  endfacet
-  facet normal 0.992924 -0.118753 -0.000265
-    outer loop
-      vertex 12.959555 0.015601 23.060797
-      vertex 12.854565 -0.862604 23.219852
-      vertex 12.807155 -1.142683 -29.000000
-    endloop
-  endfacet
-  facet normal 0.995974 -0.089639 -0.000921
-    outer loop
-      vertex 12.959555 0.015601 23.060797
-      vertex 12.807155 -1.142683 -29.000000
-      vertex 13.000000 1.000000 -29.000000
-    endloop
-  endfacet
-  facet normal 0.984343 -0.176264 -0.000312
-    outer loop
-      vertex 12.807155 -1.142683 91.000000
-      vertex 12.685336 -1.730003 38.519779
-      vertex 12.906315 -0.496555 38.858772
-    endloop
-  endfacet
-  facet normal 0.963963 -0.266037 0.000740
-    outer loop
-      vertex 12.807155 -1.142683 91.000000
-      vertex 12.234818 -3.216498 91.000000
-      vertex 12.685336 -1.730003 38.519779
-    endloop
-  endfacet
-  facet normal 0.999157 -0.041052 0.000000
-    outer loop
-      vertex 13.000000 1.000000 23.000000
-      vertex 12.959555 0.015601 23.060797
-      vertex 13.000000 1.000000 -29.000000
-    endloop
-  endfacet
-  facet normal 0.998046 -0.062478 0.000000
-    outer loop
-      vertex 13.000000 1.000000 91.000000
-      vertex 12.906315 -0.496555 38.858772
-      vertex 13.000000 1.000000 39.000000
-    endloop
-  endfacet
-  facet normal 0.995974 -0.089639 0.000783
-    outer loop
-      vertex 13.000000 1.000000 91.000000
-      vertex 12.807155 -1.142683 91.000000
-      vertex 12.906315 -0.496555 38.858772
-    endloop
-  endfacet
-  facet normal -0.812649 -0.582753 -0.000508
-    outer loop
-      vertex -9.197070 -5.326117 38.744690
-      vertex -8.256754 -6.636262 37.456585
-      vertex -8.708204 -6.053423 91.000000
-    endloop
-  endfacet
-  facet normal -0.729680 -0.683789 -0.000110
-    outer loop
-      vertex -8.256754 -6.636262 37.456585
-      vertex -7.218597 -7.743835 35.852356
-      vertex -7.292752 -7.673538 91.000000
-    endloop
-  endfacet
-  facet normal -0.772134 -0.635460 0.000052
-    outer loop
-      vertex -7.758466 -7.203003 25.280670
-      vertex -8.734071 -6.017682 23.875946
-      vertex -8.708204 -6.053423 -29.000000
-    endloop
-  endfacet
-  facet normal -0.850525 -0.525935 -0.000061
-    outer loop
-      vertex -8.734071 -6.017682 23.875946
-      vertex -9.627810 -4.572220 22.696365
-      vertex -8.708204 -6.053423 -29.000000
-    endloop
-  endfacet
-  facet normal -0.000014 -0.989717 -0.143040
-    outer loop
-      vertex 131.000000 -6.799423 29.219833
-      vertex 9.957150 -6.985579 30.519876
-      vertex 10.123698 -6.794750 29.199480
-    endloop
-  endfacet
-  facet normal 0.000014 -0.953169 -0.302437
-    outer loop
-      vertex 131.000000 -6.799423 29.219833
-      vertex 10.123698 -6.794750 29.199480
-      vertex 10.441307 -6.406870 27.977041
-    endloop
-  endfacet
-  facet normal 0.000326 -0.993712 -0.111965
-    outer loop
-      vertex 131.000000 -6.799423 29.219833
-      vertex 131.000000 -7.000000 31.000000
-      vertex 9.957150 -6.985579 30.519876
-    endloop
-  endfacet
-  facet normal 0.000000 0.995512 0.094638
-    outer loop
-      vertex 131.000000 9.000000 31.000000
-      vertex 9.944272 9.000000 31.000000
-      vertex 10.070409 8.856697 32.507420
-    endloop
-  endfacet
-  facet normal -0.000196 -0.893205 -0.449650
-    outer loop
-      vertex 131.000000 -6.207751 27.528931
-      vertex 10.441307 -6.406870 27.977041
-      vertex 10.859378 -5.840517 26.851830
-    endloop
-  endfacet
-  facet normal -0.000169 0.960980 0.276618
-    outer loop
-      vertex 131.000000 8.799423 32.780167
-      vertex 10.070409 8.856697 32.507420
-      vertex 10.402563 8.455991 33.899689
-    endloop
-  endfacet
-  facet normal 0.000331 -0.943883 -0.330279
-    outer loop
-      vertex 131.000000 -6.207751 27.528931
-      vertex 131.000000 -6.799423 29.219833
-      vertex 10.441307 -6.406870 27.977041
-    endloop
-  endfacet
-  facet normal 0.000218 0.993712 0.111965
-    outer loop
-      vertex 131.000000 8.799423 32.780167
-      vertex 131.000000 9.000000 31.000000
-      vertex 10.070409 8.856697 32.507420
-    endloop
-  endfacet
-  facet normal -0.000133 -0.811095 -0.584914
-    outer loop
-      vertex 131.000000 -5.254652 26.012081
-      vertex 10.859378 -5.840517 26.851830
-      vertex 11.336068 -5.096367 25.819815
-    endloop
-  endfacet
-  facet normal 0.000410 -0.846724 -0.532032
-    outer loop
-      vertex 131.000000 -5.254652 26.012081
-      vertex 131.000000 -6.207751 27.528931
-      vertex 10.859378 -5.840517 26.851830
-    endloop
-  endfacet
-  facet normal -0.000256 0.896312 0.443423
-    outer loop
-      vertex 131.000000 8.207751 34.471069
-      vertex 10.402563 8.455991 33.899689
-      vertex 10.866963 7.829570 35.166172
-    endloop
-  endfacet
-  facet normal 0.000378 0.943883 0.330279
-    outer loop
-      vertex 131.000000 8.207751 34.471069
-      vertex 131.000000 8.799423 32.780167
-      vertex 10.402563 8.455991 33.899689
-    endloop
-  endfacet
-  facet normal 0.000173 -0.705586 -0.708625
-    outer loop
-      vertex 131.000000 -3.987918 24.745348
-      vertex 11.336068 -5.096367 25.819815
-      vertex 11.837208 -4.153147 24.880762
-    endloop
-  endfacet
-  facet normal -0.000107 -0.586402 -0.810020
-    outer loop
-      vertex 131.000000 -3.987918 24.745348
-      vertex 11.837208 -4.153147 24.880762
-      vertex 12.239279 -3.204595 24.194019
-    endloop
-  endfacet
-  facet normal -0.000225 0.803620 0.595143
-    outer loop
-      vertex 131.000000 7.254652 35.987919
-      vertex 10.866963 7.829570 35.166172
-      vertex 11.405221 6.977572 36.316826
-    endloop
-  endfacet
-  facet normal 0.000201 -0.707107 -0.707107
-    outer loop
-      vertex 131.000000 -3.987918 24.745348
-      vertex 131.000000 -5.254652 26.012081
-      vertex 11.336068 -5.096367 25.819815
-    endloop
-  endfacet
-  facet normal 0.000413 0.846724 0.532032
-    outer loop
-      vertex 131.000000 7.254652 35.987919
-      vertex 131.000000 8.207751 34.471069
-      vertex 10.866963 7.829570 35.166172
-    endloop
-  endfacet
-  facet normal -0.000154 -0.461134 -0.887331
-    outer loop
-      vertex 131.000000 -2.471070 23.792250
-      vertex 12.239279 -3.204595 24.194019
-      vertex 12.578116 -2.153921 23.647940
-    endloop
-  endfacet
-  facet normal -0.000110 0.680839 0.732433
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 11.405221 6.977572 36.316826
-      vertex 11.968547 5.867337 37.348938
-    endloop
-  endfacet
-  facet normal 0.000422 -0.532032 -0.846724
-    outer loop
-      vertex 131.000000 -2.471070 23.792250
-      vertex 131.000000 -3.987918 24.745348
-      vertex 12.239279 -3.204595 24.194019
-    endloop
-  endfacet
-  facet normal 0.000306 0.707106 0.707107
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 7.254652 35.987919
-      vertex 11.405221 6.977572 36.316826
-    endloop
-  endfacet
-  facet normal -0.000045 0.521109 0.853490
-    outer loop
-      vertex 131.000000 4.471070 38.207752
-      vertex 11.968547 5.867337 37.348938
-      vertex 12.501177 4.423876 38.230289
-    endloop
-  endfacet
-  facet normal 0.000043 0.341486 0.939887
-    outer loop
-      vertex 131.000000 4.471070 38.207752
-      vertex 12.501177 4.423876 38.230289
-      vertex 12.829484 3.015767 38.741879
-    endloop
-  endfacet
-  facet normal 0.000132 0.532033 0.846723
-    outer loop
-      vertex 131.000000 4.471070 38.207752
-      vertex 131.000000 5.987918 37.254650
-      vertex 11.968547 5.867337 37.348938
-    endloop
-  endfacet
-  facet normal 0.000065 -0.314684 -0.949197
-    outer loop
-      vertex 131.000000 -0.780167 23.200577
-      vertex 12.578116 -2.153921 23.647940
-      vertex 12.854565 -0.862604 23.219852
-    endloop
-  endfacet
-  facet normal -0.000036 -0.178211 -0.983992
-    outer loop
-      vertex 131.000000 -0.780167 23.200577
-      vertex 12.854565 -0.862604 23.219852
-      vertex 12.959555 0.015601 23.060797
-    endloop
-  endfacet
-  facet normal 0.000266 -0.330279 -0.943883
-    outer loop
-      vertex 131.000000 -0.780167 23.200577
-      vertex 131.000000 -2.471070 23.792250
-      vertex 12.578116 -2.153921 23.647940
-    endloop
-  endfacet
-  facet normal -0.000092 0.193413 0.981117
-    outer loop
-      vertex 131.000000 2.780168 38.799423
-      vertex 12.829484 3.015767 38.741879
-      vertex 12.951891 2.073451 38.927654
-    endloop
-  endfacet
-  facet normal 0.000199 0.330278 0.943884
-    outer loop
-      vertex 131.000000 2.780168 38.799423
-      vertex 131.000000 4.471070 38.207752
-      vertex 12.829484 3.015767 38.741879
-    endloop
-  endfacet
-  facet normal 0.000000 0.093950 -0.995577
-    outer loop
-      vertex 131.000000 1.000000 23.000000
-      vertex 13.000000 1.000000 23.000000
-      vertex 12.906315 2.496555 23.141226
-    endloop
-  endfacet
-  facet normal -0.000000 -0.061643 -0.998098
-    outer loop
-      vertex 131.000000 1.000000 23.000000
-      vertex 12.959555 0.015601 23.060797
-      vertex 13.000000 1.000000 23.000000
-    endloop
-  endfacet
-  facet normal 0.000422 -0.111965 -0.993712
-    outer loop
-      vertex 131.000000 1.000000 23.000000
-      vertex 131.000000 -0.780167 23.200577
-      vertex 12.959555 0.015601 23.060797
-    endloop
-  endfacet
-  facet normal 0.000409 0.111965 0.993712
-    outer loop
-      vertex 131.000000 1.000000 39.000000
-      vertex 131.000000 2.780168 38.799423
-      vertex 12.951891 2.073451 38.927654
-    endloop
-  endfacet
-  facet normal 0.000000 -0.093951 0.995577
-    outer loop
-      vertex 131.000000 1.000000 39.000000
-      vertex 13.000000 1.000000 39.000000
-      vertex 12.906315 -0.496555 38.858772
-    endloop
-  endfacet
-  facet normal 0.000000 0.067243 0.997737
-    outer loop
-      vertex 131.000000 1.000000 39.000000
-      vertex 12.951891 2.073451 38.927654
-      vertex 13.000000 1.000000 39.000000
-    endloop
-  endfacet
-  facet normal -0.000152 0.264984 -0.964253
-    outer loop
-      vertex 131.000000 2.780168 23.200577
-      vertex 12.906315 2.496555 23.141226
-      vertex 12.685336 3.730003 23.480221
-    endloop
-  endfacet
-  facet normal 0.000231 0.111965 -0.993712
-    outer loop
-      vertex 131.000000 2.780168 23.200577
-      vertex 131.000000 1.000000 23.000000
-      vertex 12.906315 2.496555 23.141226
-    endloop
-  endfacet
-  facet normal -0.000152 -0.264982 0.964253
-    outer loop
-      vertex 131.000000 -0.780167 38.799423
-      vertex 12.906315 -0.496555 38.858772
-      vertex 12.685336 -1.730003 38.519779
-    endloop
-  endfacet
-  facet normal -0.000129 0.405492 -0.914099
-    outer loop
-      vertex 131.000000 4.471070 23.792250
-      vertex 12.685336 3.730003 23.480221
-      vertex 12.401385 4.742783 23.929527
-    endloop
-  endfacet
-  facet normal 0.000231 -0.111965 0.993712
-    outer loop
-      vertex 131.000000 -0.780167 38.799423
-      vertex 131.000000 1.000000 39.000000
-      vertex 12.906315 -0.496555 38.858772
-    endloop
-  endfacet
-  facet normal 0.000421 0.330279 -0.943883
-    outer loop
-      vertex 131.000000 4.471070 23.792250
-      vertex 131.000000 2.780168 23.200577
-      vertex 12.685336 3.730003 23.480221
-    endloop
-  endfacet
-  facet normal -0.000129 -0.405492 0.914099
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 12.685336 -1.730003 38.519779
-      vertex 12.401385 -2.742783 38.070473
-    endloop
-  endfacet
-  facet normal 0.000421 -0.330278 0.943883
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -0.780167 38.799423
-      vertex 12.685336 -1.730003 38.519779
-    endloop
-  endfacet
-  facet normal 0.000135 0.539006 -0.842302
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 12.401385 4.742783 23.929527
-      vertex 11.975570 5.851481 24.638937
-    endloop
-  endfacet
-  facet normal -0.000107 0.671454 -0.741046
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 11.975570 5.851481 24.638937
-      vertex 11.475355 6.853796 25.547195
-    endloop
-  endfacet
-  facet normal 0.000239 0.532032 -0.846724
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 131.000000 4.471070 23.792250
-      vertex 12.401385 4.742783 23.929527
-    endloop
-  endfacet
-  facet normal -0.000213 0.783825 -0.620981
-    outer loop
-      vertex 131.000000 7.254652 26.012081
-      vertex 11.475355 6.853796 25.547195
-      vertex 10.990158 7.648063 26.549915
-    endloop
-  endfacet
-  facet normal 0.000239 -0.532033 0.846723
-    outer loop
-      vertex 131.000000 -3.987918 37.254650
-      vertex 131.000000 -2.471070 38.207752
-      vertex 12.401385 -2.742783 38.070473
-    endloop
-  endfacet
-  facet normal 0.000135 -0.539005 0.842303
-    outer loop
-      vertex 131.000000 -3.987918 37.254650
-      vertex 12.401385 -2.742783 38.070473
-      vertex 11.975570 -3.851482 37.361065
-    endloop
-  endfacet
-  facet normal -0.000107 -0.671455 0.741046
-    outer loop
-      vertex 131.000000 -3.987918 37.254650
-      vertex 11.975570 -3.851482 37.361065
-      vertex 11.475355 -4.853796 36.452805
-    endloop
-  endfacet
-  facet normal 0.000379 0.707107 -0.707107
-    outer loop
-      vertex 131.000000 7.254652 26.012081
-      vertex 131.000000 5.987918 24.745348
-      vertex 11.475355 6.853796 25.547195
-    endloop
-  endfacet
-  facet normal -0.000213 -0.783825 0.620981
-    outer loop
-      vertex 131.000000 -5.254652 35.987919
-      vertex 11.475355 -4.853796 36.452805
-      vertex 10.990158 -5.648063 35.450085
-    endloop
-  endfacet
-  facet normal -0.000074 0.872030 -0.489453
-    outer loop
-      vertex 131.000000 8.207751 27.528931
-      vertex 10.990158 7.648063 26.549915
-      vertex 10.553408 8.261708 27.643276
-    endloop
-  endfacet
-  facet normal 0.000091 0.938081 -0.346416
-    outer loop
-      vertex 131.000000 8.207751 27.528931
-      vertex 10.553408 8.261708 27.643276
-      vertex 10.203491 8.700374 28.831072
-    endloop
-  endfacet
-  facet normal 0.000379 -0.707106 0.707107
-    outer loop
-      vertex 131.000000 -5.254652 35.987919
-      vertex 131.000000 -3.987918 37.254650
-      vertex 11.475355 -4.853796 36.452805
-    endloop
-  endfacet
-  facet normal 0.000391 0.846724 -0.532032
-    outer loop
-      vertex 131.000000 8.207751 27.528931
-      vertex 131.000000 7.254652 26.012081
-      vertex 10.990158 7.648063 26.549915
-    endloop
-  endfacet
-  facet normal -0.000074 -0.872030 0.489453
-    outer loop
-      vertex 131.000000 -6.207751 34.471069
-      vertex 10.990158 -5.648063 35.450085
-      vertex 10.553408 -6.261708 34.356724
-    endloop
-  endfacet
-  facet normal 0.000091 -0.938081 0.346416
-    outer loop
-      vertex 131.000000 -6.207751 34.471069
-      vertex 10.553408 -6.261708 34.356724
-      vertex 10.203491 -6.700374 33.168926
-    endloop
-  endfacet
-  facet normal 0.000391 -0.846724 0.532032
-    outer loop
-      vertex 131.000000 -6.207751 34.471069
-      vertex 131.000000 -5.254652 35.987919
-      vertex 10.990158 -5.648063 35.450085
-    endloop
-  endfacet
-  facet normal -0.000141 0.978655 -0.205509
-    outer loop
-      vertex 131.000000 8.799423 29.219833
-      vertex 10.203491 8.700374 28.831072
-      vertex 10.013048 8.922435 29.888680
-    endloop
-  endfacet
-  facet normal 0.000289 0.943883 -0.330279
-    outer loop
-      vertex 131.000000 8.799423 29.219833
-      vertex 131.000000 8.207751 27.528931
-      vertex 10.203491 8.700374 28.831072
-    endloop
-  endfacet
-  facet normal 0.000391 0.993712 -0.111965
-    outer loop
-      vertex 131.000000 9.000000 31.000000
-      vertex 131.000000 8.799423 29.219833
-      vertex 10.013048 8.922435 29.888680
-    endloop
-  endfacet
-  facet normal 0.000000 0.997573 -0.069626
-    outer loop
-      vertex 131.000000 9.000000 31.000000
-      vertex 10.013048 8.922435 29.888680
-      vertex 9.944272 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000190 -0.981571 0.191098
-    outer loop
-      vertex 131.000000 -6.799423 32.780167
-      vertex 10.203491 -6.700374 33.168926
-      vertex 9.987243 -6.951696 31.877798
-    endloop
-  endfacet
-  facet normal 0.000289 -0.943883 0.330279
-    outer loop
-      vertex 131.000000 -6.799423 32.780167
-      vertex 131.000000 -6.207751 34.471069
-      vertex 10.203491 -6.700374 33.168926
-    endloop
-  endfacet
-  facet normal -0.000218 -0.999689 0.024950
-    outer loop
-      vertex 131.000000 -7.000000 31.000000
-      vertex 9.987243 -6.951696 31.877798
-      vertex 9.957150 -6.985579 30.519876
-    endloop
-  endfacet
-  facet normal 0.000416 -0.993712 0.111965
-    outer loop
-      vertex 131.000000 -7.000000 31.000000
-      vertex 131.000000 -6.799423 32.780167
-      vertex 9.987243 -6.951696 31.877798
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.481877 10.381978 91.000000
-      vertex 12.234818 5.216498 91.000000
-      vertex 11.301386 7.154791 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.481877 10.381978 91.000000
-      vertex 6.686424 11.567146 91.000000
-      vertex 4.708204 12.412678 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.481877 10.381978 91.000000
-      vertex 4.708204 12.412678 91.000000
-      vertex 2.610799 12.891397 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.481877 10.381978 91.000000
-      vertex 2.610799 12.891397 91.000000
-      vertex -5.610764 11.014879 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.481877 10.381978 91.000000
-      vertex -5.610764 11.014879 91.000000
-      vertex 12.234818 5.216498 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -3.716300 -10.034333 91.000000
-      vertex -8.708204 -6.053423 91.000000
-      vertex -7.292752 -7.673538 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 8.895265 91.000000
-      vertex 8.481877 10.381978 91.000000
-      vertex 11.301386 7.154791 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -3.716300 -10.034333 91.000000
-      vertex -7.292752 -7.673538 91.000000
-      vertex -5.610764 -9.014879 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -10.951692 -0.075672 91.000000
-      vertex -10.567554 -2.192442 91.000000
-      vertex -9.811626 -4.206605 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.461622 -10.987917 91.000000
-      vertex -3.716300 -10.034333 91.000000
-      vertex -1.670251 -10.699135 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.461622 -10.987917 91.000000
-      vertex -8.708204 -6.053423 91.000000
-      vertex -3.716300 -10.034333 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 4.708204 -10.412678 91.000000
-      vertex 0.461622 -10.987917 91.000000
-      vertex 2.610799 -10.891397 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -9.811626 6.206605 91.000000
-      vertex -10.567554 4.192442 91.000000
-      vertex -10.951692 2.075672 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -9.811626 6.206605 91.000000
-      vertex -10.951692 2.075672 91.000000
-      vertex -10.951692 -0.075672 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -7.292752 9.673538 91.000000
-      vertex -8.708204 8.053423 91.000000
-      vertex -9.811626 6.206605 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 -6.895265 91.000000
-      vertex -9.811626 -4.206605 91.000000
-      vertex -8.708204 -6.053423 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 -6.895265 91.000000
-      vertex 4.708204 -10.412678 91.000000
-      vertex 6.686424 -9.567146 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 -6.895265 91.000000
-      vertex 6.686424 -9.567146 91.000000
-      vertex 8.481877 -8.381978 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 -6.895265 91.000000
-      vertex -8.708204 -6.053423 91.000000
-      vertex 0.461622 -10.987917 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.036858 -6.895265 91.000000
-      vertex 0.461622 -10.987917 91.000000
-      vertex 4.708204 -10.412678 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 -3.216498 91.000000
-      vertex 10.036858 -6.895265 91.000000
-      vertex 11.301386 -5.154791 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.461622 12.987917 91.000000
-      vertex -1.670251 12.699135 91.000000
-      vertex -3.716300 12.034333 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.461622 12.987917 91.000000
-      vertex -3.716300 12.034333 91.000000
-      vertex -5.610764 11.014879 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 2.610799 12.891397 91.000000
-      vertex 0.461622 12.987917 91.000000
-      vertex -5.610764 11.014879 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.807155 3.142683 91.000000
-      vertex 12.807155 -1.142683 91.000000
-      vertex 13.000000 1.000000 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 91.000000
-      vertex -5.610764 11.014879 91.000000
-      vertex -7.292752 9.673538 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 91.000000
-      vertex 12.234818 -3.216498 91.000000
-      vertex 12.807155 -1.142683 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 91.000000
-      vertex -10.951692 -0.075672 91.000000
-      vertex -9.811626 -4.206605 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 91.000000
-      vertex -7.292752 9.673538 91.000000
-      vertex -9.811626 6.206605 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 91.000000
-      vertex -9.811626 6.206605 91.000000
-      vertex -10.951692 -0.075672 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 91.000000
-      vertex -9.811626 -4.206605 91.000000
-      vertex 10.036858 -6.895265 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 91.000000
-      vertex 10.036858 -6.895265 91.000000
-      vertex 12.234818 -3.216498 91.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.234818 5.216498 91.000000
-      vertex 12.807155 -1.142683 91.000000
-      vertex 12.807155 3.142683 91.000000
-    endloop
-  endfacet
-  facet normal -0.000919 0.936949 -0.349464
-    outer loop
-      vertex -6.470624 10.390942 27.563400
-      vertex -34.000000 10.096320 26.845850
-      vertex -34.000000 10.594930 28.182674
-    endloop
-  endfacet
-  facet normal -0.000773 -0.936950 0.349464
-    outer loop
-      vertex -6.375163 -8.466096 34.223824
-      vertex -34.000000 -8.096320 35.154152
-      vertex -34.000000 -8.594930 33.817326
-    endloop
-  endfacet
-  facet normal 0.001442 -0.913852 0.406044
-    outer loop
-      vertex -6.375163 -8.466096 34.223824
-      vertex -7.218597 -7.743835 35.852356
-      vertex -34.000000 -8.096320 35.154152
-    endloop
-  endfacet
-  facet normal 0.000658 0.958118 -0.286374
-    outer loop
-      vertex -6.012732 10.737638 28.724388
-      vertex -6.470624 10.390942 27.563400
-      vertex -34.000000 10.594930 28.182674
-    endloop
-  endfacet
-  facet normal -0.000868 0.977146 -0.212565
-    outer loop
-      vertex -6.012732 10.737638 28.724388
-      vertex -34.000000 10.594930 28.182674
-      vertex -34.000000 10.898214 29.576851
-    endloop
-  endfacet
-  facet normal -0.000896 -0.977146 0.212565
-    outer loop
-      vertex -5.941191 -8.788762 33.044537
-      vertex -34.000000 -8.594930 33.817326
-      vertex -34.000000 -8.898214 32.423149
-    endloop
-  endfacet
-  facet normal 0.000612 -0.964490 0.264120
-    outer loop
-      vertex -5.941191 -8.788762 33.044537
-      vertex -6.375163 -8.466096 34.223824
-      vertex -34.000000 -8.594930 33.817326
-    endloop
-  endfacet
-  facet normal 0.000376 0.984892 -0.173172
-    outer loop
-      vertex -5.737499 10.930061 29.819370
-      vertex -6.012732 10.737638 28.724388
-      vertex -34.000000 10.898214 29.576851
-    endloop
-  endfacet
-  facet normal -0.000512 0.997452 -0.071339
-    outer loop
-      vertex -5.737499 10.930061 29.819370
-      vertex -34.000000 10.898214 29.576851
-      vertex -34.000000 11.000000 31.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.998250 -0.059135
-    outer loop
-      vertex -5.633250 11.000000 31.000000
-      vertex -5.737499 10.930061 29.819370
-      vertex -34.000000 11.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000873 -0.997452 0.071339
-    outer loop
-      vertex -5.659541 -8.982511 31.591177
-      vertex -34.000000 -8.898214 32.423149
-      vertex -34.000000 -9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000307 0.997452 0.071339
-    outer loop
-      vertex -5.757563 10.916418 32.290215
-      vertex -34.000000 11.000000 31.000000
-      vertex -34.000000 10.898214 32.423149
-    endloop
-  endfacet
-  facet normal 0.000936 -0.991207 0.132320
-    outer loop
-      vertex -5.659541 -8.982511 31.591177
-      vertex -5.941191 -8.788762 33.044537
-      vertex -34.000000 -8.898214 32.423149
-    endloop
-  endfacet
-  facet normal 0.000000 0.997908 0.064646
-    outer loop
-      vertex -5.757563 10.916418 32.290215
-      vertex -5.633250 11.000000 31.000000
-      vertex -34.000000 11.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000887 -0.997452 -0.071339
-    outer loop
-      vertex -5.681127 -8.968076 30.201591
-      vertex -34.000000 -9.000000 31.000000
-      vertex -34.000000 -8.898214 29.576851
-    endloop
-  endfacet
-  facet normal 0.000834 -0.999946 -0.010400
-    outer loop
-      vertex -5.681127 -8.968076 30.201591
-      vertex -5.659541 -8.982511 31.591177
-      vertex -34.000000 -9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000681 0.977147 0.212565
-    outer loop
-      vertex -6.080200 10.688693 33.475727
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 10.594930 33.817326
-    endloop
-  endfacet
-  facet normal 0.000255 0.982033 0.188708
-    outer loop
-      vertex -6.080200 10.688693 33.475727
-      vertex -5.757563 10.916418 32.290215
-      vertex -34.000000 10.898214 32.423149
-    endloop
-  endfacet
-  facet normal -0.000863 -0.977147 -0.212565
-    outer loop
-      vertex -5.919753 -8.803928 29.029472
-      vertex -34.000000 -8.898214 29.576851
-      vertex -34.000000 -8.594930 28.182674
-    endloop
-  endfacet
-  facet normal 0.000619 -0.990318 -0.138813
-    outer loop
-      vertex -5.919753 -8.803928 29.029472
-      vertex -5.681127 -8.968076 30.201591
-      vertex -34.000000 -8.898214 29.576851
-    endloop
-  endfacet
-  facet normal 0.000499 0.953166 0.302446
-    outer loop
-      vertex -6.528029 10.344987 34.559666
-      vertex -6.080200 10.688693 33.475727
-      vertex -34.000000 10.594930 33.817326
-    endloop
-  endfacet
-  facet normal -0.000919 0.936949 0.349463
-    outer loop
-      vertex -6.528029 10.344987 34.559666
-      vertex -34.000000 10.594930 33.817326
-      vertex -34.000000 10.096320 35.154152
-    endloop
-  endfacet
-  facet normal -0.000511 -0.936950 -0.349464
-    outer loop
-      vertex -6.298790 -8.525107 27.954950
-      vertex -34.000000 -8.594930 28.182674
-      vertex -34.000000 -8.096320 26.845850
-    endloop
-  endfacet
-  facet normal 0.000374 -0.967912 -0.251289
-    outer loop
-      vertex -6.298790 -8.525107 27.954950
-      vertex -5.919753 -8.803928 29.029472
-      vertex -34.000000 -8.594930 28.182674
-    endloop
-  endfacet
-  facet normal 0.000978 0.905646 0.424035
-    outer loop
-      vertex -7.240622 9.723082 35.889565
-      vertex -6.528029 10.344987 34.559666
-      vertex -34.000000 10.096320 35.154152
-    endloop
-  endfacet
-  facet normal -0.000929 0.877678 0.479250
-    outer loop
-      vertex -7.240622 9.723082 35.889565
-      vertex -34.000000 10.096320 35.154152
-      vertex -34.000000 9.412536 36.406406
-    endloop
-  endfacet
-  facet normal -0.000508 -0.877679 -0.479249
-    outer loop
-      vertex -6.938873 -7.998572 26.638153
-      vertex -34.000000 -8.096320 26.845850
-      vertex -34.000000 -7.412535 25.593592
-    endloop
-  endfacet
-  facet normal 0.000502 -0.928437 -0.371490
-    outer loop
-      vertex -6.938873 -7.998572 26.638153
-      vertex -6.298790 -8.525107 27.954950
-      vertex -34.000000 -8.096320 26.845850
-    endloop
-  endfacet
-  facet normal 0.001581 0.818925 0.573899
-    outer loop
-      vertex -8.299619 8.584002 37.517891
-      vertex -7.240622 9.723082 35.889565
-      vertex -34.000000 9.412536 36.406406
-    endloop
-  endfacet
-  facet normal -0.000109 0.800542 0.599277
-    outer loop
-      vertex -8.299619 8.584002 37.517891
-      vertex -34.000000 9.412536 36.406406
-      vertex -34.000000 8.557496 37.548607
-    endloop
-  endfacet
-  facet normal 0.000116 0.707107 0.707107
-    outer loop
-      vertex -8.299619 8.584002 37.517891
-      vertex -34.000000 8.557496 37.548607
-      vertex -34.000000 7.548607 38.557495
-    endloop
-  endfacet
-  facet normal -0.000754 -0.800541 -0.599278
-    outer loop
-      vertex -7.758466 -7.203003 25.280670
-      vertex -34.000000 -7.412535 25.593592
-      vertex -34.000000 -6.557496 24.451393
-    endloop
-  endfacet
-  facet normal 0.000853 -0.862528 -0.506009
-    outer loop
-      vertex -7.758466 -7.203003 25.280670
-      vertex -6.938873 -7.998572 26.638153
-      vertex -34.000000 -7.412535 25.593592
-    endloop
-  endfacet
-  facet normal -0.000997 -0.707106 -0.707106
-    outer loop
-      vertex -8.734071 -6.017682 23.875946
-      vertex -34.000000 -6.557496 24.451393
-      vertex -34.000000 -5.548607 23.442505
-    endloop
-  endfacet
-  facet normal 0.001184 0.693748 0.720217
-    outer loop
-      vertex -9.250660 7.238907 38.815117
-      vertex -8.299619 8.584002 37.517891
-      vertex -34.000000 7.548607 38.557495
-    endloop
-  endfacet
-  facet normal 0.001614 -0.763715 -0.645552
-    outer loop
-      vertex -8.734071 -6.017682 23.875946
-      vertex -7.758466 -7.203003 25.280670
-      vertex -34.000000 -6.557496 24.451393
-    endloop
-  endfacet
-  facet normal -0.000834 0.599278 0.800540
-    outer loop
-      vertex -9.250660 7.238907 38.815117
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 6.406408 39.412537
-    endloop
-  endfacet
-  facet normal 0.001572 -0.631667 -0.775238
-    outer loop
-      vertex -9.627810 -4.572220 22.696365
-      vertex -8.734071 -6.017682 23.875946
-      vertex -34.000000 -5.548607 23.442505
-    endloop
-  endfacet
-  facet normal -0.000500 -0.599278 -0.800541
-    outer loop
-      vertex -9.627810 -4.572220 22.696365
-      vertex -34.000000 -5.548607 23.442505
-      vertex -34.000000 -4.406408 22.587465
-    endloop
-  endfacet
-  facet normal 0.001037 0.562496 0.826800
-    outer loop
-      vertex -9.915038 5.986175 39.668221
-      vertex -9.250660 7.238907 38.815117
-      vertex -34.000000 6.406408 39.412537
-    endloop
-  endfacet
-  facet normal -0.000955 0.479249 0.877679
-    outer loop
-      vertex -9.915038 5.986175 39.668221
-      vertex -34.000000 6.406408 39.412537
-      vertex -34.000000 5.154150 40.096321
-    endloop
-  endfacet
-  facet normal 0.000575 -0.488491 -0.872569
-    outer loop
-      vertex -10.252209 -3.169867 21.910873
-      vertex -9.627810 -4.572220 22.696365
-      vertex -34.000000 -4.406408 22.587465
-    endloop
-  endfacet
-  facet normal -0.000051 -0.479249 -0.877679
-    outer loop
-      vertex -10.252209 -3.169867 21.910873
-      vertex -34.000000 -4.406408 22.587465
-      vertex -34.000000 -3.154150 21.903681
-    endloop
-  endfacet
-  facet normal 0.001741 0.417216 0.908806
-    outer loop
-      vertex -10.527491 4.334210 40.427780
-      vertex -9.915038 5.986175 39.668221
-      vertex -34.000000 5.154150 40.096321
-    endloop
-  endfacet
-  facet normal 0.000052 -0.349465 -0.936949
-    outer loop
-      vertex -10.252209 -3.169867 21.910873
-      vertex -34.000000 -3.154150 21.903681
-      vertex -34.000000 -1.817326 21.405069
-    endloop
-  endfacet
-  facet normal -0.001023 0.349463 0.936950
-    outer loop
-      vertex -10.527491 4.334210 40.427780
-      vertex -34.000000 5.154150 40.096321
-      vertex -34.000000 3.817326 40.594929
-    endloop
-  endfacet
-  facet normal -0.000469 -0.212565 -0.977147
-    outer loop
-      vertex -10.703868 -1.649430 21.357359
-      vertex -34.000000 -1.817326 21.405069
-      vertex -34.000000 -0.423148 21.101786
-    endloop
-  endfacet
-  facet normal 0.001080 0.262953 0.964808
-    outer loop
-      vertex -10.846192 2.915130 40.814899
-      vertex -10.527491 4.334210 40.427780
-      vertex -34.000000 3.817326 40.594929
-    endloop
-  endfacet
-  facet normal 0.000540 -0.341944 -0.939720
-    outer loop
-      vertex -10.703868 -1.649430 21.357359
-      vertex -10.252209 -3.169867 21.910873
-      vertex -34.000000 -1.817326 21.405069
-    endloop
-  endfacet
-  facet normal -0.001001 0.212567 0.977146
-    outer loop
-      vertex -10.846192 2.915130 40.814899
-      vertex -34.000000 3.817326 40.594929
-      vertex -34.000000 2.423148 40.898216
-    endloop
-  endfacet
-  facet normal 0.000954 -0.186630 -0.982430
-    outer loop
-      vertex -10.951837 -0.074060 21.057848
-      vertex -10.703868 -1.649430 21.357359
-      vertex -34.000000 -0.423148 21.101786
-    endloop
-  endfacet
-  facet normal -0.000821 -0.071339 -0.997452
-    outer loop
-      vertex -10.951837 -0.074060 21.057848
-      vertex -34.000000 -0.423148 21.101786
-      vertex -34.000000 1.000000 21.000000
-    endloop
-  endfacet
-  facet normal 0.001328 0.105907 0.994375
-    outer loop
-      vertex -10.998376 1.197410 40.998051
-      vertex -10.846192 2.915130 40.814899
-      vertex -34.000000 2.423148 40.898216
-    endloop
-  endfacet
-  facet normal -0.000528 0.071338 0.997452
-    outer loop
-      vertex -10.998376 1.197410 40.998051
-      vertex -34.000000 2.423148 40.898216
-      vertex -34.000000 1.000000 41.000000
-    endloop
-  endfacet
-  facet normal 0.001303 -0.025876 -0.999664
-    outer loop
-      vertex -10.987032 1.557722 21.015564
-      vertex -10.951837 -0.074060 21.057848
-      vertex -34.000000 1.000000 21.000000
-    endloop
-  endfacet
-  facet normal -0.001054 0.071339 -0.997451
-    outer loop
-      vertex -10.987032 1.557722 21.015564
-      vertex -34.000000 1.000000 21.000000
-      vertex -34.000000 2.423148 21.101786
-    endloop
-  endfacet
-  facet normal 0.000652 -0.066086 0.997814
-    outer loop
-      vertex -10.903988 -0.514951 40.884579
-      vertex -10.998376 1.197410 40.998051
-      vertex -34.000000 1.000000 41.000000
-    endloop
-  endfacet
-  facet normal 0.000305 -0.071338 0.997452
-    outer loop
-      vertex -10.903988 -0.514951 40.884579
-      vertex -34.000000 1.000000 41.000000
-      vertex -34.000000 -0.423148 40.898216
-    endloop
-  endfacet
-  facet normal 0.001446 0.137151 -0.990549
-    outer loop
-      vertex -10.800443 3.179347 21.240366
-      vertex -10.987032 1.557722 21.015564
-      vertex -34.000000 2.423148 21.101786
-    endloop
-  endfacet
-  facet normal -0.001092 0.212565 -0.977146
-    outer loop
-      vertex -10.800443 3.179347 21.240366
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 3.817326 21.405069
-    endloop
-  endfacet
-  facet normal -0.000259 -0.210447 0.977605
-    outer loop
-      vertex -10.695628 -1.685570 40.632637
-      vertex -10.903988 -0.514951 40.884579
-      vertex -34.000000 -0.423148 40.898216
-    endloop
-  endfacet
-  facet normal -0.000379 -0.212567 0.977146
-    outer loop
-      vertex -10.695628 -1.685570 40.632637
-      vertex -34.000000 -0.423148 40.898216
-      vertex -34.000000 -1.817326 40.594929
-    endloop
-  endfacet
-  facet normal 0.001252 0.292401 -0.956295
-    outer loop
-      vertex -10.429211 4.656930 21.692644
-      vertex -10.800443 3.179347 21.240366
-      vertex -34.000000 3.817326 21.405069
-    endloop
-  endfacet
-  facet normal -0.001017 0.349465 -0.936949
-    outer loop
-      vertex -10.429211 4.656930 21.692644
-      vertex -34.000000 3.817326 21.405069
-      vertex -34.000000 5.154150 21.903681
-    endloop
-  endfacet
-  facet normal 0.000342 -0.330589 0.943775
-    outer loop
-      vertex -10.343766 -2.913946 40.202229
-      vertex -10.695628 -1.685570 40.632637
-      vertex -34.000000 -1.817326 40.594929
-    endloop
-  endfacet
-  facet normal -0.000646 -0.349463 0.936950
-    outer loop
-      vertex -10.343766 -2.913946 40.202229
-      vertex -34.000000 -1.817326 40.594929
-      vertex -34.000000 -3.154150 40.096321
-    endloop
-  endfacet
-  facet normal 0.000892 0.426229 -0.904615
-    outer loop
-      vertex -9.974246 5.854475 22.257341
-      vertex -10.429211 4.656930 21.692644
-      vertex -34.000000 5.154150 21.903681
-    endloop
-  endfacet
-  facet normal -0.001050 0.479249 -0.877679
-    outer loop
-      vertex -9.974246 5.854475 22.257341
-      vertex -34.000000 5.154150 21.903681
-      vertex -34.000000 6.406408 22.587465
-    endloop
-  endfacet
-  facet normal 0.000565 -0.449518 0.893271
-    outer loop
-      vertex -9.880333 -4.061458 39.624477
-      vertex -10.343766 -2.913946 40.202229
-      vertex -34.000000 -3.154150 40.096321
-    endloop
-  endfacet
-  facet normal -0.000858 -0.479249 0.877679
-    outer loop
-      vertex -9.880333 -4.061458 39.624477
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 -4.406408 39.412537
-    endloop
-  endfacet
-  facet normal 0.001231 0.552230 -0.833691
-    outer loop
-      vertex -9.295414 7.164775 23.126276
-      vertex -9.974246 5.854475 22.257341
-      vertex -34.000000 6.406408 22.587465
-    endloop
-  endfacet
-  facet normal -0.000936 0.599277 -0.800541
-    outer loop
-      vertex -9.295414 7.164775 23.126276
-      vertex -34.000000 6.406408 22.587465
-      vertex -34.000000 7.548607 23.442505
-    endloop
-  endfacet
-  facet normal 0.000947 -0.570730 0.821137
-    outer loop
-      vertex -9.197070 -5.326117 38.744690
-      vertex -9.880333 -4.061458 39.624477
-      vertex -34.000000 -4.406408 39.412537
-    endloop
-  endfacet
-  facet normal -0.000666 -0.599279 0.800540
-    outer loop
-      vertex -9.197070 -5.326117 38.744690
-      vertex -34.000000 -4.406408 39.412537
-      vertex -34.000000 -5.548607 38.557495
-    endloop
-  endfacet
-  facet normal 0.001325 0.685290 -0.728269
-    outer loop
-      vertex -8.372674 8.493528 24.378292
-      vertex -9.295414 7.164775 23.126276
-      vertex -34.000000 7.548607 23.442505
-    endloop
-  endfacet
-  facet normal 0.000902 -0.700754 0.713403
-    outer loop
-      vertex -8.256754 -6.636262 37.456585
-      vertex -9.197070 -5.326117 38.744690
-      vertex -34.000000 -5.548607 38.557495
-    endloop
-  endfacet
-  facet normal -0.000252 0.707107 -0.707107
-    outer loop
-      vertex -8.372674 8.493528 24.378292
-      vertex -34.000000 7.548607 23.442505
-      vertex -34.000000 8.557496 24.451393
-    endloop
-  endfacet
-  facet normal 0.000364 -0.707107 0.707107
-    outer loop
-      vertex -8.256754 -6.636262 37.456585
-      vertex -34.000000 -5.548607 38.557495
-      vertex -34.000000 -6.557496 37.548607
-    endloop
-  endfacet
-  facet normal 0.000289 0.800541 -0.599278
-    outer loop
-      vertex -8.372674 8.493528 24.378292
-      vertex -34.000000 8.557496 24.451393
-      vertex -34.000000 9.412536 25.593592
-    endloop
-  endfacet
-  facet normal -0.000307 -0.800542 0.599277
-    outer loop
-      vertex -8.256754 -6.636262 37.456585
-      vertex -34.000000 -6.557496 37.548607
-      vertex -34.000000 -7.412535 36.406406
-    endloop
-  endfacet
-  facet normal 0.001198 0.809614 -0.586961
-    outer loop
-      vertex -7.338006 9.630043 25.948034
-      vertex -8.372674 8.493528 24.378292
-      vertex -34.000000 9.412536 25.593592
-    endloop
-  endfacet
-  facet normal -0.000789 0.877679 -0.479249
-    outer loop
-      vertex -7.338006 9.630043 25.948034
-      vertex -34.000000 9.412536 25.593592
-      vertex -34.000000 10.096320 26.845850
-    endloop
-  endfacet
-  facet normal -0.000943 -0.877678 0.479250
-    outer loop
-      vertex -7.218597 -7.743835 35.852356
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 -8.096320 35.154152
-    endloop
-  endfacet
-  facet normal 0.001594 -0.822439 0.568851
-    outer loop
-      vertex -7.218597 -7.743835 35.852356
-      vertex -8.256754 -6.636262 37.456585
-      vertex -34.000000 -7.412535 36.406406
-    endloop
-  endfacet
-  facet normal 0.001445 0.904362 -0.426764
-    outer loop
-      vertex -6.470624 10.390942 27.563400
-      vertex -7.338006 9.630043 25.948034
-      vertex -34.000000 10.096320 26.845850
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 23.792250
-      vertex 131.000000 -5.254652 26.012081
-      vertex 131.000000 -3.987918 24.745348
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 1.000000 23.000000
-      vertex 131.000000 -2.471070 23.792250
-      vertex 131.000000 -0.780167 23.200577
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 2.780168 23.200577
-      vertex 131.000000 -2.471070 23.792250
-      vertex 131.000000 1.000000 23.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 131.000000 2.780168 23.200577
-      vertex 131.000000 4.471070 23.792250
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 131.000000 -5.254652 26.012081
-      vertex 131.000000 -2.471070 23.792250
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 24.745348
-      vertex 131.000000 -2.471070 23.792250
-      vertex 131.000000 2.780168 23.200577
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -5.254652 35.987919
-      vertex 131.000000 -6.207751 34.471069
-      vertex 131.000000 -6.799423 32.780167
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 7.254652 26.012081
-      vertex 131.000000 -6.799423 29.219833
-      vertex 131.000000 -6.207751 27.528931
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 7.254652 26.012081
-      vertex 131.000000 -6.207751 27.528931
-      vertex 131.000000 -5.254652 26.012081
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 7.254652 26.012081
-      vertex 131.000000 -5.254652 26.012081
-      vertex 131.000000 5.987918 24.745348
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -3.987918 37.254650
-      vertex 131.000000 -5.254652 35.987919
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -6.799423 32.780167
-      vertex 131.000000 -7.000000 31.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -7.000000 31.000000
-      vertex 131.000000 -6.799423 29.219833
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 7.254652 26.012081
-      vertex 131.000000 8.207751 27.528931
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -6.799423 29.219833
-      vertex 131.000000 7.254652 26.012081
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 -5.254652 35.987919
-      vertex 131.000000 -6.799423 32.780167
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 8.799423 32.780167
-      vertex 131.000000 8.207751 27.528931
-      vertex 131.000000 8.799423 29.219833
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 8.799423 32.780167
-      vertex 131.000000 8.799423 29.219833
-      vertex 131.000000 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 2.780168 38.799423
-      vertex 131.000000 1.000000 39.000000
-      vertex 131.000000 -0.780167 38.799423
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 8.207751 34.471069
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 8.207751 27.528931
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 8.207751 34.471069
-      vertex 131.000000 8.207751 27.528931
-      vertex 131.000000 8.799423 32.780167
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 8.207751 34.471069
-      vertex 131.000000 7.254652 35.987919
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 4.471070 38.207752
-      vertex 131.000000 2.780168 38.799423
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 -0.780167 38.799423
-      vertex 131.000000 -2.471070 38.207752
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 2.780168 38.799423
-      vertex 131.000000 -0.780167 38.799423
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.987918 37.254650
-      vertex 131.000000 -2.471070 38.207752
-      vertex 131.000000 8.207751 34.471069
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.594930 28.182674
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 10.898214 29.576851
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.898214 29.576851
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 11.000000 31.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 7.548607 23.442505
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 7.548607 23.442505
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 9.412536 25.593592
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 9.412536 25.593592
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 10.594930 28.182674
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -0.423148 40.898216
-      vertex -34.000000 2.423148 40.898216
-      vertex -34.000000 -3.154150 40.096321
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 1.000000 41.000000
-      vertex -34.000000 2.423148 40.898216
-      vertex -34.000000 -0.423148 40.898216
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 2.423148 40.898216
-      vertex -34.000000 10.898214 32.423149
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -6.557496 24.451393
-      vertex -34.000000 -7.412535 25.593592
-      vertex -34.000000 -5.548607 23.442505
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 10.096320 35.154152
-      vertex -34.000000 10.594930 33.817326
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex -34.000000 3.817326 40.594929
-      vertex -34.000000 5.154150 40.096321
-      vertex -34.000000 2.423148 40.898216
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -8.096320 26.845850
-      vertex -34.000000 -8.594930 28.182674
-      vertex -34.000000 -7.412535 25.593592
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -7.412535 25.593592
-      vertex -34.000000 -8.594930 28.182674
-      vertex -34.000000 -5.548607 23.442505
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.096320 35.154152
-      vertex -34.000000 8.557496 37.548607
-      vertex -34.000000 9.412536 36.406406
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -3.154150 21.903681
-      vertex -34.000000 -0.423148 21.101786
-      vertex -34.000000 -1.817326 21.405069
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex -34.000000 6.406408 39.412537
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 5.154150 40.096321
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 2.423148 40.898216
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 10.898214 32.423149
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex -34.000000 5.154150 40.096321
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 2.423148 40.898216
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.898214 32.423149
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 10.096320 35.154152
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 10.096320 35.154152
-      vertex -34.000000 7.548607 38.557495
-      vertex -34.000000 8.557496 37.548607
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -8.898214 29.576851
-      vertex -34.000000 -9.000000 31.000000
-      vertex -34.000000 -8.594930 28.182674
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -5.548607 23.442505
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 -4.406408 22.587465
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -4.406408 22.587465
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 -3.154150 21.903681
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -0.423148 21.101786
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 1.000000 21.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -3.154150 21.903681
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 -0.423148 21.101786
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -8.898214 32.423149
-      vertex -34.000000 -8.594930 33.817326
-      vertex -34.000000 -9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -9.000000 31.000000
-      vertex -34.000000 -8.594930 33.817326
-      vertex -34.000000 -8.594930 28.182674
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 6.406408 22.587465
-      vertex -34.000000 3.817326 21.405069
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 3.817326 21.405069
-      vertex -34.000000 6.406408 22.587465
-      vertex -34.000000 5.154150 21.903681
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -8.096320 35.154152
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 -8.594930 33.817326
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -8.594930 28.182674
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 -5.548607 23.442505
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -5.548607 23.442505
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 2.423148 21.101786
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -8.594930 33.817326
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 -8.594930 28.182674
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 2.423148 21.101786
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 6.406408 22.587465
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -6.557496 37.548607
-      vertex -34.000000 -5.548607 38.557495
-      vertex -34.000000 -7.412535 36.406406
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 7.548607 23.442505
-      vertex -34.000000 9.412536 25.593592
-      vertex -34.000000 8.557496 24.451393
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -4.406408 39.412537
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 -5.548607 38.557495
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 6.406408 22.587465
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 7.548607 23.442505
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -7.412535 36.406406
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 6.406408 22.587465
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -5.548607 38.557495
-      vertex -34.000000 -3.154150 40.096321
-      vertex -34.000000 -7.412535 36.406406
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 9.412536 25.593592
-      vertex -34.000000 10.594930 28.182674
-      vertex -34.000000 10.096320 26.845850
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -1.817326 40.594929
-      vertex -34.000000 -0.423148 40.898216
-      vertex -34.000000 -3.154150 40.096321
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSL.stl b/apps/cpu/Multiphase/backup/FlowFocusingSL.stl
deleted file mode 100644
index c7285063b119d316bc79153c093d3564d1245d41..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSL.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSS.ast b/apps/cpu/Multiphase/backup/FlowFocusingSS.ast
deleted file mode 100644
index 83ef2d561accb5a3f994547945604c3674df82dd..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/FlowFocusingSS.ast
+++ /dev/null
@@ -1,3096 +0,0 @@
-solid Mesh
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -4.825651 32.435894
-      vertex 131.000000 -5.000000 31.000000
-      vertex 131.000000 -4.825651 29.564106
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -4.825651 32.435894
-      vertex 131.000000 -4.825651 29.564106
-      vertex 131.000000 -4.312736 28.211660
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -4.825651 32.435894
-      vertex 131.000000 -4.312736 28.211660
-      vertex 131.000000 -3.491065 27.021263
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -4.825651 32.435894
-      vertex 131.000000 -3.491065 27.021263
-      vertex 131.000000 -2.408388 26.062098
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -4.825651 32.435894
-      vertex 131.000000 -2.408388 26.062098
-      vertex 131.000000 -1.127629 25.389902
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 4.408389 26.062098
-      vertex 131.000000 1.723220 25.043747
-      vertex 131.000000 3.127629 25.389902
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -1.127629 36.610096
-      vertex 131.000000 -2.408388 35.937904
-      vertex 131.000000 -3.491065 34.978737
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -1.127629 36.610096
-      vertex 131.000000 -3.491065 34.978737
-      vertex 131.000000 -4.312736 33.788338
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 -1.127629 36.610096
-      vertex 131.000000 -4.312736 33.788338
-      vertex 131.000000 -4.825651 32.435894
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 6.825651 29.564106
-      vertex 131.000000 4.408389 26.062098
-      vertex 131.000000 5.491065 27.021263
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 6.825651 29.564106
-      vertex 131.000000 5.491065 27.021263
-      vertex 131.000000 6.312736 28.211660
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 6.825651 32.435894
-      vertex 131.000000 6.825651 29.564106
-      vertex 131.000000 7.000000 31.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 1.723220 36.956253
-      vertex 131.000000 0.276780 36.956253
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 0.276780 36.956253
-      vertex 131.000000 -1.127629 36.610096
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 -1.127629 25.389902
-      vertex 131.000000 0.276780 25.043747
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 0.276780 25.043747
-      vertex 131.000000 1.723220 25.043747
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 1.723220 25.043747
-      vertex 131.000000 4.408389 26.062098
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 -4.825651 32.435894
-      vertex 131.000000 -1.127629 25.389902
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 4.408389 26.062098
-      vertex 131.000000 6.825651 29.564106
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 -1.127629 36.610096
-      vertex 131.000000 -4.825651 32.435894
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 6.825651 29.564106
-      vertex 131.000000 6.825651 32.435894
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.491065 34.978737
-      vertex 131.000000 6.825651 32.435894
-      vertex 131.000000 6.312736 33.788338
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.491065 34.978737
-      vertex 131.000000 4.408389 35.937904
-      vertex 131.000000 3.127629 36.610096
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 131.000000 5.491065 34.978737
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 6.825651 32.435894
-    endloop
-  endfacet
-  facet normal -0.000144 -0.728741 -0.684789
-    outer loop
-      vertex 131.000000 -3.491065 27.021263
-      vertex 12.045211 -3.690770 27.258787
-      vertex 12.304571 -3.025752 26.551031
-    endloop
-  endfacet
-  facet normal 0.000247 -0.822984 -0.568065
-    outer loop
-      vertex 131.000000 -3.491065 27.021263
-      vertex 131.000000 -4.312736 28.211660
-      vertex 12.045211 -3.690770 27.258787
-    endloop
-  endfacet
-  facet normal 0.000000 0.994252 0.107061
-    outer loop
-      vertex 131.000000 7.000000 31.000000
-      vertex 11.392304 7.000000 31.000000
-      vertex 11.470512 6.862455 32.277348
-    endloop
-  endfacet
-  facet normal -0.000139 -0.604250 -0.796794
-    outer loop
-      vertex 131.000000 -2.408388 26.062098
-      vertex 12.304571 -3.025752 26.551031
-      vertex 12.565912 -2.198387 25.923552
-    endloop
-  endfacet
-  facet normal 0.000366 -0.663122 -0.748511
-    outer loop
-      vertex 131.000000 -2.408388 26.062098
-      vertex 131.000000 -3.491065 27.021263
-      vertex 12.304571 -3.025752 26.551031
-    endloop
-  endfacet
-  facet normal 0.000037 -0.449324 -0.893369
-    outer loop
-      vertex 131.000000 -1.127629 25.389902
-      vertex 12.565912 -2.198387 25.923552
-      vertex 12.802445 -1.168476 25.405563
-    endloop
-  endfacet
-  facet normal -0.000126 0.949009 0.315249
-    outer loop
-      vertex 131.000000 6.825651 32.435894
-      vertex 11.470512 6.862455 32.277348
-      vertex 11.685072 6.461616 33.484100
-    endloop
-  endfacet
-  facet normal -0.000030 -0.280319 -0.959907
-    outer loop
-      vertex 131.000000 -1.127629 25.389902
-      vertex 12.802445 -1.168476 25.405563
-      vertex 12.941537 -0.183087 25.117798
-    endloop
-  endfacet
-  facet normal 0.000212 -0.464724 -0.885456
-    outer loop
-      vertex 131.000000 -1.127629 25.389902
-      vertex 131.000000 -2.408388 26.062098
-      vertex 12.565912 -2.198387 25.923552
-    endloop
-  endfacet
-  facet normal 0.000146 0.992709 0.120537
-    outer loop
-      vertex 131.000000 6.825651 32.435894
-      vertex 131.000000 7.000000 31.000000
-      vertex 11.470512 6.862455 32.277348
-    endloop
-  endfacet
-  facet normal -0.000134 0.876441 0.481510
-    outer loop
-      vertex 131.000000 6.312736 33.788338
-      vertex 11.685072 6.461616 33.484100
-      vertex 11.896806 6.025896 34.277252
-    endloop
-  endfacet
-  facet normal 0.000263 0.935016 0.354605
-    outer loop
-      vertex 131.000000 6.312736 33.788338
-      vertex 131.000000 6.825651 32.435894
-      vertex 11.685072 6.461616 33.484100
-    endloop
-  endfacet
-  facet normal -0.000238 -0.099067 -0.995081
-    outer loop
-      vertex 131.000000 0.276780 25.043747
-      vertex 12.941537 -0.183087 25.117798
-      vertex 13.000000 1.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000323 -0.239315 -0.970942
-    outer loop
-      vertex 131.000000 0.276780 25.043747
-      vertex 131.000000 -1.127629 25.389902
-      vertex 12.941537 -0.183087 25.117798
-    endloop
-  endfacet
-  facet normal -0.000060 0.790299 0.612722
-    outer loop
-      vertex 131.000000 5.491065 34.978737
-      vertex 11.896806 6.025896 34.277252
-      vertex 12.153856 5.426228 35.050739
-    endloop
-  endfacet
-  facet normal 0.000077 0.676962 0.736018
-    outer loop
-      vertex 131.000000 5.491065 34.978737
-      vertex 12.153856 5.426228 35.050739
-      vertex 12.425965 4.667058 35.748966
-    endloop
-  endfacet
-  facet normal 0.000350 0.822984 0.568064
-    outer loop
-      vertex 131.000000 5.491065 34.978737
-      vertex 131.000000 6.312736 33.788338
-      vertex 11.896806 6.025896 34.277252
-    endloop
-  endfacet
-  facet normal -0.000320 0.112279 -0.993677
-    outer loop
-      vertex 131.000000 1.723220 25.043747
-      vertex 13.000000 1.000000 25.000000
-      vertex 12.925056 2.339040 25.151327
-    endloop
-  endfacet
-  facet normal 0.000371 0.000000 -1.000000
-    outer loop
-      vertex 131.000000 1.723220 25.043747
-      vertex 131.000000 0.276780 25.043747
-      vertex 13.000000 1.000000 25.000000
-    endloop
-  endfacet
-  facet normal -0.000189 0.315324 -0.948984
-    outer loop
-      vertex 131.000000 3.127629 25.389902
-      vertex 12.925056 2.339040 25.151327
-      vertex 12.751836 3.427831 25.513140
-    endloop
-  endfacet
-  facet normal -0.000181 0.534250 0.845326
-    outer loop
-      vertex 131.000000 4.408389 35.937904
-      vertex 12.425965 4.667058 35.748966
-      vertex 12.688570 3.716124 36.350018
-    endloop
-  endfacet
-  facet normal 0.000364 0.239315 -0.970942
-    outer loop
-      vertex 131.000000 3.127629 25.389902
-      vertex 131.000000 1.723220 25.043747
-      vertex 12.925056 2.339040 25.151327
-    endloop
-  endfacet
-  facet normal 0.000254 0.663123 0.748511
-    outer loop
-      vertex 131.000000 4.408389 35.937904
-      vertex 131.000000 5.491065 34.978737
-      vertex 12.425965 4.667058 35.748966
-    endloop
-  endfacet
-  facet normal -0.000294 0.354136 0.935194
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 12.688570 3.716124 36.350018
-      vertex 12.904691 2.509416 36.807037
-    endloop
-  endfacet
-  facet normal 0.000097 0.479567 -0.877505
-    outer loop
-      vertex 131.000000 4.408389 26.062098
-      vertex 12.751836 3.427831 25.513140
-      vertex 12.535419 4.306674 25.993414
-    endloop
-  endfacet
-  facet normal 0.000365 0.464722 0.885457
-    outer loop
-      vertex 131.000000 3.127629 36.610096
-      vertex 131.000000 4.408389 35.937904
-      vertex 12.688570 3.716124 36.350018
-    endloop
-  endfacet
-  facet normal -0.000068 0.613054 -0.790041
-    outer loop
-      vertex 131.000000 4.408389 26.062098
-      vertex 12.535419 4.306674 25.993414
-      vertex 12.303495 5.028771 26.553764
-    endloop
-  endfacet
-  facet normal 0.000257 0.464724 -0.885456
-    outer loop
-      vertex 131.000000 4.408389 26.062098
-      vertex 131.000000 3.127629 25.389902
-      vertex 12.751836 3.427831 25.513140
-    endloop
-  endfacet
-  facet normal -0.000094 0.722932 -0.690919
-    outer loop
-      vertex 131.000000 5.491065 27.021263
-      vertex 12.303495 5.028771 26.553764
-      vertex 12.073238 5.624218 27.176832
-    endloop
-  endfacet
-  facet normal 0.000365 0.663122 -0.748511
-    outer loop
-      vertex 131.000000 5.491065 27.021263
-      vertex 131.000000 4.408389 26.062098
-      vertex 12.303495 5.028771 26.553764
-    endloop
-  endfacet
-  facet normal 0.000041 0.192387 0.981319
-    outer loop
-      vertex 131.000000 1.723220 36.956253
-      vertex 12.904691 2.509416 36.807037
-      vertex 12.973638 1.794989 36.947098
-    endloop
-  endfacet
-  facet normal -0.000037 0.066396 0.997793
-    outer loop
-      vertex 131.000000 1.723220 36.956253
-      vertex 12.973638 1.794989 36.947098
-      vertex 13.000000 1.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000366 0.239317 0.970942
-    outer loop
-      vertex 131.000000 1.723220 36.956253
-      vertex 131.000000 3.127629 36.610096
-      vertex 12.904691 2.509416 36.807037
-    endloop
-  endfacet
-  facet normal 0.000123 0.825977 -0.563703
-    outer loop
-      vertex 131.000000 6.312736 28.211660
-      vertex 12.073238 5.624218 27.176832
-      vertex 11.792848 6.245421 28.087002
-    endloop
-  endfacet
-  facet normal -0.000107 0.919104 -0.394015
-    outer loop
-      vertex 131.000000 6.312736 28.211660
-      vertex 11.792848 6.245421 28.087002
-      vertex 11.545403 6.726647 29.209606
-    endloop
-  endfacet
-  facet normal -0.000320 -0.112281 0.993676
-    outer loop
-      vertex 131.000000 0.276780 36.956253
-      vertex 13.000000 1.000000 37.000000
-      vertex 12.925056 -0.339040 36.848671
-    endloop
-  endfacet
-  facet normal 0.000178 0.822984 -0.568065
-    outer loop
-      vertex 131.000000 6.312736 28.211660
-      vertex 131.000000 5.491065 27.021263
-      vertex 12.073238 5.624218 27.176832
-    endloop
-  endfacet
-  facet normal 0.000371 -0.000000 1.000000
-    outer loop
-      vertex 131.000000 0.276780 36.956253
-      vertex 131.000000 1.723220 36.956253
-      vertex 13.000000 1.000000 37.000000
-    endloop
-  endfacet
-  facet normal -0.000138 0.974208 -0.225651
-    outer loop
-      vertex 131.000000 6.825651 29.564106
-      vertex 11.545403 6.726647 29.209606
-      vertex 11.432029 6.930664 30.090483
-    endloop
-  endfacet
-  facet normal 0.000277 0.935016 -0.354605
-    outer loop
-      vertex 131.000000 6.825651 29.564106
-      vertex 131.000000 6.312736 28.211660
-      vertex 11.545403 6.726647 29.209606
-    endloop
-  endfacet
-  facet normal 0.000363 -0.239317 0.970942
-    outer loop
-      vertex 131.000000 -1.127629 36.610096
-      vertex 131.000000 0.276780 36.956253
-      vertex 12.925056 -0.339040 36.848671
-    endloop
-  endfacet
-  facet normal -0.000188 -0.315321 0.948985
-    outer loop
-      vertex 131.000000 -1.127629 36.610096
-      vertex 12.925056 -0.339040 36.848671
-      vertex 12.751836 -1.427831 36.486862
-    endloop
-  endfacet
-  facet normal 0.000000 0.997107 -0.076013
-    outer loop
-      vertex 131.000000 7.000000 31.000000
-      vertex 11.432029 6.930664 30.090483
-      vertex 11.392304 7.000000 31.000000
-    endloop
-  endfacet
-  facet normal 0.000341 0.992709 -0.120537
-    outer loop
-      vertex 131.000000 7.000000 31.000000
-      vertex 131.000000 6.825651 29.564106
-      vertex 11.432029 6.930664 30.090483
-    endloop
-  endfacet
-  facet normal 0.000257 -0.464722 0.885457
-    outer loop
-      vertex 131.000000 -2.408388 35.937904
-      vertex 131.000000 -1.127629 36.610096
-      vertex 12.751836 -1.427831 36.486862
-    endloop
-  endfacet
-  facet normal 0.000097 -0.479567 0.877505
-    outer loop
-      vertex 131.000000 -2.408388 35.937904
-      vertex 12.751836 -1.427831 36.486862
-      vertex 12.535419 -2.306674 36.006588
-    endloop
-  endfacet
-  facet normal -0.000068 -0.613055 0.790040
-    outer loop
-      vertex 131.000000 -2.408388 35.937904
-      vertex 12.535419 -2.306674 36.006588
-      vertex 12.303495 -3.028771 35.446236
-    endloop
-  endfacet
-  facet normal -0.000094 -0.722931 0.690920
-    outer loop
-      vertex 131.000000 -3.491065 34.978737
-      vertex 12.303495 -3.028771 35.446236
-      vertex 12.073238 -3.624218 34.823170
-    endloop
-  endfacet
-  facet normal 0.000365 -0.663123 0.748511
-    outer loop
-      vertex 131.000000 -3.491065 34.978737
-      vertex 131.000000 -2.408388 35.937904
-      vertex 12.303495 -3.028771 35.446236
-    endloop
-  endfacet
-  facet normal 0.000123 -0.825978 0.563703
-    outer loop
-      vertex 131.000000 -4.312736 33.788338
-      vertex 12.073238 -3.624218 34.823170
-      vertex 11.792848 -4.245421 33.912998
-    endloop
-  endfacet
-  facet normal -0.000107 -0.919104 0.394015
-    outer loop
-      vertex 131.000000 -4.312736 33.788338
-      vertex 11.792848 -4.245421 33.912998
-      vertex 11.545403 -4.726647 32.790394
-    endloop
-  endfacet
-  facet normal 0.000178 -0.822984 0.568064
-    outer loop
-      vertex 131.000000 -4.312736 33.788338
-      vertex 131.000000 -3.491065 34.978737
-      vertex 12.073238 -3.624218 34.823170
-    endloop
-  endfacet
-  facet normal -0.000222 -0.979996 0.199016
-    outer loop
-      vertex 131.000000 -4.825651 32.435894
-      vertex 11.545403 -4.726647 32.790394
-      vertex 11.408753 -4.971420 31.584927
-    endloop
-  endfacet
-  facet normal 0.000277 -0.935016 0.354605
-    outer loop
-      vertex 131.000000 -4.825651 32.435894
-      vertex 131.000000 -4.312736 33.788338
-      vertex 11.545403 -4.726647 32.790394
-    endloop
-  endfacet
-  facet normal -0.000136 -0.999777 0.021114
-    outer loop
-      vertex 131.000000 -5.000000 31.000000
-      vertex 11.408753 -4.971420 31.584927
-      vertex 11.397617 -4.990790 30.667681
-    endloop
-  endfacet
-  facet normal 0.000352 -0.992709 0.120537
-    outer loop
-      vertex 131.000000 -5.000000 31.000000
-      vertex 131.000000 -4.825651 32.435894
-      vertex 11.408753 -4.971420 31.584927
-    endloop
-  endfacet
-  facet normal 0.000145 -0.991166 -0.132629
-    outer loop
-      vertex 131.000000 -4.825651 29.564106
-      vertex 11.397617 -4.990790 30.667681
-      vertex 11.467756 -4.867373 29.745436
-    endloop
-  endfacet
-  facet normal -0.000095 -0.958956 -0.283556
-    outer loop
-      vertex 131.000000 -4.825651 29.564106
-      vertex 11.467756 -4.867373 29.745436
-      vertex 11.609928 -4.606196 28.862112
-    endloop
-  endfacet
-  facet normal 0.000258 -0.992709 -0.120537
-    outer loop
-      vertex 131.000000 -4.825651 29.564106
-      vertex 131.000000 -5.000000 31.000000
-      vertex 11.397617 -4.990790 30.667681
-    endloop
-  endfacet
-  facet normal -0.000103 -0.904303 -0.426892
-    outer loop
-      vertex 131.000000 -4.312736 28.211660
-      vertex 11.609928 -4.606196 28.862112
-      vertex 11.808237 -4.213636 28.030489
-    endloop
-  endfacet
-  facet normal 0.000164 -0.827892 -0.560887
-    outer loop
-      vertex 131.000000 -4.312736 28.211660
-      vertex 11.808237 -4.213636 28.030489
-      vertex 12.045211 -3.690770 27.258787
-    endloop
-  endfacet
-  facet normal 0.000366 -0.935016 -0.354605
-    outer loop
-      vertex 131.000000 -4.312736 28.211660
-      vertex 131.000000 -4.825651 29.564106
-      vertex 11.609928 -4.606196 28.862112
-    endloop
-  endfacet
-  facet normal 0.997065 0.076549 -0.001150
-    outer loop
-      vertex 12.925056 2.339040 25.151327
-      vertex 13.000000 1.000000 1.000000
-      vertex 12.859365 2.831791 1.000000
-    endloop
-  endfacet
-  facet normal 0.998437 0.055881 0.000000
-    outer loop
-      vertex 12.925056 2.339040 25.151327
-      vertex 13.000000 1.000000 25.000000
-      vertex 13.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.999451 0.033143 0.000000
-    outer loop
-      vertex 13.000000 1.000000 61.000000
-      vertex 13.000000 1.000000 37.000000
-      vertex 12.973638 1.794989 36.947098
-    endloop
-  endfacet
-  facet normal 0.973695 0.227853 -0.001269
-    outer loop
-      vertex 12.751836 3.427831 25.513140
-      vertex 12.859365 2.831791 1.000000
-      vertex 12.440757 4.620647 1.000000
-    endloop
-  endfacet
-  facet normal 0.987606 0.156951 0.000516
-    outer loop
-      vertex 12.751836 3.427831 25.513140
-      vertex 12.925056 2.339040 25.151327
-      vertex 12.859365 2.831791 1.000000
-    endloop
-  endfacet
-  facet normal 0.970908 0.239453 -0.000669
-    outer loop
-      vertex 12.535419 4.306674 25.993414
-      vertex 12.751836 3.427831 25.513140
-      vertex 12.440757 4.620647 1.000000
-    endloop
-  endfacet
-  facet normal 0.997065 0.076549 0.001437
-    outer loop
-      vertex 12.859365 2.831791 61.000000
-      vertex 13.000000 1.000000 61.000000
-      vertex 12.973638 1.794989 36.947098
-    endloop
-  endfacet
-  facet normal 0.984370 0.176110 -0.000502
-    outer loop
-      vertex 12.859365 2.831791 61.000000
-      vertex 12.904691 2.509416 36.807037
-      vertex 12.688570 3.716124 36.350018
-    endloop
-  endfacet
-  facet normal 0.995364 0.096174 0.000583
-    outer loop
-      vertex 12.859365 2.831791 61.000000
-      vertex 12.973638 1.794989 36.947098
-      vertex 12.904691 2.509416 36.807037
-    endloop
-  endfacet
-  facet normal 0.952150 0.305632 0.000233
-    outer loop
-      vertex 12.303495 5.028771 26.553764
-      vertex 12.535419 4.306674 25.993414
-      vertex 12.440757 4.620647 1.000000
-    endloop
-  endfacet
-  facet normal 0.927502 0.373817 -0.001309
-    outer loop
-      vertex 12.073238 5.624218 27.176832
-      vertex 12.440757 4.620647 1.000000
-      vertex 11.753986 6.324638 1.000000
-    endloop
-  endfacet
-  facet normal 0.932425 0.361364 -0.000763
-    outer loop
-      vertex 12.073238 5.624218 27.176832
-      vertex 12.303495 5.028771 26.553764
-      vertex 12.440757 4.620647 1.000000
-    endloop
-  endfacet
-  facet normal 0.941337 0.337467 0.000069
-    outer loop
-      vertex 12.440757 4.620647 61.000000
-      vertex 12.425965 4.667058 35.748966
-      vertex 12.153856 5.426228 35.050739
-    endloop
-  endfacet
-  facet normal 0.963933 0.266146 -0.000075
-    outer loop
-      vertex 12.440757 4.620647 61.000000
-      vertex 12.688570 3.716124 36.350018
-      vertex 12.425965 4.667058 35.748966
-    endloop
-  endfacet
-  facet normal 0.973694 0.227853 0.001428
-    outer loop
-      vertex 12.440757 4.620647 61.000000
-      vertex 12.859365 2.831791 61.000000
-      vertex 12.688570 3.716124 36.350018
-    endloop
-  endfacet
-  facet normal 0.911398 0.411527 -0.000104
-    outer loop
-      vertex 11.792848 6.245421 28.087002
-      vertex 12.073238 5.624218 27.176832
-      vertex 11.753986 6.324638 1.000000
-    endloop
-  endfacet
-  facet normal 0.889378 0.457173 0.000061
-    outer loop
-      vertex 11.545403 6.726647 29.209606
-      vertex 11.792848 6.245421 28.087002
-      vertex 11.753986 6.324638 1.000000
-    endloop
-  endfacet
-  facet normal 0.873203 0.487356 -0.000489
-    outer loop
-      vertex 11.432029 6.930664 30.090483
-      vertex 11.545403 6.726647 29.209606
-      vertex 11.753986 6.324638 1.000000
-    endloop
-  endfacet
-  facet normal 0.859569 0.511018 -0.001133
-    outer loop
-      vertex 11.432029 6.930664 30.090483
-      vertex 11.753986 6.324638 1.000000
-      vertex 10.815152 7.903824 1.000000
-    endloop
-  endfacet
-  facet normal 0.860696 0.509118 -0.001220
-    outer loop
-      vertex 11.392304 7.000000 31.000000
-      vertex 11.432029 6.930664 30.090483
-      vertex 10.815152 7.903824 1.000000
-    endloop
-  endfacet
-  facet normal 0.881462 0.472256 0.000143
-    outer loop
-      vertex 11.753986 6.324638 61.000000
-      vertex 11.685072 6.461616 33.484100
-      vertex 11.470512 6.862455 32.277348
-    endloop
-  endfacet
-  facet normal 0.899484 0.436954 -0.000078
-    outer loop
-      vertex 11.753986 6.324638 61.000000
-      vertex 11.896806 6.025896 34.277252
-      vertex 11.685072 6.461616 33.484100
-    endloop
-  endfacet
-  facet normal 0.918883 0.394529 0.000500
-    outer loop
-      vertex 11.753986 6.324638 61.000000
-      vertex 12.153856 5.426228 35.050739
-      vertex 11.896806 6.025896 34.277252
-    endloop
-  endfacet
-  facet normal 0.927501 0.373817 0.001350
-    outer loop
-      vertex 11.753986 6.324638 61.000000
-      vertex 12.440757 4.620647 61.000000
-      vertex 12.153856 5.426228 35.050739
-    endloop
-  endfacet
-  facet normal 0.842819 0.538197 0.000000
-    outer loop
-      vertex 10.815152 7.903824 61.000000
-      vertex 11.392304 7.000000 31.000000
-      vertex 10.815152 7.903824 1.000000
-    endloop
-  endfacet
-  facet normal 0.863566 0.504234 0.001422
-    outer loop
-      vertex 10.815152 7.903824 61.000000
-      vertex 11.470512 6.862455 32.277348
-      vertex 11.392304 7.000000 31.000000
-    endloop
-  endfacet
-  facet normal 0.859569 0.511018 0.001085
-    outer loop
-      vertex 10.815152 7.903824 61.000000
-      vertex 11.753986 6.324638 61.000000
-      vertex 11.470512 6.862455 32.277348
-    endloop
-  endfacet
-  facet normal 0.771489 0.636242 0.000000
-    outer loop
-      vertex 9.646259 9.321190 61.000000
-      vertex 10.815152 7.903824 61.000000
-      vertex 10.815152 7.903824 1.000000
-    endloop
-  endfacet
-  facet normal 0.771489 0.636242 0.000000
-    outer loop
-      vertex 9.646259 9.321190 61.000000
-      vertex 10.815152 7.903824 1.000000
-      vertex 9.646259 9.321190 1.000000
-    endloop
-  endfacet
-  facet normal 0.665326 0.746553 0.000000
-    outer loop
-      vertex 8.274705 10.543514 61.000000
-      vertex 9.646259 9.321190 1.000000
-      vertex 8.274705 10.543514 1.000000
-    endloop
-  endfacet
-  facet normal 0.665326 0.746553 0.000000
-    outer loop
-      vertex 8.274705 10.543514 61.000000
-      vertex 9.646259 9.321190 61.000000
-      vertex 9.646259 9.321190 1.000000
-    endloop
-  endfacet
-  facet normal 0.543567 0.839365 0.000000
-    outer loop
-      vertex 8.274705 10.543514 61.000000
-      vertex 8.274705 10.543514 1.000000
-      vertex 6.732638 11.542147 1.000000
-    endloop
-  endfacet
-  facet normal 0.543567 0.839365 0.000000
-    outer loop
-      vertex 6.732638 11.542147 61.000000
-      vertex 8.274705 10.543514 61.000000
-      vertex 6.732638 11.542147 1.000000
-    endloop
-  endfacet
-  facet normal 0.409069 0.912504 0.000000
-    outer loop
-      vertex 5.056202 12.293680 61.000000
-      vertex 6.732638 11.542147 1.000000
-      vertex 5.056202 12.293680 1.000000
-    endloop
-  endfacet
-  facet normal 0.409069 0.912504 0.000000
-    outer loop
-      vertex 5.056202 12.293680 61.000000
-      vertex 6.732638 11.542147 61.000000
-      vertex 6.732638 11.542147 1.000000
-    endloop
-  endfacet
-  facet normal 0.264982 0.964253 0.000000
-    outer loop
-      vertex 3.284693 12.780499 61.000000
-      vertex 5.056202 12.293680 1.000000
-      vertex 3.284693 12.780499 1.000000
-    endloop
-  endfacet
-  facet normal 0.264982 0.964253 0.000000
-    outer loop
-      vertex 3.284693 12.780499 61.000000
-      vertex 5.056202 12.293680 61.000000
-      vertex 5.056202 12.293680 1.000000
-    endloop
-  endfacet
-  facet normal 0.114683 0.993402 0.000000
-    outer loop
-      vertex 1.459633 12.991194 61.000000
-      vertex 3.284693 12.780499 1.000000
-      vertex 1.459633 12.991194 1.000000
-    endloop
-  endfacet
-  facet normal 0.114683 0.993402 0.000000
-    outer loop
-      vertex 1.459633 12.991194 61.000000
-      vertex 3.284693 12.780499 61.000000
-      vertex 3.284693 12.780499 1.000000
-    endloop
-  endfacet
-  facet normal -0.038303 0.999266 0.000000
-    outer loop
-      vertex -0.376201 12.920825 61.000000
-      vertex 1.459633 12.991194 1.000000
-      vertex -0.376201 12.920825 1.000000
-    endloop
-  endfacet
-  facet normal -0.038303 0.999266 0.000000
-    outer loop
-      vertex -0.376201 12.920825 61.000000
-      vertex 1.459633 12.991194 61.000000
-      vertex 1.459633 12.991194 1.000000
-    endloop
-  endfacet
-  facet normal -0.190391 0.981708 0.000000
-    outer loop
-      vertex -2.179778 12.571042 61.000000
-      vertex -0.376201 12.920825 1.000000
-      vertex -2.179778 12.571042 1.000000
-    endloop
-  endfacet
-  facet normal -0.190391 0.981708 0.000000
-    outer loop
-      vertex -2.179778 12.571042 61.000000
-      vertex -0.376201 12.920825 61.000000
-      vertex -0.376201 12.920825 1.000000
-    endloop
-  endfacet
-  facet normal -0.338017 0.941140 0.000000
-    outer loop
-      vertex -3.908824 11.950044 61.000000
-      vertex -2.179778 12.571042 1.000000
-      vertex -3.908824 11.950044 1.000000
-    endloop
-  endfacet
-  facet normal -0.338017 0.941140 0.000000
-    outer loop
-      vertex -3.908824 11.950044 61.000000
-      vertex -2.179778 12.571042 61.000000
-      vertex -2.179778 12.571042 1.000000
-    endloop
-  endfacet
-  facet normal -0.477720 0.878512 0.000000
-    outer loop
-      vertex -5.522810 11.072385 61.000000
-      vertex -3.908824 11.950044 1.000000
-      vertex -5.522810 11.072385 1.000000
-    endloop
-  endfacet
-  facet normal -0.477720 0.878512 0.000000
-    outer loop
-      vertex -5.522810 11.072385 61.000000
-      vertex -3.908824 11.950044 61.000000
-      vertex -3.908824 11.950044 1.000000
-    endloop
-  endfacet
-  facet normal -0.720521 0.693432 -0.000907
-    outer loop
-      vertex -7.944272 9.000000 31.000000
-      vertex -6.983908 9.958638 1.000000
-      vertex -8.257870 8.634910 1.000000
-    endloop
-  endfacet
-  facet normal -0.746770 0.665082 -0.000288
-    outer loop
-      vertex -8.023660 8.910345 29.805666
-      vertex -7.944272 9.000000 31.000000
-      vertex -8.257870 8.634910 1.000000
-    endloop
-  endfacet
-  facet normal -0.606225 0.795293 0.000000
-    outer loop
-      vertex -6.983908 9.958638 61.000000
-      vertex -5.522810 11.072385 1.000000
-      vertex -6.983908 9.958638 1.000000
-    endloop
-  endfacet
-  facet normal -0.606225 0.795293 0.000000
-    outer loop
-      vertex -6.983908 9.958638 61.000000
-      vertex -5.522810 11.072385 61.000000
-      vertex -5.522810 11.072385 1.000000
-    endloop
-  endfacet
-  facet normal -0.706471 0.707742 0.000000
-    outer loop
-      vertex -6.983908 9.958638 61.000000
-      vertex -6.983908 9.958638 1.000000
-      vertex -7.944272 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.761081 0.648657 -0.000014
-    outer loop
-      vertex -8.241260 8.655006 28.676022
-      vertex -8.023660 8.910345 29.805666
-      vertex -8.257870 8.634910 1.000000
-    endloop
-  endfacet
-  facet normal -0.784851 0.619684 0.000021
-    outer loop
-      vertex -8.589377 8.214142 27.542231
-      vertex -8.241260 8.655006 28.676022
-      vertex -8.257870 8.634910 1.000000
-    endloop
-  endfacet
-  facet normal -0.817929 0.575318 -0.001176
-    outer loop
-      vertex -9.014555 7.611255 26.495411
-      vertex -8.257870 8.634910 1.000000
-      vertex -9.314836 7.132224 1.000000
-    endloop
-  endfacet
-  facet normal -0.816364 0.577536 -0.001041
-    outer loop
-      vertex -9.014555 7.611255 26.495411
-      vertex -8.589377 8.214142 27.542231
-      vertex -8.257870 8.634910 1.000000
-    endloop
-  endfacet
-  facet normal -0.749474 0.662033 0.000222
-    outer loop
-      vertex -8.257870 8.634910 61.000000
-      vertex -7.944272 9.000000 31.000000
-      vertex -8.070408 8.856698 32.507416
-    endloop
-  endfacet
-  facet normal -0.770060 0.637972 -0.000100
-    outer loop
-      vertex -8.257870 8.634910 61.000000
-      vertex -8.070408 8.856698 32.507416
-      vertex -8.402561 8.455994 33.899681
-    endloop
-  endfacet
-  facet normal -0.802980 0.596006 0.000352
-    outer loop
-      vertex -8.257870 8.634910 61.000000
-      vertex -8.402561 8.455994 33.899681
-      vertex -8.866960 7.829576 35.166161
-    endloop
-  endfacet
-  facet normal -0.720521 0.693432 0.000907
-    outer loop
-      vertex -8.257870 8.634910 61.000000
-      vertex -6.983908 9.958638 61.000000
-      vertex -7.944272 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.854805 0.518950 0.000317
-    outer loop
-      vertex -9.482093 6.841722 25.534264
-      vertex -9.014555 7.611255 26.495411
-      vertex -9.314836 7.132224 1.000000
-    endloop
-  endfacet
-  facet normal -0.896165 0.443720 -0.001060
-    outer loop
-      vertex -9.963696 5.878253 24.659445
-      vertex -9.314836 7.132224 1.000000
-      vertex -10.130030 5.485805 1.000000
-    endloop
-  endfacet
-  facet normal -0.894187 0.447693 -0.000795
-    outer loop
-      vertex -9.963696 5.878253 24.659445
-      vertex -9.482093 6.841722 25.534264
-      vertex -9.314836 7.132224 1.000000
-    endloop
-  endfacet
-  facet normal -0.845571 0.533863 -0.000249
-    outer loop
-      vertex -9.314836 7.132224 61.000000
-      vertex -8.866960 7.829576 35.166161
-      vertex -9.405215 6.977583 36.316814
-    endloop
-  endfacet
-  facet normal -0.817928 0.575318 0.001350
-    outer loop
-      vertex -9.314836 7.132224 61.000000
-      vertex -8.257870 8.634910 61.000000
-      vertex -8.866960 7.829576 35.166161
-    endloop
-  endfacet
-  facet normal -0.891613 0.452798 0.000428
-    outer loop
-      vertex -9.968540 5.867354 37.348927
-      vertex -9.314836 7.132224 61.000000
-      vertex -9.405215 6.977583 36.316814
-    endloop
-  endfacet
-  facet normal -0.953395 0.301720 -0.001450
-    outer loop
-      vertex -10.374597 4.823421 23.972807
-      vertex -10.130030 5.485805 1.000000
-      vertex -10.684345 3.734242 1.000000
-    endloop
-  endfacet
-  facet normal -0.931917 0.362671 0.000536
-    outer loop
-      vertex -10.374597 4.823421 23.972807
-      vertex -9.963696 5.878253 24.659445
-      vertex -10.130030 5.485805 1.000000
-    endloop
-  endfacet
-  facet normal -0.960186 0.279362 -0.000299
-    outer loop
-      vertex -10.651127 3.872498 23.533491
-      vertex -10.374597 4.823421 23.972807
-      vertex -10.684345 3.734242 1.000000
-    endloop
-  endfacet
-  facet normal -0.938332 0.345735 -0.000829
-    outer loop
-      vertex -10.130030 5.485805 61.000000
-      vertex -9.968540 5.867354 37.348927
-      vertex -10.501171 4.423895 38.230278
-    endloop
-  endfacet
-  facet normal -0.896165 0.443720 0.001039
-    outer loop
-      vertex -10.130030 5.485805 61.000000
-      vertex -9.314836 7.132224 61.000000
-      vertex -9.968540 5.867354 37.348927
-    endloop
-  endfacet
-  facet normal -0.988279 0.152649 -0.001582
-    outer loop
-      vertex -10.853421 2.869869 23.221594
-      vertex -10.684345 3.734242 1.000000
-      vertex -10.964789 1.918591 1.000000
-    endloop
-  endfacet
-  facet normal -0.980261 0.197709 0.000232
-    outer loop
-      vertex -10.853421 2.869869 23.221594
-      vertex -10.651127 3.872498 23.533491
-      vertex -10.684345 3.734242 1.000000
-    endloop
-  endfacet
-  facet normal -0.993789 0.111277 0.000217
-    outer loop
-      vertex -10.973373 1.798958 23.039995
-      vertex -10.853421 2.869869 23.221594
-      vertex -10.964789 1.918591 1.000000
-    endloop
-  endfacet
-  facet normal -0.953395 0.301720 0.001469
-    outer loop
-      vertex -10.684345 3.734242 61.000000
-      vertex -10.130030 5.485805 61.000000
-      vertex -10.501171 4.423895 38.230278
-    endloop
-  endfacet
-  facet normal -0.973957 0.226732 -0.000968
-    outer loop
-      vertex -10.684345 3.734242 61.000000
-      vertex -10.501171 4.423895 38.230278
-      vertex -10.829480 3.015787 38.741875
-    endloop
-  endfacet
-  facet normal -0.999961 0.008863 -0.000341
-    outer loop
-      vertex -10.985648 0.413291 23.021544
-      vertex -10.973373 1.798958 23.039995
-      vertex -10.964789 1.918591 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000947
-    outer loop
-      vertex -10.985648 0.413291 23.021544
-      vertex -10.964789 1.918591 1.000000
-      vertex -10.964789 0.081409 1.000000
-    endloop
-  endfacet
-  facet normal -0.988279 0.152649 0.001517
-    outer loop
-      vertex -10.964789 1.918591 61.000000
-      vertex -10.684345 3.734242 61.000000
-      vertex -10.829480 3.015787 38.741875
-    endloop
-  endfacet
-  facet normal -0.994316 0.106462 -0.000797
-    outer loop
-      vertex -10.964789 1.918591 61.000000
-      vertex -10.829480 3.015787 38.741875
-      vertex -10.987958 1.537464 38.981926
-    endloop
-  endfacet
-  facet normal -0.994792 -0.101926 0.000594
-    outer loop
-      vertex -10.855250 -0.858236 23.218807
-      vertex -10.985648 0.413291 23.021544
-      vertex -10.964789 0.081409 1.000000
-    endloop
-  endfacet
-  facet normal -0.988279 -0.152649 -0.001583
-    outer loop
-      vertex -10.855250 -0.858236 23.218807
-      vertex -10.964789 0.081409 1.000000
-      vertex -10.684345 -1.734242 1.000000
-    endloop
-  endfacet
-  facet normal -0.999999 0.000000 0.001052
-    outer loop
-      vertex -10.964789 0.081409 61.000000
-      vertex -10.964789 1.918591 61.000000
-      vertex -10.987958 1.537464 38.981926
-    endloop
-  endfacet
-  facet normal -0.999972 -0.007519 0.000555
-    outer loop
-      vertex -10.964789 0.081409 61.000000
-      vertex -10.987958 1.537464 38.981926
-      vertex -10.978530 0.282484 38.967758
-    endloop
-  endfacet
-  facet normal -0.994802 -0.101828 -0.000309
-    outer loop
-      vertex -10.964789 0.081409 61.000000
-      vertex -10.978530 0.282484 38.967758
-      vertex -10.875323 -0.725314 38.811741
-    endloop
-  endfacet
-  facet normal -0.977250 -0.212090 0.000845
-    outer loop
-      vertex -10.557199 -2.229729 23.680925
-      vertex -10.855250 -0.858236 23.218807
-      vertex -10.684345 -1.734242 1.000000
-    endloop
-  endfacet
-  facet normal -0.953396 -0.301720 -0.001247
-    outer loop
-      vertex -10.130030 -3.485805 1.000000
-      vertex -10.557199 -2.229729 23.680925
-      vertex -10.684345 -1.734242 1.000000
-    endloop
-  endfacet
-  facet normal -0.948898 -0.315582 -0.000394
-    outer loop
-      vertex -10.191252 -3.330807 24.273626
-      vertex -10.557199 -2.229729 23.680925
-      vertex -10.130030 -3.485805 1.000000
-    endloop
-  endfacet
-  facet normal -0.981512 -0.191401 -0.000255
-    outer loop
-      vertex -10.684345 -1.734242 61.000000
-      vertex -10.875323 -0.725314 38.811741
-      vertex -10.653047 -1.864698 38.469505
-    endloop
-  endfacet
-  facet normal -0.988279 -0.152649 0.001565
-    outer loop
-      vertex -10.684345 -1.734242 61.000000
-      vertex -10.964789 0.081409 61.000000
-      vertex -10.875323 -0.725314 38.811741
-    endloop
-  endfacet
-  facet normal -0.959093 -0.283090 0.000307
-    outer loop
-      vertex -10.341965 -2.919164 37.974251
-      vertex -10.684345 -1.734242 61.000000
-      vertex -10.653047 -1.864698 38.469505
-    endloop
-  endfacet
-  facet normal -0.916637 -0.399720 0.000251
-    outer loop
-      vertex -9.786845 -4.257754 24.970406
-      vertex -10.191252 -3.330807 24.273626
-      vertex -10.130030 -3.485805 1.000000
-    endloop
-  endfacet
-  facet normal -0.896165 -0.443719 -0.001459
-    outer loop
-      vertex -9.786845 -4.257754 24.970406
-      vertex -10.130030 -3.485805 1.000000
-      vertex -9.314836 -5.132224 1.000000
-    endloop
-  endfacet
-  facet normal -0.927306 -0.374303 -0.000676
-    outer loop
-      vertex -10.130030 -3.485805 61.000000
-      vertex -10.341965 -2.919164 37.974251
-      vertex -9.880194 -4.061757 37.195049
-    endloop
-  endfacet
-  facet normal -0.953396 -0.301720 0.001350
-    outer loop
-      vertex -10.130030 -3.485805 61.000000
-      vertex -10.684345 -1.734242 61.000000
-      vertex -10.341965 -2.919164 37.974251
-    endloop
-  endfacet
-  facet normal -0.877659 -0.479286 0.000203
-    outer loop
-      vertex -9.252076 -5.236581 25.989506
-      vertex -9.786845 -4.257754 24.970406
-      vertex -9.314836 -5.132224 1.000000
-    endloop
-  endfacet
-  facet normal -0.817928 -0.575318 -0.001329
-    outer loop
-      vertex -8.751478 -5.993474 27.115244
-      vertex -9.314836 -5.132224 1.000000
-      vertex -8.257870 -6.634909 1.000000
-    endloop
-  endfacet
-  facet normal -0.833934 -0.551865 -0.000210
-    outer loop
-      vertex -8.751478 -5.993474 27.115244
-      vertex -9.252076 -5.236581 25.989506
-      vertex -9.314836 -5.132224 1.000000
-    endloop
-  endfacet
-  facet normal -0.885356 -0.464913 0.000121
-    outer loop
-      vertex -9.314836 -5.132224 61.000000
-      vertex -9.880194 -4.061757 37.195049
-      vertex -9.345053 -5.081109 36.198086
-    endloop
-  endfacet
-  facet normal -0.841635 -0.540048 -0.000088
-    outer loop
-      vertex -9.314836 -5.132224 61.000000
-      vertex -9.345053 -5.081109 36.198086
-      vertex -8.837354 -5.872151 35.095551
-    endloop
-  endfacet
-  facet normal -0.896165 -0.443719 0.001330
-    outer loop
-      vertex -9.314836 -5.132224 61.000000
-      vertex -10.130030 -3.485805 61.000000
-      vertex -9.880194 -4.061757 37.195049
-    endloop
-  endfacet
-  facet normal -0.795211 -0.606333 -0.000138
-    outer loop
-      vertex -8.329084 -6.547727 28.348244
-      vertex -8.751478 -5.993474 27.115244
-      vertex -8.257870 -6.634909 1.000000
-    endloop
-  endfacet
-  facet normal -0.765583 -0.643337 0.000057
-    outer loop
-      vertex -8.039007 -6.892804 29.694763
-      vertex -8.329084 -6.547727 28.348244
-      vertex -8.257870 -6.634909 1.000000
-    endloop
-  endfacet
-  facet normal -0.720521 -0.693432 -0.000901
-    outer loop
-      vertex -7.945369 -6.998773 31.140100
-      vertex -8.257870 -6.634909 1.000000
-      vertex -6.983908 -7.958639 1.000000
-    endloop
-  endfacet
-  facet normal -0.747545 -0.664211 -0.000268
-    outer loop
-      vertex -7.945369 -6.998773 31.140100
-      vertex -8.039007 -6.892804 29.694763
-      vertex -8.257870 -6.634909 1.000000
-    endloop
-  endfacet
-  facet normal -0.801571 -0.597900 0.000326
-    outer loop
-      vertex -8.257870 -6.634909 61.000000
-      vertex -8.837354 -5.872151 35.095551
-      vertex -8.399053 -6.460416 33.888287
-    endloop
-  endfacet
-  facet normal -0.770308 -0.637672 -0.000093
-    outer loop
-      vertex -8.257870 -6.634909 61.000000
-      vertex -8.399053 -6.460416 33.888287
-      vertex -8.080567 -6.844954 32.567387
-    endloop
-  endfacet
-  facet normal -0.750153 -0.661264 0.000207
-    outer loop
-      vertex -8.257870 -6.634909 61.000000
-      vertex -8.080567 -6.844954 32.567387
-      vertex -7.945369 -6.998773 31.140100
-    endloop
-  endfacet
-  facet normal -0.817928 -0.575318 0.001357
-    outer loop
-      vertex -8.257870 -6.634909 61.000000
-      vertex -9.314836 -5.132224 61.000000
-      vertex -8.837354 -5.872151 35.095551
-    endloop
-  endfacet
-  facet normal -0.720521 -0.693432 0.000909
-    outer loop
-      vertex -6.983908 -7.958639 61.000000
-      vertex -8.257870 -6.634909 61.000000
-      vertex -7.945369 -6.998773 31.140100
-    endloop
-  endfacet
-  facet normal -0.706519 -0.707694 -0.000000
-    outer loop
-      vertex -6.983908 -7.958639 61.000000
-      vertex -7.945369 -6.998773 31.140100
-      vertex -6.983908 -7.958639 1.000000
-    endloop
-  endfacet
-  facet normal -0.606225 -0.795293 -0.000000
-    outer loop
-      vertex -5.522810 -9.072385 61.000000
-      vertex -6.983908 -7.958639 1.000000
-      vertex -5.522810 -9.072385 1.000000
-    endloop
-  endfacet
-  facet normal -0.606225 -0.795293 0.000000
-    outer loop
-      vertex -5.522810 -9.072385 61.000000
-      vertex -6.983908 -7.958639 61.000000
-      vertex -6.983908 -7.958639 1.000000
-    endloop
-  endfacet
-  facet normal -0.477720 -0.878512 -0.000000
-    outer loop
-      vertex -3.908824 -9.950044 61.000000
-      vertex -5.522810 -9.072385 1.000000
-      vertex -3.908824 -9.950044 1.000000
-    endloop
-  endfacet
-  facet normal -0.477720 -0.878512 0.000000
-    outer loop
-      vertex -3.908824 -9.950044 61.000000
-      vertex -5.522810 -9.072385 61.000000
-      vertex -5.522810 -9.072385 1.000000
-    endloop
-  endfacet
-  facet normal -0.338017 -0.941140 -0.000000
-    outer loop
-      vertex -2.179778 -10.571042 61.000000
-      vertex -3.908824 -9.950044 1.000000
-      vertex -2.179778 -10.571042 1.000000
-    endloop
-  endfacet
-  facet normal -0.338017 -0.941140 0.000000
-    outer loop
-      vertex -2.179778 -10.571042 61.000000
-      vertex -3.908824 -9.950044 61.000000
-      vertex -3.908824 -9.950044 1.000000
-    endloop
-  endfacet
-  facet normal -0.190391 -0.981708 -0.000000
-    outer loop
-      vertex -0.376201 -10.920825 61.000000
-      vertex -2.179778 -10.571042 1.000000
-      vertex -0.376201 -10.920825 1.000000
-    endloop
-  endfacet
-  facet normal -0.190391 -0.981708 0.000000
-    outer loop
-      vertex -0.376201 -10.920825 61.000000
-      vertex -2.179778 -10.571042 61.000000
-      vertex -2.179778 -10.571042 1.000000
-    endloop
-  endfacet
-  facet normal -0.038303 -0.999266 -0.000000
-    outer loop
-      vertex 1.459633 -10.991194 61.000000
-      vertex -0.376201 -10.920825 1.000000
-      vertex 1.459633 -10.991194 1.000000
-    endloop
-  endfacet
-  facet normal -0.038303 -0.999266 0.000000
-    outer loop
-      vertex 1.459633 -10.991194 61.000000
-      vertex -0.376201 -10.920825 61.000000
-      vertex -0.376201 -10.920825 1.000000
-    endloop
-  endfacet
-  facet normal 0.114683 -0.993402 0.000000
-    outer loop
-      vertex 3.284693 -10.780499 61.000000
-      vertex 1.459633 -10.991194 61.000000
-      vertex 1.459633 -10.991194 1.000000
-    endloop
-  endfacet
-  facet normal 0.114683 -0.993402 0.000000
-    outer loop
-      vertex 3.284693 -10.780499 61.000000
-      vertex 1.459633 -10.991194 1.000000
-      vertex 3.284693 -10.780499 1.000000
-    endloop
-  endfacet
-  facet normal 0.264982 -0.964253 0.000000
-    outer loop
-      vertex 5.056202 -10.293680 61.000000
-      vertex 3.284693 -10.780499 61.000000
-      vertex 3.284693 -10.780499 1.000000
-    endloop
-  endfacet
-  facet normal 0.264982 -0.964253 0.000000
-    outer loop
-      vertex 5.056202 -10.293680 61.000000
-      vertex 3.284693 -10.780499 1.000000
-      vertex 5.056202 -10.293680 1.000000
-    endloop
-  endfacet
-  facet normal 0.409069 -0.912504 0.000000
-    outer loop
-      vertex 6.732638 -9.542147 61.000000
-      vertex 5.056202 -10.293680 61.000000
-      vertex 5.056202 -10.293680 1.000000
-    endloop
-  endfacet
-  facet normal 0.409069 -0.912504 0.000000
-    outer loop
-      vertex 6.732638 -9.542147 61.000000
-      vertex 5.056202 -10.293680 1.000000
-      vertex 6.732638 -9.542147 1.000000
-    endloop
-  endfacet
-  facet normal 0.543567 -0.839365 0.000000
-    outer loop
-      vertex 8.274705 -8.543514 61.000000
-      vertex 6.732638 -9.542147 61.000000
-      vertex 6.732638 -9.542147 1.000000
-    endloop
-  endfacet
-  facet normal 0.543567 -0.839365 0.000000
-    outer loop
-      vertex 8.274705 -8.543514 61.000000
-      vertex 6.732638 -9.542147 1.000000
-      vertex 8.274705 -8.543514 1.000000
-    endloop
-  endfacet
-  facet normal 0.665326 -0.746553 0.000000
-    outer loop
-      vertex 9.646259 -7.321190 61.000000
-      vertex 8.274705 -8.543514 61.000000
-      vertex 8.274705 -8.543514 1.000000
-    endloop
-  endfacet
-  facet normal 0.665326 -0.746553 0.000000
-    outer loop
-      vertex 9.646259 -7.321190 61.000000
-      vertex 8.274705 -8.543514 1.000000
-      vertex 9.646259 -7.321190 1.000000
-    endloop
-  endfacet
-  facet normal 0.864531 -0.502578 -0.001506
-    outer loop
-      vertex 11.467756 -4.867373 29.745436
-      vertex 11.397617 -4.990790 30.667681
-      vertex 10.815152 -5.903824 1.000000
-    endloop
-  endfacet
-  facet normal 0.859569 -0.511018 -0.001089
-    outer loop
-      vertex 11.467756 -4.867373 29.745436
-      vertex 10.815152 -5.903824 1.000000
-      vertex 11.753986 -4.324638 1.000000
-    endloop
-  endfacet
-  facet normal 0.877876 -0.478887 -0.000300
-    outer loop
-      vertex 11.609928 -4.606196 28.862112
-      vertex 11.467756 -4.867373 29.745436
-      vertex 11.753986 -4.324638 1.000000
-    endloop
-  endfacet
-  facet normal 0.852959 -0.521978 0.000667
-    outer loop
-      vertex 10.815152 -5.903824 61.000000
-      vertex 11.397617 -4.990790 30.667681
-      vertex 11.408753 -4.971420 31.584927
-    endloop
-  endfacet
-  facet normal 0.771489 -0.636242 0.000000
-    outer loop
-      vertex 10.815152 -5.903824 61.000000
-      vertex 9.646259 -7.321190 61.000000
-      vertex 9.646259 -7.321190 1.000000
-    endloop
-  endfacet
-  facet normal 0.843057 -0.537824 0.000000
-    outer loop
-      vertex 10.815152 -5.903824 61.000000
-      vertex 10.815152 -5.903824 1.000000
-      vertex 11.397617 -4.990790 30.667681
-    endloop
-  endfacet
-  facet normal 0.771489 -0.636242 0.000000
-    outer loop
-      vertex 10.815152 -5.903824 61.000000
-      vertex 9.646259 -7.321190 1.000000
-      vertex 10.815152 -5.903824 1.000000
-    endloop
-  endfacet
-  facet normal 0.892625 -0.450800 0.000060
-    outer loop
-      vertex 11.808237 -4.213636 28.030489
-      vertex 11.609928 -4.606196 28.862112
-      vertex 11.753986 -4.324638 1.000000
-    endloop
-  endfacet
-  facet normal 0.910747 -0.412964 -0.000132
-    outer loop
-      vertex 12.045211 -3.690770 27.258787
-      vertex 11.808237 -4.213636 28.030489
-      vertex 11.753986 -4.324638 1.000000
-    endloop
-  endfacet
-  facet normal 0.927502 -0.373817 -0.001263
-    outer loop
-      vertex 12.045211 -3.690770 27.258787
-      vertex 11.753986 -4.324638 1.000000
-      vertex 12.440757 -2.620647 1.000000
-    endloop
-  endfacet
-  facet normal 0.931361 -0.364096 -0.000809
-    outer loop
-      vertex 12.304571 -3.025752 26.551031
-      vertex 12.045211 -3.690770 27.258787
-      vertex 12.440757 -2.620647 1.000000
-    endloop
-  endfacet
-  facet normal 0.911398 -0.411527 0.000104
-    outer loop
-      vertex 11.753986 -4.324638 61.000000
-      vertex 11.792848 -4.245421 33.912998
-      vertex 12.073238 -3.624218 34.823170
-    endloop
-  endfacet
-  facet normal 0.889378 -0.457173 -0.000061
-    outer loop
-      vertex 11.753986 -4.324638 61.000000
-      vertex 11.545403 -4.726647 32.790394
-      vertex 11.792848 -4.245421 33.912998
-    endloop
-  endfacet
-  facet normal 0.872043 -0.489429 0.000527
-    outer loop
-      vertex 11.753986 -4.324638 61.000000
-      vertex 11.408753 -4.971420 31.584927
-      vertex 11.545403 -4.726647 32.790394
-    endloop
-  endfacet
-  facet normal 0.859569 -0.511018 0.001148
-    outer loop
-      vertex 11.753986 -4.324638 61.000000
-      vertex 10.815152 -5.903824 61.000000
-      vertex 11.408753 -4.971420 31.584927
-    endloop
-  endfacet
-  facet normal 0.953628 -0.300988 0.000311
-    outer loop
-      vertex 12.565912 -2.198387 25.923552
-      vertex 12.304571 -3.025752 26.551031
-      vertex 12.440757 -2.620647 1.000000
-    endloop
-  endfacet
-  facet normal 0.973695 -0.227854 -0.001029
-    outer loop
-      vertex 12.859365 -0.831791 1.000000
-      vertex 12.565912 -2.198387 25.923552
-      vertex 12.440757 -2.620647 1.000000
-    endloop
-  endfacet
-  facet normal 0.974536 -0.224228 -0.000820
-    outer loop
-      vertex 12.802445 -1.168476 25.405563
-      vertex 12.565912 -2.198387 25.923552
-      vertex 12.859365 -0.831791 1.000000
-    endloop
-  endfacet
-  facet normal 0.970908 -0.239453 0.000669
-    outer loop
-      vertex 12.440757 -2.620647 61.000000
-      vertex 12.535419 -2.306674 36.006588
-      vertex 12.751836 -1.427831 36.486862
-    endloop
-  endfacet
-  facet normal 0.952150 -0.305632 -0.000233
-    outer loop
-      vertex 12.440757 -2.620647 61.000000
-      vertex 12.303495 -3.028771 35.446236
-      vertex 12.535419 -2.306674 36.006588
-    endloop
-  endfacet
-  facet normal 0.932425 -0.361363 0.000763
-    outer loop
-      vertex 12.440757 -2.620647 61.000000
-      vertex 12.073238 -3.624218 34.823170
-      vertex 12.303495 -3.028771 35.446236
-    endloop
-  endfacet
-  facet normal 0.927502 -0.373817 0.001309
-    outer loop
-      vertex 12.440757 -2.620647 61.000000
-      vertex 11.753986 -4.324638 61.000000
-      vertex 12.073238 -3.624218 34.823170
-    endloop
-  endfacet
-  facet normal 0.997065 -0.076549 -0.001338
-    outer loop
-      vertex 12.941537 -0.183087 25.117798
-      vertex 12.859365 -0.831791 1.000000
-      vertex 13.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.990200 -0.139659 0.000383
-    outer loop
-      vertex 12.941537 -0.183087 25.117798
-      vertex 12.802445 -1.168476 25.405563
-      vertex 12.859365 -0.831791 1.000000
-    endloop
-  endfacet
-  facet normal 0.998781 -0.049356 0.000000
-    outer loop
-      vertex 13.000000 1.000000 25.000000
-      vertex 12.941537 -0.183087 25.117798
-      vertex 13.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.987606 -0.156951 -0.000516
-    outer loop
-      vertex 12.859365 -0.831791 61.000000
-      vertex 12.751836 -1.427831 36.486862
-      vertex 12.925056 -0.339040 36.848671
-    endloop
-  endfacet
-  facet normal 0.973695 -0.227853 0.001269
-    outer loop
-      vertex 12.859365 -0.831791 61.000000
-      vertex 12.440757 -2.620647 61.000000
-      vertex 12.751836 -1.427831 36.486862
-    endloop
-  endfacet
-  facet normal 0.998437 -0.055881 0.000000
-    outer loop
-      vertex 13.000000 1.000000 61.000000
-      vertex 12.925056 -0.339040 36.848671
-      vertex 13.000000 1.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.997065 -0.076549 0.001150
-    outer loop
-      vertex 13.000000 1.000000 61.000000
-      vertex 12.859365 -0.831791 61.000000
-      vertex 12.925056 -0.339040 36.848671
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.859365 2.831791 1.000000
-      vertex 11.753986 6.324638 1.000000
-      vertex 12.440757 4.620647 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -8.257870 -6.634909 1.000000
-      vertex -5.522810 -9.072385 1.000000
-      vertex -6.983908 -7.958639 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -9.314836 -5.132224 1.000000
-      vertex -10.130030 -3.485805 1.000000
-      vertex -8.257870 -6.634909 1.000000
-    endloop
-  endfacet
-  facet normal -0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 6.732638 11.542147 1.000000
-      vertex 8.274705 10.543514 1.000000
-      vertex 5.056202 12.293680 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 3.284693 12.780499 1.000000
-      vertex 8.274705 10.543514 1.000000
-      vertex -3.908824 11.950044 1.000000
-    endloop
-  endfacet
-  facet normal -0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 5.056202 12.293680 1.000000
-      vertex 8.274705 10.543514 1.000000
-      vertex 3.284693 12.780499 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -5.522810 -9.072385 1.000000
-      vertex -2.179778 -10.571042 1.000000
-      vertex -3.908824 -9.950044 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -2.179778 -10.571042 1.000000
-      vertex 8.274705 10.543514 1.000000
-      vertex 8.274705 -8.543514 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -8.257870 -6.634909 1.000000
-      vertex -2.179778 -10.571042 1.000000
-      vertex -5.522810 -9.072385 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -3.908824 11.950044 1.000000
-      vertex 8.274705 10.543514 1.000000
-      vertex -2.179778 -10.571042 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.130030 -3.485805 1.000000
-      vertex -2.179778 -10.571042 1.000000
-      vertex -8.257870 -6.634909 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 8.274705 -8.543514 1.000000
-      vertex 8.274705 10.543514 1.000000
-      vertex 11.753986 -4.324638 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 11.753986 -4.324638 1.000000
-      vertex 8.274705 10.543514 1.000000
-      vertex 12.859365 -0.831791 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 11.753986 6.324638 1.000000
-      vertex 9.646259 9.321190 1.000000
-      vertex 10.815152 7.903824 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.859365 -0.831791 1.000000
-      vertex 9.646259 9.321190 1.000000
-      vertex 12.859365 2.831791 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.859365 2.831791 1.000000
-      vertex 9.646259 9.321190 1.000000
-      vertex 11.753986 6.324638 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 8.274705 10.543514 1.000000
-      vertex 9.646259 9.321190 1.000000
-      vertex 12.859365 -0.831791 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.684345 -1.734242 1.000000
-      vertex -10.964789 0.081409 1.000000
-      vertex -10.130030 -3.485805 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -2.179778 -10.571042 1.000000
-      vertex 1.459633 -10.991194 1.000000
-      vertex -0.376201 -10.920825 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 1.459633 -10.991194 1.000000
-      vertex 5.056202 -10.293680 1.000000
-      vertex 3.284693 -10.780499 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -2.179778 -10.571042 1.000000
-      vertex 5.056202 -10.293680 1.000000
-      vertex 1.459633 -10.991194 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -10.684345 3.734242 1.000000
-      vertex -10.130030 5.485805 1.000000
-      vertex -10.964789 1.918591 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.964789 1.918591 1.000000
-      vertex -10.130030 5.485805 1.000000
-      vertex -10.964789 0.081409 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.964789 0.081409 1.000000
-      vertex -10.130030 5.485805 1.000000
-      vertex -10.130030 -3.485805 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 5.056202 -10.293680 1.000000
-      vertex 8.274705 -8.543514 1.000000
-      vertex 6.732638 -9.542147 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -2.179778 -10.571042 1.000000
-      vertex 8.274705 -8.543514 1.000000
-      vertex 5.056202 -10.293680 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -8.257870 8.634910 1.000000
-      vertex -6.983908 9.958638 1.000000
-      vertex -9.314836 7.132224 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -9.314836 7.132224 1.000000
-      vertex -6.983908 9.958638 1.000000
-      vertex -10.130030 5.485805 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.130030 5.485805 1.000000
-      vertex -6.983908 9.958638 1.000000
-      vertex -10.130030 -3.485805 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 8.274705 -8.543514 1.000000
-      vertex 10.815152 -5.903824 1.000000
-      vertex 9.646259 -7.321190 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 8.274705 -8.543514 1.000000
-      vertex 11.753986 -4.324638 1.000000
-      vertex 10.815152 -5.903824 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -5.522810 11.072385 1.000000
-      vertex -3.908824 11.950044 1.000000
-      vertex -6.983908 9.958638 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -10.130030 -3.485805 1.000000
-      vertex -3.908824 11.950044 1.000000
-      vertex -2.179778 -10.571042 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -6.983908 9.958638 1.000000
-      vertex -3.908824 11.950044 1.000000
-      vertex -10.130030 -3.485805 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 11.753986 -4.324638 1.000000
-      vertex 12.859365 -0.831791 1.000000
-      vertex 12.440757 -2.620647 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -2.179778 12.571042 1.000000
-      vertex -0.376201 12.920825 1.000000
-      vertex -3.908824 11.950044 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex -0.376201 12.920825 1.000000
-      vertex 1.459633 12.991194 1.000000
-      vertex -3.908824 11.950044 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 12.859365 -0.831791 1.000000
-      vertex 12.859365 2.831791 1.000000
-      vertex 13.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 -1.000000
-    outer loop
-      vertex 1.459633 12.991194 1.000000
-      vertex 3.284693 12.780499 1.000000
-      vertex -3.908824 11.950044 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 11.753986 6.324638 61.000000
-      vertex 12.859365 2.831791 61.000000
-      vertex 12.440757 4.620647 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -5.522810 -9.072385 61.000000
-      vertex -8.257870 -6.634909 61.000000
-      vertex -6.983908 -7.958639 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -10.130030 -3.485805 61.000000
-      vertex -9.314836 -5.132224 61.000000
-      vertex -8.257870 -6.634909 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.274705 10.543514 61.000000
-      vertex 6.732638 11.542147 61.000000
-      vertex 5.056202 12.293680 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.274705 10.543514 61.000000
-      vertex 3.284693 12.780499 61.000000
-      vertex -3.908824 11.950044 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.274705 10.543514 61.000000
-      vertex 5.056202 12.293680 61.000000
-      vertex 3.284693 12.780499 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -2.179778 -10.571042 61.000000
-      vertex -5.522810 -9.072385 61.000000
-      vertex -3.908824 -9.950044 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.274705 10.543514 61.000000
-      vertex -2.179778 -10.571042 61.000000
-      vertex 8.274705 -8.543514 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -2.179778 -10.571042 61.000000
-      vertex -8.257870 -6.634909 61.000000
-      vertex -5.522810 -9.072385 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.274705 10.543514 61.000000
-      vertex -3.908824 11.950044 61.000000
-      vertex -2.179778 -10.571042 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -2.179778 -10.571042 61.000000
-      vertex -10.130030 -3.485805 61.000000
-      vertex -8.257870 -6.634909 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.274705 10.543514 61.000000
-      vertex 8.274705 -8.543514 61.000000
-      vertex 11.753986 -4.324638 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.274705 10.543514 61.000000
-      vertex 11.753986 -4.324638 61.000000
-      vertex 12.859365 -0.831791 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 9.646259 9.321190 61.000000
-      vertex 11.753986 6.324638 61.000000
-      vertex 10.815152 7.903824 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 9.646259 9.321190 61.000000
-      vertex 12.859365 -0.831791 61.000000
-      vertex 12.859365 2.831791 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 9.646259 9.321190 61.000000
-      vertex 12.859365 2.831791 61.000000
-      vertex 11.753986 6.324638 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 9.646259 9.321190 61.000000
-      vertex 8.274705 10.543514 61.000000
-      vertex 12.859365 -0.831791 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -10.964789 0.081409 61.000000
-      vertex -10.684345 -1.734242 61.000000
-      vertex -10.130030 -3.485805 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 1.459633 -10.991194 61.000000
-      vertex -2.179778 -10.571042 61.000000
-      vertex -0.376201 -10.920825 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 5.056202 -10.293680 61.000000
-      vertex 1.459633 -10.991194 61.000000
-      vertex 3.284693 -10.780499 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 5.056202 -10.293680 61.000000
-      vertex -2.179778 -10.571042 61.000000
-      vertex 1.459633 -10.991194 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -10.130030 5.485805 61.000000
-      vertex -10.684345 3.734242 61.000000
-      vertex -10.964789 1.918591 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -10.130030 5.485805 61.000000
-      vertex -10.964789 1.918591 61.000000
-      vertex -10.964789 0.081409 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -10.130030 5.485805 61.000000
-      vertex -10.964789 0.081409 61.000000
-      vertex -10.130030 -3.485805 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.274705 -8.543514 61.000000
-      vertex 5.056202 -10.293680 61.000000
-      vertex 6.732638 -9.542147 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 8.274705 -8.543514 61.000000
-      vertex -2.179778 -10.571042 61.000000
-      vertex 5.056202 -10.293680 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -6.983908 9.958638 61.000000
-      vertex -8.257870 8.634910 61.000000
-      vertex -9.314836 7.132224 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -6.983908 9.958638 61.000000
-      vertex -9.314836 7.132224 61.000000
-      vertex -10.130030 5.485805 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -6.983908 9.958638 61.000000
-      vertex -10.130030 5.485805 61.000000
-      vertex -10.130030 -3.485805 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 10.815152 -5.903824 61.000000
-      vertex 8.274705 -8.543514 61.000000
-      vertex 9.646259 -7.321190 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 11.753986 -4.324638 61.000000
-      vertex 8.274705 -8.543514 61.000000
-      vertex 10.815152 -5.903824 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -3.908824 11.950044 61.000000
-      vertex -5.522810 11.072385 61.000000
-      vertex -6.983908 9.958638 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -3.908824 11.950044 61.000000
-      vertex -10.130030 -3.485805 61.000000
-      vertex -2.179778 -10.571042 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -3.908824 11.950044 61.000000
-      vertex -6.983908 9.958638 61.000000
-      vertex -10.130030 -3.485805 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.859365 -0.831791 61.000000
-      vertex 11.753986 -4.324638 61.000000
-      vertex 12.440757 -2.620647 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex -0.376201 12.920825 61.000000
-      vertex -2.179778 12.571042 61.000000
-      vertex -3.908824 11.950044 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 1.459633 12.991194 61.000000
-      vertex -0.376201 12.920825 61.000000
-      vertex -3.908824 11.950044 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 12.859365 2.831791 61.000000
-      vertex 12.859365 -0.831791 61.000000
-      vertex 13.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 3.284693 12.780499 61.000000
-      vertex 1.459633 12.991194 61.000000
-      vertex -3.908824 11.950044 61.000000
-    endloop
-  endfacet
-  facet normal -0.000854 -1.000000 0.000000
-    outer loop
-      vertex -7.945369 -6.998773 31.140100
-      vertex -34.000000 -6.976526 31.612394
-      vertex -34.000000 -6.976526 30.387606
-    endloop
-  endfacet
-  facet normal 0.001095 -0.994231 0.107252
-    outer loop
-      vertex -7.945369 -6.998773 31.140100
-      vertex -8.080567 -6.844954 32.567387
-      vertex -34.000000 -6.976526 31.612394
-    endloop
-  endfacet
-  facet normal -0.000887 -0.988280 -0.152649
-    outer loop
-      vertex -8.039007 -6.892804 29.694763
-      vertex -34.000000 -6.976526 30.387606
-      vertex -34.000000 -6.789563 29.177172
-    endloop
-  endfacet
-  facet normal 0.000000 0.997066 0.076549
-    outer loop
-      vertex -7.944272 9.000000 31.000000
-      vertex -34.000000 9.000000 31.000000
-      vertex -34.000000 8.906243 32.221195
-    endloop
-  endfacet
-  facet normal 0.001263 -0.997316 -0.073203
-    outer loop
-      vertex -8.039007 -6.892804 29.694763
-      vertex -7.945369 -6.998773 31.140100
-      vertex -34.000000 -6.976526 30.387606
-    endloop
-  endfacet
-  facet normal -0.000761 -0.953396 -0.301721
-    outer loop
-      vertex -8.329084 -6.547727 28.348244
-      vertex -34.000000 -6.789563 29.177172
-      vertex -34.000000 -6.420020 28.009464
-    endloop
-  endfacet
-  facet normal -0.000655 0.973695 0.227853
-    outer loop
-      vertex -8.070408 8.856698 32.507416
-      vertex -34.000000 8.906243 32.221195
-      vertex -34.000000 8.627172 33.413765
-    endloop
-  endfacet
-  facet normal 0.001102 -0.968638 -0.248473
-    outer loop
-      vertex -8.329084 -6.547727 28.348244
-      vertex -8.039007 -6.892804 29.694763
-      vertex -34.000000 -6.789563 29.177172
-    endloop
-  endfacet
-  facet normal 0.000857 0.995505 0.094709
-    outer loop
-      vertex -8.070408 8.856698 32.507416
-      vertex -7.944272 9.000000 31.000000
-      vertex -34.000000 8.906243 32.221195
-    endloop
-  endfacet
-  facet normal -0.000575 -0.896166 -0.443719
-    outer loop
-      vertex -8.751478 -5.993474 27.115244
-      vertex -34.000000 -6.420020 28.009464
-      vertex -34.000000 -5.876557 26.911850
-    endloop
-  endfacet
-  facet normal -0.000894 0.927502 0.373817
-    outer loop
-      vertex -8.402561 8.455994 33.899681
-      vertex -34.000000 8.627172 33.413765
-      vertex -34.000000 8.169325 34.549759
-    endloop
-  endfacet
-  facet normal 0.000877 -0.911974 -0.410248
-    outer loop
-      vertex -8.751478 -5.993474 27.115244
-      vertex -8.329084 -6.547727 28.348244
-      vertex -34.000000 -6.420020 28.009464
-    endloop
-  endfacet
-  facet normal 0.001171 0.960916 0.276838
-    outer loop
-      vertex -8.402561 8.455994 33.899681
-      vertex -8.070408 8.856698 32.507416
-      vertex -34.000000 8.627172 33.413765
-    endloop
-  endfacet
-  facet normal -0.000290 -0.817929 -0.575319
-    outer loop
-      vertex -9.252076 -5.236581 25.989506
-      vertex -34.000000 -5.876557 26.911850
-      vertex -34.000000 -5.171914 25.910061
-    endloop
-  endfacet
-  facet normal 0.000654 -0.829731 -0.558163
-    outer loop
-      vertex -9.252076 -5.236581 25.989506
-      vertex -8.751478 -5.993474 27.115244
-      vertex -34.000000 -5.876557 26.911850
-    endloop
-  endfacet
-  facet normal -0.000913 0.859569 0.511018
-    outer loop
-      vertex -8.866960 7.829576 35.166161
-      vertex -34.000000 8.169325 34.549759
-      vertex -34.000000 7.543435 35.602551
-    endloop
-  endfacet
-  facet normal 0.001232 0.896170 0.443709
-    outer loop
-      vertex -8.866960 7.829576 35.166161
-      vertex -8.402561 8.455994 33.899681
-      vertex -34.000000 8.169325 34.549759
-    endloop
-  endfacet
-  facet normal 0.000293 -0.720522 -0.693433
-    outer loop
-      vertex -9.786845 -4.257754 24.970406
-      vertex -34.000000 -5.171914 25.910061
-      vertex -34.000000 -4.322606 25.027575
-    endloop
-  endfacet
-  facet normal -0.000254 -0.606226 -0.795293
-    outer loop
-      vertex -9.786845 -4.257754 24.970406
-      vertex -34.000000 -4.322606 25.027575
-      vertex -34.000000 -3.348540 24.285076
-    endloop
-  endfacet
-  facet normal 0.001192 0.803405 0.595432
-    outer loop
-      vertex -9.405215 6.977583 36.316814
-      vertex -8.866960 7.829576 35.166161
-      vertex -34.000000 7.543435 35.602551
-    endloop
-  endfacet
-  facet normal 0.000340 -0.721125 -0.692805
-    outer loop
-      vertex -9.786845 -4.257754 24.970406
-      vertex -9.252076 -5.236581 25.989506
-      vertex -34.000000 -5.171914 25.910061
-    endloop
-  endfacet
-  facet normal -0.000728 0.771488 0.636243
-    outer loop
-      vertex -9.405215 6.977583 36.316814
-      vertex -34.000000 7.543435 35.602551
-      vertex -34.000000 6.764173 36.547459
-    endloop
-  endfacet
-  facet normal -0.000067 -0.477720 -0.878512
-    outer loop
-      vertex -10.191252 -3.330807 24.273626
-      vertex -34.000000 -3.348540 24.285076
-      vertex -34.000000 -2.272549 23.699970
-    endloop
-  endfacet
-  facet normal 0.000063 -0.600848 -0.799363
-    outer loop
-      vertex -10.191252 -3.330807 24.273626
-      vertex -9.786845 -4.257754 24.970406
-      vertex -34.000000 -3.348540 24.285076
-    endloop
-  endfacet
-  facet normal 0.000965 0.680608 0.732647
-    outer loop
-      vertex -9.968540 5.867354 37.348927
-      vertex -9.405215 6.977583 36.316814
-      vertex -34.000000 6.764173 36.547459
-    endloop
-  endfacet
-  facet normal -0.000069 0.665326 0.746553
-    outer loop
-      vertex -9.968540 5.867354 37.348927
-      vertex -34.000000 6.764173 36.547459
-      vertex -34.000000 5.849803 37.362343
-    endloop
-  endfacet
-  facet normal 0.000072 0.543568 0.839365
-    outer loop
-      vertex -9.968540 5.867354 37.348927
-      vertex -34.000000 5.849803 37.362343
-      vertex -34.000000 4.821759 38.028099
-    endloop
-  endfacet
-  facet normal -0.000147 -0.338016 -0.941140
-    outer loop
-      vertex -10.557199 -2.229729 23.680925
-      vertex -34.000000 -2.272549 23.699970
-      vertex -34.000000 -1.119852 23.285973
-    endloop
-  endfacet
-  facet normal 0.000150 -0.473945 -0.880554
-    outer loop
-      vertex -10.557199 -2.229729 23.680925
-      vertex -10.191252 -3.330807 24.273626
-      vertex -34.000000 -2.272549 23.699970
-    endloop
-  endfacet
-  facet normal 0.001471 0.520726 0.853723
-    outer loop
-      vertex -10.501171 4.423895 38.230278
-      vertex -9.968540 5.867354 37.348927
-      vertex -34.000000 4.821759 38.028099
-    endloop
-  endfacet
-  facet normal -0.000925 0.409068 0.912503
-    outer loop
-      vertex -10.501171 4.423895 38.230278
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 3.704135 38.529121
-    endloop
-  endfacet
-  facet normal -0.000697 -0.190391 -0.981708
-    outer loop
-      vertex -10.855250 -0.858236 23.218807
-      vertex -34.000000 -1.119852 23.285973
-      vertex -34.000000 0.082533 23.052784
-    endloop
-  endfacet
-  facet normal 0.000857 -0.319139 -0.947707
-    outer loop
-      vertex -10.855250 -0.858236 23.218807
-      vertex -10.557199 -2.229729 23.680925
-      vertex -34.000000 -1.119852 23.285973
-    endloop
-  endfacet
-  facet normal 0.001504 0.341172 0.940000
-    outer loop
-      vertex -10.829480 3.015787 38.741875
-      vertex -10.501171 4.423895 38.230278
-      vertex -34.000000 3.704135 38.529121
-    endloop
-  endfacet
-  facet normal -0.000982 0.264982 0.964253
-    outer loop
-      vertex -10.829480 3.015787 38.741875
-      vertex -34.000000 3.704135 38.529121
-      vertex -34.000000 2.523129 38.853668
-    endloop
-  endfacet
-  facet normal -0.000806 -0.038303 -0.999266
-    outer loop
-      vertex -10.985648 0.413291 23.021544
-      vertex -34.000000 0.082533 23.052784
-      vertex -34.000000 1.306422 23.005871
-    endloop
-  endfacet
-  facet normal 0.000861 -0.153219 -0.988192
-    outer loop
-      vertex -10.985648 0.413291 23.021544
-      vertex -10.855250 -0.858236 23.218807
-      vertex -34.000000 0.082533 23.052784
-    endloop
-  endfacet
-  facet normal 0.001358 0.160139 0.987093
-    outer loop
-      vertex -10.987958 1.537464 38.981926
-      vertex -10.829480 3.015787 38.741875
-      vertex -34.000000 2.523129 38.853668
-    endloop
-  endfacet
-  facet normal -0.000625 0.114682 0.993402
-    outer loop
-      vertex -10.987958 1.537464 38.981926
-      vertex -34.000000 2.523129 38.853668
-      vertex -34.000000 1.306422 38.994129
-    endloop
-  endfacet
-  facet normal 0.001197 0.013304 -0.999911
-    outer loop
-      vertex -10.973373 1.798958 23.039995
-      vertex -10.985648 0.413291 23.021544
-      vertex -34.000000 1.306422 23.005871
-    endloop
-  endfacet
-  facet normal -0.000981 0.114683 -0.993402
-    outer loop
-      vertex -10.973373 1.798958 23.039995
-      vertex -34.000000 1.306422 23.005871
-      vertex -34.000000 2.523129 23.146334
-    endloop
-  endfacet
-  facet normal 0.000644 -0.011284 0.999936
-    outer loop
-      vertex -10.978530 0.282484 38.967758
-      vertex -10.987958 1.537464 38.981926
-      vertex -34.000000 1.306422 38.994129
-    endloop
-  endfacet
-  facet normal -0.000559 -0.038303 0.999266
-    outer loop
-      vertex -10.978530 0.282484 38.967758
-      vertex -34.000000 1.306422 38.994129
-      vertex -34.000000 0.082533 38.947216
-    endloop
-  endfacet
-  facet normal 0.000702 0.167111 -0.985938
-    outer loop
-      vertex -10.853421 2.869869 23.221594
-      vertex -10.973373 1.798958 23.039995
-      vertex -34.000000 2.523129 23.146334
-    endloop
-  endfacet
-  facet normal -0.000834 0.264982 -0.964253
-    outer loop
-      vertex -10.853421 2.869869 23.221594
-      vertex -34.000000 2.523129 23.146334
-      vertex -34.000000 3.704135 23.470881
-    endloop
-  endfacet
-  facet normal 0.000447 -0.152943 0.988235
-    outer loop
-      vertex -10.875323 -0.725314 38.811741
-      vertex -10.978530 0.282484 38.967758
-      vertex -34.000000 0.082533 38.947216
-    endloop
-  endfacet
-  facet normal -0.000900 -0.190391 0.981708
-    outer loop
-      vertex -10.875323 -0.725314 38.811741
-      vertex -34.000000 0.082533 38.947216
-      vertex -34.000000 -1.119852 38.714027
-    endloop
-  endfacet
-  facet normal 0.000419 0.296962 -0.954889
-    outer loop
-      vertex -10.651127 3.872498 23.533491
-      vertex -10.853421 2.869869 23.221594
-      vertex -34.000000 3.704135 23.470881
-    endloop
-  endfacet
-  facet normal -0.000503 0.409068 -0.912504
-    outer loop
-      vertex -10.651127 3.872498 23.533491
-      vertex -34.000000 3.704135 23.470881
-      vertex -34.000000 4.821759 23.971903
-    endloop
-  endfacet
-  facet normal 0.000005 0.419394 -0.907804
-    outer loop
-      vertex -10.374597 4.823421 23.972807
-      vertex -10.651127 3.872498 23.533491
-      vertex -34.000000 4.821759 23.971903
-    endloop
-  endfacet
-  facet normal 0.000858 -0.287518 0.957775
-    outer loop
-      vertex -10.653047 -1.864698 38.469505
-      vertex -10.875323 -0.725314 38.811741
-      vertex -34.000000 -1.119852 38.714027
-    endloop
-  endfacet
-  facet normal -0.000006 0.543567 -0.839366
-    outer loop
-      vertex -10.374597 4.823421 23.972807
-      vertex -34.000000 4.821759 23.971903
-      vertex -34.000000 5.849803 24.637657
-    endloop
-  endfacet
-  facet normal -0.000927 -0.338016 0.941140
-    outer loop
-      vertex -10.653047 -1.864698 38.469505
-      vertex -34.000000 -1.119852 38.714027
-      vertex -34.000000 -2.272549 38.300030
-    endloop
-  endfacet
-  facet normal 0.000114 0.545514 -0.838102
-    outer loop
-      vertex -9.963696 5.878253 24.659445
-      vertex -10.374597 4.823421 23.972807
-      vertex -34.000000 5.849803 24.637657
-    endloop
-  endfacet
-  facet normal -0.000111 0.665326 -0.746553
-    outer loop
-      vertex -9.963696 5.878253 24.659445
-      vertex -34.000000 5.849803 24.637657
-      vertex -34.000000 6.764173 25.452539
-    endloop
-  endfacet
-  facet normal 0.000852 -0.424913 0.905234
-    outer loop
-      vertex -10.341965 -2.919164 37.974251
-      vertex -10.653047 -1.864698 38.469505
-      vertex -34.000000 -2.272549 38.300030
-    endloop
-  endfacet
-  facet normal -0.000960 -0.477720 0.878512
-    outer loop
-      vertex -10.341965 -2.919164 37.974251
-      vertex -34.000000 -2.272549 38.300030
-      vertex -34.000000 -3.348540 37.714924
-    endloop
-  endfacet
-  facet normal 0.000342 0.672132 -0.740431
-    outer loop
-      vertex -9.482093 6.841722 25.534264
-      vertex -9.963696 5.878253 24.659445
-      vertex -34.000000 6.764173 25.452539
-    endloop
-  endfacet
-  facet normal 0.001161 -0.563095 0.826391
-    outer loop
-      vertex -9.880194 -4.061757 37.195049
-      vertex -10.341965 -2.919164 37.974251
-      vertex -34.000000 -3.348540 37.714924
-    endloop
-  endfacet
-  facet normal -0.000319 0.771489 -0.636242
-    outer loop
-      vertex -9.482093 6.841722 25.534264
-      vertex -34.000000 6.764173 25.452539
-      vertex -34.000000 7.543435 26.397451
-    endloop
-  endfacet
-  facet normal -0.000784 -0.606225 0.795293
-    outer loop
-      vertex -9.880194 -4.061757 37.195049
-      vertex -34.000000 -3.348540 37.714924
-      vertex -34.000000 -4.322606 36.972427
-    endloop
-  endfacet
-  facet normal 0.000332 0.780546 -0.625098
-    outer loop
-      vertex -9.014555 7.611255 26.495411
-      vertex -9.482093 6.841722 25.534264
-      vertex -34.000000 7.543435 26.397451
-    endloop
-  endfacet
-  facet normal 0.000958 -0.698955 0.715165
-    outer loop
-      vertex -9.345053 -5.081109 36.198086
-      vertex -9.880194 -4.061757 37.195049
-      vertex -34.000000 -4.322606 36.972427
-    endloop
-  endfacet
-  facet normal -0.000330 0.859569 -0.511019
-    outer loop
-      vertex -9.014555 7.611255 26.495411
-      vertex -34.000000 7.543435 26.397451
-      vertex -34.000000 8.169325 27.450241
-    endloop
-  endfacet
-  facet normal -0.000388 -0.720522 0.693432
-    outer loop
-      vertex -9.345053 -5.081109 36.198086
-      vertex -34.000000 -4.322606 36.972427
-      vertex -34.000000 -5.171914 36.089939
-    endloop
-  endfacet
-  facet normal 0.000279 0.866512 -0.499157
-    outer loop
-      vertex -8.589377 8.214142 27.542231
-      vertex -9.014555 7.611255 26.495411
-      vertex -34.000000 8.169325 27.450241
-    endloop
-  endfacet
-  facet normal 0.000434 -0.812411 0.583085
-    outer loop
-      vertex -8.837354 -5.872151 35.095551
-      vertex -9.345053 -5.081109 36.198086
-      vertex -34.000000 -5.171914 36.089939
-    endloop
-  endfacet
-  facet normal -0.000283 0.927502 -0.373817
-    outer loop
-      vertex -8.589377 8.214142 27.542231
-      vertex -34.000000 8.169325 27.450241
-      vertex -34.000000 8.627172 28.586235
-    endloop
-  endfacet
-  facet normal -0.000026 -0.817929 0.575319
-    outer loop
-      vertex -8.837354 -5.872151 35.095551
-      vertex -34.000000 -5.171914 36.089939
-      vertex -34.000000 -5.876557 35.088150
-    endloop
-  endfacet
-  facet normal 0.000026 -0.896166 0.443719
-    outer loop
-      vertex -8.837354 -5.872151 35.095551
-      vertex -34.000000 -5.876557 35.088150
-      vertex -34.000000 -6.420020 33.990536
-    endloop
-  endfacet
-  facet normal 0.000256 0.931993 -0.362476
-    outer loop
-      vertex -8.241260 8.655006 28.676022
-      vertex -8.589377 8.214142 27.542231
-      vertex -34.000000 8.627172 28.586235
-    endloop
-  endfacet
-  facet normal -0.000258 0.973695 -0.227853
-    outer loop
-      vertex -8.241260 8.655006 28.676022
-      vertex -34.000000 8.627172 28.586235
-      vertex -34.000000 8.906243 29.778805
-    endloop
-  endfacet
-  facet normal 0.000074 0.975390 -0.220486
-    outer loop
-      vertex -8.023660 8.910345 29.805666
-      vertex -8.241260 8.655006 28.676022
-      vertex -34.000000 8.906243 29.778805
-    endloop
-  endfacet
-  facet normal 0.000331 -0.898910 0.438133
-    outer loop
-      vertex -8.399053 -6.460416 33.888287
-      vertex -8.837354 -5.872151 35.095551
-      vertex -34.000000 -6.420020 33.990536
-    endloop
-  endfacet
-  facet normal -0.000078 0.997066 -0.076549
-    outer loop
-      vertex -8.023660 8.910345 29.805666
-      vertex -34.000000 8.906243 29.778805
-      vertex -34.000000 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000299 -0.953396 0.301720
-    outer loop
-      vertex -8.399053 -6.460416 33.888287
-      vertex -34.000000 -6.420020 33.990536
-      vertex -34.000000 -6.789563 32.822826
-    endloop
-  endfacet
-  facet normal 0.000000 0.997194 -0.074856
-    outer loop
-      vertex -7.944272 9.000000 31.000000
-      vertex -8.023660 8.910345 29.805666
-      vertex -34.000000 9.000000 31.000000
-    endloop
-  endfacet
-  facet normal -0.000608 -0.988280 0.152650
-    outer loop
-      vertex -8.080567 -6.844954 32.567387
-      vertex -34.000000 -6.789563 32.822826
-      vertex -34.000000 -6.976526 31.612394
-    endloop
-  endfacet
-  facet normal 0.000704 -0.960096 0.279671
-    outer loop
-      vertex -8.080567 -6.844954 32.567387
-      vertex -8.399053 -6.460416 33.888287
-      vertex -34.000000 -6.789563 32.822826
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 8.906243 32.221195
-      vertex -34.000000 8.169325 34.549759
-      vertex -34.000000 8.627172 33.413765
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 8.906243 29.778805
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 8.906243 32.221195
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 1.306422 38.994129
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 -4.322606 36.972427
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex -34.000000 3.704135 38.529121
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 2.523129 38.853668
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -5.171914 25.910061
-      vertex -34.000000 -3.348540 24.285076
-      vertex -34.000000 -4.322606 25.027575
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex -34.000000 2.523129 38.853668
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 1.306422 38.994129
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 1.306422 23.005871
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 5.849803 24.637657
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -4.322606 36.972427
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 1.306422 23.005871
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 5.849803 24.637657
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 8.169325 27.450241
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 8.169325 27.450241
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 8.906243 29.778805
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 7.543435 35.602551
-      vertex -34.000000 8.906243 32.221195
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 8.906243 32.221195
-      vertex -34.000000 7.543435 35.602551
-      vertex -34.000000 8.169325 34.549759
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -5.171914 25.910061
-      vertex -34.000000 -2.272549 23.699970
-      vertex -34.000000 -3.348540 24.285076
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -5.876557 26.911850
-      vertex -34.000000 -6.420020 28.009464
-      vertex -34.000000 -5.171914 25.910061
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex -34.000000 5.849803 37.362343
-      vertex -34.000000 6.764173 36.547459
-      vertex -34.000000 4.821759 38.028099
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 4.821759 38.028099
-      vertex -34.000000 6.764173 36.547459
-      vertex -34.000000 7.543435 35.602551
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -2.272549 23.699970
-      vertex -34.000000 0.082533 23.052784
-      vertex -34.000000 -1.119852 23.285973
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -5.171914 25.910061
-      vertex -34.000000 0.082533 23.052784
-      vertex -34.000000 -2.272549 23.699970
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -6.789563 29.177172
-      vertex -34.000000 -6.976526 30.387606
-      vertex -34.000000 -6.420020 28.009464
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -6.420020 28.009464
-      vertex -34.000000 -6.976526 30.387606
-      vertex -34.000000 -5.171914 25.910061
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 0.082533 23.052784
-      vertex -34.000000 -6.976526 31.612394
-      vertex -34.000000 1.306422 23.005871
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -5.171914 25.910061
-      vertex -34.000000 -6.976526 31.612394
-      vertex -34.000000 0.082533 23.052784
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -6.976526 30.387606
-      vertex -34.000000 -6.976526 31.612394
-      vertex -34.000000 -5.171914 25.910061
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -6.789563 32.822826
-      vertex -34.000000 -6.420020 33.990536
-      vertex -34.000000 -6.976526 31.612394
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -6.976526 31.612394
-      vertex -34.000000 -6.420020 33.990536
-      vertex -34.000000 1.306422 23.005871
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 1.306422 23.005871
-      vertex -34.000000 4.821759 23.971903
-      vertex -34.000000 2.523129 23.146334
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 2.523129 23.146334
-      vertex -34.000000 4.821759 23.971903
-      vertex -34.000000 3.704135 23.470881
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 1.306422 23.005871
-      vertex -34.000000 5.849803 24.637657
-      vertex -34.000000 4.821759 23.971903
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -5.876557 35.088150
-      vertex -34.000000 -5.171914 36.089939
-      vertex -34.000000 -6.420020 33.990536
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 -6.420020 33.990536
-      vertex -34.000000 -4.322606 36.972427
-      vertex -34.000000 1.306422 23.005871
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -5.171914 36.089939
-      vertex -34.000000 -4.322606 36.972427
-      vertex -34.000000 -6.420020 33.990536
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 5.849803 24.637657
-      vertex -34.000000 8.169325 27.450241
-      vertex -34.000000 6.764173 25.452539
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 6.764173 25.452539
-      vertex -34.000000 8.169325 27.450241
-      vertex -34.000000 7.543435 26.397451
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -3.348540 37.714924
-      vertex -34.000000 -2.272549 38.300030
-      vertex -34.000000 -4.322606 36.972427
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -2.272549 38.300030
-      vertex -34.000000 -1.119852 38.714027
-      vertex -34.000000 -4.322606 36.972427
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 8.169325 27.450241
-      vertex -34.000000 8.906243 29.778805
-      vertex -34.000000 8.627172 28.586235
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 0.082533 38.947216
-      vertex -34.000000 1.306422 38.994129
-      vertex -34.000000 -1.119852 38.714027
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -34.000000 -1.119852 38.714027
-      vertex -34.000000 1.306422 38.994129
-      vertex -34.000000 -4.322606 36.972427
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -34.000000 8.906243 29.778805
-      vertex -34.000000 8.906243 32.221195
-      vertex -34.000000 9.000000 31.000000
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSS.stl b/apps/cpu/Multiphase/backup/FlowFocusingSS.stl
deleted file mode 100644
index fcf2ac4f64f6ac56f8aba0db2a8718f99f5958c2..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSS.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd
deleted file mode 100644
index dbd1808d2a5dac239a7f1b2f22e3621b3059bd79..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1
deleted file mode 100644
index 55f6c7b1690b72985f26a13836e7518c2704c71c..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq.ast
deleted file mode 100644
index 97ed8f7759e6b733e0ddb09c136075c9920c1e9e..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/FlowFocusingSq.ast
+++ /dev/null
@@ -1,310 +0,0 @@
-solid Mesh
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 1.000000 61.000000
-      vertex 1.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 25.000000 1.000000 61.000000
-      vertex 1.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 1.000000 25.000000 1.000000
-      vertex 25.000000 25.000000 1.000000
-      vertex 1.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 25.000000 25.000000 1.000000
-      vertex 25.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 19.000000 25.000000
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal 1.000000 -0.000000 0.000000
-    outer loop
-      vertex 25.000000 7.000000 25.000000
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 19.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 25.000000 19.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 25.000000 19.000000 25.000000
-      vertex 25.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 7.000000 37.000000
-      vertex 25.000000 19.000000 37.000000
-    endloop
-  endfacet
-  facet normal 1.000000 -0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 25.000000 25.000000 61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 7.000000 25.000000
-      vertex 25.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 1.000000 25.000000 61.000000
-      vertex 1.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 25.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 21.000000 23.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 5.000000 23.000000
-      vertex 1.000000 21.000000 23.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 21.000000 23.000000
-      vertex 1.000000 21.000000 39.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 21.000000 39.000000
-      vertex 1.000000 25.000000 61.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 5.000000 39.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 21.000000 39.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 21.000000 39.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 25.000000 61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 5.000000 23.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 5.000000 23.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 5.000000 39.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 25.000000 25.000000 1.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 1.000000 25.000000 1.000000
-      vertex 1.000000 25.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 25.000000 7.000000 25.000000
-      vertex 81.000000 19.000000 25.000000
-      vertex 81.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 25.000000 19.000000 25.000000
-      vertex 81.000000 19.000000 25.000000
-      vertex 25.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 81.000000 19.000000 25.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 81.000000 19.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 81.000000 19.000000 25.000000
-      vertex 25.000000 19.000000 25.000000
-      vertex 25.000000 19.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 81.000000 19.000000 37.000000
-      vertex 25.000000 7.000000 37.000000
-      vertex 81.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 81.000000 19.000000 37.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 25.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 25.000000 7.000000 37.000000
-      vertex 81.000000 7.000000 25.000000
-      vertex 81.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 25.000000 7.000000 25.000000
-      vertex 81.000000 7.000000 25.000000
-      vertex 25.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -24.000000 5.000000 23.000000
-      vertex 1.000000 21.000000 23.000000
-      vertex 1.000000 5.000000 23.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -24.000000 21.000000 23.000000
-      vertex 1.000000 21.000000 23.000000
-      vertex -24.000000 5.000000 23.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 1.000000 21.000000 23.000000
-      vertex -24.000000 21.000000 39.000000
-      vertex 1.000000 21.000000 39.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 1.000000 21.000000 23.000000
-      vertex -24.000000 21.000000 23.000000
-      vertex -24.000000 21.000000 39.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 1.000000 21.000000 39.000000
-      vertex -24.000000 5.000000 39.000000
-      vertex 1.000000 5.000000 39.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 1.000000 21.000000 39.000000
-      vertex -24.000000 21.000000 39.000000
-      vertex -24.000000 5.000000 39.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -24.000000 5.000000 39.000000
-      vertex 1.000000 5.000000 23.000000
-      vertex 1.000000 5.000000 39.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -24.000000 5.000000 23.000000
-      vertex 1.000000 5.000000 23.000000
-      vertex -24.000000 5.000000 39.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 81.000000 19.000000 37.000000
-      vertex 81.000000 7.000000 37.000000
-      vertex 81.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 81.000000 19.000000 37.000000
-      vertex 81.000000 7.000000 25.000000
-      vertex 81.000000 19.000000 25.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -24.000000 5.000000 39.000000
-      vertex -24.000000 21.000000 39.000000
-      vertex -24.000000 5.000000 23.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -24.000000 5.000000 23.000000
-      vertex -24.000000 21.000000 39.000000
-      vertex -24.000000 21.000000 23.000000
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.stl b/apps/cpu/Multiphase/backup/FlowFocusingSq.stl
deleted file mode 100644
index b91794e7e1cd1f01ff3fa373910b5a31e3381a70..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd
deleted file mode 100644
index 57b06dc9f17ca420e2bfdda80b16ee9ad21056e3..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1
deleted file mode 100644
index fa315bacf26389f34692d3eb1c2947d3cb8d06ba..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast
deleted file mode 100644
index 7acee410835ddb702a2ed2ca798e663db3812f8f..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast
+++ /dev/null
@@ -1,310 +0,0 @@
-solid Mesh
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 1.000000 61.000000
-      vertex 1.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 25.000000 1.000000 61.000000
-      vertex 1.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 1.000000 25.000000 1.000000
-      vertex 25.000000 25.000000 1.000000
-      vertex 1.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 25.000000 25.000000 1.000000
-      vertex 25.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 19.000000 25.000000
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal 1.000000 -0.000000 0.000000
-    outer loop
-      vertex 25.000000 7.000000 25.000000
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 19.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 25.000000 19.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 25.000000 19.000000 25.000000
-      vertex 25.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 7.000000 37.000000
-      vertex 25.000000 19.000000 37.000000
-    endloop
-  endfacet
-  facet normal 1.000000 -0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 25.000000 25.000000 61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 7.000000 25.000000
-      vertex 25.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 1.000000 25.000000 61.000000
-      vertex 1.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 25.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 18.000000 18.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 8.000000 18.000000
-      vertex 1.000000 18.000000 18.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 18.000000 18.000000
-      vertex 1.000000 18.000000 44.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 18.000000 44.000000
-      vertex 1.000000 25.000000 61.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 8.000000 44.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 18.000000 44.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 18.000000 44.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 25.000000 61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 8.000000 18.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 8.000000 18.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 8.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 25.000000 25.000000 1.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 1.000000 25.000000 1.000000
-      vertex 1.000000 25.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 25.000000 19.000000 25.000000
-      vertex 81.000000 19.000000 25.000000
-      vertex 25.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 25.000000 7.000000 25.000000
-      vertex 81.000000 19.000000 25.000000
-      vertex 81.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 81.000000 19.000000 25.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 81.000000 19.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 81.000000 19.000000 25.000000
-      vertex 25.000000 19.000000 25.000000
-      vertex 25.000000 19.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 81.000000 19.000000 37.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 25.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 81.000000 19.000000 37.000000
-      vertex 25.000000 7.000000 37.000000
-      vertex 81.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 25.000000 7.000000 37.000000
-      vertex 81.000000 7.000000 25.000000
-      vertex 81.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 25.000000 7.000000 25.000000
-      vertex 81.000000 7.000000 25.000000
-      vertex 25.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -24.000000 8.000000 18.000000
-      vertex 1.000000 18.000000 18.000000
-      vertex 1.000000 8.000000 18.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -24.000000 18.000000 18.000000
-      vertex 1.000000 18.000000 18.000000
-      vertex -24.000000 8.000000 18.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -24.000000 18.000000 18.000000
-      vertex -24.000000 18.000000 44.000000
-      vertex 1.000000 18.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 1.000000 18.000000 18.000000
-      vertex -24.000000 18.000000 18.000000
-      vertex 1.000000 18.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 1.000000 18.000000 44.000000
-      vertex -24.000000 8.000000 44.000000
-      vertex 1.000000 8.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 1.000000 18.000000 44.000000
-      vertex -24.000000 18.000000 44.000000
-      vertex -24.000000 8.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -24.000000 8.000000 44.000000
-      vertex -24.000000 8.000000 18.000000
-      vertex 1.000000 8.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -24.000000 8.000000 18.000000
-      vertex 1.000000 8.000000 18.000000
-      vertex 1.000000 8.000000 44.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 81.000000 19.000000 37.000000
-      vertex 81.000000 7.000000 37.000000
-      vertex 81.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 81.000000 19.000000 37.000000
-      vertex 81.000000 7.000000 25.000000
-      vertex 81.000000 19.000000 25.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -24.000000 8.000000 44.000000
-      vertex -24.000000 18.000000 44.000000
-      vertex -24.000000 8.000000 18.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -24.000000 8.000000 18.000000
-      vertex -24.000000 18.000000 44.000000
-      vertex -24.000000 18.000000 18.000000
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.stl b/apps/cpu/Multiphase/backup/FlowFocusingSq1.stl
deleted file mode 100644
index 9f6355c80a4d30dbdcadba4615fa89895a660360..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq1.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd
deleted file mode 100644
index 64b20eb26d1d8445571b632f562e563b44467582..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1
deleted file mode 100644
index c64353de25ddbfcff53ad1ea2865621ef459f537..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast
deleted file mode 100644
index 1aa258836f82ff338e79aebc4d275a6a134f6eb9..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast
+++ /dev/null
@@ -1,310 +0,0 @@
-solid Mesh
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 1.000000 61.000000
-      vertex 1.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 25.000000 1.000000 61.000000
-      vertex 1.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 1.000000 25.000000 1.000000
-      vertex 25.000000 25.000000 1.000000
-      vertex 1.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 25.000000 25.000000 1.000000
-      vertex 25.000000 1.000000 1.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 19.000000 25.000000
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal 1.000000 -0.000000 0.000000
-    outer loop
-      vertex 25.000000 7.000000 25.000000
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 19.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 25.000000 19.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 25.000000 19.000000 25.000000
-      vertex 25.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 7.000000 37.000000
-      vertex 25.000000 19.000000 37.000000
-    endloop
-  endfacet
-  facet normal 1.000000 -0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 25.000000 25.000000 61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 1.000000 1.000000
-      vertex 25.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 25.000000 1.000000 61.000000
-      vertex 25.000000 7.000000 25.000000
-      vertex 25.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 1.000000 25.000000 61.000000
-      vertex 1.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 25.000000 1.000000 61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 18.000000 18.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 8.000000 18.000000
-      vertex 1.000000 18.000000 18.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 18.000000 18.000000
-      vertex 1.000000 18.000000 44.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 18.000000 44.000000
-      vertex 1.000000 25.000000 61.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 8.000000 44.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 18.000000 44.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 18.000000 44.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 25.000000 61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 1.000000 1.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 8.000000 18.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 1.000000 8.000000 18.000000
-      vertex 1.000000 1.000000 61.000000
-      vertex 1.000000 8.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 25.000000 25.000000 1.000000
-      vertex 1.000000 25.000000 1.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 25.000000 25.000000 61.000000
-      vertex 1.000000 25.000000 1.000000
-      vertex 1.000000 25.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 25.000000 19.000000 25.000000
-      vertex 181.000000 19.000000 25.000000
-      vertex 25.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 25.000000 7.000000 25.000000
-      vertex 181.000000 19.000000 25.000000
-      vertex 181.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 181.000000 19.000000 25.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 181.000000 19.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 181.000000 19.000000 25.000000
-      vertex 25.000000 19.000000 25.000000
-      vertex 25.000000 19.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 181.000000 19.000000 37.000000
-      vertex 25.000000 19.000000 37.000000
-      vertex 25.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 181.000000 19.000000 37.000000
-      vertex 25.000000 7.000000 37.000000
-      vertex 181.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 25.000000 7.000000 37.000000
-      vertex 181.000000 7.000000 25.000000
-      vertex 181.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 25.000000 7.000000 25.000000
-      vertex 181.000000 7.000000 25.000000
-      vertex 25.000000 7.000000 37.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -24.000000 8.000000 18.000000
-      vertex 1.000000 18.000000 18.000000
-      vertex 1.000000 8.000000 18.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -24.000000 18.000000 18.000000
-      vertex 1.000000 18.000000 18.000000
-      vertex -24.000000 8.000000 18.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex -24.000000 18.000000 18.000000
-      vertex -24.000000 18.000000 44.000000
-      vertex 1.000000 18.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 1.000000 18.000000 18.000000
-      vertex -24.000000 18.000000 18.000000
-      vertex 1.000000 18.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 1.000000 18.000000 44.000000
-      vertex -24.000000 8.000000 44.000000
-      vertex 1.000000 8.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 1.000000 18.000000 44.000000
-      vertex -24.000000 18.000000 44.000000
-      vertex -24.000000 8.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -24.000000 8.000000 44.000000
-      vertex -24.000000 8.000000 18.000000
-      vertex 1.000000 8.000000 44.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -24.000000 8.000000 18.000000
-      vertex 1.000000 8.000000 18.000000
-      vertex 1.000000 8.000000 44.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 181.000000 19.000000 37.000000
-      vertex 181.000000 7.000000 37.000000
-      vertex 181.000000 7.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 181.000000 19.000000 37.000000
-      vertex 181.000000 7.000000 25.000000
-      vertex 181.000000 19.000000 25.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -24.000000 8.000000 44.000000
-      vertex -24.000000 18.000000 44.000000
-      vertex -24.000000 8.000000 18.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -24.000000 8.000000 18.000000
-      vertex -24.000000 18.000000 44.000000
-      vertex -24.000000 18.000000 18.000000
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.stl b/apps/cpu/Multiphase/backup/FlowFocusingSq2.stl
deleted file mode 100644
index 2c31bb9bd4cf4af9246fc008ba606a3a9a0ba223..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq2.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl
deleted file mode 100644
index eff2679cd636ddd653825627f56256c425c5629d..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl
+++ /dev/null
@@ -1,1318 +0,0 @@
-solid Mesh
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 600.000000 0.000000
-      vertex 0.000000 0.000000 120.000000
-      vertex 0.000000 600.000000 120.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 0.000000 0.000000
-      vertex 0.000000 0.000000 120.000000
-      vertex 0.000000 600.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 120.000000 0.000000 0.000000
-      vertex 120.000000 0.000000 120.000000
-      vertex 0.000000 0.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 0.000000 0.000000 0.000000
-      vertex 120.000000 0.000000 120.000000
-      vertex 0.000000 0.000000 120.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 0.000000 600.000000 120.000000
-      vertex 0.000000 0.000000 120.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 0.000000 0.000000 120.000000
-      vertex 120.000000 0.000000 120.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 57.887005 600.000000 67.196198
-      vertex 56.884388 600.000000 66.822243
-      vertex 0.000000 600.000000 120.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 67.423660 600.000000 58.932640
-      vertex 120.000000 600.000000 0.000000
-      vertex 67.196198 600.000000 57.887005
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 55.088543 600.000000 54.331879
-      vertex 0.000000 600.000000 0.000000
-      vertex 54.331879 600.000000 55.088543
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 58.932640 600.000000 67.423660
-      vertex 57.887005 600.000000 67.196198
-      vertex 0.000000 600.000000 120.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 55.945194 600.000000 53.690598
-      vertex 0.000000 600.000000 0.000000
-      vertex 55.088543 600.000000 54.331879
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 53.690598 600.000000 55.945194
-      vertex 54.331879 600.000000 55.088543
-      vertex 0.000000 600.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 60.000000 600.000000 67.500000
-      vertex 58.932640 600.000000 67.423660
-      vertex 0.000000 600.000000 120.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 56.884388 600.000000 53.177761
-      vertex 0.000000 600.000000 0.000000
-      vertex 55.945194 600.000000 53.690598
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 67.500000 600.000000 60.000000
-      vertex 120.000000 600.000000 0.000000
-      vertex 67.423660 600.000000 58.932640
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 53.177761 600.000000 56.884388
-      vertex 53.690598 600.000000 55.945194
-      vertex 0.000000 600.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 57.887005 600.000000 52.803802
-      vertex 0.000000 600.000000 0.000000
-      vertex 56.884388 600.000000 53.177761
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 52.803802 600.000000 57.887005
-      vertex 53.177761 600.000000 56.884388
-      vertex 0.000000 600.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 58.932640 600.000000 52.576340
-      vertex 0.000000 600.000000 0.000000
-      vertex 57.887005 600.000000 52.803802
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 52.576340 600.000000 58.932640
-      vertex 52.803802 600.000000 57.887005
-      vertex 0.000000 600.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 60.000000 600.000000 52.500000
-      vertex 0.000000 600.000000 0.000000
-      vertex 58.932640 600.000000 52.576340
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 52.500000 600.000000 60.000000
-      vertex 52.576340 600.000000 58.932640
-      vertex 0.000000 600.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 67.500000 600.000000 60.000000
-      vertex 67.423660 600.000000 61.067360
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 67.423660 600.000000 61.067360
-      vertex 67.196198 600.000000 62.112995
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 67.196198 600.000000 62.112995
-      vertex 66.822243 600.000000 63.115612
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 66.822243 600.000000 63.115612
-      vertex 66.309402 600.000000 64.054810
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 66.309402 600.000000 64.054810
-      vertex 65.668121 600.000000 64.911453
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 65.668121 600.000000 64.911453
-      vertex 64.911453 600.000000 65.668121
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 64.911453 600.000000 65.668121
-      vertex 64.054810 600.000000 66.309402
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 64.054810 600.000000 66.309402
-      vertex 63.115612 600.000000 66.822243
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 120.000000 600.000000 0.000000
-      vertex 67.500000 600.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 63.115612 600.000000 66.822243
-      vertex 62.112995 600.000000 67.196198
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 62.112995 600.000000 67.196198
-      vertex 61.067360 600.000000 67.423660
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 61.067360 600.000000 67.423660
-      vertex 60.000000 600.000000 67.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 120.000000
-      vertex 60.000000 600.000000 67.500000
-      vertex 0.000000 600.000000 120.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.000000 600.000000 120.000000
-      vertex 54.331879 600.000000 64.911453
-      vertex 53.690598 600.000000 64.054810
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.000000 600.000000 120.000000
-      vertex 53.690598 600.000000 64.054810
-      vertex 53.177761 600.000000 63.115612
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.000000 600.000000 120.000000
-      vertex 53.177761 600.000000 63.115612
-      vertex 52.803802 600.000000 62.112995
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.000000 600.000000 120.000000
-      vertex 52.803802 600.000000 62.112995
-      vertex 52.576340 600.000000 61.067360
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.000000 600.000000 120.000000
-      vertex 52.576340 600.000000 61.067360
-      vertex 52.500000 600.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.000000 600.000000 120.000000
-      vertex 52.500000 600.000000 60.000000
-      vertex 0.000000 600.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 0.000000
-      vertex 60.000000 600.000000 52.500000
-      vertex 61.067360 600.000000 52.576340
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 0.000000
-      vertex 61.067360 600.000000 52.576340
-      vertex 62.112995 600.000000 52.803802
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 0.000000
-      vertex 62.112995 600.000000 52.803802
-      vertex 63.115612 600.000000 53.177761
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 0.000000
-      vertex 63.115612 600.000000 53.177761
-      vertex 64.054810 600.000000 53.690598
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 0.000000
-      vertex 64.054810 600.000000 53.690598
-      vertex 64.911453 600.000000 54.331879
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 600.000000 0.000000
-      vertex 0.000000 600.000000 0.000000
-      vertex 60.000000 600.000000 52.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 65.668121 600.000000 55.088543
-      vertex 120.000000 600.000000 0.000000
-      vertex 64.911453 600.000000 54.331879
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 55.088543 600.000000 65.668121
-      vertex 54.331879 600.000000 64.911453
-      vertex 0.000000 600.000000 120.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 66.309402 600.000000 55.945194
-      vertex 120.000000 600.000000 0.000000
-      vertex 65.668121 600.000000 55.088543
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 55.945194 600.000000 66.309402
-      vertex 55.088543 600.000000 65.668121
-      vertex 0.000000 600.000000 120.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 66.822243 600.000000 56.884388
-      vertex 120.000000 600.000000 0.000000
-      vertex 66.309402 600.000000 55.945194
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 56.884388 600.000000 66.822243
-      vertex 55.945194 600.000000 66.309402
-      vertex 0.000000 600.000000 120.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 67.196198 600.000000 57.887005
-      vertex 120.000000 600.000000 0.000000
-      vertex 66.822243 600.000000 56.884388
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 0.000000 600.000000 0.000000
-      vertex 120.000000 600.000000 0.000000
-      vertex 0.000000 0.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 0.000000 0.000000 0.000000
-      vertex 120.000000 600.000000 0.000000
-      vertex 120.000000 0.000000 0.000000
-    endloop
-  endfacet
-  facet normal 1.000000 -0.000000 0.000000
-    outer loop
-      vertex 120.000000 0.000000 120.000000
-      vertex 120.000000 600.000000 0.000000
-      vertex 120.000000 600.000000 120.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 120.000000 0.000000 120.000000
-      vertex 120.000000 0.000000 0.000000
-      vertex 120.000000 600.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.349466 0.000000 -0.936949
-    outer loop
-      vertex 62.112995 630.000000 52.803802
-      vertex 63.115612 630.000000 53.177761
-      vertex 62.112995 600.000000 52.803802
-    endloop
-  endfacet
-  facet normal -0.707109 0.000000 0.707105
-    outer loop
-      vertex 55.088543 600.000000 65.668121
-      vertex 54.331879 630.000000 64.911453
-      vertex 54.331879 600.000000 64.911453
-    endloop
-  endfacet
-  facet normal 0.349466 0.000000 -0.936949
-    outer loop
-      vertex 62.112995 600.000000 52.803802
-      vertex 63.115612 630.000000 53.177761
-      vertex 63.115612 600.000000 53.177761
-    endloop
-  endfacet
-  facet normal -0.707109 0.000000 0.707105
-    outer loop
-      vertex 55.088543 630.000000 65.668121
-      vertex 54.331879 630.000000 64.911453
-      vertex 55.088543 600.000000 65.668121
-    endloop
-  endfacet
-  facet normal 0.479246 0.000000 -0.877681
-    outer loop
-      vertex 63.115612 630.000000 53.177761
-      vertex 64.054810 630.000000 53.690598
-      vertex 63.115612 600.000000 53.177761
-    endloop
-  endfacet
-  facet normal -0.800539 0.000000 0.599281
-    outer loop
-      vertex 54.331879 600.000000 64.911453
-      vertex 53.690598 630.000000 64.054810
-      vertex 53.690598 600.000000 64.054810
-    endloop
-  endfacet
-  facet normal 0.479246 0.000000 -0.877681
-    outer loop
-      vertex 63.115612 600.000000 53.177761
-      vertex 64.054810 630.000000 53.690598
-      vertex 64.054810 600.000000 53.690598
-    endloop
-  endfacet
-  facet normal -0.800539 0.000000 0.599281
-    outer loop
-      vertex 54.331879 630.000000 64.911453
-      vertex 53.690598 630.000000 64.054810
-      vertex 54.331879 600.000000 64.911453
-    endloop
-  endfacet
-  facet normal 0.599281 0.000000 -0.800539
-    outer loop
-      vertex 64.054810 630.000000 53.690598
-      vertex 64.911453 630.000000 54.331879
-      vertex 64.054810 600.000000 53.690598
-    endloop
-  endfacet
-  facet normal -0.877681 0.000000 0.479246
-    outer loop
-      vertex 53.690598 600.000000 64.054810
-      vertex 53.177761 630.000000 63.115612
-      vertex 53.177761 600.000000 63.115612
-    endloop
-  endfacet
-  facet normal 0.599281 0.000000 -0.800539
-    outer loop
-      vertex 64.054810 600.000000 53.690598
-      vertex 64.911453 630.000000 54.331879
-      vertex 64.911453 600.000000 54.331879
-    endloop
-  endfacet
-  facet normal 0.997452 0.000000 0.071340
-    outer loop
-      vertex 67.500000 600.000000 60.000000
-      vertex 67.423660 630.000000 61.067360
-      vertex 67.423660 600.000000 61.067360
-    endloop
-  endfacet
-  facet normal -0.877681 0.000000 0.479246
-    outer loop
-      vertex 53.690598 630.000000 64.054810
-      vertex 53.177761 630.000000 63.115612
-      vertex 53.690598 600.000000 64.054810
-    endloop
-  endfacet
-  facet normal 0.997452 0.000000 0.071340
-    outer loop
-      vertex 67.500000 630.000000 60.000000
-      vertex 67.423660 630.000000 61.067360
-      vertex 67.500000 600.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.707105 0.000000 -0.707109
-    outer loop
-      vertex 64.911453 630.000000 54.331879
-      vertex 65.668121 630.000000 55.088543
-      vertex 64.911453 600.000000 54.331879
-    endloop
-  endfacet
-  facet normal -0.936949 0.000000 0.349466
-    outer loop
-      vertex 53.177761 600.000000 63.115612
-      vertex 52.803802 630.000000 62.112995
-      vertex 52.803802 600.000000 62.112995
-    endloop
-  endfacet
-  facet normal 0.707105 0.000000 -0.707109
-    outer loop
-      vertex 64.911453 600.000000 54.331879
-      vertex 65.668121 630.000000 55.088543
-      vertex 65.668121 600.000000 55.088543
-    endloop
-  endfacet
-  facet normal 0.977147 0.000000 0.212564
-    outer loop
-      vertex 67.423660 600.000000 61.067360
-      vertex 67.196198 630.000000 62.112995
-      vertex 67.196198 600.000000 62.112995
-    endloop
-  endfacet
-  facet normal -0.936949 0.000000 0.349466
-    outer loop
-      vertex 53.177761 630.000000 63.115612
-      vertex 52.803802 630.000000 62.112995
-      vertex 53.177761 600.000000 63.115612
-    endloop
-  endfacet
-  facet normal 0.977147 0.000000 0.212564
-    outer loop
-      vertex 67.423660 630.000000 61.067360
-      vertex 67.196198 630.000000 62.112995
-      vertex 67.423660 600.000000 61.067360
-    endloop
-  endfacet
-  facet normal 0.800541 0.000000 -0.599278
-    outer loop
-      vertex 65.668121 630.000000 55.088543
-      vertex 66.309402 630.000000 55.945194
-      vertex 65.668121 600.000000 55.088543
-    endloop
-  endfacet
-  facet normal -0.977147 0.000000 0.212564
-    outer loop
-      vertex 52.803802 600.000000 62.112995
-      vertex 52.576340 630.000000 61.067360
-      vertex 52.576340 600.000000 61.067360
-    endloop
-  endfacet
-  facet normal 0.800541 0.000000 -0.599278
-    outer loop
-      vertex 65.668121 600.000000 55.088543
-      vertex 66.309402 630.000000 55.945194
-      vertex 66.309402 600.000000 55.945194
-    endloop
-  endfacet
-  facet normal -0.977147 0.000000 0.212564
-    outer loop
-      vertex 52.803802 630.000000 62.112995
-      vertex 52.576340 630.000000 61.067360
-      vertex 52.803802 600.000000 62.112995
-    endloop
-  endfacet
-  facet normal 0.936950 0.000000 0.349463
-    outer loop
-      vertex 67.196198 630.000000 62.112995
-      vertex 66.822243 630.000000 63.115612
-      vertex 67.196198 600.000000 62.112995
-    endloop
-  endfacet
-  facet normal 0.936950 0.000000 0.349463
-    outer loop
-      vertex 67.196198 600.000000 62.112995
-      vertex 66.822243 630.000000 63.115612
-      vertex 66.822243 600.000000 63.115612
-    endloop
-  endfacet
-  facet normal 0.877678 0.000000 -0.479250
-    outer loop
-      vertex 66.309402 630.000000 55.945194
-      vertex 66.822243 630.000000 56.884388
-      vertex 66.309402 600.000000 55.945194
-    endloop
-  endfacet
-  facet normal -0.997452 0.000000 0.071340
-    outer loop
-      vertex 52.576340 600.000000 61.067360
-      vertex 52.500000 630.000000 60.000000
-      vertex 52.500000 600.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.877678 0.000000 -0.479250
-    outer loop
-      vertex 66.309402 600.000000 55.945194
-      vertex 66.822243 630.000000 56.884388
-      vertex 66.822243 600.000000 56.884388
-    endloop
-  endfacet
-  facet normal -0.997452 0.000000 0.071340
-    outer loop
-      vertex 52.576340 630.000000 61.067360
-      vertex 52.500000 630.000000 60.000000
-      vertex 52.576340 600.000000 61.067360
-    endloop
-  endfacet
-  facet normal 0.877679 0.000000 0.479249
-    outer loop
-      vertex 66.822243 630.000000 63.115612
-      vertex 66.309402 630.000000 64.054810
-      vertex 66.822243 600.000000 63.115612
-    endloop
-  endfacet
-  facet normal 0.877679 0.000000 0.479249
-    outer loop
-      vertex 66.822243 600.000000 63.115612
-      vertex 66.309402 630.000000 64.054810
-      vertex 66.309402 600.000000 64.054810
-    endloop
-  endfacet
-  facet normal 0.936950 0.000000 -0.349463
-    outer loop
-      vertex 66.822243 630.000000 56.884388
-      vertex 67.196198 630.000000 57.887005
-      vertex 66.822243 600.000000 56.884388
-    endloop
-  endfacet
-  facet normal -0.997452 0.000000 -0.071340
-    outer loop
-      vertex 52.500000 600.000000 60.000000
-      vertex 52.576340 630.000000 58.932640
-      vertex 52.576340 600.000000 58.932640
-    endloop
-  endfacet
-  facet normal 0.936950 0.000000 -0.349463
-    outer loop
-      vertex 66.822243 600.000000 56.884388
-      vertex 67.196198 630.000000 57.887005
-      vertex 67.196198 600.000000 57.887005
-    endloop
-  endfacet
-  facet normal -0.997452 -0.000000 -0.071340
-    outer loop
-      vertex 52.500000 630.000000 60.000000
-      vertex 52.576340 630.000000 58.932640
-      vertex 52.500000 600.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.800539 0.000000 0.599281
-    outer loop
-      vertex 66.309402 630.000000 64.054810
-      vertex 65.668121 630.000000 64.911453
-      vertex 66.309402 600.000000 64.054810
-    endloop
-  endfacet
-  facet normal 0.977147 0.000000 -0.212564
-    outer loop
-      vertex 67.196198 630.000000 57.887005
-      vertex 67.423660 630.000000 58.932640
-      vertex 67.196198 600.000000 57.887005
-    endloop
-  endfacet
-  facet normal 0.800539 0.000000 0.599281
-    outer loop
-      vertex 66.309402 600.000000 64.054810
-      vertex 65.668121 630.000000 64.911453
-      vertex 65.668121 600.000000 64.911453
-    endloop
-  endfacet
-  facet normal 0.977147 0.000000 -0.212564
-    outer loop
-      vertex 67.196198 600.000000 57.887005
-      vertex 67.423660 630.000000 58.932640
-      vertex 67.423660 600.000000 58.932640
-    endloop
-  endfacet
-  facet normal -0.977147 0.000000 -0.212564
-    outer loop
-      vertex 52.576340 600.000000 58.932640
-      vertex 52.803802 630.000000 57.887005
-      vertex 52.803802 600.000000 57.887005
-    endloop
-  endfacet
-  facet normal -0.977147 -0.000000 -0.212564
-    outer loop
-      vertex 52.576340 630.000000 58.932640
-      vertex 52.803802 630.000000 57.887005
-      vertex 52.576340 600.000000 58.932640
-    endloop
-  endfacet
-  facet normal 0.997452 0.000000 -0.071340
-    outer loop
-      vertex 67.423660 630.000000 58.932640
-      vertex 67.500000 630.000000 60.000000
-      vertex 67.423660 600.000000 58.932640
-    endloop
-  endfacet
-  facet normal 0.997452 0.000000 -0.071340
-    outer loop
-      vertex 67.423660 600.000000 58.932640
-      vertex 67.500000 630.000000 60.000000
-      vertex 67.500000 600.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.707107 0.000000 0.707107
-    outer loop
-      vertex 65.668121 630.000000 64.911453
-      vertex 64.911453 630.000000 65.668121
-      vertex 65.668121 600.000000 64.911453
-    endloop
-  endfacet
-  facet normal 0.707107 0.000000 0.707107
-    outer loop
-      vertex 65.668121 600.000000 64.911453
-      vertex 64.911453 630.000000 65.668121
-      vertex 64.911453 600.000000 65.668121
-    endloop
-  endfacet
-  facet normal -0.936949 0.000000 -0.349466
-    outer loop
-      vertex 52.803802 600.000000 57.887005
-      vertex 53.177761 630.000000 56.884388
-      vertex 53.177761 600.000000 56.884388
-    endloop
-  endfacet
-  facet normal -0.936949 -0.000000 -0.349466
-    outer loop
-      vertex 52.803802 630.000000 57.887005
-      vertex 53.177761 630.000000 56.884388
-      vertex 52.803802 600.000000 57.887005
-    endloop
-  endfacet
-  facet normal 0.599281 0.000000 0.800539
-    outer loop
-      vertex 64.911453 630.000000 65.668121
-      vertex 64.054810 630.000000 66.309402
-      vertex 64.911453 600.000000 65.668121
-    endloop
-  endfacet
-  facet normal 0.599281 0.000000 0.800539
-    outer loop
-      vertex 64.911453 600.000000 65.668121
-      vertex 64.054810 630.000000 66.309402
-      vertex 64.054810 600.000000 66.309402
-    endloop
-  endfacet
-  facet normal -0.877680 0.000000 -0.479247
-    outer loop
-      vertex 53.177761 600.000000 56.884388
-      vertex 53.690598 630.000000 55.945194
-      vertex 53.690598 600.000000 55.945194
-    endloop
-  endfacet
-  facet normal -0.877680 -0.000000 -0.479247
-    outer loop
-      vertex 53.177761 630.000000 56.884388
-      vertex 53.690598 630.000000 55.945194
-      vertex 53.177761 600.000000 56.884388
-    endloop
-  endfacet
-  facet normal 0.479249 0.000000 0.877679
-    outer loop
-      vertex 64.054810 630.000000 66.309402
-      vertex 63.115612 630.000000 66.822243
-      vertex 64.054810 600.000000 66.309402
-    endloop
-  endfacet
-  facet normal -0.800541 0.000000 -0.599278
-    outer loop
-      vertex 53.690598 600.000000 55.945194
-      vertex 54.331879 630.000000 55.088543
-      vertex 54.331879 600.000000 55.088543
-    endloop
-  endfacet
-  facet normal 0.479249 0.000000 0.877679
-    outer loop
-      vertex 64.054810 600.000000 66.309402
-      vertex 63.115612 630.000000 66.822243
-      vertex 63.115612 600.000000 66.822243
-    endloop
-  endfacet
-  facet normal -0.800541 -0.000000 -0.599278
-    outer loop
-      vertex 53.690598 630.000000 55.945194
-      vertex 54.331879 630.000000 55.088543
-      vertex 53.690598 600.000000 55.945194
-    endloop
-  endfacet
-  facet normal -0.707107 -0.000000 -0.707107
-    outer loop
-      vertex 54.331879 630.000000 55.088543
-      vertex 55.088543 630.000000 54.331879
-      vertex 54.331879 600.000000 55.088543
-    endloop
-  endfacet
-  facet normal 0.349463 0.000000 0.936950
-    outer loop
-      vertex 63.115612 630.000000 66.822243
-      vertex 62.112995 630.000000 67.196198
-      vertex 63.115612 600.000000 66.822243
-    endloop
-  endfacet
-  facet normal -0.707107 0.000000 -0.707107
-    outer loop
-      vertex 54.331879 600.000000 55.088543
-      vertex 55.088543 630.000000 54.331879
-      vertex 55.088543 600.000000 54.331879
-    endloop
-  endfacet
-  facet normal 0.349463 0.000000 0.936950
-    outer loop
-      vertex 63.115612 600.000000 66.822243
-      vertex 62.112995 630.000000 67.196198
-      vertex 62.112995 600.000000 67.196198
-    endloop
-  endfacet
-  facet normal -0.599278 -0.000000 -0.800541
-    outer loop
-      vertex 55.088543 630.000000 54.331879
-      vertex 55.945194 630.000000 53.690598
-      vertex 55.088543 600.000000 54.331879
-    endloop
-  endfacet
-  facet normal 0.212564 0.000000 0.977147
-    outer loop
-      vertex 62.112995 630.000000 67.196198
-      vertex 61.067360 630.000000 67.423660
-      vertex 62.112995 600.000000 67.196198
-    endloop
-  endfacet
-  facet normal -0.599278 0.000000 -0.800541
-    outer loop
-      vertex 55.088543 600.000000 54.331879
-      vertex 55.945194 630.000000 53.690598
-      vertex 55.945194 600.000000 53.690598
-    endloop
-  endfacet
-  facet normal 0.212564 0.000000 0.977147
-    outer loop
-      vertex 62.112995 600.000000 67.196198
-      vertex 61.067360 630.000000 67.423660
-      vertex 61.067360 600.000000 67.423660
-    endloop
-  endfacet
-  facet normal -0.479247 -0.000000 -0.877680
-    outer loop
-      vertex 55.945194 630.000000 53.690598
-      vertex 56.884388 630.000000 53.177761
-      vertex 55.945194 600.000000 53.690598
-    endloop
-  endfacet
-  facet normal 0.071340 0.000000 0.997452
-    outer loop
-      vertex 61.067360 630.000000 67.423660
-      vertex 60.000000 630.000000 67.500000
-      vertex 61.067360 600.000000 67.423660
-    endloop
-  endfacet
-  facet normal -0.479247 0.000000 -0.877680
-    outer loop
-      vertex 55.945194 600.000000 53.690598
-      vertex 56.884388 630.000000 53.177761
-      vertex 56.884388 600.000000 53.177761
-    endloop
-  endfacet
-  facet normal 0.071340 0.000000 0.997452
-    outer loop
-      vertex 61.067360 600.000000 67.423660
-      vertex 60.000000 630.000000 67.500000
-      vertex 60.000000 600.000000 67.500000
-    endloop
-  endfacet
-  facet normal -0.349466 -0.000000 -0.936949
-    outer loop
-      vertex 56.884388 630.000000 53.177761
-      vertex 57.887005 630.000000 52.803802
-      vertex 56.884388 600.000000 53.177761
-    endloop
-  endfacet
-  facet normal -0.071340 0.000000 0.997452
-    outer loop
-      vertex 60.000000 630.000000 67.500000
-      vertex 58.932640 630.000000 67.423660
-      vertex 60.000000 600.000000 67.500000
-    endloop
-  endfacet
-  facet normal -0.349466 0.000000 -0.936949
-    outer loop
-      vertex 56.884388 600.000000 53.177761
-      vertex 57.887005 630.000000 52.803802
-      vertex 57.887005 600.000000 52.803802
-    endloop
-  endfacet
-  facet normal -0.071340 0.000000 0.997452
-    outer loop
-      vertex 60.000000 600.000000 67.500000
-      vertex 58.932640 630.000000 67.423660
-      vertex 58.932640 600.000000 67.423660
-    endloop
-  endfacet
-  facet normal -0.212564 -0.000000 -0.977147
-    outer loop
-      vertex 57.887005 630.000000 52.803802
-      vertex 58.932640 630.000000 52.576340
-      vertex 57.887005 600.000000 52.803802
-    endloop
-  endfacet
-  facet normal -0.212564 0.000000 0.977147
-    outer loop
-      vertex 58.932640 630.000000 67.423660
-      vertex 57.887005 630.000000 67.196198
-      vertex 58.932640 600.000000 67.423660
-    endloop
-  endfacet
-  facet normal -0.212564 0.000000 -0.977147
-    outer loop
-      vertex 57.887005 600.000000 52.803802
-      vertex 58.932640 630.000000 52.576340
-      vertex 58.932640 600.000000 52.576340
-    endloop
-  endfacet
-  facet normal -0.212564 0.000000 0.977147
-    outer loop
-      vertex 58.932640 600.000000 67.423660
-      vertex 57.887005 630.000000 67.196198
-      vertex 57.887005 600.000000 67.196198
-    endloop
-  endfacet
-  facet normal -0.071340 -0.000000 -0.997452
-    outer loop
-      vertex 58.932640 630.000000 52.576340
-      vertex 60.000000 630.000000 52.500000
-      vertex 58.932640 600.000000 52.576340
-    endloop
-  endfacet
-  facet normal -0.349463 0.000000 0.936950
-    outer loop
-      vertex 57.887005 630.000000 67.196198
-      vertex 56.884388 630.000000 66.822243
-      vertex 57.887005 600.000000 67.196198
-    endloop
-  endfacet
-  facet normal -0.071340 0.000000 -0.997452
-    outer loop
-      vertex 58.932640 600.000000 52.576340
-      vertex 60.000000 630.000000 52.500000
-      vertex 60.000000 600.000000 52.500000
-    endloop
-  endfacet
-  facet normal -0.349463 0.000000 0.936950
-    outer loop
-      vertex 57.887005 600.000000 67.196198
-      vertex 56.884388 630.000000 66.822243
-      vertex 56.884388 600.000000 66.822243
-    endloop
-  endfacet
-  facet normal 0.071340 0.000000 -0.997452
-    outer loop
-      vertex 60.000000 630.000000 52.500000
-      vertex 61.067360 630.000000 52.576340
-      vertex 60.000000 600.000000 52.500000
-    endloop
-  endfacet
-  facet normal -0.479250 0.000000 0.877678
-    outer loop
-      vertex 56.884388 630.000000 66.822243
-      vertex 55.945194 630.000000 66.309402
-      vertex 56.884388 600.000000 66.822243
-    endloop
-  endfacet
-  facet normal 0.071340 0.000000 -0.997452
-    outer loop
-      vertex 60.000000 600.000000 52.500000
-      vertex 61.067360 630.000000 52.576340
-      vertex 61.067360 600.000000 52.576340
-    endloop
-  endfacet
-  facet normal -0.479250 0.000000 0.877678
-    outer loop
-      vertex 56.884388 600.000000 66.822243
-      vertex 55.945194 630.000000 66.309402
-      vertex 55.945194 600.000000 66.309402
-    endloop
-  endfacet
-  facet normal 0.212564 0.000000 -0.977147
-    outer loop
-      vertex 61.067360 630.000000 52.576340
-      vertex 62.112995 630.000000 52.803802
-      vertex 61.067360 600.000000 52.576340
-    endloop
-  endfacet
-  facet normal -0.599278 0.000000 0.800541
-    outer loop
-      vertex 55.945194 630.000000 66.309402
-      vertex 55.088543 630.000000 65.668121
-      vertex 55.945194 600.000000 66.309402
-    endloop
-  endfacet
-  facet normal 0.212564 0.000000 -0.977147
-    outer loop
-      vertex 61.067360 600.000000 52.576340
-      vertex 62.112995 630.000000 52.803802
-      vertex 62.112995 600.000000 52.803802
-    endloop
-  endfacet
-  facet normal -0.599278 0.000000 0.800541
-    outer loop
-      vertex 55.945194 600.000000 66.309402
-      vertex 55.088543 630.000000 65.668121
-      vertex 55.088543 600.000000 65.668121
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 67.423660 630.000000 61.067360
-      vertex 67.423660 630.000000 58.932640
-      vertex 65.668121 630.000000 64.911453
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 67.500000 630.000000 60.000000
-      vertex 67.423660 630.000000 58.932640
-      vertex 67.423660 630.000000 61.067360
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 65.668121 630.000000 64.911453
-      vertex 67.423660 630.000000 58.932640
-      vertex 64.911453 630.000000 65.668121
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 0.000000
-    outer loop
-      vertex 55.945194 630.000000 66.309402
-      vertex 56.884388 630.000000 66.822243
-      vertex 55.088543 630.000000 65.668121
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 67.423660 630.000000 58.932640
-      vertex 66.822243 630.000000 56.884388
-      vertex 64.911453 630.000000 65.668121
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 54.331879 630.000000 64.911453
-      vertex 52.803802 630.000000 62.112995
-      vertex 53.690598 630.000000 64.054810
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 53.690598 630.000000 64.054810
-      vertex 52.803802 630.000000 62.112995
-      vertex 53.177761 630.000000 63.115612
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 67.196198 630.000000 57.887005
-      vertex 66.822243 630.000000 56.884388
-      vertex 67.423660 630.000000 58.932640
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 0.000000
-    outer loop
-      vertex 53.690598 630.000000 55.945194
-      vertex 66.822243 630.000000 56.884388
-      vertex 55.088543 630.000000 54.331879
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 64.911453 630.000000 65.668121
-      vertex 66.822243 630.000000 56.884388
-      vertex 53.690598 630.000000 55.945194
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 0.000000
-    outer loop
-      vertex 55.088543 630.000000 54.331879
-      vertex 66.822243 630.000000 56.884388
-      vertex 56.884388 630.000000 53.177761
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 0.000000
-    outer loop
-      vertex 57.887005 630.000000 67.196198
-      vertex 58.932640 630.000000 67.423660
-      vertex 56.884388 630.000000 66.822243
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 0.000000
-    outer loop
-      vertex 56.884388 630.000000 53.177761
-      vertex 64.911453 630.000000 54.331879
-      vertex 58.932640 630.000000 52.576340
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 66.822243 630.000000 56.884388
-      vertex 64.911453 630.000000 54.331879
-      vertex 56.884388 630.000000 53.177761
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 0.000000
-    outer loop
-      vertex 58.932640 630.000000 52.576340
-      vertex 64.911453 630.000000 54.331879
-      vertex 60.000000 630.000000 52.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 60.000000 630.000000 52.500000
-      vertex 64.911453 630.000000 54.331879
-      vertex 61.067360 630.000000 52.576340
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 61.067360 630.000000 52.576340
-      vertex 64.911453 630.000000 54.331879
-      vertex 62.112995 630.000000 52.803802
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 62.112995 630.000000 52.803802
-      vertex 64.911453 630.000000 54.331879
-      vertex 63.115612 630.000000 53.177761
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 63.115612 630.000000 53.177761
-      vertex 64.911453 630.000000 54.331879
-      vertex 64.054810 630.000000 53.690598
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 66.822243 630.000000 56.884388
-      vertex 65.668121 630.000000 55.088543
-      vertex 64.911453 630.000000 54.331879
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 66.309402 630.000000 55.945194
-      vertex 65.668121 630.000000 55.088543
-      vertex 66.822243 630.000000 56.884388
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 55.088543 630.000000 65.668121
-      vertex 52.576340 630.000000 58.932640
-      vertex 54.331879 630.000000 64.911453
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 52.803802 630.000000 62.112995
-      vertex 52.576340 630.000000 58.932640
-      vertex 52.576340 630.000000 61.067360
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 52.576340 630.000000 61.067360
-      vertex 52.576340 630.000000 58.932640
-      vertex 52.500000 630.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 56.884388 630.000000 66.822243
-      vertex 52.576340 630.000000 58.932640
-      vertex 55.088543 630.000000 65.668121
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 54.331879 630.000000 64.911453
-      vertex 52.576340 630.000000 58.932640
-      vertex 52.803802 630.000000 62.112995
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 61.067360 630.000000 67.423660
-      vertex 62.112995 630.000000 67.196198
-      vertex 60.000000 630.000000 67.500000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 60.000000 630.000000 67.500000
-      vertex 62.112995 630.000000 67.196198
-      vertex 58.932640 630.000000 67.423660
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 0.000000
-    outer loop
-      vertex 52.576340 630.000000 58.932640
-      vertex 62.112995 630.000000 67.196198
-      vertex 52.803802 630.000000 57.887005
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 58.932640 630.000000 67.423660
-      vertex 62.112995 630.000000 67.196198
-      vertex 56.884388 630.000000 66.822243
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 0.000000
-    outer loop
-      vertex 56.884388 630.000000 66.822243
-      vertex 62.112995 630.000000 67.196198
-      vertex 52.576340 630.000000 58.932640
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 62.112995 630.000000 67.196198
-      vertex 53.177761 630.000000 56.884388
-      vertex 52.803802 630.000000 57.887005
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 63.115612 630.000000 66.822243
-      vertex 64.054810 630.000000 66.309402
-      vertex 62.112995 630.000000 67.196198
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 0.000000
-    outer loop
-      vertex 53.177761 630.000000 56.884388
-      vertex 64.911453 630.000000 65.668121
-      vertex 53.690598 630.000000 55.945194
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 62.112995 630.000000 67.196198
-      vertex 64.911453 630.000000 65.668121
-      vertex 53.177761 630.000000 56.884388
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 64.054810 630.000000 66.309402
-      vertex 64.911453 630.000000 65.668121
-      vertex 62.112995 630.000000 67.196198
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 53.690598 630.000000 55.945194
-      vertex 55.088543 630.000000 54.331879
-      vertex 54.331879 630.000000 55.088543
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 55.088543 630.000000 54.331879
-      vertex 56.884388 630.000000 53.177761
-      vertex 55.945194 630.000000 53.690598
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 56.884388 630.000000 53.177761
-      vertex 58.932640 630.000000 52.576340
-      vertex 57.887005 630.000000 52.803802
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 67.196198 630.000000 62.112995
-      vertex 67.423660 630.000000 61.067360
-      vertex 66.822243 630.000000 63.115612
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 66.822243 630.000000 63.115612
-      vertex 67.423660 630.000000 61.067360
-      vertex 66.309402 630.000000 64.054810
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 66.309402 630.000000 64.054810
-      vertex 67.423660 630.000000 61.067360
-      vertex 65.668121 630.000000 64.911453
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/JetBreakup.FCStd b/apps/cpu/Multiphase/backup/JetBreakup.FCStd
deleted file mode 100644
index 00f4eb43bb96542b5dc11c9ec84bd8b5a348a6fc..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/JetBreakup.FCStd and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/JetBreakup.stl b/apps/cpu/Multiphase/backup/JetBreakup.stl
deleted file mode 100644
index a82398ec6fc375e407ebe8ac42b811318e2fa788..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/JetBreakup.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl
deleted file mode 100644
index d42dbd278b8e81c2c30a813f685d394ad351423a..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl
+++ /dev/null
@@ -1,1584 +0,0 @@
-solid Mesh
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -61.000000 -610.000000 -61.000000
-      vertex -60.000000 -610.000000 60.000000
-      vertex -61.000000 -610.000000 61.000000
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex -60.000000 -610.000000 -60.000000
-      vertex -60.000000 -610.000000 60.000000
-      vertex -61.000000 -610.000000 -61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -61.000000 -610.000000 -61.000000
-      vertex 61.000000 -610.000000 -61.000000
-      vertex -60.000000 -610.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 61.000000 -610.000000 -61.000000
-      vertex 60.000000 -610.000000 -60.000000
-      vertex -60.000000 -610.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 60.000000 -610.000000 60.000000
-      vertex 61.000000 -610.000000 61.000000
-      vertex -60.000000 -610.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -60.000000 -610.000000 60.000000
-      vertex 61.000000 -610.000000 61.000000
-      vertex -61.000000 -610.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 61.000000 -610.000000 -61.000000
-      vertex 61.000000 -610.000000 61.000000
-      vertex 60.000000 -610.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 60.000000 -610.000000 -60.000000
-      vertex 61.000000 -610.000000 61.000000
-      vertex 60.000000 -610.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 61.000000 -3.000000 61.000000
-      vertex -61.000000 -610.000000 61.000000
-      vertex 61.000000 -610.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 61.000000 -3.000000 61.000000
-      vertex -61.000000 -3.000000 61.000000
-      vertex -61.000000 -610.000000 61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 61.000000 -3.000000 -61.000000
-      vertex 61.000000 -610.000000 61.000000
-      vertex 61.000000 -610.000000 -61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 -0.000000
-    outer loop
-      vertex 61.000000 -3.000000 -61.000000
-      vertex 61.000000 -3.000000 61.000000
-      vertex 61.000000 -610.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -61.000000 -3.000000 -61.000000
-      vertex 61.000000 -610.000000 -61.000000
-      vertex -61.000000 -610.000000 -61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -61.000000 -3.000000 -61.000000
-      vertex 61.000000 -3.000000 -61.000000
-      vertex 61.000000 -610.000000 -61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 0.000000
-    outer loop
-      vertex -61.000000 -3.000000 61.000000
-      vertex -61.000000 -610.000000 -61.000000
-      vertex -61.000000 -610.000000 61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -61.000000 -3.000000 61.000000
-      vertex -61.000000 -3.000000 -61.000000
-      vertex -61.000000 -610.000000 -61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex -60.000000 -610.000000 -60.000000
-      vertex -60.000000 -3.000000 -60.000000
-      vertex -60.000000 -610.000000 60.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 -0.000000
-    outer loop
-      vertex -60.000000 -3.000000 -60.000000
-      vertex -60.000000 -3.000000 60.000000
-      vertex -60.000000 -610.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -0.000000 1.000000
-    outer loop
-      vertex 60.000000 -610.000000 -60.000000
-      vertex 60.000000 -3.000000 -60.000000
-      vertex -60.000000 -610.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 60.000000 -3.000000 -60.000000
-      vertex -60.000000 -3.000000 -60.000000
-      vertex -60.000000 -610.000000 -60.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 60.000000 -610.000000 60.000000
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 60.000000 -610.000000 -60.000000
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex 60.000000 -3.000000 60.000000
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 60.000000 -610.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -60.000000 -610.000000 60.000000
-      vertex -60.000000 -3.000000 60.000000
-      vertex 60.000000 -610.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -60.000000 -3.000000 60.000000
-      vertex 60.000000 -3.000000 60.000000
-      vertex 60.000000 -610.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 61.000000 -3.000000 61.000000
-      vertex -61.000000 -1.000000 61.000000
-      vertex -61.000000 -3.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 61.000000 -1.000000 61.000000
-      vertex -61.000000 -1.000000 61.000000
-      vertex 61.000000 -3.000000 61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 61.000000 -1.000000 -61.000000
-      vertex 61.000000 -3.000000 61.000000
-      vertex 61.000000 -3.000000 -61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 -0.000000
-    outer loop
-      vertex 61.000000 -1.000000 -61.000000
-      vertex 61.000000 -1.000000 61.000000
-      vertex 61.000000 -3.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -61.000000 -1.000000 -61.000000
-      vertex 61.000000 -3.000000 -61.000000
-      vertex -61.000000 -3.000000 -61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -61.000000 -1.000000 -61.000000
-      vertex 61.000000 -1.000000 -61.000000
-      vertex 61.000000 -3.000000 -61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 0.000000
-    outer loop
-      vertex -61.000000 -1.000000 61.000000
-      vertex -61.000000 -3.000000 -61.000000
-      vertex -61.000000 -3.000000 61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex -61.000000 -1.000000 61.000000
-      vertex -61.000000 -1.000000 -61.000000
-      vertex -61.000000 -3.000000 -61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -60.000000 -3.000000 -60.000000
-      vertex -4.489497 -3.000000 -6.621512
-      vertex -5.807964 -3.000000 -5.501595
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex -5.807964 -3.000000 -5.501595
-      vertex -6.854857 -3.000000 -4.124431
-      vertex -60.000000 -3.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -60.000000 -3.000000 -60.000000
-      vertex -2.961105 -3.000000 -7.431814
-      vertex -4.489497 -3.000000 -6.621512
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex -6.854857 -3.000000 -4.124431
-      vertex -7.581225 -3.000000 -2.554412
-      vertex -60.000000 -3.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -60.000000 -3.000000 -60.000000
-      vertex -1.294256 -3.000000 -7.894612
-      vertex -2.961105 -3.000000 -7.431814
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex -7.581225 -3.000000 -2.554412
-      vertex -7.953104 -3.000000 -0.864952
-      vertex -60.000000 -3.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -60.000000 -3.000000 -60.000000
-      vertex 0.433111 -3.000000 -7.988267
-      vertex -1.294256 -3.000000 -7.894612
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex -7.953104 -3.000000 -0.864952
-      vertex -7.953104 -3.000000 0.864952
-      vertex -60.000000 -3.000000 -60.000000
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex -5.807964 -3.000000 5.501595
-      vertex -60.000000 -3.000000 60.000000
-      vertex -6.854857 -3.000000 4.124431
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex -6.854857 -3.000000 4.124431
-      vertex -60.000000 -3.000000 60.000000
-      vertex -7.581225 -3.000000 2.554412
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex -7.581225 -3.000000 2.554412
-      vertex -60.000000 -3.000000 60.000000
-      vertex -7.953104 -3.000000 0.864952
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex -7.953104 -3.000000 0.864952
-      vertex -60.000000 -3.000000 60.000000
-      vertex -60.000000 -3.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 0.433111 -3.000000 -7.988267
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 2.140227 -3.000000 -7.708400
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 2.140227 -3.000000 -7.708400
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 3.747267 -3.000000 -7.068096
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 3.747267 -3.000000 -7.068096
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 5.179090 -3.000000 -6.097296
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -60.000000 -3.000000 -60.000000
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 0.433111 -3.000000 -7.988267
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 6.368744 -3.000000 -4.841394
-      vertex 5.179090 -3.000000 -6.097296
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -5.807964 -3.000000 5.501595
-      vertex -4.489497 -3.000000 6.621512
-      vertex -60.000000 -3.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 7.260603 -3.000000 -3.359113
-      vertex 6.368744 -3.000000 -4.841394
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -4.489497 -3.000000 6.621512
-      vertex -2.961105 -3.000000 7.431814
-      vertex -60.000000 -3.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 7.812964 -3.000000 -1.719764
-      vertex 7.260603 -3.000000 -3.359113
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -2.961105 -3.000000 7.431814
-      vertex -1.294256 -3.000000 7.894612
-      vertex -60.000000 -3.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 8.000000 -3.000000 0.000000
-      vertex 7.812964 -3.000000 -1.719764
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -1.294256 -3.000000 7.894612
-      vertex 0.433111 -3.000000 7.988267
-      vertex -60.000000 -3.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 8.000000 -3.000000 0.000000
-      vertex 60.000000 -3.000000 60.000000
-      vertex 7.812964 -3.000000 1.719764
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 7.812964 -3.000000 1.719764
-      vertex 60.000000 -3.000000 60.000000
-      vertex 7.260603 -3.000000 3.359113
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 7.260603 -3.000000 3.359113
-      vertex 60.000000 -3.000000 60.000000
-      vertex 6.368744 -3.000000 4.841394
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 6.368744 -3.000000 4.841394
-      vertex 60.000000 -3.000000 60.000000
-      vertex 5.179090 -3.000000 6.097296
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 5.179090 -3.000000 6.097296
-      vertex 60.000000 -3.000000 60.000000
-      vertex 3.747267 -3.000000 7.068096
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 3.747267 -3.000000 7.068096
-      vertex 60.000000 -3.000000 60.000000
-      vertex 2.140227 -3.000000 7.708400
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 2.140227 -3.000000 7.708400
-      vertex 60.000000 -3.000000 60.000000
-      vertex 0.433111 -3.000000 7.988267
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 60.000000 -3.000000 -60.000000
-      vertex 60.000000 -3.000000 60.000000
-      vertex 8.000000 -3.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 0.433111 -3.000000 7.988267
-      vertex 60.000000 -3.000000 60.000000
-      vertex -60.000000 -3.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 61.000000 -1.000000 61.000000
-      vertex -61.000000 0.000000 61.000000
-      vertex -61.000000 -1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 61.000000 0.000000 61.000000
-      vertex -61.000000 0.000000 61.000000
-      vertex 61.000000 -1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 61.000000 -1.000000 -61.000000
-      vertex 61.000000 0.000000 61.000000
-      vertex 61.000000 -1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 -0.000000
-    outer loop
-      vertex 61.000000 -0.000000 -61.000000
-      vertex 61.000000 0.000000 61.000000
-      vertex 61.000000 -1.000000 -61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -61.000000 -1.000000 -61.000000
-      vertex 61.000000 -0.000000 -61.000000
-      vertex 61.000000 -1.000000 -61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex -61.000000 -0.000000 -61.000000
-      vertex 61.000000 -0.000000 -61.000000
-      vertex -61.000000 -1.000000 -61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex -61.000000 -1.000000 61.000000
-      vertex -61.000000 -0.000000 -61.000000
-      vertex -61.000000 -1.000000 -61.000000
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 0.000000
-    outer loop
-      vertex -61.000000 0.000000 61.000000
-      vertex -61.000000 -0.000000 -61.000000
-      vertex -61.000000 -1.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.647386 0.000000 0.762162
-    outer loop
-      vertex -4.489497 -1.000000 -6.621512
-      vertex -5.807964 -1.000000 -5.501595
-      vertex -5.807964 -3.000000 -5.501595
-    endloop
-  endfacet
-  facet normal 0.647386 0.000000 0.762162
-    outer loop
-      vertex -4.489497 -1.000000 -6.621512
-      vertex -5.807964 -3.000000 -5.501595
-      vertex -4.489497 -3.000000 -6.621512
-    endloop
-  endfacet
-  facet normal 0.468408 0.000000 0.883512
-    outer loop
-      vertex -2.961105 -1.000000 -7.431814
-      vertex -4.489497 -1.000000 -6.621512
-      vertex -4.489497 -3.000000 -6.621512
-    endloop
-  endfacet
-  facet normal 0.468408 0.000000 0.883512
-    outer loop
-      vertex -2.961105 -1.000000 -7.431814
-      vertex -4.489497 -3.000000 -6.621512
-      vertex -2.961105 -3.000000 -7.431814
-    endloop
-  endfacet
-  facet normal 0.267528 0.000000 0.963550
-    outer loop
-      vertex -1.294256 -1.000000 -7.894612
-      vertex -2.961105 -1.000000 -7.431814
-      vertex -2.961105 -3.000000 -7.431814
-    endloop
-  endfacet
-  facet normal -0.994138 -0.000000 -0.108119
-    outer loop
-      vertex 7.812964 -1.000000 1.719764
-      vertex 8.000000 -3.000000 0.000000
-      vertex 7.812964 -3.000000 1.719764
-    endloop
-  endfacet
-  facet normal 0.267528 0.000000 0.963550
-    outer loop
-      vertex -1.294256 -1.000000 -7.894612
-      vertex -2.961105 -3.000000 -7.431814
-      vertex -1.294256 -3.000000 -7.894612
-    endloop
-  endfacet
-  facet normal -0.994138 0.000000 -0.108119
-    outer loop
-      vertex 7.812964 -1.000000 1.719764
-      vertex 8.000000 -1.000000 0.000000
-      vertex 8.000000 -3.000000 0.000000
-    endloop
-  endfacet
-  facet normal 0.054139 0.000000 0.998533
-    outer loop
-      vertex 0.433111 -1.000000 -7.988267
-      vertex -1.294256 -1.000000 -7.894612
-      vertex -1.294256 -3.000000 -7.894612
-    endloop
-  endfacet
-  facet normal -0.947653 -0.000000 -0.319302
-    outer loop
-      vertex 7.260603 -1.000000 3.359113
-      vertex 7.812964 -3.000000 1.719764
-      vertex 7.260603 -3.000000 3.359113
-    endloop
-  endfacet
-  facet normal 0.054139 0.000000 0.998533
-    outer loop
-      vertex 0.433111 -1.000000 -7.988267
-      vertex -1.294256 -3.000000 -7.894612
-      vertex 0.433111 -3.000000 -7.988267
-    endloop
-  endfacet
-  facet normal -0.947653 0.000000 -0.319302
-    outer loop
-      vertex 7.260603 -1.000000 3.359113
-      vertex 7.812964 -1.000000 1.719764
-      vertex 7.812964 -3.000000 1.719764
-    endloop
-  endfacet
-  facet normal -0.161782 0.000000 0.986826
-    outer loop
-      vertex 2.140227 -1.000000 -7.708400
-      vertex 0.433111 -1.000000 -7.988267
-      vertex 0.433111 -3.000000 -7.988267
-    endloop
-  endfacet
-  facet normal -0.161782 0.000000 0.986826
-    outer loop
-      vertex 2.140227 -1.000000 -7.708400
-      vertex 0.433111 -3.000000 -7.988267
-      vertex 2.140227 -3.000000 -7.708400
-    endloop
-  endfacet
-  facet normal -0.856857 -0.000000 -0.515554
-    outer loop
-      vertex 6.368744 -1.000000 4.841394
-      vertex 7.260603 -3.000000 3.359113
-      vertex 6.368744 -3.000000 4.841394
-    endloop
-  endfacet
-  facet normal -0.856857 0.000000 -0.515554
-    outer loop
-      vertex 6.368744 -1.000000 4.841394
-      vertex 7.260603 -1.000000 3.359113
-      vertex 7.260603 -3.000000 3.359113
-    endloop
-  endfacet
-  facet normal -0.370138 0.000000 0.928977
-    outer loop
-      vertex 3.747267 -1.000000 -7.068096
-      vertex 2.140227 -3.000000 -7.708400
-      vertex 3.747267 -3.000000 -7.068096
-    endloop
-  endfacet
-  facet normal -0.725995 -0.000000 -0.687699
-    outer loop
-      vertex 5.179090 -1.000000 6.097296
-      vertex 6.368744 -3.000000 4.841394
-      vertex 5.179090 -3.000000 6.097296
-    endloop
-  endfacet
-  facet normal -0.370138 0.000000 0.928977
-    outer loop
-      vertex 3.747267 -1.000000 -7.068096
-      vertex 2.140227 -1.000000 -7.708400
-      vertex 2.140227 -3.000000 -7.708400
-    endloop
-  endfacet
-  facet normal -0.725995 0.000000 -0.687699
-    outer loop
-      vertex 5.179090 -1.000000 6.097296
-      vertex 6.368744 -1.000000 4.841394
-      vertex 6.368744 -3.000000 4.841394
-    endloop
-  endfacet
-  facet normal -0.561187 0.000000 0.827689
-    outer loop
-      vertex 5.179090 -1.000000 -6.097296
-      vertex 3.747267 -3.000000 -7.068096
-      vertex 5.179090 -3.000000 -6.097296
-    endloop
-  endfacet
-  facet normal -0.561187 -0.000000 -0.827689
-    outer loop
-      vertex 3.747267 -1.000000 7.068096
-      vertex 5.179090 -3.000000 6.097296
-      vertex 3.747267 -3.000000 7.068096
-    endloop
-  endfacet
-  facet normal -0.561187 0.000000 0.827689
-    outer loop
-      vertex 5.179090 -1.000000 -6.097296
-      vertex 3.747267 -1.000000 -7.068096
-      vertex 3.747267 -3.000000 -7.068096
-    endloop
-  endfacet
-  facet normal -0.561187 0.000000 -0.827689
-    outer loop
-      vertex 3.747267 -1.000000 7.068096
-      vertex 5.179090 -1.000000 6.097296
-      vertex 5.179090 -3.000000 6.097296
-    endloop
-  endfacet
-  facet normal -0.725995 0.000000 0.687699
-    outer loop
-      vertex 6.368744 -1.000000 -4.841394
-      vertex 5.179090 -3.000000 -6.097296
-      vertex 6.368744 -3.000000 -4.841394
-    endloop
-  endfacet
-  facet normal -0.370138 -0.000000 -0.928977
-    outer loop
-      vertex 2.140227 -1.000000 7.708400
-      vertex 3.747267 -3.000000 7.068096
-      vertex 2.140227 -3.000000 7.708400
-    endloop
-  endfacet
-  facet normal -0.725995 0.000000 0.687699
-    outer loop
-      vertex 6.368744 -1.000000 -4.841394
-      vertex 5.179090 -1.000000 -6.097296
-      vertex 5.179090 -3.000000 -6.097296
-    endloop
-  endfacet
-  facet normal -0.370138 0.000000 -0.928977
-    outer loop
-      vertex 2.140227 -1.000000 7.708400
-      vertex 3.747267 -1.000000 7.068096
-      vertex 3.747267 -3.000000 7.068096
-    endloop
-  endfacet
-  facet normal -0.856857 0.000000 0.515554
-    outer loop
-      vertex 7.260603 -1.000000 -3.359113
-      vertex 6.368744 -3.000000 -4.841394
-      vertex 7.260603 -3.000000 -3.359113
-    endloop
-  endfacet
-  facet normal -0.161782 -0.000000 -0.986826
-    outer loop
-      vertex 0.433111 -1.000000 7.988267
-      vertex 2.140227 -3.000000 7.708400
-      vertex 0.433111 -3.000000 7.988267
-    endloop
-  endfacet
-  facet normal -0.856857 0.000000 0.515554
-    outer loop
-      vertex 7.260603 -1.000000 -3.359113
-      vertex 6.368744 -1.000000 -4.841394
-      vertex 6.368744 -3.000000 -4.841394
-    endloop
-  endfacet
-  facet normal -0.161782 0.000000 -0.986826
-    outer loop
-      vertex 0.433111 -1.000000 7.988267
-      vertex 2.140227 -1.000000 7.708400
-      vertex 2.140227 -3.000000 7.708400
-    endloop
-  endfacet
-  facet normal -0.947653 0.000000 0.319302
-    outer loop
-      vertex 7.812964 -1.000000 -1.719764
-      vertex 7.260603 -3.000000 -3.359113
-      vertex 7.812964 -3.000000 -1.719764
-    endloop
-  endfacet
-  facet normal -0.947653 0.000000 0.319302
-    outer loop
-      vertex 7.812964 -1.000000 -1.719764
-      vertex 7.260603 -1.000000 -3.359113
-      vertex 7.260603 -3.000000 -3.359113
-    endloop
-  endfacet
-  facet normal 0.054139 0.000000 -0.998533
-    outer loop
-      vertex -1.294256 -1.000000 7.894612
-      vertex 0.433111 -3.000000 7.988267
-      vertex -1.294256 -3.000000 7.894612
-    endloop
-  endfacet
-  facet normal 0.054139 0.000000 -0.998533
-    outer loop
-      vertex -1.294256 -1.000000 7.894612
-      vertex 0.433111 -1.000000 7.988267
-      vertex 0.433111 -3.000000 7.988267
-    endloop
-  endfacet
-  facet normal -0.994138 0.000000 0.108119
-    outer loop
-      vertex 8.000000 -1.000000 0.000000
-      vertex 7.812964 -3.000000 -1.719764
-      vertex 8.000000 -3.000000 0.000000
-    endloop
-  endfacet
-  facet normal -0.994138 0.000000 0.108119
-    outer loop
-      vertex 8.000000 -1.000000 0.000000
-      vertex 7.812964 -1.000000 -1.719764
-      vertex 7.812964 -3.000000 -1.719764
-    endloop
-  endfacet
-  facet normal 0.267528 0.000000 -0.963550
-    outer loop
-      vertex -2.961105 -1.000000 7.431814
-      vertex -1.294256 -3.000000 7.894612
-      vertex -2.961105 -3.000000 7.431814
-    endloop
-  endfacet
-  facet normal 0.267528 0.000000 -0.963550
-    outer loop
-      vertex -2.961105 -1.000000 7.431814
-      vertex -1.294256 -1.000000 7.894612
-      vertex -1.294256 -3.000000 7.894612
-    endloop
-  endfacet
-  facet normal 0.468408 0.000000 -0.883512
-    outer loop
-      vertex -4.489497 -1.000000 6.621512
-      vertex -2.961105 -1.000000 7.431814
-      vertex -2.961105 -3.000000 7.431814
-    endloop
-  endfacet
-  facet normal 0.468408 0.000000 -0.883512
-    outer loop
-      vertex -4.489497 -1.000000 6.621512
-      vertex -2.961105 -3.000000 7.431814
-      vertex -4.489497 -3.000000 6.621512
-    endloop
-  endfacet
-  facet normal 0.647386 0.000000 -0.762162
-    outer loop
-      vertex -5.807964 -1.000000 5.501595
-      vertex -4.489497 -1.000000 6.621512
-      vertex -4.489497 -3.000000 6.621512
-    endloop
-  endfacet
-  facet normal 0.647386 0.000000 -0.762162
-    outer loop
-      vertex -5.807964 -1.000000 5.501595
-      vertex -4.489497 -3.000000 6.621512
-      vertex -5.807964 -3.000000 5.501595
-    endloop
-  endfacet
-  facet normal 0.796093 0.000000 -0.605174
-    outer loop
-      vertex -6.854857 -1.000000 4.124431
-      vertex -5.807964 -1.000000 5.501595
-      vertex -5.807964 -3.000000 5.501595
-    endloop
-  endfacet
-  facet normal 0.796093 0.000000 -0.605174
-    outer loop
-      vertex -6.854857 -1.000000 4.124431
-      vertex -5.807964 -3.000000 5.501595
-      vertex -6.854857 -3.000000 4.124431
-    endloop
-  endfacet
-  facet normal 0.907575 0.000000 -0.419889
-    outer loop
-      vertex -7.581225 -1.000000 2.554412
-      vertex -6.854857 -1.000000 4.124431
-      vertex -6.854857 -3.000000 4.124431
-    endloop
-  endfacet
-  facet normal 0.907575 0.000000 -0.419889
-    outer loop
-      vertex -7.581225 -1.000000 2.554412
-      vertex -6.854857 -3.000000 4.124431
-      vertex -7.581225 -3.000000 2.554412
-    endloop
-  endfacet
-  facet normal 0.976621 0.000000 -0.214970
-    outer loop
-      vertex -7.953104 -1.000000 0.864952
-      vertex -7.581225 -1.000000 2.554412
-      vertex -7.581225 -3.000000 2.554412
-    endloop
-  endfacet
-  facet normal 0.976621 0.000000 -0.214970
-    outer loop
-      vertex -7.953104 -1.000000 0.864952
-      vertex -7.581225 -3.000000 2.554412
-      vertex -7.953104 -3.000000 0.864952
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 -0.000000
-    outer loop
-      vertex -7.953104 -1.000000 -0.864952
-      vertex -7.953104 -1.000000 0.864952
-      vertex -7.953104 -3.000000 0.864952
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex -7.953104 -1.000000 -0.864952
-      vertex -7.953104 -3.000000 0.864952
-      vertex -7.953104 -3.000000 -0.864952
-    endloop
-  endfacet
-  facet normal 0.976621 0.000000 0.214970
-    outer loop
-      vertex -7.581225 -1.000000 -2.554412
-      vertex -7.953104 -1.000000 -0.864952
-      vertex -7.953104 -3.000000 -0.864952
-    endloop
-  endfacet
-  facet normal 0.976621 0.000000 0.214970
-    outer loop
-      vertex -7.581225 -1.000000 -2.554412
-      vertex -7.953104 -3.000000 -0.864952
-      vertex -7.581225 -3.000000 -2.554412
-    endloop
-  endfacet
-  facet normal 0.907575 0.000000 0.419889
-    outer loop
-      vertex -6.854857 -1.000000 -4.124431
-      vertex -7.581225 -1.000000 -2.554412
-      vertex -7.581225 -3.000000 -2.554412
-    endloop
-  endfacet
-  facet normal 0.907575 0.000000 0.419889
-    outer loop
-      vertex -6.854857 -1.000000 -4.124431
-      vertex -7.581225 -3.000000 -2.554412
-      vertex -6.854857 -3.000000 -4.124431
-    endloop
-  endfacet
-  facet normal 0.796093 0.000000 0.605174
-    outer loop
-      vertex -5.807964 -1.000000 -5.501595
-      vertex -6.854857 -1.000000 -4.124431
-      vertex -6.854857 -3.000000 -4.124431
-    endloop
-  endfacet
-  facet normal 0.796093 0.000000 0.605174
-    outer loop
-      vertex -5.807964 -1.000000 -5.501595
-      vertex -6.854857 -3.000000 -4.124431
-      vertex -5.807964 -3.000000 -5.501595
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 61.000000 -0.000000 -61.000000
-      vertex -61.000000 -0.000000 -61.000000
-      vertex -60.000000 -0.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 60.000000 -0.000000 -60.000000
-      vertex 61.000000 -0.000000 -61.000000
-      vertex -60.000000 -0.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -61.000000 0.000000 61.000000
-      vertex -60.000000 -0.000000 -60.000000
-      vertex -61.000000 -0.000000 -61.000000
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -60.000000 0.000000 60.000000
-      vertex -60.000000 -0.000000 -60.000000
-      vertex -61.000000 0.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 60.000000 0.000000 60.000000
-      vertex -60.000000 0.000000 60.000000
-      vertex -61.000000 0.000000 61.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 61.000000 0.000000 61.000000
-      vertex 60.000000 0.000000 60.000000
-      vertex -61.000000 0.000000 61.000000
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 61.000000 0.000000 61.000000
-      vertex 61.000000 -0.000000 -61.000000
-      vertex 60.000000 -0.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 61.000000 0.000000 61.000000
-      vertex 60.000000 -0.000000 -60.000000
-      vertex 60.000000 0.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -4.489497 -1.000000 -6.621512
-      vertex -6.854857 -1.000000 -4.124431
-      vertex -5.807964 -1.000000 -5.501595
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -2.961105 -1.000000 -7.431814
-      vertex -1.294256 -1.000000 -7.894612
-      vertex -4.489497 -1.000000 -6.621512
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -1.294256 -1.000000 -7.894612
-      vertex 0.433111 -1.000000 -7.988267
-      vertex -4.489497 -1.000000 -6.621512
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -7.581225 -1.000000 -2.554412
-      vertex -7.953104 -1.000000 0.864952
-      vertex -7.953104 -1.000000 -0.864952
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex 2.140227 -1.000000 -7.708400
-      vertex 3.747267 -1.000000 -7.068096
-      vertex 0.433111 -1.000000 -7.988267
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -7.953104 -1.000000 0.864952
-      vertex -6.854857 -1.000000 4.124431
-      vertex -7.581225 -1.000000 2.554412
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -7.581225 -1.000000 -2.554412
-      vertex -6.854857 -1.000000 4.124431
-      vertex -7.953104 -1.000000 0.864952
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex 3.747267 -1.000000 -7.068096
-      vertex 5.179090 -1.000000 -6.097296
-      vertex 0.433111 -1.000000 -7.988267
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -6.854857 -1.000000 -4.124431
-      vertex -4.489497 -1.000000 6.621512
-      vertex -7.581225 -1.000000 -2.554412
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -6.854857 -1.000000 4.124431
-      vertex -4.489497 -1.000000 6.621512
-      vertex -5.807964 -1.000000 5.501595
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -4.489497 -1.000000 -6.621512
-      vertex -4.489497 -1.000000 6.621512
-      vertex -6.854857 -1.000000 -4.124431
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -7.581225 -1.000000 -2.554412
-      vertex -4.489497 -1.000000 6.621512
-      vertex -6.854857 -1.000000 4.124431
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex 6.368744 -1.000000 -4.841394
-      vertex 7.260603 -1.000000 -3.359113
-      vertex 5.179090 -1.000000 -6.097296
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex 5.179090 -1.000000 -6.097296
-      vertex 7.260603 -1.000000 -3.359113
-      vertex 0.433111 -1.000000 -7.988267
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -4.489497 -1.000000 6.621512
-      vertex -1.294256 -1.000000 7.894612
-      vertex -2.961105 -1.000000 7.431814
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 0.433111 -1.000000 -7.988267
-      vertex -1.294256 -1.000000 7.894612
-      vertex -4.489497 -1.000000 -6.621512
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -4.489497 -1.000000 -6.621512
-      vertex -1.294256 -1.000000 7.894612
-      vertex -4.489497 -1.000000 6.621512
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex 8.000000 -1.000000 0.000000
-      vertex 7.812964 -1.000000 1.719764
-      vertex 7.812964 -1.000000 -1.719764
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex 7.812964 -1.000000 -1.719764
-      vertex 7.812964 -1.000000 1.719764
-      vertex 7.260603 -1.000000 -3.359113
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -1.294256 -1.000000 7.894612
-      vertex 2.140227 -1.000000 7.708400
-      vertex 0.433111 -1.000000 7.988267
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -1.294256 -1.000000 7.894612
-      vertex 3.747267 -1.000000 7.068096
-      vertex 2.140227 -1.000000 7.708400
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 -0.000000
-    outer loop
-      vertex 7.260603 -1.000000 3.359113
-      vertex 6.368744 -1.000000 4.841394
-      vertex 7.812964 -1.000000 1.719764
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex 7.260603 -1.000000 -3.359113
-      vertex 6.368744 -1.000000 4.841394
-      vertex 0.433111 -1.000000 -7.988267
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex 7.812964 -1.000000 1.719764
-      vertex 6.368744 -1.000000 4.841394
-      vertex 7.260603 -1.000000 -3.359113
-    endloop
-  endfacet
-  facet normal -0.000000 -1.000000 0.000000
-    outer loop
-      vertex 6.368744 -1.000000 4.841394
-      vertex 5.179090 -1.000000 6.097296
-      vertex 0.433111 -1.000000 -7.988267
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 0.433111 -1.000000 -7.988267
-      vertex 5.179090 -1.000000 6.097296
-      vertex -1.294256 -1.000000 7.894612
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex -1.294256 -1.000000 7.894612
-      vertex 5.179090 -1.000000 6.097296
-      vertex 3.747267 -1.000000 7.068096
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -4.489497 -0.000000 -6.621512
-      vertex -60.000000 -0.000000 -60.000000
-      vertex -5.807964 -0.000000 -5.501595
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -6.854857 -0.000000 -4.124431
-      vertex -5.807964 -0.000000 -5.501595
-      vertex -60.000000 -0.000000 -60.000000
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -2.961105 -0.000000 -7.431814
-      vertex -60.000000 -0.000000 -60.000000
-      vertex -4.489497 -0.000000 -6.621512
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -7.581225 -0.000000 -2.554412
-      vertex -6.854857 -0.000000 -4.124431
-      vertex -60.000000 -0.000000 -60.000000
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -1.294256 -0.000000 -7.894612
-      vertex -60.000000 -0.000000 -60.000000
-      vertex -2.961105 -0.000000 -7.431814
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -7.953104 -0.000000 -0.864952
-      vertex -7.581225 -0.000000 -2.554412
-      vertex -60.000000 -0.000000 -60.000000
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 0.433111 -0.000000 -7.988267
-      vertex -60.000000 -0.000000 -60.000000
-      vertex -1.294256 -0.000000 -7.894612
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -7.953104 0.000000 0.864952
-      vertex -7.953104 -0.000000 -0.864952
-      vertex -60.000000 -0.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -60.000000 0.000000 60.000000
-      vertex -5.807964 0.000000 5.501595
-      vertex -6.854857 0.000000 4.124431
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -60.000000 0.000000 60.000000
-      vertex -6.854857 0.000000 4.124431
-      vertex -7.581225 0.000000 2.554412
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -60.000000 0.000000 60.000000
-      vertex -7.581225 0.000000 2.554412
-      vertex -7.953104 0.000000 0.864952
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -60.000000 0.000000 60.000000
-      vertex -7.953104 0.000000 0.864952
-      vertex -60.000000 -0.000000 -60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 -0.000000 -60.000000
-      vertex 0.433111 -0.000000 -7.988267
-      vertex 2.140227 -0.000000 -7.708400
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 -0.000000 -60.000000
-      vertex 2.140227 -0.000000 -7.708400
-      vertex 3.747267 -0.000000 -7.068096
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 -0.000000 -60.000000
-      vertex 3.747267 -0.000000 -7.068096
-      vertex 5.179090 -0.000000 -6.097296
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 -0.000000 -60.000000
-      vertex -60.000000 -0.000000 -60.000000
-      vertex 0.433111 -0.000000 -7.988267
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 6.368744 -0.000000 -4.841394
-      vertex 60.000000 -0.000000 -60.000000
-      vertex 5.179090 -0.000000 -6.097296
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -4.489497 0.000000 6.621512
-      vertex -5.807964 0.000000 5.501595
-      vertex -60.000000 0.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 7.260603 -0.000000 -3.359113
-      vertex 60.000000 -0.000000 -60.000000
-      vertex 6.368744 -0.000000 -4.841394
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -2.961105 0.000000 7.431814
-      vertex -4.489497 0.000000 6.621512
-      vertex -60.000000 0.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 7.812964 -0.000000 -1.719764
-      vertex 60.000000 -0.000000 -60.000000
-      vertex 7.260603 -0.000000 -3.359113
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -1.294256 0.000000 7.894612
-      vertex -2.961105 0.000000 7.431814
-      vertex -60.000000 0.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 8.000000 0.000000 0.000000
-      vertex 60.000000 -0.000000 -60.000000
-      vertex 7.812964 -0.000000 -1.719764
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 0.433111 0.000000 7.988267
-      vertex -1.294256 0.000000 7.894612
-      vertex -60.000000 0.000000 60.000000
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 0.000000 60.000000
-      vertex 8.000000 0.000000 0.000000
-      vertex 7.812964 0.000000 1.719764
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 0.000000 60.000000
-      vertex 7.812964 0.000000 1.719764
-      vertex 7.260603 0.000000 3.359113
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 0.000000 60.000000
-      vertex 7.260603 0.000000 3.359113
-      vertex 6.368744 0.000000 4.841394
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 0.000000 60.000000
-      vertex 6.368744 0.000000 4.841394
-      vertex 5.179090 0.000000 6.097296
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 0.000000 60.000000
-      vertex 5.179090 0.000000 6.097296
-      vertex 3.747267 0.000000 7.068096
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 0.000000 60.000000
-      vertex 3.747267 0.000000 7.068096
-      vertex 2.140227 0.000000 7.708400
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 0.000000 60.000000
-      vertex 2.140227 0.000000 7.708400
-      vertex 0.433111 0.000000 7.988267
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 0.000000 60.000000
-      vertex 0.433111 0.000000 7.988267
-      vertex -60.000000 0.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 60.000000 0.000000 60.000000
-      vertex 60.000000 -0.000000 -60.000000
-      vertex 8.000000 0.000000 0.000000
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -6.854857 -0.000000 -4.124431
-      vertex -4.489497 -0.000000 -6.621512
-      vertex -5.807964 -0.000000 -5.501595
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -7.581225 0.000000 2.554412
-      vertex -7.953104 -0.000000 -0.864952
-      vertex -7.953104 0.000000 0.864952
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 3.747267 -0.000000 -7.068096
-      vertex -1.294256 -0.000000 -7.894612
-      vertex -2.961105 -0.000000 -7.431814
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 3.747267 -0.000000 -7.068096
-      vertex 0.433111 -0.000000 -7.988267
-      vertex -1.294256 -0.000000 -7.894612
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 3.747267 -0.000000 -7.068096
-      vertex 2.140227 -0.000000 -7.708400
-      vertex 0.433111 -0.000000 -7.988267
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -6.854857 0.000000 4.124431
-      vertex -7.953104 -0.000000 -0.864952
-      vertex -7.581225 0.000000 2.554412
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -5.807964 0.000000 5.501595
-      vertex -7.581225 -0.000000 -2.554412
-      vertex -7.953104 -0.000000 -0.864952
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -5.807964 0.000000 5.501595
-      vertex -6.854857 -0.000000 -4.124431
-      vertex -7.581225 -0.000000 -2.554412
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -5.807964 0.000000 5.501595
-      vertex -7.953104 -0.000000 -0.864952
-      vertex -6.854857 0.000000 4.124431
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 6.368744 -0.000000 -4.841394
-      vertex 5.179090 -0.000000 -6.097296
-      vertex 3.747267 -0.000000 -7.068096
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -2.961105 0.000000 7.431814
-      vertex -5.807964 0.000000 5.501595
-      vertex -4.489497 0.000000 6.621512
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -2.961105 0.000000 7.431814
-      vertex -2.961105 -0.000000 -7.431814
-      vertex -4.489497 -0.000000 -6.621512
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -2.961105 0.000000 7.431814
-      vertex 7.260603 -0.000000 -3.359113
-      vertex 6.368744 -0.000000 -4.841394
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex -2.961105 0.000000 7.431814
-      vertex -4.489497 -0.000000 -6.621512
-      vertex -6.854857 -0.000000 -4.124431
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -2.961105 0.000000 7.431814
-      vertex 3.747267 -0.000000 -7.068096
-      vertex -2.961105 -0.000000 -7.431814
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -2.961105 0.000000 7.431814
-      vertex 6.368744 -0.000000 -4.841394
-      vertex 3.747267 -0.000000 -7.068096
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex -2.961105 0.000000 7.431814
-      vertex -6.854857 -0.000000 -4.124431
-      vertex -5.807964 0.000000 5.501595
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 7.812964 0.000000 1.719764
-      vertex -2.961105 0.000000 7.431814
-      vertex -1.294256 0.000000 7.894612
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 7.812964 0.000000 1.719764
-      vertex 7.812964 -0.000000 -1.719764
-      vertex 7.260603 -0.000000 -3.359113
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 7.812964 0.000000 1.719764
-      vertex 8.000000 0.000000 0.000000
-      vertex 7.812964 -0.000000 -1.719764
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 7.812964 0.000000 1.719764
-      vertex 7.260603 -0.000000 -3.359113
-      vertex -2.961105 0.000000 7.431814
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 2.140227 0.000000 7.708400
-      vertex -1.294256 0.000000 7.894612
-      vertex 0.433111 0.000000 7.988267
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 2.140227 0.000000 7.708400
-      vertex 7.812964 0.000000 1.719764
-      vertex -1.294256 0.000000 7.894612
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 6.368744 0.000000 4.841394
-      vertex 7.260603 0.000000 3.359113
-      vertex 7.812964 0.000000 1.719764
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 5.179090 0.000000 6.097296
-      vertex 2.140227 0.000000 7.708400
-      vertex 3.747267 0.000000 7.068096
-    endloop
-  endfacet
-  facet normal -0.000000 1.000000 -0.000000
-    outer loop
-      vertex 5.179090 0.000000 6.097296
-      vertex 7.812964 0.000000 1.719764
-      vertex 2.140227 0.000000 7.708400
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 -0.000000
-    outer loop
-      vertex 5.179090 0.000000 6.097296
-      vertex 6.368744 0.000000 4.841394
-      vertex 7.812964 0.000000 1.719764
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd b/apps/cpu/Multiphase/backup/JetBreakup2.FCStd
deleted file mode 100644
index 8e6ed64fa6eeb4fb3c310c7513463635b0f6ee19..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 b/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1
deleted file mode 100644
index 6d0a48be9fed1a6a9398d9e8a620f5480d5fcd8d..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.stl b/apps/cpu/Multiphase/backup/JetBreakup2.stl
deleted file mode 100644
index 3c36f67113ef3741bbe0f8526dfe5efaf635f1ec..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/JetBreakup2.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/JetBreakup3.FCStd b/apps/cpu/Multiphase/backup/JetBreakup3.FCStd
deleted file mode 100644
index beaf8c0e46fe33f5d006d98e3a96214ba09f2bbb..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/JetBreakup3.FCStd and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/JetBreakup3.stl b/apps/cpu/Multiphase/backup/JetBreakup3.stl
deleted file mode 100644
index a7f77cbf00ea06646ff3b8e6cfddec6be7eea3b4..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/JetBreakup3.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl
deleted file mode 100644
index b54ebccc96d8e38114cb34ce13a2d3daccd8cb45..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl
+++ /dev/null
@@ -1,1584 +0,0 @@
-solid Visualization Toolkit generated SLA File
- facet normal 0 1 0
-  outer loop
-   vertex -61 610 61
-   vertex -60 610 -60
-   vertex -61 610 -61
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex -60 610 60
-   vertex -60 610 -60
-   vertex -61 610 61
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -61 610 61
-   vertex 61 610 61
-   vertex -60 610 60
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 61 610 61
-   vertex 60 610 60
-   vertex -60 610 60
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 60 610 -60
-   vertex 61 610 -61
-   vertex -60 610 -60
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -60 610 -60
-   vertex 61 610 -61
-   vertex -61 610 -61
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 61 610 61
-   vertex 61 610 -61
-   vertex 60 610 60
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 60 610 60
-   vertex 61 610 -61
-   vertex 60 610 -60
-  endloop
- endfacet
- facet normal 0 0 -1
-  outer loop
-   vertex 61 3 -61
-   vertex -61 610 -61
-   vertex 61 610 -61
-  endloop
- endfacet
- facet normal 0 0 -1
-  outer loop
-   vertex 61 3 -61
-   vertex -61 3 -61
-   vertex -61 610 -61
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 61 3 61
-   vertex 61 610 -61
-   vertex 61 610 61
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 61 3 61
-   vertex 61 3 -61
-   vertex 61 610 -61
-  endloop
- endfacet
- facet normal 0 0 1
-  outer loop
-   vertex -61 3 61
-   vertex 61 610 61
-   vertex -61 610 61
-  endloop
- endfacet
- facet normal 0 -0 1
-  outer loop
-   vertex -61 3 61
-   vertex 61 3 61
-   vertex 61 610 61
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -61 3 -61
-   vertex -61 610 61
-   vertex -61 610 -61
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -61 3 -61
-   vertex -61 3 61
-   vertex -61 610 61
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex -60 610 60
-   vertex -60 3 60
-   vertex -60 610 -60
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex -60 3 60
-   vertex -60 3 -60
-   vertex -60 610 -60
-  endloop
- endfacet
- facet normal 0 0 -1
-  outer loop
-   vertex 60 610 60
-   vertex 60 3 60
-   vertex -60 610 60
-  endloop
- endfacet
- facet normal 0 0 -1
-  outer loop
-   vertex 60 3 60
-   vertex -60 3 60
-   vertex -60 610 60
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex 60 610 -60
-   vertex 60 3 60
-   vertex 60 610 60
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex 60 3 -60
-   vertex 60 3 60
-   vertex 60 610 -60
-  endloop
- endfacet
- facet normal 0 0 1
-  outer loop
-   vertex -60 610 -60
-   vertex -60 3 -60
-   vertex 60 610 -60
-  endloop
- endfacet
- facet normal 0 -0 1
-  outer loop
-   vertex -60 3 -60
-   vertex 60 3 -60
-   vertex 60 610 -60
-  endloop
- endfacet
- facet normal 0 0 -1
-  outer loop
-   vertex 61 3 -61
-   vertex -61 1 -61
-   vertex -61 3 -61
-  endloop
- endfacet
- facet normal 0 0 -1
-  outer loop
-   vertex 61 1 -61
-   vertex -61 1 -61
-   vertex 61 3 -61
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 61 1 61
-   vertex 61 3 -61
-   vertex 61 3 61
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 61 1 61
-   vertex 61 1 -61
-   vertex 61 3 -61
-  endloop
- endfacet
- facet normal 0 0 1
-  outer loop
-   vertex -61 1 61
-   vertex 61 3 61
-   vertex -61 3 61
-  endloop
- endfacet
- facet normal 0 -0 1
-  outer loop
-   vertex -61 1 61
-   vertex 61 1 61
-   vertex 61 3 61
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -61 1 -61
-   vertex -61 3 61
-   vertex -61 3 -61
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -61 1 -61
-   vertex -61 1 61
-   vertex -61 3 61
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -60 3 60
-   vertex -4.489497184753418 3 6.6215119361877441
-   vertex -5.8079638481140137 3 5.5015950202941895
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex -5.8079638481140137 3 5.5015950202941895
-   vertex -6.8548569679260254 3 4.1244311332702637
-   vertex -60 3 60
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -60 3 60
-   vertex -2.9611051082611084 3 7.4318141937255859
-   vertex -4.489497184753418 3 6.6215119361877441
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex -6.8548569679260254 3 4.1244311332702637
-   vertex -7.5812249183654785 3 2.5544118881225586
-   vertex -60 3 60
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -60 3 60
-   vertex -1.2942559719085693 3 7.8946118354797363
-   vertex -2.9611051082611084 3 7.4318141937255859
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex -7.5812249183654785 3 2.5544118881225586
-   vertex -7.9531040191650391 3 0.86495202779769897
-   vertex -60 3 60
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -60 3 60
-   vertex 0.43311101198196411 3 7.9882669448852539
-   vertex -1.2942559719085693 3 7.8946118354797363
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex -7.9531040191650391 3 0.86495202779769897
-   vertex -7.9531040191650391 3 -0.86495202779769897
-   vertex -60 3 60
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -5.8079638481140137 3 -5.5015950202941895
-   vertex -60 3 -60
-   vertex -6.8548569679260254 3 -4.1244311332702637
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -6.8548569679260254 3 -4.1244311332702637
-   vertex -60 3 -60
-   vertex -7.5812249183654785 3 -2.5544118881225586
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -7.5812249183654785 3 -2.5544118881225586
-   vertex -60 3 -60
-   vertex -7.9531040191650391 3 -0.86495202779769897
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -7.9531040191650391 3 -0.86495202779769897
-   vertex -60 3 -60
-   vertex -60 3 60
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 0.43311101198196411 3 7.9882669448852539
-   vertex 60 3 60
-   vertex 2.1402270793914795 3 7.708399772644043
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 2.1402270793914795 3 7.708399772644043
-   vertex 60 3 60
-   vertex 3.7472670078277588 3 7.0680961608886719
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 3.7472670078277588 3 7.0680961608886719
-   vertex 60 3 60
-   vertex 5.1790900230407715 3 6.0972962379455566
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -60 3 60
-   vertex 60 3 60
-   vertex 0.43311101198196411 3 7.9882669448852539
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 60 3 60
-   vertex 6.368743896484375 3 4.8413939476013184
-   vertex 5.1790900230407715 3 6.0972962379455566
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -5.8079638481140137 3 -5.5015950202941895
-   vertex -4.489497184753418 3 -6.6215119361877441
-   vertex -60 3 -60
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 60 3 60
-   vertex 7.2606029510498047 3 3.3591129779815674
-   vertex 6.368743896484375 3 4.8413939476013184
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -4.489497184753418 3 -6.6215119361877441
-   vertex -2.9611051082611084 3 -7.4318141937255859
-   vertex -60 3 -60
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 60 3 60
-   vertex 7.8129639625549316 3 1.7197639942169189
-   vertex 7.2606029510498047 3 3.3591129779815674
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -2.9611051082611084 3 -7.4318141937255859
-   vertex -1.2942559719085693 3 -7.8946118354797363
-   vertex -60 3 -60
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 60 3 60
-   vertex 8 3 -3.6739402930577075e-16
-   vertex 7.8129639625549316 3 1.7197639942169189
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -1.2942559719085693 3 -7.8946118354797363
-   vertex 0.43311101198196411 3 -7.9882669448852539
-   vertex -60 3 -60
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 8 3 -3.6739402930577075e-16
-   vertex 60 3 -60
-   vertex 7.8129639625549316 3 -1.7197639942169189
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 7.8129639625549316 3 -1.7197639942169189
-   vertex 60 3 -60
-   vertex 7.2606029510498047 3 -3.3591129779815674
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 7.2606029510498047 3 -3.3591129779815674
-   vertex 60 3 -60
-   vertex 6.368743896484375 3 -4.8413939476013184
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 6.368743896484375 3 -4.8413939476013184
-   vertex 60 3 -60
-   vertex 5.1790900230407715 3 -6.0972962379455566
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 5.1790900230407715 3 -6.0972962379455566
-   vertex 60 3 -60
-   vertex 3.7472670078277588 3 -7.0680961608886719
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 3.7472670078277588 3 -7.0680961608886719
-   vertex 60 3 -60
-   vertex 2.1402270793914795 3 -7.708399772644043
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 2.1402270793914795 3 -7.708399772644043
-   vertex 60 3 -60
-   vertex 0.43311101198196411 3 -7.9882669448852539
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 60 3 60
-   vertex 60 3 -60
-   vertex 8 3 -3.6739402930577075e-16
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 0.43311101198196411 3 -7.9882669448852539
-   vertex 60 3 -60
-   vertex -60 3 -60
-  endloop
- endfacet
- facet normal 0 0 -1
-  outer loop
-   vertex 61 1 -61
-   vertex -61 -7.4703452449041523e-15 -61
-   vertex -61 1 -61
-  endloop
- endfacet
- facet normal 0 0 -1
-  outer loop
-   vertex 61 -7.4703452449041523e-15 -61
-   vertex -61 -7.4703452449041523e-15 -61
-   vertex 61 1 -61
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 61 1 61
-   vertex 61 -7.4703452449041523e-15 -61
-   vertex 61 1 -61
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 61 7.4703452449041523e-15 61
-   vertex 61 -7.4703452449041523e-15 -61
-   vertex 61 1 61
-  endloop
- endfacet
- facet normal 0 -0 1
-  outer loop
-   vertex -61 1 61
-   vertex 61 7.4703452449041523e-15 61
-   vertex 61 1 61
-  endloop
- endfacet
- facet normal 0 0 1
-  outer loop
-   vertex -61 7.4703452449041523e-15 61
-   vertex 61 7.4703452449041523e-15 61
-   vertex -61 1 61
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -61 1 -61
-   vertex -61 7.4703452449041523e-15 61
-   vertex -61 1 61
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -61 -7.4703452449041523e-15 -61
-   vertex -61 7.4703452449041523e-15 61
-   vertex -61 1 -61
-  endloop
- endfacet
- facet normal 0.64738670042007573 0 -0.76216170208113132
-  outer loop
-   vertex -4.489497184753418 1 6.6215119361877441
-   vertex -5.8079638481140137 1 5.5015950202941895
-   vertex -5.8079638481140137 3 5.5015950202941895
-  endloop
- endfacet
- facet normal 0.64738670042007573 0 -0.76216170208113132
-  outer loop
-   vertex -4.489497184753418 1 6.6215119361877441
-   vertex -5.8079638481140137 3 5.5015950202941895
-   vertex -4.489497184753418 3 6.6215119361877441
-  endloop
- endfacet
- facet normal 0.46840846871264458 0 -0.88351202959454689
-  outer loop
-   vertex -2.9611051082611084 1 7.4318141937255859
-   vertex -4.489497184753418 1 6.6215119361877441
-   vertex -4.489497184753418 3 6.6215119361877441
-  endloop
- endfacet
- facet normal 0.46840846871264458 0 -0.88351202959454689
-  outer loop
-   vertex -2.9611051082611084 1 7.4318141937255859
-   vertex -4.489497184753418 3 6.6215119361877441
-   vertex -2.9611051082611084 3 7.4318141937255859
-  endloop
- endfacet
- facet normal 0.26752793984402756 0 -0.96355010321353307
-  outer loop
-   vertex -1.2942559719085693 1 7.8946118354797363
-   vertex -2.9611051082611084 1 7.4318141937255859
-   vertex -2.9611051082611084 3 7.4318141937255859
-  endloop
- endfacet
- facet normal -0.99413793032906728 0 0.10811926507814602
-  outer loop
-   vertex 7.8129639625549316 1 -1.7197639942169189
-   vertex 8 3 -3.6739402930577075e-16
-   vertex 7.8129639625549316 3 -1.7197639942169189
-  endloop
- endfacet
- facet normal 0.26752793984402756 0 -0.96355010321353307
-  outer loop
-   vertex -1.2942559719085693 1 7.8946118354797363
-   vertex -2.9611051082611084 3 7.4318141937255859
-   vertex -1.2942559719085693 3 7.8946118354797363
-  endloop
- endfacet
- facet normal -0.99413793032906739 1.3240790337230738e-17 0.10811926507814602
-  outer loop
-   vertex 7.8129639625549316 1 -1.7197639942169189
-   vertex 8 1 -1.2246468525851679e-16
-   vertex 8 3 -3.6739402930577075e-16
-  endloop
- endfacet
- facet normal 0.054138904478489597 0 -0.99853341407379503
-  outer loop
-   vertex 0.43311101198196411 1 7.9882669448852539
-   vertex -1.2942559719085693 1 7.8946118354797363
-   vertex -1.2942559719085693 3 7.8946118354797363
-  endloop
- endfacet
- facet normal -0.94765316652265008 0 0.31930154396681876
-  outer loop
-   vertex 7.2606029510498047 1 -3.3591129779815674
-   vertex 7.8129639625549316 3 -1.7197639942169189
-   vertex 7.2606029510498047 3 -3.3591129779815674
-  endloop
- endfacet
- facet normal 0.054138904478489597 0 -0.99853341407379503
-  outer loop
-   vertex 0.43311101198196411 1 7.9882669448852539
-   vertex -1.2942559719085693 3 7.8946118354797363
-   vertex 0.43311101198196411 3 7.9882669448852539
-  endloop
- endfacet
- facet normal -0.94765316652265008 0 0.31930154396681876
-  outer loop
-   vertex 7.2606029510498047 1 -3.3591129779815674
-   vertex 7.8129639625549316 1 -1.7197639942169189
-   vertex 7.8129639625549316 3 -1.7197639942169189
-  endloop
- endfacet
- facet normal -0.16178182691395071 0 -0.98682655035238309
-  outer loop
-   vertex 2.1402270793914795 1 7.708399772644043
-   vertex 0.43311101198196411 1 7.9882669448852539
-   vertex 0.43311101198196411 3 7.9882669448852539
-  endloop
- endfacet
- facet normal -0.16178182691395071 0 -0.98682655035238309
-  outer loop
-   vertex 2.1402270793914795 1 7.708399772644043
-   vertex 0.43311101198196411 3 7.9882669448852539
-   vertex 2.1402270793914795 3 7.708399772644043
-  endloop
- endfacet
- facet normal -0.85685712856506968 0 0.51555393629301649
-  outer loop
-   vertex 6.368743896484375 1 -4.8413939476013184
-   vertex 7.2606029510498047 3 -3.3591129779815674
-   vertex 6.368743896484375 3 -4.8413939476013184
-  endloop
- endfacet
- facet normal -0.85685712856506968 0 0.51555393629301649
-  outer loop
-   vertex 6.368743896484375 1 -4.8413939476013184
-   vertex 7.2606029510498047 1 -3.3591129779815674
-   vertex 7.2606029510498047 3 -3.3591129779815674
-  endloop
- endfacet
- facet normal -0.37013834558473929 0 -0.92897664401630264
-  outer loop
-   vertex 3.7472670078277588 1 7.0680961608886719
-   vertex 2.1402270793914795 3 7.708399772644043
-   vertex 3.7472670078277588 3 7.0680961608886719
-  endloop
- endfacet
- facet normal -0.7259954825307644 0 0.68769946876882393
-  outer loop
-   vertex 5.1790900230407715 1 -6.0972962379455566
-   vertex 6.368743896484375 3 -4.8413939476013184
-   vertex 5.1790900230407715 3 -6.0972962379455566
-  endloop
- endfacet
- facet normal -0.37013834558473929 0 -0.92897664401630264
-  outer loop
-   vertex 3.7472670078277588 1 7.0680961608886719
-   vertex 2.1402270793914795 1 7.708399772644043
-   vertex 2.1402270793914795 3 7.708399772644043
-  endloop
- endfacet
- facet normal -0.7259954825307644 0 0.68769946876882393
-  outer loop
-   vertex 5.1790900230407715 1 -6.0972962379455566
-   vertex 6.368743896484375 1 -4.8413939476013184
-   vertex 6.368743896484375 3 -4.8413939476013184
-  endloop
- endfacet
- facet normal -0.56118699818949347 0 -0.82768904370123542
-  outer loop
-   vertex 5.1790900230407715 1 6.0972962379455566
-   vertex 3.7472670078277588 3 7.0680961608886719
-   vertex 5.1790900230407715 3 6.0972962379455566
-  endloop
- endfacet
- facet normal -0.56118699818949347 0 0.82768904370123542
-  outer loop
-   vertex 3.7472670078277588 1 -7.0680961608886719
-   vertex 5.1790900230407715 3 -6.0972962379455566
-   vertex 3.7472670078277588 3 -7.0680961608886719
-  endloop
- endfacet
- facet normal -0.56118699818949347 0 -0.82768904370123542
-  outer loop
-   vertex 5.1790900230407715 1 6.0972962379455566
-   vertex 3.7472670078277588 1 7.0680961608886719
-   vertex 3.7472670078277588 3 7.0680961608886719
-  endloop
- endfacet
- facet normal -0.56118699818949347 0 0.82768904370123542
-  outer loop
-   vertex 3.7472670078277588 1 -7.0680961608886719
-   vertex 5.1790900230407715 1 -6.0972962379455566
-   vertex 5.1790900230407715 3 -6.0972962379455566
-  endloop
- endfacet
- facet normal -0.7259954825307644 0 -0.68769946876882393
-  outer loop
-   vertex 6.368743896484375 1 4.8413939476013184
-   vertex 5.1790900230407715 3 6.0972962379455566
-   vertex 6.368743896484375 3 4.8413939476013184
-  endloop
- endfacet
- facet normal -0.37013834558473929 0 0.92897664401630264
-  outer loop
-   vertex 2.1402270793914795 1 -7.708399772644043
-   vertex 3.7472670078277588 3 -7.0680961608886719
-   vertex 2.1402270793914795 3 -7.708399772644043
-  endloop
- endfacet
- facet normal -0.7259954825307644 0 -0.68769946876882393
-  outer loop
-   vertex 6.368743896484375 1 4.8413939476013184
-   vertex 5.1790900230407715 1 6.0972962379455566
-   vertex 5.1790900230407715 3 6.0972962379455566
-  endloop
- endfacet
- facet normal -0.37013834558473929 0 0.92897664401630264
-  outer loop
-   vertex 2.1402270793914795 1 -7.708399772644043
-   vertex 3.7472670078277588 1 -7.0680961608886719
-   vertex 3.7472670078277588 3 -7.0680961608886719
-  endloop
- endfacet
- facet normal -0.85685712856506968 0 -0.51555393629301649
-  outer loop
-   vertex 7.2606029510498047 1 3.3591129779815674
-   vertex 6.368743896484375 3 4.8413939476013184
-   vertex 7.2606029510498047 3 3.3591129779815674
-  endloop
- endfacet
- facet normal -0.16178182691395071 0 0.98682655035238309
-  outer loop
-   vertex 0.43311101198196411 1 -7.9882669448852539
-   vertex 2.1402270793914795 3 -7.708399772644043
-   vertex 0.43311101198196411 3 -7.9882669448852539
-  endloop
- endfacet
- facet normal -0.85685712856506968 0 -0.51555393629301649
-  outer loop
-   vertex 7.2606029510498047 1 3.3591129779815674
-   vertex 6.368743896484375 1 4.8413939476013184
-   vertex 6.368743896484375 3 4.8413939476013184
-  endloop
- endfacet
- facet normal -0.16178182691395071 0 0.98682655035238309
-  outer loop
-   vertex 0.43311101198196411 1 -7.9882669448852539
-   vertex 2.1402270793914795 1 -7.708399772644043
-   vertex 2.1402270793914795 3 -7.708399772644043
-  endloop
- endfacet
- facet normal -0.94765316652265008 0 -0.31930154396681876
-  outer loop
-   vertex 7.8129639625549316 1 1.7197639942169189
-   vertex 7.2606029510498047 3 3.3591129779815674
-   vertex 7.8129639625549316 3 1.7197639942169189
-  endloop
- endfacet
- facet normal -0.94765316652265008 0 -0.31930154396681876
-  outer loop
-   vertex 7.8129639625549316 1 1.7197639942169189
-   vertex 7.2606029510498047 1 3.3591129779815674
-   vertex 7.2606029510498047 3 3.3591129779815674
-  endloop
- endfacet
- facet normal 0.054138904478489597 0 0.99853341407379503
-  outer loop
-   vertex -1.2942559719085693 1 -7.8946118354797363
-   vertex 0.43311101198196411 3 -7.9882669448852539
-   vertex -1.2942559719085693 3 -7.8946118354797363
-  endloop
- endfacet
- facet normal 0.054138904478489597 -0 0.99853341407379503
-  outer loop
-   vertex -1.2942559719085693 1 -7.8946118354797363
-   vertex 0.43311101198196411 1 -7.9882669448852539
-   vertex 0.43311101198196411 3 -7.9882669448852539
-  endloop
- endfacet
- facet normal -0.99413793032906739 0 -0.10811926507814598
-  outer loop
-   vertex 8 1 -1.2246468525851679e-16
-   vertex 7.8129639625549316 3 1.7197639942169189
-   vertex 8 3 -3.6739402930577075e-16
-  endloop
- endfacet
- facet normal -0.99413793032906739 0 -0.108119265078146
-  outer loop
-   vertex 8 1 -1.2246468525851679e-16
-   vertex 7.8129639625549316 1 1.7197639942169189
-   vertex 7.8129639625549316 3 1.7197639942169189
-  endloop
- endfacet
- facet normal 0.26752793984402756 0 0.96355010321353307
-  outer loop
-   vertex -2.9611051082611084 1 -7.4318141937255859
-   vertex -1.2942559719085693 3 -7.8946118354797363
-   vertex -2.9611051082611084 3 -7.4318141937255859
-  endloop
- endfacet
- facet normal 0.26752793984402756 -0 0.96355010321353307
-  outer loop
-   vertex -2.9611051082611084 1 -7.4318141937255859
-   vertex -1.2942559719085693 1 -7.8946118354797363
-   vertex -1.2942559719085693 3 -7.8946118354797363
-  endloop
- endfacet
- facet normal 0.46840846871264458 -0 0.88351202959454689
-  outer loop
-   vertex -4.489497184753418 1 -6.6215119361877441
-   vertex -2.9611051082611084 1 -7.4318141937255859
-   vertex -2.9611051082611084 3 -7.4318141937255859
-  endloop
- endfacet
- facet normal 0.46840846871264458 0 0.88351202959454689
-  outer loop
-   vertex -4.489497184753418 1 -6.6215119361877441
-   vertex -2.9611051082611084 3 -7.4318141937255859
-   vertex -4.489497184753418 3 -6.6215119361877441
-  endloop
- endfacet
- facet normal 0.64738670042007573 -0 0.76216170208113132
-  outer loop
-   vertex -5.8079638481140137 1 -5.5015950202941895
-   vertex -4.489497184753418 1 -6.6215119361877441
-   vertex -4.489497184753418 3 -6.6215119361877441
-  endloop
- endfacet
- facet normal 0.64738670042007573 0 0.76216170208113132
-  outer loop
-   vertex -5.8079638481140137 1 -5.5015950202941895
-   vertex -4.489497184753418 3 -6.6215119361877441
-   vertex -5.8079638481140137 3 -5.5015950202941895
-  endloop
- endfacet
- facet normal 0.79609296820963171 -0 0.60517434344755416
-  outer loop
-   vertex -6.8548569679260254 1 -4.1244311332702637
-   vertex -5.8079638481140137 1 -5.5015950202941895
-   vertex -5.8079638481140137 3 -5.5015950202941895
-  endloop
- endfacet
- facet normal 0.79609296820963171 0 0.60517434344755416
-  outer loop
-   vertex -6.8548569679260254 1 -4.1244311332702637
-   vertex -5.8079638481140137 3 -5.5015950202941895
-   vertex -6.8548569679260254 3 -4.1244311332702637
-  endloop
- endfacet
- facet normal 0.90757548589128689 -0 0.4198889584273377
-  outer loop
-   vertex -7.5812249183654785 1 -2.5544118881225586
-   vertex -6.8548569679260254 1 -4.1244311332702637
-   vertex -6.8548569679260254 3 -4.1244311332702637
-  endloop
- endfacet
- facet normal 0.90757548589128689 0 0.4198889584273377
-  outer loop
-   vertex -7.5812249183654785 1 -2.5544118881225586
-   vertex -6.8548569679260254 3 -4.1244311332702637
-   vertex -7.5812249183654785 3 -2.5544118881225586
-  endloop
- endfacet
- facet normal 0.97662045080518167 -0 0.21497091679825825
-  outer loop
-   vertex -7.9531040191650391 1 -0.86495202779769897
-   vertex -7.5812249183654785 1 -2.5544118881225586
-   vertex -7.5812249183654785 3 -2.5544118881225586
-  endloop
- endfacet
- facet normal 0.97662045080518167 0 0.21497091679825825
-  outer loop
-   vertex -7.9531040191650391 1 -0.86495202779769897
-   vertex -7.5812249183654785 3 -2.5544118881225586
-   vertex -7.9531040191650391 3 -0.86495202779769897
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex -7.9531040191650391 1 0.86495202779769897
-   vertex -7.9531040191650391 1 -0.86495202779769897
-   vertex -7.9531040191650391 3 -0.86495202779769897
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex -7.9531040191650391 1 0.86495202779769897
-   vertex -7.9531040191650391 3 -0.86495202779769897
-   vertex -7.9531040191650391 3 0.86495202779769897
-  endloop
- endfacet
- facet normal 0.97662045080518167 0 -0.21497091679825825
-  outer loop
-   vertex -7.5812249183654785 1 2.5544118881225586
-   vertex -7.9531040191650391 1 0.86495202779769897
-   vertex -7.9531040191650391 3 0.86495202779769897
-  endloop
- endfacet
- facet normal 0.97662045080518167 0 -0.21497091679825825
-  outer loop
-   vertex -7.5812249183654785 1 2.5544118881225586
-   vertex -7.9531040191650391 3 0.86495202779769897
-   vertex -7.5812249183654785 3 2.5544118881225586
-  endloop
- endfacet
- facet normal 0.90757548589128689 0 -0.4198889584273377
-  outer loop
-   vertex -6.8548569679260254 1 4.1244311332702637
-   vertex -7.5812249183654785 1 2.5544118881225586
-   vertex -7.5812249183654785 3 2.5544118881225586
-  endloop
- endfacet
- facet normal 0.90757548589128689 0 -0.4198889584273377
-  outer loop
-   vertex -6.8548569679260254 1 4.1244311332702637
-   vertex -7.5812249183654785 3 2.5544118881225586
-   vertex -6.8548569679260254 3 4.1244311332702637
-  endloop
- endfacet
- facet normal 0.79609296820963171 0 -0.60517434344755416
-  outer loop
-   vertex -5.8079638481140137 1 5.5015950202941895
-   vertex -6.8548569679260254 1 4.1244311332702637
-   vertex -6.8548569679260254 3 4.1244311332702637
-  endloop
- endfacet
- facet normal 0.79609296820963171 0 -0.60517434344755416
-  outer loop
-   vertex -5.8079638481140137 1 5.5015950202941895
-   vertex -6.8548569679260254 3 4.1244311332702637
-   vertex -5.8079638481140137 3 5.5015950202941895
-  endloop
- endfacet
- facet normal 0 -1 1.22464870546974e-16
-  outer loop
-   vertex 61 7.4703452449041523e-15 61
-   vertex -61 7.4703452449041523e-15 61
-   vertex -60 7.3478803743571783e-15 60
-  endloop
- endfacet
- facet normal 0 -1 1.22464870546974e-16
-  outer loop
-   vertex 60 7.3478803743571783e-15 60
-   vertex 61 7.4703452449041523e-15 61
-   vertex -60 7.3478803743571783e-15 60
-  endloop
- endfacet
- facet normal -1.9440100428787221e-22 -1 1.224646761459697e-16
-  outer loop
-   vertex -61 -7.4703452449041523e-15 -61
-   vertex -60 7.3478803743571783e-15 60
-   vertex -61 7.4703452449041523e-15 61
-  endloop
- endfacet
- facet normal 1.9764102102600342e-22 -1 1.2246467290595297e-16
-  outer loop
-   vertex -60 -7.3478803743571783e-15 -60
-   vertex -60 7.3478803743571783e-15 60
-   vertex -61 -7.4703452449041523e-15 -61
-  endloop
- endfacet
- facet normal 0 -1 1.22464870546974e-16
-  outer loop
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex -60 -7.3478803743571783e-15 -60
-   vertex -61 -7.4703452449041523e-15 -61
-  endloop
- endfacet
- facet normal 0 -1 1.22464870546974e-16
-  outer loop
-   vertex 61 -7.4703452449041523e-15 -61
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex -61 -7.4703452449041523e-15 -61
-  endloop
- endfacet
- facet normal 1.9440100428787221e-22 -1 1.224646761459697e-16
-  outer loop
-   vertex 61 -7.4703452449041523e-15 -61
-   vertex 61 7.4703452449041523e-15 61
-   vertex 60 7.3478803743571783e-15 60
-  endloop
- endfacet
- facet normal -1.9764102102600342e-22 -1 1.2246467290595297e-16
-  outer loop
-   vertex 61 -7.4703452449041523e-15 -61
-   vertex 60 7.3478803743571783e-15 60
-   vertex 60 -7.3478803743571783e-15 -60
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -4.489497184753418 1 6.6215119361877441
-   vertex -6.8548569679260254 1 4.1244311332702637
-   vertex -5.8079638481140137 1 5.5015950202941895
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -2.9611051082611084 1 7.4318141937255859
-   vertex -1.2942559719085693 1 7.8946118354797363
-   vertex -4.489497184753418 1 6.6215119361877441
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -1.2942559719085693 1 7.8946118354797363
-   vertex 0.43311101198196411 1 7.9882669448852539
-   vertex -4.489497184753418 1 6.6215119361877441
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -7.5812249183654785 1 2.5544118881225586
-   vertex -7.9531040191650391 1 -0.86495202779769897
-   vertex -7.9531040191650391 1 0.86495202779769897
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 2.1402270793914795 1 7.708399772644043
-   vertex 3.7472670078277588 1 7.0680961608886719
-   vertex 0.43311101198196411 1 7.9882669448852539
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -7.9531040191650391 1 -0.86495202779769897
-   vertex -6.8548569679260254 1 -4.1244311332702637
-   vertex -7.5812249183654785 1 -2.5544118881225586
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -7.5812249183654785 1 2.5544118881225586
-   vertex -6.8548569679260254 1 -4.1244311332702637
-   vertex -7.9531040191650391 1 -0.86495202779769897
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 3.7472670078277588 1 7.0680961608886719
-   vertex 5.1790900230407715 1 6.0972962379455566
-   vertex 0.43311101198196411 1 7.9882669448852539
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -6.8548569679260254 1 4.1244311332702637
-   vertex -4.489497184753418 1 -6.6215119361877441
-   vertex -7.5812249183654785 1 2.5544118881225586
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -6.8548569679260254 1 -4.1244311332702637
-   vertex -4.489497184753418 1 -6.6215119361877441
-   vertex -5.8079638481140137 1 -5.5015950202941895
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex -4.489497184753418 1 6.6215119361877441
-   vertex -4.489497184753418 1 -6.6215119361877441
-   vertex -6.8548569679260254 1 4.1244311332702637
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -7.5812249183654785 1 2.5544118881225586
-   vertex -4.489497184753418 1 -6.6215119361877441
-   vertex -6.8548569679260254 1 -4.1244311332702637
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 6.368743896484375 1 4.8413939476013184
-   vertex 7.2606029510498047 1 3.3591129779815674
-   vertex 5.1790900230407715 1 6.0972962379455566
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 5.1790900230407715 1 6.0972962379455566
-   vertex 7.2606029510498047 1 3.3591129779815674
-   vertex 0.43311101198196411 1 7.9882669448852539
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -4.489497184753418 1 -6.6215119361877441
-   vertex -1.2942559719085693 1 -7.8946118354797363
-   vertex -2.9611051082611084 1 -7.4318141937255859
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 0.43311101198196411 1 7.9882669448852539
-   vertex -1.2942559719085693 1 -7.8946118354797363
-   vertex -4.489497184753418 1 6.6215119361877441
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -4.489497184753418 1 6.6215119361877441
-   vertex -1.2942559719085693 1 -7.8946118354797363
-   vertex -4.489497184753418 1 -6.6215119361877441
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 8 1 -1.2246468525851679e-16
-   vertex 7.8129639625549316 1 -1.7197639942169189
-   vertex 7.8129639625549316 1 1.7197639942169189
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 7.8129639625549316 1 1.7197639942169189
-   vertex 7.8129639625549316 1 -1.7197639942169189
-   vertex 7.2606029510498047 1 3.3591129779815674
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -1.2942559719085693 1 -7.8946118354797363
-   vertex 2.1402270793914795 1 -7.708399772644043
-   vertex 0.43311101198196411 1 -7.9882669448852539
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -1.2942559719085693 1 -7.8946118354797363
-   vertex 3.7472670078277588 1 -7.0680961608886719
-   vertex 2.1402270793914795 1 -7.708399772644043
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 7.2606029510498047 1 -3.3591129779815674
-   vertex 6.368743896484375 1 -4.8413939476013184
-   vertex 7.8129639625549316 1 -1.7197639942169189
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 7.2606029510498047 1 3.3591129779815674
-   vertex 6.368743896484375 1 -4.8413939476013184
-   vertex 0.43311101198196411 1 7.9882669448852539
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 7.8129639625549316 1 -1.7197639942169189
-   vertex 6.368743896484375 1 -4.8413939476013184
-   vertex 7.2606029510498047 1 3.3591129779815674
-  endloop
- endfacet
- facet normal 0 1 -0
-  outer loop
-   vertex 6.368743896484375 1 -4.8413939476013184
-   vertex 5.1790900230407715 1 -6.0972962379455566
-   vertex 0.43311101198196411 1 7.9882669448852539
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex 0.43311101198196411 1 7.9882669448852539
-   vertex 5.1790900230407715 1 -6.0972962379455566
-   vertex -1.2942559719085693 1 -7.8946118354797363
-  endloop
- endfacet
- facet normal 0 1 0
-  outer loop
-   vertex -1.2942559719085693 1 -7.8946118354797363
-   vertex 5.1790900230407715 1 -6.0972962379455566
-   vertex 3.7472670078277588 1 -7.0680961608886719
-  endloop
- endfacet
- facet normal -2.7145736657710727e-24 -1 1.2246466944387791e-16
-  outer loop
-   vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441
-   vertex -60 7.3478803743571783e-15 60
-   vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895
-  endloop
- endfacet
- facet normal 9.8604014504559914e-24 -1 1.2246468194816157e-16
-  outer loop
-   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
-   vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895
-   vertex -60 7.3478803743571783e-15 60
-  endloop
- endfacet
- facet normal 2.3750917541729913e-23 -1 1.2246469696643964e-16
-  outer loop
-   vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859
-   vertex -60 7.3478803743571783e-15 60
-   vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441
-  endloop
- endfacet
- facet normal 3.140053166932519e-24 -1 1.2246467555621105e-16
-  outer loop
-   vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586
-   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
-   vertex -60 7.3478803743571783e-15 60
-  endloop
- endfacet
- facet normal -4.6556805959120687e-24 -1 1.2246466614397647e-16
-  outer loop
-   vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363
-   vertex -60 7.3478803743571783e-15 60
-   vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859
-  endloop
- endfacet
- facet normal 2.1338697076538101e-24 -1 1.2246467463807433e-16
-  outer loop
-   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
-   vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586
-   vertex -60 7.3478803743571783e-15 60
-  endloop
- endfacet
- facet normal 1.0466145348730118e-23 -1 1.2246468318133267e-16
-  outer loop
-   vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539
-   vertex -60 7.3478803743571783e-15 60
-   vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363
-  endloop
- endfacet
- facet normal 1.1505000566059115e-23 -1 1.2246468288594578e-16
-  outer loop
-   vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897
-   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
-   vertex -60 7.3478803743571783e-15 60
-  endloop
- endfacet
- facet normal -9.8604014504559914e-24 -1 1.2246468194816157e-16
-  outer loop
-   vertex -60 -7.3478803743571783e-15 -60
-   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
-   vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637
-  endloop
- endfacet
- facet normal -3.140053166932519e-24 -1 1.2246467555621105e-16
-  outer loop
-   vertex -60 -7.3478803743571783e-15 -60
-   vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637
-   vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586
-  endloop
- endfacet
- facet normal -2.1338697076538101e-24 -1 1.2246467463807433e-16
-  outer loop
-   vertex -60 -7.3478803743571783e-15 -60
-   vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586
-   vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897
-  endloop
- endfacet
- facet normal -1.6585455949044178e-25 -1 1.2246467290595297e-16
-  outer loop
-   vertex -60 -7.3478803743571783e-15 -60
-   vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897
-   vertex -60 7.3478803743571783e-15 60
-  endloop
- endfacet
- facet normal -3.7720394482795526e-23 -1 1.2246471422019109e-16
-  outer loop
-   vertex 60 7.3478803743571783e-15 60
-   vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539
-   vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043
-  endloop
- endfacet
- facet normal 8.8771827388911874e-24 -1 1.2246466266075848e-16
-  outer loop
-   vertex 60 7.3478803743571783e-15 60
-   vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043
-   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
-  endloop
- endfacet
- facet normal -1.3032959457950054e-24 -1 1.2246467347993763e-16
-  outer loop
-   vertex 60 7.3478803743571783e-15 60
-   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
-   vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566
-  endloop
- endfacet
- facet normal 0 -1 1.2246467102058172e-16
-  outer loop
-   vertex 60 7.3478803743571783e-15 60
-   vertex -60 7.3478803743571783e-15 60
-   vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539
-  endloop
- endfacet
- facet normal 8.1790643130613495e-25 -1 1.2246467132260199e-16
-  outer loop
-   vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184
-   vertex 60 7.3478803743571783e-15 60
-   vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566
-  endloop
- endfacet
- facet normal 2.7145738562238688e-24 -1 1.2246466944387788e-16
-  outer loop
-   vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441
-   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
-   vertex -60 -7.3478803743571783e-15 -60
-  endloop
- endfacet
- facet normal -9.4851118116718549e-24 -1 1.2246468134032765e-16
-  outer loop
-   vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674
-   vertex 60 7.3478803743571783e-15 60
-   vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184
-  endloop
- endfacet
- facet normal -2.3750917541729936e-23 -1 1.2246469696643964e-16
-  outer loop
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-   vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441
-   vertex -60 -7.3478803743571783e-15 -60
-  endloop
- endfacet
- facet normal -4.7315581860572422e-24 -1 1.2246467691420446e-16
-  outer loop
-   vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189
-   vertex 60 7.3478803743571783e-15 60
-   vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674
-  endloop
- endfacet
- facet normal 4.6556805959120643e-24 -1 1.2246466614397657e-16
-  outer loop
-   vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-   vertex -60 -7.3478803743571783e-15 -60
-  endloop
- endfacet
- facet normal -7.942874688939922e-24 -1 1.2246467978977771e-16
-  outer loop
-   vertex 8 0 0
-   vertex 60 7.3478803743571783e-15 60
-   vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189
-  endloop
- endfacet
- facet normal -1.0466145348730109e-23 -1 1.224646831813325e-16
-  outer loop
-   vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539
-   vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363
-   vertex -60 -7.3478803743571783e-15 -60
-  endloop
- endfacet
- facet normal 7.942874688939922e-24 -1 1.2246467978977771e-16
-  outer loop
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex 8 0 0
-   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
-  endloop
- endfacet
- facet normal 4.7315582396553985e-24 -1 1.2246467691420446e-16
-  outer loop
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
-   vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674
-  endloop
- endfacet
- facet normal 9.4851117135931716e-24 -1 1.2246468134032765e-16
-  outer loop
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674
-   vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184
-  endloop
- endfacet
- facet normal -8.1790624146971067e-25 -1 1.224646713226018e-16
-  outer loop
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184
-   vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566
-  endloop
- endfacet
- facet normal 1.3032959457950054e-24 -1 1.2246467347993763e-16
-  outer loop
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566
-   vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719
-  endloop
- endfacet
- facet normal -8.8771827388911874e-24 -1 1.2246466266075848e-16
-  outer loop
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719
-   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
-  endloop
- endfacet
- facet normal 3.7720394482795526e-23 -1 1.2246471422019109e-16
-  outer loop
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
-   vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539
-  endloop
- endfacet
- facet normal 0 -1 1.2246467102058172e-16
-  outer loop
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539
-   vertex -60 -7.3478803743571783e-15 -60
-  endloop
- endfacet
- facet normal 0 -1 1.2246467290595297e-16
-  outer loop
-   vertex 60 -7.3478803743571783e-15 -60
-   vertex 60 7.3478803743571783e-15 60
-   vertex 8 0 0
-  endloop
- endfacet
- facet normal -5.5610874107037022e-23 -1 1.2246473171814796e-16
-  outer loop
-   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
-   vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441
-   vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895
-  endloop
- endfacet
- facet normal 3.5336500887342006e-23 -1 1.2246468288594578e-16
-  outer loop
-   vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586
-   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
-   vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897
-  endloop
- endfacet
- facet normal -6.92615645630674e-24 -1 1.224646743215047e-16
-  outer loop
-   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
-   vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363
-   vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859
-  endloop
- endfacet
- facet normal 6.5046913229555174e-24 -1 1.2246475624605834e-16
-  outer loop
-   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
-   vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539
-   vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363
-  endloop
- endfacet
- facet normal -8.4660190461211364e-23 -1 1.2246442789979388e-16
-  outer loop
-   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
-   vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043
-   vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539
-  endloop
- endfacet
- facet normal 5.747249094393101e-24 -1 1.2246467966791322e-16
-  outer loop
-   vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637
-   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
-   vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586
-  endloop
- endfacet
- facet normal -1.0202516191171447e-23 -1 1.2246467735352452e-16
-  outer loop
-   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
-   vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586
-   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
-  endloop
- endfacet
- facet normal -3.7938552191334051e-24 -1 1.2246467876417735e-16
-  outer loop
-   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
-   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
-   vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586
-  endloop
- endfacet
- facet normal -2.0443883565058697e-23 -1 1.2246467390280494e-16
-  outer loop
-   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
-   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
-   vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637
-  endloop
- endfacet
- facet normal -9.2000602155814685e-24 -1 1.2246466183307963e-16
-  outer loop
-   vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184
-   vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566
-   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
-  endloop
- endfacet
- facet normal -1.0652601301104021e-22 -1 1.2246454083605884e-16
-  outer loop
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
-   vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441
-  endloop
- endfacet
- facet normal 3.0093036565001882e-23 -1 1.2246468500393508e-16
-  outer loop
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-   vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859
-   vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441
-  endloop
- endfacet
- facet normal -2.4039170381415668e-24 -1 1.2246468560094203e-16
-  outer loop
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-   vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674
-   vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184
-  endloop
- endfacet
- facet normal -2.547683748911312e-24 -1 1.2246468145404106e-16
-  outer loop
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-   vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441
-   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
-  endloop
- endfacet
- facet normal -6.3469708514441707e-24 -1 1.2246468500393508e-16
-  outer loop
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
-   vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859
-  endloop
- endfacet
- facet normal 5.7339184803149965e-24 -1 1.2246467941472114e-16
-  outer loop
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-   vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184
-   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
-  endloop
- endfacet
- facet normal -1.3741936668902775e-23 -1 1.2246467768225861e-16
-  outer loop
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
-   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
-  endloop
- endfacet
- facet normal 6.7308336531038825e-24 -1 1.2246467361801442e-16
-  outer loop
-   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-   vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363
-  endloop
- endfacet
- facet normal 6.3666292080684972e-24 -1 1.2246468065361937e-16
-  outer loop
-   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
-   vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189
-   vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674
-  endloop
- endfacet
- facet normal 0 -1 1.2246468065361937e-16
-  outer loop
-   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
-   vertex 8 0 0
-   vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189
-  endloop
- endfacet
- facet normal 3.1842828908146993e-24 -1 1.2246468030751846e-16
-  outer loop
-   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
-   vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674
-   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
-  endloop
- endfacet
- facet normal 2.774103235630015e-24 -1 1.2246492738336706e-16
-  outer loop
-   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
-   vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363
-   vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539
-  endloop
- endfacet
- facet normal 1.7384802803360558e-23 -1 1.2246465790458427e-16
-  outer loop
-   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
-   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
-   vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363
-  endloop
- endfacet
- facet normal 3.2253718924354727e-23 -1 1.2246466764090838e-16
-  outer loop
-   vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184
-   vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674
-   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
-  endloop
- endfacet
- facet normal -3.383977019878155e-23 -1 1.2246472531209143e-16
-  outer loop
-   vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566
-   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
-   vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719
-  endloop
- endfacet
- facet normal -1.3726847622115549e-23 -1 1.2246468737510366e-16
-  outer loop
-   vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566
-   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
-   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
-  endloop
- endfacet
- facet normal -2.4794069352434339e-23 -1 1.2246469403403049e-16
-  outer loop
-   vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566
-   vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184
-   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
-  endloop
- endfacet
-endsolid
diff --git a/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl b/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl
deleted file mode 100644
index 164487a33a2bf6c3b0d783229fa13bbae5522820..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp b/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp
deleted file mode 100644
index 868b4abfa15b990cfdb418066efda3a7e3c8f91c..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp	
+++ /dev/null
@@ -1,482 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-	  string		  pathGeo = config.getString("pathGeo");
-	  string		  geoFile = config.getString("geoFile");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-	  vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //vector<double>  length = config.getVector<double>("length");
-	  double          uLB = config.getDouble("uLB");
-	  double          uF2 = config.getDouble("uF2");
-	  double		  nuL = config.getDouble("nuL");
-	  double		  nuG = config.getDouble("nuG");
-	  double		  densityRatio = config.getDouble("densityRatio");
-	  double		  sigma = config.getDouble("sigma");
-	  int		      interfaceThickness = config.getInt("interfaceThickness");
-	  double		  radius = config.getDouble("radius");
-	  double		  theta = config.getDouble("contactAngle");
-	  double		  gr = config.getDouble("gravity");
-	  double		  phiL = config.getDouble("phi_L");
-	  double		  phiH = config.getDouble("phi_H");
-	  double		  tauH = config.getDouble("Phase-field Relaxation");
-	  double		  mob = config.getDouble("Mobility");
-
-
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      double          Re = config.getDouble("Re");
-      double          dx = config.getDouble("dx");
-      bool            logToFile = config.getBool("logToFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      bool            newStart = config.getValue<bool>("newStart");
-
-      double beta  = 12*sigma/interfaceThickness;
-	  double kappa = 1.5*interfaceThickness*sigma;
-	  
-	  CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      LBMReal dLB; // = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = nuL; //(uLB*dLB) / Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
- 
-      
-      Grid3DPtr grid(new Grid3D(comm));
-      //grid->setPeriodicX1(true);
-	  //grid->setPeriodicX2(true);
-	  //grid->setPeriodicX3(true);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-	  
-	  
-
-	  if (newStart)
-      {
-
-         //bounding box
-         /*double g_minX1 = 0.0;
-         double g_minX2 = -length[1] / 2.0;
-         double g_minX3 = -length[2] / 2.0;
-
-         double g_maxX1 = length[0];
-         double g_maxX2 = length[1] / 2.0;
-         double g_maxX3 = length[2] / 2.0;*/
-
-		 double g_minX1 = boundingBox[0];
-		 double g_minX2 = boundingBox[2];
-		 double g_minX3 = boundingBox[4];
-
-		 double g_maxX1 = boundingBox[1];
-		 double g_maxX2 = boundingBox[3];
-		 double g_maxX3 = boundingBox[5];
-
-         //geometry
-
-		 GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, 20.0));
-		 GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance());
-		 
-		 GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-         double blockLength = blocknx[0] * dx;
-
-
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "Preprocess - start");
-         }
-
-         grid->setDeltaX(dx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-		 grid->setPeriodicX1(true);
-		 grid->setPeriodicX2(true);
-		 grid->setPeriodicX3(true);
-
-         
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-		 //inflow
-		 //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-		 //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-34.0, -20.0, 1.0, -31.5, 16.0, 46.0));
-		 //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-24.0, 3, 20.0, -22.0, 24.0, 42.0));
-		 //if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance());
-
-		 /*GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(-24.0, -24.0, 0.0, 26.0, 26.0, 3.5));
-		 if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance());
-		 
-		 GbCuboid3DPtr geoInflowF2_2(new GbCuboid3D(-24.0, -24.0, 56.5, 26.0, 26.0, 59.9));
-		 if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_2.get(), pathname+"/geo/geoInflowF2_2", WbWriterVtkXmlASCII::getInstance());*/
-		 
-		 //outflow
-		 //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0-50, -20.0, 1.0, 130.0-50, 16.0, 46.0));
-		 //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0, -20.0, 1.0, 130.0, 16.0, 46.0));
-		 //GbCuboid3DPtr geoOutflow(new GbCuboid3D(78.0, 3, 20.0, 81.0, 24.0, 42.0));
-		 //if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-		 //BC Adapter
-		 //////////////////////////////////////////////////////////////////////////////
-		 //BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-		 //noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-
-
-		//BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-		//denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-		
-		double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius();
-		double cx1 = g_minX1;
-		double cx2 = 0.0; //cylinder->getX2Centroid();
-		double cx3 = 0.0; //cylinder->getX3Centroid();
-
-		mu::Parser fctF1;
-		fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		//fctF1.SetExpr("vx1");
-		fctF1.DefineConst("R", 10.0);
-		//fctF1.DefineConst("R", 8.0); // FlowFocusingSS
-		fctF1.DefineConst("vx1", uLB);
-		fctF1.DefineConst("y0", 1.0);
-		fctF1.DefineConst("z0", 31.0);
-		
-		mu::Parser fctF2_1;
-		fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-		//fctF2_1.SetExpr("vx3");
-		fctF2_1.DefineConst("R", 12.0);
-		fctF2_1.DefineConst("vx3", uF2);
-		fctF2_1.DefineConst("x0", 1.0);
-		fctF2_1.DefineConst("y0", 1.0);
-
-		mu::Parser fctF2_2;
-		fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-		//fctF2_2.SetExpr("vx3");
-		fctF2_2.DefineConst("R", 12.0);
-		fctF2_2.DefineConst("vx3", -uF2);
-		fctF2_2.DefineConst("x0", 1.0);
-		fctF2_2.DefineConst("y0", 1.0);
-		
-		mu::Parser fctPhi_F1;
-		fctPhi_F1.SetExpr("phiH");
-		fctPhi_F1.DefineConst("phiH", phiH);
-
-		mu::Parser fctPhi_F2;
-		fctPhi_F2.SetExpr("phiL");
-		fctPhi_F2.DefineConst("phiL", phiL);
-		
-		mu::Parser fctvel_F2_init;
-		fctvel_F2_init.SetExpr("U");
-		fctvel_F2_init.DefineConst("U", 0);
-
-		//fct.SetExpr("U");
-		//fct.DefineConst("U", uLB);
-		//BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		//BCAdapterPtr velBCAdapterF1(new VelocityBCAdapterMultiphase(true, false, false, fctF1, phiH, 0.0, endTime));
-		
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime));
-
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		
-		//velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		//velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		//velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		 
-		 
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-		 //mu::Parser fct;
-		 //fct.SetExpr("U");
-		 //fct.DefineConst("U", uLB);
-		 //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm()));
-
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //BC visitor
-		 BoundaryConditionsBlockVisitorMultiphase bcVisitor;
-		 /*bcVisitor.addBC(noSlipBCAdapter);
-		 bcVisitor.addBC(denBCAdapter);
-		 bcVisitor.addBC(velBCAdapterF1);
-		 bcVisitor.addBC(velBCAdapterF2_1_init);
-		 bcVisitor.addBC(velBCAdapterF2_2_init);*/
-
-
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         ppblocks->process(0);
-
-         //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID));
-		 
-
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-         InteractorsHelper intHelper(grid, metisVisitor);
-		 //intHelper.addInteractor(tubes);
-
-         intHelper.selectBlocks();
-
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-
-         kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL));
-
-         kernel->setWithForcing(false);
-		 kernel->setForcingX1(gr);
-		 kernel->setForcingX2(0.0);
-		 kernel->setForcingX3(0.0);
-
-		 kernel->setPhiL(phiL);
-		 kernel->setPhiH(phiH);
-		 kernel->setPhaseFieldRelaxation(tauH);
-		 kernel->setMobility(mob);
-
-         BCProcessorPtr bcProc(new BCProcessor());
-         //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem);
-         
-		 grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-
-
-         //intHelper.setBC();
-         //grid->accept(bcVisitor);
-
-         //initialization of distributions
-		 //initialization of distributions
-		 LBMReal x1c = (g_maxX1 - g_minX1-1)/2;
-		 LBMReal x2c = (g_maxX2 - g_minX2-1)/2;
-		 LBMReal x3c = (g_maxX3 - g_minX3-1)/2;
-		 mu::Parser fct1;
-		 fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct1.DefineConst("x1c", x1c);
-		 fct1.DefineConst("x2c", x2c);
-		 fct1.DefineConst("x3c", x3c);
-		 fct1.DefineConst("radius", radius);
-		 fct1.DefineConst("interfaceThickness", interfaceThickness);
-		 
-		 mu::Parser fct2;
-		 //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		 //fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 //fct2.SetExpr("vx1");
-		 /*fct2.DefineConst("R", 10.0);
-		 fct2.DefineConst("vx1", uLB);
-		 fct2.DefineConst("y0", 1.0);
-		 fct2.DefineConst("z0", 31.0);*/
-		 fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct2.DefineConst("uLB", uLB);
-		 fct2.DefineConst("x1c", x1c);
-		 fct2.DefineConst("x2c", x2c);
-		 fct2.DefineConst("x3c", x3c);
-		 fct2.DefineConst("radius", radius);
-		 fct2.DefineConst("interfaceThickness", interfaceThickness);
-
-
-		 InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius);
-         initVisitor.setPhi(fct1);
-         //initVisitor.setVx1(fct2);
-         grid->accept(initVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         //ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-         //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-
-
-
-         //boundary conditions grid
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-      }
-      else
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-         //bcVisitor.addBC(velBCAdapter);
-         //grid->accept(bcVisitor);
-
-         //set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-	  
-	  
-	  
-
-	  
-	  UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000));
-	  TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch));
-	  //inflowF2->addInteractor(inflowF2_1Int);
-	  //inflowF2->addInteractor(inflowF2_2Int);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-	if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp b/apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp
deleted file mode 100644
index 4b51783592d1ce6f89498313424d342b0766b289..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp	
+++ /dev/null
@@ -1,586 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-	  string		  pathGeo = config.getString("pathGeo");
-	  string		  geoFile = config.getString("geoFile");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-	  vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //vector<double>  length = config.getVector<double>("length");
-	  double          uLB = config.getDouble("uLB");
-	  double          uF2 = config.getDouble("uF2");
-	  double		  nuL = config.getDouble("nuL");
-	  double		  nuG = config.getDouble("nuG");
-	  double		  densityRatio = config.getDouble("densityRatio");
-	  double		  sigma = config.getDouble("sigma");
-	  int		      interfaceThickness = config.getInt("interfaceThickness");
-	  double		  radius = config.getDouble("radius");
-	  double		  theta = config.getDouble("contactAngle");
-	  double		  gr = config.getDouble("gravity");
-	  double		  phiL = config.getDouble("phi_L");
-	  double		  phiH = config.getDouble("phi_H");
-	  double		  tauH = config.getDouble("Phase-field Relaxation");
-	  double		  mob = config.getDouble("Mobility");
-
-
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      double          Re = config.getDouble("Re");
-      double          dx = config.getDouble("dx");
-      bool            logToFile = config.getBool("logToFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      bool            newStart = config.getValue<bool>("newStart");
-
-
-	  bool            eastBoundary   = config.getValue<bool>("eastBoundary");
-	  bool            westBoundary   = config.getValue<bool>("westBoundary");
-	  bool            northBoundary  = config.getValue<bool>("northBoundary");
-	  bool            southBoundary  = config.getValue<bool>("southBoundary");
-	  bool            topBoundary    = config.getValue<bool>("topBoundary");
-	  bool            bottomBoundary = config.getValue<bool>("bottomBoundary");
-	  
-	  int             eastBoundaryType   = config.getInt("eastBoundaryType");
-	  int             westBoundaryType   = config.getInt("westBoundaryType");
-	  int             northBoundaryType  = config.getInt("northBoundaryType");
-	  int             southBoundaryType  = config.getInt("southBoundaryType");
-	  int             topBoundaryType    = config.getInt("topBoundaryType");
-	  int             bottomBoundaryType = config.getInt("bottomBoundaryType");
-
-
-      double beta  = 12*sigma/interfaceThickness;
-	  double kappa = 1.5*interfaceThickness*sigma;
-	  
-	  CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      LBMReal dLB; // = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = nuL; //(uLB*dLB) / Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
- 
-      
-      Grid3DPtr grid(new Grid3D(comm));
-      //grid->setPeriodicX1(true);
-	  //grid->setPeriodicX2(true);
-	  //grid->setPeriodicX3(true);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-	  
-
-	  
-      
-	  
-	  mu::Parser fctF1;
-	  //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))");
-	  fctF1.SetExpr("vy1");
-	  fctF1.DefineConst("vy1", -uLB);
-	  fctF1.DefineConst("R", 7.5);
-	  fctF1.DefineConst("x0", 60.0);
-	  fctF1.DefineConst("z0", 60.0);
-	  
-
-	  if (newStart)
-      {
-
-         //bounding box
-         /*double g_minX1 = 0.0;
-         double g_minX2 = -length[1] / 2.0;
-         double g_minX3 = -length[2] / 2.0;
-
-         double g_maxX1 = length[0];
-         double g_maxX2 = length[1] / 2.0;
-         double g_maxX3 = length[2] / 2.0;*/
-
-		 double g_minX1 = boundingBox[0];
-		 double g_minX2 = boundingBox[2];
-		 double g_minX3 = boundingBox[4];
-
-		 double g_maxX1 = boundingBox[1];
-		 double g_maxX2 = boundingBox[3];
-		 double g_maxX3 = boundingBox[5];
-
-         //geometry
-
-         //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2));
-
-		 //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius));
-		 //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 
-		 //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 //GbObject3DPtr cylinders(new GbObject3DManager());
-		 //GbObject3DPtr cylinders1(new GbObjectGroup3D());
-		 
-
-		 
-		 
-		 GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-		 //GbTriFaceMesh3DPtr cylinder;
-		 //if (myid==0) UBLOG(logINFO, "Read geoFile:start");
-		 //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT));
-		 //GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-		 
-		 /*GbObject3DPtr cylinder(new GbCuboid3D(g_minX1 + 2.0, g_minX2 + 2.0, g_minX3 + 2.0, g_maxX1 - 2.0, g_maxX2 - 2.0, g_maxX3 -2.0));
-		 if (myid == 0) GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/solidWall", WbWriterVtkXmlBinary::getInstance());*/
-
-		 
-		 
-		 bool isDefined_SlipBC   = false;
-		 bool isDefined_noSlipBC = false;
-		 bool isDefined_Outflow  = false;
-
-		 if (eastBoundary)
-		 {
-			 switch (eastBoundaryType)
-			 {
-			 case 0:
-
-			 	break;
-			 case 1:
-				 break;
-			 case 2:
-				 break;
-			 case 3:
-				 break;
-			 }
-		 }
-
-		 /*GbObject3DPtr geoWallEast(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_maxX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0));
-		 if (myid == 0) GbSystem3D::writeGeoObject(geoWallEast.get(), pathname + "/geo/geoWallEast", WbWriterVtkXmlBinary::getInstance());
-
-		 GbObject3DPtr geoWallWest(new GbCuboid3D(g_minX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0));
-		 if (myid == 0) GbSystem3D::writeGeoObject(geoWallWest.get(), pathname + "/geo/geoWallWest", WbWriterVtkXmlBinary::getInstance());
-
-		 GbObject3DPtr geoWallTop(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_maxX2 - 2.0, g_minX3 -2.0));
-		 if (myid == 0) GbSystem3D::writeGeoObject(geoWallTop.get(), pathname + "/geo/geoWallTop", WbWriterVtkXmlBinary::getInstance());
-
-		 GbObject3DPtr geoWallBottom(new GbCuboid3D(g_maxX1 + 2.0, g_minX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0));
-		 if (myid == 0) GbSystem3D::writeGeoObject(geoWallBottom.get(), pathname + "/geo/geoWallBottom", WbWriterVtkXmlBinary::getInstance());
-
-		 GbObject3DPtr geoWallNorth(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_minX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0));
-		 if (myid == 0) GbSystem3D::writeGeoObject(geoWallNorth.get(), pathname + "/geo/geoWallNorth", WbWriterVtkXmlBinary::getInstance());
-
-		 GbObject3DPtr geoWallSouth(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_maxX3 -2.0));
-		 if (myid == 0) GbSystem3D::writeGeoObject(geoWallSouth.get(), pathname + "/geo/geoWallSouth", WbWriterVtkXmlBinary::getInstance());*/
-		 
-		 
-		 //inflow
-		 //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(40.0, 628.0, 40.0, 80, 631.0, 80.0));  // Original
-		 GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2-0.5*dx, g_minX3, g_maxX1, g_minX2 - 1.0*dx, g_maxX3));
-		 if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance());
-
-
-
-		 //outflow
-		 //GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, 499+80, -1.0, 121.0, 501.0+80, 121.0)); // Original
-		 GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-		 if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-		 
-		 
-		 double blockLength = blocknx[0] * dx;
-
-
-
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "Preprocess - start");
-         }
-
-         grid->setDeltaX(dx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-		 grid->setPeriodicX1(true);
-		 grid->setPeriodicX2(true);
-		 grid->setPeriodicX3(true);
-
-         
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-
-
-		 //BC Adapter
-		 //////////////////////////////////////////////////////////////////////////////
-		 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-		 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-
-
-		BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-		denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-		
-		double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius();
-		double cx1 = g_minX1;
-		double cx2 = 0.0; //cylinder->getX2Centroid();
-		double cx3 = 0.0; //cylinder->getX3Centroid();
-
-
-		
-		mu::Parser fctPhi_F1;
-		fctPhi_F1.SetExpr("phiH");
-		fctPhi_F1.DefineConst("phiH", phiH);
-
-		mu::Parser fctPhi_F2;
-		fctPhi_F2.SetExpr("phiL");
-		fctPhi_F2.DefineConst("phiL", phiL);
-		
-		mu::Parser fctvel_F2_init;
-		fctvel_F2_init.SetExpr("U");
-		fctvel_F2_init.DefineConst("U", 0);
-
-		//fct.SetExpr("U");
-		//fct.DefineConst("U", uLB);
-		//BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		
-		BCAdapterPtr velBCAdapterF1       (new VelocityBCAdapterMultiphase(false, true, false, fctF1  , phiH, 0.0, endTime));
-		
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime));
-
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		
-		velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		//velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		//velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		 
-		 
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-		 //mu::Parser fct;
-		 //fct.SetExpr("U");
-		 //fct.DefineConst("U", uLB);
-		 //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm()));
-
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //BC visitor
-		 BoundaryConditionsBlockVisitorMultiphase bcVisitor;
-		 bcVisitor.addBC(noSlipBCAdapter);
-		 bcVisitor.addBC(denBCAdapter);
-		 bcVisitor.addBC(velBCAdapterF1);
-		 //bcVisitor.addBC(velBCAdapterF2_1_init);
-		 //bcVisitor.addBC(velBCAdapterF2_2_init);
-
-
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         ppblocks->process(0);
-
-         //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID));
-		 //D3Q27InteractorPtr tubes = D3Q27InteractorPtr(new D3Q27Interactor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID));
-
-	     
-		 
-		 /*D3Q27InteractorPtr wallEast   = D3Q27InteractorPtr(new D3Q27Interactor(geoWallEast, grid, noSlipBCAdapter, Interactor3D::SOLID));
-		 D3Q27InteractorPtr wallWest   = D3Q27InteractorPtr(new D3Q27Interactor(geoWallWest, grid, noSlipBCAdapter, Interactor3D::SOLID));
-		 D3Q27InteractorPtr wallTop    = D3Q27InteractorPtr(new D3Q27Interactor(geoWallTop, grid, noSlipBCAdapter, Interactor3D::SOLID));
-		 D3Q27InteractorPtr wallBottom = D3Q27InteractorPtr(new D3Q27Interactor(geoWallBottom, grid, noSlipBCAdapter, Interactor3D::SOLID));
-		 D3Q27InteractorPtr wallNorth  = D3Q27InteractorPtr(new D3Q27Interactor(geoWallNorth, grid, noSlipBCAdapter, Interactor3D::SOLID));
-		 D3Q27InteractorPtr wallSouth  = D3Q27InteractorPtr(new D3Q27Interactor(geoWallSouth, grid, noSlipBCAdapter, Interactor3D::SOLID));*/
-		 
-		 D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID));
-
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
-
-		 //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor1);
-		 //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor2);
-
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW));
-         InteractorsHelper intHelper(grid, metisVisitor);
-		 //intHelper.addInteractor(tubes);
-		 //intHelper.addInteractor(inflowF1Int);
-		 //intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-
-         kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL));
-
-         kernel->setWithForcing(true);
-		 kernel->setForcingX1(0.0);
-		 kernel->setForcingX2(gr);
-		 kernel->setForcingX3(0.0);
-
-		 kernel->setPhiL(phiL);
-		 kernel->setPhiH(phiH);
-		 kernel->setPhaseFieldRelaxation(tauH);
-		 kernel->setMobility(mob);
-
-         BCProcessorPtr bcProc(new BCProcessor());
-         //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem);
-         
-		 grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-		 //inflowF2_1Int->initInteractor();
-		 //inflowF2_2Int->initInteractor();
-
-         intHelper.setBC();
-		 
-        
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-		 LBMReal x1c =  (g_maxX1+g_minX1)/2; //radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2;
-		 LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2;
-		 LBMReal x3c = (g_maxX3+g_minX3)/2;
-		 mu::Parser fct1;
-		 
-		 //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))");
-		 
-		 fct1.SetExpr("0.5*(phiH + phiL) - 0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)");
-		 //fct1.SetExpr("phiL");
-		 fct1.DefineConst("x1c", x1c);
-		 fct1.DefineConst("x2c", x2c);
-		 fct1.DefineConst("x3c", x3c);
-		 fct1.DefineConst("phiL", phiL);
-		 fct1.DefineConst("phiH", phiH);
-		 fct1.DefineConst("radius", radius);
-		 fct1.DefineConst("interfaceThickness", interfaceThickness);
-		 
-		 mu::Parser fct2;
-		 //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		 /*fct2.SetExpr("vx1");
-		 fct2.DefineConst("R", 10.0);
-		 fct2.DefineConst("vx1", uLB);
-		 fct2.DefineConst("y0", 1.0);
-		 fct2.DefineConst("z0", 31.0);*/
-		 fct2.SetExpr("0.5*uLB*(phiH + phiL) - 0.5*uLB*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct2.DefineConst("uLB", uLB);
-		 fct2.DefineConst("x1c", x1c);
-		 fct2.DefineConst("x2c", x2c);
-		 fct2.DefineConst("x3c", x3c);
-		 fct2.DefineConst("phiL", phiL);
-		 fct2.DefineConst("phiH", phiH);
-		 fct2.DefineConst("radius", radius);
-		 fct2.DefineConst("interfaceThickness", interfaceThickness);
-
-
-		 mu::Parser fct3;
-		 fct3.SetExpr("0.5*sigma*(phiH + phiL)/radius - 0.5*sigma/radius*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct3.DefineConst("sigma", sigma);
-		 fct3.DefineConst("x1c", x1c);
-		 fct3.DefineConst("x2c", x2c);
-		 fct3.DefineConst("x3c", x3c);
-		 fct3.DefineConst("phiL", phiL);
-		 fct3.DefineConst("phiH", phiH);
-		 fct3.DefineConst("radius", radius);
-		 fct3.DefineConst("interfaceThickness", interfaceThickness);
-
-		 InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius);
-         initVisitor.setPhi(fct1);
-         //initVisitor.setVx1(fct2);
-		 //initVisitor.setRho(fct3);
-         grid->accept(initVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         //ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-         //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-
-
-
-         //boundary conditions grid
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-      }
-      else
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-         //bcVisitor.addBC(velBCAdapter);
-         //grid->accept(bcVisitor);
-
-         //set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-	  
-	  
-	  
-
-	  
-	  //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000));
-	  //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch));
-	  //inflowF2->addInteractor(inflowF2_1Int);
-	  //inflowF2->addInteractor(inflowF2_2Int);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-	if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp b/apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp
deleted file mode 100644
index c79270b365d36b1b2a5c89f14ab9408592a1ecc4..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp	
+++ /dev/null
@@ -1,560 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-	  string		  pathGeo = config.getString("pathGeo");
-	  string		  geoFile = config.getString("geoFile");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-	  vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //vector<double>  length = config.getVector<double>("length");
-	  double          uLB = config.getDouble("uLB");
-	  double          uF2 = config.getDouble("uF2");
-	  double		  nuL = config.getDouble("nuL");
-	  double		  nuG = config.getDouble("nuG");
-	  double		  densityRatio = config.getDouble("densityRatio");
-	  double		  sigma = config.getDouble("sigma");
-	  int		      interfaceThickness = config.getInt("interfaceThickness");
-	  double		  radius = config.getDouble("radius");
-	  double		  theta = config.getDouble("contactAngle");
-	  double		  gr = config.getDouble("gravity");
-	  double		  phiL = config.getDouble("phi_L");
-	  double		  phiH = config.getDouble("phi_H");
-	  double		  tauH = config.getDouble("Phase-field Relaxation");
-	  double		  mob = config.getDouble("Mobility");
-
-
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      double          Re = config.getDouble("Re");
-      double          dx = config.getDouble("dx");
-      bool            logToFile = config.getBool("logToFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      bool            newStart = config.getValue<bool>("newStart");
-
-      double beta  = 12*sigma/interfaceThickness;
-	  double kappa = 1.5*interfaceThickness*sigma;
-	  
-	  CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      LBMReal dLB; // = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = nuL; //(uLB*dLB) / Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
- 
-      
-      Grid3DPtr grid(new Grid3D(comm));
-      //grid->setPeriodicX1(true);
-	  //grid->setPeriodicX2(true);
-	  //grid->setPeriodicX3(true);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-	  
-
-	  //inflow
-	  GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-26.5, -1, 24.0, -22.5, 18.0, 78.0));  // For FlowFocusingS2
-	  if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance());
-
-
-	  GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(-1.0, -1.0, 0.5, 53.0, 18.0, 2.5)); // For FlowFocusingS2
-	  if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance());
-
-
-	  GbCuboid3DPtr geoInflowF2_2(new GbCuboid3D(-1.0, -1.0, 63.5, 53.0, 18.0, 66.5)); // For FlowFocusingS2
-	  if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_2.get(), pathname+"/geo/geoInflowF2_2", WbWriterVtkXmlASCII::getInstance());
-
-	  //outflow
-	  GbCuboid3DPtr geoOutflow(new GbCuboid3D(178.5, -1, 24.0, 181.5, 18.0, 78.0)); // For FlowFocusingS2
-	  if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-      
-	  
-	  mu::Parser fctF1;
-	  //fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-	  fctF1.SetExpr("vx1");
-	  fctF1.DefineConst("vx1", uLB);
-	  /*fctF1.DefineConst("R", 8.0);
-	  fctF1.DefineConst("y0", 0.0);
-	  fctF1.DefineConst("z0", 0.0);*/
-	  
-	  fctF1.DefineConst("R", 10.0); // FlowFocusingSS , FlowFocusingS
-	  fctF1.DefineConst("y0", 1.0); // FlowFocusingSS , FlowFocusingS
-	  fctF1.DefineConst("z0", 31.0); // FlowFocusingSS , FlowFocusingS
-
-	  mu::Parser fctF2_1;
-	  //fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-	  fctF2_1.SetExpr("vx3");
-	  fctF2_1.DefineConst("vx3", uF2);
-	  /*fctF2_1.DefineConst("R", 16.0);
-	  fctF2_1.DefineConst("x0", 35.0);
-	  fctF2_1.DefineConst("y0", 0.0);*/
-
-	  fctF2_1.DefineConst("R", 12.0);   // FlowFocusingSS , FlowFocusingS
-	  fctF2_1.DefineConst("x0", 1.0);	// FlowFocusingSS , FlowFocusingS
-	  fctF2_1.DefineConst("y0", 1.0);	// FlowFocusingSS , FlowFocusingS
-
-
-	  mu::Parser fctF2_2;
-	  //fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-	  fctF2_2.SetExpr("vx3");
-	  fctF2_2.DefineConst("vx3", -uF2);
-	  /*fctF2_2.DefineConst("R", 16.0);
-	  fctF2_2.DefineConst("x0", 35.0);
-	  fctF2_2.DefineConst("y0", 0.0);*/
-
-	  fctF2_2.DefineConst("R", 12.0);  // FlowFocusingSS , FlowFocusingS
-	  fctF2_2.DefineConst("x0", 1.0); // FlowFocusingSS , FlowFocusingS
-	  fctF2_2.DefineConst("y0", 1.0);  // FlowFocusingSS , FlowFocusingS
-	  
-	  
-	  /*mu::Parser fctF2_1;
-	  fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-	  fctF2_1.DefineConst("R", 12.0);
-	  fctF2_1.DefineConst("vx3", uF2);
-	  fctF2_1.DefineConst("x0", 1.0);
-	  fctF2_1.DefineConst("y0", 1.0);
-
-	  mu::Parser fctF2_2;
-	  fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-	  fctF2_2.DefineConst("R", 12.0);
-	  fctF2_2.DefineConst("vx3", -uF2);
-	  fctF2_2.DefineConst("x0", 1.0);
-	  fctF2_2.DefineConst("y0", 1.0);
-
-	  BCAdapterPtr velBCAdapterF2_1(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime));
-	  BCAdapterPtr velBCAdapterF2_2(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime));
-
-	  D3Q27InteractorPtr inflowF2_1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1, Interactor3D::SOLID));
-	  D3Q27InteractorPtr inflowF2_2Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2, Interactor3D::SOLID));*/
-
-
-
-	  if (newStart)
-      {
-
-         //bounding box
-         /*double g_minX1 = 0.0;
-         double g_minX2 = -length[1] / 2.0;
-         double g_minX3 = -length[2] / 2.0;
-
-         double g_maxX1 = length[0];
-         double g_maxX2 = length[1] / 2.0;
-         double g_maxX3 = length[2] / 2.0;*/
-
-		 double g_minX1 = boundingBox[0];
-		 double g_minX2 = boundingBox[2];
-		 double g_minX3 = boundingBox[4];
-
-		 double g_maxX1 = boundingBox[1];
-		 double g_maxX2 = boundingBox[3];
-		 double g_maxX3 = boundingBox[5];
-
-         //geometry
-
-         //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2));
-
-		 //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius));
-		 //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 
-		 //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 //GbObject3DPtr cylinders(new GbObject3DManager());
-		 //GbObject3DPtr cylinders1(new GbObjectGroup3D());
-		 
-
-		 
-		 
-		 GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-		 GbTriFaceMesh3DPtr cylinder;
-		 if (myid==0) UBLOG(logINFO, "Read geoFile:start");
-		 //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-		 cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT));
-		 GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-
-         double blockLength = blocknx[0] * dx;
-
-
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "Preprocess - start");
-         }
-
-         grid->setDeltaX(dx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-		 grid->setPeriodicX1(false);
-		 grid->setPeriodicX2(false);
-		 grid->setPeriodicX3(false);
-
-         
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-
-
-		 //BC Adapter
-		 //////////////////////////////////////////////////////////////////////////////
-		 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-		 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-
-
-		BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-		denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-		
-		double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius();
-		double cx1 = g_minX1;
-		double cx2 = 0.0; //cylinder->getX2Centroid();
-		double cx3 = 0.0; //cylinder->getX3Centroid();
-
-
-		
-		mu::Parser fctPhi_F1;
-		fctPhi_F1.SetExpr("phiH");
-		fctPhi_F1.DefineConst("phiH", phiH);
-
-		mu::Parser fctPhi_F2;
-		fctPhi_F2.SetExpr("phiL");
-		fctPhi_F2.DefineConst("phiL", phiL);
-		
-		mu::Parser fctvel_F2_init;
-		fctvel_F2_init.SetExpr("U");
-		fctvel_F2_init.DefineConst("U", 0);
-
-		//fct.SetExpr("U");
-		//fct.DefineConst("U", uLB);
-		//BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		
-		BCAdapterPtr velBCAdapterF1       (new VelocityBCAdapterMultiphase(true, false, false, fctF1  , phiH, 0.0, endTime));
-		
-		BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime));
-		BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime));
-
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		
-		velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		 
-		 
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-		 //mu::Parser fct;
-		 //fct.SetExpr("U");
-		 //fct.DefineConst("U", uLB);
-		 //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm()));
-
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //BC visitor
-		 BoundaryConditionsBlockVisitorMultiphase bcVisitor;
-		 bcVisitor.addBC(noSlipBCAdapter);
-		 bcVisitor.addBC(denBCAdapter);
-		 bcVisitor.addBC(velBCAdapterF1);
-		 bcVisitor.addBC(velBCAdapterF2_1_init);
-		 bcVisitor.addBC(velBCAdapterF2_2_init);
-
-
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         ppblocks->process(0);
-
-         Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID));
-		 
-	     D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID));
-
-		 D3Q27InteractorPtr inflowF2_1Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1_init, Interactor3D::SOLID));
-
-		 D3Q27InteractorPtr inflowF2_2Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2_init, Interactor3D::SOLID));
-
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
-
-		 //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor1);
-		 //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor2);
-
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-         InteractorsHelper intHelper(grid, metisVisitor);
-		 intHelper.addInteractor(tubes);
-         intHelper.addInteractor(inflowF1Int);
-		 intHelper.addInteractor(inflowF2_1Int_init);
-		 intHelper.addInteractor(inflowF2_2Int_init);
-         intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-
-         kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL));
-
-         kernel->setWithForcing(false);
-		 kernel->setForcingX1(gr);
-		 kernel->setForcingX2(0.0);
-		 kernel->setForcingX3(0.0);
-
-		 kernel->setPhiL(phiL);
-		 kernel->setPhiH(phiH);
-		 kernel->setPhaseFieldRelaxation(tauH);
-		 kernel->setMobility(mob);
-
-         BCProcessorPtr bcProc(new BCProcessor());
-         //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem);
-         
-		 grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-		 //inflowF2_1Int->initInteractor();
-		 //inflowF2_2Int->initInteractor();
-
-         intHelper.setBC();
-		 
-        
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-		 LBMReal x1c =  radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2;
-		 LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2;
-		 LBMReal x3c = (g_maxX3+g_minX3)/2;
-		 mu::Parser fct1;
-		 
-		 //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))");
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x1-x1c))/interfaceThickness)");
-		 fct1.SetExpr("phiH");
-		 fct1.DefineConst("x1c", x1c);
-		 fct1.DefineConst("x2c", x2c);
-		 fct1.DefineConst("x3c", x3c);
-		 fct1.DefineConst("phiL", phiL);
-		 fct1.DefineConst("phiH", phiH);
-		 fct1.DefineConst("radius", radius);
-		 fct1.DefineConst("interfaceThickness", interfaceThickness);
-		 
-		 mu::Parser fct2;
-		 //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		 fct2.SetExpr("vx1");
-		 fct2.DefineConst("R", 10.0);
-		 fct2.DefineConst("vx1", uLB);
-		 fct2.DefineConst("y0", 1.0);
-		 fct2.DefineConst("z0", 31.0);
-		 /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct2.DefineConst("uLB", uLB);
-		 fct2.DefineConst("x1c", x1c);
-		 fct2.DefineConst("x2c", x2c);
-		 fct2.DefineConst("x3c", x3c);
-		 fct2.DefineConst("radius", radius);
-		 fct2.DefineConst("interfaceThickness", interfaceThickness);*/
-
-
-		 InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius);
-         initVisitor.setPhi(fct1);
-         //initVisitor.setVx1(fct2);
-         grid->accept(initVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         //ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-         //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-
-
-
-         //boundary conditions grid
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-      }
-      else
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-         //bcVisitor.addBC(velBCAdapter);
-         //grid->accept(bcVisitor);
-
-         //set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-	  
-	  
-	  
-
-	  
-	  UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000));
-	  TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch));
-	  //inflowF2->addInteractor(inflowF2_1Int);
-	  //inflowF2->addInteractor(inflowF2_2Int);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-	if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp b/apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp
deleted file mode 100644
index d43a61d6767b4193f443bcb1fede89cf3f37bc5f..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp	
+++ /dev/null
@@ -1,508 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-	  string		  pathGeo = config.getString("pathGeo");
-	  string		  geoFile = config.getString("geoFile");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-	  vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //vector<double>  length = config.getVector<double>("length");
-	  double          uLB = config.getDouble("uLB");
-	  double          uF2 = config.getDouble("uF2");
-	  double		  nuL = config.getDouble("nuL");
-	  double		  nuG = config.getDouble("nuG");
-	  double		  densityRatio = config.getDouble("densityRatio");
-	  double		  sigma = config.getDouble("sigma");
-	  int		      interfaceThickness = config.getInt("interfaceThickness");
-	  double		  radius = config.getDouble("radius");
-	  double		  theta = config.getDouble("contactAngle");
-	  double		  gr = config.getDouble("gravity");
-	  double		  phiL = config.getDouble("phi_L");
-	  double		  phiH = config.getDouble("phi_H");
-	  double		  tauH = config.getDouble("Phase-field Relaxation");
-	  double		  mob = config.getDouble("Mobility");
-
-
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      double          Re = config.getDouble("Re");
-      double          dx = config.getDouble("dx");
-      bool            logToFile = config.getBool("logToFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      bool            newStart = config.getValue<bool>("newStart");
-
-      double beta  = 12*sigma/interfaceThickness;
-	  double kappa = 1.5*interfaceThickness*sigma;
-	  
-	  CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      LBMReal dLB; // = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = nuL; //(uLB*dLB) / Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
- 
-      
-      Grid3DPtr grid(new Grid3D(comm));
-      //grid->setPeriodicX1(true);
-	  //grid->setPeriodicX2(true);
-	  //grid->setPeriodicX3(true);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-	  
-
-
-      
-	  
-	  mu::Parser fctF1;
-	  //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))");
-	  //fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1");
-	  fctF1.SetExpr("vy1");
-	  fctF1.DefineConst("vy1", -uLB);
-	  fctF1.DefineConst("R", 8.0);
-	  fctF1.DefineConst("x0", 0.0);
-	  fctF1.DefineConst("z0", 0.0);
-	  
-
-	  if (newStart)
-      {
-
-         //bounding box
-         /*double g_minX1 = 0.0;
-         double g_minX2 = -length[1] / 2.0;
-         double g_minX3 = -length[2] / 2.0;
-
-         double g_maxX1 = length[0];
-         double g_maxX2 = length[1] / 2.0;
-         double g_maxX3 = length[2] / 2.0;*/
-
-		 double g_minX1 = boundingBox[0];
-		 double g_minX2 = boundingBox[2];
-		 double g_minX3 = boundingBox[4];
-
-		 double g_maxX1 = boundingBox[1];
-		 double g_maxX2 = boundingBox[3];
-		 double g_maxX3 = boundingBox[5];
-
-         //geometry
-
-         //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2));
-
-		 //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius));
-		 //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 
-		 //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 //GbObject3DPtr cylinders(new GbObject3DManager());
-		 //GbObject3DPtr cylinders1(new GbObjectGroup3D());
-		 
-
-		 
-		 
-		 GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-		 GbTriFaceMesh3DPtr cylinder;
-		 if (myid==0) UBLOG(logINFO, "Read geoFile:start");
-		 //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-		 cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT));
-		 GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-
-         
-         
-         //inflow
-		//GbCuboid3DPtr geoInflowF1(new GbCuboid3D(40.0, 628.0, 40.0, 80, 631.0, 80.0));  // For JetBreakup (Original)
-		GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2-0.5*dx, g_minX3, g_maxX1, g_minX2 - 1.0*dx, g_maxX3));
-		if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance());
-
-
-		//outflow
-		//GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original)
-		GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-		if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-         
-         
-         double blockLength = blocknx[0] * dx;
-
-
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "Preprocess - start");
-         }
-
-         grid->setDeltaX(dx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-		 grid->setPeriodicX1(false);
-		 grid->setPeriodicX2(false);
-		 grid->setPeriodicX3(false);
-
-         
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-
-
-		 //BC Adapter
-		 //////////////////////////////////////////////////////////////////////////////
-		 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-		 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-
-
-		BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-		denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-		
-		double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius();
-		double cx1 = g_minX1;
-		double cx2 = 0.0; //cylinder->getX2Centroid();
-		double cx3 = 0.0; //cylinder->getX3Centroid();
-
-
-		
-		mu::Parser fctPhi_F1;
-		fctPhi_F1.SetExpr("phiH");
-		fctPhi_F1.DefineConst("phiH", phiH);
-
-		mu::Parser fctPhi_F2;
-		fctPhi_F2.SetExpr("phiL");
-		fctPhi_F2.DefineConst("phiL", phiL);
-		
-		mu::Parser fctvel_F2_init;
-		fctvel_F2_init.SetExpr("U");
-		fctvel_F2_init.DefineConst("U", 0);
-
-		//fct.SetExpr("U");
-		//fct.DefineConst("U", uLB);
-		//BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		
-		BCAdapterPtr velBCAdapterF1       (new VelocityBCAdapterMultiphase(false, true, false, fctF1  , phiH, 0.0, endTime));
-		
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime));
-
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		
-		velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		//velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		//velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		 
-		 
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-		 //mu::Parser fct;
-		 //fct.SetExpr("U");
-		 //fct.DefineConst("U", uLB);
-		 //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm()));
-
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //BC visitor
-		 BoundaryConditionsBlockVisitorMultiphase bcVisitor;
-		 bcVisitor.addBC(noSlipBCAdapter);
-		 bcVisitor.addBC(denBCAdapter);
-		 bcVisitor.addBC(velBCAdapterF1);
-		 //bcVisitor.addBC(velBCAdapterF2_1_init);
-		 //bcVisitor.addBC(velBCAdapterF2_2_init);
-
-
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         ppblocks->process(0);
-
-         Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID));
-		 
-	     D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID));
-
-		 //D3Q27InteractorPtr inflowF2_1Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1_init, Interactor3D::SOLID));
-
-		 //D3Q27InteractorPtr inflowF2_2Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2_init, Interactor3D::SOLID));
-
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
-
-		 //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor1);
-		 //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor2);
-
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW));
-         InteractorsHelper intHelper(grid, metisVisitor);
-		 intHelper.addInteractor(tubes);
-         intHelper.addInteractor(inflowF1Int);
-         intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-
-         kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL));
-
-         kernel->setWithForcing(true);
-		 kernel->setForcingX1(0.0);
-		 kernel->setForcingX2(gr);
-		 kernel->setForcingX3(0.0);
-
-		 kernel->setPhiL(phiL);
-		 kernel->setPhiH(phiH);
-		 kernel->setPhaseFieldRelaxation(tauH);
-		 kernel->setMobility(mob);
-
-         BCProcessorPtr bcProc(new BCProcessor());
-         //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem);
-         
-		 grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-		 //inflowF2_1Int->initInteractor();
-		 //inflowF2_2Int->initInteractor();
-
-         intHelper.setBC();
-		 
-        
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-		 LBMReal x1c =  radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2;
-		 LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2;
-		 LBMReal x3c = (g_maxX3+g_minX3)/2;
-		 mu::Parser fct1;
-		 
-		 //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))");
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)");
-		 fct1.SetExpr("phiL");
-		 fct1.DefineConst("x1c", x1c);
-		 fct1.DefineConst("x2c", x2c);
-		 fct1.DefineConst("x3c", x3c);
-		 fct1.DefineConst("phiL", phiL);
-		 fct1.DefineConst("phiH", phiH);
-		 fct1.DefineConst("radius", radius);
-		 fct1.DefineConst("interfaceThickness", interfaceThickness);
-		 
-		 mu::Parser fct2;
-		 //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		 fct2.SetExpr("vx1");
-		 fct2.DefineConst("R", 10.0);
-		 fct2.DefineConst("vx1", uLB);
-		 fct2.DefineConst("y0", 1.0);
-		 fct2.DefineConst("z0", 31.0);
-		 /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct2.DefineConst("uLB", uLB);
-		 fct2.DefineConst("x1c", x1c);
-		 fct2.DefineConst("x2c", x2c);
-		 fct2.DefineConst("x3c", x3c);
-		 fct2.DefineConst("radius", radius);
-		 fct2.DefineConst("interfaceThickness", interfaceThickness);*/
-
-
-		 InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius);
-         initVisitor.setPhi(fct1);
-         //initVisitor.setVx1(fct2);
-         grid->accept(initVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         //ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-         //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         //grid->accept(pqPartVisitor);
-
-
-
-
-         //boundary conditions grid
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-      }
-      else
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-         //bcVisitor.addBC(velBCAdapter);
-         //grid->accept(bcVisitor);
-
-         //set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-	  
-	  
-	  
-
-	  
-	  //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000));
-	  //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch));
-	  //inflowF2->addInteractor(inflowF2_1Int);
-	  //inflowF2->addInteractor(inflowF2_2Int);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-	if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp b/apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp
deleted file mode 100644
index c213e6366119e8cbb8ca0db20e387b07a642c758..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp	
+++ /dev/null
@@ -1,488 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-	  string		  pathGeo = config.getString("pathGeo");
-	  string		  geoFile = config.getString("geoFile");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-	  vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //vector<double>  length = config.getVector<double>("length");
-	  double          uLB = config.getDouble("uLB");
-	  double          uF2 = config.getDouble("uF2");
-	  double		  nuL = config.getDouble("nuL");
-	  double		  nuG = config.getDouble("nuG");
-	  double		  densityRatio = config.getDouble("densityRatio");
-	  double		  sigma = config.getDouble("sigma");
-	  int		      interfaceThickness = config.getInt("interfaceThickness");
-	  double		  radius = config.getDouble("radius");
-	  double		  theta = config.getDouble("contactAngle");
-	  double		  gr = config.getDouble("gravity");
-	  double		  phiL = config.getDouble("phi_L");
-	  double		  phiH = config.getDouble("phi_H");
-	  double		  tauH = config.getDouble("Phase-field Relaxation");
-	  double		  mob = config.getDouble("Mobility");
-
-
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      double          Re = config.getDouble("Re");
-      double          dx = config.getDouble("dx");
-      bool            logToFile = config.getBool("logToFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      bool            newStart = config.getValue<bool>("newStart");
-
-      double beta  = 12*sigma/interfaceThickness;
-	  double kappa = 1.5*interfaceThickness*sigma;
-	  
-	  CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      LBMReal dLB; // = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = nuL; //(uLB*dLB) / Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
- 
-      
-      Grid3DPtr grid(new Grid3D(comm));
-      //grid->setPeriodicX1(true);
-	  //grid->setPeriodicX2(true);
-	  //grid->setPeriodicX3(true);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-	  
-	  //inflow
-	  GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-2.0, -25.0, -25.0, 0.5, 25.0, 25.0));
-	  if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance());	  
-	  
-	  GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(35.0, -15.0, 62.0, 65.0, 15.0, 59.5));
-	  if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance());
-
-	  
-	  //outflow
-	  GbCuboid3DPtr geoOutflow(new GbCuboid3D(179.5, -25.0, -25.0, 182.0, 25.0, 25.0));
-	  if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-	  
-	  mu::Parser fctF1;
-	  fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-	  fctF1.DefineConst("R", 12.0);
-	  fctF1.DefineConst("vx1", uLB);
-	  fctF1.DefineConst("y0", 0.0);
-	  fctF1.DefineConst("z0", 0.0);
-
-
-	  mu::Parser fctF2_1;
-	  fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-	  fctF2_1.DefineConst("R", 10.0);
-	  fctF2_1.DefineConst("vx3", -uF2);
-	  fctF2_1.DefineConst("x0", 50.0);
-	  fctF2_1.DefineConst("y0", 0.0);
-
-	  
-	  BCAdapterPtr velBCAdapterF1(new VelocityBCAdapterMultiphase(true, false, false, fctF1, phiL, 0.0, endTime));	
-	  BCAdapterPtr velBCAdapterF2_1(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime));
-	  
-
-
-	  
-
-
-
-	  if (newStart)
-      {
-
-         //bounding box
-         /*double g_minX1 = 0.0;
-         double g_minX2 = -length[1] / 2.0;
-         double g_minX3 = -length[2] / 2.0;
-
-         double g_maxX1 = length[0];
-         double g_maxX2 = length[1] / 2.0;
-         double g_maxX3 = length[2] / 2.0;*/
-
-		 double g_minX1 = boundingBox[0];
-		 double g_minX2 = boundingBox[2];
-		 double g_minX3 = boundingBox[4];
-
-		 double g_maxX1 = boundingBox[1];
-		 double g_maxX2 = boundingBox[3];
-		 double g_maxX3 = boundingBox[5];
-
-         //geometry
-
-		 GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-		 GbTriFaceMesh3DPtr cylinder;
-		 if (myid==0) UBLOG(logINFO, "Read geoFile:start");
-		 //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-		 cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT));
-		 GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-
-         double blockLength = blocknx[0] * dx;
-
-
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "Preprocess - start");
-         }
-
-         grid->setDeltaX(dx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-		 grid->setPeriodicX1(false);
-		 grid->setPeriodicX2(false);
-		 grid->setPeriodicX3(false);
-
-         
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-
-		 //BC Adapter
-		 //////////////////////////////////////////////////////////////////////////////
-		 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-		 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-
-
-		BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-		denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-		
-		double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius();
-		double cx1 = g_minX1;
-		double cx2 = 0.0; //cylinder->getX2Centroid();
-		double cx3 = 0.0; //cylinder->getX3Centroid();
-
-
-
-		//fct.SetExpr("U");
-		//fct.DefineConst("U", uLB);
-		//BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		
-		
-
-
-		
-		velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		velBCAdapterF2_1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-
-		//velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		 
-		 
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-		 //mu::Parser fct;
-		 //fct.SetExpr("U");
-		 //fct.DefineConst("U", uLB);
-		 //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm()));
-
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //BC visitor
-		 BoundaryConditionsBlockVisitorMultiphase bcVisitor;
-		 bcVisitor.addBC(noSlipBCAdapter);
-		 bcVisitor.addBC(denBCAdapter);
-		 bcVisitor.addBC(velBCAdapterF1);
-		 bcVisitor.addBC(velBCAdapterF2_1);
-
-
-
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         ppblocks->process(0);
-
-         Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID));
-		 
-	     D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID));
-
-		 D3Q27InteractorPtr inflowF2_1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1, Interactor3D::SOLID));
-
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
-
-		 //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor1);
-		 //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor2);
-
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-         InteractorsHelper intHelper(grid, metisVisitor);
-		 intHelper.addInteractor(tubes);
-         intHelper.addInteractor(inflowF1Int);
-		 intHelper.addInteractor(inflowF2_1Int);
-         intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-
-         kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL));
-
-         kernel->setWithForcing(false);
-		 kernel->setForcingX1(gr);
-		 kernel->setForcingX2(0.0);
-		 kernel->setForcingX3(0.0);
-
-		 kernel->setPhiL(phiL);
-		 kernel->setPhiH(phiH);
-		 kernel->setPhaseFieldRelaxation(tauH);
-		 kernel->setMobility(mob);
-
-         BCProcessorPtr bcProc(new BCProcessor());
-         //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem);
-         
-		 grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-		 //inflowF2_1Int->initInteractor();
-		 //inflowF2_2Int->initInteractor();
-
-         intHelper.setBC();
-		 
-        
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-		 LBMReal x1c =  radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2;
-		 LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2;
-		 LBMReal x3c = (g_maxX3+g_minX3)/2;
-		 mu::Parser fct1;
-		 
-		 //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))");
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x3-x1c))/interfaceThickness)");
-		 
-		 //fct1.SetExpr("phiH");
-		 fct1.DefineConst("x1c", x1c);
-		 fct1.DefineConst("x2c", x2c);
-		 fct1.DefineConst("x3c", x3c);
-		 fct1.DefineConst("phiL", phiL);
-		 fct1.DefineConst("phiH", phiH);
-		 fct1.DefineConst("radius", radius);
-		 fct1.DefineConst("interfaceThickness", interfaceThickness);
-		 
-		 mu::Parser fct2;
-		 //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		 fct2.SetExpr("vx1");
-		 fct2.DefineConst("R", 10.0);
-		 fct2.DefineConst("vx1", uLB);
-		 fct2.DefineConst("y0", 1.0);
-		 fct2.DefineConst("z0", 31.0);
-		 /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct2.DefineConst("uLB", uLB);
-		 fct2.DefineConst("x1c", x1c);
-		 fct2.DefineConst("x2c", x2c);
-		 fct2.DefineConst("x3c", x3c);
-		 fct2.DefineConst("radius", radius);
-		 fct2.DefineConst("interfaceThickness", interfaceThickness);*/
-
-
-		 InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius);
-         initVisitor.setPhi(fct1);
-         //initVisitor.setVx1(fct2);
-         grid->accept(initVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         //ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-         //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-
-
-
-         //boundary conditions grid
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-      }
-      else
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-         //bcVisitor.addBC(velBCAdapter);
-         //grid->accept(bcVisitor);
-
-         //set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-	  
-	  
-	  
-
-	  
-	  UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000));
-	  TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch));
-	  //inflowF2->addInteractor(inflowF2_1Int);
-	  //inflowF2->addInteractor(inflowF2_2Int);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-	if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp b/apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp
deleted file mode 100644
index 4f5417397da1fc043e466f1901ccd727b8831ca4..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp	
+++ /dev/null
@@ -1,529 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-	  string		  pathGeo = config.getString("pathGeo");
-	  string		  geoFile = config.getString("geoFile");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-	  vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //vector<double>  length = config.getVector<double>("length");
-	  double          uLB = config.getDouble("uLB");
-	  double          uF2 = config.getDouble("uF2");
-	  double		  nuL = config.getDouble("nuL");
-	  double		  nuG = config.getDouble("nuG");
-	  double		  densityRatio = config.getDouble("densityRatio");
-	  double		  sigma = config.getDouble("sigma");
-	  int		      interfaceThickness = config.getInt("interfaceThickness");
-	  double		  radius = config.getDouble("radius");
-	  double		  theta = config.getDouble("contactAngle");
-	  double		  gr = config.getDouble("gravity");
-	  double		  phiL = config.getDouble("phi_L");
-	  double		  phiH = config.getDouble("phi_H");
-	  double		  tauH = config.getDouble("Phase-field Relaxation");
-	  double		  mob = config.getDouble("Mobility");
-
-
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      double          Re = config.getDouble("Re");
-      double          dx = config.getDouble("dx");
-      bool            logToFile = config.getBool("logToFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      bool            newStart = config.getValue<bool>("newStart");
-
-      double beta  = 12*sigma/interfaceThickness;
-	  double kappa = 1.5*interfaceThickness*sigma;
-	  
-	  CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      LBMReal dLB; // = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = nuL; //(uLB*dLB) / Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
- 
-      
-      Grid3DPtr grid(new Grid3D(comm));
-      //grid->setPeriodicX1(true);
-	  //grid->setPeriodicX2(true);
-	  //grid->setPeriodicX3(true);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-	  
-
-
-
-
-      
-	  
-	  mu::Parser fctF1;
-	  //fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-	  fctF1.SetExpr("vx1");
-	  fctF1.DefineConst("vx1", 0.0);
-	  /*fctF1.DefineConst("R", 8.0);
-	  fctF1.DefineConst("y0", 0.0);
-	  fctF1.DefineConst("z0", 0.0);*/
-	  
-	  fctF1.DefineConst("R", 10.0); // FlowFocusingSS , FlowFocusingS
-	  fctF1.DefineConst("y0", 1.0); // FlowFocusingSS , FlowFocusingS
-	  fctF1.DefineConst("z0", 31.0); // FlowFocusingSS , FlowFocusingS
-
-
-	  
-	  
-	  /*mu::Parser fctF2_1;
-	  fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-	  fctF2_1.DefineConst("R", 12.0);
-	  fctF2_1.DefineConst("vx3", uF2);
-	  fctF2_1.DefineConst("x0", 1.0);
-	  fctF2_1.DefineConst("y0", 1.0);
-
-	  mu::Parser fctF2_2;
-	  fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))");
-	  fctF2_2.DefineConst("R", 12.0);
-	  fctF2_2.DefineConst("vx3", -uF2);
-	  fctF2_2.DefineConst("x0", 1.0);
-	  fctF2_2.DefineConst("y0", 1.0);
-
-	  BCAdapterPtr velBCAdapterF2_1(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime));
-	  BCAdapterPtr velBCAdapterF2_2(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime));
-
-	  D3Q27InteractorPtr inflowF2_1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1, Interactor3D::SOLID));
-	  D3Q27InteractorPtr inflowF2_2Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2, Interactor3D::SOLID));*/
-
-
-
-	  if (newStart)
-      {
-
-         //bounding box
-         /*double g_minX1 = 0.0;
-         double g_minX2 = -length[1] / 2.0;
-         double g_minX3 = -length[2] / 2.0;
-
-         double g_maxX1 = length[0];
-         double g_maxX2 = length[1] / 2.0;
-         double g_maxX3 = length[2] / 2.0;*/
-
-		 double g_minX1 = boundingBox[0];
-		 double g_minX2 = boundingBox[2];
-		 double g_minX3 = boundingBox[4];
-
-		 double g_maxX1 = boundingBox[1];
-		 double g_maxX2 = boundingBox[3];
-		 double g_maxX3 = boundingBox[5];
-
-         //geometry
-
-         //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2));
-
-		 //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius));
-		 //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 
-		 //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 //GbObject3DPtr cylinders(new GbObject3DManager());
-		 //GbObject3DPtr cylinders1(new GbObjectGroup3D());
-		 
-
-		 
-		 
-		 GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-		 GbTriFaceMesh3DPtr cylinder;
-		 if (myid==0) UBLOG(logINFO, "Read geoFile:start");
-		 //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-		 cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT));
-		 GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-
-         double blockLength = blocknx[0] * dx;
-
-
-
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "Preprocess - start");
-         }
-
-         grid->setDeltaX(dx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-		 grid->setPeriodicX1(true);
-		 grid->setPeriodicX2(false);
-		 grid->setPeriodicX3(true);
-
-         
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-
-
-		 //BC Adapter
-		 //////////////////////////////////////////////////////////////////////////////
-		 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-		 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-
-
-		BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-		denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-		
-		double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius();
-		double cx1 = g_minX1;
-		double cx2 = 0.0; //cylinder->getX2Centroid();
-		double cx3 = 0.0; //cylinder->getX3Centroid();
-
-		GbCuboid3DPtr geoBottomWall(new GbCuboid3D(g_minX1-2, g_minX2-1, g_minX3-2, g_maxX1+2, g_minX2+1, g_maxX3+2)); // For FlowFocusingS2
-		if (myid==0) GbSystem3D::writeGeoObject(geoBottomWall.get(), pathname+"/geo/geoBottomWall", WbWriterVtkXmlASCII::getInstance());
-
-		GbCuboid3DPtr geoTopWall(new GbCuboid3D(g_minX1-2, g_maxX2-1, g_minX3-2, g_maxX1+2, g_maxX2+1, g_maxX3+2));  // For FlowFocusingS2
-		if (myid==0) GbSystem3D::writeGeoObject(geoTopWall.get(), pathname+"/geo/geoTopWall", WbWriterVtkXmlASCII::getInstance());
-
-
-
-		mu::Parser fctPhi_F1;
-		fctPhi_F1.SetExpr("phiH");
-		fctPhi_F1.DefineConst("phiH", phiH);
-
-		mu::Parser fctPhi_F2;
-		fctPhi_F2.SetExpr("phiL");
-		fctPhi_F2.DefineConst("phiL", phiL);
-		
-		mu::Parser fctvel_F2_init;
-		fctvel_F2_init.SetExpr("U");
-		fctvel_F2_init.DefineConst("U", 0);
-
-		//fct.SetExpr("U");
-		//fct.DefineConst("U", uLB);
-		//BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		
-		BCAdapterPtr velBCAdapterBottom(new VelocityBCAdapterMultiphase(false, false, true, fctF1, phiH, 0.0, endTime));
-		BCAdapterPtr velBCAdapterTop   (new VelocityBCAdapterMultiphase(true, false, false, fctF1  , phiL, 0.0, endTime));
-
-		
-
-		//BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		//BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime));
-		
-		velBCAdapterBottom->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmThermal()));
-		velBCAdapterTop->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmThermal()));
-
-		 
-		 
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-		 //mu::Parser fct;
-		 //fct.SetExpr("U");
-		 //fct.DefineConst("U", uLB);
-		 //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm()));
-
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //BC visitor
-		 BoundaryConditionsBlockVisitorMultiphase bcVisitor;
-		 //bcVisitor.addBC(noSlipBCAdapter);
-		 //bcVisitor.addBC(denBCAdapter);
-		 bcVisitor.addBC(velBCAdapterBottom);
-		 bcVisitor.addBC(velBCAdapterTop);
-
-
-
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         ppblocks->process(0);
-
-         //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID));
-		 
-	     D3Q27InteractorPtr bottomWallInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomWall, grid, velBCAdapterBottom, Interactor3D::SOLID));
-
-		 D3Q27InteractorPtr topWallInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopWall, grid, velBCAdapterTop, Interactor3D::SOLID));
-
-
-		 //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor1);
-		 //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC);
-		 //grid->accept(visitor2);
-
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-         InteractorsHelper intHelper(grid, metisVisitor);
-		 //intHelper.addInteractor(tubes);
-         intHelper.addInteractor(bottomWallInt);
-		 intHelper.addInteractor(topWallInt);
-		 //intHelper.addInteractor(inflowF2_2Int_init);
-         //intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-
-         kernel = LBMKernelPtr(new ThermalCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], ThermalCumulantLBMKernel::NORMAL));
-
-         kernel->setWithForcing(true);
-		 kernel->setForcingX1(0.0);
-		 kernel->setForcingX2(gr);
-		 kernel->setForcingX3(0.0);
-
-		 kernel->setPhiL(phiL);
-		 kernel->setPhiH(phiH);
-		 kernel->setPhaseFieldRelaxation(tauH);
-		 kernel->setMobility(mob);
-
-         BCProcessorPtr bcProc(new BCProcessor());
-         //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem);
-         
-		 grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-		 //inflowF2_1Int->initInteractor();
-		 //inflowF2_2Int->initInteractor();
-
-         intHelper.setBC();
-		 
-        
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-		 LBMReal x1c =  radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2;
-		 LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2;
-		 LBMReal x3c = (g_maxX3+g_minX3)/2;
-		 mu::Parser fct1;
-		 
-		 //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))");
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x1-x1c))/interfaceThickness)");
-		 
-		 fct1.SetExpr("0.5*(phiH + phiL)");
-		 //fct1.SetExpr("phiL");
-		 fct1.DefineConst("x1c", x1c);
-		 fct1.DefineConst("x2c", x2c);
-		 fct1.DefineConst("x3c", x3c);
-		 fct1.DefineConst("phiL", phiL);
-		 fct1.DefineConst("phiH", phiH);
-		 fct1.DefineConst("radius", radius);
-		 fct1.DefineConst("interfaceThickness", interfaceThickness);
-		 
-		 mu::Parser fct2;
-		 //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		 fct2.SetExpr("0.005*cos(2*3.14159265*x1/50.0)");
-		 /*fct2.DefineConst("R", 10.0);
-		 fct2.DefineConst("vx1", uLB);
-		 fct2.DefineConst("y0", 1.0);
-		 fct2.DefineConst("z0", 31.0);*/
-		 /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct2.DefineConst("uLB", uLB);
-		 fct2.DefineConst("x1c", x1c);
-		 fct2.DefineConst("x2c", x2c);
-		 fct2.DefineConst("x3c", x3c);
-		 fct2.DefineConst("radius", radius);
-		 fct2.DefineConst("interfaceThickness", interfaceThickness);*/
-
-
-		 InitDistributionsBlockVisitorThermal initVisitor(densityRatio, interfaceThickness, radius);
-         initVisitor.setPhi(fct1);
-         initVisitor.setRho(fct2);
-         grid->accept(initVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         //ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-         //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-
-
-
-         //boundary conditions grid
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-      }
-      else
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-         //bcVisitor.addBC(velBCAdapter);
-         //grid->accept(bcVisitor);
-
-         //set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-	  
-	  
-	  
-
-	  
-	  UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000));
-	  TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch));
-	  //inflowF2->addInteractor(inflowF2_1Int);
-	  //inflowF2->addInteractor(inflowF2_2Int);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-	if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/Multiphase/backup/Multiphase (Tube).cpp b/apps/cpu/Multiphase/backup/Multiphase (Tube).cpp
deleted file mode 100644
index 84de9055d3024be2409b12afed7540b38b057bc1..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase (Tube).cpp	
+++ /dev/null
@@ -1,404 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-      double          uLB = config.getDouble("uLB");
-	  double		  nuL = config.getDouble("nuL");
-	  double		  nuG = config.getDouble("nuG");
-	  double		  densityRatio = config.getDouble("densityRatio");
-	  double		  sigma = config.getDouble("sigma");
-	  int		      interfaceThickness = config.getInt("interfaceThickness");
-	  double		  radius = config.getDouble("radius");
-	  double		  theta = config.getDouble("contactAngle");
-
-
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      double          Re = config.getDouble("Re");
-      double          dx = config.getDouble("dx");
-      vector<double>  length = config.getVector<double>("length");
-      bool            logToFile = config.getBool("logToFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      bool            newStart = config.getValue<bool>("newStart");
-
-      double beta  = 12*sigma/interfaceThickness;
-	  double kappa = 1.5*interfaceThickness*sigma;
-	  
-	  CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      LBMReal dLB = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = (uLB*dLB) / Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
- 
-      
-      Grid3DPtr grid(new Grid3D(comm));
-      //grid->setPeriodicX1(true);
-	  //grid->setPeriodicX2(true);
-	  //grid->setPeriodicX3(true);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (newStart)
-      {
-
-         //bounding box
-         /*double g_minX1 = 0.0;
-         double g_minX2 = -length[1] / 2.0;
-         double g_minX3 = -length[2] / 2.0;
-
-         double g_maxX1 = length[0];
-         double g_maxX2 = length[1] / 2.0;
-         double g_maxX3 = length[2] / 2.0;*/
-
-		 double g_minX1 = 0.0;
-		 double g_minX2 = 0.0;
-		 double g_minX3 = 0.0;
-
-		 double g_maxX1 = length[0];
-		 double g_maxX2 = length[1];
-		 double g_maxX3 = length[2];
-
-         //geometry
-
-         GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-         GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance());
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-         double blockLength = blocknx[0] * dx;
-
-
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "Preprocess - start");
-         }
-
-         grid->setDeltaX(dx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-		 grid->setPeriodicX1(false);
-		 grid->setPeriodicX2(false);
-		 grid->setPeriodicX3(false);
-
-         
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - 1.0*dx, g_minX2 - dx, g_minX3 - dx, g_minX1, g_maxX2, g_maxX3 + dx));
-		 if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2, g_minX3 - dx, g_maxX1 + 2.0*dx, g_maxX2 + dx, g_maxX3 + dx));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-
-		 //inflow
-		 //GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-		 //if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-		 //outflow
-		 //GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-		 //if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-		 //BC Adapter
-		 //////////////////////////////////////////////////////////////////////////////
-		 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-		 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-
-
-		BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-		denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-		
-		 double r = boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius();
-		 double cx1 = g_minX1;
-		 double cx2 = cylinder->getX2Centroid();
-		 double cx3 = cylinder->getX3Centroid();
-
-		 mu::Parser fct;
-		 fct.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		 fct.DefineConst("x2Vmax", 0.0); //x2-Pos fuer vmax
-		 fct.DefineConst("x3Vmax", 0.0); //x3-Pos fuer vmax
-		 fct.DefineConst("R", r);
-		 fct.DefineConst("vx1", uLB);
-		 fct.DefineConst("x0", cx1);
-		 fct.DefineConst("y0", cx2);
-		 fct.DefineConst("z0", cx3);
-		 //fct.DefineConst("nue", nuLB);
-		 //fct.SetExpr("U");
-		 //fct.DefineConst("U", uLB);
-		 //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		 BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, endTime));
-		 velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-		 
-		 
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-		 //mu::Parser fct;
-		 //fct.SetExpr("U");
-		 //fct.DefineConst("U", uLB);
-		 //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-		 //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm()));
-
-
-		 //////////////////////////////////////////////////////////////////////////////////
-		 //BS visitor
-		 BoundaryConditionsBlockVisitorMultiphase bcVisitor;
-		 bcVisitor.addBC(noSlipBCAdapter);
-		 bcVisitor.addBC(denBCAdapter);
-		 bcVisitor.addBC(velBCAdapter);
-
-
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         ppblocks->process(0);
-
-         D3Q27InteractorPtr cylinderInt(new D3Q27Interactor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID));
-
-	     D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
-
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(cylinderInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-
-         kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL));
-
-         
-         BCProcessorPtr bcProc(new BCProcessor());
-         //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         intHelper.setBC();
-
-         
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-		 LBMReal x1c = (length[0]-1)/2;
-		 LBMReal x2c = (length[1]-1)/2;
-		 LBMReal x3c = (length[2]-1)/2;
-		 mu::Parser fct1;
-		 fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct1.DefineConst("x1c", x1c);
-		 fct1.DefineConst("x2c", x2c);
-		 fct1.DefineConst("x3c", x3c);
-		 fct1.DefineConst("radius", radius);
-		 fct1.DefineConst("interfaceThickness", interfaceThickness);
-		 
-		 mu::Parser fct2;
-		 fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct2.DefineConst("uLB", uLB);
-		 fct2.DefineConst("x1c", x1c);
-		 fct2.DefineConst("x2c", x2c);
-		 fct2.DefineConst("x3c", x3c);
-		 fct2.DefineConst("radius", radius);
-		 fct2.DefineConst("interfaceThickness", interfaceThickness);
-
-
-		 InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius);
-         initVisitor.setPhi(fct1);
-         //initVisitor.setVx1(fct2);
-         grid->accept(initVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         //ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-         //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //boundary conditions grid
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-      }
-      else
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-         //bcVisitor.addBC(velBCAdapter);
-         //grid->accept(bcVisitor);
-
-         //set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-	if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt b/apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt
deleted file mode 100644
index f0d6104808996b53dbd9ab63d9f761ba1ec70df4..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt	
+++ /dev/null
@@ -1,72 +0,0 @@
-pathname = d:/temp/Multiphase
-pathGeo = d:/Hesam/VirtualFluids/source/Applications/Multiphase
-geoFile = FlowFocusingS2_Small.ast
-#geoFile = T-Junction.ast
-numOfThreads = 4
-availMem = 10e9
-
-#Grid
-#length = 50 50 50
-#length = 21 6 13
-#boundingBox = x1min x1max x2min x2max x3min x3max [mm]
-#boundingBox = 0.5 219.5 -30 30 -30 30
-#boundingBox = -1 121 -30 30 -30 30
-#boundingBox = -32 128 -12 14 3 58   (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128)
-#blocknx = 10 13 11
-#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5   (FlowFocusing)
-#blocknx = 11 7 10
-#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL)
-#blocknx = 10 13 5
-#boundingBox = 1 179 -21 21 -21 59 (T-Junction)
-#blocknx = 8 7 8
-#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1)
-#blocknx = 6 13 7
-#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2)
-#blocknx = 6 13 7
-#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2)
-#blocknx = 5 9 10
-
-boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small)
-blocknx = 5 2 9
-
-#boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Droplet test)
-#blocknx = 10 10 10
-dx = 1.0
-refineLevel = 0
-
-#Simulation
-uLB = 0.001
-uF2 = 0.001
-Re = 10
-#nuL = 3.3e-3
-nuL = 1.0e-2
-nuG = 1.36e-2
-#nuL = 0.16666
-#nuG = 0.16666
-densityRatio = 1.0495
-#densityRatio = 10.0
-sigma = 7.4e-4
-interfaceThickness = 3
-#radius = 10.0  (Droplet test)
-#radius = -20.0   (FlowFocusingSS , FlowFocusingS)
-radius = -5.0   (FlowFocusingSq)
-#radius = 10.0   (FlowFocusing)
-#radius = 20.0   (T-Junction)
-contactAngle = 120.0
-gravity = 1.34e-5
-phi_L = 1.0
-phi_H = 0.0
-Phase-field Relaxation = 1.0
-Mobility = 0.05
-
-
-logToFile = false
-
-newStart = true
-restartStep = 100000
-
-cpStart = 100000
-cpStep = 100000
-
-outTime = 200
-endTime = 20000000
\ No newline at end of file
diff --git a/apps/cpu/Multiphase/backup/Multiphase.cfg b/apps/cpu/Multiphase/backup/Multiphase.cfg
deleted file mode 100644
index 3f19b6657a380c706a534577eab5cecdbe4fe637..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase.cfg
+++ /dev/null
@@ -1,115 +0,0 @@
-pathname = d:/temp/Multiphase
-pathGeo = d:/Hesam/VirtualFluids/source/Applications/Multiphase
-geoFile = JetBreakup2.ast
-#geoFile = T-Junction.ast
-numOfThreads = 4
-availMem = 10e9
-
-#Grid
-#length = 50 50 50
-#length = 21 6 13
-#boundingBox = x1min x1max x2min x2max x3min x3max [mm]
-#boundingBox = 0.5 219.5 -30 30 -30 30
-#boundingBox = -1 121 -30 30 -30 30
-#boundingBox = -32 128 -12 14 3 58   (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128)
-#blocknx = 10 13 11
-#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5   (FlowFocusing)
-#blocknx = 11 7 10
-#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL)
-#blocknx = 10 13 5
-#boundingBox = 1 179 -21 21 -21 59 (T-Junction)
-#blocknx = 8 7 8
-#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1)
-#blocknx = 6 13 7
-#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2)
-#blocknx = 6 13 7
-#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2)
-#blocknx = 5 9 10
-
-#boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small) (Periodic X2)
-#blocknx = 5 2 9
-
-
-#boundingBox = -24.5 180.5 -1.5 11.5 1.5 64.5 (FlowFocusingS2_Small) (Original was 180.5)
-#blocknx = 5 6 9
-
-#boundingBox = -1.0 121.0 580.0 629.0 -1.0 121.0 (Jet Breakup) (Original)
-#boundingBox = -50.0 50.0 -10.0 -60.0 -25.0 25.0 (Jet Breakup2) (Original)
-
-
-
-#boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Droplet test)
-#blocknx = 10 10 10
-
-
-
-# Grid
-
-boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Jet Breakup2) (Original)
-#blocknx = 50 50 50
-blocknx = 10 10 10
-dx = 1.0
-refineLevel = 0
-
-# Boundary Condition
-# Boundary type tags:  1: no-slip    2:velocity    3:outflow     4: slip        
-
-isEastBoundary = false
-isWestBoundary = false
-isNorthBoundary = false
-isSouthBoundary = false
-isTopBoundary = false
-isBottomBoundary = false
-
-eastBoundaryType = 4
-westBoundaryType = 4
-northBoundaryType = 4
-southBoundaryType = 4
-topBoundaryType = 0
-bottomBoundaryType = 0
-
-isPeriodicX1 = true
-isPeriodicX2 = true
-isPeriodicX3 = true
-
-
-
-
-# Initial profiles
-isInitialVelocity = false
-phaseFieldProfile = 0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)
-velocityProfile = 0.5*uLB*(phiH + phiL) - 0.5*uLB*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)
-
-
-#Simulation
-uLB = 0.05
-uF2 = 0.0025
-Re = 10
-#nuL = 1.0e-1
-#nuG = 1.04e-1
-nuL = 1.160e-2
-nuG = 1.16e-1
-densityRatio = 813
-sigma = 1.56e-1
-interfaceThickness = 5
-radius = 10.0  (Droplet test)
-#radius = -5.0   (FlowFocusing2D)
-#radius = 615.0   (Jet Breakup)
-contactAngle = 120.0
-gravity = 0.0
-phi_L = 0.0
-phi_H = 1.0
-Phase-field Relaxation = 0.55
-Mobility = 0.02
-
-
-logToFile = false
-
-newStart = true
-restartStep = 100000
-
-cpStart = 100000
-cpStep = 100000
-
-outTime = 100
-endTime = 200000
\ No newline at end of file
diff --git a/apps/cpu/Multiphase/backup/Multiphase.cpp b/apps/cpu/Multiphase/backup/Multiphase.cpp
deleted file mode 100644
index 8a7708c05f1af35028518aa0ca061fc81f3f3de6..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase.cpp
+++ /dev/null
@@ -1,755 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-	  string		  pathGeo = config.getString("pathGeo");
-	  string		  geoFile = config.getString("geoFile");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-	  vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //vector<double>  length = config.getVector<double>("length");
-	  double          uLB = config.getDouble("uLB");
-	  double          uF2 = config.getDouble("uF2");
-	  double		  nuL = config.getDouble("nuL");
-	  double		  nuG = config.getDouble("nuG");
-	  double		  densityRatio = config.getDouble("densityRatio");
-	  double		  sigma = config.getDouble("sigma");
-	  int		      interfaceThickness = config.getInt("interfaceThickness");
-	  double		  radius = config.getDouble("radius");
-	  double		  theta = config.getDouble("contactAngle");
-	  double		  gr = config.getDouble("gravity");
-	  double		  phiL = config.getDouble("phi_L");
-	  double		  phiH = config.getDouble("phi_H");
-	  double		  tauH = config.getDouble("Phase-field Relaxation");
-	  double		  mob = config.getDouble("Mobility");
-
-
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      double          Re = config.getDouble("Re");
-      double          dx = config.getDouble("dx");
-      bool            logToFile = config.getBool("logToFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      bool            newStart = config.getValue<bool>("newStart");
-
-
-	  bool            isEastBoundary   = config.getValue<bool>("isEastBoundary");
-	  bool            isWestBoundary   = config.getValue<bool>("isWestBoundary");
-	  bool            isNorthBoundary  = config.getValue<bool>("isNorthBoundary");
-	  bool            isSouthBoundary  = config.getValue<bool>("isSouthBoundary");
-	  bool            isTopBoundary    = config.getValue<bool>("isTopBoundary");
-	  bool            isBottomBoundary = config.getValue<bool>("isBottomBoundary");
-	  bool            isPeriodicX1     = config.getValue<bool>("isPeriodicX1");
-	  bool            isPeriodicX2     = config.getValue<bool>("isPeriodicX2");
-	  bool            isPeriodicX3     = config.getValue<bool>("isPeriodicX3");
-	  
-	  int             eastBoundaryType   = config.getInt("eastBoundaryType");
-	  int             westBoundaryType   = config.getInt("westBoundaryType");
-	  int             northBoundaryType  = config.getInt("northBoundaryType");
-	  int             southBoundaryType  = config.getInt("southBoundaryType");
-	  int             topBoundaryType    = config.getInt("topBoundaryType");
-	  int             bottomBoundaryType = config.getInt("bottomBoundaryType");
-
-	  bool            isInitialVelocity     = config.getValue<bool>("isInitialVelocity");
-	  string          phaseFieldProfile = config.getString("phaseFieldProfile");
-	  string          velocityProfile = config.getString("velocityProfile");
-
-	  double          p_in = config.getDouble("p_in");
-	  double          p_out = config.getDouble("p_out");
-
-
-
-      double beta  = 12*sigma/interfaceThickness;
-	  double kappa = 1.5*interfaceThickness*sigma;
-	  
-	  CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      LBMReal dLB; // = length[1] / dx;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = nuL; //(uLB*dLB) / Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
- 
-      
-      Grid3DPtr grid(new Grid3D(comm));
-      //grid->setPeriodicX1(true);
-	  //grid->setPeriodicX2(true);
-	  //grid->setPeriodicX3(true);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-	  
-
-	  
-      
-	  
-	  mu::Parser fctF1;
-	  //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))");
-	  fctF1.SetExpr("vy1");
-	  fctF1.DefineConst("vy1", -uLB);
-	  fctF1.DefineConst("R", 7.5);
-	  fctF1.DefineConst("x0", 60.0);
-	  fctF1.DefineConst("z0", 60.0);
-	  
-
-	  if (newStart)
-      {
-
-         //bounding box
-         /*double g_minX1 = 0.0;
-         double g_minX2 = -length[1] / 2.0;
-         double g_minX3 = -length[2] / 2.0;
-
-         double g_maxX1 = length[0];
-         double g_maxX2 = length[1] / 2.0;
-         double g_maxX3 = length[2] / 2.0;*/
-
-		 double g_minX1 = boundingBox[0];
-		 double g_minX2 = boundingBox[2];
-		 double g_minX3 = boundingBox[4];
-
-		 double g_maxX1 = boundingBox[1];
-		 double g_maxX2 = boundingBox[3];
-		 double g_maxX3 = boundingBox[5];
-
-         //geometry
-
-         //GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2, g_maxX3-2));
-
-		 //GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, radius));
-		 //GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 
-		 //GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-		 //GbObject3DPtr cylinders(new GbObject3DManager());
-		 //GbObject3DPtr cylinders1(new GbObjectGroup3D());
-		 
-
-		 
-		 
-		 GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-		 //GbTriFaceMesh3DPtr cylinder;
-		 //if (myid==0) UBLOG(logINFO, "Read geoFile:start");
-		 //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT));
-		 //GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
-		 
-		 /*GbObject3DPtr cylinder(new GbCuboid3D(g_minX1 + 2.0, g_minX2 + 2.0, g_minX3 + 2.0, g_maxX1 - 2.0, g_maxX2 - 2.0, g_maxX3 -2.0));
-		 if (myid == 0) GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/solidWall", WbWriterVtkXmlBinary::getInstance());*/
-
-		 
-		 double blockLength = blocknx[0] * dx;
-
-
-
-
-		 if (myid == 0)
-		 {
-			 UBLOG(logINFO, "uLb = " << uLB);
-			 UBLOG(logINFO, "rho = " << rhoLB);
-			 UBLOG(logINFO, "nuLb = " << nuLB);
-			 UBLOG(logINFO, "Re = " << Re);
-			 UBLOG(logINFO, "dx = " << dx);
-			 UBLOG(logINFO, "Preprocess - start");
-		 }
-
-		 grid->setDeltaX(dx);
-		 grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-		 grid->setPeriodicX1(isPeriodicX1);
-		 grid->setPeriodicX2(isPeriodicX2);
-		 grid->setPeriodicX3(isPeriodicX3);
-
-
-
-		 GenBlocksGridVisitor genBlocks(gridCube);
-		 grid->accept(genBlocks);
-
-		 WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-		 ppblocks->process(0);
-
-		 BoundaryConditionsBlockVisitorMultiphase bcVisitor;
-		 
-		 Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW));
-		 InteractorsHelper intHelper(grid, metisVisitor);
-
-
-		 
-		 		 
-		 
-		 if (isEastBoundary)
-		 {
-			 GbCuboid3DPtr geoEastBoundary(new GbCuboid3D(g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_minX3 - 1.0*dx, g_maxX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_maxX3 + 1.0*dx));
-			 if (myid==0) GbSystem3D::writeGeoObject(geoEastBoundary.get(), pathname+"/geo/geoEastBoundary", WbWriterVtkXmlASCII::getInstance());
-			 
-			 if (eastBoundaryType == 1)
-			 {
-				 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-				 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(noSlipBCAdapter);
-				 D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(eastBoundaryInt);
-
-			 }
-
-			 if (eastBoundaryType == 4)
-			 {
-				 BCAdapterPtr slipBCAdapter(new SlipBCAdapter());
-				 slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(slipBCAdapter);
-				 D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, slipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(eastBoundaryInt);
-			 }
-
-			 if (eastBoundaryType == 2)
-			 {
-				 BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1  , phiH, 0.0, endTime));
-				 velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(velBCAdapter);
-				 D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, velBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(eastBoundaryInt);
-			 }
-
-			 if (eastBoundaryType == 3)
-			 {
-				 BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-				 denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(denBCAdapter);
-				 D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, denBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(eastBoundaryInt);
-			 }
-			 if (eastBoundaryType == 5)
-			 {
-				 BCAdapterPtr denBCAdapter(new DensityBCAdapter(p_out));
-				 denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm()));
-				 bcVisitor.addBC(denBCAdapter);
-				 D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, denBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(eastBoundaryInt);
-			 }
-			
-		 }
-
-		 
-		 if (isWestBoundary)
-		 {
-			 GbCuboid3DPtr geoWestBoundary(new GbCuboid3D(g_minX1 + 1.0*dx, g_minX2 - 1.0*dx, g_minX3 - 1.0*dx, g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_maxX3 + 1.0*dx));
-			 if (myid==0) GbSystem3D::writeGeoObject(geoWestBoundary.get(), pathname+"/geo/geoWestBoundary", WbWriterVtkXmlASCII::getInstance());
-
-			 if (westBoundaryType == 1)
-			 {
-				 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-				 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(noSlipBCAdapter);
-				 D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(westBoundaryInt);
-
-			 }
-
-			 if (westBoundaryType == 4)
-			 {
-				 BCAdapterPtr slipBCAdapter(new SlipBCAdapter());
-				 slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(slipBCAdapter);
-				 D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, slipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(westBoundaryInt);
-			 }
-
-			 if (westBoundaryType == 2)
-			 {
-				 BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1  , phiH, 0.0, endTime));
-				 velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(velBCAdapter);
-				 D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, velBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(westBoundaryInt);
-			 }
-
-			 if (westBoundaryType == 3)
-			 {
-				 BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-				 denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(denBCAdapter);
-				 D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, denBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(westBoundaryInt);
-			 }
-			 if (westBoundaryType == 5)
-			 {
-				 BCAdapterPtr denBCAdapter(new DensityBCAdapter(p_in));
-				 denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm()));
-				 bcVisitor.addBC(denBCAdapter);
-				 D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, denBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(westBoundaryInt);
-			 }
-
-		 }		 
-
-		 
-		 if (isNorthBoundary)
-		 {
-			 GbCuboid3DPtr geoNorthBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_minX3 + 1.0*dx, g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_minX3 - 1.0*dx));
-			 if (myid==0) GbSystem3D::writeGeoObject(geoNorthBoundary.get(), pathname+"/geo/geoNorthBoundary", WbWriterVtkXmlASCII::getInstance());
-
-			 if (northBoundaryType == 1)
-			 {
-				 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-				 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(noSlipBCAdapter);
-				 D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(northBoundaryInt);
-
-			 }
-
-			 if (northBoundaryType == 4)
-			 {
-				 BCAdapterPtr slipBCAdapter(new SlipBCAdapter());
-				 slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(slipBCAdapter);
-				 D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, slipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(northBoundaryInt);
-			 }
-
-			 if (northBoundaryType == 2)
-			 {
-				 BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1  , phiH, 0.0, endTime));
-				 velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(velBCAdapter);
-				 D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, velBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(northBoundaryInt);
-			 }
-
-			 if (northBoundaryType == 3)
-			 {
-				 BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-				 denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(denBCAdapter);
-				 D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, denBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(northBoundaryInt);
-			 }
-
-		 }			 
-		 
-		 
-		 if (isSouthBoundary)
-		 {
-			 GbCuboid3DPtr geoSouthBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_maxX3 + 1.0*dx, g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_maxX3 - 1.0*dx));
-			 if (myid==0) GbSystem3D::writeGeoObject(geoSouthBoundary.get(), pathname+"/geo/geoSouthBoundary", WbWriterVtkXmlASCII::getInstance());
-
-			 if (southBoundaryType == 1)
-			 {
-				 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-				 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(noSlipBCAdapter);
-				 D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(southBoundaryInt);
-
-			 }
-
-			 if (southBoundaryType == 4)
-			 {
-				 BCAdapterPtr slipBCAdapter(new SlipBCAdapter());
-				 slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(slipBCAdapter);
-				 D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, slipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(southBoundaryInt);
-			 }
-
-			 if (southBoundaryType == 2)
-			 {
-				 BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1  , phiH, 0.0, endTime));
-				 velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(velBCAdapter);
-				 D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, velBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(southBoundaryInt);
-			 }
-
-			 if (southBoundaryType == 3)
-			 {
-				 BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-				 denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(denBCAdapter);
-				 D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, denBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(southBoundaryInt);
-			 }
-
-		 }
-
-
-
-
-		 if (isTopBoundary)
-		 {
-			 GbCuboid3DPtr geoTopBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_minX3 - 1.0*dx, g_maxX1 + 1.0*dx, g_maxX2 - 1.0*dx, g_maxX3 + 1.0*dx));
-			 if (myid==0) GbSystem3D::writeGeoObject(geoTopBoundary.get(), pathname+"/geo/geoTopBoundary", WbWriterVtkXmlASCII::getInstance());
-
-			 if (topBoundaryType == 1)
-			 {
-				 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-				 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(noSlipBCAdapter);
-				 D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(topBoundaryInt);
-
-			 }
-
-			 if (topBoundaryType == 4)
-			 {
-				 BCAdapterPtr slipBCAdapter(new SlipBCAdapter());
-				 slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(slipBCAdapter);
-				 D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, slipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(topBoundaryInt);
-			 }
-
-			 if (topBoundaryType == 2)
-			 {
-				 BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1  , phiH, 0.0, endTime));
-				 velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(velBCAdapter);
-				 D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, velBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(topBoundaryInt);
-			 }
-
-			 if (topBoundaryType == 3)
-			 {
-				 BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-				 denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(denBCAdapter);
-				 D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, denBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(topBoundaryInt);
-			 }
-
-		 }			 
-
-
-		 if (isBottomBoundary)
-		 {
-			 GbCuboid3DPtr geoBottomBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_minX2 + 1.0*dx, g_minX3 - 1.0*dx, g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_maxX3 + 1.0*dx));
-			 if (myid==0) GbSystem3D::writeGeoObject(geoBottomBoundary.get(), pathname+"/geo/geoBottomBoundary", WbWriterVtkXmlASCII::getInstance());
-
-			 if (bottomBoundaryType == 1)
-			 {
-				 BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-				 noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(noSlipBCAdapter);
-				 D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(bottomBoundaryInt);
-
-			 }
-
-			 if (bottomBoundaryType == 4)
-			 {
-				 BCAdapterPtr slipBCAdapter(new SlipBCAdapter());
-				 slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(slipBCAdapter);
-				 D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, slipBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(bottomBoundaryInt);
-			 }
-
-			 if (bottomBoundaryType == 2)
-			 {
-				 BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1  , phiH, 0.0, endTime));
-				 velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(velBCAdapter);
-				 D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, velBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(bottomBoundaryInt);
-			 }
-
-			 if (bottomBoundaryType == 3)
-			 {
-				 BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB));
-				 denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase()));
-				 bcVisitor.addBC(denBCAdapter);
-				 D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, denBCAdapter, Interactor3D::SOLID));
-				 intHelper.addInteractor(bottomBoundaryInt);
-			 }
-
-		 }
-
-
-
-
-
-         
-
-
-
-         intHelper.selectBlocks();
-
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-
-         kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL));
-
-         kernel->setWithForcing(true);
-		 kernel->setForcingX1(0.0);
-		 kernel->setForcingX2(gr);
-		 kernel->setForcingX3(0.0);
-
-		 kernel->setPhiL(phiL);
-		 kernel->setPhiH(phiH);
-		 kernel->setPhaseFieldRelaxation(tauH);
-		 kernel->setMobility(mob);
-
-         BCProcessorPtr bcProc(new BCProcessor());
-         //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem);
-         
-		 grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-		 //inflowF2_1Int->initInteractor();
-		 //inflowF2_2Int->initInteractor();
-
-         intHelper.setBC();
-		 
-        
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-		 LBMReal x1c =  (g_maxX1+g_minX1)/2; //radius; //g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2;
-		 LBMReal x2c = (g_maxX2+g_minX2)/2; //g_minX2 + 2;
-		 LBMReal x3c = (g_maxX3+g_minX3)/2;
-		 mu::Parser fct1;
-		 
-		 //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 //fct1.SetExpr("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))");
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL) - 0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct1.SetExpr(phaseFieldProfile);
-		 
-		 //fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)");
-		 //fct1.SetExpr("phiL");
-		 fct1.DefineConst("x1c", x1c);
-		 fct1.DefineConst("x2c", x2c);
-		 fct1.DefineConst("x3c", x3c);
-		 fct1.DefineConst("phiL", phiL);
-		 fct1.DefineConst("phiH", phiH);
-		 fct1.DefineConst("radius", radius);
-		 fct1.DefineConst("interfaceThickness", interfaceThickness);
-		 
-		 mu::Parser fct2;
-		 //fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-		 /*fct2.SetExpr("vx1");
-		 fct2.DefineConst("R", 10.0);
-		 fct2.DefineConst("vx1", uLB);
-		 fct2.DefineConst("y0", 1.0);
-		 fct2.DefineConst("z0", 31.0);*/
-		 //fct2.SetExpr("0.5*uLB*(phiH + phiL) - 0.5*uLB*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct2.SetExpr(velocityProfile);
-		 fct2.DefineConst("uLB", uLB);
-		 fct2.DefineConst("x1c", x1c);
-		 fct2.DefineConst("x2c", x2c);
-		 fct2.DefineConst("x3c", x3c);
-		 fct2.DefineConst("phiL", phiL);
-		 fct2.DefineConst("phiH", phiH);
-		 fct2.DefineConst("radius", radius);
-		 fct2.DefineConst("interfaceThickness", interfaceThickness);
-
-
-		 mu::Parser fct3;
-		 fct3.SetExpr("0.5*sigma*(phiH + phiL)/radius - 0.5*sigma/radius*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-		 fct3.DefineConst("sigma", sigma);
-		 fct3.DefineConst("x1c", x1c);
-		 fct3.DefineConst("x2c", x2c);
-		 fct3.DefineConst("x3c", x3c);
-		 fct3.DefineConst("phiL", phiL);
-		 fct3.DefineConst("phiH", phiH);
-		 fct3.DefineConst("radius", radius);
-		 fct3.DefineConst("interfaceThickness", interfaceThickness);
-
-		 InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius);
-         initVisitor.setPhi(fct1);
-		 if (isInitialVelocity) initVisitor.setVx1(fct2);
-		 //initVisitor.setRho(fct3);
-         grid->accept(initVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         //ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-         //ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-
-
-
-         //boundary conditions grid
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-      }
-      else
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "uLb = " << uLB);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nuLb = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-         //velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-         //bcVisitor.addBC(velBCAdapter);
-         //grid->accept(bcVisitor);
-
-         //set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-	  
-	  
-	  
-
-	  
-	  //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000));
-	  //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch));
-	  //inflowF2->addInteractor(inflowF2_1Int);
-	  //inflowF2->addInteractor(inflowF2_2Int);
-
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-	if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-}
-
diff --git a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp
deleted file mode 100644
index a0bfe97ba310a8858225b5c344f425121ddd2585..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp	
+++ /dev/null
@@ -1,1258 +0,0 @@
-#include "MultiphaseCumulantLBMKernel.h"
-#include "D3Q27System.h"
-#include "Interpolator.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <math.h>
-#include <omp.h>
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel()
-{
-   this->nx1 = 0;
-   this->nx2 = 0;
-   this->nx3 = 0;
-   this->parameter = NORMAL;
-   this->OxyyMxzz = 1.0;
-   this->compressible = false;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel(int nx1, int nx2, int nx3, Parameter p) 
-{
-   this->nx1 = nx1;
-   this->nx2 = nx2;
-   this->nx3 = nx3;
-   parameter = p;
-   this->compressible = false;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseCumulantLBMKernel::~MultiphaseCumulantLBMKernel(void)
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::init()
-{
-   //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0));
-   DistributionArray3DPtr f(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0));
-   DistributionArray3DPtr h(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); // For phase-field
-   PhaseFieldArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(nx1+2, nx2+2, nx3+2, 0.0));
-   dataSet->setFdistributions(f);
-   dataSet->setHdistributions(h); // For phase-field
-   dataSet->setPhaseField(divU);
-}
-//////////////////////////////////////////////////////////////////////////
-LBMKernelPtr MultiphaseCumulantLBMKernel::clone()
-{
-   LBMKernelPtr kernel(new MultiphaseCumulantLBMKernel(nx1, nx2, nx3, parameter));
-   boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->init();
-   
-   kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-   kernel->setDensityRatio(this->densityRatio);
-   kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-   kernel->setContactAngle(this->contactAngle);
-   kernel->setPhiL(this->phiL);
-   kernel->setPhiH(this->phiH);
-   kernel->setPhaseFieldRelaxation(this->tauH);
-   kernel->setMobility(this->mob);
-
-   kernel->setBCProcessor(bcProcessor->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   kernel->setDeltaT(deltaT);
-   switch (parameter)
-   {
-   case NORMAL:
-      boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 1.0;
-   	break;
-   case MAGIC:
-      boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 2.0 +(-collFactor);
-      break;
-   }
-   return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::calculate()
-{
-   timer.resetAndStart();
-   collideAll();
-   timer.stop();
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::collideAll()
-{
-   using namespace D3Q27System;
-
-   //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);
-
-   LBMReal forcingX1 = 0;
-   LBMReal forcingX2 = 0;
-   LBMReal forcingX3 = 0;
-   }*/
-   forcingX1 = 0.0;
-   forcingX2 = 0.0;
-   forcingX3 = 0.0;
-   /////////////////////////////////////
-
-   localDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   localDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-   nonLocalDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-   zeroDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-   
-
-   //phaseField = dataSet->getPhaseField();
-
-   BCArray3DPtr 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;
-
-
-//#pragma omp parallel num_threads(8)
-   {
-   //   int i = omp_get_thread_num();
-   //   printf_s("Hello from thread %d\n", i);
-   //}
-//#pragma omp for 
-
-   
-   CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-   CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr p1Field(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-   CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr p1Field_filtered(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-   CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
-   
-   //CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999);
-   
-
-   for(int x3 = 0; x3 <= maxX3; x3++)
-   {
-      for(int x2 = 0; x2 <= maxX2; x2++)
-      {
-         for(int x1 = 0; x1 <= maxX1; x1++)
-         {
-            if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-            {
-				int x1p = x1 + 1;
-				int x2p = x2 + 1;
-				int x3p = x3 + 1;
-
-				LBMReal mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3);
-				LBMReal mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); 
-				LBMReal mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3);
-				LBMReal mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3);
-				LBMReal mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3);
-				LBMReal mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3);
-				LBMReal mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3);
-				LBMReal mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3);
-				LBMReal mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3);
-				LBMReal mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3);
-				LBMReal mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3);
-				LBMReal mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3);
-				LBMReal mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3);
-				LBMReal mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3  );
-				LBMReal mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3  );
-				LBMReal mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p  );
-				LBMReal mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 );
-				LBMReal mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 );
-				LBMReal mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p );
-				LBMReal mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p );
-				LBMReal mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p );
-				LBMReal mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p );
-				LBMReal mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-				LBMReal mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p);
-				LBMReal mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p);
-				LBMReal mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p);
-				LBMReal mfbbb = (*this->zeroDistributionsH)(x1,x2,x3);
-				//LBMReal phase = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + 
-				//	h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];
-				//if (phase > 1.0) phase = 1.0e0;
-				//(*phaseField)(x1,x2,x3) = phase;
-				(*phaseField)(x1,x2,x3) = (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;
-				if ((*phaseField)(x1,x2,x3) > 1.0) (*phaseField)(x1,x2,x3)=1.0;
-
-				mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3);
-				mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); 
-				mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3);
-				mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3);
-				mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3);
-				mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3);
-				mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3);
-				mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3);
-				mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3);
-				mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3);
-				mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3);
-				mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3);
-				mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3);
-				mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3  );
-				mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3  );
-				mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p  );
-				mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 );
-				mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 );
-				mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p );
-				mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p );
-				mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p );
-				mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p );
-				mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-				mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p);
-				mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p);
-				mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p);
-				mfbbb = (*this->zeroDistributionsF)(x1,x2,x3);
-				
-				(*p1Field)(x1,x2,x3) = ((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);
-				(*p1Field_filtered)(x1,x2,x3) = (*p1Field)(x1,x2,x3);
-			}
-		 }
-	  }
-   }
-   
-   LBMReal sum1, AA;
-   for(int x3 = minX3; x3 < maxX3; x3++)
-   {
-	   for(int x2 = minX2; x2 < maxX2; x2++)
-	   {
-		   for(int x1 = minX1; x1 < maxX1; x1++)
-		   {
-			   if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-			   {
-				   int cnum = 0;
-				   sum1 = 0.0;
-				   for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-				   //for (int k = FSTARTDIR ; k <= 5 ; k++)
-				   {
-					   if(!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]))
-					   {
-						   //cnum++;
-						   sum1 += (*p1Field)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])*WEIGTH[k];
-
-					   }
-					   else
-					   {
-						   //cnum++;
-						   //sum1 += (*p1Field)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]])*WEIGTH[k];
-						   //std::cout << x1 << '  ' << x2  << '  ' << x3 << '  '<< k << std::endl;
-						   sum1 += ((*p1Field)(x1, x2, x3))*WEIGTH[k];
-					   }
-				   }
-				   //LBMReal av = (sum1+(*p1Field)(x1, x2, x3))/7.0;
-				   //(*p1Field_filtered)(x1, x2, x3) = av;
-				   
-				   /*LBMReal d0 = 2.0/9.0;
-				   LBMReal d1 = -1.0/9.6;
-				   LBMReal wf = 0.25;
-				   AA = 3*d0*(*p1Field)(x1, x2, x3) + d1*((*p1Field)(x1+1, x2, x3)+(*p1Field)(x1-1, x2, x3)) 
-					   + d1*((*p1Field)(x1, x2+1, x3)+(*p1Field)(x1, x2-1, x3)) + d1*((*p1Field)(x1, x2, x3+1)+(*p1Field)(x1, x2, x3-1));
-				   (*p1Field_filtered)(x1, x2, x3) = (*p1Field)(x1, x2, x3) - AA*wf;*/
-				   
-				   (*p1Field_filtered)(x1, x2, x3) = ((*p1Field)(x1, x2, x3))*WEIGTH[ZERO] + sum1;
-				   //(*p1Field)(x1, x2, x3) = ((*p1Field)(x1, x2, x3))*WEIGTH[ZERO] + sum1;
-
-			   }
-		   }
-	   }
-   }
-
-   LBMReal collFactorM;
-   LBMReal forcingTerm[D3Q27System::ENDF+1];
-   LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, m220, m202, m022, m211, m121, m112, m221, m212, m122, m222;
-   LBMReal k000, k100, k010, k001, k110, k101, k011, k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, k122, k222;
-   LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222;
-
-   LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, 
-	   k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022;
-
-   LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, 
-	   c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022;
-
-   LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10;
-   
-   w2  = 1.0;
-   w3  = 1.0;
-   w4  = 1.0;
-   w5  = 1.0;
-   w6  = 1.0;
-   w7  = 1.0;
-   w8  = 1.0;
-   w9  = 1.0;
-   w10 = 1.0;
-
-   for(int x3 = minX3; x3 < maxX3; x3++)
-   {
-      for(int x2 = minX2; x2 < maxX2; x2++)
-      {
-         for(int x1 = minX1; x1 < maxX1; x1++)
-         {
-            if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-            {
-               int x1p = x1 + 1;
-               int x2p = x2 + 1;
-               int x3p = x3 + 1;
-
-
-               //////////////////////////////////////////////////////////////////////////
-               //Read distributions and phase field
-               ////////////////////////////////////////////////////////////////////////////
-               //////////////////////////////////////////////////////////////////////////
-
-               //E   N  T
-               //c   c  c
-               //////////
-               //W   S  B
-               //a   a  a
-
-               //Rest ist b
-
-               //mfxyz
-               //a - negative
-               //b - null
-               //c - positive
-               
-               // a b c
-               //-1 0 1
-			   
-			   /*
-			   phi[ZERO] = (phaseField)(x1,x2,x3);
-			   phi[E  ] = (phaseField)(x1 + DX1[E  ], x2 + DX2[E  ], x3 + DX3[E  ]);
-			   phi[N  ] = (phaseField)(x1 + DX1[N  ], x2 + DX2[N  ], x3 + DX3[N  ]);
-			   phi[T  ] = (phaseField)(x1 + DX1[T  ], x2 + DX2[T  ], x3 + DX3[T  ]);
-			   phi[W  ] = (phaseField)(x1 + DX1[W  ], x2 + DX2[W  ], x3 + DX3[W  ]);
-			   phi[S  ] = (phaseField)(x1 + DX1[S  ], x2 + DX2[S  ], x3 + DX3[S  ]);
-			   phi[B  ] = (phaseField)(x1 + DX1[B  ], x2 + DX2[B  ], x3 + DX3[B  ]);
-			   phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]);
-			   phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]);
-			   phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]);
-			   phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]);
-			   phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]);
-			   phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]);
-			   phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]);
-			   phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]);
-			   phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]);
-			   phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]);
-			   phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]);
-			   phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]);
-			   phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]);
-			   phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]);
-			   phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]);
-			   phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]);
-			   phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]);
-			   phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]);
-			   phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]);
-			   phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]);
-			   */
-			   findNeighbors(phaseField, p1Field_filtered, x1, x2, x3);
-			   //findNeighbors(phaseField, p1Field, x1, x2, x3);
-
-			   LBMReal mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3);
-			   LBMReal mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); 
-			   LBMReal mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3);
-			   LBMReal mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3);
-			   LBMReal mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3);
-			   LBMReal mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3);
-			   LBMReal mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3);
-			   LBMReal mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3);
-			   LBMReal mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3);
-			   LBMReal mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3);
-			   LBMReal mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3);
-			   LBMReal mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3);
-			   LBMReal mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3);
-			   LBMReal mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3  );
-			   LBMReal mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3  );
-			   LBMReal mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p  );
-			   LBMReal mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 );
-			   LBMReal mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 );
-			   LBMReal mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p );
-			   LBMReal mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p );
-			   LBMReal mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p );
-			   LBMReal mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p );
-			   LBMReal mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-			   LBMReal mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p);
-			   LBMReal mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p);
-			   LBMReal mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-			   LBMReal mfbbb = (*this->zeroDistributionsF)(x1,x2,x3);
-
-			   g[E  ]  = mfcbb;
-			   g[N  ]  = mfbcb;
-			   g[T  ]  = mfbbc;
-			   g[NE ]  = mfccb;
-			   g[NW ]  = mfacb;
-			   g[TE ]  = mfcbc;
-			   g[TW ]  = mfabc;
-			   g[TN ]  = mfbcc;
-			   g[TS ]  = mfbac;
-			   g[TNE]  = mfccc;
-			   g[TNW]  = mfacc;
-			   g[TSE]  = mfcac;
-			   g[TSW]  = mfaac;
-			   g[W  ]  = mfabb;
-			   g[S  ]  = mfbab;
-			   g[B  ]  = mfbba;
-			   g[SW ]  = mfaab;
-			   g[SE ]  = mfcab;
-			   g[BW ]  = mfaba;
-			   g[BE ]  = mfcba;
-			   g[BS ]  = mfbaa;
-			   g[BN ]  = mfbca;
-			   g[BSW]  = mfaaa;
-			   g[BSE]  = mfcaa;
-			   g[BNW]  = mfaca;
-			   g[BNE]  = mfcca;
-			   g[ZERO] = mfbbb;
-
-			   LBMReal rhoH = 997.0;
-			   LBMReal rhoL = rhoH/densityRatio;
-
-			   //LBMReal rhoToPhi = (1.0 - 1.0/densityRatio);
-			   LBMReal rhoToPhi = (rhoH - rhoL)/(phiH - phiL);
-
-			   //collFactorM = phi[ZERO]*collFactorL + (1-phi[ZERO])*collFactorG;
-			   //collFactorM = phi[ZERO]*collFactorG + (1-phi[ZERO])*collFactorL;
-			   
-			   //LBMReal tauH = 1.0;
-			   LBMReal di = sqrt(8*kappa/beta);
-			   
-			   LBMReal dX1_phi = gradX1_phi();
-			   LBMReal dX2_phi = gradX2_phi();
-			   LBMReal dX3_phi = gradX3_phi();
-
-			   LBMReal dX1_pr1 = gradX1_pr1();
-			   LBMReal dX2_pr1 = gradX2_pr1();
-			   LBMReal dX3_pr1 = gradX3_pr1();
-			   
-			   LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-9;
-			   LBMReal normX1 = dX1_phi/denom;
-			   LBMReal normX2 = dX2_phi/denom;
-			   LBMReal normX3 = dX3_phi/denom;
-
-			   collFactorM = collFactorL + (collFactorL - collFactorG)*(phi[ZERO] - phiH)/(phiH - phiL);
-			   
-			   /*if ((phi[ZERO] > 0.1)||(phi[ZERO] < 0.9))
-			   {
-				   collFactorM*=(1.0-denom);
-			   }*/
-
-			   w1 = collFactorM;
-			   
-			   /*dX1_phi = -normX1*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di);
-			   dX2_phi = -normX2*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di);
-			   dX3_phi = -normX3*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di);*/
-
-			   //UbTupleDouble3 coords = grid->getNodeCoordinates(block, x1, x2, x3);
-			   /*Block3D bl = this->block();
-			   
-			   int wX1 = bl->getX1()  + x1;
-			   int wX2 = bl->getX2()  + x2;
-			   int wX3 = bl->getX3()  + x3;*/
-			   
-			   /*if (wX3 >= 30.0)
-			   {
-			   dX1_phi = 0.0;
-			   dX2_phi = 0.0;
-			   dX3_phi = 0.0;
-			   }*/
-
-
-			   LBMReal mu = 2*beta*phi[ZERO]*(phi[ZERO]-1)*(2*phi[ZERO]-1) - kappa*nabla2_phi();
-			   //mu = mu*10;
-			   
-			   //LBMReal rhoToPhi = (1.0/densityRatio - 1.0);
-			   
-			   			   
-
-			   //----------- Calculating Macroscopic Values -------------
-
-			   //LBMReal rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio;
-			   LBMReal rho = rhoH + rhoToPhi*(phi[ZERO] - phiH);
-			   if (phi[ZERO] > 1.0) rho = rhoH;
-			   //LBMReal rho = phi[ZERO]*1.0/densityRatio + (1.0 - phi[ZERO]);
-
-			   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();
-
-				   //LBMReal rho_m = 1.0/densityRatio;
-				   //LBMReal rho_m = (rhoL + rhoH)/2.0;
-				   LBMReal rho_m = rhoH;
-				   forcingX1 = forcingX1*(rho-rho_m);
-				   forcingX2 = forcingX2*(rho-rho_m);
-				   forcingX3 = forcingX3*(rho-rho_m);
-
-				   //ux += forcingX1*deltaT*0.5; // X
-				   //uy += forcingX2*deltaT*0.5; // Y
-				   //uz += forcingX3*deltaT*0.5; // Z
-			   }
-
-			   /*LBMReal p1 = (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;
-			   
-			   p1 = p1*rho*c1o3;*/
-			   
-			   LBMReal rho2 = rho*rho;
-
-			   /*LBMReal Sx = rhoToPhi*dX1_phi*p1/rho2;
-			   LBMReal Sy = rhoToPhi*dX2_phi*p1/rho2;
-			   LBMReal Sz = rhoToPhi*dX3_phi*p1/rho2;*/
-			   
-			   LBMReal Sx = -1.0*dX1_pr1/rho;
-			   LBMReal Sy = -1.0*dX2_pr1/rho;
-			   LBMReal Sz = -1.0*dX3_pr1/rho;
-
-			   
-			   /*if ((phi[ZERO] < 0.1)||(phi[ZERO] > 0.9))
-			   {
-			   Sx = 0.0;
-			   Sy = 0.0;
-			   Sz = 0.0;
-			   }*/
-
-			   LBMReal ux = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) +
-				   (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
-				   (mfcbb-mfabb))  + (mu*dX1_phi + forcingX1)/(2*rho) + 0.5*Sx;
-
-			   LBMReal uy = ((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) +
-				   (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) +
-				   (mfbcb-mfbab))  + (mu*dX2_phi + forcingX2)/(2*rho) + 0.5*Sy;
-
-			   LBMReal uz = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) +
-				   (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) +
-				   (mfbbc-mfbba))  + (mu*dX3_phi + forcingX3)/(2*rho) + 0.5*Sz;
-
-			   
-			   //+ (ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0;
-			   
-			   //vvx = 0.0; vvy = 0.0; vvz = 0.0;
-			   //--------------------------------------------------------
-			   
-
-
-
-			   LBMReal ux2 = ux*ux;
-			   LBMReal uy2 = uy*uy;
-			   LBMReal uz2 = uz*uz;
-			   LBMReal ux_uy = ux*uy;
-			   LBMReal ux_uz = ux*uz;
-			   LBMReal uy_uz = uy*uz;
-			   LBMReal ux_uy_uz = ux*uy*uz;
-
-
-/*
-			   //----------- Calculating Forcing Terms -------------
-			   LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi);
-			   for (int dir = STARTF; dir < (ENDF+1); dir++)
-			   {
-				   if (dir != ZERO)
-				   {
-					   LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0;
-					   forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + mu*dirGrad_phi*WEIGTH[dir] - 
-						   (forcingTerm1)*WEIGTH[dir];
-				   } 
-				   else
-				   {
-					   forcingTerm[ZERO] =  -(forcingTerm1)*WEIGTH[ZERO];
-				   }
-			   }
-			  //--------------------------------------------------------
-*/
-
-			   //----------- Calculating Forcing Terms * -------------
-			   //LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi);
-			   for (int dir = STARTF; dir <= (FENDDIR); dir++)
-			   {
-				   LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz;
-				   LBMReal velSq1 = velProd*velProd;
-				   //LBMReal gamma = WEIGTH[dir]*(1.0 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2));
-				   LBMReal gamma = WEIGTH[dir]*(3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2));
-				   
-				   //forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) + 
-					//   (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + 
-					//   (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);
-				   
-				   LBMReal fac1 = (gamma - WEIGTH[dir])*c1o3*rhoToPhi;
-				   LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0;
-				   //LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi;
-				   
-				   /*forcingTerm[dir] =  (- (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - 
-				   (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - 
-				   (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi)) + (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3);*/
-				   
-				   
-				   forcingTerm[dir] =  (-ux)*     (gamma*(mu*dX1_phi/rho + forcingX1/rho + Sx)) +
-					   				   (-uy)*     (gamma*(mu*dX2_phi/rho + forcingX2/rho + Sy)) +
-					   				   (-uz)*     (gamma*(mu*dX3_phi/rho + forcingX3/rho + Sz)) +
-									   (DX1[dir])*(gamma*(mu*dX1_phi/rho + forcingX1/rho + Sx)) +
-									   (DX2[dir])*(gamma*(mu*dX2_phi/rho + forcingX2/rho + Sy)) +
-									   (DX3[dir])*(gamma*(mu*dX3_phi/rho + forcingX3/rho + Sz));
-
-			   }
-
-			   LBMReal gamma = WEIGTH[ZERO]*(-1.5*(ux2+uy2+uz2));
-			   /*forcingTerm[ZERO] = -(ux)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - 
-			   (uy)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - 
-			   (uz)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/
-			   LBMReal fac1 = (gamma - WEIGTH[ZERO])*c1o3*rhoToPhi;
-			   forcingTerm[ZERO] = (-ux)*(gamma*(mu*dX1_phi/rho + forcingX1/rho + Sx)) +
-								   (-uy)*(gamma*(mu*dX2_phi/rho + forcingX2/rho + Sy)) +
-								   (-uz)*(gamma*(mu*dX3_phi/rho + forcingX3/rho + Sz));
-
-			   //--------------------------------------------------------
-
-			   g[E  ]  += 0.5*forcingTerm[E  ] ;
-			   g[N  ]  += 0.5*forcingTerm[N  ] ;
-			   g[T  ]  += 0.5*forcingTerm[T  ] ;
-			   g[NE ]  += 0.5*forcingTerm[NE ] ;
-			   g[NW ]  += 0.5*forcingTerm[NW ] ;
-			   g[TE ]  += 0.5*forcingTerm[TE ] ;
-			   g[TW ]  += 0.5*forcingTerm[TW ] ;
-			   g[TN ]  += 0.5*forcingTerm[TN ] ;
-			   g[TS ]  += 0.5*forcingTerm[TS ] ;
-			   g[TNE]  += 0.5*forcingTerm[TNE] ;
-			   g[TNW]  += 0.5*forcingTerm[TNW] ;
-			   g[TSE]  += 0.5*forcingTerm[TSE] ;
-			   g[TSW]  += 0.5*forcingTerm[TSW] ;
-			   g[W  ]  += 0.5*forcingTerm[W  ] ;
-			   g[S  ]  += 0.5*forcingTerm[S  ] ;
-			   g[B  ]  += 0.5*forcingTerm[B  ] ;
-			   g[SW ]  += 0.5*forcingTerm[SW ] ;
-			   g[SE ]  += 0.5*forcingTerm[SE ] ;
-			   g[BW ]  += 0.5*forcingTerm[BW ] ;
-			   g[BE ]  += 0.5*forcingTerm[BE ] ;
-			   g[BS ]  += 0.5*forcingTerm[BS ] ;
-			   g[BN ]  += 0.5*forcingTerm[BN ] ;
-			   g[BSW]  += 0.5*forcingTerm[BSW] ;
-			   g[BSE]  += 0.5*forcingTerm[BSE] ;
-			   g[BNW]  += 0.5*forcingTerm[BNW] ;
-			   g[BNE]  += 0.5*forcingTerm[BNE] ;
-			   g[ZERO] += 0.5*forcingTerm[ZERO];
-			   
-			   for (int dir = STARTF; dir < (ENDF+1); dir++)
-			   {
-				   LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz;
-				   LBMReal velSq1 = velProd*velProd;
-				   LBMReal gamma = WEIGTH[dir]*(3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2));
-				   LBMReal hEq, gEq;
-
-				   if (dir != ZERO)
-				   {
-
-					   //gEq = p1*WEIGTH[dir]/(rho*c1o3) + gamma;
-					   gEq = gamma;
-
-					   g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir];
-
-				   } 
-				   else
-				   {
-					   //gEq = p1*WEIGTH[dir]/(rho*c1o3) + gamma;
-					   gEq = pr1[ZERO]*WEIGTH1[dir] + gamma;
-
-					   g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir];
-				   }
-			   }
-
-
-
-			   (*this->localDistributionsF)(D3Q27System::ET_E,   x1,  x2,  x3) = g[D3Q27System::INV_E];
-			   (*this->localDistributionsF)(D3Q27System::ET_N,   x1,  x2,  x3) = g[D3Q27System::INV_N];
-			   (*this->localDistributionsF)(D3Q27System::ET_T,   x1,  x2,  x3) = g[D3Q27System::INV_T];
-			   (*this->localDistributionsF)(D3Q27System::ET_NE,  x1,  x2,  x3) = g[D3Q27System::INV_NE];
-			   (*this->localDistributionsF)(D3Q27System::ET_NW,  x1p, x2,  x3) = g[D3Q27System::INV_NW];
-			   (*this->localDistributionsF)(D3Q27System::ET_TE,  x1,  x2,  x3) = g[D3Q27System::INV_TE];
-			   (*this->localDistributionsF)(D3Q27System::ET_TW,  x1p, x2,  x3) = g[D3Q27System::INV_TW];
-			   (*this->localDistributionsF)(D3Q27System::ET_TN,  x1,  x2,  x3) = g[D3Q27System::INV_TN];
-			   (*this->localDistributionsF)(D3Q27System::ET_TS,  x1,  x2p, x3) = g[D3Q27System::INV_TS];
-			   (*this->localDistributionsF)(D3Q27System::ET_TNE, x1,  x2,  x3) = g[D3Q27System::INV_TNE];
-			   (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2,  x3) = g[D3Q27System::INV_TNW];
-			   (*this->localDistributionsF)(D3Q27System::ET_TSE, x1,  x2p, x3) = g[D3Q27System::INV_TSE];
-			   (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = g[D3Q27System::INV_TSW];
-
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_W,   x1p, x2,  x3 ) = g[D3Q27System::INV_W ];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_S,   x1,  x2p, x3 ) = g[D3Q27System::INV_S ];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_B,   x1,  x2,  x3p) = g[D3Q27System::INV_B ];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = g[D3Q27System::INV_SW];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = g[D3Q27System::INV_SE];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,  x1p, x2,  x3p) = g[D3Q27System::INV_BW];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,  x1,  x2,  x3p) = g[D3Q27System::INV_BE];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,  x1,  x2p, x3p) = g[D3Q27System::INV_BS];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,  x1,  x2,  x3p) = g[D3Q27System::INV_BN];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = g[D3Q27System::INV_BSW];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1,  x2p, x3p) = g[D3Q27System::INV_BSE];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2,  x3p) = g[D3Q27System::INV_BNW];
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1,  x2,  x3p) = g[D3Q27System::INV_BNE];
-
-			   (*this->zeroDistributionsF)(x1,x2,x3) = g[D3Q27System::ZERO];
-
-			   
-
-
-
-
-
-
-
-			   
-/////////////////////  P H A S E - F I E L D   S O L V E R /////////////////////////////////////////			   
-
-			   
-			   
-/////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
-
-			   h[E  ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3);
-			   h[N  ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); 
-			   h[T  ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3);
-			   h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3);
-			   h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3);
-			   h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3);
-			   h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3);
-			   h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3);
-			   h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3);
-			   h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3);
-			   h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3);
-			   h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3);
-			   h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-			   h[W  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3  );
-			   h[S  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3  );
-			   h[B  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p  );
-			   h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 );
-			   h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 );
-			   h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p );
-			   h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p );
-			   h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p );
-			   h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p );
-			   h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-			   h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p);
-			   h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p);
-			   h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-			   h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3);
-			   
-			   
-			   //LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-15;
-			   //LBMReal di = sqrt(8*kappa/beta);
-			   LBMReal tauH1 = 3.0*mob + 0.5;
-			   for (int dir = STARTF; dir < (ENDF+1); dir++)
-			   {
-				   LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz;
-				   LBMReal velSq1 = velProd*velProd;
-				   LBMReal hEq, gEq;
-				   
-				   if (dir != ZERO)
-				   {
-					   //LBMReal dirGrad_phi = DX1[dir]*dX1_phi+DX2[dir]*dX2_phi+DX3[dir]*dX3_phi;
-					   LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0;
-					   //LBMReal hSource = (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])*(dirGrad_phi)/denom; // + phi[ZERO]*(dxux + dyuy + dzuz);
-						   
-					   //LBMReal hSource =((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.1 : 1.0) * 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom;
-					   LBMReal hSource = 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom;
-					   hEq = phi[ZERO]*WEIGTH[dir]*(1.0 + 3.0*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)) + hSource*WEIGTH[dir];
-					   //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir];
-					   //h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5));  /// This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). 
-					   h[dir] = h[dir] - (h[dir] - hEq)/(tauH1); // + WEIGTH[dir]*phi[ZERO]*(dxux + dyuy + dzuz);
-					   //h[dir] = h[dir] - (h[dir] - hEq)/(tauH1);
-					   //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir];
-
-				   } 
-				   else
-				   {
-					   hEq = phi[ZERO]*WEIGTH[ZERO]*(1.0 - 1.5*(ux2+uy2+uz2));
-					   //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir];
-					   //h[dir] = hEq;
-					   h[ZERO] = h[ZERO] - (h[ZERO] - hEq)/(tauH1); // + WEIGTH[ZERO]*phi[ZERO]*(dxux + dyuy + dzuz);
-					   //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir];
-				   }
-			   }
-			   
-			   
-			   (*this->localDistributionsH)(D3Q27System::ET_E,   x1,  x2,  x3) = h[D3Q27System::INV_E];
-			   (*this->localDistributionsH)(D3Q27System::ET_N,   x1,  x2,  x3) = h[D3Q27System::INV_N];
-			   (*this->localDistributionsH)(D3Q27System::ET_T,   x1,  x2,  x3) = h[D3Q27System::INV_T];
-			   (*this->localDistributionsH)(D3Q27System::ET_NE,  x1,  x2,  x3) = h[D3Q27System::INV_NE];
-			   (*this->localDistributionsH)(D3Q27System::ET_NW,  x1p, x2,  x3) = h[D3Q27System::INV_NW];
-			   (*this->localDistributionsH)(D3Q27System::ET_TE,  x1,  x2,  x3) = h[D3Q27System::INV_TE];
-			   (*this->localDistributionsH)(D3Q27System::ET_TW,  x1p, x2,  x3) = h[D3Q27System::INV_TW];
-			   (*this->localDistributionsH)(D3Q27System::ET_TN,  x1,  x2,  x3) = h[D3Q27System::INV_TN];
-			   (*this->localDistributionsH)(D3Q27System::ET_TS,  x1,  x2p, x3) = h[D3Q27System::INV_TS];
-			   (*this->localDistributionsH)(D3Q27System::ET_TNE, x1,  x2,  x3) = h[D3Q27System::INV_TNE];
-			   (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2,  x3) = h[D3Q27System::INV_TNW];
-			   (*this->localDistributionsH)(D3Q27System::ET_TSE, x1,  x2p, x3) = h[D3Q27System::INV_TSE];
-			   (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW];
-			   
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_W,   x1p, x2,  x3 ) = h[D3Q27System::INV_W ];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_S,   x1,  x2p, x3 ) = h[D3Q27System::INV_S ];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_B,   x1,  x2,  x3p) = h[D3Q27System::INV_B ];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = h[D3Q27System::INV_SW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = h[D3Q27System::INV_SE];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,  x1p, x2,  x3p) = h[D3Q27System::INV_BW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,  x1,  x2,  x3p) = h[D3Q27System::INV_BE];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,  x1,  x2p, x3p) = h[D3Q27System::INV_BS];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,  x1,  x2,  x3p) = h[D3Q27System::INV_BN];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1,  x2p, x3p) = h[D3Q27System::INV_BSE];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2,  x3p) = h[D3Q27System::INV_BNW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1,  x2,  x3p) = h[D3Q27System::INV_BNE];
-			   
-			   (*this->zeroDistributionsH)(x1,x2,x3) = h[D3Q27System::ZERO];			   
-			   
-			   
-/////////////////////   END OF OLD BGK SOLVER ///////////////////////////////
-			   
-
-
-
-
-
-               //////////////////////////////////////////////////////////////////////////
-
-            }
-         }
-      }
-   }
-   dataSet->setPhaseField(divU);
-   
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-double MultiphaseCumulantLBMKernel::getCallculationTime()
-{
-   //return timer.getDuration();
-   return timer.getTotalTime();
-}
-//////////////////////////////////////////////////////////////////////////
-
-LBMReal MultiphaseCumulantLBMKernel::gradX1_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX1[k]*phi[k];
-	}
-	return 3.0*sum;
-}
-
-LBMReal MultiphaseCumulantLBMKernel::gradX2_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX2[k]*phi[k];
-	}
-	return 3.0*sum;
-}
-
-LBMReal MultiphaseCumulantLBMKernel::gradX3_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX3[k]*phi[k];
-	}
-	return 3.0*sum;
-}
-
-
-
-LBMReal MultiphaseCumulantLBMKernel::gradX1_pr1()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX1[k]*pr1[k];
-	}
-	return 3.0*sum;
-	//return 0.5*(pr1[E] - pr1[W]);
-}
-
-LBMReal MultiphaseCumulantLBMKernel::gradX2_pr1()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX2[k]*pr1[k];
-	}
-	return 3.0*sum;
-	//return 0.5*(pr1[N] - pr1[S]);
-}
-
-LBMReal MultiphaseCumulantLBMKernel::gradX3_pr1()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX3[k]*pr1[k];
-	}
-	return 3.0*sum;
-	//return 0.5*(pr1[T] - pr1[B]);
-}
-
-
-
-LBMReal MultiphaseCumulantLBMKernel::nabla2_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*(phi[k] - phi[ZERO]);
-	}
-	return 6.0*sum;
-}
-///// Commnets neeeded ////////
-
-void MultiphaseCumulantLBMKernel::computePhasefield()
-{
-	using namespace D3Q27System;
-	DistributionArray3DPtr distributionsH = dataSet->getHdistributions();
-
-	//const int bcArrayMaxX1 = (int)distributionsH->getNX1();
-	//const int bcArrayMaxX2 = (int)distributionsH->getNX2();
-	//const int bcArrayMaxX3 = (int)distributionsH->getNX3();
-
-	int minX1 = ghostLayerWidth;
-	int minX2 = ghostLayerWidth;
-	int minX3 = ghostLayerWidth;
-	int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-	int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-	int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-	//------------- Computing the phase-field ------------------
-	for(int x3 = minX3; x3 < maxX3; x3++)
-	{
-		for(int x2 = minX2; x2 < maxX2; x2++)
-		{
-			for(int x1 = minX1; x1 < maxX1; x1++)
-			{
-				//if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-				{
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					h[E  ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3);
-					h[N  ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); 
-					h[T  ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3);
-					h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3);
-					h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3);
-					h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3);
-					h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3);
-					h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3);
-					h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3);
-					h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3);
-					h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3);
-					h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3);
-					h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-					h[W  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3  );
-					h[S  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3  );
-					h[B  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p  );
-					h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 );
-					h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 );
-					h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p );
-					h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p );
-					h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p );
-					h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p );
-					h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-					h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p);
-					h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p);
-					h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-					h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3);
-
-					/*(*this->phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + 
-						h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];*/
-
-				}
-			}
-		}
-	}
-	//----------------------------------------------------------
-	
-/*
-	/////// Filling ghost nodes for FD computations //////////
-	for(int x1 = minX1; x1 < maxX1; x1++)
-	{
-		for(int x2 = minX2; x2 < maxX2; x2++)
-		{
-			int x3 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1);
-			x3 = maxX3;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3);
-		}
-	}
-	for(int x2 = minX2; x2 < maxX2; x2++)
-	{
-		for(int x3 = minX3; x3 < maxX3; x3++)
-		{
-			int x1 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3);
-			x1 = maxX1;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3);
-		}
-	}
-	for(int x1 = minX1; x1 < maxX1; x1++)
-	{
-		for(int x3 = minX3; x3 < maxX3; x3++)
-		{
-			int x2 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3);
-			x2 = maxX2;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3);
-		}
-	}
-	(*phaseField)(0, 0,     0    ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1);
-	(*phaseField)(0, 0,     maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3  );
-	(*phaseField)(0, maxX2, 0    ) = (*phaseField)(maxX1-1, minX2, maxX3-1  );
-	(*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3    );
-
-	(*phaseField)(maxX1, 0,     0    ) = (*phaseField)(minX1, maxX2-1, maxX3-1);
-	(*phaseField)(maxX1, 0,     maxX3) = (*phaseField)(minX1, maxX2-1, minX3  );
-	(*phaseField)(maxX1, maxX2, 0    ) = (*phaseField)(minX1, minX2, maxX3-1  );
-	(*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3    );
-
-	///////////////////////////////////////////////////////// 
-*/
-}
-
-void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf, int x1, int x2, int x3)
-{
-	using namespace D3Q27System;
-	
-	BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray();
-
-	phi[ZERO] = (*ph)(x1,x2,x3);
-	pr1[ZERO] = (*pf)(x1,x2,x3);
-
-	LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*PI/180);
-	LBMReal a1 = 1 + a;
-	
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]))
-		{
-			phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-			pr1[k] = (*pf)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		} 
-		else
-		{
-			/*
-			if (phi[ZERO] < 1e-2)
-			{
-				phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]);
-			}
-			else
-			{
-				LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]);
-				phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f;
-			}
-			*/
-			
-			phi[k] = (*ph)(x1, x2, x3);
-			pr1[k] = (*pf)(x1, x2, x3);
-
-			//if (bcArray->isSolid(x1 + DX1[k], x2, x3))
-			//{
-			//	phi[k] = (*ph)(x1, x2, x3);
-			//	//if (!bcArray->isSolid(x1 , x2 + DX2[k], x3 + DX3[k]))
-			//	//{
-			//	//	//phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]);
-			//	//	LBMReal phi_f = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]);
-			//	//	phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f;
-			//	//} 
-			//	//else
-			//	//{
-			//	//	phi[k] = (*ph)(x1, x2, x3);
-			//	//}
-			//}
-			//
-			//if (bcArray->isSolid(x1 , x2 + DX2[k], x3))
-			//{
-			//	phi[k] = (*ph)(x1, x2, x3);
-			//	//if (!bcArray->isSolid(x1 + DX1[k], x2 , x3 + DX3[k]))
-			//	//{
-			//	//	//phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]);
-			//	//	LBMReal phi_f = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]);
-			//	//	phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f;
-			//	//} 
-			//	//else
-			//	//{
-			//	//	phi[k] = (*ph)(x1, x2, x3);
-			//	//}
-			//}
-
-
-			//if (bcArray->isSolid(x1 , x2, x3+ DX3[k]))
-			//{
-			//	if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3))
-			//	{
-			//		//phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3);
-			//		LBMReal phi_f = (*ph)(x1 + DX1[k], x2 + DX2[k], x3);
-			//		phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f;
-			//	} 
-			//	else
-			//	{
-			//		phi[k] = (*ph)(x1, x2, x3);
-			//	}
-			//}
-
-
-			/*if (bcArray->isSolid(x1 + DX1[k], x2, x3)) phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]);
-			if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]);
-			if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 );*/
-
-			/*if (phi[ZERO] < 0.00001)
-			{
-			phi[k] = 0.0;
-			} 
-			else
-			{
-			phi[k] = 0.5;
-			}*/
-			
-			//phi[k] = 0.5;
-			//phi[k] = (*ph)(x1, x2, x3);
-			//phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]);
-			
-			
-		}
-	}
-
-	/*
-	phi[E  ] = (*ph)(x1 + DX1[E  ], x2 + DX2[E  ], x3 + DX3[E  ]);
-	phi[N  ] = (*ph)(x1 + DX1[N  ], x2 + DX2[N  ], x3 + DX3[N  ]);
-	phi[T  ] = (*ph)(x1 + DX1[T  ], x2 + DX2[T  ], x3 + DX3[T  ]);
-	phi[W  ] = (*ph)(x1 + DX1[W  ], x2 + DX2[W  ], x3 + DX3[W  ]);
-	phi[S  ] = (*ph)(x1 + DX1[S  ], x2 + DX2[S  ], x3 + DX3[S  ]);
-	phi[B  ] = (*ph)(x1 + DX1[B  ], x2 + DX2[B  ], x3 + DX3[B  ]);
-	phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]);
-	phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]);
-	phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]);
-	phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]);
-	phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]);
-	phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]);
-	phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]);
-	phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]);
-	phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]);
-	phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]);
-	phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]);
-	phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]);
-	phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]);
-	phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]);
-	phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]);
-	phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]);
-	phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]);
-	phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]);
-	phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]);
-	phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]);
-	*/
-}
-
-void MultiphaseCumulantLBMKernel::pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/)
-{
-	using namespace D3Q27System;
-	
-	BCArray3DPtr 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;
-
-	for(int x3 = 0; x3 <= maxX3; x3++)
-	{
-		for(int x2 = 0; x2 <= maxX2; x2++)
-		{
-			for(int x1 = 0; x1 <= maxX1; x1++)
-			{
-				if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-				{
-					int cnum = 0;
-					LBMReal sum = 0.0;
-					for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-					{
-						//if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]))
-						{
-							cnum++;
-							sum += (*pf)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])*WEIGTH[k];
-							 
-						}
-					}
-					LBMReal av = sum/cnum;
-					(*pf_filtered)(x1, x2, x3) = ((*pf)(x1, x2, x3))*WEIGTH[ZERO] + sum;
-
-				}
-			}
-		}
-	}
-
-
-	
-	
-}
-
-
-
-void MultiphaseCumulantLBMKernel::swapDistributions()
-{
-   dataSet->getFdistributions()->swap();
-   dataSet->getHdistributions()->swap();
-   //computePhasefield();
-}
\ No newline at end of file
diff --git a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final from Phoenix).cpp b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final from Phoenix).cpp
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp
deleted file mode 100644
index c0dcd4d0cf26a41da3ff36195d7d6efeabfe016d..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp	
+++ /dev/null
@@ -1,2700 +0,0 @@
-#include "MultiphaseCumulantLBMKernel.h"
-#include "D3Q27System.h"
-#include "Interpolator.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <math.h>
-#include <omp.h>
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel()
-{
-   this->nx1 = 0;
-   this->nx2 = 0;
-   this->nx3 = 0;
-   this->parameter = NORMAL;
-   this->OxyyMxzz = 1.0;
-   this->compressible = false;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel(int nx1, int nx2, int nx3, Parameter p) 
-{
-   this->nx1 = nx1;
-   this->nx2 = nx2;
-   this->nx3 = nx3;
-   parameter = p;
-   this->compressible = false;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseCumulantLBMKernel::~MultiphaseCumulantLBMKernel(void)
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::init()
-{
-   //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0));
-   DistributionArray3DPtr f(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0));
-   DistributionArray3DPtr h(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); // For phase-field
-   PhaseFieldArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(nx1+2, nx2+2, nx3+2, 0.0));
-   dataSet->setFdistributions(f);
-   dataSet->setHdistributions(h); // For phase-field
-   dataSet->setPhaseField(divU);
-}
-//////////////////////////////////////////////////////////////////////////
-LBMKernelPtr MultiphaseCumulantLBMKernel::clone()
-{
-   LBMKernelPtr kernel(new MultiphaseCumulantLBMKernel(nx1, nx2, nx3, parameter));
-   boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->init();
-   
-   kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-   kernel->setDensityRatio(this->densityRatio);
-   kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-   kernel->setContactAngle(this->contactAngle);
-   kernel->setPhiL(this->phiL);
-   kernel->setPhiH(this->phiH);
-   kernel->setPhaseFieldRelaxation(this->tauH);
-   kernel->setMobility(this->mob);
-
-   kernel->setBCProcessor(bcProcessor->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   kernel->setDeltaT(deltaT);
-   switch (parameter)
-   {
-   case NORMAL:
-      boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 1.0;
-   	break;
-   case MAGIC:
-      boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 2.0 +(-collFactor);
-      break;
-   }
-   return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::calculate()
-{
-   timer.resetAndStart();
-   collideAll();
-   timer.stop();
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::collideAll()
-{
-   using namespace D3Q27System;
-
-   //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);
-
-   LBMReal forcingX1 = 0;
-   LBMReal forcingX2 = 0;
-   LBMReal forcingX3 = 0;
-   }*/
-   forcingX1 = 0.0;
-   forcingX2 = 0.0;
-   forcingX3 = 0.0;
-   /////////////////////////////////////
-
-   localDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   localDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-   nonLocalDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-   zeroDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-   
-
-   //phaseField = dataSet->getPhaseField();
-
-   BCArray3DPtr 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;
-
-
-//#pragma omp parallel num_threads(8)
-   {
-   //   int i = omp_get_thread_num();
-   //   printf_s("Hello from thread %d\n", i);
-   //}
-//#pragma omp for 
-
-   
-   CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-   CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
-   
-   //CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999);
-   
-
-   for(int x3 = 0; x3 <= maxX3; x3++)
-   {
-      for(int x2 = 0; x2 <= maxX2; x2++)
-      {
-         for(int x1 = 0; x1 <= maxX1; x1++)
-         {
-            if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-            {
-				int x1p = x1 + 1;
-				int x2p = x2 + 1;
-				int x3p = x3 + 1;
-
-				LBMReal mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3);
-				LBMReal mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); 
-				LBMReal mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3);
-				LBMReal mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3);
-				LBMReal mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3);
-				LBMReal mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3);
-				LBMReal mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3);
-				LBMReal mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3);
-				LBMReal mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3);
-				LBMReal mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3);
-				LBMReal mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3);
-				LBMReal mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3);
-				LBMReal mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3);
-				LBMReal mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3  );
-				LBMReal mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3  );
-				LBMReal mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p  );
-				LBMReal mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 );
-				LBMReal mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 );
-				LBMReal mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p );
-				LBMReal mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p );
-				LBMReal mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p );
-				LBMReal mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p );
-				LBMReal mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-				LBMReal mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p);
-				LBMReal mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p);
-				LBMReal mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-				LBMReal mfbbb = (*this->zeroDistributionsH)(x1,x2,x3);
-				//LBMReal phase = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + 
-				//	h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];
-				//if (phase > 1.0) phase = 1.0e0;
-				//(*phaseField)(x1,x2,x3) = phase;
-				(*phaseField)(x1,x2,x3) = (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 collFactorM;
-   LBMReal forcingTerm[D3Q27System::ENDF+1];
-   LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, m220, m202, m022, m211, m121, m112, m221, m212, m122, m222;
-   LBMReal k000, k100, k010, k001, k110, k101, k011, k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, k122, k222;
-   LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222;
-
-   LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, 
-	   k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022;
-
-   LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, 
-	   c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022;
-
-   LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10;
-   
-   w2  = 1.0;
-   w3  = 1.0;
-   w4  = 1.0;
-   w5  = 1.0;
-   w6  = 1.0;
-   w7  = 1.0;
-   w8  = 1.0;
-   w9  = 1.0;
-   w10 = 1.0;
-
-   for(int x3 = minX3; x3 < maxX3; x3++)
-   {
-      for(int x2 = minX2; x2 < maxX2; x2++)
-      {
-         for(int x1 = minX1; x1 < maxX1; x1++)
-         {
-            if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-            {
-               int x1p = x1 + 1;
-               int x2p = x2 + 1;
-               int x3p = x3 + 1;
-
-
-               //////////////////////////////////////////////////////////////////////////
-               //Read distributions and phase field
-               ////////////////////////////////////////////////////////////////////////////
-               //////////////////////////////////////////////////////////////////////////
-
-               //E   N  T
-               //c   c  c
-               //////////
-               //W   S  B
-               //a   a  a
-
-               //Rest ist b
-
-               //mfxyz
-               //a - negative
-               //b - null
-               //c - positive
-               
-               // a b c
-               //-1 0 1
-			   
-			   /*
-			   phi[ZERO] = (phaseField)(x1,x2,x3);
-			   phi[E  ] = (phaseField)(x1 + DX1[E  ], x2 + DX2[E  ], x3 + DX3[E  ]);
-			   phi[N  ] = (phaseField)(x1 + DX1[N  ], x2 + DX2[N  ], x3 + DX3[N  ]);
-			   phi[T  ] = (phaseField)(x1 + DX1[T  ], x2 + DX2[T  ], x3 + DX3[T  ]);
-			   phi[W  ] = (phaseField)(x1 + DX1[W  ], x2 + DX2[W  ], x3 + DX3[W  ]);
-			   phi[S  ] = (phaseField)(x1 + DX1[S  ], x2 + DX2[S  ], x3 + DX3[S  ]);
-			   phi[B  ] = (phaseField)(x1 + DX1[B  ], x2 + DX2[B  ], x3 + DX3[B  ]);
-			   phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]);
-			   phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]);
-			   phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]);
-			   phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]);
-			   phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]);
-			   phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]);
-			   phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]);
-			   phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]);
-			   phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]);
-			   phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]);
-			   phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]);
-			   phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]);
-			   phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]);
-			   phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]);
-			   phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]);
-			   phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]);
-			   phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]);
-			   phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]);
-			   phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]);
-			   phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]);
-			   */
-			   findNeighbors(phaseField, x1, x2, x3);
-
-			   LBMReal mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3);
-			   LBMReal mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); 
-			   LBMReal mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3);
-			   LBMReal mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3);
-			   LBMReal mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3);
-			   LBMReal mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3);
-			   LBMReal mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3);
-			   LBMReal mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3);
-			   LBMReal mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3);
-			   LBMReal mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3);
-			   LBMReal mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3);
-			   LBMReal mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3);
-			   LBMReal mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3);
-			   LBMReal mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3  );
-			   LBMReal mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3  );
-			   LBMReal mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p  );
-			   LBMReal mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 );
-			   LBMReal mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 );
-			   LBMReal mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p );
-			   LBMReal mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p );
-			   LBMReal mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p );
-			   LBMReal mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p );
-			   LBMReal mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-			   LBMReal mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p);
-			   LBMReal mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p);
-			   LBMReal mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-			   LBMReal mfbbb = (*this->zeroDistributionsF)(x1,x2,x3);
-
-			   
-
-			   LBMReal rhoH = 1.0;
-			   LBMReal rhoL = 1.0/densityRatio;
-
-			   //LBMReal rhoToPhi = (1.0 - 1.0/densityRatio);
-			   LBMReal rhoToPhi = (rhoH - rhoL)/(phiH - phiL);
-
-			   //collFactorM = phi[ZERO]*collFactorL + (1-phi[ZERO])*collFactorG;
-			   //collFactorM = phi[ZERO]*collFactorG + (1-phi[ZERO])*collFactorL;
-			   
-			   //LBMReal tauH = 1.0;
-			   LBMReal di = sqrt(8*kappa/beta);
-			   
-			   LBMReal dX1_phi = gradX1_phi();
-			   LBMReal dX2_phi = gradX2_phi();
-			   LBMReal dX3_phi = gradX3_phi();
-			   
-			   LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-9;
-			   LBMReal normX1 = dX1_phi/denom;
-			   LBMReal normX2 = dX2_phi/denom;
-			   LBMReal normX3 = dX3_phi/denom;
-
-			   collFactorM = collFactorL + (collFactorL - collFactorG)*(phi[ZERO] - phiH)/(phiH - phiL);
-			   
-			   /*if ((phi[ZERO] > 0.1)||(phi[ZERO] < 0.9))
-			   {
-				   collFactorM*=(1.0-denom);
-			   }*/
-
-			   w1 = collFactorM;
-			   
-			   /*dX1_phi = -normX1*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di);
-			   dX2_phi = -normX2*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di);
-			   dX3_phi = -normX3*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di);*/
-
-			   //UbTupleDouble3 coords = grid->getNodeCoordinates(block, x1, x2, x3);
-			   /*Block3D bl = this->block();
-			   
-			   int wX1 = bl->getX1()  + x1;
-			   int wX2 = bl->getX2()  + x2;
-			   int wX3 = bl->getX3()  + x3;*/
-			   
-			   /*if (wX3 >= 30.0)
-			   {
-			   dX1_phi = 0.0;
-			   dX2_phi = 0.0;
-			   dX3_phi = 0.0;
-			   }*/
-
-
-			   LBMReal mu = 2*beta*phi[ZERO]*(phi[ZERO]-1)*(2*phi[ZERO]-1) - kappa*nabla2_phi();
-			   
-			   //LBMReal rhoToPhi = (1.0/densityRatio - 1.0);
-			   
-			   			   
-
-			   //----------- Calculating Macroscopic Values -------------
-
-			   //LBMReal rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio;
-			   LBMReal rho = rhoH + rhoToPhi*(phi[ZERO] - phiH);
-			   //LBMReal rho = phi[ZERO]*1.0/densityRatio + (1.0 - phi[ZERO]);
-
-			   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();
-
-				   LBMReal rho_m = 1.0/densityRatio;
-				   forcingX1 = forcingX1*(rho-rho_m);
-				   forcingX2 = forcingX2*(rho-rho_m);
-				   forcingX3 = forcingX3*(rho-rho_m);
-
-				   //ux += forcingX1*deltaT*0.5; // X
-				   //uy += forcingX2*deltaT*0.5; // Y
-				   //uz += forcingX3*deltaT*0.5; // Z
-			   }
-
-			   LBMReal ux = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) +
-				   (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
-				   (mfcbb-mfabb)) / (rho*c1o3) + (mu*dX1_phi + forcingX1)/(2*rho);
-
-			   LBMReal uy = ((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) +
-				   (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) +
-				   (mfbcb-mfbab)) / (rho*c1o3) + (mu*dX2_phi + forcingX2)/(2*rho);
-
-			   LBMReal uz = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) +
-				   (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) +
-				   (mfbbc-mfbba)) / (rho*c1o3) + (mu*dX3_phi + forcingX3)/(2*rho);
-
-			   LBMReal p1 = (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 +
-			   (ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0;
-			   
-			   //vvx = 0.0; vvy = 0.0; vvz = 0.0;
-			   //--------------------------------------------------------
-			   
-
-
-
-			   LBMReal ux2 = ux*ux;
-			   LBMReal uy2 = uy*uy;
-			   LBMReal uz2 = uz*uz;
-			   LBMReal ux_uy = ux*uy;
-			   LBMReal ux_uz = ux*uz;
-			   LBMReal uy_uz = uy*uz;
-			   LBMReal ux_uy_uz = ux*uy*uz;
-
-
-/*
-			   //----------- Calculating Forcing Terms -------------
-			   LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi);
-			   for (int dir = STARTF; dir < (ENDF+1); dir++)
-			   {
-				   if (dir != ZERO)
-				   {
-					   LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0;
-					   forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + mu*dirGrad_phi*WEIGTH[dir] - 
-						   (forcingTerm1)*WEIGTH[dir];
-				   } 
-				   else
-				   {
-					   forcingTerm[ZERO] =  -(forcingTerm1)*WEIGTH[ZERO];
-				   }
-			   }
-			  //--------------------------------------------------------
-*/
-
-			   //----------- Calculating Forcing Terms * -------------
-			   //LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi);
-			   for (int dir = STARTF; dir <= (FENDDIR); dir++)
-			   {
-				   LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz;
-				   LBMReal velSq1 = velProd*velProd;
-				   LBMReal gamma = WEIGTH[dir]*(1.0 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2));
-				   
-				   //forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) + 
-					//   (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + 
-					//   (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);
-				   
-				   LBMReal fac1 = (gamma - WEIGTH[dir])*c1o3*rhoToPhi;
-				   LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0;
-				   //LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi;
-				   
-				   /*forcingTerm[dir] =  (- (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - 
-				   (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - 
-				   (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi)) + (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3);*/
-				   
-				   
-				   forcingTerm[dir] = ((-ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) +
-					   				  (-uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) +
-					   				  (-uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3))) +
-									  (DX1[dir])*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) +
-									  (DX2[dir])*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) +
-									  (DX3[dir])*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3));
-
-			   }
-
-			   LBMReal gamma = WEIGTH[ZERO]*(1.0 - 1.5*(ux2+uy2+uz2));
-			   /*forcingTerm[ZERO] = -(ux)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - 
-			   (uy)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - 
-			   (uz)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/
-			   LBMReal fac1 = (gamma - WEIGTH[ZERO])*c1o3*rhoToPhi;
-			   forcingTerm[ZERO] = (-ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) +
-				   (-uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) +
-				   (-uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3));
-
-			   //--------------------------------------------------------
-
-/*			   
-			   f1[E  ] = (g[E  ] + 0.5*forcingTerm[E  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[E  ]/c1o3;
-			   f1[N  ] = (g[N  ] + 0.5*forcingTerm[N  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[N  ]/c1o3;
-			   f1[T  ] = (g[T  ] + 0.5*forcingTerm[T  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[T  ]/c1o3;
-			   f1[NE ] = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NE ]/c1o3;
-			   f1[NW ] = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NW ]/c1o3;
-			   f1[TE ] = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TE ]/c1o3;
-			   f1[TW ] = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TW ]/c1o3;
-			   f1[TN ] = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TN ]/c1o3;
-			   f1[TS ] = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TS ]/c1o3;
-			   f1[TNE] = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNE]/c1o3;
-			   f1[TNW] = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNW]/c1o3;
-			   f1[TSE] = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSE]/c1o3;
-			   f1[TSW] = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSW]/c1o3;
-			   f1[W  ] = (g[W  ] + 0.5*forcingTerm[W  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[W  ]/c1o3;
-			   f1[S  ] = (g[S  ] + 0.5*forcingTerm[S  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[S  ]/c1o3;
-			   f1[B  ] = (g[B  ] + 0.5*forcingTerm[B  ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[B  ]/c1o3;
-			   f1[SW ] = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SW ]/c1o3;
-			   f1[SE ] = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SE ]/c1o3;
-			   f1[BW ] = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BW ]/c1o3;
-			   f1[BE ] = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BE ]/c1o3;
-			   f1[BS ] = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BS ]/c1o3;
-			   f1[BN ] = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BN ]/c1o3;
-			   f1[BSW] = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSW]/c1o3;
-			   f1[BSE] = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSE]/c1o3;
-			   f1[BNW] = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNW]/c1o3;
-			   f1[BNE] = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNE]/c1o3;
-			   f1[ZERO] = (g[ZERO] + 0.5*forcingTerm[ZERO])/c1o3 - (p1 - rho*c1o3)*WEIGTH[ZERO]/c1o3;
-*/
-			   
-			   mfcbb = 3.0*(mfcbb + 0.5*forcingTerm[E  ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[E  ];
-			   mfbcb = 3.0*(mfbcb + 0.5*forcingTerm[N  ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[N  ];
-			   mfbbc = 3.0*(mfbbc + 0.5*forcingTerm[T  ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[T  ];
-			   mfccb = 3.0*(mfccb + 0.5*forcingTerm[NE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[NE ];
-			   mfacb = 3.0*(mfacb + 0.5*forcingTerm[NW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[NW ];
-			   mfcbc = 3.0*(mfcbc + 0.5*forcingTerm[TE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TE ];
-			   mfabc = 3.0*(mfabc + 0.5*forcingTerm[TW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TW ];
-			   mfbcc = 3.0*(mfbcc + 0.5*forcingTerm[TN ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TN ];
-			   mfbac = 3.0*(mfbac + 0.5*forcingTerm[TS ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TS ];
-			   mfccc = 3.0*(mfccc + 0.5*forcingTerm[TNE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TNE];
-			   mfacc = 3.0*(mfacc + 0.5*forcingTerm[TNW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TNW];
-			   mfcac = 3.0*(mfcac + 0.5*forcingTerm[TSE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TSE];
-			   mfaac = 3.0*(mfaac + 0.5*forcingTerm[TSW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TSW];
-			   mfabb = 3.0*(mfabb + 0.5*forcingTerm[W  ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[W  ];
-			   mfbab = 3.0*(mfbab + 0.5*forcingTerm[S  ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[S  ];
-			   mfbba = 3.0*(mfbba + 0.5*forcingTerm[B  ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[B  ];
-			   mfaab = 3.0*(mfaab + 0.5*forcingTerm[SW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[SW ];
-			   mfcab = 3.0*(mfcab + 0.5*forcingTerm[SE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[SE ];
-			   mfaba = 3.0*(mfaba + 0.5*forcingTerm[BW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BW ];
-			   mfcba = 3.0*(mfcba + 0.5*forcingTerm[BE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BE ];
-			   mfbaa = 3.0*(mfbaa + 0.5*forcingTerm[BS ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BS ];
-			   mfbca = 3.0*(mfbca + 0.5*forcingTerm[BN ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BN ];
-			   mfaaa = 3.0*(mfaaa + 0.5*forcingTerm[BSW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BSW];
-			   mfcaa = 3.0*(mfcaa + 0.5*forcingTerm[BSE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BSE];
-			   mfaca = 3.0*(mfaca + 0.5*forcingTerm[BNW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BNW];
-			   mfcca = 3.0*(mfcca + 0.5*forcingTerm[BNE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BNE];
-			   mfbbb = 3.0*(mfbbb + 0.5*forcingTerm[ZERO])/rho ;//- (3.0*p1 - rho)*WEIGTH[ZERO];
-			   
-			   LBMReal rho1 = (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;
-
-
-			   /*
-               //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();
-
-                  vvx += forcingX1*deltaT*0.5; // X
-                  vvy += forcingX2*deltaT*0.5; // Y
-                  vvz += forcingX3*deltaT*0.5; // Z
-               }
-               /////////////////////////////////////////////////////////////////////////////////////////// 
-			   */
-              
-			   LBMReal oMdrho, m0, m1, m2;
-               
-			   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 = rho - (oMdrho + m0);
-
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               LBMReal wadjust;
-               LBMReal qudricLimit = 0.01;
-               ////////////////////////////////////////////////////////////////////////////////////
-               //Hin
-               ////////////////////////////////////////////////////////////////////////////////////
-               // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Z - Dir
-               m2    = mfaaa + mfaac;
-               m1    = mfaac - mfaaa;
-               m0    = m2          + mfaab;
-               mfaaa = m0;
-               m0   += c1o36 * oMdrho;   
-               mfaab = m1 -        m0 * uz;
-               mfaac = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaba  + mfabc;
-               m1    = mfabc  - mfaba;
-               m0    = m2          + mfabb;
-               mfaba = m0;
-               m0   += c1o9 * oMdrho;
-               mfabb = m1 -        m0 * uz;
-               mfabc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaca  + mfacc;
-               m1    = mfacc  - mfaca;
-               m0    = m2          + mfacb;
-               mfaca = m0;
-               m0   += c1o36 * oMdrho;
-               mfacb = m1 -        m0 * uz;
-               mfacc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbaa + mfbac;
-               m1    = mfbac - mfbaa;
-               m0    = m2          + mfbab;
-               mfbaa = m0;
-               m0   += c1o9 * oMdrho;
-               mfbab = m1 -        m0 * uz;
-               mfbac = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbba  + mfbbc;
-               m1    = mfbbc  - mfbba;
-               m0    = m2          + mfbbb;
-               mfbba = m0;
-               m0   += c4o9 * oMdrho;
-               mfbbb = m1 -        m0 * uz;
-               mfbbc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbca  + mfbcc;
-               m1    = mfbcc  - mfbca;
-               m0    = m2          + mfbcb;
-               mfbca = m0;
-               m0   += c1o9 * oMdrho;
-               mfbcb = m1 -        m0 * uz;
-               mfbcc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcaa + mfcac;
-               m1    = mfcac - mfcaa;
-               m0    = m2          + mfcab;
-               mfcaa = m0;
-               m0   += c1o36 * oMdrho;
-               mfcab = m1 -        m0 * uz;
-               mfcac = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcba  + mfcbc;
-               m1    = mfcbc  - mfcba;
-               m0    = m2          + mfcbb;
-               mfcba = m0;
-               m0   += c1o9 * oMdrho;
-               mfcbb = m1 -        m0 * uz;
-               mfcbc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcca  + mfccc;
-               m1    = mfccc  - mfcca;
-               m0    = m2          + mfccb;
-               mfcca = m0;
-               m0   += c1o36 * oMdrho;
-               mfccb = m1 -        m0 * uz;
-               mfccc = m2 - 2. *   m1 * uz + uz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               m2    = mfaaa + mfaca;
-               m1    = mfaca - mfaaa;
-               m0    = m2          + mfaba;
-               mfaaa = m0;
-               m0   += c1o6 * oMdrho;
-               mfaba = m1 -        m0 * uy;
-               mfaca = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaab  + mfacb;
-               m1    = mfacb  - mfaab;
-               m0    = m2          + mfabb;
-               mfaab = m0;
-               mfabb = m1 -        m0 * uy;
-               mfacb = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaac  + mfacc;
-               m1    = mfacc  - mfaac;
-               m0    = m2          + mfabc;
-               mfaac = m0;
-               m0   += c1o18 * oMdrho;
-               mfabc = m1 -        m0 * uy;
-               mfacc = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbaa + mfbca;
-               m1    = mfbca - mfbaa;
-               m0    = m2          + mfbba;
-               mfbaa = m0;
-               m0   += c2o3 * oMdrho;
-               mfbba = m1 -        m0 * uy;
-               mfbca = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbab  + mfbcb;
-               m1    = mfbcb  - mfbab;
-               m0    = m2          + mfbbb;
-               mfbab = m0;
-               mfbbb = m1 -        m0 * uy;
-               mfbcb = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbac  + mfbcc;
-               m1    = mfbcc  - mfbac;
-               m0    = m2          + mfbbc;
-               mfbac = m0;
-               m0   += c2o9 * oMdrho;
-               mfbbc = m1 -        m0 * uy;
-               mfbcc = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcaa + mfcca;
-               m1    = mfcca - mfcaa;
-               m0    = m2          + mfcba;
-               mfcaa = m0;
-               m0   += c1o6 * oMdrho;
-               mfcba = m1 -        m0 * uy;
-               mfcca = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcab  + mfccb;
-               m1    = mfccb  - mfcab;
-               m0    = m2          + mfcbb;
-               mfcab = m0;
-               mfcbb = m1 -        m0 * uy;
-               mfccb = m2 - 2. *   m1 * uy + uy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcac  + mfccc;
-               m1    = mfccc  - mfcac;
-               m0    = m2          + mfcbc;
-               mfcac = m0;
-               m0   += c1o18 * oMdrho;
-               mfcbc = m1 -        m0 * uy;
-               mfccc = m2 - 2. *   m1 * uy + uy2 * 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 * ux;
-               mfcaa = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaba  + mfcba;
-               m1    = mfcba  - mfaba;
-               m0    = m2          + mfbba;
-               mfaba = m0;
-               mfbba = m1 -        m0 * ux;
-               mfcba = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaca  + mfcca;
-               m1    = mfcca  - mfaca;
-               m0    = m2          + mfbca;
-               mfaca = m0;
-               m0   += c1o3 * oMdrho;
-               mfbca = m1 -        m0 * ux;
-               mfcca = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaab + mfcab;
-               m1    = mfcab - mfaab;
-               m0    = m2          + mfbab;
-               mfaab = m0;
-               mfbab = m1 -        m0 * ux;
-               mfcab = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfabb  + mfcbb;
-               m1    = mfcbb  - mfabb;
-               m0    = m2          + mfbbb;
-               mfabb = m0;
-               mfbbb = m1 -        m0 * ux;
-               mfcbb = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfacb  + mfccb;
-               m1    = mfccb  - mfacb;
-               m0    = m2          + mfbcb;
-               mfacb = m0;
-               mfbcb = m1 -        m0 * ux;
-               mfccb = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaac + mfcac;
-               m1    = mfcac - mfaac;
-               m0    = m2          + mfbac;
-               mfaac = m0;
-               m0   += c1o3 * oMdrho;
-               mfbac = m1 -        m0 * ux;
-               mfcac = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfabc  + mfcbc;
-               m1    = mfcbc  - mfabc;
-               m0    = m2          + mfbbc;
-               mfabc = m0;
-               mfbbc = m1 -        m0 * ux;
-               mfcbc = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfacc  + mfccc;
-               m1    = mfccc  - mfacc;
-               m0    = m2          + mfbcc;
-               mfacc = m0;
-               m0   += c1o9 * oMdrho;
-               mfbcc = m1 -        m0 * ux;
-               mfccc = m2 - 2. *   m1 * ux + ux2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Cumulants
-               ////////////////////////////////////////////////////////////////////////////////////
-               LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity
-               LBMReal OxyyPxzz  = 1.;//-s9;//2+s9;//
-               //LBMReal OxyyMxzz  = 1.;//2+s9;//
-               LBMReal O4        = 1.;
-               LBMReal O5        = 1.;
-               LBMReal O6        = 1.;
-
-               //Cum 4.
-               //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-               //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-               //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-               LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab);
-               LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb);
-               LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb);
-
-			   LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho);
-			   LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho);
-			   LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho);
-
-			   //LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho);
-			   //LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho);
-			   //LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho);
-
-               //Cum 5.
-               LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-               LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-               LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-               //Cum 6.
-               LBMReal CUMccc = mfccc  +((-4. *  mfbbb * mfbbb 
-                  -       (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-                  -  4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-                  -  2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-                  +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-                  +  2. * (mfcaa * mfaca * mfaac)
-                  + 16. *  mfbba * mfbab * mfabb)
-                  - c1o3* (mfacc + mfcac + mfcca) * oMdrho  -c1o9*oMdrho*oMdrho
-                  - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho)
-                  +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-                  +       (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho;
-
-               //2.
-               // linear combinations
-               LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
-               LBMReal mxxMyy    = mfcaa - mfaca;
-               LBMReal mxxMzz         = mfcaa - mfaac;
-
-               LBMReal dxux = -c1o2 * collFactorM *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz);
-               LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-               LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-
-			   /*LBMReal Dxy =-three*collFactorM*mfbba;
-			   LBMReal Dxz =-three*collFactorM*mfbab;
-			   LBMReal Dyz =-three*collFactorM*mfabb;
-
-			   LBMReal strainMag = sqrt(2*(dxux*dxux + dyuy*dyuy + dzuz*dzuz) + Dxy*Dxy + Dxz*Dxz + Dyz*Dyz);
-			   LBMReal intVis = 3*abs(denom - 1e-9)*strainMag;
-			   LBMReal fluidVis = (1.0/collFactorM - 0.5)/3.0;
-			   collFactorM = 1.0/((fluidVis + intVis)*3.0 + 0.5);*/
-			   (*divU)(x1,x2,x3) = dxux + dyuy + dzuz;
-			   
-			   
-			   //relax
-               mxxPyyPzz += OxxPyyPzz*(mfaaa  - mxxPyyPzz)- 3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz);
-               mxxMyy    += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy);
-               mxxMzz    += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz);
-
-               mfabb     += collFactorM * (-mfabb);
-               mfbab     += collFactorM * (-mfbab);
-               mfbba     += collFactorM * (-mfbba);
-
-               // linear combinations back
-               mfcaa = c1o3 * (       mxxMyy +      mxxMzz + mxxPyyPzz);
-               mfaca = c1o3 * (-2. *  mxxMyy +      mxxMzz + mxxPyyPzz);
-               mfaac = c1o3 * (       mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-               //3.
-               // linear combinations
-               LBMReal mxxyPyzz = mfcba + mfabc;
-               LBMReal mxxyMyzz = mfcba - mfabc;
-
-               LBMReal mxxzPyyz = mfcab + mfacb;
-               LBMReal mxxzMyyz = mfcab - mfacb;
-
-               LBMReal mxyyPxzz = mfbca + mfbac;
-               LBMReal mxyyMxzz = mfbca - mfbac;
-
-               //relax
-               wadjust    = OxyyMxzz+(1.-OxyyMxzz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimit);
-               mfbbb     += wadjust * (-mfbbb);
-               wadjust    = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimit);
-               mxxyPyzz  += wadjust * (-mxxyPyzz);
-               wadjust    = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimit);
-               mxxyMyzz  += wadjust * (-mxxyMyzz);
-               wadjust    = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimit);
-               mxxzPyyz  += wadjust * (-mxxzPyyz);
-               wadjust    = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimit);
-               mxxzMyyz  += wadjust * (-mxxzMyyz);
-               wadjust    = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimit);
-               mxyyPxzz  += wadjust * (-mxyyPxzz);
-               wadjust    = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimit);
-               mxyyMxzz  += wadjust * (-mxyyMxzz);
-
-               // linear combinations back
-               mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2;
-               mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-               mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2;
-               mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-               mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2;
-               mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-               //4.
-               CUMacc += O4 * (-CUMacc);
-               CUMcac += O4 * (-CUMcac);
-               CUMcca += O4 * (-CUMcca);
-
-               CUMbbc += O4 * (-CUMbbc);
-               CUMbcb += O4 * (-CUMbcb);
-               CUMcbb += O4 * (-CUMcbb);
-
-               //5.
-               CUMbcc += O5 * (-CUMbcc);
-               CUMcbc += O5 * (-CUMcbc);
-               CUMccb += O5 * (-CUMccb);
-
-               //6.
-               CUMccc += O6 * (-CUMccc);
-
-               //back cumulants to central moments
-               //4.
-               //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-               //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-               //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-               mfcbb = CUMcbb + ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab);
-               mfbcb = CUMbcb + ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb);
-               mfbbc = CUMbbc + ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb);
-
-               mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-               mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-               mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-
-			   //mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho;
-			   //mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho;
-			   //mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho;
-
-               //5.
-               mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-               mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-               mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-               //6.
-               mfccc = CUMccc  -((-4. *  mfbbb * mfbbb 
-                  -       (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-                  -  4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-                  -  2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-                  +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-                  +  2. * (mfcaa * mfaca * mfaac)
-                  + 16. *  mfbba * mfbab * mfabb)
-                  - c1o3* (mfacc + mfcac + mfcca) * oMdrho  -c1o9*oMdrho*oMdrho
-                  - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho)
-                  +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-                  +       (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho;
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               //forcing
-               mfbaa=-mfbaa;
-               mfaba=-mfaba;
-               mfaab=-mfaab;
-               //////////////////////////////////////////////////////////////////////////////////////
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               //back
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Z - Dir
-               m0 =  mfaac * c1o2 +      mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * (     uz2 - uz) * c1o2;
-               m1 = -mfaac        - 2. * mfaab *  uz         +  mfaaa                * (1. - uz2)              - 1. * oMdrho * uz2;
-               m2 =  mfaac * c1o2 +      mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * (     uz2 + uz) * c1o2;
-               mfaaa = m0;
-               mfaab = m1;
-               mfaac = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfabc * c1o2 +      mfabb * (uz - c1o2) + mfaba * (     uz2 - uz) * c1o2;
-               m1 = -mfabc        - 2. * mfabb *  uz         + mfaba * (1. - uz2);
-               m2 =  mfabc * c1o2 +      mfabb * (uz + c1o2) + mfaba * (     uz2 + uz) * c1o2;
-               mfaba = m0;
-               mfabb = m1;
-               mfabc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfacc * c1o2 +      mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (     uz2 - uz) * c1o2;
-               m1 = -mfacc        - 2. * mfacb *  uz         +  mfaca                  * (1. - uz2)              - c1o3 * oMdrho * uz2;
-               m2 =  mfacc * c1o2 +      mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (     uz2 + uz) * c1o2;
-               mfaca = m0;
-               mfacb = m1;
-               mfacc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfbac * c1o2 +      mfbab * (uz - c1o2) + mfbaa * (     uz2 - uz) * c1o2;
-               m1 = -mfbac        - 2. * mfbab *  uz         + mfbaa * (1. - uz2);
-               m2 =  mfbac * c1o2 +      mfbab * (uz + c1o2) + mfbaa * (     uz2 + uz) * c1o2;
-               mfbaa = m0;
-               mfbab = m1;
-               mfbac = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbbc * c1o2 +      mfbbb * (uz - c1o2) + mfbba * (     uz2 - uz) * c1o2;
-               m1 = -mfbbc        - 2. * mfbbb *  uz         + mfbba * (1. - uz2);
-               m2 =  mfbbc * c1o2 +      mfbbb * (uz + c1o2) + mfbba * (     uz2 + uz) * c1o2;
-               mfbba = m0;
-               mfbbb = m1;
-               mfbbc = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbcc * c1o2 +      mfbcb * (uz - c1o2) + mfbca * (     uz2 - uz) * c1o2;
-               m1 = -mfbcc        - 2. * mfbcb *  uz         + mfbca * (1. - uz2);
-               m2 =  mfbcc * c1o2 +      mfbcb * (uz + c1o2) + mfbca * (     uz2 + uz) * c1o2;
-               mfbca = m0;
-               mfbcb = m1;
-               mfbcc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcac * c1o2 +      mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (     uz2 - uz) * c1o2;
-               m1 = -mfcac        - 2. * mfcab *  uz         +  mfcaa                  * (1. - uz2)              - c1o3 * oMdrho * uz2;
-               m2 =  mfcac * c1o2 +      mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (     uz2 + uz) * c1o2;
-               mfcaa = m0;
-               mfcab = m1;
-               mfcac = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfcbc * c1o2 +      mfcbb * (uz - c1o2) + mfcba * (     uz2 - uz) * c1o2;
-               m1 = -mfcbc        - 2. * mfcbb *  uz         + mfcba * (1. - uz2);
-               m2 =  mfcbc * c1o2 +      mfcbb * (uz + c1o2) + mfcba * (     uz2 + uz) * c1o2;
-               mfcba = m0;
-               mfcbb = m1;
-               mfcbc = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfccc * c1o2 +      mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (     uz2 - uz) * c1o2;
-               m1 = -mfccc        - 2. * mfccb *  uz         +  mfcca                  * (1. - uz2)              - c1o9 * oMdrho * uz2;
-               m2 =  mfccc * c1o2 +      mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (     uz2 + uz) * c1o2;
-               mfcca = m0;
-               mfccb = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               m0 =  mfaca * c1o2 +      mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfaca        - 2. * mfaba *  uy         +  mfaaa                  * (1. - uy2)              - c1o6 * oMdrho * uy2;
-               m2 =  mfaca * c1o2 +      mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfaaa = m0;
-               mfaba = m1;
-               mfaca = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfacb * c1o2 +      mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfacb        - 2. * mfabb *  uy         +  mfaab                  * (1. - uy2)              - c2o3 * oMdrho * uy2;
-               m2 =  mfacb * c1o2 +      mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfaab = m0;
-               mfabb = m1;
-               mfacb = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfacc * c1o2 +      mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfacc        - 2. * mfabc *  uy         +  mfaac                  * (1. - uy2)              - c1o6 * oMdrho * uy2;
-               m2 =  mfacc * c1o2 +      mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfaac = m0;
-               mfabc = m1;
-               mfacc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfbca * c1o2 +      mfbba * (uy - c1o2) + mfbaa * (     uy2 - uy) * c1o2;
-               m1 = -mfbca        - 2. * mfbba *  uy         + mfbaa * (1. - uy2);
-               m2 =  mfbca * c1o2 +      mfbba * (uy + c1o2) + mfbaa * (     uy2 + uy) * c1o2;
-               mfbaa = m0;
-               mfbba = m1;
-               mfbca = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbcb * c1o2 +      mfbbb * (uy - c1o2) + mfbab * (     uy2 - uy) * c1o2;
-               m1 = -mfbcb        - 2. * mfbbb *  uy         + mfbab * (1. - uy2);
-               m2 =  mfbcb * c1o2 +      mfbbb * (uy + c1o2) + mfbab * (     uy2 + uy) * c1o2;
-               mfbab = m0;
-               mfbbb = m1;
-               mfbcb = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbcc * c1o2 +      mfbbc * (uy - c1o2) + mfbac * (     uy2 - uy) * c1o2;
-               m1 = -mfbcc        - 2. * mfbbc *  uy         + mfbac * (1. - uy2);
-               m2 =  mfbcc * c1o2 +      mfbbc * (uy + c1o2) + mfbac * (     uy2 + uy) * c1o2;
-               mfbac = m0;
-               mfbbc = m1;
-               mfbcc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcca * c1o2 +      mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfcca        - 2. * mfcba *  uy         +  mfcaa                   * (1. - uy2)              - c1o18 * oMdrho * uy2;
-               m2 =  mfcca * c1o2 +      mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfcaa = m0;
-               mfcba = m1;
-               mfcca = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfccb * c1o2 +      mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfccb        - 2. * mfcbb *  uy         +  mfcab                  * (1. - uy2)              - c2o9 * oMdrho * uy2;
-               m2 =  mfccb * c1o2 +      mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfcab = m0;
-               mfcbb = m1;
-               mfccb = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfccc * c1o2 +      mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (     uy2 - uy) * c1o2;
-               m1 = -mfccc        - 2. * mfcbc *  uy         +  mfcac                   * (1. - uy2)              - c1o18 * oMdrho * uy2;
-               m2 =  mfccc * c1o2 +      mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (     uy2 + uy) * c1o2;
-               mfcac = m0;
-               mfcbc = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // X - Dir
-               m0 =  mfcaa * c1o2 +      mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcaa        - 2. * mfbaa *  ux         +  mfaaa                   * (1. - ux2)              - c1o36 * oMdrho * ux2;
-               m2 =  mfcaa * c1o2 +      mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfaaa = m0;
-               mfbaa = m1;
-               mfcaa = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcba * c1o2 +      mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcba        - 2. * mfbba *  ux         +  mfaba                  * (1. - ux2)              - c1o9 * oMdrho * ux2;
-               m2 =  mfcba * c1o2 +      mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfaba = m0;
-               mfbba = m1;
-               mfcba = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcca * c1o2 +      mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcca        - 2. * mfbca *  ux         +  mfaca                   * (1. - ux2)              - c1o36 * oMdrho * ux2;
-               m2 =  mfcca * c1o2 +      mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfaca = m0;
-               mfbca = m1;
-               mfcca = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcab * c1o2 +      mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcab        - 2. * mfbab *  ux         +  mfaab                  * (1. - ux2)              - c1o9 * oMdrho * ux2;
-               m2 =  mfcab * c1o2 +      mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfaab = m0;
-               mfbab = m1;
-               mfcab = m2;
-               ///////////b////////////////////////////////////////////////////////////////////////
-               m0 =  mfcbb * c1o2 +      mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcbb        - 2. * mfbbb *  ux         +  mfabb                  * (1. - ux2)              - c4o9 * oMdrho * ux2;
-               m2 =  mfcbb * c1o2 +      mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfabb = m0;
-               mfbbb = m1;
-               mfcbb = m2;
-               ///////////b////////////////////////////////////////////////////////////////////////
-               m0 =  mfccb * c1o2 +      mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfccb        - 2. * mfbcb *  ux         +  mfacb                  * (1. - ux2)              - c1o9 * oMdrho * ux2;
-               m2 =  mfccb * c1o2 +      mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfacb = m0;
-               mfbcb = m1;
-               mfccb = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcac * c1o2 +      mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcac        - 2. * mfbac *  ux         +  mfaac                   * (1. - ux2)              - c1o36 * oMdrho * ux2;
-               m2 =  mfcac * c1o2 +      mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfaac = m0;
-               mfbac = m1;
-               mfcac = m2;
-               ///////////c////////////////////////////////////////////////////////////////////////
-               m0 =  mfcbc * c1o2 +      mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfcbc        - 2. * mfbbc *  ux         +  mfabc                  * (1. - ux2)              - c1o9 * oMdrho * ux2;
-               m2 =  mfcbc * c1o2 +      mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfabc = m0;
-               mfbbc = m1;
-               mfcbc = m2;
-               ///////////c////////////////////////////////////////////////////////////////////////
-               m0 =  mfccc * c1o2 +      mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (     ux2 - ux) * c1o2;
-               m1 = -mfccc        - 2. * mfbcc *  ux         +  mfacc                   * (1. - ux2)              - c1o36 * oMdrho * ux2;
-               m2 =  mfccc * c1o2 +      mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (     ux2 + ux) * c1o2;
-               mfacc = m0;
-               mfbcc = m1;
-               mfccc = m2;
-
-
-
-///////////////////////////////////////////////////////////////////////////
-
-/*
-			    m000 = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + 
-					   f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW];
-				
-				m100 = f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[E] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW] - f1[W];
-				m010 = f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[N] + f1[NE] + f1[NW] - f1[S] - f1[SE] - f1[SW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW];
-				m001 = f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW] - f1[B] - f1[BE] - f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] - f1[BW];
-
-				m110 =  f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[NE] - f1[NW] - f1[SE] + f1[SW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW];
-				m101 = -f1[BE] - f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW];
-				m011 = -f1[BN] - f1[BNE] - f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW];
-				m200 =  f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[E] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW] + f1[W];
-				m020 =  f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[N] + f1[NE] + f1[NW] + f1[S] + f1[SE] + f1[SW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW];
-				m002 =  f1[B] + f1[BE] + f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[BW] + f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW];
-				m120 =  f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW];
-				m102 =  f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW];
-				m210 =  f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[NE] + f1[NW] - f1[SE] - f1[SW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW];
-				m012 =  f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW];
-				m201 = -f1[BE] - f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW];
-				m021 = -f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW];
-				m111 = -f1[BNE] + f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW];
-				m220 =  f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW];
-				m202 =  f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW];
-				m022 =  f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW];
-				m211 = -f1[BNE] - f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW];
-				m121 = -f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW];
-				m112 =  f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW];
-				m221 = -f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW];
-				m212 =  f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW];
-				m122 =  f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW];
-				m222 =  f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW];
-
-				k200 = m200 - m000*ux2;
-				k020 = m020 - m000*uy2;
-				k002 = m002 - m000*uz2; 
-				k110 = m110 - m000*ux_uy;          
-				k101 = m101 - m000*ux_uz;
-				k011 = m011 - m000*uy_uz;
-
-				k021 = m021 - (m020*uz + 2.0*uy*k011);          
-				k012 = m012 - (uy*m002 + 2.0*uz*k011);
-				k102 = m102 - (ux*m002 + 2.0*uz*k101);
-				k201 = m201 - (m200*uz + 2.0*ux*k101 );
-				k210 = m210 - (m200*uy + 2.0*ux*k110 );
-				k120 = m120 - (ux*m020 + 2.0*uy*k110);
-				k111 = m111 - (ux_uy_uz + ux*k011 + uy*k101 + uz*k110);
-
-				k121 = m121 - (uz*m120+ 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111); 
-				k112 = m112 - (uy*m102+ 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111);
-				k211 = m211 - (uz*m210+ 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111); 
-
-
-				k220 = m220 - ( ux2*m020+ 4.0*ux_uy*k110 + 2.0*ux*k120 + uy2*k200 + 2.0*uy*k210); 
-				k022 = m022 - ( uy2*m002+ 4.0*uy_uz*k011 + 2.0*uy*k012 + uz2*k020 + 2.0*uz*k021);
-				k202 = m202 - ( ux2*m002+ 4.0*ux_uz*k101 + 2.0*ux*k102 + uz2*k200 + 2.0*uz*k201); 
-
-				k221 = m221 - (uz*m220+
-					2.0*ux2*uy*k011  + ux2*k021 + 2.0*ux*uy2*k101  +4.0*ux_uy*k111 + 
-					2.0*ux*k121 + uy2*k201 + 2.0*uy*k211);
-				k122 = m122 - (ux*m022 
-					+ 2.0*uy2*uz*k101 + uy2*k102 + 2.0*uy*uz2*k110 + 4.0*uy_uz*k111 +
-					2.0*uy*k112 + uz2*k120 + 2.0*uz*k121);
-				k212 = m212 - (uy*m202
-					+ 2.0*ux2*uz*k011 +ux2*k012  + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 +
-					2.0*ux*k112 + uz2*k210 + 2.0*uz*k211);
-
-				k222 = m222 - (ux2*m022 
-					+ 4.0* ux*uy2*uz*k101   + 
-					2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ 
-					8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + 
-					2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + 
-					uy2*uz2*k200 + 2.0* uy2*uz*k201  + 
-					uy2*k202     + 2.0* uy*uz2*k210  + 4.0*uy_uz*k211 + 
-					2.0* uy*k212 + uz2*k220 +2.0* uz*k221);
-
-				//////////////// Central moments to Cumulants \\\\\\\\\\\\\\\\\\\\\\\\\
-
-				c200 = k200;
-				c020 = k020;
-				c002 = k002;
-				c110 = k110;
-				c101 = k101;
-				c011 = k011;
-
-				c021 = k021;
-				c012 = k012;
-				c102 = k102;
-				c201 = k201;
-				c210 = k210;
-				c120 = k120;
-				c111 = k111;
-
-				c121 = k121 - (k020*k101 + 2*k011*k110)/m000;
-				c211 = k211 - (k200*k011 + 2*k110*k101)/m000;
-				c112 = k112 - (k002*k110 + 2*k011*k101)/m000;
-
-				c220 = k220 - (k200*k020 + 2*k110*k110)/m000;
-				c202 = k202 - (k200*k002 + 2*k101*k101)/m000;
-				c022 = k022 - (k020*k002 + 2*k011*k011)/m000;
-
-				c122 = k122 - (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000;
-				c212 = k212 - (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000;
-				c221 = k221 - (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000;
-
-				c222 = k222 - (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112)
-					+ 2*(k120*k102 + k210*k012 + k201*k021))/m000
-					+ (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000);
-
-				c200_pl_c020_pl_c002 = c200 + c020 + c002;
-				c200_mi_c020 = c200 - c020;
-				c200_mi_c002 = c200 - c002;
-
-				c210_pl_c012  =  c210+c012;
-				c210_mi_c012  =  c210-c012;
-				c201_pl_c021  =  c201+c021;
-				c201_mi_c021  =  c201-c021;
-				c120_pl_c102  =  c120+c102;
-				c120_mi_c102  =  c120-c102;
-
-				c220_pl_c202_pl_c022  = c220 + c202 + c022;
-				c220_mi2_c202_pl_c022 = c220 - 2.0*c202 + c022;
-				c220_pl_c202_mi2_c022 = c220 + c202 - 2.0*c022;
-
-				/////////////////////////// Relaxation \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
-
-				c110 = c110*(1-w1);
-				c101 = c101*(1-w1);
-				c011 = c011*(1-w1);
-
-				c200_mi_c020 = c200_mi_c020*(1-w1); 
-				c200_mi_c002 = c200_mi_c002*(1-w1); 
-
-				c200_pl_c020_pl_c002 = c200_pl_c020_pl_c002*(1-w2) + m000*w2;
-
-				c120_pl_c102 = c120_pl_c102*(1-w3);
-				c210_pl_c012 = c210_pl_c012*(1-w3);
-				c201_pl_c021 = c201_pl_c021*(1-w3); 
-
-
-				c120_mi_c102 = c120_mi_c102*(1-w4); 
-				c210_mi_c012 = c210_mi_c012*(1-w4);
-				c201_mi_c021 = c201_mi_c021*(1-w4);
-
-				c111 = c111*(1-w5);
-
-				c220_mi2_c202_pl_c022 = c220_mi2_c202_pl_c022*(1-w6);
-				c220_pl_c202_mi2_c022 = c220_pl_c202_mi2_c022*(1-w6);
-
-				c220_pl_c202_pl_c022 =  c220_pl_c202_pl_c022*(1-w7);
-
-				c211 = c211*(1-w8);
-				c121 = c121*(1-w8);
-				c112 = c112*(1-w8);
-
-
-				c221 = c221*(1-w9);
-				c212 = c212*(1-w9);
-				c122 = c122*(1-w9);
-
-				c222 = c222*(1-w10);
-
-
-				c200 = c1o3 *c200_mi_c020 + c1o3 *c200_mi_c002 +  c1o3* c200_pl_c020_pl_c002; 
-				c020 = -2*c1o3* c200_mi_c020+ c1o3* c200_mi_c002 +  c1o3* c200_pl_c020_pl_c002; 
-				c002 = c1o3   * c200_mi_c020 -2*c1o3 *c200_mi_c002 +  c1o3* c200_pl_c020_pl_c002; 
-
-				c210 = (c210_mi_c012 + c210_pl_c012)*0.5; 
-				c012 = 0.5*(-c210_mi_c012 + c210_pl_c012); 
-				c120 =(c120_mi_c102 + c120_pl_c102)*0.5; 
-				c102 = 0.5*(-c120_mi_c102 + c120_pl_c102); 
-				c201 = (c201_mi_c021 + c201_pl_c021)*0.5; 
-				c021 = 0.5*(-c201_mi_c021 + c201_pl_c021);
-
-				c220 =  c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_mi2_c022 +  c1o3*c220_pl_c202_pl_c022; 
-				c202 = -c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_pl_c022; 
-				c022 = -c1o3* c220_pl_c202_mi2_c022 + c1o3* c220_pl_c202_pl_c022;
-
-
-				////////////////////// Cumulants to Central moments   \\\\\\\\\\\\\\\\\\\\\\\\\
-
-				k200 = c200;
-				k020 = c020;
-				k002 = c002;
-				k110 = c110;
-				k101 = c101;
-				k011 = c011;
-
-				k021 = c021;
-				k012 = c012;
-				k102 = c102;
-				k201 = c201;
-				k210 = c210;
-				k120 = c120;
-				k111 = c111;
-
-				k121 = c121 + (k020*k101 + 2*k011*k110)/m000;
-				k211 = c211 + (k200*k011 + 2*k110*k101)/m000;
-				k112 = c112 + (k002*k110 + 2*k011*k101)/m000;
-
-				k220 = c220 + (k200*k020 + 2*k110*k110)/m000;
-				k202 = c202 + (k200*k002 + 2*k101*k101)/m000;
-				k022 = c022 + (k020*k002 + 2*k011*k011)/m000;
-
-				k122 = c122 + (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000;
-				k212 = c212 + (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000;
-				k221 = c221 + (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000;
-
-				k222 = c222 + (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112)
-					+ 2*(k120*k102 + k210*k012 + k201*k021))/m000
-					- (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000);
-
-				///////////////////////////////////////////////////////////////////////////////
-
-
-				m200 = k200 + m000*ux2;
-				m020 = k020 + m000*uy2;
-				m002 = k002 + m000*uz2; 
-				m110 = k110 + m000*ux_uy;          
-				m101 = k101 + m000*ux_uz;
-				m011 = k011 + m000*uy_uz;
-
-				m021 = m020*uz + 2.0*uy*k011  + k021;          
-				m012 = uy*m002 + 2.0*uz*k011 + k012;
-				m102 = ux*m002 + 2.0*uz*k101 + k102;
-				m112 = uy*m102 + 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111+k112;
-
-				m201 = m200*uz + 2.0*ux*k101  + k201;
-				m210 = m200*uy + 2.0*ux*k110  + k210;
-				m211 = uz*m210 + 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111+k211; 
-
-				m120 = ux*m020 + 2.0*uy*k110 + k120;
-				m121 = uz*m120 + 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111+ k121; 
-
-				m111 = ux_uy_uz + ux*k011 + uy*k101 + uz*k110+k111;
-
-				m220 = ux2*m020 + 4.0*ux_uy*k110 + 2.0*ux*k120  + uy2*k200 + 2.0*uy*k210 +  k220; 
-
-				m221 = uz*m220 + 2.0*ux2*uy*k011  + ux2*k021 + 2.0*ux*uy2*k101  +4.0*ux_uy*k111+ 
-					2.0*ux*k121  +    uy2*k201  + 2.0*uy*k211  + k221;
-
-				m022 = uy2*m002 + 4.0*uy_uz*k011  +2.0*uy*k012+ uz2*k020+ 2.0*uz*k021 +  k022;
-
-				m122 = ux*m022 + 2.0*uy2*uz*k101 + uy2*k102 + 
-					2.0*uy*uz2*k110 + 4.0*uy_uz*k111 + 2.0*uy*k112 +uz2*k120 + 2.0*uz*k121 + k122;
-
-				m202 = ux2*m002 + 4.0*ux_uz*k101+ 2.0*ux*k102 + uz2*k200+ 2.0*uz*k201 + k202; 
-
-				m212 = uy*m202 + 2.0*ux2*uz*k011 +ux2*k012  + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 
-					+ 2.0*ux*k112  + uz2*k210 +  2.0*uz*k211 + k212;
-
-				m222 = ux2*m022 
-					+ 4.0* ux*uy2*uz*k101   + 
-					2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ 
-					8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + 
-					2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + 
-					uy2*uz2*k200 + 2.0* uy2*uz*k201  + 
-					uy2*k202     + 2.0* uy*uz2*k210  + 4.0*uy_uz*k211 + 
-					2.0* uy*k212 + uz2*k220 +2.0* uz*k221 + k222;
-
-				f1[ZERO] = (-m200 + m220 - m222 + m202 - m020 + m022 - m002 + m000);
-				f1[E] = 0.5* (m200 -  m220 + m222 - m202 - m120 + m122 - m102 +m100);
-				f1[W] = 0.5* (m200 - m220 + m222 - m202 + m120 - m122 + m102 -m100);
-				f1[N] = 0.5* (-m210 - m220 + m222 + m212 + m020 - m022 - m012 +m010);
-				f1[S] = 0.5* (m210 -  m220 + m222 - m212 + m020 - m022 + m012 -m010);
-				f1[T] = 0.5* (m221 +  m222 - m201 - m202 - m021 - m022 + m002 +m001);
-				f1[B] = 0.5* (-m221 + m222 + m201  - m202 + m021 - m022 + m002-m001);
-
-				f1[NE] = 0.25*( m210  + m220- m222 - m212 + m110+ m120- m122 -m112); 
-				f1[SW] = 0.25*(-m210 + m220- m222 + m212 + m110- m120+ m122 -m112); 
-				f1[SE] = 0.25*(-m210 + m220- m222 + m212 - m110+ m120- m122 +m112); 
-				f1[NW] = 0.25*( m210  + m220- m222 - m212 - m110- m120+ m122 + m112); 
-				f1[TE] = 0.25*(-m221 - m222 + m201 + m202 - m121 - m122 + m101 + m102); 
-				f1[BW] = 0.25*( m221  -m222 - m201 + m202 - m121 + m122 + m101 - m102);
-				f1[BE] = 0.25*(m221 - m222 - m201 + m202 + m121 - m122 - m101 +m102);
-				f1[TW] = 0.25*(-m221 - m222 + m201 + m202 + m121 + m122 - m101 -m102); 
-				f1[TN] = 0.25*(-m221 - m222 - m211 - m212 + m021 + m022 + m011+m012);
-				f1[BS] = 0.25*( m221 - m222 - m211 + m212 - m021 + m022 + m011 - m012);
-				f1[BN] = 0.25*( m221 - m222 + m211 - m212 - m021 + m022 - m011 + m012);
-				f1[TS] = 0.25*(-m221 - m222 + m211 + m212 + m021 + m022 - m011 -m012); 
-
-				f1[TNE]=0.125*( m221 + m222 + m211 + m212 + m121 + m122 + m111 + m112); 
-				f1[BNE]=0.125*(-m221 + m222 -m211 + m212 -m121 + m122 -m111 + m112);
-				f1[TSE]=0.125*( m221 + m222 - m211 - m212 + m121 + m122 - m111 - m112); 
-				f1[BSE]=0.125*(-m221 + m222 +m211 - m212 -m121 + m122 +m111 - m112); 
-				f1[TNW]=0.125*( m221 + m222 + m211 + m212 - m121 - m122 - m111 - m112); 
-				f1[BNW]=0.125*(-m221 + m222 -m211 + m212 +m121 - m122 +m111 - m112); 
-				f1[TSW]=0.125*( m221 + m222 - m211 - m212 - m121 - m122 + m111 + m112); 
-				f1[BSW]=0.125*(-m221 + m222+m211 - m212+m121 - m122-m111 + m112);
-			   
-*/
-			   //////////////////////////////////////////////////////////////////////////
-               //proof correctness
-               //////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-			   LBMReal rho_post = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca)
-			   +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc)
-			   +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb;
-				
-				/*LBMReal rho_post = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + 
-					f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; */
-               //LBMReal dif = fabs(rho - rho_post);
-               LBMReal dif = rho1 - rho_post;
-#ifdef SINGLEPRECISION
-               if(dif > 10.0E-7 || dif < -10.0E-7)
-#else
-               if(dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-               {
-				   UB_THROW(UbException(UB_EXARGS,"rho="+UbSystem::toString(rho)+", rho_post="+UbSystem::toString(rho_post)
-                     +" dif="+UbSystem::toString(dif)
-                     +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)));
-                  //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-                  //exit(EXIT_FAILURE);
-               }
-#endif
-               			   
-			   
-			   mfcbb = rho*c1o3*(mfcbb ) + 0.5*forcingTerm[E  ] ;
-			   mfbcb = rho*c1o3*(mfbcb ) + 0.5*forcingTerm[N  ] ;
-			   mfbbc = rho*c1o3*(mfbbc ) + 0.5*forcingTerm[T  ] ;
-			   mfccb = rho*c1o3*(mfccb ) + 0.5*forcingTerm[NE ] ;
-			   mfacb = rho*c1o3*(mfacb ) + 0.5*forcingTerm[NW ] ;
-			   mfcbc = rho*c1o3*(mfcbc ) + 0.5*forcingTerm[TE ] ;
-			   mfabc = rho*c1o3*(mfabc ) + 0.5*forcingTerm[TW ] ;
-			   mfbcc = rho*c1o3*(mfbcc ) + 0.5*forcingTerm[TN ] ;
-			   mfbac = rho*c1o3*(mfbac ) + 0.5*forcingTerm[TS ] ;
-			   mfccc = rho*c1o3*(mfccc ) + 0.5*forcingTerm[TNE] ;
-			   mfacc = rho*c1o3*(mfacc ) + 0.5*forcingTerm[TNW] ;
-			   mfcac = rho*c1o3*(mfcac ) + 0.5*forcingTerm[TSE] ;
-			   mfaac = rho*c1o3*(mfaac ) + 0.5*forcingTerm[TSW] ;
-			   mfabb = rho*c1o3*(mfabb ) + 0.5*forcingTerm[W  ] ;
-			   mfbab = rho*c1o3*(mfbab ) + 0.5*forcingTerm[S  ] ;
-			   mfbba = rho*c1o3*(mfbba ) + 0.5*forcingTerm[B  ] ;
-			   mfaab = rho*c1o3*(mfaab ) + 0.5*forcingTerm[SW ] ;
-			   mfcab = rho*c1o3*(mfcab ) + 0.5*forcingTerm[SE ] ;
-			   mfaba = rho*c1o3*(mfaba ) + 0.5*forcingTerm[BW ] ;
-			   mfcba = rho*c1o3*(mfcba ) + 0.5*forcingTerm[BE ] ;
-			   mfbaa = rho*c1o3*(mfbaa ) + 0.5*forcingTerm[BS ] ;
-			   mfbca = rho*c1o3*(mfbca ) + 0.5*forcingTerm[BN ] ;
-			   mfaaa = rho*c1o3*(mfaaa ) + 0.5*forcingTerm[BSW] ;
-			   mfcaa = rho*c1o3*(mfcaa ) + 0.5*forcingTerm[BSE] ;
-			   mfaca = rho*c1o3*(mfaca ) + 0.5*forcingTerm[BNW] ;
-			   mfcca = rho*c1o3*(mfcca ) + 0.5*forcingTerm[BNE] ;
-			   mfbbb = rho*c1o3*(mfbbb ) + 0.5*forcingTerm[ZERO];
-			   
-			   //////////////////////////////////////////////////////////////////////////
-			   //write distribution for F
-			   //////////////////////////////////////////////////////////////////////////
-
-			   (*this->localDistributionsF)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-			   (*this->localDistributionsF)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-			   (*this->localDistributionsF)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-			   (*this->localDistributionsF)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-			   (*this->localDistributionsF)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-			   (*this->localDistributionsF)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-			   (*this->localDistributionsF)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-			   (*this->localDistributionsF)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-			   (*this->localDistributionsF)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-			   (*this->zeroDistributionsF)(x1,x2,x3) = mfbbb;
-
-
-			   
-/////////////////////  P H A S E - F I E L D   S O L V E R /////////////////////////////////////////			   
-/*			   
-			   
-			   mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3);
-			   mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); 
-			   mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3);
-			   mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3);
-			   mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3);
-			   mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3);
-			   mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3);
-			   mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3);
-			   mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3);
-			   mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3);
-			   mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3);
-			   mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3);
-			   mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3);
-			   mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3  );
-			   mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3  );
-			   mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p  );
-			   mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 );
-			   mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 );
-			   mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p );
-			   mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p );
-			   mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p );
-			   mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p );
-			   mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-			   mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p);
-			   mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p);
-			   mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p);
-			   mfbbb = (*this->zeroDistributionsH)(x1,x2,x3);
-
-			   
-			   LBMReal hSource = ( (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])/denom ); // + phi[ZERO]*(dxux + dyuy + dzuz);
-
-
-			   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 collFactorPhi = 1.0 / tauH;
-			   oMdrho = one; // comp special
-			   ////////////////////////////////////////////////////////////////////////////////////
-
-			   // 						LBMReal wadjust;
-			   // 						LBMReal qudricLimitP = 0.01f;// * 0.0001f;
-			   // 						LBMReal qudricLimitM = 0.01f;// * 0.0001f;
-			   // 						LBMReal qudricLimitD = 0.01f;// * 0.001f;
-			   //LBMReal s9 = minusomega;
-			   //test
-			   //s9 = 0.;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //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; // 2nd raw moment
-			   m1 = mfaac - mfaaa; // 1st raw moment
-			   m0 = m2 + mfaab;    // zeroth raw moment
-			   mfaaa = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfaab = m1 - m0 * uz;                   // this corresponds to a (central moment of order 1 = first raw moment  - velocity * zeroth moment) 
-			   mfaac = m2 - two*	m1 * uz + uz2 * m0; // this corresponds to a (central moment of order 2 = second raw moment - 2* velocity * 1st raw moment + velocity^2 * zeroth moment)
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaba + mfabc;
-			   m1 = mfabc - mfaba;
-			   m0 = m2 + mfabb;
-			   mfaba = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfabb = m1 - m0 * uz;
-			   mfabc = m2 - two*	m1 * uz + uz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaca + mfacc;
-			   m1 = mfacc - mfaca;
-			   m0 = m2 + mfacb;
-			   mfaca = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfacb = m1 - m0 * uz;
-			   mfacc = m2 - two*	m1 * uz + uz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbaa + mfbac;
-			   m1 = mfbac - mfbaa;
-			   m0 = m2 + mfbab;
-			   mfbaa = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbab = m1 - m0 * uz;
-			   mfbac = m2 - two*	m1 * uz + uz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbba + mfbbc;
-			   m1 = mfbbc - mfbba;
-			   m0 = m2 + mfbbb;
-			   mfbba = m0;
-			   m0 += c4o9 * oMdrho;
-			   mfbbb = m1 - m0 * uz;
-			   mfbbc = m2 - two*	m1 * uz + uz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbca + mfbcc;
-			   m1 = mfbcc - mfbca;
-			   m0 = m2 + mfbcb;
-			   mfbca = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbcb = m1 - m0 * uz;
-			   mfbcc = m2 - two*	m1 * uz + uz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcaa + mfcac;
-			   m1 = mfcac - mfcaa;
-			   m0 = m2 + mfcab;
-			   mfcaa = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfcab = m1 - m0 * uz;
-			   mfcac = m2 - two*	m1 * uz + uz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcba + mfcbc;
-			   m1 = mfcbc - mfcba;
-			   m0 = m2 + mfcbb;
-			   mfcba = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfcbb = m1 - m0 * uz;
-			   mfcbc = m2 - two*	m1 * uz + uz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcca + mfccc;
-			   m1 = mfccc - mfcca;
-			   m0 = m2 + mfccb;
-			   mfcca = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfccb = m1 - m0 * uz;
-			   mfccc = m2 - two*	m1 * uz + uz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   m2 = mfaaa + mfaca;
-			   m1 = mfaca - mfaaa;
-			   m0 = m2 + mfaba;
-			   mfaaa = m0;
-			   m0 += c1o6 * oMdrho;
-			   mfaba = m1 - m0 * uy;
-			   mfaca = m2 - two*	m1 * uy + uy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaab + mfacb;
-			   m1 = mfacb - mfaab;
-			   m0 = m2 + mfabb;
-			   mfaab = m0;
-			   mfabb = m1 - m0 * uy;
-			   mfacb = m2 - two*	m1 * uy + uy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaac + mfacc;
-			   m1 = mfacc - mfaac;
-			   m0 = m2 + mfabc;
-			   mfaac = m0;
-			   m0 += c1o18 * oMdrho;
-			   mfabc = m1 - m0 * uy;
-			   mfacc = m2 - two*	m1 * uy + uy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbaa + mfbca;
-			   m1 = mfbca - mfbaa;
-			   m0 = m2 + mfbba;
-			   mfbaa = m0;
-			   m0 += c2o3 * oMdrho;
-			   mfbba = m1 - m0 * uy;
-			   mfbca = m2 - two*	m1 * uy + uy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbab + mfbcb;
-			   m1 = mfbcb - mfbab;
-			   m0 = m2 + mfbbb;
-			   mfbab = m0;
-			   mfbbb = m1 - m0 * uy;
-			   mfbcb = m2 - two*	m1 * uy + uy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbac + mfbcc;
-			   m1 = mfbcc - mfbac;
-			   m0 = m2 + mfbbc;
-			   mfbac = m0;
-			   m0 += c2o9 * oMdrho;
-			   mfbbc = m1 - m0 * uy;
-			   mfbcc = m2 - two*	m1 * uy + uy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcaa + mfcca;
-			   m1 = mfcca - mfcaa;
-			   m0 = m2 + mfcba;
-			   mfcaa = m0;
-			   m0 += c1o6 * oMdrho;
-			   mfcba = m1 - m0 * uy;
-			   mfcca = m2 - two*	m1 * uy + uy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcab + mfccb;
-			   m1 = mfccb - mfcab;
-			   m0 = m2 + mfcbb;
-			   mfcab = m0;
-			   mfcbb = m1 - m0 * uy;
-			   mfccb = m2 - two*	m1 * uy + uy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcac + mfccc;
-			   m1 = mfccc - mfcac;
-			   m0 = m2 + mfcbc;
-			   mfcac = m0;
-			   m0 += c1o18 * oMdrho;
-			   mfcbc = m1 - m0 * uy;
-			   mfccc = m2 - two*	m1 * uy + uy2 * 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 += one* oMdrho;
-			   mfbaa = m1 - m0 * ux;
-			   mfcaa = m2 - two*	m1 * ux + ux2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaba + mfcba;
-			   m1 = mfcba - mfaba;
-			   m0 = m2 + mfbba;
-			   mfaba = m0;
-			   mfbba = m1 - m0 * ux;
-			   mfcba = m2 - two*	m1 * ux + ux2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaca + mfcca;
-			   m1 = mfcca - mfaca;
-			   m0 = m2 + mfbca;
-			   mfaca = m0;
-			   m0 += c1o3 * oMdrho;
-			   mfbca = m1 - m0 * ux;
-			   mfcca = m2 - two*	m1 * ux + ux2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaab + mfcab;
-			   m1 = mfcab - mfaab;
-			   m0 = m2 + mfbab;
-			   mfaab = m0;
-			   mfbab = m1 - m0 * ux;
-			   mfcab = m2 - two*	m1 * ux + ux2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfabb + mfcbb;
-			   m1 = mfcbb - mfabb;
-			   m0 = m2 + mfbbb;
-			   mfabb = m0;
-			   mfbbb = m1 - m0 * ux;
-			   mfcbb = m2 - two*	m1 * ux + ux2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfacb + mfccb;
-			   m1 = mfccb - mfacb;
-			   m0 = m2 + mfbcb;
-			   mfacb = m0;
-			   mfbcb = m1 - m0 * ux;
-			   mfccb = m2 - two*	m1 * ux + ux2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaac + mfcac;
-			   m1 = mfcac - mfaac;
-			   m0 = m2 + mfbac;
-			   mfaac = m0;
-			   m0 += c1o3 * oMdrho;
-			   mfbac = m1 - m0 * ux;
-			   mfcac = m2 - two*	m1 * ux + ux2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfabc + mfcbc;
-			   m1 = mfcbc - mfabc;
-			   m0 = m2 + mfbbc;
-			   mfabc = m0;
-			   mfbbc = m1 - m0 * ux;
-			   mfcbc = m2 - two*	m1 * ux + ux2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfacc + mfccc;
-			   m1 = mfccc - mfacc;
-			   m0 = m2 + mfbcc;
-			   mfacc = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbcc = m1 - m0 * ux;
-			   mfccc = m2 - two*	m1 * ux + ux2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Collision
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   LBMReal m000 = mfaaa;
-			   LBMReal m100 = mfbaa;
-			   LBMReal m010 = mfaba;
-			   LBMReal m001 = mfaab;
-			   LBMReal m110 = mfbba;
-			   LBMReal m101 = mfbab;
-			   LBMReal m011 = mfabb;
-			   LBMReal m111 = mfbbb;
-			   LBMReal m200 = mfcaa - m000 / 3.0;
-			   LBMReal m020 = mfaca - m000 / 3.0;
-			   LBMReal m002 = mfaac - m000 / 3.0;
-			   LBMReal m210 = mfcba - m010 / 3.0;
-			   LBMReal m012 = mfabc - m010 / 3.0;
-			   LBMReal m201 = mfcab - m001 / 3.0;
-			   LBMReal m021 = mfacb - m001 / 3.0;
-			   LBMReal m120 = mfbca - m100 / 3.0;
-			   LBMReal m102 = mfbac - m100 / 3.0;
-			   LBMReal m220 = mfcca - m000 / 9.0;
-			   LBMReal m202 = mfcac - m000 / 9.0;
-			   LBMReal m022 = mfacc - m000 / 9.0;
-			   LBMReal m221 = mfccb - m001 / 9.0;
-			   LBMReal m212 = mfcbc - m010 / 9.0;
-			   LBMReal m122 = mfbcc - m100 / 9.0;
-			   LBMReal m211 = mfcbb - m011 / 3.0;
-			   LBMReal m121 = mfbcb - m101 / 3.0;
-			   LBMReal m112 = mfbbc - m110 / 3.0;
-			   LBMReal m222 = mfccc - m000 / 27.0;
-
-
-			   m100 = (1.0 - collFactorPhi)*m100 + hSource*dX1_phi*collFactorPhi / 3.0;
-			   m010 = (1.0 - collFactorPhi)*m010 + hSource*dX2_phi*collFactorPhi / 3.0;
-			   m001 = (1.0 - collFactorPhi)*m001 + hSource*dX3_phi*collFactorPhi / 3.0;
-
-			   m110 = 0.0;
-			   m101 = 0.0;
-			   m011 = 0.0;
-
-			   m111 = 0.0;
-
-			   //(200)//
-			   m200 = m000 / 3.0;
-			   m020 = m000 / 3.0;
-			   m002 = m000 / 3.0;
-			   ////
-
-			   //(210)//
-			   m210 = m010 / 3.0;
-			   m201 = m001 / 3.0;
-			   m120 = m100 / 3.0;
-
-
-			   m102 = m100 / 3.0;
-			   m021 = m001 / 3.0;
-			   m012 = m010 / 3.0;
-			   ////
-
-
-			   //(220)//
-			   m220 = m000 / 9.0;
-			   m202 = m000 / 9.0;
-			   m022 = m000 / 9.0;
-			   ////
-
-			   //(221)//
-			   m221 = m001 / 9.0;
-			   m212 = m010 / 9.0;
-			   m122 = m100 / 9.0;
-			   ////
-
-			   //(211)//
-			   m211 = m011 / 3.0;
-			   m121 = m101 / 3.0;
-			   m112 = m110 / 3.0;
-			   ////
-
-			   //(222)//
-			   m222 = m000 / 27.0;
-			   ////
-			   mfaaa = m000 ;
-			   mfbaa = m100;
-			   mfaba = m010;
-			   mfaab = m001;
-			   mfbba = m110;
-			   mfbab = m101;
-			   mfabb = m011;
-			   mfbbb = m111;
-			   mfcaa = m200;
-			   mfaca = m020;
-			   mfaac = m002;
-			   mfcba = m210;
-			   mfabc = m012;
-			   mfcab = m201;
-			   mfacb = m021;
-			   mfbca = m120;
-			   mfbac = m102;
-			   mfcca = m220;
-			   mfcac = m202;
-			   mfacc = m022;
-			   mfccb = m221;
-			   mfcbc = m212;
-			   mfbcc = m122;
-			   mfcbb = m211;
-			   mfbcb = m121;
-			   mfbbc = m112;
-			   mfccc = m222;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //back
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   m0 = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + one* oMdrho) * (uz2 - uz) * c1o2;
-			   m1 = -mfaac - two* mfaab *  uz + mfaaa                * (one - uz2) - one* oMdrho * uz2;
-			   m2 = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + one* oMdrho) * (uz2 + uz) * c1o2;
-			   mfaaa = m0;
-			   mfaab = m1;
-			   mfaac = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2;
-			   m1 = -mfabc - two* mfabb *  uz + mfaba * (one - uz2);
-			   m2 = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2;
-			   mfaba = m0;
-			   mfabb = m1;
-			   mfabc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-			   m1 = -mfacc - two* mfacb *  uz + mfaca                  * (one - uz2) - c1o3 * oMdrho * uz2;
-			   m2 = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-			   mfaca = m0;
-			   mfacb = m1;
-			   mfacc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2;
-			   m1 = -mfbac - two* mfbab *  uz + mfbaa * (one - uz2);
-			   m2 = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2;
-			   mfbaa = m0;
-			   mfbab = m1;
-			   mfbac = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2;
-			   m1 = -mfbbc - two* mfbbb *  uz + mfbba * (one - uz2);
-			   m2 = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2;
-			   mfbba = m0;
-			   mfbbb = m1;
-			   mfbbc = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2;
-			   m1 = -mfbcc - two* mfbcb *  uz + mfbca * (one - uz2);
-			   m2 = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2;
-			   mfbca = m0;
-			   mfbcb = m1;
-			   mfbcc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-			   m1 = -mfcac - two* mfcab *  uz + mfcaa                  * (one - uz2) - c1o3 * oMdrho * uz2;
-			   m2 = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-			   mfcaa = m0;
-			   mfcab = m1;
-			   mfcac = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2;
-			   m1 = -mfcbc - two* mfcbb *  uz + mfcba * (one - uz2);
-			   m2 = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2;
-			   mfcba = m0;
-			   mfcbb = m1;
-			   mfcbc = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2;
-			   m1 = -mfccc - two* mfccb *  uz + mfcca                  * (one - uz2) - c1o9 * oMdrho * uz2;
-			   m2 = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2;
-			   mfcca = m0;
-			   mfccb = m1;
-			   mfccc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   m0 = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-			   m1 = -mfaca - two* mfaba *  uy + mfaaa                  * (one - uy2) - c1o6 * oMdrho * uy2;
-			   m2 = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-			   mfaaa = m0;
-			   mfaba = m1;
-			   mfaca = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2;
-			   m1 = -mfacb - two* mfabb *  uy + mfaab                  * (one - uy2) - c2o3 * oMdrho * uy2;
-			   m2 = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2;
-			   mfaab = m0;
-			   mfabb = m1;
-			   mfacb = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-			   m1 = -mfacc - two* mfabc *  uy + mfaac                  * (one - uy2) - c1o6 * oMdrho * uy2;
-			   m2 = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-			   mfaac = m0;
-			   mfabc = m1;
-			   mfacc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2;
-			   m1 = -mfbca - two* mfbba *  uy + mfbaa * (one - uy2);
-			   m2 = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2;
-			   mfbaa = m0;
-			   mfbba = m1;
-			   mfbca = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2;
-			   m1 = -mfbcb - two* mfbbb *  uy + mfbab * (one - uy2);
-			   m2 = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2;
-			   mfbab = m0;
-			   mfbbb = m1;
-			   mfbcb = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2;
-			   m1 = -mfbcc - two* mfbbc *  uy + mfbac * (one - uy2);
-			   m2 = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2;
-			   mfbac = m0;
-			   mfbbc = m1;
-			   mfbcc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-			   m1 = -mfcca - two* mfcba *  uy + mfcaa                   * (one - uy2) - c1o18 * oMdrho * uy2;
-			   m2 = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-			   mfcaa = m0;
-			   mfcba = m1;
-			   mfcca = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2;
-			   m1 = -mfccb - two* mfcbb *  uy + mfcab                  * (one - uy2) - c2o9 * oMdrho * uy2;
-			   m2 = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2;
-			   mfcab = m0;
-			   mfcbb = m1;
-			   mfccb = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-			   m1 = -mfccc - two* mfcbc *  uy + mfcac                   * (one - uy2) - c1o18 * oMdrho * uy2;
-			   m2 = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-			   mfcac = m0;
-			   mfcbc = m1;
-			   mfccc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   m0 = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-			   m1 = -mfcaa - two* mfbaa *  ux + mfaaa                   * (one - ux2) - c1o36 * oMdrho * ux2;
-			   m2 = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-			   mfaaa = m0;
-			   mfbaa = m1;
-			   mfcaa = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-			   m1 = -mfcba - two* mfbba *  ux + mfaba                  * (one - ux2) - c1o9 * oMdrho * ux2;
-			   m2 = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-			   mfaba = m0;
-			   mfbba = m1;
-			   mfcba = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-			   m1 = -mfcca - two* mfbca *  ux + mfaca                   * (one - ux2) - c1o36 * oMdrho * ux2;
-			   m2 = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-			   mfaca = m0;
-			   mfbca = m1;
-			   mfcca = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-			   m1 = -mfcab - two* mfbab *  ux + mfaab                  * (one - ux2) - c1o9 * oMdrho * ux2;
-			   m2 = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-			   mfaab = m0;
-			   mfbab = m1;
-			   mfcab = m2;
-			   ///////////b////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2;
-			   m1 = -mfcbb - two* mfbbb *  ux + mfabb                  * (one - ux2) - c4o9 * oMdrho * ux2;
-			   m2 = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2;
-			   mfabb = m0;
-			   mfbbb = m1;
-			   mfcbb = m2;
-			   ///////////b////////////////////////////////////////////////////////////////////////
-			   m0 = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-			   m1 = -mfccb - two* mfbcb *  ux + mfacb                  * (one - ux2) - c1o9 * oMdrho * ux2;
-			   m2 = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-			   mfacb = m0;
-			   mfbcb = m1;
-			   mfccb = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-			   m1 = -mfcac - two* mfbac *  ux + mfaac                   * (one - ux2) - c1o36 * oMdrho * ux2;
-			   m2 = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-			   mfaac = m0;
-			   mfbac = m1;
-			   mfcac = m2;
-			   ///////////c////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-			   m1 = -mfcbc - two* mfbbc *  ux + mfabc                  * (one - ux2) - c1o9 * oMdrho * ux2;
-			   m2 = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-			   mfabc = m0;
-			   mfbbc = m1;
-			   mfcbc = m2;
-			   ///////////c////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-			   m1 = -mfccc - two* mfbcc *  ux + mfacc                   * (one - ux2) - c1o36 * oMdrho * ux2;
-			   m2 = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-			   mfacc = m0;
-			   mfbcc = m1;
-			   mfccc = m2;
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-
-			   //////////////////////////////////////////////////////////////////////////
-			   //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 = fabs(rho - rho_post);
-			   dif = drho - drho_post;
-#ifdef SINGLEPRECISION
-			   if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-			   if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-			   {
-				   UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(drho_post)
-					   + " dif=" + UbSystem::toString(dif)
-					   + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-				   //exit(EXIT_FAILURE);
-			   }
-#endif			   
-			   
-			   
-			   //////////////////////////////////////////////////////////////////////////
-			   //write distribution for H
-			   //////////////////////////////////////////////////////////////////////////
-
-			   //(*this->localDistributionsH)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-			   //(*this->localDistributionsH)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-			   //(*this->localDistributionsH)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-			   //(*this->localDistributionsH)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-			   //(*this->localDistributionsH)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-			   //(*this->localDistributionsH)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-			   //(*this->localDistributionsH)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-			   //(*this->localDistributionsH)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-			   //(*this->localDistributionsH)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-			   //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-			   //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-			   //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-			   //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-			   //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-			   //(*this->zeroDistributionsH)(x1,x2,x3) = mfbbb;
-			   
-*/
-			   
-			   
-/////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
-
-			   h[E  ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3);
-			   h[N  ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); 
-			   h[T  ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3);
-			   h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3);
-			   h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3);
-			   h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3);
-			   h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3);
-			   h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3);
-			   h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3);
-			   h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3);
-			   h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3);
-			   h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3);
-			   h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-			   h[W  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3  );
-			   h[S  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3  );
-			   h[B  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p  );
-			   h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 );
-			   h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 );
-			   h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p );
-			   h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p );
-			   h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p );
-			   h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p );
-			   h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-			   h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p);
-			   h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p);
-			   h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-			   h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3);
-			   
-			   
-			   //LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-15;
-			   //LBMReal di = sqrt(8*kappa/beta);
-			   LBMReal tauH1 = 3.0*mob + 0.5;
-			   for (int dir = STARTF; dir < (ENDF+1); dir++)
-			   {
-				   LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz;
-				   LBMReal velSq1 = velProd*velProd;
-				   LBMReal hEq, gEq;
-				   
-				   if (dir != ZERO)
-				   {
-					   //LBMReal dirGrad_phi = DX1[dir]*dX1_phi+DX2[dir]*dX2_phi+DX3[dir]*dX3_phi;
-					   LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0;
-					   LBMReal hSource = (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])*(dirGrad_phi)/denom; // + phi[ZERO]*(dxux + dyuy + dzuz);
-						   
-					   //LBMReal hSource =((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.1 : 1.0) * 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom;
-					   //LBMReal hSource = 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom;
-					   hEq = phi[ZERO]*WEIGTH[dir]*(1.0 + 3.0*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)) + hSource*WEIGTH[dir];
-					   //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir];
-					   //h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5));  /// This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). 
-					   h[dir] = h[dir] - (h[dir] - hEq)/(tauH); // + WEIGTH[dir]*phi[ZERO]*(dxux + dyuy + dzuz);
-					   //h[dir] = h[dir] - (h[dir] - hEq)/(tauH1);
-					   //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir];
-
-				   } 
-				   else
-				   {
-					   hEq = phi[ZERO]*WEIGTH[ZERO]*(1.0 - 1.5*(ux2+uy2+uz2));
-					   //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir];
-					   //h[dir] = hEq;
-					   h[ZERO] = h[ZERO] - (h[ZERO] - hEq)/(tauH); // + WEIGTH[ZERO]*phi[ZERO]*(dxux + dyuy + dzuz);
-					   //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir];
-				   }
-			   }
-			   
-			   
-			   (*this->localDistributionsH)(D3Q27System::ET_E,   x1,  x2,  x3) = h[D3Q27System::INV_E];
-			   (*this->localDistributionsH)(D3Q27System::ET_N,   x1,  x2,  x3) = h[D3Q27System::INV_N];
-			   (*this->localDistributionsH)(D3Q27System::ET_T,   x1,  x2,  x3) = h[D3Q27System::INV_T];
-			   (*this->localDistributionsH)(D3Q27System::ET_NE,  x1,  x2,  x3) = h[D3Q27System::INV_NE];
-			   (*this->localDistributionsH)(D3Q27System::ET_NW,  x1p, x2,  x3) = h[D3Q27System::INV_NW];
-			   (*this->localDistributionsH)(D3Q27System::ET_TE,  x1,  x2,  x3) = h[D3Q27System::INV_TE];
-			   (*this->localDistributionsH)(D3Q27System::ET_TW,  x1p, x2,  x3) = h[D3Q27System::INV_TW];
-			   (*this->localDistributionsH)(D3Q27System::ET_TN,  x1,  x2,  x3) = h[D3Q27System::INV_TN];
-			   (*this->localDistributionsH)(D3Q27System::ET_TS,  x1,  x2p, x3) = h[D3Q27System::INV_TS];
-			   (*this->localDistributionsH)(D3Q27System::ET_TNE, x1,  x2,  x3) = h[D3Q27System::INV_TNE];
-			   (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2,  x3) = h[D3Q27System::INV_TNW];
-			   (*this->localDistributionsH)(D3Q27System::ET_TSE, x1,  x2p, x3) = h[D3Q27System::INV_TSE];
-			   (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW];
-			   
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_W,   x1p, x2,  x3 ) = h[D3Q27System::INV_W ];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_S,   x1,  x2p, x3 ) = h[D3Q27System::INV_S ];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_B,   x1,  x2,  x3p) = h[D3Q27System::INV_B ];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = h[D3Q27System::INV_SW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = h[D3Q27System::INV_SE];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,  x1p, x2,  x3p) = h[D3Q27System::INV_BW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,  x1,  x2,  x3p) = h[D3Q27System::INV_BE];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,  x1,  x2p, x3p) = h[D3Q27System::INV_BS];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,  x1,  x2,  x3p) = h[D3Q27System::INV_BN];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1,  x2p, x3p) = h[D3Q27System::INV_BSE];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2,  x3p) = h[D3Q27System::INV_BNW];
-			   (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1,  x2,  x3p) = h[D3Q27System::INV_BNE];
-			   
-			   (*this->zeroDistributionsH)(x1,x2,x3) = h[D3Q27System::ZERO];			   
-			   
-			   
-/////////////////////   END OF OLD BGK SOLVER ///////////////////////////////
-			   
-
-
-
-
-
-               //////////////////////////////////////////////////////////////////////////
-
-            }
-         }
-      }
-   }
-   dataSet->setPhaseField(divU);
-   
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-double MultiphaseCumulantLBMKernel::getCallculationTime()
-{
-   //return timer.getDuration();
-   return timer.getTotalTime();
-}
-//////////////////////////////////////////////////////////////////////////
-
-LBMReal MultiphaseCumulantLBMKernel::gradX1_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX1[k]*phi[k];
-	}
-	return 3.0*sum;
-}
-
-LBMReal MultiphaseCumulantLBMKernel::gradX2_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX2[k]*phi[k];
-	}
-	return 3.0*sum;
-}
-
-LBMReal MultiphaseCumulantLBMKernel::gradX3_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*DX3[k]*phi[k];
-	}
-	return 3.0*sum;
-}
-
-LBMReal MultiphaseCumulantLBMKernel::nabla2_phi()
-{
-	using namespace D3Q27System;
-	LBMReal sum = 0.0;
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		sum += WEIGTH[k]*(phi[k] - phi[ZERO]);
-	}
-	return 6.0*sum;
-}
-///// Commnets neeeded ////////
-
-void MultiphaseCumulantLBMKernel::computePhasefield()
-{
-	using namespace D3Q27System;
-	DistributionArray3DPtr distributionsH = dataSet->getHdistributions();
-
-	//const int bcArrayMaxX1 = (int)distributionsH->getNX1();
-	//const int bcArrayMaxX2 = (int)distributionsH->getNX2();
-	//const int bcArrayMaxX3 = (int)distributionsH->getNX3();
-
-	int minX1 = ghostLayerWidth;
-	int minX2 = ghostLayerWidth;
-	int minX3 = ghostLayerWidth;
-	int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-	int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-	int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-	//------------- Computing the phase-field ------------------
-	for(int x3 = minX3; x3 < maxX3; x3++)
-	{
-		for(int x2 = minX2; x2 < maxX2; x2++)
-		{
-			for(int x1 = minX1; x1 < maxX1; x1++)
-			{
-				//if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-				{
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					h[E  ] = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3);
-					h[N  ] = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); 
-					h[T  ] = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3);
-					h[NE ] = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3);
-					h[NW ] = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3);
-					h[TE ] = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3);
-					h[TW ] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3);
-					h[TN ] = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3);
-					h[TS ] = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3);
-					h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3);
-					h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3);
-					h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3);
-					h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-					h[W  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3  );
-					h[S  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3  );
-					h[B  ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p  );
-					h[SW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 );
-					h[SE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 );
-					h[BW ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p );
-					h[BE ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p );
-					h[BS ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p );
-					h[BN ] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p );
-					h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-					h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p);
-					h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p);
-					h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-					h[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3);
-
-					/*(*this->phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + 
-						h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];*/
-
-				}
-			}
-		}
-	}
-	//----------------------------------------------------------
-	
-/*
-	/////// Filling ghost nodes for FD computations //////////
-	for(int x1 = minX1; x1 < maxX1; x1++)
-	{
-		for(int x2 = minX2; x2 < maxX2; x2++)
-		{
-			int x3 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1);
-			x3 = maxX3;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3);
-		}
-	}
-	for(int x2 = minX2; x2 < maxX2; x2++)
-	{
-		for(int x3 = minX3; x3 < maxX3; x3++)
-		{
-			int x1 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3);
-			x1 = maxX1;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3);
-		}
-	}
-	for(int x1 = minX1; x1 < maxX1; x1++)
-	{
-		for(int x3 = minX3; x3 < maxX3; x3++)
-		{
-			int x2 = 0;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3);
-			x2 = maxX2;
-			(*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3);
-		}
-	}
-	(*phaseField)(0, 0,     0    ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1);
-	(*phaseField)(0, 0,     maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3  );
-	(*phaseField)(0, maxX2, 0    ) = (*phaseField)(maxX1-1, minX2, maxX3-1  );
-	(*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3    );
-
-	(*phaseField)(maxX1, 0,     0    ) = (*phaseField)(minX1, maxX2-1, maxX3-1);
-	(*phaseField)(maxX1, 0,     maxX3) = (*phaseField)(minX1, maxX2-1, minX3  );
-	(*phaseField)(maxX1, maxX2, 0    ) = (*phaseField)(minX1, minX2, maxX3-1  );
-	(*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3    );
-
-	///////////////////////////////////////////////////////// 
-*/
-}
-
-void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3)
-{
-	using namespace D3Q27System;
-	
-	BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray();
-
-	phi[ZERO] = (*ph)(x1,x2,x3);
-	
-	LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*PI/180);
-	LBMReal a1 = 1 + a;
-	
-	for (int k = FSTARTDIR ; k <= FENDDIR ; k++)
-	{
-		
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]))
-		{
-			phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		} 
-		else
-		{
-			/*
-			if (phi[ZERO] < 1e-2)
-			{
-				phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]);
-			}
-			else
-			{
-				LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]);
-				phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f;
-			}
-			*/
-			
-			phi[k] = (*ph)(x1, x2, x3);
-
-			//if (bcArray->isSolid(x1 + DX1[k], x2, x3))
-			//{
-			//	phi[k] = (*ph)(x1, x2, x3);
-			//	//if (!bcArray->isSolid(x1 , x2 + DX2[k], x3 + DX3[k]))
-			//	//{
-			//	//	//phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]);
-			//	//	LBMReal phi_f = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]);
-			//	//	phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f;
-			//	//} 
-			//	//else
-			//	//{
-			//	//	phi[k] = (*ph)(x1, x2, x3);
-			//	//}
-			//}
-			//
-			//if (bcArray->isSolid(x1 , x2 + DX2[k], x3))
-			//{
-			//	phi[k] = (*ph)(x1, x2, x3);
-			//	//if (!bcArray->isSolid(x1 + DX1[k], x2 , x3 + DX3[k]))
-			//	//{
-			//	//	//phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]);
-			//	//	LBMReal phi_f = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]);
-			//	//	phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f;
-			//	//} 
-			//	//else
-			//	//{
-			//	//	phi[k] = (*ph)(x1, x2, x3);
-			//	//}
-			//}
-
-
-			//if (bcArray->isSolid(x1 , x2, x3+ DX3[k]))
-			//{
-			//	if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3))
-			//	{
-			//		//phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3);
-			//		LBMReal phi_f = (*ph)(x1 + DX1[k], x2 + DX2[k], x3);
-			//		phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f;
-			//	} 
-			//	else
-			//	{
-			//		phi[k] = (*ph)(x1, x2, x3);
-			//	}
-			//}
-
-
-			/*if (bcArray->isSolid(x1 + DX1[k], x2, x3)) phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]);
-			if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]);
-			if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 );*/
-
-			/*if (phi[ZERO] < 0.00001)
-			{
-			phi[k] = 0.0;
-			} 
-			else
-			{
-			phi[k] = 0.5;
-			}*/
-			
-			//phi[k] = 0.5;
-			//phi[k] = (*ph)(x1, x2, x3);
-			//phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]);
-			
-			
-		}
-	}
-
-	/*
-	phi[E  ] = (*ph)(x1 + DX1[E  ], x2 + DX2[E  ], x3 + DX3[E  ]);
-	phi[N  ] = (*ph)(x1 + DX1[N  ], x2 + DX2[N  ], x3 + DX3[N  ]);
-	phi[T  ] = (*ph)(x1 + DX1[T  ], x2 + DX2[T  ], x3 + DX3[T  ]);
-	phi[W  ] = (*ph)(x1 + DX1[W  ], x2 + DX2[W  ], x3 + DX3[W  ]);
-	phi[S  ] = (*ph)(x1 + DX1[S  ], x2 + DX2[S  ], x3 + DX3[S  ]);
-	phi[B  ] = (*ph)(x1 + DX1[B  ], x2 + DX2[B  ], x3 + DX3[B  ]);
-	phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]);
-	phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]);
-	phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]);
-	phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]);
-	phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]);
-	phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]);
-	phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]);
-	phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]);
-	phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]);
-	phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]);
-	phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]);
-	phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]);
-	phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]);
-	phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]);
-	phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]);
-	phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]);
-	phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]);
-	phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]);
-	phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]);
-	phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]);
-	*/
-}
-
-void MultiphaseCumulantLBMKernel::swapDistributions()
-{
-   dataSet->getFdistributions()->swap();
-   dataSet->getHdistributions()->swap();
-   //computePhasefield();
-}
\ No newline at end of file
diff --git a/apps/cpu/Multiphase/backup/Multiphase_Jet.cfg b/apps/cpu/Multiphase/backup/Multiphase_Jet.cfg
deleted file mode 100644
index caa02fe7ad8048a5f658f6a74ea69a044307b90f..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Multiphase_Jet.cfg
+++ /dev/null
@@ -1,75 +0,0 @@
-pathname = /work/hessafar/MultiphaseWOInletTest
-pathGeo = /home/hessafar/projects/VitualFluids/source
-geoFile = JetBreakup2.ast
-#geoFile = FlowFocusingS2_Small.ast
-numOfThreads = 1
-availMem = 10e9
-
-#Grid
-#length = 50 50 50
-#length = 21 6 13
-#boundingBox = x1min x1max x2min x2max x3min x3max [mm]
-#boundingBox = 0.5 219.5 -30 30 -30 30
-#boundingBox = -1 121 -30 30 -30 30
-#boundingBox = -32 128 -12 14 3 58   (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128)
-#blocknx = 10 13 11
-#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5   (FlowFocusing)
-#blocknx = 11 7 10
-#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL)
-#blocknx = 10 13 5
-#boundingBox = 1 179 -21 21 -21 59 (T-Junction)
-#blocknx = 8 7 8
-#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1)
-#blocknx = 6 13 7
-#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2)
-#blocknx = 6 13 7
-#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2)
-#blocknx = 5 9 10
-
-#boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small) (Periodic X2)
-#blocknx = 5 2 9
-
-
-#boundingBox = -24.5 180.5 -1.5 11.5 1.5 64.5 (FlowFocusingS2_Small) (Original was 180.5)
-#blocknx = 5 6 9
-
-#boundingBox = -1.0 121.0 0.5 629.0 -1.0 121.0 (Jet Breakup) (Original with inlet length)
-boundingBox = -60.5 60.5 -1.0 -201.0 -60.5 60.5 (Jet Breakup2) (Original without inlet length)
-blocknx = 22 20 22
-
-#boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Droplet test)
-#blocknx = 10 10 10
-
-dx = 0.5
-refineLevel = 0
-
-#Simulation
-uLB = 0.05
-uF2 = 0.0001
-Re = 10
-nuL = 1.0e-5
-nuG = 1.16e-4
-densityRatio = 30
-sigma = 4.66e-3
-interfaceThickness = 5
-#radius = -5.0   (FlowFocusing2D)
-radius = 615.0   (Jet Breakup)
-contactAngle = 110.0
-gravity = 0.0
-#gravity = -5.04e-6
-phi_L = 0.0
-phi_H = 1.0
-Phase-field Relaxation = 0.6
-Mobility = 0.02
-
-
-logToFile = false
-
-newStart = true
-restartStep = 100000
-
-cpStart = 100000
-cpStep = 100000
-
-outTime = 500
-endTime = 200000000
diff --git a/apps/cpu/Multiphase/backup/T-Junction.FCStd b/apps/cpu/Multiphase/backup/T-Junction.FCStd
deleted file mode 100644
index 7546324577b48ee195aaa8a3172721be4e4d562b..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/T-Junction.FCStd and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/T-Junction.FCStd1 b/apps/cpu/Multiphase/backup/T-Junction.FCStd1
deleted file mode 100644
index f42334cd9105ab78edc27ba44171436be705389a..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/T-Junction.FCStd1 and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/T-Junction.ast b/apps/cpu/Multiphase/backup/T-Junction.ast
deleted file mode 100644
index 9abee7d99250850d8b52ec708994ac822a0fe665..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/T-Junction.ast
+++ /dev/null
@@ -1,2088 +0,0 @@
-solid Mesh
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 41.548100 -5.344658 60.000000
-      vertex 42.514893 -6.631227 60.000000
-      vertex 43.675545 -7.746049 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 55.680649 8.229838 60.000000
-      vertex 54.286926 9.034504 60.000000
-      vertex 52.782173 9.605181 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 55.680649 8.229838 60.000000
-      vertex 52.782173 9.605181 60.000000
-      vertex 51.205368 9.927089 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 55.680649 8.229838 60.000000
-      vertex 43.675545 7.746049 60.000000
-      vertex 59.485363 3.166680 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 55.680649 8.229838 60.000000
-      vertex 47.999744 9.797907 60.000000
-      vertex 43.675545 7.746049 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 55.680649 8.229838 60.000000
-      vertex 51.205368 9.927089 60.000000
-      vertex 47.999744 9.797907 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 57.994427 6.007422 60.000000
-      vertex 59.485363 3.166680 60.000000
-      vertex 58.854561 4.647232 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 40.800205 -3.919666 60.000000
-      vertex 43.675545 -7.746049 60.000000
-      vertex 45.000000 -8.660254 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 57.994427 6.007422 60.000000
-      vertex 55.680649 8.229838 60.000000
-      vertex 59.485363 3.166680 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 40.800205 -3.919666 60.000000
-      vertex 41.548100 -5.344658 60.000000
-      vertex 43.675545 -7.746049 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 56.927242 7.212025 60.000000
-      vertex 55.680649 8.229838 60.000000
-      vertex 57.994427 6.007422 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 47.999744 -9.797907 60.000000
-      vertex 45.000000 -8.660254 60.000000
-      vertex 46.453953 -9.350163 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 40.032429 -0.804666 60.000000
-      vertex 40.290581 -2.393157 60.000000
-      vertex 40.800205 -3.919666 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 40.032429 -0.804666 60.000000
-      vertex 40.800205 -3.919666 60.000000
-      vertex 45.000000 -8.660254 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 51.205368 -9.927089 60.000000
-      vertex 47.999744 -9.797907 60.000000
-      vertex 49.597340 -9.991890 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 40.290581 2.393157 60.000000
-      vertex 40.032429 0.804666 60.000000
-      vertex 40.032429 -0.804666 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 52.782173 -9.605181 60.000000
-      vertex 45.000000 -8.660254 60.000000
-      vertex 47.999744 -9.797907 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 52.782173 -9.605181 60.000000
-      vertex 47.999744 -9.797907 60.000000
-      vertex 51.205368 -9.927089 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 42.514893 6.631227 60.000000
-      vertex 41.548100 5.344658 60.000000
-      vertex 40.800205 3.919666 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 56.927242 -7.212025 60.000000
-      vertex 52.782173 -9.605181 60.000000
-      vertex 54.286926 -9.034504 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 56.927242 -7.212025 60.000000
-      vertex 54.286926 -9.034504 60.000000
-      vertex 55.680649 -8.229838 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 43.675545 7.746049 60.000000
-      vertex 40.800205 3.919666 60.000000
-      vertex 40.290581 2.393157 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 43.675545 7.746049 60.000000
-      vertex 40.290581 2.393157 60.000000
-      vertex 40.032429 -0.804666 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 43.675545 7.746049 60.000000
-      vertex 42.514893 6.631227 60.000000
-      vertex 40.800205 3.919666 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 46.453953 9.350163 60.000000
-      vertex 45.000000 8.660254 60.000000
-      vertex 43.675545 7.746049 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 59.485363 -3.166680 60.000000
-      vertex 56.927242 -7.212025 60.000000
-      vertex 57.994427 -6.007422 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 59.485363 -3.166680 60.000000
-      vertex 57.994427 -6.007422 60.000000
-      vertex 58.854561 -4.647232 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 47.999744 9.797907 60.000000
-      vertex 46.453953 9.350163 60.000000
-      vertex 43.675545 7.746049 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 51.205368 9.927089 60.000000
-      vertex 49.597340 9.991890 60.000000
-      vertex 47.999744 9.797907 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 59.485363 3.166680 60.000000
-      vertex 60.000000 -0.000000 60.000000
-      vertex 59.870502 1.604113 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 59.485363 3.166680 60.000000
-      vertex 59.485363 -3.166680 60.000000
-      vertex 59.870502 -1.604113 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 59.485363 3.166680 60.000000
-      vertex 59.870502 -1.604113 60.000000
-      vertex 60.000000 -0.000000 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 59.485363 3.166680 60.000000
-      vertex 40.032429 -0.804666 60.000000
-      vertex 45.000000 -8.660254 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 59.485363 3.166680 60.000000
-      vertex 45.000000 -8.660254 60.000000
-      vertex 52.782173 -9.605181 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 59.485363 3.166680 60.000000
-      vertex 43.675545 7.746049 60.000000
-      vertex 40.032429 -0.804666 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 59.485363 3.166680 60.000000
-      vertex 52.782173 -9.605181 60.000000
-      vertex 56.927242 -7.212025 60.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 59.485363 3.166680 60.000000
-      vertex 56.927242 -7.212025 60.000000
-      vertex 59.485363 -3.166680 60.000000
-    endloop
-  endfacet
-  facet normal 0.354604 -0.935016 0.000507
-    outer loop
-      vertex 54.286926 -9.034504 60.000000
-      vertex 52.782173 -9.605181 60.000000
-      vertex 53.865475 -9.222695 7.677362
-    endloop
-  endfacet
-  facet normal 0.455679 -0.890144 -0.000469
-    outer loop
-      vertex 54.286926 -9.034504 60.000000
-      vertex 53.865475 -9.222695 7.677362
-      vertex 55.217609 -8.530917 8.439399
-    endloop
-  endfacet
-  facet normal -0.981788 0.189978 -0.000491
-    outer loop
-      vertex 40.290581 2.393157 60.000000
-      vertex 40.380032 2.730610 11.685194
-      vertex 40.055984 1.056659 11.953387
-    endloop
-  endfacet
-  facet normal -0.948536 0.316668 0.000456
-    outer loop
-      vertex 40.290581 2.393157 60.000000
-      vertex 40.800205 3.919666 60.000000
-      vertex 40.380032 2.730610 11.685194
-    endloop
-  endfacet
-  facet normal 0.500000 -0.866025 0.000567
-    outer loop
-      vertex 55.680649 -8.229838 60.000000
-      vertex 54.286926 -9.034504 60.000000
-      vertex 55.217609 -8.530917 8.439399
-    endloop
-  endfacet
-  facet normal 0.597108 -0.802161 -0.000678
-    outer loop
-      vertex 55.680649 -8.229838 60.000000
-      vertex 55.217609 -8.530917 8.439399
-      vertex 56.669765 -7.450787 9.406688
-    endloop
-  endfacet
-  facet normal 0.632446 -0.774604 0.000437
-    outer loop
-      vertex 56.927242 -7.212025 60.000000
-      vertex 55.680649 -8.229838 60.000000
-      vertex 56.669765 -7.450787 9.406688
-    endloop
-  endfacet
-  facet normal 0.733897 -0.679260 -0.000529
-    outer loop
-      vertex 56.927242 -7.212025 60.000000
-      vertex 56.669765 -7.450787 9.406688
-      vertex 57.940296 -6.078792 10.346415
-    endloop
-  endfacet
-  facet normal -0.999691 0.024856 -0.000360
-    outer loop
-      vertex 40.032429 0.804666 60.000000
-      vertex 40.055984 1.056659 11.953387
-      vertex 40.015751 -0.561047 11.986877
-    endloop
-  endfacet
-  facet normal -0.987050 0.160410 0.000357
-    outer loop
-      vertex 40.032429 0.804666 60.000000
-      vertex 40.290581 2.393157 60.000000
-      vertex 40.055984 1.056659 11.953387
-    endloop
-  endfacet
-  facet normal 0.996738 0.080699 -0.000008
-    outer loop
-      vertex 59.870502 1.604113 60.000000
-      vertex 60.000000 -0.000000 12.000000
-      vertex 59.869751 1.608730 11.891677
-    endloop
-  endfacet
-  facet normal 0.748511 -0.663123 0.000137
-    outer loop
-      vertex 57.994427 -6.007422 60.000000
-      vertex 56.927242 -7.212025 60.000000
-      vertex 57.940296 -6.078792 10.346415
-    endloop
-  endfacet
-  facet normal 0.973621 0.228173 0.000007
-    outer loop
-      vertex 59.870502 1.604113 60.000000
-      vertex 59.869751 1.608730 11.891677
-      vertex 59.556835 2.943959 11.633276
-    endloop
-  endfacet
-  facet normal 0.838390 -0.545070 -0.000131
-    outer loop
-      vertex 57.994427 -6.007422 60.000000
-      vertex 57.940296 -6.078792 10.346415
-      vertex 58.777405 -4.791364 11.001946
-    endloop
-  endfacet
-  facet normal 0.996757 0.080467 0.000000
-    outer loop
-      vertex 59.870502 1.604113 60.000000
-      vertex 60.000000 -0.000000 60.000000
-      vertex 60.000000 -0.000000 12.000000
-    endloop
-  endfacet
-  facet normal 0.845190 -0.534467 0.000241
-    outer loop
-      vertex 58.854561 -4.647232 60.000000
-      vertex 57.994427 -6.007422 60.000000
-      vertex 58.777405 -4.791364 11.001946
-    endloop
-  endfacet
-  facet normal 0.936599 0.350403 -0.000230
-    outer loop
-      vertex 59.485363 3.166680 60.000000
-      vertex 59.556835 2.943959 11.633276
-      vertex 59.141815 4.053054 11.294811
-    endloop
-  endfacet
-  facet normal 0.917731 -0.397203 -0.000277
-    outer loop
-      vertex 58.854561 -4.647232 60.000000
-      vertex 58.777405 -4.791364 11.001946
-      vertex 59.500378 -3.121356 11.586938
-    endloop
-  endfacet
-  facet normal 0.970942 0.239316 0.000333
-    outer loop
-      vertex 59.485363 3.166680 60.000000
-      vertex 59.870502 1.604113 60.000000
-      vertex 59.556835 2.943959 11.633276
-    endloop
-  endfacet
-  facet normal 0.919980 -0.391966 -0.000082
-    outer loop
-      vertex 59.485363 -3.166680 60.000000
-      vertex 58.854561 -4.647232 60.000000
-      vertex 59.500378 -3.121356 11.586938
-    endloop
-  endfacet
-  facet normal -0.991290 -0.131696 -0.000324
-    outer loop
-      vertex 40.032429 -0.804666 60.000000
-      vertex 40.015751 -0.561047 11.986877
-      vertex 40.215744 -2.066004 11.820813
-    endloop
-  endfacet
-  facet normal 0.883824 0.467820 -0.000495
-    outer loop
-      vertex 58.854561 4.647232 60.000000
-      vertex 59.141815 4.053054 11.294811
-      vertex 58.490032 5.283877 10.774073
-    endloop
-  endfacet
-  facet normal 0.970137 -0.242556 0.000074
-    outer loop
-      vertex 59.485363 -3.166680 60.000000
-      vertex 59.500378 -3.121356 11.586938
-      vertex 59.851536 -1.716760 11.876562
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000347
-    outer loop
-      vertex 40.032429 -0.804666 60.000000
-      vertex 40.032429 0.804666 60.000000
-      vertex 40.015751 -0.561047 11.986877
-    endloop
-  endfacet
-  facet normal 0.919980 0.391966 0.000644
-    outer loop
-      vertex 58.854561 4.647232 60.000000
-      vertex 59.485363 3.166680 60.000000
-      vertex 59.141815 4.053054 11.294811
-    endloop
-  endfacet
-  facet normal 0.845189 0.534466 0.000654
-    outer loop
-      vertex 57.994427 6.007422 60.000000
-      vertex 58.854561 4.647232 60.000000
-      vertex 58.490032 5.283877 10.774073
-    endloop
-  endfacet
-  facet normal 0.809745 0.586781 -0.000472
-    outer loop
-      vertex 57.994427 6.007422 60.000000
-      vertex 58.490032 5.283877 10.774073
-      vertex 57.662033 6.425983 10.134433
-    endloop
-  endfacet
-  facet normal 0.970942 -0.239316 0.000178
-    outer loop
-      vertex 59.870502 -1.604113 60.000000
-      vertex 59.485363 -3.166680 60.000000
-      vertex 59.851536 -1.716760 11.876562
-    endloop
-  endfacet
-  facet normal 0.996283 -0.086144 -0.000191
-    outer loop
-      vertex 59.870502 -1.604113 60.000000
-      vertex 59.851536 -1.716760 11.876562
-      vertex 60.000000 -0.000000 12.000000
-    endloop
-  endfacet
-  facet normal -0.964233 -0.265056 -0.000302
-    outer loop
-      vertex 40.290581 -2.393157 60.000000
-      vertex 40.215744 -2.066004 11.820813
-      vertex 40.534901 -3.226747 11.558032
-    endloop
-  endfacet
-  facet normal -0.987050 -0.160410 0.000444
-    outer loop
-      vertex 40.290581 -2.393157 60.000000
-      vertex 40.032429 -0.804666 60.000000
-      vertex 40.215744 -2.066004 11.820813
-    endloop
-  endfacet
-  facet normal 0.996757 -0.080467 0.000000
-    outer loop
-      vertex 60.000000 -0.000000 60.000000
-      vertex 59.870502 -1.604113 60.000000
-      vertex 60.000000 -0.000000 12.000000
-    endloop
-  endfacet
-  facet normal 0.748511 0.663123 0.000577
-    outer loop
-      vertex 56.927242 7.212025 60.000000
-      vertex 57.994427 6.007422 60.000000
-      vertex 57.662033 6.425983 10.134433
-    endloop
-  endfacet
-  facet normal 0.708406 0.705805 -0.000687
-    outer loop
-      vertex 56.927242 7.212025 60.000000
-      vertex 57.662033 6.425983 10.134433
-      vertex 56.448730 7.642896 9.251278
-    endloop
-  endfacet
-  facet normal -0.921845 -0.387558 -0.000495
-    outer loop
-      vertex 40.800205 -3.919666 60.000000
-      vertex 40.534901 -3.226747 11.558032
-      vertex 41.074001 -4.508494 11.120858
-    endloop
-  endfacet
-  facet normal -0.948536 -0.316668 0.000665
-    outer loop
-      vertex 40.800205 -3.919666 60.000000
-      vertex 40.290581 -2.393157 60.000000
-      vertex 40.534901 -3.226747 11.558032
-    endloop
-  endfacet
-  facet normal 0.567662 0.823261 -0.000930
-    outer loop
-      vertex 55.680649 8.229838 60.000000
-      vertex 56.448730 7.642896 9.251278
-      vertex 54.842255 8.749433 8.212639
-    endloop
-  endfacet
-  facet normal 0.632446 0.774604 0.000613
-    outer loop
-      vertex 55.680649 8.229838 60.000000
-      vertex 56.927242 7.212025 60.000000
-      vertex 56.448730 7.642896 9.251278
-    endloop
-  endfacet
-  facet normal 0.404679 0.914459 -0.000694
-    outer loop
-      vertex 54.286926 9.034504 60.000000
-      vertex 54.842255 8.749433 8.212639
-      vertex 53.213177 9.469715 7.370516
-    endloop
-  endfacet
-  facet normal -0.859338 -0.511408 -0.000413
-    outer loop
-      vertex 41.548100 -5.344658 60.000000
-      vertex 41.074001 -4.508494 11.120858
-      vertex 41.782188 -5.698035 10.560890
-    endloop
-  endfacet
-  facet normal 0.500000 0.866025 0.000594
-    outer loop
-      vertex 54.286926 9.034504 60.000000
-      vertex 55.680649 8.229838 60.000000
-      vertex 54.842255 8.749433 8.212639
-    endloop
-  endfacet
-  facet normal -0.885456 -0.464723 0.000638
-    outer loop
-      vertex 41.548100 -5.344658 60.000000
-      vertex 40.800205 -3.919666 60.000000
-      vertex 41.074001 -4.508494 11.120858
-    endloop
-  endfacet
-  facet normal 0.263490 0.964662 -0.000325
-    outer loop
-      vertex 52.782173 9.605181 60.000000
-      vertex 53.213177 9.469715 7.370516
-      vertex 52.044731 9.788722 6.941248
-    endloop
-  endfacet
-  facet normal 0.354604 0.935016 0.000497
-    outer loop
-      vertex 52.782173 9.605181 60.000000
-      vertex 54.286926 9.034504 60.000000
-      vertex 53.213177 9.469715 7.370516
-    endloop
-  endfacet
-  facet normal -0.771350 -0.636411 -0.000581
-    outer loop
-      vertex 42.514893 -6.631227 60.000000
-      vertex 41.782188 -5.698035 10.560890
-      vertex 42.848557 -6.989770 9.754133
-    endloop
-  endfacet
-  facet normal -0.799443 -0.600742 0.000509
-    outer loop
-      vertex 42.514893 -6.631227 60.000000
-      vertex 41.548100 -5.344658 60.000000
-      vertex 41.782188 -5.698035 10.560890
-    endloop
-  endfacet
-  facet normal 0.132345 0.991204 -0.000491
-    outer loop
-      vertex 51.205368 9.927089 60.000000
-      vertex 52.044731 9.788722 6.941248
-      vertex 50.593201 9.982390 6.659721
-    endloop
-  endfacet
-  facet normal 0.200026 0.979790 0.000609
-    outer loop
-      vertex 51.205368 9.927089 60.000000
-      vertex 52.782173 9.605181 60.000000
-      vertex 52.044731 9.788722 6.941248
-    endloop
-  endfacet
-  facet normal -0.646138 -0.763221 -0.000853
-    outer loop
-      vertex 43.675545 -7.746049 60.000000
-      vertex 42.848557 -6.989770 9.754133
-      vertex 44.293537 -8.211959 8.750070
-    endloop
-  endfacet
-  facet normal -0.692725 -0.721202 0.000546
-    outer loop
-      vertex 43.675545 -7.746049 60.000000
-      vertex 42.514893 -6.631227 60.000000
-      vertex 42.848557 -6.989770 9.754133
-    endloop
-  endfacet
-  facet normal -0.009882 0.999951 -0.000363
-    outer loop
-      vertex 49.597340 9.991890 60.000000
-      vertex 50.593201 9.982390 6.659721
-      vertex 49.209751 9.968726 6.680157
-    endloop
-  endfacet
-  facet normal 0.040266 0.999189 0.000574
-    outer loop
-      vertex 49.597340 9.991890 60.000000
-      vertex 51.205368 9.927089 60.000000
-      vertex 50.593201 9.982390 6.659721
-    endloop
-  endfacet
-  facet normal -0.495631 -0.868533 -0.000765
-    outer loop
-      vertex 45.000000 -8.660254 60.000000
-      vertex 44.293537 -8.211959 8.750070
-      vertex 45.840042 -9.093665 7.829767
-    endloop
-  endfacet
-  facet normal -0.137559 0.990494 0.000052
-    outer loop
-      vertex 47.999744 9.797907 60.000000
-      vertex 49.209751 9.968726 6.680157
-      vertex 48.043625 9.806763 6.915736
-    endloop
-  endfacet
-  facet normal -0.568064 -0.822984 0.000632
-    outer loop
-      vertex 45.000000 -8.660254 60.000000
-      vertex 43.675545 -7.746049 60.000000
-      vertex 44.293537 -8.211959 8.750070
-    endloop
-  endfacet
-  facet normal -0.249430 0.968393 -0.000045
-    outer loop
-      vertex 47.999744 9.797907 60.000000
-      vertex 48.043625 9.806763 6.915736
-      vertex 46.975643 9.531698 7.290181
-    endloop
-  endfacet
-  facet normal -0.120537 0.992709 0.000445
-    outer loop
-      vertex 47.999744 9.797907 60.000000
-      vertex 49.597340 9.991890 60.000000
-      vertex 49.209751 9.968726 6.680157
-    endloop
-  endfacet
-  facet normal -0.368876 0.929478 -0.000450
-    outer loop
-      vertex 46.453953 9.350163 60.000000
-      vertex 46.975643 9.531698 7.290181
-      vertex 45.668846 9.013384 7.922052
-    endloop
-  endfacet
-  facet normal -0.335392 -0.942078 -0.000685
-    outer loop
-      vertex 46.453953 -9.350163 60.000000
-      vertex 45.840042 -9.093665 7.829767
-      vertex 47.483089 -9.678077 7.094705
-    endloop
-  endfacet
-  facet normal -0.278218 0.960518 0.000554
-    outer loop
-      vertex 46.453953 9.350163 60.000000
-      vertex 47.999744 9.797907 60.000000
-      vertex 46.975643 9.531698 7.290181
-    endloop
-  endfacet
-  facet normal -0.428692 -0.903451 0.000603
-    outer loop
-      vertex 46.453953 -9.350163 60.000000
-      vertex 45.000000 -8.660254 60.000000
-      vertex 45.840042 -9.093665 7.829767
-    endloop
-  endfacet
-  facet normal -0.502281 0.864704 -0.000588
-    outer loop
-      vertex 45.000000 8.660254 60.000000
-      vertex 45.668846 9.013384 7.922052
-      vertex 44.321312 8.231192 8.731980
-    endloop
-  endfacet
-  facet normal -0.428692 0.903451 0.000620
-    outer loop
-      vertex 45.000000 8.660254 60.000000
-      vertex 46.453953 9.350163 60.000000
-      vertex 45.668846 9.013384 7.922052
-    endloop
-  endfacet
-  facet normal -0.641328 0.767266 -0.000818
-    outer loop
-      vertex 43.675545 7.746049 60.000000
-      vertex 44.321312 8.231192 8.731980
-      vertex 42.912872 7.054971 9.707079
-    endloop
-  endfacet
-  facet normal -0.278218 -0.960518 0.000541
-    outer loop
-      vertex 47.999744 -9.797907 60.000000
-      vertex 46.453953 -9.350163 60.000000
-      vertex 47.483089 -9.678077 7.094705
-    endloop
-  endfacet
-  facet normal -0.568064 0.822984 0.000632
-    outer loop
-      vertex 43.675545 7.746049 60.000000
-      vertex 45.000000 8.660254 60.000000
-      vertex 44.321312 8.231192 8.731980
-    endloop
-  endfacet
-  facet normal -0.190108 -0.981763 -0.000367
-    outer loop
-      vertex 47.999744 -9.797907 60.000000
-      vertex 47.483089 -9.678077 7.094705
-      vertex 48.724289 -9.918295 6.754808
-    endloop
-  endfacet
-  facet normal -0.771686 0.636003 -0.000748
-    outer loop
-      vertex 42.514893 6.631227 60.000000
-      vertex 42.912872 7.054971 9.707079
-      vertex 41.725323 5.615130 10.605202
-    endloop
-  endfacet
-  facet normal -0.692725 0.721202 0.000595
-    outer loop
-      vertex 42.514893 6.631227 60.000000
-      vertex 43.675545 7.746049 60.000000
-      vertex 42.912872 7.054971 9.707079
-    endloop
-  endfacet
-  facet normal -0.120537 -0.992709 0.000604
-    outer loop
-      vertex 49.597340 -9.991890 60.000000
-      vertex 47.999744 -9.797907 60.000000
-      vertex 48.724289 -9.918295 6.754808
-    endloop
-  endfacet
-  facet normal -0.085718 -0.996319 0.000028
-    outer loop
-      vertex 49.597340 -9.991890 60.000000
-      vertex 48.724289 -9.918295 6.754808
-      vertex 49.562771 -9.990437 6.647644
-    endloop
-  endfacet
-  facet normal -0.000150 -1.000000 -0.000027
-    outer loop
-      vertex 49.597340 -9.991890 60.000000
-      vertex 49.562771 -9.990437 6.647644
-      vertex 50.434238 -9.990567 6.647448
-    endloop
-  endfacet
-  facet normal -0.869310 0.494268 -0.000413
-    outer loop
-      vertex 41.548100 5.344658 60.000000
-      vertex 41.725323 5.615130 10.605202
-      vertex 40.944370 4.242121 11.225168
-    endloop
-  endfacet
-  facet normal -0.799443 0.600742 0.000421
-    outer loop
-      vertex 41.548100 5.344658 60.000000
-      vertex 42.514893 6.631227 60.000000
-      vertex 41.725323 5.615130 10.605202
-    endloop
-  endfacet
-  facet normal 0.040266 -0.999189 0.000607
-    outer loop
-      vertex 51.205368 -9.927089 60.000000
-      vertex 49.597340 -9.991890 60.000000
-      vertex 50.434238 -9.990567 6.647448
-    endloop
-  endfacet
-  facet normal 0.095514 -0.995428 -0.000196
-    outer loop
-      vertex 51.205368 -9.927089 60.000000
-      vertex 50.434238 -9.990567 6.647448
-      vertex 51.472881 -9.890936 6.794806
-    endloop
-  endfacet
-  facet normal 0.201349 -0.979520 0.000347
-    outer loop
-      vertex 51.205368 -9.927089 60.000000
-      vertex 51.472881 -9.890936 6.794806
-      vertex 52.549927 -9.669430 7.106485
-    endloop
-  endfacet
-  facet normal -0.936879 0.349654 -0.000458
-    outer loop
-      vertex 40.800205 3.919666 60.000000
-      vertex 40.944370 4.242121 11.225168
-      vertex 40.380032 2.730610 11.685194
-    endloop
-  endfacet
-  facet normal -0.885456 0.464723 0.000455
-    outer loop
-      vertex 40.800205 3.919666 60.000000
-      vertex 41.548100 5.344658 60.000000
-      vertex 40.944370 4.242121 11.225168
-    endloop
-  endfacet
-  facet normal 0.200026 -0.979791 0.000312
-    outer loop
-      vertex 52.782173 -9.605181 60.000000
-      vertex 51.205368 -9.927089 60.000000
-      vertex 52.549927 -9.669430 7.106485
-    endloop
-  endfacet
-  facet normal 0.321649 -0.946859 -0.000262
-    outer loop
-      vertex 52.782173 -9.605181 60.000000
-      vertex 52.549927 -9.669430 7.106485
-      vertex 53.865475 -9.222695 7.677362
-    endloop
-  endfacet
-  facet normal 0.000000 0.995974 0.089639
-    outer loop
-      vertex 180.000000 11.807155 2.142683
-      vertex 0.000000 12.000000 -0.000000
-      vertex 0.000000 11.807155 2.142683
-    endloop
-  endfacet
-  facet normal 0.000000 0.995974 0.089639
-    outer loop
-      vertex 180.000000 11.807155 2.142683
-      vertex 180.000000 12.000000 -0.000000
-      vertex 0.000000 12.000000 -0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.963963 0.266037
-    outer loop
-      vertex 180.000000 11.234818 4.216498
-      vertex 0.000000 11.807155 2.142683
-      vertex 0.000000 11.234818 4.216498
-    endloop
-  endfacet
-  facet normal 0.000000 0.963963 0.266037
-    outer loop
-      vertex 180.000000 11.234818 4.216498
-      vertex 180.000000 11.807155 2.142683
-      vertex 0.000000 11.807155 2.142683
-    endloop
-  endfacet
-  facet normal 0.001350 0.900968 0.433883
-    outer loop
-      vertex 50.593201 9.982390 6.659721
-      vertex 0.000000 11.234818 4.216498
-      vertex 0.000000 10.301386 6.154791
-    endloop
-  endfacet
-  facet normal 0.000000 0.889892 0.456170
-    outer loop
-      vertex 50.593201 9.982390 6.659721
-      vertex 180.000000 11.234818 4.216498
-      vertex 0.000000 11.234818 4.216498
-    endloop
-  endfacet
-  facet normal -0.000184 0.836995 0.547211
-    outer loop
-      vertex 49.209751 9.968726 6.680157
-      vertex 50.593201 9.982390 6.659721
-      vertex 0.000000 10.301386 6.154791
-    endloop
-  endfacet
-  facet normal -0.000454 0.825086 0.565007
-    outer loop
-      vertex 48.043625 9.806763 6.915736
-      vertex 49.209751 9.968726 6.680157
-      vertex 0.000000 10.301386 6.154791
-    endloop
-  endfacet
-  facet normal -0.000981 0.809017 0.587785
-    outer loop
-      vertex 0.000000 9.036858 7.895265
-      vertex 48.043625 9.806763 6.915736
-      vertex 0.000000 10.301386 6.154791
-    endloop
-  endfacet
-  facet normal -0.000898 0.807141 0.590358
-    outer loop
-      vertex 46.975643 9.531698 7.290181
-      vertex 48.043625 9.806763 6.915736
-      vertex 0.000000 9.036858 7.895265
-    endloop
-  endfacet
-  facet normal 0.000025 0.773134 0.634243
-    outer loop
-      vertex 45.668846 9.013384 7.922052
-      vertex 46.975643 9.531698 7.290181
-      vertex 0.000000 9.036858 7.895265
-    endloop
-  endfacet
-  facet normal -0.000528 0.900969 0.433884
-    outer loop
-      vertex 180.000000 10.301386 6.154791
-      vertex 180.000000 11.234818 4.216498
-      vertex 50.593201 9.982390 6.659721
-    endloop
-  endfacet
-  facet normal 0.000177 0.824306 0.566145
-    outer loop
-      vertex 180.000000 10.301386 6.154791
-      vertex 50.593201 9.982390 6.659721
-      vertex 52.044731 9.788722 6.941248
-    endloop
-  endfacet
-  facet normal -0.001083 0.691062 0.722794
-    outer loop
-      vertex 0.000000 7.481878 9.381978
-      vertex 44.321312 8.231192 8.731980
-      vertex 0.000000 9.036858 7.895265
-    endloop
-  endfacet
-  facet normal 0.000371 0.809017 0.587785
-    outer loop
-      vertex 180.000000 9.036858 7.895265
-      vertex 180.000000 10.301386 6.154791
-      vertex 52.044731 9.788722 6.941248
-    endloop
-  endfacet
-  facet normal -0.000096 0.759849 0.650099
-    outer loop
-      vertex 180.000000 9.036858 7.895265
-      vertex 53.213177 9.469715 7.370516
-      vertex 54.842255 8.749433 8.212639
-    endloop
-  endfacet
-  facet normal 0.000275 0.802992 0.595989
-    outer loop
-      vertex 180.000000 9.036858 7.895265
-      vertex 52.044731 9.788722 6.941248
-      vertex 53.213177 9.469715 7.370516
-    endloop
-  endfacet
-  facet normal -0.000842 0.550897 0.834573
-    outer loop
-      vertex 0.000000 5.686424 10.567146
-      vertex 42.912872 7.054971 9.707079
-      vertex 0.000000 7.481878 9.381978
-    endloop
-  endfacet
-  facet normal 0.000246 0.691063 0.722795
-    outer loop
-      vertex 180.000000 7.481878 9.381978
-      vertex 180.000000 9.036858 7.895265
-      vertex 54.842255 8.749433 8.212639
-    endloop
-  endfacet
-  facet normal -0.000914 0.393025 0.919527
-    outer loop
-      vertex 40.944370 4.242121 11.225168
-      vertex 0.000000 5.686424 10.567146
-      vertex 0.000000 3.708204 11.412678
-    endloop
-  endfacet
-  facet normal 0.000378 0.550897 0.834573
-    outer loop
-      vertex 180.000000 5.686424 10.567146
-      vertex 180.000000 7.481878 9.381978
-      vertex 57.662033 6.425983 10.134433
-    endloop
-  endfacet
-  facet normal -0.000133 0.488565 0.872527
-    outer loop
-      vertex 180.000000 5.686424 10.567146
-      vertex 57.662033 6.425983 10.134433
-      vertex 58.490032 5.283877 10.774073
-    endloop
-  endfacet
-  facet normal -0.001192 0.222521 0.974927
-    outer loop
-      vertex 0.000000 1.610799 11.891397
-      vertex 40.380032 2.730610 11.685194
-      vertex 0.000000 3.708204 11.412678
-    endloop
-  endfacet
-  facet normal -0.000100 0.291849 0.956464
-    outer loop
-      vertex 180.000000 3.708204 11.412678
-      vertex 59.141815 4.053054 11.294811
-      vertex 59.556835 2.943959 11.633276
-    endloop
-  endfacet
-  facet normal 0.000214 0.389740 0.920925
-    outer loop
-      vertex 180.000000 3.708204 11.412678
-      vertex 58.490032 5.283877 10.774073
-      vertex 59.141815 4.053054 11.294811
-    endloop
-  endfacet
-  facet normal 0.000264 0.393025 0.919528
-    outer loop
-      vertex 180.000000 3.708204 11.412678
-      vertex 180.000000 5.686424 10.567146
-      vertex 58.490032 5.283877 10.774073
-    endloop
-  endfacet
-  facet normal -0.000925 0.044865 0.998993
-    outer loop
-      vertex 0.000000 -0.538378 11.987917
-      vertex 40.055984 1.056659 11.953387
-      vertex 0.000000 1.610799 11.891397
-    endloop
-  endfacet
-  facet normal 0.000001 0.067182 0.997741
-    outer loop
-      vertex 180.000000 1.610799 11.891397
-      vertex 59.869751 1.608730 11.891677
-      vertex 60.000000 -0.000000 12.000000
-    endloop
-  endfacet
-  facet normal -0.000001 0.190000 0.981784
-    outer loop
-      vertex 180.000000 1.610799 11.891397
-      vertex 59.556835 2.943959 11.633276
-      vertex 59.869751 1.608730 11.891677
-    endloop
-  endfacet
-  facet normal 0.000374 0.222521 0.974928
-    outer loop
-      vertex 180.000000 1.610799 11.891397
-      vertex 180.000000 3.708204 11.412678
-      vertex 59.556835 2.943959 11.633276
-    endloop
-  endfacet
-  facet normal -0.000981 -0.134233 0.990949
-    outer loop
-      vertex 40.215744 -2.066004 11.820813
-      vertex 0.000000 -0.538378 11.987917
-      vertex 0.000000 -2.670251 11.699135
-    endloop
-  endfacet
-  facet normal 0.000302 0.044865 0.998993
-    outer loop
-      vertex 180.000000 -0.538378 11.987917
-      vertex 180.000000 1.610799 11.891397
-      vertex 60.000000 -0.000000 12.000000
-    endloop
-  endfacet
-  facet normal -0.000221 -0.071697 0.997426
-    outer loop
-      vertex 180.000000 -0.538378 11.987917
-      vertex 60.000000 -0.000000 12.000000
-      vertex 59.851536 -1.716760 11.876562
-    endloop
-  endfacet
-  facet normal 0.000365 -0.220707 0.975340
-    outer loop
-      vertex 40.534901 -3.226747 11.558032
-      vertex 40.215744 -2.066004 11.820813
-      vertex 0.000000 -2.670251 11.699135
-    endloop
-  endfacet
-  facet normal -0.000932 -0.309017 0.951056
-    outer loop
-      vertex 0.000000 -4.716300 11.034333
-      vertex 40.534901 -3.226747 11.558032
-      vertex 0.000000 -2.670251 11.699135
-    endloop
-  endfacet
-  facet normal -0.000360 -0.322951 0.946416
-    outer loop
-      vertex 41.074001 -4.508494 11.120858
-      vertex 40.534901 -3.226747 11.558032
-      vertex 0.000000 -4.716300 11.034333
-    endloop
-  endfacet
-  facet normal 0.000398 -0.134233 0.990950
-    outer loop
-      vertex 180.000000 -2.670251 11.699135
-      vertex 180.000000 -0.538378 11.987917
-      vertex 59.851536 -1.716760 11.876562
-    endloop
-  endfacet
-  facet normal -0.000156 -0.201912 0.979404
-    outer loop
-      vertex 180.000000 -2.670251 11.699135
-      vertex 59.851536 -1.716760 11.876562
-      vertex 59.500378 -3.121356 11.586938
-    endloop
-  endfacet
-  facet normal -0.001156 -0.473868 0.880595
-    outer loop
-      vertex 0.000000 -6.610764 10.014879
-      vertex 41.782188 -5.698035 10.560890
-      vertex 0.000000 -4.716300 11.034333
-    endloop
-  endfacet
-  facet normal 0.000043 -0.453768 0.891120
-    outer loop
-      vertex 180.000000 -4.716300 11.034333
-      vertex 58.777405 -4.791364 11.001946
-      vertex 57.940296 -6.078792 10.346415
-    endloop
-  endfacet
-  facet normal -0.000047 -0.330578 0.943779
-    outer loop
-      vertex 180.000000 -4.716300 11.034333
-      vertex 59.500378 -3.121356 11.586938
-      vertex 58.777405 -4.791364 11.001946
-    endloop
-  endfacet
-  facet normal 0.000271 -0.309017 0.951057
-    outer loop
-      vertex 180.000000 -4.716300 11.034333
-      vertex 180.000000 -2.670251 11.699135
-      vertex 59.500378 -3.121356 11.586938
-    endloop
-  endfacet
-  facet normal -0.000757 -0.623490 0.781831
-    outer loop
-      vertex 0.000000 -8.292751 8.673538
-      vertex 42.848557 -6.989770 9.754133
-      vertex 0.000000 -6.610764 10.014879
-    endloop
-  endfacet
-  facet normal 0.000327 -0.473869 0.880596
-    outer loop
-      vertex 180.000000 -6.610764 10.014879
-      vertex 180.000000 -4.716300 11.034333
-      vertex 57.940296 -6.078792 10.346415
-    endloop
-  endfacet
-  facet normal -0.001047 -0.753071 0.657939
-    outer loop
-      vertex 0.000000 -9.708204 7.053423
-      vertex 45.840042 -9.093665 7.829767
-      vertex 0.000000 -8.292751 8.673538
-    endloop
-  endfacet
-  facet normal 0.000153 -0.740550 0.672002
-    outer loop
-      vertex 180.000000 -8.292751 8.673538
-      vertex 55.217609 -8.530917 8.439399
-      vertex 53.865475 -9.222695 7.677362
-    endloop
-  endfacet
-  facet normal 0.000391 -0.623490 0.781831
-    outer loop
-      vertex 180.000000 -8.292751 8.673538
-      vertex 180.000000 -6.610764 10.014879
-      vertex 56.669765 -7.450787 9.406688
-    endloop
-  endfacet
-  facet normal 0.000016 -0.816610 0.577190
-    outer loop
-      vertex 48.724289 -9.918295 6.754808
-      vertex 47.483089 -9.678077 7.094705
-      vertex 0.000000 -9.708204 7.053423
-    endloop
-  endfacet
-  facet normal -0.000162 -0.830133 0.557565
-    outer loop
-      vertex 49.562771 -9.990437 6.647644
-      vertex 48.724289 -9.918295 6.754808
-      vertex 0.000000 -9.708204 7.053423
-    endloop
-  endfacet
-  facet normal -0.000019 -0.868552 0.495599
-    outer loop
-      vertex 0.000000 -10.811626 5.206605
-      vertex 50.434238 -9.990567 6.647448
-      vertex 49.562771 -9.990437 6.647644
-    endloop
-  endfacet
-  facet normal -0.000689 -0.858449 0.512899
-    outer loop
-      vertex 0.000000 -10.811626 5.206605
-      vertex 49.562771 -9.990437 6.647644
-      vertex 0.000000 -9.708204 7.053423
-    endloop
-  endfacet
-  facet normal 0.000052 -0.828587 0.559861
-    outer loop
-      vertex 180.000000 -9.708204 7.053423
-      vertex 51.472881 -9.890936 6.794806
-      vertex 50.434238 -9.990567 6.647448
-    endloop
-  endfacet
-  facet normal -0.000007 -0.815108 0.579309
-    outer loop
-      vertex 180.000000 -9.708204 7.053423
-      vertex 52.549927 -9.669430 7.106485
-      vertex 51.472881 -9.890936 6.794806
-    endloop
-  endfacet
-  facet normal 0.000017 -0.787550 0.616251
-    outer loop
-      vertex 180.000000 -9.708204 7.053423
-      vertex 53.865475 -9.222695 7.677362
-      vertex 52.549927 -9.669430 7.106485
-    endloop
-  endfacet
-  facet normal 0.000356 -0.753071 0.657939
-    outer loop
-      vertex 180.000000 -9.708204 7.053423
-      vertex 180.000000 -8.292751 8.673538
-      vertex 53.865475 -9.222695 7.677362
-    endloop
-  endfacet
-  facet normal 0.000000 -0.868835 0.495102
-    outer loop
-      vertex 180.000000 -10.811626 5.206605
-      vertex 50.434238 -9.990567 6.647448
-      vertex 0.000000 -10.811626 5.206605
-    endloop
-  endfacet
-  facet normal 0.000264 -0.858449 0.512899
-    outer loop
-      vertex 180.000000 -10.811626 5.206605
-      vertex 180.000000 -9.708204 7.053423
-      vertex 50.434238 -9.990567 6.647448
-    endloop
-  endfacet
-  facet normal 0.000000 -0.936235 0.351375
-    outer loop
-      vertex 180.000000 -11.567554 3.192442
-      vertex 0.000000 -10.811626 5.206605
-      vertex 0.000000 -11.567554 3.192442
-    endloop
-  endfacet
-  facet normal 0.000000 -0.936235 0.351375
-    outer loop
-      vertex 180.000000 -11.567554 3.192442
-      vertex 180.000000 -10.811626 5.206605
-      vertex 0.000000 -10.811626 5.206605
-    endloop
-  endfacet
-  facet normal 0.000000 -0.983930 0.178557
-    outer loop
-      vertex 180.000000 -11.951692 1.075672
-      vertex 0.000000 -11.567554 3.192442
-      vertex 0.000000 -11.951692 1.075672
-    endloop
-  endfacet
-  facet normal 0.000000 -0.983930 0.178557
-    outer loop
-      vertex 180.000000 -11.951692 1.075672
-      vertex 180.000000 -11.567554 3.192442
-      vertex 0.000000 -11.567554 3.192442
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 180.000000 -11.951692 -1.075672
-      vertex 0.000000 -11.951692 1.075672
-      vertex 0.000000 -11.951692 -1.075672
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 180.000000 -11.951692 -1.075672
-      vertex 180.000000 -11.951692 1.075672
-      vertex 0.000000 -11.951692 1.075672
-    endloop
-  endfacet
-  facet normal -0.000000 -0.983930 -0.178557
-    outer loop
-      vertex 180.000000 -11.567554 -3.192442
-      vertex 0.000000 -11.951692 -1.075672
-      vertex 0.000000 -11.567554 -3.192442
-    endloop
-  endfacet
-  facet normal 0.000000 -0.983930 -0.178557
-    outer loop
-      vertex 180.000000 -11.567554 -3.192442
-      vertex 180.000000 -11.951692 -1.075672
-      vertex 0.000000 -11.951692 -1.075672
-    endloop
-  endfacet
-  facet normal -0.000000 -0.936235 -0.351375
-    outer loop
-      vertex 180.000000 -10.811626 -5.206605
-      vertex 0.000000 -11.567554 -3.192442
-      vertex 0.000000 -10.811626 -5.206605
-    endloop
-  endfacet
-  facet normal 0.000000 -0.936235 -0.351375
-    outer loop
-      vertex 180.000000 -10.811626 -5.206605
-      vertex 180.000000 -11.567554 -3.192442
-      vertex 0.000000 -11.567554 -3.192442
-    endloop
-  endfacet
-  facet normal 0.000000 -0.858449 -0.512899
-    outer loop
-      vertex 180.000000 -9.708204 -7.053423
-      vertex 180.000000 -10.811626 -5.206605
-      vertex 0.000000 -10.811626 -5.206605
-    endloop
-  endfacet
-  facet normal -0.000000 -0.858449 -0.512899
-    outer loop
-      vertex 180.000000 -9.708204 -7.053423
-      vertex 0.000000 -10.811626 -5.206605
-      vertex 0.000000 -9.708204 -7.053423
-    endloop
-  endfacet
-  facet normal 0.000000 -0.753071 -0.657939
-    outer loop
-      vertex 180.000000 -8.292751 -8.673538
-      vertex 180.000000 -9.708204 -7.053423
-      vertex 0.000000 -9.708204 -7.053423
-    endloop
-  endfacet
-  facet normal -0.000000 -0.753071 -0.657939
-    outer loop
-      vertex 180.000000 -8.292751 -8.673538
-      vertex 0.000000 -9.708204 -7.053423
-      vertex 0.000000 -8.292751 -8.673538
-    endloop
-  endfacet
-  facet normal 0.000000 -0.623490 -0.781831
-    outer loop
-      vertex 180.000000 -6.610764 -10.014879
-      vertex 180.000000 -8.292751 -8.673538
-      vertex 0.000000 -8.292751 -8.673538
-    endloop
-  endfacet
-  facet normal -0.000000 -0.623490 -0.781831
-    outer loop
-      vertex 180.000000 -6.610764 -10.014879
-      vertex 0.000000 -8.292751 -8.673538
-      vertex 0.000000 -6.610764 -10.014879
-    endloop
-  endfacet
-  facet normal 0.000000 -0.473869 -0.880596
-    outer loop
-      vertex 180.000000 -4.716300 -11.034333
-      vertex 180.000000 -6.610764 -10.014879
-      vertex 0.000000 -6.610764 -10.014879
-    endloop
-  endfacet
-  facet normal -0.000000 -0.473869 -0.880596
-    outer loop
-      vertex 180.000000 -4.716300 -11.034333
-      vertex 0.000000 -6.610764 -10.014879
-      vertex 0.000000 -4.716300 -11.034333
-    endloop
-  endfacet
-  facet normal 0.000000 -0.309017 -0.951056
-    outer loop
-      vertex 180.000000 -2.670251 -11.699135
-      vertex 180.000000 -4.716300 -11.034333
-      vertex 0.000000 -4.716300 -11.034333
-    endloop
-  endfacet
-  facet normal -0.000000 -0.309017 -0.951056
-    outer loop
-      vertex 180.000000 -2.670251 -11.699135
-      vertex 0.000000 -4.716300 -11.034333
-      vertex 0.000000 -2.670251 -11.699135
-    endloop
-  endfacet
-  facet normal 0.000000 -0.134233 -0.990950
-    outer loop
-      vertex 180.000000 -0.538378 -11.987917
-      vertex 180.000000 -2.670251 -11.699135
-      vertex 0.000000 -2.670251 -11.699135
-    endloop
-  endfacet
-  facet normal -0.000000 -0.134233 -0.990950
-    outer loop
-      vertex 180.000000 -0.538378 -11.987917
-      vertex 0.000000 -2.670251 -11.699135
-      vertex 0.000000 -0.538378 -11.987917
-    endloop
-  endfacet
-  facet normal 0.000000 0.044865 -0.998993
-    outer loop
-      vertex 180.000000 1.610799 -11.891397
-      vertex 180.000000 -0.538378 -11.987917
-      vertex 0.000000 -0.538378 -11.987917
-    endloop
-  endfacet
-  facet normal 0.000000 0.044865 -0.998993
-    outer loop
-      vertex 180.000000 1.610799 -11.891397
-      vertex 0.000000 -0.538378 -11.987917
-      vertex 0.000000 1.610799 -11.891397
-    endloop
-  endfacet
-  facet normal 0.000000 0.222521 -0.974928
-    outer loop
-      vertex 180.000000 3.708204 -11.412678
-      vertex 0.000000 1.610799 -11.891397
-      vertex 0.000000 3.708204 -11.412678
-    endloop
-  endfacet
-  facet normal 0.000000 0.222521 -0.974928
-    outer loop
-      vertex 180.000000 3.708204 -11.412678
-      vertex 180.000000 1.610799 -11.891397
-      vertex 0.000000 1.610799 -11.891397
-    endloop
-  endfacet
-  facet normal 0.000000 0.393025 -0.919528
-    outer loop
-      vertex 180.000000 5.686424 -10.567146
-      vertex 0.000000 3.708204 -11.412678
-      vertex 0.000000 5.686424 -10.567146
-    endloop
-  endfacet
-  facet normal 0.000000 0.393025 -0.919528
-    outer loop
-      vertex 180.000000 5.686424 -10.567146
-      vertex 180.000000 3.708204 -11.412678
-      vertex 0.000000 3.708204 -11.412678
-    endloop
-  endfacet
-  facet normal 0.000000 0.550897 -0.834573
-    outer loop
-      vertex 180.000000 7.481878 -9.381978
-      vertex 0.000000 5.686424 -10.567146
-      vertex 0.000000 7.481878 -9.381978
-    endloop
-  endfacet
-  facet normal 0.000000 0.550897 -0.834573
-    outer loop
-      vertex 180.000000 7.481878 -9.381978
-      vertex 180.000000 5.686424 -10.567146
-      vertex 0.000000 5.686424 -10.567146
-    endloop
-  endfacet
-  facet normal 0.000000 0.691063 -0.722795
-    outer loop
-      vertex 180.000000 9.036858 -7.895265
-      vertex 0.000000 7.481878 -9.381978
-      vertex 0.000000 9.036858 -7.895265
-    endloop
-  endfacet
-  facet normal 0.000000 0.691063 -0.722795
-    outer loop
-      vertex 180.000000 9.036858 -7.895265
-      vertex 180.000000 7.481878 -9.381978
-      vertex 0.000000 7.481878 -9.381978
-    endloop
-  endfacet
-  facet normal 0.000000 0.809017 -0.587785
-    outer loop
-      vertex 180.000000 10.301386 -6.154791
-      vertex 0.000000 9.036858 -7.895265
-      vertex 0.000000 10.301386 -6.154791
-    endloop
-  endfacet
-  facet normal 0.000000 0.809017 -0.587785
-    outer loop
-      vertex 180.000000 10.301386 -6.154791
-      vertex 180.000000 9.036858 -7.895265
-      vertex 0.000000 9.036858 -7.895265
-    endloop
-  endfacet
-  facet normal 0.000000 0.900969 -0.433884
-    outer loop
-      vertex 180.000000 11.234818 -4.216498
-      vertex 0.000000 10.301386 -6.154791
-      vertex 0.000000 11.234818 -4.216498
-    endloop
-  endfacet
-  facet normal 0.000000 0.900969 -0.433884
-    outer loop
-      vertex 180.000000 11.234818 -4.216498
-      vertex 180.000000 10.301386 -6.154791
-      vertex 0.000000 10.301386 -6.154791
-    endloop
-  endfacet
-  facet normal 0.000000 0.963963 -0.266037
-    outer loop
-      vertex 180.000000 11.807155 -2.142683
-      vertex 0.000000 11.234818 -4.216498
-      vertex 0.000000 11.807155 -2.142683
-    endloop
-  endfacet
-  facet normal 0.000000 0.963963 -0.266037
-    outer loop
-      vertex 180.000000 11.807155 -2.142683
-      vertex 180.000000 11.234818 -4.216498
-      vertex 0.000000 11.234818 -4.216498
-    endloop
-  endfacet
-  facet normal 0.000000 0.995974 -0.089639
-    outer loop
-      vertex 180.000000 12.000000 -0.000000
-      vertex 0.000000 11.807155 -2.142683
-      vertex 0.000000 12.000000 -0.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.995974 -0.089639
-    outer loop
-      vertex 180.000000 12.000000 -0.000000
-      vertex 180.000000 11.807155 -2.142683
-      vertex 0.000000 11.807155 -2.142683
-    endloop
-  endfacet
-  facet normal -0.000091 0.587298 0.809371
-    outer loop
-      vertex 56.448730 7.642896 9.251278
-      vertex 57.662033 6.425983 10.134433
-      vertex 180.000000 7.481878 9.381978
-    endloop
-  endfacet
-  facet normal 0.000121 0.684477 0.729035
-    outer loop
-      vertex 54.842255 8.749433 8.212639
-      vertex 56.448730 7.642896 9.251278
-      vertex 180.000000 7.481878 9.381978
-    endloop
-  endfacet
-  facet normal -0.000038 0.719347 0.694650
-    outer loop
-      vertex 44.321312 8.231192 8.731980
-      vertex 45.668846 9.013384 7.922052
-      vertex 0.000000 9.036858 7.895265
-    endloop
-  endfacet
-  facet normal 0.000511 0.637855 0.770156
-    outer loop
-      vertex 42.912872 7.054971 9.707079
-      vertex 44.321312 8.231192 8.731980
-      vertex 0.000000 7.481878 9.381978
-    endloop
-  endfacet
-  facet normal 0.000130 0.529168 0.848517
-    outer loop
-      vertex 41.725323 5.615130 10.605202
-      vertex 42.912872 7.054971 9.707079
-      vertex 0.000000 5.686424 10.567146
-    endloop
-  endfacet
-  facet normal -0.000128 0.411591 0.911369
-    outer loop
-      vertex 40.944370 4.242121 11.225168
-      vertex 41.725323 5.615130 10.605202
-      vertex 0.000000 5.686424 10.567146
-    endloop
-  endfacet
-  facet normal 0.000587 0.290961 0.956735
-    outer loop
-      vertex 40.380032 2.730610 11.685194
-      vertex 40.944370 4.242121 11.225168
-      vertex 0.000000 3.708204 11.412678
-    endloop
-  endfacet
-  facet normal 0.000659 0.158074 0.987427
-    outer loop
-      vertex 40.055984 1.056659 11.953387
-      vertex 40.380032 2.730610 11.685194
-      vertex 0.000000 1.610799 11.891397
-    endloop
-  endfacet
-  facet normal 0.000038 0.020697 0.999786
-    outer loop
-      vertex 40.015751 -0.561047 11.986877
-      vertex 40.055984 1.056659 11.953387
-      vertex 0.000000 -0.538378 11.987917
-    endloop
-  endfacet
-  facet normal -0.000036 -0.109684 0.993966
-    outer loop
-      vertex 40.215744 -2.066004 11.820813
-      vertex 40.015751 -0.561047 11.986877
-      vertex 0.000000 -0.538378 11.987917
-    endloop
-  endfacet
-  facet normal 0.000248 -0.425791 0.904822
-    outer loop
-      vertex 41.782188 -5.698035 10.560890
-      vertex 41.074001 -4.508494 11.120858
-      vertex 0.000000 -4.716300 11.034333
-    endloop
-  endfacet
-  facet normal 0.000479 -0.529441 0.848346
-    outer loop
-      vertex 42.848557 -6.989770 9.754133
-      vertex 41.782188 -5.698035 10.560890
-      vertex 0.000000 -6.610764 10.014879
-    endloop
-  endfacet
-  facet normal -0.000177 -0.634911 0.772586
-    outer loop
-      vertex 44.293537 -8.211959 8.750070
-      vertex 42.848557 -6.989770 9.754133
-      vertex 0.000000 -8.292751 8.673538
-    endloop
-  endfacet
-  facet normal 0.000121 -0.721984 0.691909
-    outer loop
-      vertex 45.840042 -9.093665 7.829767
-      vertex 44.293537 -8.211959 8.750070
-      vertex 0.000000 -8.292751 8.673538
-    endloop
-  endfacet
-  facet normal -0.000044 -0.782803 0.622269
-    outer loop
-      vertex 47.483089 -9.678077 7.094705
-      vertex 45.840042 -9.093665 7.829767
-      vertex 0.000000 -9.708204 7.053423
-    endloop
-  endfacet
-  facet normal -0.000125 -0.667030 0.745031
-    outer loop
-      vertex 56.669765 -7.450787 9.406688
-      vertex 55.217609 -8.530917 8.439399
-      vertex 180.000000 -8.292751 8.673538
-    endloop
-  endfacet
-  facet normal -0.000221 -0.564951 0.825124
-    outer loop
-      vertex 57.940296 -6.078792 10.346415
-      vertex 56.669765 -7.450787 9.406688
-      vertex 180.000000 -6.610764 10.014879
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 9.036858 -7.895265
-      vertex 0.000000 7.481878 9.381978
-      vertex 0.000000 11.234818 4.216498
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 11.234818 4.216498
-      vertex 0.000000 7.481878 9.381978
-      vertex 0.000000 10.301386 6.154791
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex 0.000000 5.686424 10.567146
-      vertex 0.000000 7.481878 9.381978
-      vertex 0.000000 3.708204 11.412678
-    endloop
-  endfacet
-  facet normal -1.000000 -0.000000 -0.000000
-    outer loop
-      vertex 0.000000 3.708204 11.412678
-      vertex 0.000000 7.481878 9.381978
-      vertex 0.000000 1.610799 11.891397
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -11.951692 -1.075672
-      vertex 0.000000 7.481878 9.381978
-      vertex 0.000000 -10.811626 -5.206605
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -9.708204 -7.053423
-      vertex 0.000000 -4.716300 -11.034333
-      vertex 0.000000 -8.292751 -8.673538
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.000000 -10.811626 5.206605
-      vertex 0.000000 7.481878 9.381978
-      vertex 0.000000 -11.951692 -1.075672
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -8.292751 -8.673538
-      vertex 0.000000 -4.716300 -11.034333
-      vertex 0.000000 -6.610764 -10.014879
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -10.811626 -5.206605
-      vertex 0.000000 7.481878 9.381978
-      vertex 0.000000 9.036858 -7.895265
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.000000 1.610799 11.891397
-      vertex 0.000000 7.481878 9.381978
-      vertex 0.000000 -10.811626 5.206605
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 7.481878 9.381978
-      vertex 0.000000 9.036858 7.895265
-      vertex 0.000000 10.301386 6.154791
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -11.567554 -3.192442
-      vertex 0.000000 -11.951692 -1.075672
-      vertex 0.000000 -10.811626 -5.206605
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -4.716300 -11.034333
-      vertex 0.000000 -0.538378 -11.987917
-      vertex 0.000000 -2.670251 -11.699135
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -9.708204 -7.053423
-      vertex 0.000000 -0.538378 -11.987917
-      vertex 0.000000 -4.716300 -11.034333
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -0.538378 -11.987917
-      vertex 0.000000 3.708204 -11.412678
-      vertex 0.000000 1.610799 -11.891397
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.000000 -11.567554 3.192442
-      vertex 0.000000 -10.811626 5.206605
-      vertex 0.000000 -11.951692 1.075672
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -11.951692 1.075672
-      vertex 0.000000 -10.811626 5.206605
-      vertex 0.000000 -11.951692 -1.075672
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.000000 -9.708204 7.053423
-      vertex 0.000000 -8.292751 8.673538
-      vertex 0.000000 -10.811626 5.206605
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -10.811626 -5.206605
-      vertex 0.000000 9.036858 -7.895265
-      vertex 0.000000 -9.708204 -7.053423
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 3.708204 -11.412678
-      vertex 0.000000 9.036858 -7.895265
-      vertex 0.000000 5.686424 -10.567146
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 5.686424 -10.567146
-      vertex 0.000000 9.036858 -7.895265
-      vertex 0.000000 7.481878 -9.381978
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -9.708204 -7.053423
-      vertex 0.000000 9.036858 -7.895265
-      vertex 0.000000 -0.538378 -11.987917
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -0.538378 -11.987917
-      vertex 0.000000 9.036858 -7.895265
-      vertex 0.000000 3.708204 -11.412678
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 9.036858 -7.895265
-      vertex 0.000000 11.234818 -4.216498
-      vertex 0.000000 10.301386 -6.154791
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.000000 -2.670251 11.699135
-      vertex 0.000000 -0.538378 11.987917
-      vertex 0.000000 -4.716300 11.034333
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.000000 -4.716300 11.034333
-      vertex 0.000000 -0.538378 11.987917
-      vertex 0.000000 -6.610764 10.014879
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.000000 -6.610764 10.014879
-      vertex 0.000000 1.610799 11.891397
-      vertex 0.000000 -8.292751 8.673538
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.000000 -8.292751 8.673538
-      vertex 0.000000 1.610799 11.891397
-      vertex 0.000000 -10.811626 5.206605
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 -0.000000
-    outer loop
-      vertex 0.000000 -0.538378 11.987917
-      vertex 0.000000 1.610799 11.891397
-      vertex 0.000000 -6.610764 10.014879
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 11.807155 -2.142683
-      vertex 0.000000 11.807155 2.142683
-      vertex 0.000000 12.000000 -0.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 11.234818 -4.216498
-      vertex 0.000000 11.234818 4.216498
-      vertex 0.000000 11.807155 -2.142683
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 9.036858 -7.895265
-      vertex 0.000000 11.234818 4.216498
-      vertex 0.000000 11.234818 -4.216498
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 11.807155 -2.142683
-      vertex 0.000000 11.234818 4.216498
-      vertex 0.000000 11.807155 2.142683
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 7.481878 9.381978
-      vertex 180.000000 11.234818 4.216498
-      vertex 180.000000 10.301386 6.154791
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 7.481878 9.381978
-      vertex 180.000000 5.686424 10.567146
-      vertex 180.000000 3.708204 11.412678
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 7.481878 9.381978
-      vertex 180.000000 3.708204 11.412678
-      vertex 180.000000 1.610799 11.891397
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 7.481878 9.381978
-      vertex 180.000000 1.610799 11.891397
-      vertex 180.000000 -6.610764 10.014879
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 7.481878 9.381978
-      vertex 180.000000 -6.610764 10.014879
-      vertex 180.000000 11.234818 4.216498
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 -4.716300 -11.034333
-      vertex 180.000000 -9.708204 -7.053423
-      vertex 180.000000 -8.292751 -8.673538
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 9.036858 7.895265
-      vertex 180.000000 7.481878 9.381978
-      vertex 180.000000 10.301386 6.154791
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 -4.716300 -11.034333
-      vertex 180.000000 -8.292751 -8.673538
-      vertex 180.000000 -6.610764 -10.014879
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 -11.951692 -1.075672
-      vertex 180.000000 -11.567554 -3.192442
-      vertex 180.000000 -10.811626 -5.206605
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 -0.538378 -11.987917
-      vertex 180.000000 -4.716300 -11.034333
-      vertex 180.000000 -2.670251 -11.699135
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 -0.538378 -11.987917
-      vertex 180.000000 -9.708204 -7.053423
-      vertex 180.000000 -4.716300 -11.034333
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 3.708204 -11.412678
-      vertex 180.000000 -0.538378 -11.987917
-      vertex 180.000000 1.610799 -11.891397
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 -10.811626 5.206605
-      vertex 180.000000 -11.567554 3.192442
-      vertex 180.000000 -11.951692 1.075672
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 -10.811626 5.206605
-      vertex 180.000000 -11.951692 1.075672
-      vertex 180.000000 -11.951692 -1.075672
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 -8.292751 8.673538
-      vertex 180.000000 -9.708204 7.053423
-      vertex 180.000000 -10.811626 5.206605
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 9.036858 -7.895265
-      vertex 180.000000 -10.811626 -5.206605
-      vertex 180.000000 -9.708204 -7.053423
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 9.036858 -7.895265
-      vertex 180.000000 3.708204 -11.412678
-      vertex 180.000000 5.686424 -10.567146
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 9.036858 -7.895265
-      vertex 180.000000 5.686424 -10.567146
-      vertex 180.000000 7.481878 -9.381978
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 9.036858 -7.895265
-      vertex 180.000000 -9.708204 -7.053423
-      vertex 180.000000 -0.538378 -11.987917
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 9.036858 -7.895265
-      vertex 180.000000 -0.538378 -11.987917
-      vertex 180.000000 3.708204 -11.412678
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 11.234818 -4.216498
-      vertex 180.000000 9.036858 -7.895265
-      vertex 180.000000 10.301386 -6.154791
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 -0.538378 11.987917
-      vertex 180.000000 -2.670251 11.699135
-      vertex 180.000000 -4.716300 11.034333
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 -0.538378 11.987917
-      vertex 180.000000 -4.716300 11.034333
-      vertex 180.000000 -6.610764 10.014879
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 1.610799 11.891397
-      vertex 180.000000 -0.538378 11.987917
-      vertex 180.000000 -6.610764 10.014879
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 11.807155 2.142683
-      vertex 180.000000 11.807155 -2.142683
-      vertex 180.000000 12.000000 -0.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 11.234818 4.216498
-      vertex 180.000000 -6.610764 10.014879
-      vertex 180.000000 -8.292751 8.673538
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 11.234818 4.216498
-      vertex 180.000000 11.234818 -4.216498
-      vertex 180.000000 11.807155 -2.142683
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 11.234818 4.216498
-      vertex 180.000000 -11.951692 -1.075672
-      vertex 180.000000 -10.811626 -5.206605
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 11.234818 4.216498
-      vertex 180.000000 -8.292751 8.673538
-      vertex 180.000000 -10.811626 5.206605
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 11.234818 4.216498
-      vertex 180.000000 -10.811626 5.206605
-      vertex 180.000000 -11.951692 -1.075672
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 11.234818 4.216498
-      vertex 180.000000 -10.811626 -5.206605
-      vertex 180.000000 9.036858 -7.895265
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 11.234818 4.216498
-      vertex 180.000000 9.036858 -7.895265
-      vertex 180.000000 11.234818 -4.216498
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 180.000000 11.234818 4.216498
-      vertex 180.000000 11.807155 -2.142683
-      vertex 180.000000 11.807155 2.142683
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/T-Junction.stl b/apps/cpu/Multiphase/backup/T-Junction.stl
deleted file mode 100644
index 87c59e91572cedafd98f2b21053d09011e80a623..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/T-Junction.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt b/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt
deleted file mode 100644
index 34aa746a2c05e1f6dbfa38631f84b5dd99c2b12c..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt	
+++ /dev/null
@@ -1,72 +0,0 @@
-pathname = d:/temp/Thermal
-pathGeo = d:/Hesam/VirtualFluids/source/Applications/Multiphase
-geoFile = FlowFocusingS2_Small.ast
-#geoFile = T-Junction.ast
-numOfThreads = 4
-availMem = 10e9
-
-#Grid
-#length = 50 50 50
-#length = 21 6 13
-#boundingBox = x1min x1max x2min x2max x3min x3max [mm]
-#boundingBox = 0.5 219.5 -30 30 -30 30
-#boundingBox = -1 121 -30 30 -30 30
-#boundingBox = -32 128 -12 14 3 58   (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128)
-#blocknx = 10 13 11
-#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5   (FlowFocusing)
-#blocknx = 11 7 10
-#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL)
-#blocknx = 10 13 5
-#boundingBox = 1 179 -21 21 -21 59 (T-Junction)
-#blocknx = 8 7 8
-#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1)
-#blocknx = 6 13 7
-#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2)
-#blocknx = 6 13 7
-#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2)
-#blocknx = 5 9 10
-
-#boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small)
-#blocknx = 5 2 9
-
-boundingBox = 0.5 200.5 0.5 100.5 0.5 3.5 (Droplet test)
-blocknx = 10 10 3
-dx = 1.0
-refineLevel = 0
-
-#Simulation
-uLB = 0.001
-uF2 = 0.001
-Re = 10
-#nuL = 3.3e-3
-nuL = 3.33e-5
-nuG = 3.33e-5
-Phase-field Relaxation = 0.500141
-#nuL = 0.16666
-#nuG = 0.16666
-densityRatio = 1.0495
-#densityRatio = 10.0
-sigma = 7.4e-4
-interfaceThickness = 3
-#radius = 10.0  (Droplet test)
-#radius = -20.0   (FlowFocusingSS , FlowFocusingS)
-radius = -5.0   (FlowFocusingSq)
-#radius = 10.0   (FlowFocusing)
-#radius = 20.0   (T-Junction)
-contactAngle = 120.0
-gravity = -2.7e-4
-phi_L = 1.0
-phi_H = 4.0
-Mobility = 0.05
-
-
-logToFile = false
-
-newStart = true
-restartStep = 100000
-
-cpStart = 100000
-cpStep = 100000
-
-outTime = 200
-endTime = 20000000
\ No newline at end of file
diff --git a/apps/cpu/Multiphase/backup/Tube_jet.FCStd b/apps/cpu/Multiphase/backup/Tube_jet.FCStd
deleted file mode 100644
index a496c4b14043a3d397f70a479205f7d23139c991..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/Tube_jet.FCStd and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/Tube_jet.stl b/apps/cpu/Multiphase/backup/Tube_jet.stl
deleted file mode 100644
index 8b9fa2cb33db4762af84b2e7da4d46a01d3c0184..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/Tube_jet.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/Tube_jet1.FCStd b/apps/cpu/Multiphase/backup/Tube_jet1.FCStd
deleted file mode 100644
index a009fabad2296f3a56ef31b8122ccb60341a76a6..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/Tube_jet1.FCStd and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/Tube_jet1.stl b/apps/cpu/Multiphase/backup/Tube_jet1.stl
deleted file mode 100644
index 416bdd4d9e81be88dfc2164c97a67577812ebdd3..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/Tube_jet1.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/Tube_jet_s.stl b/apps/cpu/Multiphase/backup/Tube_jet_s.stl
deleted file mode 100644
index 8cdc56a34427f1dbea876038a43b0fea78de2d09..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/Tube_jet_s.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/aaaa.stl b/apps/cpu/Multiphase/backup/aaaa.stl
deleted file mode 100644
index 012423f0625912bb76dcae9c5040a1dcad1d2bda..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/aaaa.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/dd.ast b/apps/cpu/Multiphase/backup/dd.ast
deleted file mode 100644
index b95f8748a8bc6e4fdb3f94f61521a27fb392d073..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/dd.ast
+++ /dev/null
@@ -1,198 +0,0 @@
-solid Mesh
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 5.000000 -5.000000
-      vertex 0.000000 -5.000000 -5.000000
-      vertex 0.000000 5.000000 5.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 0.000000 -5.000000 -5.000000
-      vertex 0.000000 -5.000000 5.000000
-      vertex 0.000000 5.000000 5.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 20.000000 -5.000000 -5.000000
-      vertex 0.000000 -5.000000 -5.000000
-      vertex 20.000000 5.000000 -5.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 0.000000 -5.000000 -5.000000
-      vertex 0.000000 5.000000 -5.000000
-      vertex 20.000000 5.000000 -5.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 20.000000 5.000000 -5.000000
-      vertex 0.000000 5.000000 -5.000000
-      vertex 20.000000 5.000000 5.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 0.000000 5.000000 -5.000000
-      vertex 0.000000 5.000000 5.000000
-      vertex 20.000000 5.000000 5.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 0.000000 5.000000 5.000000
-      vertex 0.000000 -5.000000 5.000000
-      vertex 20.000000 5.000000 5.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 20.000000 5.000000 5.000000
-      vertex 0.000000 -5.000000 5.000000
-      vertex 20.000000 -5.000000 5.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 0.000000 -5.000000 5.000000
-      vertex 0.000000 -5.000000 -5.000000
-      vertex 20.000000 -5.000000 5.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 20.000000 -5.000000 5.000000
-      vertex 0.000000 -5.000000 -5.000000
-      vertex 20.000000 -5.000000 -5.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 20.000000 5.000000 5.000000
-      vertex 20.000000 25.000000 25.000000
-      vertex 20.000000 5.000000 -5.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 20.000000 5.000000 -5.000000
-      vertex 20.000000 25.000000 25.000000
-      vertex 20.000000 25.000000 -25.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 20.000000 25.000000 -25.000000
-      vertex 20.000000 -25.000000 -25.000000
-      vertex 20.000000 5.000000 -5.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 20.000000 -25.000000 -25.000000
-      vertex 20.000000 -5.000000 -5.000000
-      vertex 20.000000 5.000000 -5.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 20.000000 5.000000 5.000000
-      vertex 20.000000 -5.000000 5.000000
-      vertex 20.000000 25.000000 25.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 20.000000 -25.000000 -25.000000
-      vertex 20.000000 -5.000000 5.000000
-      vertex 20.000000 -5.000000 -5.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 20.000000 -5.000000 5.000000
-      vertex 20.000000 -25.000000 25.000000
-      vertex 20.000000 25.000000 25.000000
-    endloop
-  endfacet
-  facet normal -1.000000 0.000000 0.000000
-    outer loop
-      vertex 20.000000 -25.000000 -25.000000
-      vertex 20.000000 -25.000000 25.000000
-      vertex 20.000000 -5.000000 5.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 120.000000 -25.000000 -25.000000
-      vertex 20.000000 -25.000000 -25.000000
-      vertex 120.000000 25.000000 -25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 -1.000000
-    outer loop
-      vertex 20.000000 -25.000000 -25.000000
-      vertex 20.000000 25.000000 -25.000000
-      vertex 120.000000 25.000000 -25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 20.000000 -25.000000 25.000000
-      vertex 20.000000 -25.000000 -25.000000
-      vertex 120.000000 -25.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 -1.000000 0.000000
-    outer loop
-      vertex 120.000000 -25.000000 25.000000
-      vertex 20.000000 -25.000000 -25.000000
-      vertex 120.000000 -25.000000 -25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 120.000000 25.000000 -25.000000
-      vertex 20.000000 25.000000 -25.000000
-      vertex 120.000000 25.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 1.000000 0.000000
-    outer loop
-      vertex 20.000000 25.000000 -25.000000
-      vertex 20.000000 25.000000 25.000000
-      vertex 120.000000 25.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 20.000000 25.000000 25.000000
-      vertex 20.000000 -25.000000 25.000000
-      vertex 120.000000 25.000000 25.000000
-    endloop
-  endfacet
-  facet normal 0.000000 0.000000 1.000000
-    outer loop
-      vertex 120.000000 25.000000 25.000000
-      vertex 20.000000 -25.000000 25.000000
-      vertex 120.000000 -25.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 120.000000 -25.000000 -25.000000
-      vertex 120.000000 25.000000 -25.000000
-      vertex 120.000000 25.000000 25.000000
-    endloop
-  endfacet
-  facet normal 1.000000 0.000000 0.000000
-    outer loop
-      vertex 120.000000 -25.000000 25.000000
-      vertex 120.000000 -25.000000 -25.000000
-      vertex 120.000000 25.000000 25.000000
-    endloop
-  endfacet
-endsolid Mesh
diff --git a/apps/cpu/Multiphase/backup/dd.stl b/apps/cpu/Multiphase/backup/dd.stl
deleted file mode 100644
index c72bd5e4cc997a156f43cc526b38d7fb49077aa1..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/dd.stl and /dev/null differ
diff --git a/apps/cpu/Multiphase/backup/inlet1.stl b/apps/cpu/Multiphase/backup/inlet1.stl
deleted file mode 100644
index e3339340584bb199967b3f7fc4b2571c5cc64a75..0000000000000000000000000000000000000000
--- a/apps/cpu/Multiphase/backup/inlet1.stl
+++ /dev/null
@@ -1,1710 +0,0 @@
-solid Visualization Toolkit generated SLA File
- facet normal 0 -0.85844862044487247 -0.51289956722178598
-  outer loop
-   vertex 8 -5.4001836776733398 -2.6005914211273193
-   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
-   vertex 8 -4.8490467071533203 -3.5230386257171631
-  endloop
- endfacet
- facet normal 0 -0.85844862044487247 -0.51289956722178598
-  outer loop
-   vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193
-   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
-   vertex 8 -5.4001836776733398 -2.6005914211273193
-  endloop
- endfacet
- facet normal 0 -0.75307168647452871 -0.65793847359035706
-  outer loop
-   vertex 8 -4.8490467071533203 -3.5230386257171631
-   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
-   vertex 8 -4.1420578956604004 -4.3322529792785645
-  endloop
- endfacet
- facet normal -3.483186817680354e-17 0.99597429384365632 0.089639310587654369
-  outer loop
-   vertex 8 5.9937515258789062 2.5014704053256086e-15
-   vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15
-   vertex 8 5.8974294662475586 1.070225715637207
-  endloop
- endfacet
- facet normal 0 -0.75307168647452871 -0.65793847359035706
-  outer loop
-   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
-   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
-   vertex 8 -4.1420578956604004 -4.3322529792785645
-  endloop
- endfacet
- facet normal 0 -0.62348983541065761 -0.78183145571126211
-  outer loop
-   vertex 8 -4.1420578956604004 -4.3322529792785645
-   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
-   vertex 8 -3.3019397258758545 -5.0022249221801758
-  endloop
- endfacet
- facet normal -0 0.96396290563681286 0.26603668272671144
-  outer loop
-   vertex 8 5.8974294662475586 1.070225715637207
-   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
-   vertex 8 5.6115593910217285 2.106053352355957
-  endloop
- endfacet
- facet normal -0 0.99597429384365654 0.089639310587653898
-  outer loop
-   vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15
-   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
-   vertex 8 5.8974294662475586 1.070225715637207
-  endloop
- endfacet
- facet normal 0 -0.47386859124399539 -0.88059557018669543
-  outer loop
-   vertex 8 -3.3019397258758545 -5.0022249221801758
-   vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758
-   vertex 8 -2.3556942939758301 -5.5114212036132812
-  endloop
- endfacet
- facet normal 0 -0.62348983541065761 -0.78183145571126211
-  outer loop
-   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
-   vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758
-   vertex 8 -3.3019397258758545 -5.0022249221801758
-  endloop
- endfacet
- facet normal -0 0.90096871492997632 0.43388405676796565
-  outer loop
-   vertex 8 5.6115593910217285 2.106053352355957
-   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
-   vertex 8 5.1453285217285156 3.0741908550262451
-  endloop
- endfacet
- facet normal -0 0.96396290563681286 0.26603668272671144
-  outer loop
-   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
-   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
-   vertex 8 5.6115593910217285 2.106053352355957
-  endloop
- endfacet
- facet normal 0 -0.47386859124399539 -0.88059557018669543
-  outer loop
-   vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758
-   vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812
-   vertex 8 -2.3556942939758301 -5.5114212036132812
-  endloop
- endfacet
- facet normal -0 0.90096871492997632 0.43388405676796565
-  outer loop
-   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
-   vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451
-   vertex 8 5.1453285217285156 3.0741908550262451
-  endloop
- endfacet
- facet normal 0 -0.30901698225917551 -0.95105652023180642
-  outer loop
-   vertex 8 -2.3556942939758301 -5.5114212036132812
-   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
-   vertex 8 -1.3337352275848389 -5.8434758186340332
-  endloop
- endfacet
- facet normal 0 -0.13423310024304191 -0.99094978419652602
-  outer loop
-   vertex 8 -1.3337352275848389 -5.8434758186340332
-   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
-   vertex 8 -0.26890864968299866 -5.9877161979675293
-  endloop
- endfacet
- facet normal 0 -0.30901698225917551 -0.95105652023180642
-  outer loop
-   vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812
-   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
-   vertex 8 -2.3556942939758301 -5.5114212036132812
-  endloop
- endfacet
- facet normal -0 0.80901707821253466 0.58778513689991641
-  outer loop
-   vertex 8 5.1453285217285156 3.0741908550262451
-   vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309
-   vertex 8 4.5137233734130859 3.9435210227966309
-  endloop
- endfacet
- facet normal 0 0.80901707821253466 0.58778513689991641
-  outer loop
-   vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451
-   vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309
-   vertex 8 5.1453285217285156 3.0741908550262451
-  endloop
- endfacet
- facet normal 0 0.044864920280647716 -0.99899306250254383
-  outer loop
-   vertex 8 -0.26890864968299866 -5.9877161979675293
-   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
-   vertex 8 0.80456084012985229 -5.9395065307617188
-  endloop
- endfacet
- facet normal 0 -0.13423310024304191 -0.99094978419652602
-  outer loop
-   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
-   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
-   vertex 8 -0.26890864968299866 -5.9877161979675293
-  endloop
- endfacet
- facet normal -0 0.69106276312575432 0.72279475469942178
-  outer loop
-   vertex 8 4.5137233734130859 3.9435210227966309
-   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
-   vertex 8 3.7370429039001465 4.6861038208007812
-  endloop
- endfacet
- facet normal 0 0.69106276312575432 0.72279475469942178
-  outer loop
-   vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309
-   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
-   vertex 8 4.5137233734130859 3.9435210227966309
-  endloop
- endfacet
- facet normal 0 0.22252075334182159 -0.97492795340588534
-  outer loop
-   vertex 8 0.80456084012985229 -5.9395065307617188
-   vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188
-   vertex 8 1.8521710634231567 -5.7003965377807617
-  endloop
- endfacet
- facet normal 0 0.044864920280647716 -0.99899306250254383
-  outer loop
-   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
-   vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188
-   vertex 8 0.80456084012985229 -5.9395065307617188
-  endloop
- endfacet
- facet normal -0 0.55089693770547221 0.83457328259819885
-  outer loop
-   vertex 8 3.7370429039001465 4.6861038208007812
-   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
-   vertex 8 2.8402509689331055 5.2780709266662598
-  endloop
- endfacet
- facet normal 0 0.39302502509892845 -0.91952777535319008
-  outer loop
-   vertex 8 1.8521710634231567 -5.7003965377807617
-   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
-   vertex 8 2.8402509689331055 -5.2780709266662598
-  endloop
- endfacet
- facet normal 0 0.55089693770547221 0.83457328259819885
-  outer loop
-   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
-   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
-   vertex 8 3.7370429039001465 4.6861038208007812
-  endloop
- endfacet
- facet normal 0 0.22252075334182159 -0.97492795340588534
-  outer loop
-   vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188
-   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
-   vertex 8 1.8521710634231567 -5.7003965377807617
-  endloop
- endfacet
- facet normal 0 0.39302502509892845 0.91952777535319008
-  outer loop
-   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
-   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
-   vertex 8 2.8402509689331055 5.2780709266662598
-  endloop
- endfacet
- facet normal -0 0.39302502509892845 0.91952777535319008
-  outer loop
-   vertex 8 2.8402509689331055 5.2780709266662598
-   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
-   vertex 8 1.8521710634231567 5.7003965377807617
-  endloop
- endfacet
- facet normal 0 0.55089693770547221 -0.83457328259819885
-  outer loop
-   vertex 8 2.8402509689331055 -5.2780709266662598
-   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
-   vertex 8 3.7370429039001465 -4.6861038208007812
-  endloop
- endfacet
- facet normal -0 0.22252075334182159 0.97492795340588534
-  outer loop
-   vertex 8 1.8521710634231567 5.7003965377807617
-   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
-   vertex 8 0.80456084012985229 5.9395065307617188
-  endloop
- endfacet
- facet normal 0 0.39302502509892845 -0.91952777535319008
-  outer loop
-   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
-   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
-   vertex 8 2.8402509689331055 -5.2780709266662598
-  endloop
- endfacet
- facet normal -0 0.22252075334182159 0.97492795340588534
-  outer loop
-   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
-   vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188
-   vertex 8 0.80456084012985229 5.9395065307617188
-  endloop
- endfacet
- facet normal 0 0.69106276312575432 -0.72279475469942178
-  outer loop
-   vertex 8 3.7370429039001465 -4.6861038208007812
-   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
-   vertex 8 4.5137233734130859 -3.9435210227966309
-  endloop
- endfacet
- facet normal 0 0.55089693770547221 -0.83457328259819885
-  outer loop
-   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
-   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
-   vertex 8 3.7370429039001465 -4.6861038208007812
-  endloop
- endfacet
- facet normal 0 0.044864920280647716 0.99899306250254383
-  outer loop
-   vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188
-   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
-   vertex 8 0.80456084012985229 5.9395065307617188
-  endloop
- endfacet
- facet normal -0 0.044864920280647716 0.99899306250254383
-  outer loop
-   vertex 8 0.80456084012985229 5.9395065307617188
-   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
-   vertex 8 -0.26890864968299866 5.9877161979675293
-  endloop
- endfacet
- facet normal 0 0.80901707821253466 -0.58778513689991641
-  outer loop
-   vertex 8 4.5137233734130859 -3.9435210227966309
-   vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309
-   vertex 8 5.1453285217285156 -3.0741908550262451
-  endloop
- endfacet
- facet normal 0 -0.13423310024304191 0.99094978419652602
-  outer loop
-   vertex 8 -0.26890864968299866 5.9877161979675293
-   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
-   vertex 8 -1.3337352275848389 5.8434758186340332
-  endloop
- endfacet
- facet normal 0 0.69106276312575432 -0.72279475469942178
-  outer loop
-   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
-   vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309
-   vertex 8 4.5137233734130859 -3.9435210227966309
-  endloop
- endfacet
- facet normal 0 -0.13423310024304191 0.99094978419652602
-  outer loop
-   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
-   vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332
-   vertex 8 -1.3337352275848389 5.8434758186340332
-  endloop
- endfacet
- facet normal 0 0.80901707821253466 -0.58778513689991641
-  outer loop
-   vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309
-   vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451
-   vertex 8 5.1453285217285156 -3.0741908550262451
-  endloop
- endfacet
- facet normal 0 0.90096871492997632 -0.43388405676796565
-  outer loop
-   vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451
-   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
-   vertex 8 5.1453285217285156 -3.0741908550262451
-  endloop
- endfacet
- facet normal 0 -0.30901698225917551 0.95105652023180642
-  outer loop
-   vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332
-   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
-   vertex 8 -1.3337352275848389 5.8434758186340332
-  endloop
- endfacet
- facet normal 0 0.90096871492997632 -0.43388405676796565
-  outer loop
-   vertex 8 5.1453285217285156 -3.0741908550262451
-   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
-   vertex 8 5.6115593910217285 -2.106053352355957
-  endloop
- endfacet
- facet normal 0 -0.30901698225917551 0.95105652023180642
-  outer loop
-   vertex 8 -1.3337352275848389 5.8434758186340332
-   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
-   vertex 8 -2.3556942939758301 5.5114212036132812
-  endloop
- endfacet
- facet normal 0 0.96396290563681286 -0.26603668272671144
-  outer loop
-   vertex 8 5.6115593910217285 -2.106053352355957
-   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
-   vertex 8 5.8974294662475586 -1.070225715637207
-  endloop
- endfacet
- facet normal 0 -0.47386859124399539 0.88059557018669543
-  outer loop
-   vertex 8 -2.3556942939758301 5.5114212036132812
-   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
-   vertex 8 -3.3019397258758545 5.0022249221801758
-  endloop
- endfacet
- facet normal 0 0.96396290563681286 -0.26603668272671144
-  outer loop
-   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
-   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
-   vertex 8 5.8974294662475586 -1.070225715637207
-  endloop
- endfacet
- facet normal 0 -0.47386859124399539 0.88059557018669543
-  outer loop
-   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
-   vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758
-   vertex 8 -3.3019397258758545 5.0022249221801758
-  endloop
- endfacet
- facet normal 0 0.99597429384365654 -0.089639310587653981
-  outer loop
-   vertex 8 5.8974294662475586 -1.070225715637207
-   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
-   vertex 8 5.9937515258789062 2.5014704053256086e-15
-  endloop
- endfacet
- facet normal 3.4831868176803565e-17 0.99597429384365632 -0.089639310587654439
-  outer loop
-   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
-   vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15
-   vertex 8 5.9937515258789062 2.5014704053256086e-15
-  endloop
- endfacet
- facet normal 0 -0.62348983541065761 0.78183145571126211
-  outer loop
-   vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758
-   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
-   vertex 8 -3.3019397258758545 5.0022249221801758
-  endloop
- endfacet
- facet normal 0 -0.62348983541065761 0.78183145571126211
-  outer loop
-   vertex 8 -3.3019397258758545 5.0022249221801758
-   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
-   vertex 8 -4.1420578956604004 4.3322529792785645
-  endloop
- endfacet
- facet normal 0 -0.75307168647452871 0.65793847359035706
-  outer loop
-   vertex 8 -4.1420578956604004 4.3322529792785645
-   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
-   vertex 8 -4.8490467071533203 3.5230386257171631
-  endloop
- endfacet
- facet normal 0 -0.75307168647452871 0.65793847359035706
-  outer loop
-   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
-   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
-   vertex 8 -4.8490467071533203 3.5230386257171631
-  endloop
- endfacet
- facet normal 0 -0.85844862044487247 0.51289956722178598
-  outer loop
-   vertex 8 -4.8490467071533203 3.5230386257171631
-   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
-   vertex 8 -5.4001836776733398 2.6005914211273193
-  endloop
- endfacet
- facet normal 0 -0.85844862044487247 0.51289956722178598
-  outer loop
-   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
-   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
-   vertex 8 -5.4001836776733398 2.6005914211273193
-  endloop
- endfacet
- facet normal 0 -0.93623494328775736 0.35137463051132423
-  outer loop
-   vertex 8 -5.4001836776733398 2.6005914211273193
-   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
-   vertex 8 -5.7777538299560547 1.5945587158203125
-  endloop
- endfacet
- facet normal 0 -0.93623494328775736 0.35137463051132423
-  outer loop
-   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
-   vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125
-   vertex 8 -5.7777538299560547 1.5945587158203125
-  endloop
- endfacet
- facet normal 0 -0.98392955450267261 0.17855708268274328
-  outer loop
-   vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125
-   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
-   vertex 8 -5.7777538299560547 1.5945587158203125
-  endloop
- endfacet
- facet normal 0 -0.98392955450267261 0.17855708268274328
-  outer loop
-   vertex 8 -5.7777538299560547 1.5945587158203125
-   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
-   vertex 8 -5.9696226119995117 0.53727573156356812
-  endloop
- endfacet
- facet normal 0 -1 0
-  outer loop
-   vertex 8 -5.9696226119995117 0.53727573156356812
-   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
-   vertex 8 -5.9696226119995117 -0.53727573156356812
-  endloop
- endfacet
- facet normal 0 -1 0
-  outer loop
-   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
-   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
-   vertex 8 -5.9696226119995117 -0.53727573156356812
-  endloop
- endfacet
- facet normal 0 -0.98392955450267261 -0.17855708268274328
-  outer loop
-   vertex 8 -5.9696226119995117 -0.53727573156356812
-   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
-   vertex 8 -5.7777538299560547 -1.5945587158203125
-  endloop
- endfacet
- facet normal 0 -0.98392955450267261 -0.17855708268274328
-  outer loop
-   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
-   vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125
-   vertex 8 -5.7777538299560547 -1.5945587158203125
-  endloop
- endfacet
- facet normal 0 -0.93623494328775736 -0.35137463051132423
-  outer loop
-   vertex 8 -5.7777538299560547 -1.5945587158203125
-   vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125
-   vertex 8 -5.4001836776733398 -2.6005914211273193
-  endloop
- endfacet
- facet normal 0 -0.93623494328775736 -0.35137463051132423
-  outer loop
-   vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125
-   vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193
-   vertex 8 -5.4001836776733398 -2.6005914211273193
-  endloop
- endfacet
- facet normal -0 0.23931571466750717 0.97094180500850835
-  outer loop
-   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
-   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
-   vertex 8 -0.89344334602355957 -2.3558163642883301
-  endloop
- endfacet
- facet normal 0 0.23931571466750717 0.97094180500850835
-  outer loop
-   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
-   vertex 8 -0.89344334602355957 -2.3558163642883301
-   vertex 8 -0.30369770526885986 -2.5011756420135498
-  endloop
- endfacet
- facet normal 0 0 1
-  outer loop
-   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
-   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
-   vertex 8 -0.30369770526885986 -2.5011756420135498
-  endloop
- endfacet
- facet normal 0 -0 1
-  outer loop
-   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
-   vertex 8 -0.30369770526885986 -2.5011756420135498
-   vertex 8 0.30369770526885986 -2.5011756420135498
-  endloop
- endfacet
- facet normal 4.6838001325319123e-17 -0.99270884511338364 -0.12053691896532001
-  outer loop
-   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
-   vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15
-   vertex 8 2.5195460319519043 4.4300420299627722e-15
-  endloop
- endfacet
- facet normal 0 -0.23931571466750717 0.97094180500850835
-  outer loop
-   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
-   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
-   vertex 8 0.30369770526885986 -2.5011756420135498
-  endloop
- endfacet
- facet normal 0 -0.99270884511338353 -0.12053691896532118
-  outer loop
-   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
-   vertex 8 2.5195460319519043 4.4300420299627722e-15
-   vertex 8 2.4463324546813965 0.60296684503555298
-  endloop
- endfacet
- facet normal 0 -0.23931571466750717 0.97094180500850835
-  outer loop
-   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
-   vertex 8 0.30369770526885986 -2.5011756420135498
-   vertex 8 0.89344334602355957 -2.3558163642883301
-  endloop
- endfacet
- facet normal 0 -0.93501633902348258 -0.35460463301982359
-  outer loop
-   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
-   vertex 8 2.4463324546813965 0.60296684503555298
-   vertex 8 2.2309472560882568 1.1708914041519165
-  endloop
- endfacet
- facet normal 0 -0.46472313027195961 0.88545604757674512
-  outer loop
-   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
-   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
-   vertex 8 0.89344334602355957 -2.3558163642883301
-  endloop
- endfacet
- facet normal 0 -0.93501633902348258 -0.35460463301982359
-  outer loop
-   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
-   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
-   vertex 8 2.4463324546813965 0.60296684503555298
-  endloop
- endfacet
- facet normal 0 -0.46472313027195961 0.88545604757674512
-  outer loop
-   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
-   vertex 8 0.89344334602355957 -2.3558163642883301
-   vertex 8 1.4312652349472046 -2.0735456943511963
-  endloop
- endfacet
- facet normal 0 -0.66312261734283129 0.74851078440353358
-  outer loop
-   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
-   vertex 8 1.4312652349472046 -2.0735456943511963
-   vertex 8 1.8859072923660278 -1.6707680225372314
-  endloop
- endfacet
- facet normal 0 -0.82298382978185469 -0.56806479904812901
-  outer loop
-   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
-   vertex 8 2.2309472560882568 1.1708914041519165
-   vertex 8 1.8859072923660278 1.6707680225372314
-  endloop
- endfacet
- facet normal 0 -0.66312261734283129 0.74851078440353358
-  outer loop
-   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
-   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
-   vertex 8 1.4312652349472046 -2.0735456943511963
-  endloop
- endfacet
- facet normal 0 -0.82298382978185469 -0.56806479904812901
-  outer loop
-   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
-   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
-   vertex 8 2.2309472560882568 1.1708914041519165
-  endloop
- endfacet
- facet normal 0 -0.82298382978185469 0.56806479904812901
-  outer loop
-   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
-   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
-   vertex 8 1.8859072923660278 -1.6707680225372314
-  endloop
- endfacet
- facet normal 0 -0.82298382978185469 0.56806479904812901
-  outer loop
-   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
-   vertex 8 1.8859072923660278 -1.6707680225372314
-   vertex 8 2.2309472560882568 -1.1708914041519165
-  endloop
- endfacet
- facet normal 0 -0.66312261734283129 -0.74851078440353358
-  outer loop
-   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
-   vertex 8 1.8859072923660278 1.6707680225372314
-   vertex 8 1.4312652349472046 2.0735456943511963
-  endloop
- endfacet
- facet normal 0 -0.66312261734283129 -0.74851078440353358
-  outer loop
-   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
-   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
-   vertex 8 1.8859072923660278 1.6707680225372314
-  endloop
- endfacet
- facet normal 0 -0.93501633902348258 0.35460463301982359
-  outer loop
-   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
-   vertex 8 2.2309472560882568 -1.1708914041519165
-   vertex 8 2.4463324546813965 -0.60296684503555298
-  endloop
- endfacet
- facet normal 0 -0.93501633902348258 0.35460463301982359
-  outer loop
-   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
-   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
-   vertex 8 2.2309472560882568 -1.1708914041519165
-  endloop
- endfacet
- facet normal 0 -0.46472313027195961 -0.88545604757674512
-  outer loop
-   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
-   vertex 8 1.4312652349472046 2.0735456943511963
-   vertex 8 0.89344334602355957 2.3558163642883301
-  endloop
- endfacet
- facet normal 0 -0.46472313027195961 -0.88545604757674512
-  outer loop
-   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
-   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
-   vertex 8 1.4312652349472046 2.0735456943511963
-  endloop
- endfacet
- facet normal -4.721925413423835e-17 -0.99270884511338364 0.1205369189653194
-  outer loop
-   vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15
-   vertex 8 2.4463324546813965 -0.60296684503555298
-   vertex 8 2.5195460319519043 4.4300420299627722e-15
-  endloop
- endfacet
- facet normal 0 -0.99270884511338364 0.12053691896532057
-  outer loop
-   vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15
-   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
-   vertex 8 2.4463324546813965 -0.60296684503555298
-  endloop
- endfacet
- facet normal 0 -0.23931571466750717 -0.97094180500850835
-  outer loop
-   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
-   vertex 8 0.89344334602355957 2.3558163642883301
-   vertex 8 0.30369770526885986 2.5011756420135498
-  endloop
- endfacet
- facet normal 0 -0.23931571466750717 -0.97094180500850835
-  outer loop
-   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
-   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
-   vertex 8 0.89344334602355957 2.3558163642883301
-  endloop
- endfacet
- facet normal 0 -0 -1
-  outer loop
-   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
-   vertex 8 0.30369770526885986 2.5011756420135498
-   vertex 8 -0.30369770526885986 2.5011756420135498
-  endloop
- endfacet
- facet normal 0 0 -1
-  outer loop
-   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
-   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
-   vertex 8 0.30369770526885986 2.5011756420135498
-  endloop
- endfacet
- facet normal 0 0.23931571466750717 -0.97094180500850835
-  outer loop
-   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
-   vertex 8 -0.30369770526885986 2.5011756420135498
-   vertex 8 -0.89344334602355957 2.3558163642883301
-  endloop
- endfacet
- facet normal 0 0.23931571466750717 -0.97094180500850835
-  outer loop
-   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
-   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
-   vertex 8 -0.30369770526885986 2.5011756420135498
-  endloop
- endfacet
- facet normal 0 0.46472313027195961 -0.88545604757674512
-  outer loop
-   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
-   vertex 8 -0.89344334602355957 2.3558163642883301
-   vertex 8 -1.4312652349472046 2.0735456943511963
-  endloop
- endfacet
- facet normal 0 0.46472313027195961 -0.88545604757674512
-  outer loop
-   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
-   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
-   vertex 8 -0.89344334602355957 2.3558163642883301
-  endloop
- endfacet
- facet normal 0 0.66312261734283129 -0.74851078440353358
-  outer loop
-   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
-   vertex 8 -1.4312652349472046 2.0735456943511963
-   vertex 8 -1.8859072923660278 1.6707680225372314
-  endloop
- endfacet
- facet normal 0 0.66312261734283129 -0.74851078440353358
-  outer loop
-   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
-   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
-   vertex 8 -1.4312652349472046 2.0735456943511963
-  endloop
- endfacet
- facet normal 0 0.82298382978185469 -0.56806479904812901
-  outer loop
-   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
-   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
-   vertex 8 -1.8859072923660278 1.6707680225372314
-  endloop
- endfacet
- facet normal 0 0.82298382978185469 -0.56806479904812901
-  outer loop
-   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
-   vertex 8 -1.8859072923660278 1.6707680225372314
-   vertex 8 -2.2309472560882568 1.1708914041519165
-  endloop
- endfacet
- facet normal 0 0.93501633902348258 -0.35460463301982359
-  outer loop
-   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
-   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
-   vertex 8 -2.2309472560882568 1.1708914041519165
-  endloop
- endfacet
- facet normal 0 0.93501633902348258 -0.35460463301982359
-  outer loop
-   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
-   vertex 8 -2.2309472560882568 1.1708914041519165
-   vertex 8 -2.4463324546813965 0.60296684503555298
-  endloop
- endfacet
- facet normal 0 0.99270884511338353 -0.12053691896532118
-  outer loop
-   vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15
-   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
-   vertex 8 -2.4463324546813965 0.60296684503555298
-  endloop
- endfacet
- facet normal -2.208642532085365e-17 0.99270884511338364 -0.12053691896532064
-  outer loop
-   vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15
-   vertex 8 -2.4463324546813965 0.60296684503555298
-   vertex 8 -2.5195460319519043 1.7763568394002505e-15
-  endloop
- endfacet
- facet normal 2.192233482989147e-17 0.99270884511338364 0.1205369189653194
-  outer loop
-   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
-   vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15
-   vertex 8 -2.5195460319519043 1.7763568394002505e-15
-  endloop
- endfacet
- facet normal 0 0.99270884511338364 0.12053691896531993
-  outer loop
-   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
-   vertex 8 -2.5195460319519043 1.7763568394002505e-15
-   vertex 8 -2.4463324546813965 -0.60296684503555298
-  endloop
- endfacet
- facet normal -0 0.93501633902348258 0.35460463301982359
-  outer loop
-   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
-   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
-   vertex 8 -2.4463324546813965 -0.60296684503555298
-  endloop
- endfacet
- facet normal 0 0.93501633902348258 0.35460463301982359
-  outer loop
-   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
-   vertex 8 -2.4463324546813965 -0.60296684503555298
-   vertex 8 -2.2309472560882568 -1.1708914041519165
-  endloop
- endfacet
- facet normal -0 0.82298382978185469 0.56806479904812901
-  outer loop
-   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
-   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
-   vertex 8 -2.2309472560882568 -1.1708914041519165
-  endloop
- endfacet
- facet normal 0 0.82298382978185469 0.56806479904812901
-  outer loop
-   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
-   vertex 8 -2.2309472560882568 -1.1708914041519165
-   vertex 8 -1.8859072923660278 -1.6707680225372314
-  endloop
- endfacet
- facet normal -0 0.66312261734283129 0.74851078440353358
-  outer loop
-   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
-   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
-   vertex 8 -1.8859072923660278 -1.6707680225372314
-  endloop
- endfacet
- facet normal 0 0.66312261734283129 0.74851078440353358
-  outer loop
-   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
-   vertex 8 -1.8859072923660278 -1.6707680225372314
-   vertex 8 -1.4312652349472046 -2.0735456943511963
-  endloop
- endfacet
- facet normal -0 0.46472313027195961 0.88545604757674512
-  outer loop
-   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
-   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
-   vertex 8 -1.4312652349472046 -2.0735456943511963
-  endloop
- endfacet
- facet normal 0 0.46472313027195961 0.88545604757674512
-  outer loop
-   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
-   vertex 8 -1.4312652349472046 -2.0735456943511963
-   vertex 8 -0.89344334602355957 -2.3558163642883301
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
-   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
-   vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758
-   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
-   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
-   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
-   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
-   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
-   vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
-   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
-   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
-   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
-   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
-   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
-   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
-   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
-   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
-   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
-   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
-   vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193
-   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
-   vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193
-   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
-   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
-   vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309
-   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
-   vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
-   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
-   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
-   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
-   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451
-   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
-   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
-   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
-   vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
-   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
-   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
-   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
-   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
-   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
-   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
-   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
-   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
-   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
-   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
-   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
-   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193
-   vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125
-   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
-   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
-   vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188
-   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
-   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
-   vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188
-   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
-   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
-   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 5.9937515258789062 -4.6580806635390486e-15
-   vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15
-   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
-   vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15
-   vertex -7.0000004768371582 5.9937515258789062 -4.6580806635390486e-15
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
-   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
-   vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125
-   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
-   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
-   vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15
-   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
-   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
-   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
-   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
-   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
-   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
-   vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
-   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
-   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15
-   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
-   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
-   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
-   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
-   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
-   vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
-   vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332
-   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15
-   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
-   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
-   vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332
-   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
-   vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125
-   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812
-   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
-   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
-   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
-   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
-   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
-   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
-   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
-   vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
-   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
-   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
-   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
-   vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
-   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
-   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125
-   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
-   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812
-   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
-   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758
-   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
-   vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
-   vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758
-   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
-   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
-   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
-   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
-   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451
-   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
-   vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
-   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
-   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
-  endloop
- endfacet
- facet normal -1 0 -0
-  outer loop
-   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
-   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
-   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
-  endloop
- endfacet
- facet normal -1 0 0
-  outer loop
-   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
-   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
-   vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -4.1420578956604004 -4.3322529792785645
-   vertex 8 -3.3019397258758545 -5.0022249221801758
-   vertex 8 -1.4312652349472046 -2.0735456943511963
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -1.8859072923660278 -1.6707680225372314
-   vertex 8 -4.1420578956604004 -4.3322529792785645
-   vertex 8 -1.4312652349472046 -2.0735456943511963
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 3.7370429039001465 4.6861038208007812
-   vertex 8 1.8859072923660278 1.6707680225372314
-   vertex 8 4.5137233734130859 3.9435210227966309
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 3.7370429039001465 4.6861038208007812
-   vertex 8 1.4312652349472046 2.0735456943511963
-   vertex 8 1.8859072923660278 1.6707680225372314
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -4.8490467071533203 -3.5230386257171631
-   vertex 8 -4.1420578956604004 -4.3322529792785645
-   vertex 8 -1.8859072923660278 -1.6707680225372314
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -4.8490467071533203 -3.5230386257171631
-   vertex 8 -1.8859072923660278 -1.6707680225372314
-   vertex 8 -2.2309472560882568 -1.1708914041519165
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 2.8402509689331055 5.2780709266662598
-   vertex 8 1.4312652349472046 2.0735456943511963
-   vertex 8 3.7370429039001465 4.6861038208007812
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 2.8402509689331055 5.2780709266662598
-   vertex 8 0.89344334602355957 2.3558163642883301
-   vertex 8 1.4312652349472046 2.0735456943511963
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -5.4001836776733398 -2.6005914211273193
-   vertex 8 -4.8490467071533203 -3.5230386257171631
-   vertex 8 -2.2309472560882568 -1.1708914041519165
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -5.4001836776733398 -2.6005914211273193
-   vertex 8 -2.2309472560882568 -1.1708914041519165
-   vertex 8 -2.4463324546813965 -0.60296684503555298
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 1.8859072923660278 -1.6707680225372314
-   vertex 8 3.7370429039001465 -4.6861038208007812
-   vertex 8 4.5137233734130859 -3.9435210227966309
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 1.8859072923660278 -1.6707680225372314
-   vertex 8 4.5137233734130859 -3.9435210227966309
-   vertex 8 5.1453285217285156 -3.0741908550262451
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 1.4312652349472046 -2.0735456943511963
-   vertex 8 2.8402509689331055 -5.2780709266662598
-   vertex 8 3.7370429039001465 -4.6861038208007812
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 1.4312652349472046 -2.0735456943511963
-   vertex 8 3.7370429039001465 -4.6861038208007812
-   vertex 8 1.8859072923660278 -1.6707680225372314
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 2.2309472560882568 -1.1708914041519165
-   vertex 8 5.1453285217285156 -3.0741908550262451
-   vertex 8 5.6115593910217285 -2.106053352355957
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 2.2309472560882568 -1.1708914041519165
-   vertex 8 1.8859072923660278 -1.6707680225372314
-   vertex 8 5.1453285217285156 -3.0741908550262451
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 0.89344334602355957 -2.3558163642883301
-   vertex 8 1.8521710634231567 -5.7003965377807617
-   vertex 8 2.8402509689331055 -5.2780709266662598
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 1.8521710634231567 5.7003965377807617
-   vertex 8 0.30369770526885986 2.5011756420135498
-   vertex 8 0.89344334602355957 2.3558163642883301
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 0.89344334602355957 -2.3558163642883301
-   vertex 8 2.8402509689331055 -5.2780709266662598
-   vertex 8 1.4312652349472046 -2.0735456943511963
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 1.8521710634231567 5.7003965377807617
-   vertex 8 0.89344334602355957 2.3558163642883301
-   vertex 8 2.8402509689331055 5.2780709266662598
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 2.4463324546813965 -0.60296684503555298
-   vertex 8 5.6115593910217285 -2.106053352355957
-   vertex 8 5.8974294662475586 -1.070225715637207
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -5.7777538299560547 -1.5945587158203125
-   vertex 8 -5.4001836776733398 -2.6005914211273193
-   vertex 8 -2.4463324546813965 -0.60296684503555298
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 2.4463324546813965 -0.60296684503555298
-   vertex 8 2.2309472560882568 -1.1708914041519165
-   vertex 8 5.6115593910217285 -2.106053352355957
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 0.80456084012985229 5.9395065307617188
-   vertex 8 0.30369770526885986 2.5011756420135498
-   vertex 8 1.8521710634231567 5.7003965377807617
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 0.30369770526885986 -2.5011756420135498
-   vertex 8 -0.26890864968299866 -5.9877161979675293
-   vertex 8 0.80456084012985229 -5.9395065307617188
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 0.30369770526885986 -2.5011756420135498
-   vertex 8 0.80456084012985229 -5.9395065307617188
-   vertex 8 1.8521710634231567 -5.7003965377807617
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 0.30369770526885986 -2.5011756420135498
-   vertex 8 1.8521710634231567 -5.7003965377807617
-   vertex 8 0.89344334602355957 -2.3558163642883301
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -5.9696226119995117 -0.53727573156356812
-   vertex 8 -2.4463324546813965 -0.60296684503555298
-   vertex 8 -2.5195460319519043 -8.8817841970012523e-15
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 2.5195460319519043 -5.3290705182007514e-15
-   vertex 8 5.9937515258789062 -8.8817841970012523e-15
-   vertex 8 5.8974294662475586 1.070225715637207
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -5.9696226119995117 -0.53727573156356812
-   vertex 8 -5.7777538299560547 -1.5945587158203125
-   vertex 8 -2.4463324546813965 -0.60296684503555298
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -0.26890864968299866 5.9877161979675293
-   vertex 8 -0.30369770526885986 2.5011756420135498
-   vertex 8 0.30369770526885986 2.5011756420135498
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 2.5195460319519043 -5.3290705182007514e-15
-   vertex 8 5.8974294662475586 -1.070225715637207
-   vertex 8 5.9937515258789062 -8.8817841970012523e-15
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 2.5195460319519043 -5.3290705182007514e-15
-   vertex 8 2.4463324546813965 -0.60296684503555298
-   vertex 8 5.8974294662475586 -1.070225715637207
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 -0.30369770526885986 -2.5011756420135498
-   vertex 8 -1.3337352275848389 -5.8434758186340332
-   vertex 8 -0.26890864968299866 -5.9877161979675293
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -0.30369770526885986 -2.5011756420135498
-   vertex 8 -0.26890864968299866 -5.9877161979675293
-   vertex 8 0.30369770526885986 -2.5011756420135498
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -0.26890864968299866 5.9877161979675293
-   vertex 8 0.30369770526885986 2.5011756420135498
-   vertex 8 0.80456084012985229 5.9395065307617188
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -5.9696226119995117 0.53727573156356812
-   vertex 8 -2.5195460319519043 -8.8817841970012523e-15
-   vertex 8 -2.4463324546813965 0.60296684503555298
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -5.9696226119995117 0.53727573156356812
-   vertex 8 -5.9696226119995117 -0.53727573156356812
-   vertex 8 -2.5195460319519043 -8.8817841970012523e-15
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 2.4463324546813965 0.60296684503555298
-   vertex 8 5.8974294662475586 1.070225715637207
-   vertex 8 5.6115593910217285 2.106053352355957
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -1.3337352275848389 5.8434758186340332
-   vertex 8 -0.89344334602355957 2.3558163642883301
-   vertex 8 -0.30369770526885986 2.5011756420135498
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -1.3337352275848389 5.8434758186340332
-   vertex 8 -0.30369770526885986 2.5011756420135498
-   vertex 8 -0.26890864968299866 5.9877161979675293
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 2.4463324546813965 0.60296684503555298
-   vertex 8 2.5195460319519043 -5.3290705182007514e-15
-   vertex 8 5.8974294662475586 1.070225715637207
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -5.7777538299560547 1.5945587158203125
-   vertex 8 -5.9696226119995117 0.53727573156356812
-   vertex 8 -2.4463324546813965 0.60296684503555298
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -0.89344334602355957 -2.3558163642883301
-   vertex 8 -1.3337352275848389 -5.8434758186340332
-   vertex 8 -0.30369770526885986 -2.5011756420135498
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -2.3556942939758301 5.5114212036132812
-   vertex 8 -1.4312652349472046 2.0735456943511963
-   vertex 8 -0.89344334602355957 2.3558163642883301
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 -0.89344334602355957 -2.3558163642883301
-   vertex 8 -2.3556942939758301 -5.5114212036132812
-   vertex 8 -1.3337352275848389 -5.8434758186340332
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -2.3556942939758301 5.5114212036132812
-   vertex 8 -0.89344334602355957 2.3558163642883301
-   vertex 8 -1.3337352275848389 5.8434758186340332
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 2.2309472560882568 1.1708914041519165
-   vertex 8 5.6115593910217285 2.106053352355957
-   vertex 8 5.1453285217285156 3.0741908550262451
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -5.4001836776733398 2.6005914211273193
-   vertex 8 -2.4463324546813965 0.60296684503555298
-   vertex 8 -2.2309472560882568 1.1708914041519165
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 -5.4001836776733398 2.6005914211273193
-   vertex 8 -5.7777538299560547 1.5945587158203125
-   vertex 8 -2.4463324546813965 0.60296684503555298
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 2.2309472560882568 1.1708914041519165
-   vertex 8 2.4463324546813965 0.60296684503555298
-   vertex 8 5.6115593910217285 2.106053352355957
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -1.4312652349472046 -2.0735456943511963
-   vertex 8 -2.3556942939758301 -5.5114212036132812
-   vertex 8 -0.89344334602355957 -2.3558163642883301
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -3.3019397258758545 5.0022249221801758
-   vertex 8 -1.4312652349472046 2.0735456943511963
-   vertex 8 -2.3556942939758301 5.5114212036132812
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 -1.4312652349472046 -2.0735456943511963
-   vertex 8 -3.3019397258758545 -5.0022249221801758
-   vertex 8 -2.3556942939758301 -5.5114212036132812
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -4.8490467071533203 3.5230386257171631
-   vertex 8 -2.2309472560882568 1.1708914041519165
-   vertex 8 -1.8859072923660278 1.6707680225372314
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 -4.8490467071533203 3.5230386257171631
-   vertex 8 -5.4001836776733398 2.6005914211273193
-   vertex 8 -2.2309472560882568 1.1708914041519165
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 -4.1420578956604004 4.3322529792785645
-   vertex 8 -1.8859072923660278 1.6707680225372314
-   vertex 8 -1.4312652349472046 2.0735456943511963
-  endloop
- endfacet
- facet normal 1 -0 0
-  outer loop
-   vertex 8 -4.1420578956604004 4.3322529792785645
-   vertex 8 -4.8490467071533203 3.5230386257171631
-   vertex 8 -1.8859072923660278 1.6707680225372314
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 -4.1420578956604004 4.3322529792785645
-   vertex 8 -1.4312652349472046 2.0735456943511963
-   vertex 8 -3.3019397258758545 5.0022249221801758
-  endloop
- endfacet
- facet normal 1 0 0
-  outer loop
-   vertex 8 1.8859072923660278 1.6707680225372314
-   vertex 8 5.1453285217285156 3.0741908550262451
-   vertex 8 4.5137233734130859 3.9435210227966309
-  endloop
- endfacet
- facet normal 1 0 -0
-  outer loop
-   vertex 8 1.8859072923660278 1.6707680225372314
-   vertex 8 2.2309472560882568 1.1708914041519165
-   vertex 8 5.1453285217285156 3.0741908550262451
-  endloop
- endfacet
-endsolid
diff --git a/apps/cpu/Multiphase/backup/tubeTransformed.stl b/apps/cpu/Multiphase/backup/tubeTransformed.stl
deleted file mode 100644
index f918dac8b84944d8e46c93df2e0cadec0738b647..0000000000000000000000000000000000000000
Binary files a/apps/cpu/Multiphase/backup/tubeTransformed.stl and /dev/null differ
diff --git a/apps/cpu/MultiphaseDropletTest/CMakeLists.txt b/apps/cpu/MultiphaseDropletTest/CMakeLists.txt
deleted file mode 100644
index e4f881190873e27a688b624803bc25ccc8fb4b9b..0000000000000000000000000000000000000000
--- a/apps/cpu/MultiphaseDropletTest/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-PROJECT(MultiphaseDropletTest)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids  FILES droplet.cpp )
diff --git a/apps/cpu/MultiphaseDropletTest/DropletTest.cfg b/apps/cpu/MultiphaseDropletTest/DropletTest.cfg
deleted file mode 100644
index 016e34072c1ff69e284cc1743ad684cb1a382e82..0000000000000000000000000000000000000000
--- a/apps/cpu/MultiphaseDropletTest/DropletTest.cfg
+++ /dev/null
@@ -1,44 +0,0 @@
-#pathname = d:/temp/MultiphaseDropletTest
-pathname = E:/Multiphase/DropletTest_Test
-
-numOfThreads = 4
-availMem = 10e9
-
-#Grid
-
-boundingBox = 0 256 512 768 0 3
-blocknx = 16 16 3
-
-dx = 1
-refineLevel = 0
-
-#Simulation
-uLB = 0 #0.001#0.005#0.005 
-Re = 10
-nuL = 1e-2 #1e-5# 1.0e-5 #!1e-2
-nuG = 0.015811388300841892 #5e-2 #1e-4 # 1e-8 # 1.16e-4 #!1e-2
-densityRatio = 10
-sigma = 1.0850694444444444e-06 #1e-10 #1e-6  # 1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5
-interfaceThickness = 4.096
-radius = 25.6
-contactAngle = 110.0
-#gravity = 0.0
-gravity = -1.0348028606838648e-08 #-5.04e-6
-phi_L = 0.0
-phi_H = 1.0
-Phase-field Relaxation = 0.6
-Mobility = 0.056 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation parameter, to activate it need to change in kernel tauH to tauH1
-
-
-logToFile = false
-
-newStart = true
-restartStep = 100000
-
-cpStart = 1000
-cpStep = 1000
-
-outTime = 100
-endTime = 10000
-
-rStep = 159990 #160000
\ No newline at end of file
diff --git a/apps/cpu/MultiphaseDropletTest/droplet.cpp b/apps/cpu/MultiphaseDropletTest/droplet.cpp
deleted file mode 100644
index 9474a1fe575d498c0930b554b4c77d064a418126..0000000000000000000000000000000000000000
--- a/apps/cpu/MultiphaseDropletTest/droplet.cpp
+++ /dev/null
@@ -1,457 +0,0 @@
-#include <iostream>
-#include <string>
-#include <memory>
-
-#if defined(__unix__)
-#include <stdio.h>
-#include <stdlib.h>
-#endif
-
-#include "VirtualFluids.h"
-#include "MultiphaseFlow/MultiphaseFlow.h"
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-void run(string configname)
-{
-    using namespace vf::lbm::dir;
-
-    try {
-        vf::basics::ConfigurationFile config;
-        config.load(configname);
-
-        string pathname            = config.getValue<string>("pathname");
-        int numOfThreads           = config.getValue<int>("numOfThreads");
-        vector<int> blocknx        = config.getVector<int>("blocknx");
-        vector<real> boundingBox = config.getVector<real>("boundingBox");
-        real uLB             = config.getValue<real>("uLB");
-        real nuL             = config.getValue<real>("nuL");
-        real nuG             = config.getValue<real>("nuG");
-        real densityRatio    = config.getValue<real>("densityRatio");
-        real sigma           = config.getValue<real>("sigma");
-        int interfaceThickness = config.getValue<int>("interfaceThickness");
-        real radius          = config.getValue<real>("radius");
-        real theta           = config.getValue<real>("contactAngle");
-        //double gr              = config.getValue<double>("gravity");
-        real phiL            = config.getValue<real>("phi_L");
-        real phiH            = config.getValue<real>("phi_H");
-        real tauH            = config.getValue<real>("Phase-field Relaxation");
-        real mob             = config.getValue<real>("Mobility");
-
-        real endTime     = config.getValue<real>("endTime");
-        real outTime     = config.getValue<real>("outTime");
-        real availMem    = config.getValue<real>("availMem");
-        int refineLevel    = config.getValue<int>("refineLevel");
-        real Re          = config.getValue<real>("Re");
-        real dx          = config.getValue<real>("dx");
-        bool logToFile     = config.getValue<bool>("logToFile");
-        real restartStep = config.getValue<real>("restartStep");
-        real cpStart     = config.getValue<real>("cpStart");
-        real cpStep      = config.getValue<real>("cpStep");
-        bool newStart      = config.getValue<bool>("newStart");
-        //double rStep = config.getValue<double>("rStep");
-
-        SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-        int myid                = comm->getProcessID();
-
-        if (myid == 0)
-            UBLOG(logINFO, "Droplet Test: Start!");
-
-        if (logToFile) {
-#if defined(__unix__)
-            if (myid == 0) {
-                const char *str = pathname.c_str();
-                mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-            }
-#endif
-
-            if (myid == 0) {
-                stringstream logFilename;
-                logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-                UbLog::output_policy::setStream(logFilename.str());
-            }
-        }
-        
-        std::string fileName = "./LastTimeStep" + std::to_string((int)boundingBox[1]) + ".txt";
-
-//#if defined(__unix__)
-//         double lastTimeStep = 0;
-//         //if (!newStart) 
-//         {
-//             std::ifstream ifstr(fileName);
-//             ifstr >> lastTimeStep;
-//             restartStep = lastTimeStep;
-//             if(endTime >= lastTimeStep)
-//                endTime = lastTimeStep + rStep;
-//             else
-//                return;
-//         }    
-//#endif
-
-        //Sleep(30000);
-
-        // LBMReal dLB = 0; // = length[1] / dx;
-        real rhoLB = 0.0;
-        real nuLB  = nuL; //(uLB*dLB) / Re;
-
-        //diameter of circular droplet
-        real D  = 2.0*radius;
-
-        //density retio
-        real r_rho = densityRatio;
-
-        //density of heavy fluid
-        real rho_h = 1.0;
-        //density of light fluid
-        real rho_l = rho_h / r_rho;
-
-        //kinimatic viscosity
-        real nu_h = nuL;
-        //LBMReal nu_l = nuG;
-        //#dynamic viscosity
-        real mu_h = rho_h * nu_h;
-        
-        //gravity
-        real g_y = Re* Re* mu_h* mu_h / (rho_h * (rho_h - rho_l) * D * D * D);
-        //Eotvos number
-        real Eo = 100;
-        //surface tension
-        sigma = rho_h* g_y* D* D / Eo;
-
-        //g_y = 0;
-
-        real beta  = 12.0 * sigma / interfaceThickness;
-        real kappa = 1.5 * interfaceThickness * sigma;
-
-        if (myid == 0) {
-                //UBLOG(logINFO, "uLb = " << uLB);
-                //UBLOG(logINFO, "rho = " << rhoLB);
-                UBLOG(logINFO, "D = " << D);
-                UBLOG(logINFO, "nuL = " << nuL);
-                UBLOG(logINFO, "nuG = " << nuG);
-                UBLOG(logINFO, "Re = " << Re);
-                UBLOG(logINFO, "Eo = " << Eo);
-                UBLOG(logINFO, "g_y = " << g_y);
-                UBLOG(logINFO, "sigma = " << sigma);
-                UBLOG(logINFO, "dx = " << dx);
-                UBLOG(logINFO, "Preprocess - start");
-        }
-
-        SPtr<LBMUnitConverter> conv(new LBMUnitConverter());
-
-        //const int baseLevel = 0;
-
-        
-        SPtr<Rheology> thix = Rheology::getInstance();
-        thix->setYieldStress(0);
-
-        SPtr<LBMKernel> kernel;
-
-        //kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel());
-       // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel());
-        //kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel());
-        //kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel());
-        //kernel = make_shared< MultiphaseScaleDistributionLBMKernel>();
-        //kernel = SPtr<LBMKernel>(new MultiphaseSharpInterfaceLBMKernel());
-        kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>();
-
-        mu::Parser fgr;
-        fgr.SetExpr("-(rho-rho_l)*g_y");
-        fgr.DefineConst("rho_l", rho_l);
-        fgr.DefineConst("g_y", g_y);
-
-        kernel->setWithForcing(true);
-        kernel->setForcingX1(0.0);
-        kernel->setForcingX2(fgr);
-        kernel->setForcingX3(0.0);
-
-        kernel->setPhiL(phiL);
-        kernel->setPhiH(phiH);
-        kernel->setPhaseFieldRelaxation(tauH);
-        kernel->setMobility(mob);
-        kernel->setInterfaceWidth(interfaceThickness);
-
-
-        kernel->setCollisionFactorMultiphase(nuL, nuG);
-        kernel->setDensityRatio(densityRatio);
-        kernel->setMultiphaseModelParameters(beta, kappa);
-        kernel->setContactAngle(theta);
-
-        SPtr<BCSet> bcProc(new BCSet());
-        // BCSetPtr bcProc(new ThinWallBCSet());
-
-        kernel->setBCSet(bcProc);
-
-        SPtr<BC> noSlipBC(new NoSlipBC());
-        noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy()));
-
-        SPtr<BC> outflowBC(new DensityBC(rhoLB));
-        outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-
-        //////////////////////////////////////////////////////////////////////////////////
-        // BC visitor
-        MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
-        bcVisitor.addBC(noSlipBC);
-        bcVisitor.addBC(outflowBC);
-
-        SPtr<Grid3D> grid(new Grid3D(comm));
-        grid->setDeltaX(dx);
-        grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-        grid->setPeriodicX1(true);
-        grid->setPeriodicX2(false);
-        grid->setPeriodicX3(true);
-        grid->setGhostLayerWidth(2);
-
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
-
-        //////////////////////////////////////////////////////////////////////////
-        // restart
-        SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-        //SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm));
-        SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm));
-        //SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm));
-        // rcp->setNu(nuLB);
-        // rcp->setNuLG(nuL, nuG);
-        // rcp->setDensityRatio(densityRatio);
-
-        rcp->setLBMKernel(kernel);
-        rcp->setBCSet(bcProc);
-        //////////////////////////////////////////////////////////////////////////
-
-        if (newStart) {
-
-            // bounding box
-            real g_minX1 = boundingBox[0];
-            real g_minX2 = boundingBox[2];
-            real g_minX3 = boundingBox[4];
-
-            real g_maxX1 = boundingBox[1];
-            real g_maxX2 = boundingBox[3];
-            real g_maxX3 = boundingBox[5];
-
-            // geometry
-            SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            if (myid == 0)
-                GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube",
-                    WbWriterVtkXmlBinary::getInstance());
-
-
-
-            GenBlocksGridVisitor genBlocks(gridCube);
-            grid->accept(genBlocks);
-
-            real dx2 = 2.0 * dx;
-            GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_minX2, g_maxX3 + dx2));
-            GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - dx2, g_maxX2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2));
-            GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance());
-
-            SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID));
- 
-            SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(
-                grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-            InteractorsHelper intHelper(grid, metisVisitor, true);
-            intHelper.addInteractor(wallYminInt);
-            intHelper.addInteractor(wallYmaxInt);
-            intHelper.selectBlocks();
-
-            ppblocks->update(0);
-            ppblocks.reset();
-
-            unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-            int ghostLayer                    = 5;
-            unsigned long long numberOfNodesPerBlock =
-                (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]);
-            unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-            unsigned long long numberOfNodesPerBlockWithGhostLayer =
-                numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-            real needMemAll =
-                real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4));
-            real needMem = needMemAll / real(comm->getNumberOfProcesses());
-
-            if (myid == 0) {
-                UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-                UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-                int minInitLevel = grid->getCoarsestInitializedLevel();
-                int maxInitLevel = grid->getFinestInitializedLevel();
-                for (int level = minInitLevel; level <= maxInitLevel; level++) {
-                    int nobl = grid->getNumberOfBlocks(level);
-                    UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-                    UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock);
-                }
-                UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-                UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-                UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-            }
-
-            MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nuL, nuG, availMem, needMem);
-
-            grid->accept(kernelVisitor);
-
-            if (refineLevel > 0) {
-                SetUndefinedNodesBlockVisitor undefNodesVisitor;
-                grid->accept(undefNodesVisitor);
-            }
-
-
-            intHelper.setBC();
-
-            // initialization of distributions
-            real x1c = (g_maxX1 + g_minX1)/2; //
-            real x2c = (g_maxX2 + g_minX2)/2;
-            real x3c = (g_maxX3 + g_minX3) / 2;
-            //1.5; // 2.5 * D; //(g_maxX3 - g_minX3-1)/2;
-            //LBMReal x3c = 2.5 * D;
-            mu::Parser fct1;
-            fct1.SetExpr("0.5-0.5*tanh(2*(sqrt(0*(x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-            fct1.DefineConst("x1c", x1c);
-            fct1.DefineConst("x2c", x2c);
-            fct1.DefineConst("x3c", x3c);
-            fct1.DefineConst("radius", radius);
-            fct1.DefineConst("interfaceThickness", interfaceThickness);
-
-            mu::Parser fct2;
-            fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt(0*(x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-            //fct2.SetExpr("uLB");
-            fct2.DefineConst("uLB", uLB);
-            fct2.DefineConst("x1c", x1c);
-            fct2.DefineConst("x2c", x2c);
-            fct2.DefineConst("x3c", x3c);
-            fct2.DefineConst("radius", radius);
-            fct2.DefineConst("interfaceThickness", interfaceThickness);
-
-            //MultiphaseInitDistributionsBlockVisitor initVisitor(densityRatio);
-            MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
-            initVisitor.setPhi(fct1);
-            initVisitor.setVx2(fct2);
-            grid->accept(initVisitor);
-
-            // boundary conditions grid
-            {
-                SPtr<UbScheduler> geoSch(new UbScheduler(1));
-                SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(
-                    grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-                ppgeo->update(0);
-                ppgeo.reset();
-            }
-
-            if (myid == 0)
-                UBLOG(logINFO, "Preprocess - end");
-        } else {
-            if (myid == 0) {
-                UBLOG(logINFO, "Parameters:");
-                UBLOG(logINFO, "uLb = " << uLB);
-                UBLOG(logINFO, "rho = " << rhoLB);
-                UBLOG(logINFO, "nuLb = " << nuLB);
-                UBLOG(logINFO, "Re = " << Re);
-                UBLOG(logINFO, "dx = " << dx);
-                UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-                UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-                UBLOG(logINFO, "path = " << pathname);
-            }
-
-            rcp->restart((int)restartStep);
-            grid->setTimeStep(restartStep);
-
-            if (myid == 0)
-                UBLOG(logINFO, "Restart - end");
-        }
-
-        grid->accept(bcVisitor);
-
-        //TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-        //grid->accept(setConnsVisitor);
-
-        //ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        //grid->accept(setConnsVisitor);
-
-        TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        grid->accept(setConnsVisitor);
-
-        SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-        real t_ast, t;
-        t_ast = 2;
-        t = (int)(t_ast/std::sqrt(g_y/D));
-        visSch->addSchedule(t,t,t); //t=2
-        t_ast = 3;
-        t = (int)(t_ast/std::sqrt(g_y/D));        
-        visSch->addSchedule(t,t,t); //t=3
-        t_ast = 4;
-        t = (int)(t_ast/std::sqrt(g_y/D));        
-        visSch->addSchedule(t,t,t); //t=4
-        t_ast = 5;
-        t = (int)(t_ast/std::sqrt(g_y/D));        
-        visSch->addSchedule(t,t,t); //t=5
-        t_ast = 6;
-        t = (int)(t_ast/std::sqrt(g_y/D)); 
-        visSch->addSchedule(t,t,t); //t=6
-        t_ast = 7;
-        t = (int)(t_ast/std::sqrt(g_y/D));         
-        visSch->addSchedule(t,t,t); //t=7
-        t_ast = 9;
-        t = (int)(t_ast/std::sqrt(g_y/D));         
-        visSch->addSchedule(t,t,t); //t=9
-
-        SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> pp(new WriteSharpInterfaceQuantitiesSimulationObserver(
-            grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-        //if(grid->getTimeStep() == 0) 
-            pp->update(restartStep);
-
-        SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-        SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
-
-        omp_set_num_threads(numOfThreads);
-
-        SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-        SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-        simulation->addSimulationObserver(npr);
-        simulation->addSimulationObserver(pp);
-        simulation->addSimulationObserver(rcp);
-
-
-        if (myid == 0)
-            UBLOG(logINFO, "Simulation-start");
-        simulation->run();
-        if (myid == 0)
-            UBLOG(logINFO, "Simulation-end");
-            
-//#if defined(__unix__)
-//         //if (!newStart) 
-//         //{
-//            if (myid == 0) 
-//            {
-//                std::ofstream ostr(fileName);
-//                ostr << endTime;
-//                cout << "start sbatch\n";
-//                //system("./start.sh");
-//                //system("echo test!");
-//                std::string str = "sbatch startJob" + std::to_string((int)boundingBox[1]) + ".sh";
-//                //system("sbatch startJob512.sh");
-//                system(str.c_str());
-//            }   
-//            //MPI_Barrier((MPI_Comm)comm->getNativeCommunicator()); 
-//         //}
-//#endif
-
-    } catch (std::exception &e) {
-        cerr << e.what() << endl << flush;
-    } catch (std::string &s) {
-        cerr << s << endl;
-    } catch (...) {
-        cerr << "unknown exception" << endl;
-    }
-}
-int main(int argc, char *argv[])
-{
-    // Sleep(30000);
-    if (argv != NULL) {
-        if (argv[1] != NULL) {
-            run(string(argv[1]));
-        } else {
-            cout << "Configuration file is missing!" << endl;
-        }
-    }
-}
diff --git a/apps/cpu/Nozzle/CMakeLists.txt b/apps/cpu/Nozzle/CMakeLists.txt
deleted file mode 100644
index f72fcd0af885fc6577872fc92ce6d3b263ac2ab3..0000000000000000000000000000000000000000
--- a/apps/cpu/Nozzle/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-PROJECT(Nozzle)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleSinglePhase.cpp )
diff --git a/apps/cpu/Nozzle/in.nozzle b/apps/cpu/Nozzle/in.nozzle
deleted file mode 100644
index 7b633f5538c72f164a7ddd25eedd0a20dc751467..0000000000000000000000000000000000000000
--- a/apps/cpu/Nozzle/in.nozzle
+++ /dev/null
@@ -1,127 +0,0 @@
-# shotcrete nozzle simulation
-
-atom_style    granular
-atom_modify   map array
-boundary      f f f
-newton        off
-
-communicate   single vel yes
-
-units         si
-
-#region        domain block -1.35 -1.25 0.34 0.44 -0.25 0.25 units box
-region        domain block -1.35 -1.25 0.34 0.44 -0.4 0.25 units box
-create_box    1 domain
-
-neighbor      0.002 bin
-neigh_modify  delay 0
-
-
-#Material properties required for new pair styles
-
-fix  m1 all property/global youngsModulus peratomtype 5.e6
-fix  m2 all property/global poissonsRatio peratomtype 0.45
-fix  m3 all property/global coefficientRestitution peratomtypepair 1 0.3
-fix  m4 all property/global coefficientFriction peratomtypepair 1 0.5
-fix  m5 all property/global k_finnie peratomtypepair 1 1.0
-
-# lb coupling fix
-fix lbcoupling all couple/lb/onetoone
-
-#New pair style
-pair_style  gran model hertz tangential history #Hertzian without cohesion
-pair_coeff  * *
-
-timestep    ${t_step}
-
-fix  gravi all gravity 9.81 vector 0.0 0.0 -1.0
-
-#the chute
-#variable meshes_dir string d:/Projects/TRR277/Project/WP4/Liggghts/
-variable meshes_dir string d:/Projects/TRR277/Project/WP4/Liggghts/A04/
-
-fix  cad1 all mesh/surface file ${meshes_dir}Duese_Acc_Einlass.stl type 1 scale 0.001
-fix  cad2 all mesh/surface file ${meshes_dir}Duese_Acc_Verteiler.stl type 1 scale 0.001
-fix  cad3 all mesh/surface file ${meshes_dir}Duese_Air_Einlass.stl type 1 scale 0.001
-fix  cad4 all mesh/surface file ${meshes_dir}Duese_Air_Verteiler.stl type 1 scale 0.001
-fix  cad5 all mesh/surface file ${meshes_dir}Duese_Volcan_Duese.stl type 1 scale 0.001
-fix  cad6 all mesh/surface file ${meshes_dir}Duese_Zwischenstueck.stl type 1 element_exclusion_list read list.file scale 0.001 curvature_tolerant yes
-
-fix  inface all mesh/surface file ${meshes_dir}InsertDisk2.stl type 1 scale 0.001
-fix  wallTop all mesh/surface file ${meshes_dir}InsertDisk3.stl type 1 scale 0.001
-
-#fix  granwalls all wall/gran model hertz tangential history mesh n_meshes 7 meshes cad1 cad2 cad3 cad4 cad5 cad6 wallTop
-fix  granwalls all wall/gran model hertz tangential history mesh n_meshes 8 meshes cad1 cad2 cad3 cad4 cad5 cad6 wallTop inface
-
-#distributions for insertion
-
-fix  pts1 all particletemplate/sphere 15485863 atom_type 1 density constant 2500 radius constant 0.001
-fix  pts2 all particletemplate/sphere 15485867 atom_type 1 density constant 2500 radius constant 0.002
-fix  pdd1 all particledistribution/discrete 32452843  2 pts1 0.3 pts2 0.7
-
-#region and insertion
-group  nve_group region domain
-#region bc cylinder z 0.0 0.0 0.015 0.201 0.23 units box
-#region bc cylinder z 0.0 0.0 10 213 220 units box
-
-region bc cylinder z -1.3013105 0.388582 0.01275005 0.18055 0.20105 units box
-
-#particle insertion
-# fix    ins nve_group insert/stream seed 32452867 distributiontemplate pdd1 &
-       # nparticles 6000 massrate 0.1 insert_every 1000 overlapcheck yes all_in no vel constant 0.0 0.0 -1.0 &
-       # insertion_face inface 
-
-
-# fix    ins nve_group insert/stream seed 32452867 distributiontemplate pdd1 &
-       # nparticles 6000 massrate 0.1 insert_every 1000 overlapcheck yes all_in no vel constant 0.0 0.0 -1.0 &
-       # insertion_face inface 
-       
- # fix    ins nve_group insert/stream seed 32452867 distributiontemplate pdd1 &
-        # nparticles 6000 massrate 0.1 insert_every ones overlapcheck yes all_in no vel constant 0.0 0.0 -1.0 &
-        # insertion_face inface 
-
-#working setup
-# fix ins nve_group insert/pack seed 32452867 distributiontemplate pdd1 insert_every 1000 &
-                       # overlapcheck yes vel constant 0.0 0.0 -1.0 volumefraction_region 0.1 region bc ntry_mc 1001
-fix ins nve_group insert/pack seed 32452867 distributiontemplate pdd1 insert_every 10 &
-                       overlapcheck yes vel constant 0.0 0.0 -1.0 volumefraction_region 0.1 region bc ntry_mc 1001   
-       
-# fix    ins all insert/stream seed 32452867 distributiontemplate pdd1 &
-       # nparticles INF massrate 0.1 overlapcheck yes all_in yes vel constant 0.0 0.0 -1.0 &
-       # insertion_face inface extrude_length 0.25   
-	   
-   
-
-#apply nve integration to all particles that are inserted as single particles
-fix    integr nve_group nve/sphere
-
-#output settings, include total thermal energy
-compute       1 all erotate/sphere
-thermo_style  custom step atoms ke c_1 vol
-thermo        1000
-thermo_modify lost ignore norm no
-
-variable dmp_time_cad equal 100000000
-
-dump   dumpcad1 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad1_*.stl cad1
-dump   dumpcad2 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad2_*.stl cad2
-dump   dumpcad3 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad3_*.stl cad3
-dump   dumpcad4 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad4_*.stl cad4
-dump   dumpcad5 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad5_*.stl cad5
-dump   dumpcad6 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad6_*.stl cad6
-dump   dumpinface all mesh/stl ${dmp_time_cad} ${dmp_dir}/inface_*.stl inface
-dump   dumpwallTop all mesh/stl ${dmp_time_cad} ${dmp_dir}/wallTop_*.stl wallTop
-
-#insert the first particles so that dump is not empty
-run    1
-dump   dmp all custom/vtk ${dmp_stp} ${dmp_dir}/particles_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius 
-
-
-#run 1
-#run 1
-
-#insert particles
-#run    100000 upto
-#unfix  ins
-
- 
diff --git a/apps/cpu/Nozzle/nozzle.cpp.1 b/apps/cpu/Nozzle/nozzle.cpp.1
deleted file mode 100644
index ff3374e6ec0e2b53dd2d888b8998619d34f3eae8..0000000000000000000000000000000000000000
--- a/apps/cpu/Nozzle/nozzle.cpp.1
+++ /dev/null
@@ -1,784 +0,0 @@
-#include <iostream>
-#include <memory>
-#include <string>
-
-#include "VirtualFluids.h"
-
-#include "LiggghtsCoupling/LiggghtsCoupling.h"
-
-#include "MultiphaseFlow/MultiphaseFlow.h"
-
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-int main(int argc, char *argv[])
-{
-    //Sleep(30000);
-
-    try {
-
-        std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-        int myid = comm->getProcessID();
-
-        // bounding box
-        // double g_minX1 = -1341.81e-3;
-        // double g_minX2 =  348.087e-3;
-        // double g_minX3 = -210e-3;
-
-        // double g_maxX1 = -1260.81e-3;
-        // double g_maxX2 =  429.087e-3;
-        // double g_maxX3 =  214.5e-3;
-
-        // double g_minX1 = -1341.81e-3 + 10e-3;
-        // double g_minX2 =  0.360872;
-        // double g_minX3 = -210e-3;
-
-        // double g_maxX1 = -1260.81e-3 - 10e-3;
-        // double g_maxX2 =  0.416302;
-        // double g_maxX3 = 210e-3;
-
-        // int blockNX[3] = { 10, 10, 10 };
-
-        double g_minX1 = -1.31431;
-        double g_minX2 = 0.375582;
-        double g_minX3 = -0.21; //-210e-3 - 0.2 - 6e-3; //- 1e-3;
-
-        double g_maxX1 = -1.28831;
-        double g_maxX2 = 0.401582;
-        double g_maxX3 = 0.175;//0.21;
-
-        int blockNX[3] = { 26, 26, 35 };
-
-        double dx = 1e-3;
-
-        double uLB_ref = 0.001;
-        // double rhoLB = 0.0;
-
-        // concrete
-        double d_part = 1e-3;
-        double V = 0.4; // flow rate [m^3/h]
-        double D = 0.026;     // shotcrete inlet diameter [m]
-        double R = D / 2.0;   // radius [m]
-        double A = UbMath::PI * R * R;
-        double u = V / 3600 / A;
-        double muConcrete = 2.1133054011798826; // [Pa s]
-        double rhoAir = 1.2041;                 // [kg/m^3]
-        double tau0 = 715.218181094648;         // Pa
-        double rhoConcrete = 2400;              // [kg/m^3]
-        double nu = muConcrete / rhoConcrete;
-
-        // double Re_D = d_part * u / nu;
-        // if (myid == 0) UBLOG(logINFO, "Re_D = " << Re_D);
-        //
-        SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uLB_ref);
-        if (myid == 0) std::cout << units->toString() << std::endl;
-
-        double interfaceThickness = 3; // 4.096;
-        double sigma = 0.3; //0.03;
-        double Re = rhoConcrete * u * d_part / muConcrete;
-        double We = rhoConcrete * u * u * d_part / sigma;
-
-        double u_LB_con = u * units->getFactorVelocityWToLb();
-        double nu_h_LB = nu * units->getFactorViscosityWToLb(); // uLB_ref * d_part * units->getFactorLentghWToLb() / Re;
-        double nu_l_LB = 0;                                     // = nu_h_LB;
-
-        double rho_h_LB = 1;
-
-        // surface tension
-        double sigma_LB = rho_h_LB *u_LB_con *u_LB_con *d_part * units->getFactorLentghWToLb() / We;
-
-        // LBMReal dLB = 0; // = length[1] / dx;
-        LBMReal rhoLB = 0.0;
-        // LBMReal nuLB = nu_l; //(uLB_ref*dLB) / Re;
-
-        double beta = 12.0 * sigma_LB / interfaceThickness;
-        double kappa = 1.5 * interfaceThickness * sigma_LB;
-
-        double phiL = 0.0;
-        double phiH = 1.0;
-        double tauH = 0.6; // Phase - field Relaxation
-        double mob = 0.02; // Mobility
-        // double nuL = 1e-2;
-        // double nuG = 0.015811388300841892;
-        double densityRatio = rhoConcrete / rhoAir;
-        // double sigma_old = 1.0850694444444444e-06;
-        //
-        // double beta_old = 12.0 * sigma / interfaceThickness;
-        // double kappa_old = 1.5 * interfaceThickness * sigma;
-
-        double theta = 110; // contact angle
-
-        // https://civilsir.com/density-of-cement-sand-and-aggregate-in-kg-m3-list-of-material-density/
-
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx);
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx);
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref));
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref));
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uRef);
-
-        double Bm = (tau0 * d_part) / (muConcrete * u);
-        double tau0_LB = Bm * nu_h_LB * u_LB_con / (d_part * units->getFactorLentghWToLb());
-
-        SPtr<Rheology> thix = Rheology::getInstance();
-        thix->setYieldStress(tau0_LB);
-
-        if (myid == 0) VF_LOG_INFO("Yield stress = {} Pa", tau0);
-        if (myid == 0) VF_LOG_INFO("Yield stress LB = {} ", tau0_LB);
-
-        //SPtr<BC> noSlipBC(new NoSlipBC());
-        //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-        SPtr<BC> noSlipBC(new NoSlipBC());
-        noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy()));
-
-        // concrete inflow boundary condition
-        mu::Parser fct;
-        fct.SetExpr("U");
-        fct.DefineConst("U", -u_LB_con);
-        if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} m/s", u);
-        if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} dx/dt", u_LB_con);
-        if (myid == 0) VF_LOG_INFO("Concrete Re = {}", Re);
-
-        //    // Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering
-        //    // Mechanics, 21(6), 371-379.
-        //    double cx1 = -1.31431 + R;
-        //    double cx2 = 0.375582 + R;
-        //    //double cx3 = 0.20105 + R;
-        //    double L = g_maxX1 - g_minX1;
-        //    double p_concrete = 1e5; // Pa = 1 Bar
-        //    double p1 = p_concrete * units->getFactorPressureWToLb();
-        //    double p2 = 0.0;
-        //    double drhoLB = 1.0 + rhoLB;
-        //    double muLB = drhoLB * nuLB;
-        //    double N = R * R / 2 * muLB * uLB_ref * (p1 - p2) / L - 3;
-
-        //    // mu::Parser fct;
-        //    fct.SetExpr("U*(1-(((((x2-y0)^2+(x1-x0)^2)^0.5)/R)^NplusOne))");
-        //    fct.DefineConst("x0", cx1);
-        //    fct.DefineConst("y0", cx2);
-        //    //fct.DefineConst("z0", cx3);
-        //    fct.DefineConst("R", R);
-        //    fct.DefineConst("U", uLB_ref * ((N + 3) / (N + 1)));
-        //    fct.DefineConst("NplusOne", N + 1.0);
-
-        //SPtr<BC> inflowConcreteBC(new VelocityBC(false, false, true, fct, 0, BCFunction::INFCONST));
-        //inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowConcreteBC(new MultiphaseVelocityBC(false, false, true, fct, phiH, 0, BCFunction::INFCONST));
-        inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        // air inflow boundary condition
-        //  Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering
-        //  Mechanics, 21(6), 371-379.
-        // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx);
-        // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref);
-        // double V = 40;      // flow rate [m^3/h]
-        // double D = 0.0166;  // air inlet diameter [m]
-        // double R = D / 2.0; // radius [m]
-        // double A = UbMath::PI * R * R;
-        // double u = V / 3600 / A;
-        // double uLB_ref = u * unitsAir->getFactorVelocityWToLb();
-        //// double cx1 = -1.2788 + R;
-        // double cx2 = 0.3803 + R;
-        // double cx3 = 0.1517 + R;
-        // double L = g_maxX1 - g_minX1;
-        // double p_air = 7e5; // Pa = 7 Bar
-        // double p1 = p_air;
-        // double p2 = 0.0;
-        // double mu = 17.2e-6; // Pa s, air 20° C
-        // double N = R * R / 2 * mu * u * (p1 - p2) / L - 3;
-        // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u);
-        // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_ref);
-        //
-
-        // double nu = mu / rhoConcrete;
-        // double Re = d_part * u / nu;
-        // if (myid == 0) VF_LOG_INFO("Re_air = {}", Re);
-
-        // double nuLB = d_part * unitsAir->getFactorLentghWToLb() * uLB_ref / Re;
-        // if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB);
-        // nu_l_LB = nuLB;
-  
-        SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref);
-        //SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx);
-        double V_air = 40./6./10.;  // flow rate [m^3/h]
-        double D_air = 0.00553;     // air inlet diameter [m]
-        double R_air = D_air / 2.0; // radius [m]
-        double A_air = UbMath::PI * (R_air * R_air);
-        double u_air = V_air / 3600 / A_air;
-        double uLB_air = u_air * unitsAir->getFactorVelocityWToLb();
-        // double cx1 = -1.2788 + R;
-        double cx2 = 0.385822 + R_air;
-        double cx3 = 0.135562 + R_air;
-        double L_air = 0.00747;
-        double p_air = 7e5; // Pa = 7 Bar
-        double p1 = p_air;
-        double p2 = 1e5;
-        double mu_air = 17.2e-6; // Pa s, air 20° C
-        double rho_air = 1.2041; // [kg/m^3]
-        double Re_inlet = D_air * u_air * rho_air / mu_air;
-        double lambda = 0.3164 / pow(Re_inlet, 0.25);
-        double deltaP = (lambda / (2. * R_air)) * (rho_air * pow(u_air, 2) / 2.); // Darcy friction factor (Rohrreibungszahl)
-        double N = pow(R_air, 2) / (2. * mu_air * u_air) * deltaP - 3.;
-        // double N = R_air * R_air / 2 * mu_air * u_air * (p1 - p2) / L_air - 3;
-        if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u_air);
-        if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_air);
-
-        double nu_air = mu_air / rho_air;
-        double Re_air = d_part * u_air / nu_air;
-        if (myid == 0) VF_LOG_INFO("Air Re = {}", Re_air);
-
-        double nuLB_air = nu_air * unitsAir->getFactorViscosityWToLb(); // d_part * unitsAir->getFactorLentghWToLb() * uLB_air / Re_air;
-        if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB_air);
-        nu_l_LB = nuLB_air;
-
-        if (myid == 0) VF_LOG_INFO("nu_h = {}", nu_h_LB);
-        if (myid == 0) VF_LOG_INFO("nu_l = {}", nu_l_LB);
-        if (myid == 0) VF_LOG_INFO("sigma_LB = {}", sigma_LB);
-
-        double p_air_LB = p_air * unitsAir->getFactorPressureWToLb();
-        if (myid == 0) VF_LOG_INFO("p_air_LB = {}", p_air_LB);
-
-        // mu::Parser fctVx1;
-        ////fctVx1.SetExpr("U");
-        ////fctVx1.DefineConst("U", uLB_air);
-        // mu::Parser fctVx2;
-        // fctVx2.SetExpr("U");
-        // fctVx2.DefineConst("U", 0);
-        // mu::Parser fctVx3;
-        ////fctVx3.SetExpr("U");
-        ////fctVx3.DefineConst("U", -uLB_air);
-
-        double cx1 = 0;
-        double alpha = 0;
-        double gamma = 0;
-        double U = uLB_air;// * ((N + 3.) / (N + 1.));
-
-        mu::Parser fctVx1;
-        //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        // fctVx1.SetExpr("(((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5/R)^NplusOne");
-        fctVx1.SetExpr("U*cos(alpha*_pi/180)");
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("R", R_air);
-        fctVx1.DefineConst("U", U); //* ((N + 3.) / (N + 1.)));
-        fctVx1.DefineConst("NplusOne", N + 1.0);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx1.DefineConst("gamma", gamma);
-
-        mu::Parser fctVx2;
-        //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        fctVx2.SetExpr("U*sin(alpha*_pi/180)");
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("R", R_air);
-        fctVx2.DefineConst("U", U); //* ((N + 3.) / (N + 1.)));
-        fctVx2.DefineConst("NplusOne", N + 1.0);
-        fctVx2.DefineConst("alpha", alpha);
-
-        mu::Parser fctVx3;
-        //fctVx3.SetExpr("U*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx3.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        fctVx3.SetExpr("U");
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        fctVx3.DefineConst("R", R_air);
-        fctVx3.DefineConst("U", -U); //* ((N + 3.) / (N + 1.)));
-        fctVx3.DefineConst("NplusOne", N + 1.0);
-        fctVx3.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("gamma", gamma);
-
-        // SPtr<BC> inflowAirBC1(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST));
-        // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        // t = U * sin(alpha * _pi / 180) * (1 - (((((x1 - x0) ^ 2 + (x2 - y0) ^ 2 + (x3 - z0) ^ 2) ^ 0.5) / R) ^ NplusOne));
-        cx1 = -1.31416;
-        cx2 = 0.388684;
-        cx3 = 0.138177;
-        alpha = 0;
-        gamma = 225;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx1.DefineConst("gamma", gamma);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("gamma", gamma);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        fctVx3.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("gamma", gamma);
-
-        SPtr<BC> inflowAirBC1(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        fctVx1.DefineVar("x1", &cx1);
-        fctVx1.DefineVar("x2", &cx2);
-        fctVx1.DefineVar("x3", &cx3);
-        fctVx2.DefineVar("x1", &cx1);
-        fctVx2.DefineVar("x2", &cx2);
-        fctVx2.DefineVar("x3", &cx3);
-        fctVx3.DefineVar("x1", &cx1);
-        fctVx3.DefineVar("x2", &cx2);
-        fctVx3.DefineVar("x3", &cx3);
-
-        VF_LOG_INFO("fctVx1 = {}", fctVx1.Eval());
-        VF_LOG_INFO("fctVx2 = {}", fctVx2.Eval());
-        VF_LOG_INFO("fctVx3 = {}", fctVx3.Eval());
-        VF_LOG_INFO("N = {}", N);
-        VF_LOG_INFO("NplusOne = {}", N + 1.0);
-        //return 0;
-
-        cx1 = -1.31303;
-        cx2 = 0.377234;
-        cx3 = 0.138174;
-        alpha = 60;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        SPtr<BC> inflowAirBC2(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.2948374155694822;
-        cx2 = 0.37733728717266285;
-        cx3 = 0.13840460401111598;
-        alpha = 120;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        SPtr<BC> inflowAirBC3(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.28847;
-        cx2 = 0.3885;
-        cx3 = 0.1385;
-        alpha = 180;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        SPtr<BC> inflowAirBC4(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.294771417778694;
-        cx2 = 0.399787947463142;
-        cx3 = 0.1383429692754194;
-        alpha = 240;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        SPtr<BC> inflowAirBC5(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.3077338898450492;
-        cx2 = 0.3998516560596088;
-        cx3 = 0.13843501416896437;
-        alpha = 300;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        SPtr<BC> inflowAirBC6(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        // Pressure BC for air inlet
-        // SPtr<BC> inflowAirBC1(new DensityBC(p_air_LB));
-        // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-
-        SPtr<BC> outflowBC(new DensityBC(rhoLB));
-        //outflowBC->setBCStrategy(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
-        outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-        
-        // SPtr<BC> outflowBC(new DensityBC(rhoLB));
-        //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy()));
-        //////////////////////////////////////////////////////////////////////////////////
-        // BC visitor
-        // BoundaryConditionsBlockVisitor bcVisitor;♣
-        MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
-        bcVisitor.addBC(noSlipBC);
-        bcVisitor.addBC(inflowConcreteBC);
-        bcVisitor.addBC(inflowAirBC1);
-        bcVisitor.addBC(outflowBC);
-
-        // SPtr<LBMKernel> kernel   = make_shared<IBcumulantK17LBMKernel>();
-        // SPtr<LBMKernel> kernel   = make_shared<CumulantK17LBMKernel>();
-        // SPtr<LBMKernel> kernel = make_shared<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>();
-        // SPtr<LBMKernel> kernel = make_shared<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>();
-        //SPtr<LBMKernel> kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>();
-        //SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>();
-        SPtr<LBMKernel> kernel = make_shared<IBsharpInterfaceLBMKernel>();
-
-        kernel->setWithForcing(false);
-        kernel->setForcingX1(0.0);
-        kernel->setForcingX2(0.0);
-        kernel->setForcingX3(0.0);
-
-        kernel->setPhiL(phiL);
-        kernel->setPhiH(phiH);
-        kernel->setPhaseFieldRelaxation(tauH);
-        kernel->setMobility(mob);
-        kernel->setInterfaceWidth(interfaceThickness);
-
-        kernel->setCollisionFactorMultiphase(nu_h_LB, nu_l_LB);
-        kernel->setDensityRatio(densityRatio);
-        kernel->setMultiphaseModelParameters(beta, kappa);
-        kernel->setContactAngle(theta);
-        kernel->setSigma(sigma_LB);
-
-        SPtr<BCSet> bcProc = make_shared<BCSet>();
-        kernel->setBCSet(bcProc);
-
-        SPtr<Grid3D> grid = make_shared<Grid3D>(comm);
-        grid->setPeriodicX1(false);
-        grid->setPeriodicX2(false);
-        grid->setPeriodicX3(false);
-        grid->setDeltaX(dx);
-        grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]);
-        grid->setGhostLayerWidth(2);
-
-        string geoPath = "d:/Projects/TRR277/Project/WP4/NozzleGeo";
-
-        string outputPath = "d:/temp/NozzleFlowTest_SharpInterface_With_Part_fraction_0.23";
-        UbSystem::makeDirectory(outputPath);
-        UbSystem::makeDirectory(outputPath + "/liggghts");
-
-        // if (myid == 0) {
-        //     stringstream logFilename;
-        //     logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-        //     UbLog::output_policy::setStream(logFilename.str());
-        // }
-
-        /////////////////////////////////////////////////////////////////////
-        //LIGGGHTS things
-        /////////////////////////////////////////////////////////////////////
-        string inFile1 = "d:/Projects/TRR277/Project/WP4/Config/in.nozzle";
-        // string inFile2 = "d:/Projects/VirtualFluids_LIGGGHTS_coupling/apps/cpu/LiggghtsApp/in2.lbdem";
-        MPI_Comm mpi_comm = *(MPI_Comm *)(comm->getNativeCommunicator());
-        LiggghtsCouplingWrapper wrapper(argv, mpi_comm);
-
-        double v_frac = 0.1;
-        double dt_phys = units->getFactorTimeLbToW();
-        int demSubsteps = 10;
-        double dt_dem = dt_phys / (double)demSubsteps;
-        int vtkSteps = 1000;
-        string demOutDir = outputPath + "/liggghts";
-
-        // wrapper.execCommand("echo none");
-
-        // wrapper.execFile((char*)inFile1.c_str());
-
-        //// set timestep and output directory
-        wrapper.setVariable("t_step", dt_dem);
-        wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps);
-        wrapper.setVariable("dmp_dir", demOutDir);
-
-        wrapper.execFile((char *)inFile1.c_str());
-        //wrapper.runUpto(demSubsteps - 1);
-        // wrapper.runUpto(1000);
-
-        //LatticeDecomposition lDec((g_maxX1 - g_minX1) / dx, (g_maxX2 - g_minX2) / dx, (g_maxX3 - g_minX3) / dx, wrapper.lmp, grid);
-
-        SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1);
-        SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, unitsAir);
-        //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(std::ceil((g_maxX1 - g_minX1) / dx), std::ceil((g_maxX2 - g_minX2) / dx), std::ceil((g_maxX3 - g_minX3) / dx), wrapper.lmp);
-        SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(26,26,420, wrapper.lmp);
-        
-        /////////////////////////////////////////////////////////////////////
-        /////////////////////////////////////////////////////////////////////
-        
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE));
-
-        SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
-        if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-        GenBlocksGridVisitor genBlocks(gridCube);
-        grid->accept(genBlocks);
-
-        // geo
-        //////////////////////////////////////////////////////////
-        int accuracy = Interactor3D::EDGES;
-        ///////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAirDistributor = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:start");
-        meshNozzleAirDistributor->readMeshFromSTLFileASCII(geoPath + "/01_Nozzle_Air_Distributor.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirDistributor.get(), outputPath + "/geo/meshNozzleAirDistributor", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAirDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAirInlet = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:start");
-        meshNozzleAirInlet->readMeshFromSTLFileASCII(geoPath + "/02_Nozzle_Air_Inlet.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirInlet.get(), outputPath + "/geo/meshNozzleAirInlet", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleSpacer = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:start");
-        meshNozzleSpacer->readMeshFromSTLFileASCII(geoPath + "/03_Nozzle_Spacer.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleSpacer.get(), outputPath + "/geo/meshNozzleSpacer", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleSpacer = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleSpacer, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAccDistributor = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:start");
-        meshNozzleAccDistributor->readMeshFromSTLFileASCII(geoPath + "/04_Nozzle_Acc_Distributor.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccDistributor.get(), outputPath + "/geo/meshNozzleAccDistributor", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAccDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAccInlet = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:start");
-        meshNozzleAccInlet->readMeshFromSTLFileASCII(geoPath + "/05_Nozzle_Acc_Inlet.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccInlet.get(), outputPath + "/geo/meshNozzleAccInlet", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAccInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle1 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:start");
-        meshNozzleVolcanNozzle1->readMeshFromSTLFileBinary(geoPath + "/06_1_Nozzle_Volcan_Nozzle.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle1.get(), outputPath + "/geo/meshNozzleVolcanNozzle1", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleVolcanNozzle1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle1, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle2 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:start");
-        meshNozzleVolcanNozzle2->readMeshFromSTLFileBinary(geoPath + "/06_2_Nozzle_Volcan_Nozzle.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle2.get(), outputPath + "/geo/meshNozzleVolcanNozzle2", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleVolcanNozzle2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle2, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        // box
-        SPtr<D3Q27Interactor> intrBox = SPtr<D3Q27Interactor>(new D3Q27Interactor(gridCube, grid, noSlipBC, Interactor3D::INVERSESOLID));
-        ///////////////////////////////////////////////////////////
-        // inflow
-        //GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, 0.20105, -1.30181 + 0.0005, 0.390872 - 0.00229, 0.23, 0.013));
-        GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, 0.175, -1.30181 + 0.0005, 0.390872 - 0.00229, 0.21, 0.013));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBC, Interactor3D::SOLID));
-        ///////////////////////////////////////////////////////////
-        // outflow
-        //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.22, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.21, 0.013));
-        //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.426, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.415, 0.013));
-        GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3+2.*dx, 0.013));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), outputPath + "/geo/geoOutflow", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrOutflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBC, Interactor3D::SOLID));
-        ///////////////////////////////////////////////////////////
-        // SPtr<GbTriFaceMesh3D> geoAirInlet = std::make_shared<GbTriFaceMesh3D>();
-        // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:start");
-        // geoAirInlet->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet.stl", true);
-        // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:end");
-        // if (myid == 0) GbSystem3D::writeGeoObject(geoAirInlet.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance());
-        // SPtr<Interactor3D> intrAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(geoAirInlet, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES);
-        /////////////////////////////////////////////////////////////
-        // Fluid area
-        GbCylinder3DPtr geoFluidArea(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoFluidArea.get(), outputPath + "/geo/geoFluidArea", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrFluidArea = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoFluidArea, grid, noSlipBC, Interactor3D::INVERSESOLID));
-        ///////////////////////////////////////////////////////////
-        ///////////////////////////////////////////////////////////
-        GbCylinder3DPtr geoAirInflow(new GbCylinder3D(-1.31431 - 0.0005, 0.388587, 0.1383275, -1.31431, 0.388587, 0.1383275, 0.002765));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrAirInflow = std::make_shared<D3Q27Interactor>(geoAirInflow, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet1 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:start");
-        meshAirInlet1->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_1.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet1.get(), outputPath + "/geo/meshAirInlet1", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet1, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet2 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:start");
-        meshAirInlet2->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_2.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet2.get(), outputPath + "/geo/meshAirInlet2", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet2, grid, inflowAirBC2, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet3 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:start");
-        meshAirInlet3->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_3.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet3.get(), outputPath + "/geo/meshAirInlet3", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet3 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet3, grid, inflowAirBC3, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet4 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:start");
-        meshAirInlet4->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_4.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet4.get(), outputPath + "/geo/meshAirInlet4", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet4 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet4, grid, inflowAirBC4, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet5 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:start");
-        meshAirInlet5->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_5.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet5.get(), outputPath + "/geo/meshAirInlet5", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet5 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet5, grid, inflowAirBC5, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet6 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:start");
-        meshAirInlet6->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_6.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet6.get(), outputPath + "/geo/meshAirInlet6", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet6 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet6, grid, inflowAirBC6, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-
-        InteractorsHelper intHelper(grid, partVisitor, false);
-
-        intHelper.addInteractor(intrFluidArea);
-        intHelper.addInteractor(intrNozzleVolcanNozzle2);
-        // intHelper.addInteractor(intrBox);
-        intHelper.addInteractor(intrInflow);
-        // intHelper.addInteractor(intrAirInflow);
-        intHelper.addInteractor(intAirInlet1);
-        intHelper.addInteractor(intAirInlet2);
-        intHelper.addInteractor(intAirInlet3);
-        intHelper.addInteractor(intAirInlet4);
-        intHelper.addInteractor(intAirInlet5);
-        intHelper.addInteractor(intAirInlet6);
-        intHelper.addInteractor(intrOutflow);
-
-        // intHelper.addInteractor(intrNozzleAirDistributor);
-        // intHelper.addInteractor(intrNozzleAirInlet);
-        // intHelper.addInteractor(intrNozzleSpacer);
-        // intHelper.addInteractor(intrNozzleAccDistributor);
-        // intHelper.addInteractor(intrNozzleAccInlet);
-        // intHelper.addInteractor(intrNozzleVolcanNozzle1);
-
-        intHelper.selectBlocks();
-
-        SPtr<SimulationObserver> ppblocks = make_shared<WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm);
-        ppblocks->update(0);
-        ppblocks.reset();
-
-        // if (myid == 0) UBLOG(logINFO, Utilities::toString(grid, comm->getNumberOfProcesses()));
-
-        //SetKernelBlockVisitor kernelVisitor(kernel, nu_l_LB, comm->getNumberOfProcesses());
-        MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h_LB, nu_l_LB, 1e9, 1);
-        grid->accept(kernelVisitor);
-
-
-        intHelper.setBC();
-
-        // InitDistributionsBlockVisitor initVisitor;
-        // grid->accept(initVisitor);
-
-        double x1c = -1.31431 + R;
-        double x2c = 0.375582 + R;
-        double Ri = 5;
-        double x3c = 0.136 + Ri;
-
-        //R = 0.2 - 0.145; // 0.078-0.04; // 0.2;
-
-        mu::Parser fct1;
-        // fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
-        fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
-        fct1.DefineConst("x1c", x1c);
-        fct1.DefineConst("x2c", x2c);
-        fct1.DefineConst("x3c", x3c);
-        fct1.DefineConst("radius", Ri);
-        fct1.DefineConst("interfaceThickness", interfaceThickness * dx);
-
-        MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
-        initVisitor.setPhi(fct1);
-        grid->accept(initVisitor);
-
-        //InitDistributionsBlockVisitor initVisitor;
-        //grid->accept(initVisitor);
-
-        // boundary conditions grid
-        {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppgeo->update(0);
-            ppgeo.reset();
-        }
-
-        grid->accept(bcVisitor);
-
-        //OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-        TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        grid->accept(setConnsVisitor);
-
-        int numOfThreads = 1;
-        omp_set_num_threads(numOfThreads);
-
-        SPtr<UbScheduler> nupsSch = std::make_shared<UbScheduler>(10, 10, 100);
-        SPtr<NUPSCounterSimulationObserver> nupsSimulationObserver = make_shared<NUPSCounterSimulationObserver>(grid, nupsSch, numOfThreads, comm);
-
-        //// write data for visualization of macroscopic quantities
-        SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps));
-        // SPtr<UbScheduler> visSch(new UbScheduler(1, 8700, 8800));
-        // visSch->addSchedule(1, 8700, 8800);
-        SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-        //writeMQSimulationObserver->update(0);
-
-        //SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-        //writeMQSimulationObserver->update(0);
-
-        int endTime = 10000000;
-        SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime));
-        simulation->addSimulationObserver(nupsSimulationObserver);
-        simulation->addSimulationObserver(lcSimulationObserver);
-        simulation->addSimulationObserver(writeMQSimulationObserver);
-
-        if (myid == 0) UBLOG(logINFO, "Simulation-start");
-        simulation->run();
-        if (myid == 0) UBLOG(logINFO, "Simulation-end");
-
-    } catch (std::exception &e) {
-        cerr << e.what() << endl << flush;
-    } catch (std::string &s) {
-        cerr << s << endl;
-    } catch (...) {
-        cerr << "unknown exception" << endl;
-    }
-    return 0;
-}
diff --git a/apps/cpu/Nozzle/nozzleSinglePhase.cpp b/apps/cpu/Nozzle/nozzleSinglePhase.cpp
deleted file mode 100644
index 90a84c35dbbfee39fa186ce68c98452a6f4a6cf5..0000000000000000000000000000000000000000
--- a/apps/cpu/Nozzle/nozzleSinglePhase.cpp
+++ /dev/null
@@ -1,799 +0,0 @@
-#include <iostream>
-#include <memory>
-#include <string>
-
-#include "VirtualFluids.h"
-
-#include "LiggghtsCoupling/LiggghtsCoupling.h"
-
-#include "MultiphaseFlow/MultiphaseFlow.h"
-
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-int main(int argc, char *argv[])
-{
-    //Sleep(30000);
-
-    try {
-
-        std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-        int myid = comm->getProcessID();
-
-        // bounding box
-        // double g_minX1 = -1341.81e-3;
-        // double g_minX2 =  348.087e-3;
-        // double g_minX3 = -210e-3;
-
-        // double g_maxX1 = -1260.81e-3;
-        // double g_maxX2 =  429.087e-3;
-        // double g_maxX3 =  214.5e-3;
-
-        // double g_minX1 = -1341.81e-3 + 10e-3;
-        // double g_minX2 =  0.360872;
-        // double g_minX3 = -210e-3;
-
-        // double g_maxX1 = -1260.81e-3 - 10e-3;
-        // double g_maxX2 =  0.416302;
-        // double g_maxX3 = 210e-3;
-
-        // int blockNX[3] = { 10, 10, 10 };
-
-        double g_minX1 = -1.31431;
-        double g_minX2 = 0.375582;
-        double g_minX3 = -0.21 + 0.035 * 8.0; //-0.21; //-210e-3 - 0.2 - 6e-3; //- 1e-3;
-
-        double g_maxX1 = -1.28831;
-        double g_maxX2 = 0.401582;
-        double g_maxX3 = 0.175;//0.21;
-
-        //int blockNX[3] = { 26, 26, 35 };
-        int blockNX[3] = { 26, 26, 35/5 };
-
-        double dx = 1e-3;
-
-        double uLB_ref = 0.0001;
-        // double rhoLB = 0.0;
-
-        // concrete
-        double d_part = 1e-3;
-        double V = 0.4*10.; // flow rate [m^3/h]
-        double D = 0.026;     // shotcrete inlet diameter [m]
-        double R = D / 2.0;   // radius [m]
-        double A = UbMath::PI * R * R;
-        double u = V / 3600 / A;
-        double muConcrete = 2.1133054011798826; // [Pa s]
-        double rhoAir = 1.2041;                 // [kg/m^3]
-        double tau0 = 715.218181094648;         // Pa
-        double rhoConcrete = 2400;              // [kg/m^3]
-        double nu = muConcrete / rhoConcrete;
-
-        // double Re_D = d_part * u / nu;
-        // if (myid == 0) UBLOG(logINFO, "Re_D = " << Re_D);
-        //
-        SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uLB_ref);
-        if (myid == 0) std::cout << units->toString() << std::endl;
-
-        double interfaceThickness = 3; // 4.096;
-        double sigma = 0.3; //0.03;
-        double Re = rhoConcrete * u * d_part / muConcrete;
-        double We = rhoConcrete * u * u * d_part / sigma;
-
-        double u_LB_con = u * units->getFactorVelocityWToLb();
-        double nu_h_LB = nu * units->getFactorViscosityWToLb(); // uLB_ref * d_part * units->getFactorLentghWToLb() / Re;
-        double nu_l_LB = 0;                                     // = nu_h_LB;
-
-        double rho_h_LB = 1;
-
-        // surface tension
-        double sigma_LB = rho_h_LB *u_LB_con *u_LB_con *d_part * units->getFactorLentghWToLb() / We;
-
-        // LBMReal dLB = 0; // = length[1] / dx;
-        LBMReal rhoLB = 0.0;
-        // LBMReal nuLB = nu_l; //(uLB_ref*dLB) / Re;
-
-        double beta = 12.0 * sigma_LB / interfaceThickness;
-        double kappa = 1.5 * interfaceThickness * sigma_LB;
-
-        double phiL = 0.0;
-        double phiH = 1.0;
-        double tauH = 0.6; // Phase - field Relaxation
-        double mob = 0.02; // Mobility
-        // double nuL = 1e-2;
-        // double nuG = 0.015811388300841892;
-        double densityRatio = rhoConcrete / rhoAir;
-        // double sigma_old = 1.0850694444444444e-06;
-        //
-        // double beta_old = 12.0 * sigma / interfaceThickness;
-        // double kappa_old = 1.5 * interfaceThickness * sigma;
-
-        double theta = 110; // contact angle
-
-        // https://civilsir.com/density-of-cement-sand-and-aggregate-in-kg-m3-list-of-material-density/
-
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx);
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx);
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref));
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref));
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uRef);
-
-        double Bm = (tau0 * d_part) / (muConcrete * u);
-        double tau0_LB = Bm * nu_h_LB * u_LB_con / (d_part * units->getFactorLentghWToLb());
-
-        SPtr<Rheology> thix = Rheology::getInstance();
-        thix->setYieldStress(tau0_LB);
-
-        if (myid == 0) VF_LOG_INFO("Yield stress = {} Pa", tau0);
-        if (myid == 0) VF_LOG_INFO("Yield stress LB = {} ", tau0_LB);
-
-        SPtr<BC> noSlipBC(new NoSlipBC());
-        noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-        //SPtr<BC> noSlipBC(new NoSlipBC());
-        //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy()));
-
-        // concrete inflow boundary condition
-        mu::Parser fct;
-        fct.SetExpr("U");
-        fct.DefineConst("U", -u_LB_con);
-        if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} m/s", u);
-        if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} dx/dt", u_LB_con);
-        if (myid == 0) VF_LOG_INFO("Concrete Re = {}", Re);
-
-        //    // Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering
-        //    // Mechanics, 21(6), 371-379.
-        //    double cx1 = -1.31431 + R;
-        //    double cx2 = 0.375582 + R;
-        //    //double cx3 = 0.20105 + R;
-        //    double L = g_maxX1 - g_minX1;
-        //    double p_concrete = 1e5; // Pa = 1 Bar
-        //    double p1 = p_concrete * units->getFactorPressureWToLb();
-        //    double p2 = 0.0;
-        //    double drhoLB = 1.0 + rhoLB;
-        //    double muLB = drhoLB * nuLB;
-        //    double N = R * R / 2 * muLB * uLB_ref * (p1 - p2) / L - 3;
-
-        //    // mu::Parser fct;
-        //    fct.SetExpr("U*(1-(((((x2-y0)^2+(x1-x0)^2)^0.5)/R)^NplusOne))");
-        //    fct.DefineConst("x0", cx1);
-        //    fct.DefineConst("y0", cx2);
-        //    //fct.DefineConst("z0", cx3);
-        //    fct.DefineConst("R", R);
-        //    fct.DefineConst("U", uLB_ref * ((N + 3) / (N + 1)));
-        //    fct.DefineConst("NplusOne", N + 1.0);
-
-        SPtr<BC> inflowConcreteBC(new VelocityBC(false, false, true, fct, 0, BCFunction::INFCONST));
-        inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        //SPtr<BC> inflowConcreteBC(new MultiphaseVelocityBC(false, false, true, fct, phiH, 0, BCFunction::INFCONST));
-        //inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        // air inflow boundary condition
-        //  Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering
-        //  Mechanics, 21(6), 371-379.
-        // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx);
-        // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref);
-        // double V = 40;      // flow rate [m^3/h]
-        // double D = 0.0166;  // air inlet diameter [m]
-        // double R = D / 2.0; // radius [m]
-        // double A = UbMath::PI * R * R;
-        // double u = V / 3600 / A;
-        // double uLB_ref = u * unitsAir->getFactorVelocityWToLb();
-        //// double cx1 = -1.2788 + R;
-        // double cx2 = 0.3803 + R;
-        // double cx3 = 0.1517 + R;
-        // double L = g_maxX1 - g_minX1;
-        // double p_air = 7e5; // Pa = 7 Bar
-        // double p1 = p_air;
-        // double p2 = 0.0;
-        // double mu = 17.2e-6; // Pa s, air 20° C
-        // double N = R * R / 2 * mu * u * (p1 - p2) / L - 3;
-        // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u);
-        // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_ref);
-        //
-
-        // double nu = mu / rhoConcrete;
-        // double Re = d_part * u / nu;
-        // if (myid == 0) VF_LOG_INFO("Re_air = {}", Re);
-
-        // double nuLB = d_part * unitsAir->getFactorLentghWToLb() * uLB_ref / Re;
-        // if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB);
-        // nu_l_LB = nuLB;
-  
-        SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref);
-        //SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx);
-        double V_air = 40./6.;  // flow rate [m^3/h] //10.
-        double D_air = 0.00553;     // air inlet diameter [m]
-        double R_air = D_air / 2.0; // radius [m]
-        double A_air = UbMath::PI * (R_air * R_air);
-        double u_air = V_air / 3600 / A_air;
-        double uLB_air = u_air * unitsAir->getFactorVelocityWToLb();
-        // double cx1 = -1.2788 + R;
-        double cx2 = 0.385822 + R_air;
-        double cx3 = 0.135562 + R_air;
-        double L_air = 0.00747;
-        double p_air = 7e5; // Pa = 7 Bar
-        double p1 = p_air;
-        double p2 = 1e5;
-        double mu_air = 17.2e-6; // Pa s, air 20° C
-        double rho_air = 1.2041; // [kg/m^3]
-        double Re_inlet = D_air * u_air * rho_air / mu_air;
-        double lambda = 0.3164 / pow(Re_inlet, 0.25);
-        double deltaP = (lambda / (2. * R_air)) * (rho_air * pow(u_air, 2) / 2.); // Darcy friction factor (Rohrreibungszahl)
-        double N = pow(R_air, 2) / (2. * mu_air * u_air) * deltaP - 3.;
-        // double N = R_air * R_air / 2 * mu_air * u_air * (p1 - p2) / L_air - 3;
-        if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u_air);
-        if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_air);
-
-        double nu_air = mu_air / rho_air;
-        double Re_air = d_part * u_air / nu_air;
-        if (myid == 0) VF_LOG_INFO("Air Re = {}", Re_air);
-
-        double nuLB_air = nu_air * unitsAir->getFactorViscosityWToLb(); // d_part * unitsAir->getFactorLentghWToLb() * uLB_air / Re_air;
-        if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB_air);
-        nu_l_LB = nuLB_air;
-
-        if (myid == 0) VF_LOG_INFO("nu_h = {}", nu_h_LB);
-        if (myid == 0) VF_LOG_INFO("nu_l = {}", nu_l_LB);
-        if (myid == 0) VF_LOG_INFO("sigma_LB = {}", sigma_LB);
-
-        double p_air_LB = p_air * unitsAir->getFactorPressureWToLb();
-        if (myid == 0) VF_LOG_INFO("p_air_LB = {}", p_air_LB);
-
-        // mu::Parser fctVx1;
-        ////fctVx1.SetExpr("U");
-        ////fctVx1.DefineConst("U", uLB_air);
-        // mu::Parser fctVx2;
-        // fctVx2.SetExpr("U");
-        // fctVx2.DefineConst("U", 0);
-        // mu::Parser fctVx3;
-        ////fctVx3.SetExpr("U");
-        ////fctVx3.DefineConst("U", -uLB_air);
-
-        double cx1 = 0;
-        double alpha = 0;
-        double gamma = 0;
-        double U = uLB_air;// * ((N + 3.) / (N + 1.));
-
-        mu::Parser fctVx1;
-        //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        // fctVx1.SetExpr("(((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5/R)^NplusOne");
-        fctVx1.SetExpr("U*cos(alpha*_pi/180)");
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("R", R_air);
-        fctVx1.DefineConst("U", U); //* ((N + 3.) / (N + 1.)));
-        fctVx1.DefineConst("NplusOne", N + 1.0);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx1.DefineConst("gamma", gamma);
-
-        mu::Parser fctVx2;
-        //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        fctVx2.SetExpr("U*sin(alpha*_pi/180)");
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("R", R_air);
-        fctVx2.DefineConst("U", U); //* ((N + 3.) / (N + 1.)));
-        fctVx2.DefineConst("NplusOne", N + 1.0);
-        fctVx2.DefineConst("alpha", alpha);
-
-        mu::Parser fctVx3;
-        //fctVx3.SetExpr("U*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx3.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        fctVx3.SetExpr("U");
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        fctVx3.DefineConst("R", R_air);
-        fctVx3.DefineConst("U", -U); //* ((N + 3.) / (N + 1.)));
-        fctVx3.DefineConst("NplusOne", N + 1.0);
-        fctVx3.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("gamma", gamma);
-
-        // SPtr<BC> inflowAirBC1(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST));
-        // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        // t = U * sin(alpha * _pi / 180) * (1 - (((((x1 - x0) ^ 2 + (x2 - y0) ^ 2 + (x3 - z0) ^ 2) ^ 0.5) / R) ^ NplusOne));
-        cx1 = -1.31416;
-        cx2 = 0.388684;
-        cx3 = 0.138177;
-        alpha = 0;
-        gamma = 225;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx1.DefineConst("gamma", gamma);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("gamma", gamma);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        fctVx3.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("gamma", gamma);
-
-        SPtr<BC> inflowAirBC1(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));        
-        //SPtr<BC> inflowAirBC1(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        //inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        fctVx1.DefineVar("x1", &cx1);
-        fctVx1.DefineVar("x2", &cx2);
-        fctVx1.DefineVar("x3", &cx3);
-        fctVx2.DefineVar("x1", &cx1);
-        fctVx2.DefineVar("x2", &cx2);
-        fctVx2.DefineVar("x3", &cx3);
-        fctVx3.DefineVar("x1", &cx1);
-        fctVx3.DefineVar("x2", &cx2);
-        fctVx3.DefineVar("x3", &cx3);
-
-        if (myid == 0) {
-
-            VF_LOG_INFO("fctVx1 = {}", fctVx1.Eval());
-            VF_LOG_INFO("fctVx2 = {}", fctVx2.Eval());
-            VF_LOG_INFO("fctVx3 = {}", fctVx3.Eval());
-            VF_LOG_INFO("N = {}", N);
-            VF_LOG_INFO("NplusOne = {}", N + 1.0);
-            // return 0;
-        }
-        cx1 = -1.31303;
-        cx2 = 0.377234;
-        cx3 = 0.138174;
-        alpha = 60;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        SPtr<BC> inflowAirBC2(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        //SPtr<BC> inflowAirBC2(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        //inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.2948374155694822;
-        cx2 = 0.37733728717266285;
-        cx3 = 0.13840460401111598;
-        alpha = 120;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        SPtr<BC> inflowAirBC3(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        //SPtr<BC> inflowAirBC3(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        //inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.28847;
-        cx2 = 0.3885;
-        cx3 = 0.1385;
-        alpha = 180;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        SPtr<BC> inflowAirBC4(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        //SPtr<BC> inflowAirBC4(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        //inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.294771417778694;
-        cx2 = 0.399787947463142;
-        cx3 = 0.1383429692754194;
-        alpha = 240;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        SPtr<BC> inflowAirBC5(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        //SPtr<BC> inflowAirBC5(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        //inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.3077338898450492;
-        cx2 = 0.3998516560596088;
-        cx3 = 0.13843501416896437;
-        alpha = 300;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        SPtr<BC> inflowAirBC6(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        //SPtr<BC> inflowAirBC6(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        //inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        // Pressure BC for air inlet
-        // SPtr<BC> inflowAirBC1(new DensityBC(p_air_LB));
-        // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-
-        SPtr<BC> outflowBC(new DensityBC(rhoLB));
-        outflowBC->setBCStrategy(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
-        //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-        
-        // SPtr<BC> outflowBC(new DensityBC(rhoLB));
-        //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy()));
-        //////////////////////////////////////////////////////////////////////////////////
-        // BC visitor
-        BoundaryConditionsBlockVisitor bcVisitor;
-        //MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
-        bcVisitor.addBC(noSlipBC);
-        //bcVisitor.addBC(inflowConcreteBC);
-        bcVisitor.addBC(inflowAirBC1);
-        bcVisitor.addBC(outflowBC);
-
-        // SPtr<LBMKernel> kernel   = make_shared<IBcumulantK17LBMKernel>();
-         //SPtr<LBMKernel> kernel   = make_shared<CumulantK17LBMKernel>();
-        // SPtr<LBMKernel> kernel = make_shared<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>();
-        // SPtr<LBMKernel> kernel = make_shared<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>();
-        //SPtr<LBMKernel> kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>();
-        SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>();
-        //SPtr<LBMKernel> kernel = make_shared<IBsharpInterfaceLBMKernel>();
-
-        kernel->setWithForcing(false);
-        kernel->setForcingX1(0.0);
-        kernel->setForcingX2(0.0);
-        kernel->setForcingX3(0.0);
-
-        kernel->setPhiL(phiL);
-        kernel->setPhiH(phiH);
-        kernel->setPhaseFieldRelaxation(tauH);
-        kernel->setMobility(mob);
-        kernel->setInterfaceWidth(interfaceThickness);
-
-        kernel->setCollisionFactorMultiphase(nu_h_LB, nu_l_LB);
-        kernel->setDensityRatio(densityRatio);
-        kernel->setMultiphaseModelParameters(beta, kappa);
-        kernel->setContactAngle(theta);
-        kernel->setSigma(sigma_LB);
-
-        SPtr<BCSet> bcProc = make_shared<BCSet>();
-        kernel->setBCSet(bcProc);
-
-        SPtr<Grid3D> grid = make_shared<Grid3D>(comm);
-        grid->setPeriodicX1(false);
-        grid->setPeriodicX2(false);
-        grid->setPeriodicX3(false);
-        grid->setDeltaX(dx);
-        grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]);
-        grid->setGhostLayerWidth(1);
-
-        string geoPath = "d:/Projects/TRR277/Project/WP4/NozzleGeo";
-
-        string outputPath = "d:/temp/NozzleFlowTest_SinglePhase_SmallTest_Blocks";
-        UbSystem::makeDirectory(outputPath);
-        UbSystem::makeDirectory(outputPath + "/liggghts");
-
-        // if (myid == 0) {
-        //     stringstream logFilename;
-        //     logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-        //     UbLog::output_policy::setStream(logFilename.str());
-        // }
-
-        /////////////////////////////////////////////////////////////////////
-        //LIGGGHTS things
-        /////////////////////////////////////////////////////////////////////
-        string inFile1 = "d:/Projects/TRR277/Project/WP4/Config/in.nozzle";
-        // string inFile2 = "d:/Projects/VirtualFluids_LIGGGHTS_coupling/apps/cpu/LiggghtsApp/in2.lbdem";
-        MPI_Comm mpi_comm = *(MPI_Comm *)(comm->getNativeCommunicator());
-        LiggghtsCouplingWrapper wrapper(argv, mpi_comm);
-
-        double v_frac = 0.1;
-        double dt_phys = units->getFactorTimeLbToW();
-        int demSubsteps = 10;
-        double dt_dem = dt_phys / (double)demSubsteps;
-        int vtkSteps = 1000;
-        string demOutDir = outputPath + "/liggghts";
-
-        // wrapper.execCommand("echo none");
-
-        // wrapper.execFile((char*)inFile1.c_str());
-
-        //// set timestep and output directory
-        wrapper.setVariable("t_step", dt_dem);
-        wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps);
-        wrapper.setVariable("dmp_dir", demOutDir);
-
-        wrapper.execFile((char *)inFile1.c_str());
-        //wrapper.runUpto(demSubsteps - 1);
-        // wrapper.runUpto(1000);
-
-        //LatticeDecomposition lDec((g_maxX1 - g_minX1) / dx, (g_maxX2 - g_minX2) / dx, (g_maxX3 - g_minX3) / dx, wrapper.lmp, grid);
-
-        SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1);
-        SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, unitsAir);
-        //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(std::ceil((g_maxX1 - g_minX1) / dx), std::ceil((g_maxX2 - g_minX2) / dx), std::ceil((g_maxX3 - g_minX3) / dx), wrapper.lmp);
-        SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(26,26,420, wrapper.lmp);
-        
-        /////////////////////////////////////////////////////////////////////
-        /////////////////////////////////////////////////////////////////////
-        
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE));
-
-        SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
-        if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-        GenBlocksGridVisitor genBlocks(gridCube);
-        grid->accept(genBlocks);
-
-        // geo
-        //////////////////////////////////////////////////////////
-        int accuracy = Interactor3D::EDGES;
-        ///////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAirDistributor = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:start");
-        meshNozzleAirDistributor->readMeshFromSTLFileASCII(geoPath + "/01_Nozzle_Air_Distributor.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirDistributor.get(), outputPath + "/geo/meshNozzleAirDistributor", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAirDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAirInlet = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:start");
-        meshNozzleAirInlet->readMeshFromSTLFileASCII(geoPath + "/02_Nozzle_Air_Inlet.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirInlet.get(), outputPath + "/geo/meshNozzleAirInlet", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleSpacer = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:start");
-        meshNozzleSpacer->readMeshFromSTLFileASCII(geoPath + "/03_Nozzle_Spacer.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleSpacer.get(), outputPath + "/geo/meshNozzleSpacer", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleSpacer = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleSpacer, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAccDistributor = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:start");
-        meshNozzleAccDistributor->readMeshFromSTLFileASCII(geoPath + "/04_Nozzle_Acc_Distributor.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccDistributor.get(), outputPath + "/geo/meshNozzleAccDistributor", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAccDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAccInlet = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:start");
-        meshNozzleAccInlet->readMeshFromSTLFileASCII(geoPath + "/05_Nozzle_Acc_Inlet.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccInlet.get(), outputPath + "/geo/meshNozzleAccInlet", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAccInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle1 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:start");
-        meshNozzleVolcanNozzle1->readMeshFromSTLFileBinary(geoPath + "/06_1_Nozzle_Volcan_Nozzle.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle1.get(), outputPath + "/geo/meshNozzleVolcanNozzle1", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleVolcanNozzle1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle1, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle2 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:start");
-        meshNozzleVolcanNozzle2->readMeshFromSTLFileBinary(geoPath + "/06_2_Nozzle_Volcan_Nozzle.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle2.get(), outputPath + "/geo/meshNozzleVolcanNozzle2", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleVolcanNozzle2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle2, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        // box
-        SPtr<D3Q27Interactor> intrBox = SPtr<D3Q27Interactor>(new D3Q27Interactor(gridCube, grid, noSlipBC, Interactor3D::INVERSESOLID));
-        ///////////////////////////////////////////////////////////
-        // inflow
-        //GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, 0.20105, -1.30181 + 0.0005, 0.390872 - 0.00229, 0.23, 0.013));
-        GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3 - 2.0 * dx, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBC, Interactor3D::SOLID));
-        ///////////////////////////////////////////////////////////
-        // outflow
-        //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.22, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.21, 0.013));
-        //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.426, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.415, 0.013));
-        GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3+2.*dx, 0.013));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), outputPath + "/geo/geoOutflow", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrOutflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBC, Interactor3D::SOLID));
-        ///////////////////////////////////////////////////////////
-        // SPtr<GbTriFaceMesh3D> geoAirInlet = std::make_shared<GbTriFaceMesh3D>();
-        // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:start");
-        // geoAirInlet->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet.stl", true);
-        // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:end");
-        // if (myid == 0) GbSystem3D::writeGeoObject(geoAirInlet.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance());
-        // SPtr<Interactor3D> intrAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(geoAirInlet, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES);
-        /////////////////////////////////////////////////////////////
-        // Fluid area
-        GbCylinder3DPtr geoFluidArea(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoFluidArea.get(), outputPath + "/geo/geoFluidArea", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrFluidArea = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoFluidArea, grid, noSlipBC, Interactor3D::INVERSESOLID));
-        ///////////////////////////////////////////////////////////
-        ///////////////////////////////////////////////////////////
-        GbCylinder3DPtr geoAirInflow(new GbCylinder3D(-1.31431 - 0.0005, 0.388587, 0.1383275, -1.31431, 0.388587, 0.1383275, 0.002765));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrAirInflow = std::make_shared<D3Q27Interactor>(geoAirInflow, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet1 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:start");
-        meshAirInlet1->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_1.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet1.get(), outputPath + "/geo/meshAirInlet1", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet1, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet2 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:start");
-        meshAirInlet2->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_2.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet2.get(), outputPath + "/geo/meshAirInlet2", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet2, grid, inflowAirBC2, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet3 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:start");
-        meshAirInlet3->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_3.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet3.get(), outputPath + "/geo/meshAirInlet3", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet3 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet3, grid, inflowAirBC3, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet4 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:start");
-        meshAirInlet4->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_4.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet4.get(), outputPath + "/geo/meshAirInlet4", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet4 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet4, grid, inflowAirBC4, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet5 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:start");
-        meshAirInlet5->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_5.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet5.get(), outputPath + "/geo/meshAirInlet5", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet5 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet5, grid, inflowAirBC5, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet6 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:start");
-        meshAirInlet6->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_6.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet6.get(), outputPath + "/geo/meshAirInlet6", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet6 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet6, grid, inflowAirBC6, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-
-        InteractorsHelper intHelper(grid, partVisitor, false);
-
-        intHelper.addInteractor(intrFluidArea);
-        //intHelper.addInteractor(intrNozzleVolcanNozzle2);
-        // intHelper.addInteractor(intrBox);
-        //intHelper.addInteractor(intrInflow);
-        // intHelper.addInteractor(intrAirInflow);
-        intHelper.addInteractor(intAirInlet1);
-        intHelper.addInteractor(intAirInlet2);
-        intHelper.addInteractor(intAirInlet3);
-        intHelper.addInteractor(intAirInlet4);
-        intHelper.addInteractor(intAirInlet5);
-        intHelper.addInteractor(intAirInlet6);
-        intHelper.addInteractor(intrOutflow);
-
-        // intHelper.addInteractor(intrNozzleAirDistributor);
-        // intHelper.addInteractor(intrNozzleAirInlet);
-        // intHelper.addInteractor(intrNozzleSpacer);
-        // intHelper.addInteractor(intrNozzleAccDistributor);
-        // intHelper.addInteractor(intrNozzleAccInlet);
-        // intHelper.addInteractor(intrNozzleVolcanNozzle1);
-
-        intHelper.selectBlocks();
-
-        SPtr<SimulationObserver> ppblocks = make_shared<WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm);
-        ppblocks->update(0);
-        ppblocks.reset();
-
-        // if (myid == 0) UBLOG(logINFO, Utilities::toString(grid, comm->getNumberOfProcesses()));
-
-        SetKernelBlockVisitor kernelVisitor(kernel, nu_l_LB, comm->getNumberOfProcesses());
-        //MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h_LB, nu_l_LB, 1e9, 1);
-        grid->accept(kernelVisitor);
-
-
-        intHelper.setBC();
-
-        // InitDistributionsBlockVisitor initVisitor;
-        // grid->accept(initVisitor);
-
-        double x1c = -1.31431 + R;
-        double x2c = 0.375582 + R;
-        double Ri = 5;
-        double x3c = 0.136 + Ri;
-
-        //R = 0.2 - 0.145; // 0.078-0.04; // 0.2;
-
-        mu::Parser fct1;
-        // fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
-        fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
-        fct1.DefineConst("x1c", x1c);
-        fct1.DefineConst("x2c", x2c);
-        fct1.DefineConst("x3c", x3c);
-        fct1.DefineConst("radius", Ri);
-        fct1.DefineConst("interfaceThickness", interfaceThickness * dx);
-
-        //MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
-        //initVisitor.setPhi(fct1);
-        //grid->accept(initVisitor);
-
-        InitDistributionsBlockVisitor initVisitor;
-        grid->accept(initVisitor);
-
-        // boundary conditions grid
-        {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppgeo->update(0);
-            ppgeo.reset();
-        }
-
-        grid->accept(bcVisitor);
-
-        OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-        //TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        grid->accept(setConnsVisitor);
-
-        int numOfThreads = 1;
-        omp_set_num_threads(numOfThreads);
-
-        SPtr<UbScheduler> nupsSch = std::make_shared<UbScheduler>(10, 10, 100);
-        SPtr<NUPSCounterSimulationObserver> nupsSimulationObserver = make_shared<NUPSCounterSimulationObserver>(grid, nupsSch, numOfThreads, comm);
-
-        //// write data for visualization of macroscopic quantities
-        SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps));
-        // SPtr<UbScheduler> visSch(new UbScheduler(1, 8700, 8800));
-        // visSch->addSchedule(1, 8700, 8800);
-        //SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-        //writeMQSimulationObserver->update(0);
-
-        SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-        //writeMQSimulationObserver->update(0);
-
-        int endTime = 10000000;
-        SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime));
-        simulation->addSimulationObserver(nupsSimulationObserver);
-        simulation->addSimulationObserver(lcSimulationObserver);
-        simulation->addSimulationObserver(writeMQSimulationObserver);
-
-        if (myid == 0) UBLOG(logINFO, "Simulation-start");
-        simulation->run();
-        if (myid == 0) UBLOG(logINFO, "Simulation-end");
-
-    } catch (std::exception &e) {
-        cerr << e.what() << endl << flush;
-    } catch (std::string &s) {
-        cerr << s << endl;
-    } catch (...) {
-        cerr << "unknown exception" << endl;
-    }
-    return 0;
-}
diff --git a/apps/cpu/NozzleMultiphase/CMakeLists.txt b/apps/cpu/NozzleMultiphase/CMakeLists.txt
deleted file mode 100644
index e5ecf02f2be1a3c12a904e42ae55ddb54c991f92..0000000000000000000000000000000000000000
--- a/apps/cpu/NozzleMultiphase/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-PROJECT(NozzleMultiphase)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleMultiPhase.cpp )
diff --git a/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp b/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp
deleted file mode 100644
index 1f0d3d0354dbfbe89c63167abe897073a9c9e5cd..0000000000000000000000000000000000000000
--- a/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp
+++ /dev/null
@@ -1,802 +0,0 @@
-#include <iostream>
-#include <memory>
-#include <string>
-
-#include "VirtualFluids.h"
-
-#include "LiggghtsCoupling/LiggghtsCoupling.h"
-
-#include "MultiphaseFlow/MultiphaseFlow.h"
-
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-int main(int argc, char *argv[])
-{
-    //Sleep(30000);
-
-    try {
-
-        std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-        int myid = comm->getProcessID();
-
-        // bounding box
-        // double g_minX1 = -1341.81e-3;
-        // double g_minX2 =  348.087e-3;
-        // double g_minX3 = -210e-3;
-
-        // double g_maxX1 = -1260.81e-3;
-        // double g_maxX2 =  429.087e-3;
-        // double g_maxX3 =  214.5e-3;
-
-        // double g_minX1 = -1341.81e-3 + 10e-3;
-        // double g_minX2 =  0.360872;
-        // double g_minX3 = -210e-3;
-
-        // double g_maxX1 = -1260.81e-3 - 10e-3;
-        // double g_maxX2 =  0.416302;
-        // double g_maxX3 = 210e-3;
-
-        // int blockNX[3] = { 10, 10, 10 };
-
-        int gridNZ = 3;
-
-        double g_minX1 = -1.31431;
-        double g_minX2 = 0.375582;
-        double g_minX3 = -0.21 + 0.035 * 8.0; //-0.21; //-210e-3 - 0.2 - 6e-3; //- 1e-3;
-
-        double g_maxX1 = -1.28831;
-        double g_maxX2 = 0.401582;
-        double g_maxX3 = 0.175;//0.21;
-
-        //int blockNX[3] = { 26, 26, 35 };
-        int blockNX[3] = { 26, 26, 35 * gridNZ };
-
-        double dx = 1e-3;
-
-        double uLB_ref = 0.0001;
-        // double rhoLB = 0.0;
-
-        // concrete
-        double d_part = 1e-3;
-        double V = 0.4*10.; // flow rate [m^3/h]
-        double D = 0.026;     // shotcrete inlet diameter [m]
-        double R = D / 2.0;   // radius [m]
-        double A = UbMath::PI * R * R;
-        double u = V / 3600 / A;
-        double muConcrete = 2.1133054011798826; // [Pa s]
-        double rhoAir = 1.2041;                 // [kg/m^3]
-        double tau0 = 715.218181094648;         // Pa
-        double rhoConcrete = 2400;              // [kg/m^3]
-        double nu = muConcrete / rhoConcrete;
-
-        // double Re_D = d_part * u / nu;
-        // if (myid == 0) UBLOG(logINFO, "Re_D = " << Re_D);
-        //
-        SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uLB_ref);
-        if (myid == 0) std::cout << units->toString() << std::endl;
-
-        double interfaceThickness = 3; // 4.096;
-        double sigma = 0.3; //0.03;
-        double Re = rhoConcrete * u * d_part / muConcrete;
-        double We = rhoConcrete * u * u * d_part / sigma;
-
-        double u_LB_con = u * units->getFactorVelocityWToLb();
-        double nu_h_LB = nu * units->getFactorViscosityWToLb(); // uLB_ref * d_part * units->getFactorLentghWToLb() / Re;
-        double nu_l_LB = 0;                                     // = nu_h_LB;
-
-        double rho_h_LB = 1;
-
-        // surface tension
-        double sigma_LB = rho_h_LB *u_LB_con *u_LB_con *d_part * units->getFactorLentghWToLb() / We;
-
-        // LBMReal dLB = 0; // = length[1] / dx;
-        LBMReal rhoLB = 0.0;
-        // LBMReal nuLB = nu_l; //(uLB_ref*dLB) / Re;
-
-        double beta = 12.0 * sigma_LB / interfaceThickness;
-        double kappa = 1.5 * interfaceThickness * sigma_LB;
-
-        double phiL = 0.0;
-        double phiH = 1.0;
-        double tauH = 0.6; // Phase - field Relaxation
-        double mob = 0.02; // Mobility
-        // double nuL = 1e-2;
-        // double nuG = 0.015811388300841892;
-        double densityRatio = rhoConcrete / rhoAir;
-        // double sigma_old = 1.0850694444444444e-06;
-        //
-        // double beta_old = 12.0 * sigma / interfaceThickness;
-        // double kappa_old = 1.5 * interfaceThickness * sigma;
-
-        double theta = 110; // contact angle
-
-        // https://civilsir.com/density-of-cement-sand-and-aggregate-in-kg-m3-list-of-material-density/
-
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx);
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx);
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref));
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref));
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uRef);
-
-        double Bm = (tau0 * d_part) / (muConcrete * u);
-        double tau0_LB = Bm * nu_h_LB * u_LB_con / (d_part * units->getFactorLentghWToLb());
-
-        SPtr<Rheology> thix = Rheology::getInstance();
-        thix->setYieldStress(tau0_LB);
-
-        if (myid == 0) VF_LOG_INFO("Yield stress = {} Pa", tau0);
-        if (myid == 0) VF_LOG_INFO("Yield stress LB = {} ", tau0_LB);
-
-        //SPtr<BC> noSlipBC(new NoSlipBC());
-        //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-        SPtr<BC> noSlipBC(new NoSlipBC());
-        noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy()));
-
-        // concrete inflow boundary condition
-        mu::Parser fct;
-        fct.SetExpr("U");
-        fct.DefineConst("U", -u_LB_con);
-        if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} m/s", u);
-        if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} dx/dt", u_LB_con);
-        if (myid == 0) VF_LOG_INFO("Concrete Re = {}", Re);
-
-        //    // Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering
-        //    // Mechanics, 21(6), 371-379.
-        //    double cx1 = -1.31431 + R;
-        //    double cx2 = 0.375582 + R;
-        //    //double cx3 = 0.20105 + R;
-        //    double L = g_maxX1 - g_minX1;
-        //    double p_concrete = 1e5; // Pa = 1 Bar
-        //    double p1 = p_concrete * units->getFactorPressureWToLb();
-        //    double p2 = 0.0;
-        //    double drhoLB = 1.0 + rhoLB;
-        //    double muLB = drhoLB * nuLB;
-        //    double N = R * R / 2 * muLB * uLB_ref * (p1 - p2) / L - 3;
-
-        //    // mu::Parser fct;
-        //    fct.SetExpr("U*(1-(((((x2-y0)^2+(x1-x0)^2)^0.5)/R)^NplusOne))");
-        //    fct.DefineConst("x0", cx1);
-        //    fct.DefineConst("y0", cx2);
-        //    //fct.DefineConst("z0", cx3);
-        //    fct.DefineConst("R", R);
-        //    fct.DefineConst("U", uLB_ref * ((N + 3) / (N + 1)));
-        //    fct.DefineConst("NplusOne", N + 1.0);
-
-        //SPtr<BC> inflowConcreteBC(new VelocityBC(false, false, true, fct, 0, BCFunction::INFCONST));
-        //inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowConcreteBC(new MultiphaseVelocityBC(false, false, true, fct, phiH, 0, BCFunction::INFCONST));
-        inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        // air inflow boundary condition
-        //  Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering
-        //  Mechanics, 21(6), 371-379.
-        // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx);
-        // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref);
-        // double V = 40;      // flow rate [m^3/h]
-        // double D = 0.0166;  // air inlet diameter [m]
-        // double R = D / 2.0; // radius [m]
-        // double A = UbMath::PI * R * R;
-        // double u = V / 3600 / A;
-        // double uLB_ref = u * unitsAir->getFactorVelocityWToLb();
-        //// double cx1 = -1.2788 + R;
-        // double cx2 = 0.3803 + R;
-        // double cx3 = 0.1517 + R;
-        // double L = g_maxX1 - g_minX1;
-        // double p_air = 7e5; // Pa = 7 Bar
-        // double p1 = p_air;
-        // double p2 = 0.0;
-        // double mu = 17.2e-6; // Pa s, air 20° C
-        // double N = R * R / 2 * mu * u * (p1 - p2) / L - 3;
-        // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u);
-        // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_ref);
-        //
-
-        // double nu = mu / rhoConcrete;
-        // double Re = d_part * u / nu;
-        // if (myid == 0) VF_LOG_INFO("Re_air = {}", Re);
-
-        // double nuLB = d_part * unitsAir->getFactorLentghWToLb() * uLB_ref / Re;
-        // if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB);
-        // nu_l_LB = nuLB;
-  
-        SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref);
-        //SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx);
-        double V_air = 40./6.;  // flow rate [m^3/h] //10.
-        double D_air = 0.00553;     // air inlet diameter [m]
-        double R_air = D_air / 2.0; // radius [m]
-        double A_air = UbMath::PI * (R_air * R_air);
-        double u_air = V_air / 3600 / A_air;
-        double uLB_air = u_air * unitsAir->getFactorVelocityWToLb();
-        // double cx1 = -1.2788 + R;
-        double cx2 = 0.385822 + R_air;
-        double cx3 = 0.135562 + R_air;
-        double L_air = 0.00747;
-        double p_air = 7e5; // Pa = 7 Bar
-        double p1 = p_air;
-        double p2 = 1e5;
-        double mu_air = 17.2e-6; // Pa s, air 20° C
-        double rho_air = 1.2041; // [kg/m^3]
-        double Re_inlet = D_air * u_air * rho_air / mu_air;
-        double lambda = 0.3164 / pow(Re_inlet, 0.25);
-        double deltaP = (lambda / (2. * R_air)) * (rho_air * pow(u_air, 2) / 2.); // Darcy friction factor (Rohrreibungszahl)
-        double N = pow(R_air, 2) / (2. * mu_air * u_air) * deltaP - 3.;
-        // double N = R_air * R_air / 2 * mu_air * u_air * (p1 - p2) / L_air - 3;
-        if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u_air);
-        if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_air);
-
-        double nu_air = mu_air / rho_air;
-        double Re_air = d_part * u_air / nu_air;
-        if (myid == 0) VF_LOG_INFO("Air Re = {}", Re_air);
-
-        double nuLB_air = nu_air * unitsAir->getFactorViscosityWToLb(); // d_part * unitsAir->getFactorLentghWToLb() * uLB_air / Re_air;
-        if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB_air);
-        nu_l_LB = nuLB_air;
-
-        if (myid == 0) VF_LOG_INFO("nu_h = {}", nu_h_LB);
-        if (myid == 0) VF_LOG_INFO("nu_l = {}", nu_l_LB);
-        if (myid == 0) VF_LOG_INFO("sigma_LB = {}", sigma_LB);
-
-        double p_air_LB = p_air * unitsAir->getFactorPressureWToLb();
-        if (myid == 0) VF_LOG_INFO("p_air_LB = {}", p_air_LB);
-
-        // mu::Parser fctVx1;
-        ////fctVx1.SetExpr("U");
-        ////fctVx1.DefineConst("U", uLB_air);
-        // mu::Parser fctVx2;
-        // fctVx2.SetExpr("U");
-        // fctVx2.DefineConst("U", 0);
-        // mu::Parser fctVx3;
-        ////fctVx3.SetExpr("U");
-        ////fctVx3.DefineConst("U", -uLB_air);
-
-        double cx1 = 0;
-        double alpha = 0;
-        double gamma = 0;
-        double U = uLB_air;// * ((N + 3.) / (N + 1.));
-
-        mu::Parser fctVx1;
-        //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        // fctVx1.SetExpr("(((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5/R)^NplusOne");
-        fctVx1.SetExpr("U*cos(alpha*_pi/180)");
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("R", R_air);
-        fctVx1.DefineConst("U", U); //* ((N + 3.) / (N + 1.)));
-        fctVx1.DefineConst("NplusOne", N + 1.0);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx1.DefineConst("gamma", gamma);
-
-        mu::Parser fctVx2;
-        //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        fctVx2.SetExpr("U*sin(alpha*_pi/180)");
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("R", R_air);
-        fctVx2.DefineConst("U", U); //* ((N + 3.) / (N + 1.)));
-        fctVx2.DefineConst("NplusOne", N + 1.0);
-        fctVx2.DefineConst("alpha", alpha);
-
-        mu::Parser fctVx3;
-        //fctVx3.SetExpr("U*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx3.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        fctVx3.SetExpr("U");
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        fctVx3.DefineConst("R", R_air);
-        fctVx3.DefineConst("U", -U); //* ((N + 3.) / (N + 1.)));
-        fctVx3.DefineConst("NplusOne", N + 1.0);
-        fctVx3.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("gamma", gamma);
-
-        // SPtr<BC> inflowAirBC1(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST));
-        // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        // t = U * sin(alpha * _pi / 180) * (1 - (((((x1 - x0) ^ 2 + (x2 - y0) ^ 2 + (x3 - z0) ^ 2) ^ 0.5) / R) ^ NplusOne));
-        cx1 = -1.31416;
-        cx2 = 0.388684;
-        cx3 = 0.138177;
-        alpha = 0;
-        gamma = 225;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx1.DefineConst("gamma", gamma);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("gamma", gamma);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        fctVx3.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("gamma", gamma);
-
-        //SPtr<BC> inflowAirBC1(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));        
-        SPtr<BC> inflowAirBC1(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        fctVx1.DefineVar("x1", &cx1);
-        fctVx1.DefineVar("x2", &cx2);
-        fctVx1.DefineVar("x3", &cx3);
-        fctVx2.DefineVar("x1", &cx1);
-        fctVx2.DefineVar("x2", &cx2);
-        fctVx2.DefineVar("x3", &cx3);
-        fctVx3.DefineVar("x1", &cx1);
-        fctVx3.DefineVar("x2", &cx2);
-        fctVx3.DefineVar("x3", &cx3);
-
-        if (myid == 0) {
-
-            VF_LOG_INFO("fctVx1 = {}", fctVx1.Eval());
-            VF_LOG_INFO("fctVx2 = {}", fctVx2.Eval());
-            VF_LOG_INFO("fctVx3 = {}", fctVx3.Eval());
-            VF_LOG_INFO("N = {}", N);
-            VF_LOG_INFO("NplusOne = {}", N + 1.0);
-            // return 0;
-        }
-        cx1 = -1.31303;
-        cx2 = 0.377234;
-        cx3 = 0.138174;
-        alpha = 60;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        //SPtr<BC> inflowAirBC2(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowAirBC2(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.2948374155694822;
-        cx2 = 0.37733728717266285;
-        cx3 = 0.13840460401111598;
-        alpha = 120;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        //SPtr<BC> inflowAirBC3(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowAirBC3(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.28847;
-        cx2 = 0.3885;
-        cx3 = 0.1385;
-        alpha = 180;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        //SPtr<BC> inflowAirBC4(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowAirBC4(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.294771417778694;
-        cx2 = 0.399787947463142;
-        cx3 = 0.1383429692754194;
-        alpha = 240;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        //SPtr<BC> inflowAirBC5(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowAirBC5(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.3077338898450492;
-        cx2 = 0.3998516560596088;
-        cx3 = 0.13843501416896437;
-        alpha = 300;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        //SPtr<BC> inflowAirBC6(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowAirBC6(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        // Pressure BC for air inlet
-        // SPtr<BC> inflowAirBC1(new DensityBC(p_air_LB));
-        // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-
-        SPtr<BC> outflowBC(new DensityBC(rhoLB));
-        //outflowBC->setBCStrategy(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
-        outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-        
-        // SPtr<BC> outflowBC(new DensityBC(rhoLB));
-        //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy()));
-        //////////////////////////////////////////////////////////////////////////////////
-        // BC visitor
-        //BoundaryConditionsBlockVisitor bcVisitor;
-        MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
-        bcVisitor.addBC(noSlipBC);
-        bcVisitor.addBC(inflowConcreteBC);
-        bcVisitor.addBC(inflowAirBC1);
-        bcVisitor.addBC(outflowBC);
-
-        // SPtr<LBMKernel> kernel   = make_shared<IBcumulantK17LBMKernel>();
-         //SPtr<LBMKernel> kernel   = make_shared<CumulantK17LBMKernel>();
-        // SPtr<LBMKernel> kernel = make_shared<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>();
-        // SPtr<LBMKernel> kernel = make_shared<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>();
-        //SPtr<LBMKernel> kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>();
-        SPtr<LBMKernel> kernel = make_shared<MultiphaseScaleDistributionLBMKernel>();
-        //SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>();
-        //SPtr<LBMKernel> kernel = make_shared<IBsharpInterfaceLBMKernel>();
-
-        kernel->setWithForcing(false);
-        kernel->setForcingX1(0.0);
-        kernel->setForcingX2(0.0);
-        kernel->setForcingX3(0.0);
-
-        kernel->setPhiL(phiL);
-        kernel->setPhiH(phiH);
-        kernel->setPhaseFieldRelaxation(tauH);
-        kernel->setMobility(mob);
-        kernel->setInterfaceWidth(interfaceThickness);
-
-        kernel->setCollisionFactorMultiphase(nu_h_LB, nu_l_LB);
-        kernel->setDensityRatio(densityRatio);
-        kernel->setMultiphaseModelParameters(beta, kappa);
-        kernel->setContactAngle(theta);
-        kernel->setSigma(sigma_LB);
-
-        SPtr<BCSet> bcProc = make_shared<BCSet>();
-        kernel->setBCSet(bcProc);
-
-        SPtr<Grid3D> grid = make_shared<Grid3D>(comm);
-        grid->setPeriodicX1(false);
-        grid->setPeriodicX2(false);
-        grid->setPeriodicX3(false);
-        grid->setDeltaX(dx);
-        grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]);
-        grid->setGhostLayerWidth(2);
-
-        string geoPath = "d:/Projects/TRR277/Project/WP4/NozzleGeo";
-
-        string outputPath = "d:/temp/NozzleFlowTest_MultiPhase_SmallTest_OneBlock";
-        UbSystem::makeDirectory(outputPath);
-        UbSystem::makeDirectory(outputPath + "/liggghts");
-
-        // if (myid == 0) {
-        //     stringstream logFilename;
-        //     logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-        //     UbLog::output_policy::setStream(logFilename.str());
-        // }
-
-        /////////////////////////////////////////////////////////////////////
-        //LIGGGHTS things
-        /////////////////////////////////////////////////////////////////////
-        string inFile1 = "d:/Projects/TRR277/Project/WP4/Config/in.nozzle";
-        // string inFile2 = "d:/Projects/VirtualFluids_LIGGGHTS_coupling/apps/cpu/LiggghtsApp/in2.lbdem";
-        MPI_Comm mpi_comm = *(MPI_Comm *)(comm->getNativeCommunicator());
-        LiggghtsCouplingWrapper wrapper(argv, mpi_comm);
-
-        double v_frac = 0.1;
-        double dt_phys = units->getFactorTimeLbToW();
-        int demSubsteps = 10;
-        double dt_dem = dt_phys / (double)demSubsteps;
-        int vtkSteps = 1000;
-        string demOutDir = outputPath + "/liggghts";
-
-        // wrapper.execCommand("echo none");
-
-        // wrapper.execFile((char*)inFile1.c_str());
-
-        //// set timestep and output directory
-        wrapper.setVariable("t_step", dt_dem);
-        wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps);
-        wrapper.setVariable("dmp_dir", demOutDir);
-
-        //!!!!//wrapper.execFile((char *)inFile1.c_str());
-        //wrapper.runUpto(demSubsteps - 1);
-        // wrapper.runUpto(1000);
-
-        //LatticeDecomposition lDec((g_maxX1 - g_minX1) / dx, (g_maxX2 - g_minX2) / dx, (g_maxX3 - g_minX3) / dx, wrapper.lmp, grid);
-
-        SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1);
-        SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, unitsAir);
-        //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(std::ceil((g_maxX1 - g_minX1) / dx), std::ceil((g_maxX2 - g_minX2) / dx), std::ceil((g_maxX3 - g_minX3) / dx), wrapper.lmp);
-        //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(blockNX[0], blockNX[1], blockNX[2] * gridNZ, wrapper.lmp);
-        
-        /////////////////////////////////////////////////////////////////////
-        /////////////////////////////////////////////////////////////////////
-        
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE));
-
-        SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
-        if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-        GenBlocksGridVisitor genBlocks(gridCube);
-        grid->accept(genBlocks);
-
-        // geo
-        //////////////////////////////////////////////////////////
-        int accuracy = Interactor3D::EDGES;
-        ///////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAirDistributor = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:start");
-        meshNozzleAirDistributor->readMeshFromSTLFileASCII(geoPath + "/01_Nozzle_Air_Distributor.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirDistributor.get(), outputPath + "/geo/meshNozzleAirDistributor", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAirDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAirInlet = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:start");
-        meshNozzleAirInlet->readMeshFromSTLFileASCII(geoPath + "/02_Nozzle_Air_Inlet.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirInlet.get(), outputPath + "/geo/meshNozzleAirInlet", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleSpacer = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:start");
-        meshNozzleSpacer->readMeshFromSTLFileASCII(geoPath + "/03_Nozzle_Spacer.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleSpacer.get(), outputPath + "/geo/meshNozzleSpacer", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleSpacer = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleSpacer, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAccDistributor = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:start");
-        meshNozzleAccDistributor->readMeshFromSTLFileASCII(geoPath + "/04_Nozzle_Acc_Distributor.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccDistributor.get(), outputPath + "/geo/meshNozzleAccDistributor", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAccDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAccInlet = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:start");
-        meshNozzleAccInlet->readMeshFromSTLFileASCII(geoPath + "/05_Nozzle_Acc_Inlet.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccInlet.get(), outputPath + "/geo/meshNozzleAccInlet", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAccInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle1 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:start");
-        meshNozzleVolcanNozzle1->readMeshFromSTLFileBinary(geoPath + "/06_1_Nozzle_Volcan_Nozzle.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle1.get(), outputPath + "/geo/meshNozzleVolcanNozzle1", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleVolcanNozzle1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle1, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle2 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:start");
-        meshNozzleVolcanNozzle2->readMeshFromSTLFileBinary(geoPath + "/06_2_Nozzle_Volcan_Nozzle.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle2.get(), outputPath + "/geo/meshNozzleVolcanNozzle2", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleVolcanNozzle2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle2, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        // box
-        SPtr<D3Q27Interactor> intrBox = SPtr<D3Q27Interactor>(new D3Q27Interactor(gridCube, grid, noSlipBC, Interactor3D::INVERSESOLID));
-        ///////////////////////////////////////////////////////////
-        // inflow
-        //GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, 0.20105, -1.30181 + 0.0005, 0.390872 - 0.00229, 0.23, 0.013));
-        GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3 - 2.0 * dx, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBC, Interactor3D::SOLID));
-        ///////////////////////////////////////////////////////////
-        // outflow
-        //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.22, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.21, 0.013));
-        //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.426, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.415, 0.013));
-        GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3+2.*dx, 0.013));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), outputPath + "/geo/geoOutflow", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrOutflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBC, Interactor3D::SOLID));
-        ///////////////////////////////////////////////////////////
-        // SPtr<GbTriFaceMesh3D> geoAirInlet = std::make_shared<GbTriFaceMesh3D>();
-        // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:start");
-        // geoAirInlet->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet.stl", true);
-        // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:end");
-        // if (myid == 0) GbSystem3D::writeGeoObject(geoAirInlet.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance());
-        // SPtr<Interactor3D> intrAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(geoAirInlet, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES);
-        /////////////////////////////////////////////////////////////
-        // Fluid area
-        GbCylinder3DPtr geoFluidArea(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoFluidArea.get(), outputPath + "/geo/geoFluidArea", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrFluidArea = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoFluidArea, grid, noSlipBC, Interactor3D::INVERSESOLID));
-        ///////////////////////////////////////////////////////////
-        ///////////////////////////////////////////////////////////
-        GbCylinder3DPtr geoAirInflow(new GbCylinder3D(-1.31431 - 0.0005, 0.388587, 0.1383275, -1.31431, 0.388587, 0.1383275, 0.002765));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrAirInflow = std::make_shared<D3Q27Interactor>(geoAirInflow, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet1 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:start");
-        meshAirInlet1->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_1.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet1.get(), outputPath + "/geo/meshAirInlet1", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet1, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet2 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:start");
-        meshAirInlet2->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_2.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet2.get(), outputPath + "/geo/meshAirInlet2", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet2, grid, inflowAirBC2, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet3 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:start");
-        meshAirInlet3->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_3.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet3.get(), outputPath + "/geo/meshAirInlet3", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet3 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet3, grid, inflowAirBC3, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet4 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:start");
-        meshAirInlet4->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_4.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet4.get(), outputPath + "/geo/meshAirInlet4", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet4 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet4, grid, inflowAirBC4, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet5 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:start");
-        meshAirInlet5->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_5.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet5.get(), outputPath + "/geo/meshAirInlet5", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet5 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet5, grid, inflowAirBC5, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet6 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:start");
-        meshAirInlet6->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_6.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet6.get(), outputPath + "/geo/meshAirInlet6", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet6 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet6, grid, inflowAirBC6, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-
-        InteractorsHelper intHelper(grid, metisVisitor, false);
-
-        intHelper.addInteractor(intrFluidArea);
-        //intHelper.addInteractor(intrNozzleVolcanNozzle2);
-        // intHelper.addInteractor(intrBox);
-        intHelper.addInteractor(intrInflow);
-        // intHelper.addInteractor(intrAirInflow);
-        intHelper.addInteractor(intAirInlet1);
-        intHelper.addInteractor(intAirInlet2);
-        intHelper.addInteractor(intAirInlet3);
-        intHelper.addInteractor(intAirInlet4);
-        intHelper.addInteractor(intAirInlet5);
-        intHelper.addInteractor(intAirInlet6);
-        intHelper.addInteractor(intrOutflow);
-
-        // intHelper.addInteractor(intrNozzleAirDistributor);
-        // intHelper.addInteractor(intrNozzleAirInlet);
-        // intHelper.addInteractor(intrNozzleSpacer);
-        // intHelper.addInteractor(intrNozzleAccDistributor);
-        // intHelper.addInteractor(intrNozzleAccInlet);
-        // intHelper.addInteractor(intrNozzleVolcanNozzle1);
-
-        intHelper.selectBlocks();
-
-        SPtr<SimulationObserver> ppblocks = make_shared<WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm);
-        ppblocks->update(0);
-        ppblocks.reset();
-
-        // if (myid == 0) UBLOG(logINFO, Utilities::toString(grid, comm->getNumberOfProcesses()));
-
-        //SetKernelBlockVisitor kernelVisitor(kernel, nu_l_LB, comm->getNumberOfProcesses());
-        MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h_LB, nu_l_LB, 1e9, 1);
-        grid->accept(kernelVisitor);
-
-
-        intHelper.setBC();
-
-        // InitDistributionsBlockVisitor initVisitor;
-        // grid->accept(initVisitor);
-
-        double x1c = -1.31431 + R;
-        double x2c = 0.375582 + R;
-        double Ri = 5;
-        double x3c = 0.136 + Ri;
-
-        //R = 0.2 - 0.145; // 0.078-0.04; // 0.2;
-
-        mu::Parser fct1;
-        // fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
-        fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
-        fct1.DefineConst("x1c", x1c);
-        fct1.DefineConst("x2c", x2c);
-        fct1.DefineConst("x3c", x3c);
-        fct1.DefineConst("radius", Ri);
-        fct1.DefineConst("interfaceThickness", interfaceThickness * dx);
-
-        MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
-        initVisitor.setPhi(fct1);
-        //grid->accept(initVisitor);
-
-        //InitDistributionsBlockVisitor initVisitor;
-        grid->accept(initVisitor);
-
-        // boundary conditions grid
-        {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppgeo->update(0);
-            ppgeo.reset();
-        }
-
-        grid->accept(bcVisitor);
-
-        //OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-        TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        grid->accept(setConnsVisitor);
-
-        int numOfThreads = 1;
-        omp_set_num_threads(numOfThreads);
-
-        SPtr<UbScheduler> nupsSch = std::make_shared<UbScheduler>(10, 10, 100);
-        SPtr<NUPSCounterSimulationObserver> nupsSimulationObserver = make_shared<NUPSCounterSimulationObserver>(grid, nupsSch, numOfThreads, comm);
-
-        //// write data for visualization of macroscopic quantities
-        SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps));
-        // SPtr<UbScheduler> visSch(new UbScheduler(1, 8700, 8800));
-        // visSch->addSchedule(1, 8700, 8800);
-        SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-        writeMQSimulationObserver->update(0);
-
-        //SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-        //writeMQSimulationObserver->update(0);
-
-        int endTime = 10000000;
-        SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime));
-        simulation->addSimulationObserver(nupsSimulationObserver);
-        //!!!//simulation->addSimulationObserver(lcSimulationObserver);
-        simulation->addSimulationObserver(writeMQSimulationObserver);
-
-        if (myid == 0) UBLOG(logINFO, "Simulation-start");
-        simulation->run();
-        if (myid == 0) UBLOG(logINFO, "Simulation-end");
-
-    } catch (std::exception &e) {
-        cerr << e.what() << endl << flush;
-    } catch (std::string &s) {
-        cerr << s << endl;
-    } catch (...) {
-        cerr << "unknown exception" << endl;
-    }
-    return 0;
-}
diff --git a/apps/cpu/OrganPipe/CMakeLists.txt b/apps/cpu/OrganPipe/CMakeLists.txt
deleted file mode 100644
index 03f52af3309aa6cb207bbb9fb51d264f4ff77926..0000000000000000000000000000000000000000
--- a/apps/cpu/OrganPipe/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(OrganPipe)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(opipe BINARY)
diff --git a/apps/cpu/OrganPipe/OrganPipe.cpp b/apps/cpu/OrganPipe/OrganPipe.cpp
deleted file mode 100644
index 98b8c25050ba459c795ea22b3005686755e69077..0000000000000000000000000000000000000000
--- a/apps/cpu/OrganPipe/OrganPipe.cpp
+++ /dev/null
@@ -1,527 +0,0 @@
-#include <iostream>
-#include <string>
-#include "VirtualFluids.h"
-
-
-using namespace std;
-void run(string configname)
-{
-   try
-   {
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (myid == 0) UBLOG(logINFO, "Testcase organ pipe");
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      bool            newStart = config.getValue<bool>("newStart");
-      double          restartStep = config.getValue<double>("restartStep");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      int             endTime = config.getValue<int>("endTime");
-      double          outTimeStep = config.getValue<double>("outTimeStep");
-      double          outTimeStart = config.getValue<double>("outTimeStart");
-      double          availMem = config.getValue<double>("availMem");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-      string          pathOut = config.getValue<string>("pathOut");
-      string          pathGeo = config.getValue<string>("pathGeo");
-
-      string          opipeGeoFile = "/OrganPipeTransformed.stl";
-      string          inletTubeGeoFile = "/tubeTransformed.stl";
-
-      double          QN = config.getValue<double>("QN");
-
-      double  deltaXfine = 0.0000625;
-      const int baseLevel = 0;
-      int refineLevel = 9;
-      double deltaXcoarse = deltaXfine*(double)(1 << refineLevel);
-
-      LBMReal rho_LB = 0.0;
-      double rhoReal = 1.2041; //(kg/m3)
-      double L = 0.195; //m
-      double hLB = L / deltaXcoarse;
-      double csReal = 343.3;
-      double nuReal = 1.51e-5; //m^2/s
-
-      double Q = QN * 1e-3 / 60; //m^3/s
-      double D = 0.005; // m
-      double R = D / 2; // m
-      double A = UbMath::PI * pow(R,2);
-      double uReal = Q / A;
-      double muReal = nuReal * rhoReal;
-      double Re_inlet = D * uReal * rhoReal / muReal;
-      double lbd = 0.3164 / pow(Re_inlet,0.25);
-      double deltaP = (lbd / (2 * R)) * (rhoReal * pow(uReal,2) / 2);
-      double N = pow(R,2) / (2 * muReal * uReal) * deltaP - 3;
-
-      LBMUnitConverter unitConverter(L, csReal, rhoReal, hLB);
-      if (myid == 0) UBLOG(logINFO, unitConverter.toString());
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathOut.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathOut + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      double nu_LB = nuReal * unitConverter.getFactorViscosityWToLb();
-      double u_LB = uReal * unitConverter.getFactorVelocityWToLb();
-
-      double offSetOrganPipe = 0.0083; //1.37;
-
-      vector<int> blocknx ={ 16, 16, 16 };
-
-      if (myid == 0) UBLOG(logINFO, "Read organ pipe geometry:start");
-      SPtr<GbTriFaceMesh3D> organPipeGeo = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo + opipeGeoFile, "opipeGeo", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-      organPipeGeo->translate(offSetOrganPipe, 0.0, 0.0);
-      if (myid == 0) UBLOG(logINFO, "Read organ pipe geometry:end");
-      if (myid == 0) GbSystem3D::writeGeoObject(organPipeGeo.get(), pathOut + "/geo/organPipeGeo", WbWriterVtkXmlBinary::getInstance());
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      //bounding box
-      vector<double> dim = {4.096, 4.096, 4.096};
-
-      double g_minX1 = 0;
-      double g_minX2 =  -dim[1]*0.5;
-      double g_minX3 =  -dim[2]*0.5;
-
-      double g_maxX1 =  dim[0];
-      double g_maxX2 =  dim[1]*0.5;
-      double g_maxX3 =  dim[2]*0.5;
-
-
-      double d_minX2 = -dim[1]*0.5;
-      double d_minX3 = -dim[2]*0.5;
-
-      double d_maxX1 = dim[0];
-      double d_maxX2 = dim[1]*0.5;
-      double d_maxX3 = dim[2]*0.5;
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Parameters:");
-         UBLOG(logINFO, "QN                  = " << QN      << " [Nl/min]");
-         UBLOG(logINFO, "u_Real              = " << uReal   << " [m/s]");
-         UBLOG(logINFO, "rho_Real            = " << rhoReal << " [kg/m^3]");
-         UBLOG(logINFO, "nu_Real             = " << nuReal  << " [m^2/s]");
-         UBLOG(logINFO, "u_LB                = " << u_LB    << " [dx/dt]");
-         UBLOG(logINFO, "rho_LB              = " << rho_LB+1<< " [mass/dx^3]");
-         UBLOG(logINFO, "nu_LB               = " << nu_LB   << " [dx^2/dt]");
-         UBLOG(logINFO, "N                   = " << N);
-         UBLOG(logINFO, "dx coarse           = " << deltaXcoarse);
-         UBLOG(logINFO, "dx fine             = " << deltaXfine);
-         UBLOG(logINFO, "number of refinement levels = " << refineLevel);
-         UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses());
-         UBLOG(logINFO, "path = " << pathOut);
-         UBLOG(logINFO, "Preprocess - start");
-      }
-
-      //BC adapters
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-
-      SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter());
-      slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm()));
-
-      double diameter_inlet = 0.005;
-      double cx1 = g_minX1;
-      double cx2 = 0.0;
-      double cx3 = 0.0;
-
-      //Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering Mechanics, 21(6), 371-379.
-      mu::Parser fct;
-      //fct.SetExpr("U");
-      fct.SetExpr("U*(1-(((((x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-      fct.DefineConst("x0", cx1);
-      fct.DefineConst("y0", cx2);
-      fct.DefineConst("z0", cx3);
-      fct.DefineConst("R", diameter_inlet/2.0);
-      fct.DefineConst("U", u_LB*((N+3)/(N+1)));
-      fct.DefineConst("NplusOne", N+1.0);
-
-      SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-      velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm()));
-
-      SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rho_LB));
-      outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm()));
-
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-      bcVisitor.addBC(slipBCAdapter);
-      bcVisitor.addBC(velBCAdapter);
-      bcVisitor.addBC(outflowBCAdapter);
-
-      SPtr<BCProcessor> bcProc;
-      bcProc = SPtr<BCProcessor>(new BCProcessor());
-
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel());
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      double bulckViscosity = 3700.0*nu_LB;
-      if (myid == 0) UBLOG(logINFO, "bulckViscosity  =  "<< bulckViscosity);
-      dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(bulckViscosity);
-      kernel->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathOut + "/mig", comm));
-      migCoProcessor->setLBMKernel(kernel);
-      migCoProcessor->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (newStart)
-      {
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(false);
-         grid->setPeriodicX3(false);
-         grid->setDeltaX(deltaXcoarse);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-         //generate block grid
-         SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-         GenBlocksGridVisitor genBlocks(gridCube);
-
-         grid->accept(genBlocks);
-
-         //geometry
-         if (myid == 0) UBLOG(logINFO, "Read inlet pipe geometry:start");
-         SPtr<GbTriFaceMesh3D> inletTubeGeo = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo + inletTubeGeoFile, "inPipeGeo", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-         inletTubeGeo->translate(offSetOrganPipe, 0.0, 0.0);
-         if (myid == 0) UBLOG(logINFO, "Read inlet pipe geometry:end");
-         if (myid == 0) GbSystem3D::writeGeoObject(inletTubeGeo.get(), pathOut + "/geo/inletTubeGeo", WbWriterVtkXmlBinary::getInstance());
-         SPtr<Interactor3D> organPipeInter = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(organPipeGeo, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
-         SPtr<Interactor3D> inletTubeInter = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(inletTubeGeo, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         double op_offset = organPipeGeo->getX1Minimum() - inletTubeGeo->getX1Minimum();
-         double startX1it = inletTubeGeo->getX1Minimum();
-         //////////////////////////////////////////////////////////////////////////
-         //refinement
-        //refinement
-          //SPtr<GbObject3D> refineBoxL1(new GbCuboid3D(startX1it-0.8, -1.0, -1.0, startX1it + 1.75 + op_offset, 1.0, 1.0));
-         //if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL1.get(), pathOut + "/geo/refineBoxL1", WbWriterVtkXmlBinary::getInstance());
-         SPtr<GbObject3D> refineBoxL2(new GbCuboid3D(startX1it-0.38, -0.55, -0.55, startX1it+1.25+op_offset, 0.55, 0.55));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL2.get(), pathOut + "/geo/refineBoxL2", WbWriterVtkXmlBinary::getInstance());
-         SPtr<GbObject3D> refineBoxL3(new GbCuboid3D(startX1it-0.25, -0.28, -0.28, startX1it+0.8+op_offset-0.064, 0.28, 0.28));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL3.get(), pathOut + "/geo/refineBoxL3", WbWriterVtkXmlBinary::getInstance());
-         SPtr<GbObject3D> refineBoxL4(new GbCuboid3D(startX1it-0.13, -0.15, -0.15, startX1it + 0.52 + op_offset-0.032, 0.15, 0.15));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL4.get(), pathOut + "/geo/refineBoxL4", WbWriterVtkXmlBinary::getInstance());
-         SPtr<GbObject3D> refineBoxL5(new GbCuboid3D(startX1it-0.0633, -0.08, -0.08, startX1it + 0.3267 + op_offset, 0.08, 0.08));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL5.get(), pathOut + "/geo/refineBoxL5", WbWriterVtkXmlBinary::getInstance());
-         SPtr<GbObject3D> refineBoxL6(new GbCuboid3D(startX1it, -0.042, -0.042, startX1it + 0.2634 + op_offset+0.016, 0.042, 0.042));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL6.get(), pathOut + "/geo/refineBoxL6", WbWriterVtkXmlBinary::getInstance());
-         //SPtr<GbObject3D> refineBoxL62(new GbCuboid3D(startX1it + 0.1016 + op_offset, -0.0165, 0.0165, startX1it + 0.2634 + op_offset, 0.0165, 0.0365));
-         //if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL62.get(), pathOut + "/geo/refineBoxL62", WbWriterVtkXmlBinary::getInstance());
-         SPtr<GbObject3D> refineBoxL7(new GbCuboid3D(startX1it, -0.03, -0.03, startX1it + 0.1516 + op_offset, 0.03, 0.03));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL7.get(), pathOut + "/geo/refineBoxL7", WbWriterVtkXmlBinary::getInstance());
-         SPtr<GbObject3D> refineBoxL81(new GbCuboid3D(startX1it, -0.005, -0.005, startX1it + 0.02 + op_offset, 0.005, 0.005));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL81.get(), pathOut + "/geo/refineBoxL81", WbWriterVtkXmlBinary::getInstance());
-         SPtr<GbObject3D> refineBoxL82(new GbCuboid3D(startX1it + 0.02, -0.0165, -0.0165, startX1it + 0.06 + op_offset, 0.0165, 0.0165));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL82.get(), pathOut + "/geo/refineBoxL82", WbWriterVtkXmlBinary::getInstance());
-
-         SPtr<GbObject3D> refineBoxL83(new GbCuboid3D(startX1it+0.06, -0.0165, -0.0165, startX1it + 0.1016 + op_offset, 0.0165, 0.024));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL83.get(), pathOut + "/geo/refineBoxL83", WbWriterVtkXmlBinary::getInstance());
-         SPtr<GbObject3D> refineBoxL9(new GbCuboid3D(startX1it+0.06, -0.0165, 0.01, startX1it + 0.09 + op_offset, 0.0165, 0.013));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL9.get(), pathOut + "/geo/refineBoxL9", WbWriterVtkXmlBinary::getInstance());
-         if (refineLevel > 0)
-         {
-            if (myid == 0) UBLOG(logINFO, "Refinement - start");
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm);
-            //refineHelper.addGbObject(refineBoxL1, refineLevel - 8);
-            refineHelper.addGbObject(refineBoxL2, refineLevel - 7);
-            refineHelper.addGbObject(refineBoxL3, refineLevel - 6);
-            refineHelper.addGbObject(refineBoxL4, refineLevel - 5);
-            refineHelper.addGbObject(refineBoxL5, refineLevel - 4);
-            refineHelper.addGbObject(refineBoxL6, refineLevel - 3);
-            //refineHelper.addGbObject(refineBoxL62, refineLevel-3);
-            refineHelper.addGbObject(refineBoxL7, refineLevel - 2);
-            refineHelper.addGbObject(refineBoxL81, refineLevel - 1);
-            refineHelper.addGbObject(refineBoxL82, refineLevel - 1);
-            refineHelper.addGbObject(refineBoxL83, refineLevel - 1);
-            refineHelper.addGbObject(refineBoxL9, refineLevel);
-            refineHelper.refine();
-            if (myid == 0) UBLOG(logINFO, "Refinement - end");
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-         //walls
-         double blockLength = blocknx[0]*deltaXcoarse;
-         GbCuboid3DPtr addWallXmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallXmin.get(), pathOut + "/geo/addWallXmin", WbWriterVtkXmlASCII::getInstance());
-         GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathOut + "/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-         GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathOut + "/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         //wall interactors
-         SPtr<D3Q27Interactor> addWallXminInt(new D3Q27Interactor(addWallXmin, grid, slipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, slipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, slipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slipBCAdapter, Interactor3D::SOLID));
-
-         //inflow
-         GbCylinder3DPtr geoInflow(new GbCylinder3D(startX1it-deltaXfine*3.0, 0.0, 0.0, startX1it+deltaXfine*3.0, 0.0, 0.0, diameter_inlet));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathOut + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-         SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //GbCylinder3DPtr geoInflowCover(new GbCylinder3D(startX1it-deltaXfine*5.0, 0.0, 0.0, startX1it, 0.0, 0.0, diameter_inlet+deltaXfine*6.0));
-         GbCylinder3DPtr geoInflowCover(new GbCylinder3D(startX1it-0.05, 0.0, 0.0, startX1it, 0.0, 0.0, 0.006));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoInflowCover.get(), pathOut + "/geo/geoInflowCover", WbWriterVtkXmlASCII::getInstance());
-         SPtr<D3Q27Interactor> inflowCoverIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflowCover, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - deltaXcoarse, g_minX3 - deltaXcoarse, g_maxX1 + deltaXcoarse, g_maxX2 + deltaXcoarse, g_maxX3 + deltaXcoarse));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathOut + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-         SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID));
-
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, MetisPartitioner::RECURSIVE));
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(outflowIntr);
-         intHelper.addInteractor(addWallXminInt);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(addWallYminInt);
-         intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(inflowIntr);
-         intHelper.addInteractor(organPipeInter);
-         intHelper.addInteractor(inletTubeInter);
-         intHelper.addInteractor(inflowCoverIntr);
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-
-         {
-            WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppblocks.process(0);
-         }
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "SetKernelBlockVisitor:end");
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "PID = " << myid << " Point 5");
-            UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB");
-         }
-
-         if (refineLevel > 0)
-         {
-            bool twoTypeOfConnectorsCheck = false;
-            SetUndefinedNodesBlockVisitor undefNodesVisitor(twoTypeOfConnectorsCheck);
-            grid->accept(undefNodesVisitor);
-         }
-
-         if (myid == 0) UBLOG(logINFO, "SetUndefinedNodesBlockVisitor:end");
-
-         //BC
-         intHelper.setBC();
-         if (myid == 0) UBLOG(logINFO, "intHelper.setBC():end");
-
-         //initialization of distributions
-         InitDistributionsBlockVisitor initVisitor;
-         grid->accept(initVisitor);
-
-         //Geometry and boundary conditions
-         {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppgeo.process(0);
-         }
-
-      }
-      else
-      {
-         //restartCoProcessor->restart((int)restartStep);
-         migCoProcessor->restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-      }
-      ////set connectors
-      //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-      SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolator());
-      dynamicPointerCast<CompressibleOffsetMomentsInterpolator>(iProcessor)->setBulkViscosity(nu_LB, bulckViscosity);
-      SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-      grid->accept(setConnsVisitor);
-
-      //bcVisitor should be accept after initialization!!!!
-      grid->accept(bcVisitor);
-      if (myid == 0) UBLOG(logINFO, "grid->accept(bcVisitor):end");
-
-
-
-      ////sponge layer
-      ////////////////////////////////////////////////////////////////////////////
-      /*GbCuboid3DPtr spongeLayerX1max(new GbCuboid3D(g_maxX1 - 0.4, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-      if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut + "/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance());
-      SpongeLayerBlockVisitor slVisitorX1max(spongeLayerX1max, kernel, nu_LB, D3Q27System::E);
-      grid->accept(slVisitorX1max);
-
-      GbCuboid3DPtr spongeLayerX1min(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_minX1 + 0.2, g_maxX2 + blockLength, g_maxX3 + blockLength));
-      if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX1min.get(), pathOut + "/geo/spongeLayerX1min", WbWriterVtkXmlASCII::getInstance());
-      SpongeLayerBlockVisitor slVisitorX1min(spongeLayerX1min, spKernel, nuLB, D3Q27System::W);
-      grid->accept(slVisitorX1min);
-
-      GbCuboid3DPtr spongeLayerX2max(new GbCuboid3D(g_maxX1 - 0.4, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-      if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut + "/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance());
-      SpongeLayerBlockVisitor slVisitorX1max(spongeLayerX1max, kernel, nu_LB, D3Q27System::E);
-      grid->accept(slVisitorX1max);
-
-      GbCuboid3DPtr spongeLayerX2min(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_minX1 + 0.2, g_maxX2 + blockLength, g_maxX3 + blockLength));
-      if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX1min.get(), pathOut + "/geo/spongeLayerX1min", WbWriterVtkXmlASCII::getInstance());
-      SpongeLayerBlockVisitor slVisitorX1min(spongeLayerX1min, spKernel, nuLB, D3Q27System::W);
-      grid->accept(slVisitorX1min);
-
-      GbCuboid3DPtr spongeLayerX3min(new GbCuboid3D(g_minX1 + 0.2, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 - 0.4, g_maxX2 + blockLength, g_minX3 + 0.2));
-      if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX3min.get(), pathOut + "/geo/spongeLayerX3min", WbWriterVtkXmlASCII::getInstance());
-      SpongeLayerBlockVisitor slVisitorX3min(spongeLayerX3min, kernel, nuLB, D3Q27System::B);
-      grid->accept(slVisitorX3min);
-
-      GbCuboid3DPtr spongeLayerX3max(new GbCuboid3D(g_minX1 + 0.2, g_minX2 - blockLength, g_maxX3 - 0.2, g_maxX1 - 0.4, g_maxX2 + blockLength, g_maxX3 + blockLength));
-      if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX3max.get(), pathOut + "/geo/spongeLayerX3max", WbWriterVtkXmlASCII::getInstance());
-      SpongeLayerBlockVisitor slVisitorX3max(spongeLayerX3max, kernel, nuLB, D3Q27System::T);
-      grid->accept(slVisitorX3max);*/
-      /////////////////////////////////////////////////////////////////////////////
-
-      if (myid==0) UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-      if (myid==0) UBLOG(logINFO, "Preprozess - end");
-
-      int numOfThreads = 1;
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      std::shared_ptr<NUPSCounterCoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm));
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep, outTimeStart));
-
-      SPtr<WriteMacroscopicQuantitiesCoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-      SPtr<UbScheduler> stepMV(new UbScheduler(1, 0, 1000000));
-      SPtr<MicrophoneArrayCoProcessor> micCoProcessor(new MicrophoneArrayCoProcessor(grid, stepSch, pathOut, comm));
-      std::vector<UbTupleFloat3> nodes;
-      micCoProcessor->addMicrophone(Vector3D(organPipeGeo->getX1Minimum()+0.0719, 0.0, organPipeGeo->getX3Maximum()+0.05));
-      nodes.push_back(UbTupleFloat3(float(organPipeGeo->getX1Minimum()+0.0719), float(0.0), float(organPipeGeo->getX3Maximum()+0.05)));
-      micCoProcessor->addMicrophone(Vector3D(organPipeGeo->getX1Maximum()+0.05, 0.0, organPipeGeo->getX3Centroid()));
-      nodes.push_back(UbTupleFloat3(float(organPipeGeo->getX1Maximum()+0.05), float(0.0), float(organPipeGeo->getX3Centroid())));
-
-      //additional mics for ray traysing
-      Vector3D vec1(g_minX1+0.5*deltaXcoarse, g_minX2+0.5*deltaXcoarse, g_minX3+0.5*deltaXcoarse);
-      micCoProcessor->addMicrophone(vec1);
-      nodes.push_back(UbTupleFloat3(float(vec1[0]), float(vec1[1]), float(vec1[2])));
-
-      Vector3D vec2(g_minX1+0.5*deltaXcoarse, g_maxX2-0.5*deltaXcoarse, g_minX3+0.5*deltaXcoarse);
-      micCoProcessor->addMicrophone(vec2);
-      nodes.push_back(UbTupleFloat3(float(vec2[0]), float(vec2[1]), float(vec2[2])));
-
-      Vector3D vec3(g_minX1+0.5*deltaXcoarse, g_minX2+0.5*deltaXcoarse, g_maxX3-0.5*deltaXcoarse);
-      micCoProcessor->addMicrophone(vec3);
-      nodes.push_back(UbTupleFloat3(float(vec3[0]), float(vec3[1]), float(vec3[2])));
-
-      Vector3D vec4(g_minX1+0.5*deltaXcoarse, g_maxX2-0.5*deltaXcoarse, g_maxX3-0.5*deltaXcoarse);
-      micCoProcessor->addMicrophone(vec4);
-      nodes.push_back(UbTupleFloat3(float(vec4[0]), float(vec4[1]), float(vec4[2])));
-
-      Vector3D vec5(organPipeGeo->getX1Minimum()+0.0719, 0.0, organPipeGeo->getX3Maximum());
-      micCoProcessor->addMicrophone(vec5);
-      nodes.push_back(UbTupleFloat3(float(vec5[0]), float(vec5[1]), float(vec5[2])));
-
-      Vector3D vec6(organPipeGeo->getX1Maximum(), 0.0, organPipeGeo->getX3Centroid());
-      micCoProcessor->addMicrophone(vec6);
-      nodes.push_back(UbTupleFloat3(float(vec6[0]), float(vec6[1]), float(vec6[2])));
-      //////////////////////////////////////////////////////////////////
-      
-      if (myid==0) WbWriterVtkXmlBinary::getInstance()->writeNodes(pathOut+"/geo/mic", nodes);
-
-
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-      SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime));
-      calculator->addCoProcessor(nupsCoProcessor);
-      calculator->addCoProcessor(micCoProcessor);
-      calculator->addCoProcessor(migCoProcessor);
-      calculator->addCoProcessor(writeMQCoProcessor);
-      /////////////////////////////////////////////////////////////////////////////////////
-
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculator->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-
-   }
-   catch (std::exception& e)
-   {
-      cerr<<e.what()<<endl<<flush;
-   }
-   catch (std::string& s)
-   {
-      cerr<<s<<endl;
-   }
-   catch (...)
-   {
-      cerr<<"unknown exception"<<endl;
-   }
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file must be set!: " << argv[0] << " <config file>" << endl << std::flush;
-      }
-   }
-}
diff --git a/apps/cpu/OrganPipe/config.txt b/apps/cpu/OrganPipe/config.txt
deleted file mode 100644
index 1554322df784bbf754ac214318e72b1909acb1b3..0000000000000000000000000000000000000000
--- a/apps/cpu/OrganPipe/config.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-pathOut = e:/temp/OrganPipe
-pathGeo = d:/Projects/SFB880/OrganPipe/geo
-
-availMem = 2e9
-
-logToFile = false
-
-QN = 67.5 #Nl/min
-
-newStart = true
-restartStep = 250000
-
-cpStep = 8000
-cpStart = 258000
-
-outTimeStep = 1
-outTimeStart = 1
-
-nupsStep = 1000 1000 10000000
-
-endTime = 10
\ No newline at end of file
diff --git a/apps/cpu/PlateWithPorousInlay/CMakeLists.txt b/apps/cpu/PlateWithPorousInlay/CMakeLists.txt
deleted file mode 100644
index 019ea34a9f344bd8f095bd0e9c37208baec22947..0000000000000000000000000000000000000000
--- a/apps/cpu/PlateWithPorousInlay/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(porplate)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(porplate BINARY)
diff --git a/apps/cpu/PlateWithPorousInlay/plate.cpp b/apps/cpu/PlateWithPorousInlay/plate.cpp
deleted file mode 100644
index 0334da7c3410cba9f92a2c2396c9702db429c510..0000000000000000000000000000000000000000
--- a/apps/cpu/PlateWithPorousInlay/plate.cpp
+++ /dev/null
@@ -1,700 +0,0 @@
-
-
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <vfluids.h>
-
-using namespace std;
-
-//////////////////////////////////////////////////////////////////////////
-void inlay(GbVoxelMatrix3DPtr pmMesh, string& pathname, int myid, int i, Grid3DPtr grid)
-{
-   int bbOptionPM = 2; //quadratic bounce back with for thin walls
-   D3Q27BoundaryConditionAdapterPtr noSlipPM(new D3Q27NoSlipBCAdapter(bbOptionPM));
-   D3Q27InteractorPtr inlayInt = D3Q27InteractorPtr(new D3Q27Interactor(pmMesh, grid, noSlipPM, Interactor3D::SOLID));
-
-   GbCuboid3DPtr inlayBox(new GbCuboid3D(pmMesh->getX1Minimum(), pmMesh->getX2Minimum(), pmMesh->getX3Minimum(), pmMesh->getX1Maximum(), pmMesh->getX2Maximum(), pmMesh->getX3Maximum()));
-   if (myid == 0) GbSystem3D::writeGeoObject(inlayBox.get(), pathname + "/geo/inlay" + UbSystem::toString(i), WbWriterVtkXmlASCII::getInstance());
-   D3Q27InteractorPtr inlayBoxInt = D3Q27InteractorPtr(new D3Q27Interactor(inlayBox, grid, noSlipPM, Interactor3D::SOLID));
-   SetSolidOrTransBlockVisitor v1(inlayBoxInt, SetSolidOrTransBlockVisitor::SOLID);
-   grid->accept(v1);
-   SetSolidOrTransBlockVisitor v2(inlayBoxInt, SetSolidOrTransBlockVisitor::TRANS);
-   grid->accept(v2);
-
-   vector<Block3DPtr> inlayBlocks;
-   vector<Block3DPtr>& sb = inlayBoxInt->getSolidBlockSet();
-   if (myid == 0) UBLOG(logINFO, "sb.size = " << sb.size());
-   inlayBlocks.insert(inlayBlocks.end(), sb.begin(), sb.end());
-   vector<Block3DPtr>& tb = inlayBoxInt->getTransBlockSet();
-   if (myid == 0) UBLOG(logINFO, "tb.size = " << tb.size());
-   inlayBlocks.insert(inlayBlocks.end(), tb.begin(), tb.end());
-
-   if (myid == 0) UBLOG(logINFO, "inlayBlocks.size = " << inlayBlocks.size());
-
-   BOOST_FOREACH(Block3DPtr block, inlayBlocks)
-   {
-      block->setActive(true);
-      inlayInt->setDifferencesToGbObject3D(block);
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void run(const char *cstr)
-{
-   try
-   {
-      string pathname;
-      string pathGeo;
-      string pathLog;
-      int numOfThreads = 1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      string machine = string(cstr);
-
-      if (machine == "my")
-      {
-         pathname = "d:/temp/porplate";
-         pathGeo = "d:/Data/plate";
-         pathLog = pathname;
-         numOfThreads = 4;
-         logfile = false;
-         availMem = 15.0e9;
-      }
-      else if (machine == "Ludwig")
-      {
-         pathname = "/work/koskuche/SFB880/porplate";
-         pathGeo = "/home/koskuche/data/plate";
-         pathLog = pathname;
-         numOfThreads = 8;
-         availMem = 12.0e9;///8*numOfThreads;
-         logfile = true;
-      }
-      else if (machine == "HLRS")
-      {
-         pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0";
-         pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate";
-         pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate";
-         numOfThreads = 12;
-         availMem = 2.0e9;
-         logfile = true;
-      }
-      else if (machine == "HLRN")
-      {
-         pathname = "/gfs1/work/niikonst/scratch/porplate";
-         pathGeo = "/gfs1/work/niikonst/data/plate";
-         pathLog = pathname;
-         numOfThreads = 24;
-         availMem = 64.0e9;
-         logfile = true;
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-#if defined(__unix__)
-      if (myid==0) 
-      {
-         const char* str = pathLog.c_str();
-         int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-      }
-#endif 
-
-      if (myid == 0 && logfile)
-      {
-         //UbLog::reportingLevel() = logDEBUG5;
-         logFilename << pathLog + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + "_" + UbSystem::toString(myid) + ".txt";
-         UbLog::output_policy::setStream(logFilename.str());
-      }
-
-      if (myid == 0) UBLOG(logINFO, "Testcase plate");
-
-      string PlatteFilename = pathGeo + "/Platte_bearbeitet2.stl";
-
-      string ZckbndFilename = pathGeo + "/2zackenbaender0.stl";
-
-      ///////////////Knotenabmessungen:
-      int nx[3], blocknx[3];
-      nx[0] = 90;//240;//120;//60;//86;//43;//65;//50;  //l�nge
-      nx[1] = 2;//2;//6;///1;//5;// //breite
-      nx[2] = 30;//64;//32;//18;//5;//15;//15; //h�he gebiet
-      blocknx[0] = 16;//10;//6;
-      blocknx[1] = 16;//10;//6;
-      blocknx[2] = 16;//10;//6;
-
-      int baseLevel = 0;
-      int refineLevel = 5;
-
-      double H = 600.0; // Kanalh�he [mm]
-      double cdx = H / (double)(nx[2] * blocknx[2]);
-      double fdx = cdx / double(1 << refineLevel);
-
-      //double h = 200.0; // gew�nschte Plattenh�he in Gitterpunkten
-      //double fdx = plate->getLengthX3()/h;
-      //double cdx = fdx*double(1<<refineLevel);
-
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      //////////////////////////////////////////////////////////////////////////
-      // physik
-      //////////////////////////////////////////////////////////////////////////
-
-      //////////////////////////////////////////////////////////////////////////
-      // Experiment Parametr
-      // Re = 1000000
-      // V = 16.05  # m / s
-      // p = 994.7  #hPa(manuell abgelesen von MUB)
-      // T = 21.78  #�C
-      // Luftfeuchte = 50.5   # %
-      //////////////////////////////////////////////////////////////////////////
-      // Simulation Parametr
-      //////////////////////////////////////////////////////////////////////////
-      double Re = 1e6; // 1133333.3333333335;
-      double rhoLB = 0.0;
-      double uLB = 0.1;
-      double lReal = 1000; //Plattenl�nge in mm
-      double nuLB = (uLB*(lReal / cdx)) / Re;
-
-      int sizeSP = 4;
-      mu::Parser spongeLayer;
-      spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0");
-      spongeLayer.DefineConst("sizeX", nx[0] * blocknx[0]);
-      spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]);
-
-      Grid3DPtr grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(1000, 1000, 10000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-      bool restart;
-
-      if (grid->getTimeStep() == 0)
-      {
-
-         if (myid == 0) UBLOG(logINFO, "Neustart..");
-         restart = false;
-         //////////////////////////////////////////////////////////////////////////
-         //Platte
-         GbTriFaceMesh3DPtr plate(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename, "Netz"));
-         if (myid == 0) GbSystem3D::writeGeoObject(plate.get(), pathname + "/geo/platte", WbWriterVtkXmlBinary::getInstance());
-         //////////////////////////////////////////////////////////////////////////
-         // Zackenband
-         //////////////////////////////////////////////////////////////////////////
-         GbTriFaceMesh3DPtr meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand"));
-         meshBand1->translate(5.0, -2.86, -14.717);
-         meshBand1->rotate(0.0, -0.5, 0.0);
-         if (myid == 0) GbSystem3D::writeGeoObject(meshBand1.get(), pathname + "/geo/Band1", WbWriterVtkXmlASCII::getInstance());
-         // Zackenband2
-         GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand2"));
-         meshBand2->translate(5.0, -7.86, -14.717);
-         meshBand2->rotate(0.0, -0.5, 0.0);
-         if (myid == 0) GbSystem3D::writeGeoObject(meshBand2.get(), pathname + "/geo/Band2", WbWriterVtkXmlASCII::getInstance());
-         // Zackenband3
-         GbTriFaceMesh3DPtr meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand3"));
-         meshBand3->translate(5.0, -2.86, -14.417); //+0.3
-         meshBand3->rotate(0.0, -0.5, 0.0);
-         if (myid == 0) GbSystem3D::writeGeoObject(meshBand3.get(), pathname + "/geo/Band3", WbWriterVtkXmlASCII::getInstance());
-         // Zackenband4
-         GbTriFaceMesh3DPtr meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand4"));
-         meshBand4->translate(5.0, -7.86, -14.417);
-         meshBand4->rotate(0.0, -0.5, 0.0);
-         if (myid == 0) GbSystem3D::writeGeoObject(meshBand4.get(), pathname + "/geo/Band4", WbWriterVtkXmlASCII::getInstance());
-         //////////////////////////////////////////////////////////////////////////
-
-         //////////////////////////////////////////////////////////////////////////
-         //porous inlay
-         // string pmFilename1  = pathGeo + "/CT-2014-039.raw";
-         // int pmNX1t=1333;  //abmessung einzelbild in x-richtung
-         // int pmNX2t=463; //abmessung einzelbild in y richtung
-         // int pmNX3t=1333; //anzahl der bilder
-         // float lthresholdt = 27686.97;
-         // float uthresholdt = 65535.0;
-
-         //// string pmFilename1  = pathGeo + "/membran370x357x101.raw";
-         //// int pmNX1t=370;  //abmessung einzelbild in x-richtung
-         //// int pmNX2t=357; //abmessung einzelbild in y richtung
-         //// int pmNX3t=101; //anzahl der bilder
-         //// float lthresholdt = 55.0;
-         //// float uthresholdt = 182.0;
-
-         // GbVoxelMatrix3DPtr pmMesht(new GbVoxelMatrix3D(pmNX1t,pmNX2t,pmNX3t,0,lthresholdt,uthresholdt));
-         // pmMesht->readMatrixFromRawFile<unsigned short>(pmFilename1);
-         // //pmMesht->readMatrixFromRawFile<unsigned char>(pmFilename1);
-         // double deltaX1 = 0.05/pmNX2t;
-         // double deltaX2 = 0.05/pmNX2t;
-         // double deltaX3 = 0.05/pmNX3t;
-         // double scaleFactort = 0.001;
-         // double deltat = 3.75*scaleFactort;
-         // pmMesht->setVoxelMatrixDelta(deltat, deltat, deltat);
-         // pmMesht->rotate90aroundX(); 
-         // pmMesht->rotate90aroundX();
-         // pmMesht->rotate90aroundX();
-         // double inlayXmin = 0;
-         // double inlayYmin = 0;
-         // double inlayZmin = 0;
-         // pmMesht->setVoxelMatrixMininum(inlayXmin, inlayYmin, inlayZmin);
-         // 
-         // if(myid == 0) pmMesht->writeToLegacyVTKBinary(pathname+"/geo/pmMesh");
-
-         // return;
-         ////////////////////////////////////////////////////////////////////////////
-
-         double blockLengthx1 = blocknx[0] * cdx; //geowerte
-         double blockLengthx2 = blockLengthx1;
-         double blockLengthx3 = blockLengthx1;
-
-         double geoLength[] = { nx[0] * blockLengthx1, nx[1] * blockLengthx2, nx[2] * blockLengthx3 };
-
-         double originX1 = plate->getX1Minimum() - plate->getLengthX1() / 4.0;
-         double originX2 = plate->getX2Minimum();
-         double originX3 = plate->getX3Minimum() - 299.5;
-
-
-         bool periodicx1 = false;
-         bool periodicx2 = true;
-         bool periodicx3 = false;
-
-         //bounding box
-         double g_minX1 = originX1;
-         double g_minX2 = originX2;
-         double g_minX3 = originX3;
-
-         double g_maxX1 = originX1 + geoLength[0];
-         double g_maxX2 = originX2 + geoLength[1];
-         double g_maxX3 = originX3 + geoLength[2];;
-
-
-         //set grid
-         grid->setDeltaX(cdx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         grid->setPeriodicX1(periodicx1);
-         grid->setPeriodicX2(periodicx2);
-         grid->setPeriodicX3(periodicx3);
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         gridCube->setCenterCoordinates(gridCube->getX1Centroid(), meshBand1->getX2Centroid(), gridCube->getX3Centroid());
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         originX2 = gridCube->getX2Minimum();
-         g_minX2 = originX2;
-         g_maxX2 = originX2 + geoLength[1];
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         //////////////////////////////////////////////////////////////////////////
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            UBLOG(logINFO, "* Re            =" << Re);
-            UBLOG(logINFO, "* nuLB          =" << nuLB);
-            UBLOG(logINFO, "* uLB           =" << uLB);
-            UBLOG(logINFO, "* cdx           =" << cdx);
-            UBLOG(logINFO, "* fdx           =" << fdx);
-            double Hzb = 0.6 / fdx;
-            UBLOG(logINFO, "* Height of Zackenband =" << Hzb);
-            UBLOG(logINFO, "* Re on Zackenband =" << (uLB*Hzb) / (nuLB*double(1 << refineLevel)));
-            UBLOG(logINFO, "* nx1/2/3       =" << nx[0] << "/" << nx[1] << "/" << nx[2]);
-            UBLOG(logINFO, "* blocknx1/2/3  =" << blocknx[0] << "/" << blocknx[1] << "/" << blocknx[2]);
-            UBLOG(logINFO, "* x1Periodic    =" << periodicx1);
-            UBLOG(logINFO, "* x2Periodic    =" << periodicx2);
-            UBLOG(logINFO, "* x3Periodic    =" << periodicx3);
-            UBLOG(logINFO, "* number of levels  =" << refineLevel + 1);
-            UBLOG(logINFO, "* path          =" << pathname);
-
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* number of threads    =" << numOfThreads);
-            UBLOG(logINFO, "* number of processes  =" << comm->getNumberOfProcesses());
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "*****************************************");
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-
-         //////////////////////////////////////////////////////////////////////////
-         //refinement
-         GbCuboid3DPtr refinePlatteBox(new GbCuboid3D(plate->getX1Minimum() - 1.0, plate->getX2Minimum(), plate->getX3Minimum() + (plate->getX3Maximum() - plate->getX3Minimum()) / 2.0,
-            plate->getX1Maximum() + 40.0, plate->getX2Maximum(), plate->getX3Maximum() + 2.0));
-         if (myid == 0) GbSystem3D::writeGeoObject(refinePlatteBox.get(), pathname + "/geo/refinePlatteBox", WbWriterVtkXmlASCII::getInstance());
-
-         //inlay patch
-         GbCuboid3DPtr refineInlayBox(new GbCuboid3D(plate->getX1Maximum() - 85.0, plate->getX2Minimum(), plate->getX3Minimum() + (plate->getX3Maximum() - plate->getX3Minimum()) / 2.0,
-            plate->getX1Maximum() + 1.0, plate->getX2Maximum(), plate->getX3Maximum() + 1.0));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineInlayBox.get(), pathname + "/geo/refineInlayBox", WbWriterVtkXmlASCII::getInstance());
-
-         if (refineLevel > 0)
-         {
-            if (myid == 0) UBLOG(logINFO, "Refinement - start");
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(refinePlatteBox, refineLevel - 1);
-            refineHelper.addGbObject(refineInlayBox, refineLevel);
-
-            refineHelper.refine();
-            if (myid == 0) UBLOG(logINFO, "Refinement - end");
-         }
-
-         //if(myid == 0)
-         //{
-         //   UBLOG(logINFO,"Write blocks - start");
-         //   BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-         //   ppblocks->update(0);
-         //   UBLOG(logINFO,"Write blocks - end");
-         //}
-
-         //return;
-
-
-         {
-
-            ////walls
-            GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_minX3 - blockLengthx1, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_minX3));
-            if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-            GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_maxX3, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_maxX3 + blockLengthx1));
-            if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-            //walls
-            int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-            D3Q27BoundaryConditionAdapterPtr slip(new D3Q27SlipBCAdapter(bbOption));
-            D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slip, Interactor3D::SOLID));
-            D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slip, Interactor3D::SOLID));
-
-            /////////////////////////////////////////////////
-            ///interactoren
-            int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-            D3Q27BoundaryConditionAdapterPtr noSlip(new D3Q27NoSlipBCAdapter(bbOption1));
-            D3Q27TriFaceMeshInteractorPtr triPlateInteractor(new D3Q27TriFaceMeshInteractor(plate, grid, noSlip, Interactor3D::SOLID, Interactor3D::POINTS));
-            D3Q27TriFaceMeshInteractorPtr triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, grid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-            D3Q27TriFaceMeshInteractorPtr triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, grid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-            D3Q27TriFaceMeshInteractorPtr triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand3, grid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-            D3Q27TriFaceMeshInteractorPtr triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand4, grid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-
-            //inflow
-            GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1 - blockLengthx1, originX2 - blockLengthx1, originX3 - blockLengthx1,
-               originX1, originX2 + geoLength[1] + blockLengthx1, originX3 + geoLength[2] + blockLengthx1));
-            if (myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname + "/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance());
-            D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid, grid, Interactor3D::SOLID));
-
-            //inflow
-            double raiseVelSteps = 0;
-            vector<D3Q27BCFunction> velcX1BCs, dummy;
-
-            mu::Parser inflowProfile;
-            inflowProfile.SetExpr("uLB");
-            inflowProfile.DefineConst("uLB", uLB);
-            velcX1BCs.push_back(D3Q27BCFunction(inflowProfile, raiseVelSteps, D3Q27BCFunction::INFCONST));
-
-            D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter(velcX1BCs, dummy, dummy));
-            velBCInteractor->addBCAdapter(velBCAdapter);
-
-            //outflow
-            GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1 + geoLength[0], originX2 - blockLengthx1, originX3 - blockLengthx1,
-               originX1 + geoLength[0] + blockLengthx1, originX2 + geoLength[1] + blockLengthx1, originX3 + geoLength[2] + blockLengthx1));
-            if (myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname + "/geo/densCuboid", WbWriterVtkXmlASCII::getInstance());
-            D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-            D3Q27InteractorPtr densInteractor(new D3Q27Interactor(densCuboid, grid, denBCAdapter, Interactor3D::SOLID));
-
-            ////////////////////////////////////////////
-            //METIS
-            Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-
-            ////////////////////////////////////////////
-            /////delete solid blocks
-            if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-            InteractorsHelper intHelper(grid, metisVisitor);
-            intHelper.addInteractor(triPlateInteractor);
-            intHelper.addInteractor(triBand1Interactor);
-            intHelper.addInteractor(triBand2Interactor);
-            intHelper.addInteractor(triBand3Interactor);
-            intHelper.addInteractor(triBand4Interactor);
-            intHelper.addInteractor(addWallZminInt);
-            intHelper.addInteractor(addWallZmaxInt);
-            intHelper.addInteractor(densInteractor);
-            intHelper.addInteractor(velBCInteractor);
-            intHelper.selectBlocks();
-            if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-            //////////////////////////////////////
-
-            //domain decomposition for threads
-            if (numOfThreads > 1)
-            {
-               PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-               grid->accept(pqPartVisitor);
-            }
-
-            if (myid == 0)
-            {
-               UBLOG(logINFO, "Write blocks - start");
-               BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-               ppblocks->update(0);
-               UBLOG(logINFO, "Write blocks - end");
-            }
-
-            unsigned long nob = grid->getNumberOfBlocks();
-            unsigned long nod = nob * blocknx[0] * blocknx[1] * blocknx[2];
-            unsigned long nod_real = nob * (blocknx[0] + 3)*(blocknx[1] + 3)*(blocknx[2] + 3);
-            unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-
-            double needMemAll = double(nod_real*(27 * sizeof(double) + sizeof(int)));
-            double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-            double nup = 0;
-
-            if (myid == 0)
-            {
-               UBLOG(logINFO, "Number of blocks = " << nob);
-               UBLOG(logINFO, "Number of nodes  = " << nod);
-               int minInitLevel = grid->getCoarsestInitializedLevel();
-               int maxInitLevel = grid->getFinestInitializedLevel();
-               for (int level = minInitLevel; level <= maxInitLevel; level++)
-               {
-                  int nobl = grid->getNumberOfBlocks(level);
-                  UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-                  UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*nodb);
-                  nup += nobl*nodb*double(1 << level);
-               }
-               UBLOG(logINFO, "Hypothetically time for calculation step for 120 nodes  = " << nup / 6.0e5 / (120 * 8) << " s");
-               UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-               UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-               UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-               UBLOG(logINFO, "Available memory per node/8.0 = " << (availMem / 8.0) << " bytes");
-            }
-
-            //////////////////////////////////////////
-            //set connectors
-            if (myid == 0) UBLOG(logINFO, "set connectors - start");
-            D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-            D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-            grid->accept(setConnsVisitor);
-            if (myid == 0) UBLOG(logINFO, "set connectors - end");
-
-            ////////////////////////////
-            LBMKernel3DPtr kernel;
-            //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-
-            //with sponge layer
-            kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-            kernel->setWithSpongeLayer(true);
-            kernel->setSpongeLayer(spongeLayer);
-
-            //BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-            BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor());
-            kernel->setBCProcessor(bcProc);
-            SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-            grid->accept(kernelVisitor);
-            //////////////////////////////////
-            //undef nodes
-            if (refineLevel > 0)
-            {
-               D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-               grid->accept(undefNodesVisitor);
-            }
-
-
-            intHelper.setBC();
-
-         }
-         //////////////////////////////////////////////////////////////////////////
-         //porous inlay
-         {
-            string pmFilename = pathGeo + "/CT-2014-039.raw";
-            int pmNX1 = 1333;  //abmessung einzelbild in x-richtung
-            int pmNX2 = 463; //abmessung einzelbild in y richtung
-            int pmNX3 = 1333; //anzahl der bilder
-            float lthreshold = 27686.97;
-            float uthreshold = 65535.0;
-
-            GbVoxelMatrix3DPtr pmMesh(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-            pmMesh->readMatrixFromRawFile<unsigned short>(pmFilename, GbVoxelMatrix3D::LittleEndian);
-
-            double scaleFactor = 0.001;
-            double delta = 3.75*scaleFactor;
-            pmMesh->setVoxelMatrixDelta(delta, delta, delta);
-            pmMesh->rotate90aroundX();
-            pmMesh->rotate90aroundX();
-            pmMesh->rotate90aroundX();
-
-            double inlayXmin = plate->getX1Maximum() - 5.0;//995.0;
-            double inlayYmin = gridCube->getX2Minimum();//180.0;
-            double inlayZmin = 8.84 + fdx;//8.73;
-
-            //pmMesh->setVoxelMatrixMininum(inlayXmin, inlayYmin, inlayZmin);
-            //if(myid == 0) pmMesh->writeToLegacyVTKBinary(pathname+"/geo/pmMesh");
-
-            int i = 0;
-            for (int y = 0; y <= 35; y += 10)
-               for (int x = 0; x <= 75; x += 10)
-               {
-                  if (myid == 0) UBLOG(logINFO, "inlay # " << i);
-                  pmMesh->setVoxelMatrixMininum(inlayXmin - (double)x, inlayYmin + (double)y, inlayZmin);
-                  inlay(pmMesh, pathname, myid, i, grid);
-                  i++;
-
-                  if (myid == 0) UBLOG(logINFO, "inlay # " << i);
-                  pmMesh->setVoxelMatrixMininum(inlayXmin - (double)(x + 5), inlayYmin + (double)y, inlayZmin);
-                  pmMesh->mirrorX();
-                  inlay(pmMesh, pathname, myid, i, grid);
-                  i++;
-
-                  if (myid == 0) UBLOG(logINFO, "inlay # " << i);
-                  pmMesh->setVoxelMatrixMininum(inlayXmin - (double)(x + 5), inlayYmin + (double)(y + 5), inlayZmin);
-                  pmMesh->mirrorY();
-                  inlay(pmMesh, pathname, myid, i, grid);
-                  i++;
-
-                  if (myid == 0) UBLOG(logINFO, "inlay # " << i);
-                  pmMesh->setVoxelMatrixMininum(inlayXmin - (double)x, inlayYmin + (double)(y + 5), inlayZmin);
-                  pmMesh->mirrorX();
-                  inlay(pmMesh, pathname, myid, i, grid);
-                  pmMesh->mirrorY();
-                  i++;
-               }
-
-            if (myid == 0)
-            {
-               UBLOG(logINFO, "mit VoxelMatrix");
-               UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-               UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-               UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-            }
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-
-         //initialization of decompositions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(nuLB, rhoLB);
-         initVisitor.setVx1(uLB);
-         grid->accept(initVisitor);
-
-         //Postprozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(),
-            unitConverter, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-         geoSch.reset();
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         restart = true;
-
-         ////////////////////////////////////////////////////////////////////////////
-         //change viscosity
-         Re = 1e6;
-         nuLB = ((uLB*(lReal/cdx))/Re)*1.043;
-         if (myid == 0) UBLOG(logINFO, "nuLB =" << nuLB);
-
-         int gridRank = grid->getRank();
-         int minInitLevel = grid->getCoarsestInitializedLevel();
-         int maxInitLevel = grid->getFinestInitializedLevel();
-
-         std::vector<std::vector<Block3DPtr> > blockVector;
-         blockVector.resize(maxInitLevel + 1);
-
-         for (int level = minInitLevel; level <= maxInitLevel; level++)
-         {
-            grid->getBlocks(level, gridRank, true, blockVector[level]);
-
-            BOOST_FOREACH(Block3DPtr block, blockVector[level])
-            {
-               LBMReal collFactor = LBMSystem::calcCollisionFactor(nuLB, block->getLevel());
-               block->getKernel()->setCollisionFactor(collFactor);
-            }
-         }
-         ////////////////////////////////////////////////////////////////////////////
-
-         //domain decomposition for threads
-         if (numOfThreads > 1)
-         {
-            PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-            grid->accept(pqPartVisitor);
-         }
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-         SetSpongeLayerBlockVisitor ssp(spongeLayer);
-         grid->accept(ssp);
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler());
-      //visSch->addSchedule(1,0,10);
-      visSch->addSchedule(100, 100, 1000);
-      //visSch->addSchedule(1000,1000,5000);
-      //visSch->addSchedule(5000,5000,100000);
-      //visSch->addSchedule(100000,100000,10000000);
-
-      visSch->addSchedule(1000, 1000, 10000000);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter);
-
-      double startStep = 33000;
-
-      UbSchedulerPtr resSchRMS(new UbScheduler());
-      resSchRMS->addSchedule(1000000, startStep, 10000000);
-      UbSchedulerPtr resSchMeans(new UbScheduler());
-      resSchMeans->addSchedule(1000000, startStep, 10000000);
-      UbSchedulerPtr stepAvSch(new UbScheduler());
-      int averageInterval = 100;
-
-      stepAvSch->addSchedule(averageInterval, 0, 10000000);
-      AverageValuesPostprocessor Avpp(grid, pathname, WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/,
-         stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/, restart);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30));
-      nupsSch->addSchedule(500, 500, 1e6);
-      NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm);
-
-      UbSchedulerPtr emSch(new UbScheduler(10));
-      EmergencyExitPostprocessor empr(grid, emSch, pathname, RestartPostprocessorPtr(&rp), comm);
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      double endTime = 100000001;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argc == 1)
-   {
-      cout << "Command line argument isn't specified!" << endl;
-      cout << "plate2 <machine name>" << endl;
-      return 1;
-   }
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/PoiseuilleFlow/pf1.cpp b/apps/cpu/PoiseuilleFlow/pf1.cpp
index 853a3b084df597b5994cab8fbd4912098eaed853..5b3f577272f9d8e90a1ed8f00909ad9f00b3b8a9 100644
--- a/apps/cpu/PoiseuilleFlow/pf1.cpp
+++ b/apps/cpu/PoiseuilleFlow/pf1.cpp
@@ -69,11 +69,10 @@ void pf1()
    //boundary conditions adapters
    //////////////////////////////////////////////////////////////////////////////
    SPtr<BC> noSlipBC(new NoSlipBC());
-   noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+   noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated()));
 
    //boundary conditions visitor
    BoundaryConditionsBlockVisitor bcVisitor;
-   bcVisitor.addBC(noSlipBC);
    //////////////////////////////////////////////////////////////////////////////////
 
    //set boundary conditions for blocks and create process decomposition for MPI
@@ -115,7 +114,7 @@ void pf1()
 
    //LBM kernel definition
    SPtr<LBMKernel> kernel;
-   kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel());
+   kernel = SPtr<LBMKernel>(new K16IncompressibleNavierStokes());
    SPtr<BCSet> bcProc(new BCSet());
    kernel->setBCSet(bcProc);
 
diff --git a/apps/cpu/PoiseuilleFlow/pf2.cpp b/apps/cpu/PoiseuilleFlow/pf2.cpp
index 7990d19690f048f444ff234a00557b22f9f5e86f..83fa1aac9a67fefd5f58a1d8cbfa43456beace3b 100644
--- a/apps/cpu/PoiseuilleFlow/pf2.cpp
+++ b/apps/cpu/PoiseuilleFlow/pf2.cpp
@@ -132,7 +132,7 @@
 //
 //   //LBM kernel definition
 //   SPtr<LBMKernel> kernel;
-//   kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], IncompressibleCumulantLBMKernel::NORMAL));
+//   kernel = SPtr<LBMKernel>(new InK15CompressibleNavierStokes(blocknx[0], blocknx[1], blocknx[2], InK15CompressibleNavierStokes::NORMAL));
 //   SPtr<BCProcessor> bcProc(new BCProcessor());
 //   kernel->setBCProcessor(bcProc);
 //
diff --git a/apps/cpu/PoiseuilleFlow/pf3.cpp b/apps/cpu/PoiseuilleFlow/pf3.cpp
index 0442b1c67663f91abb39350cc4287a62efa95e74..43b0402314418494410d56e30f2d75abfcb56eb0 100644
--- a/apps/cpu/PoiseuilleFlow/pf3.cpp
+++ b/apps/cpu/PoiseuilleFlow/pf3.cpp
@@ -117,7 +117,7 @@
 //
 //   //LBM kernel definition
 //   SPtr<LBMKernel> kernel;
-//   kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], IncompressibleCumulantLBMKernel::NORMAL));
+//   kernel = SPtr<LBMKernel>(new InK15CompressibleNavierStokes(blocknx[0], blocknx[1], blocknx[2], InK15CompressibleNavierStokes::NORMAL));
 //   SPtr<BCProcessor> bcProc(new BCProcessor());
 //   kernel->setBCProcessor(bcProc);
 //
diff --git a/apps/cpu/PoiseuilleFlow/pf4.cpp b/apps/cpu/PoiseuilleFlow/pf4.cpp
index 9568cdd619dec4a6585de167ca2234894962ef10..f2537cd686e96c4ec4ae72e225c426fd7a486800 100644
--- a/apps/cpu/PoiseuilleFlow/pf4.cpp
+++ b/apps/cpu/PoiseuilleFlow/pf4.cpp
@@ -137,7 +137,7 @@
 //
 //   //LBM kernel definition
 //   SPtr<LBMKernel> kernel;
-//   kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], IncompressibleCumulantLBMKernel::NORMAL));
+//   kernel = SPtr<LBMKernel>(new InK15CompressibleNavierStokes(blocknx[0], blocknx[1], blocknx[2], InK15CompressibleNavierStokes::NORMAL));
 //   SPtr<BCProcessor> bcProc(new BCProcessor());
 //   kernel->setBCProcessor(bcProc);
 //
diff --git a/apps/cpu/RisingBubble2D/CMakeLists.txt b/apps/cpu/RisingBubble2D/CMakeLists.txt
deleted file mode 100644
index eb41f408e66218645e32a36daf910160d26954e1..0000000000000000000000000000000000000000
--- a/apps/cpu/RisingBubble2D/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-PROJECT(RisingBubble2D)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES RisingBubble2D.cpp )
diff --git a/apps/cpu/RisingBubble2D/RisingBubble2D.cfg b/apps/cpu/RisingBubble2D/RisingBubble2D.cfg
deleted file mode 100644
index d0635ea272199311a6e09a68e77ae7ca59a239f0..0000000000000000000000000000000000000000
--- a/apps/cpu/RisingBubble2D/RisingBubble2D.cfg
+++ /dev/null
@@ -1,47 +0,0 @@
-pathname = E:/Multiphase/RisingBubble2D_dr10_test
-
-numOfThreads = 4
-availMem = 10e9
-
-#Grid
-
-#boundingBox = 0 160 0 320 0 3
-#blocknx = 16 16 3
-#blocknx = 80 80 3
-
-boundingBox = 0 20 0 20 0 3
-blocknx = 20 20 3
-
-dx = 1
-refineLevel = 0
-
-#Simulation
-uLB = 0 #0.001#0.005#0.005 
-Re = 35
-#Eotvos number
-Eo = 10;
-nuL = 1e-3 
-nuG = 1e-3 
-densityRatio = 10
-sigma = 1.0850694444444444e-06 #1e-10 #1e-6  # 1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5
-interfaceThickness = 4.096
-radius = 5 #40
-contactAngle = 110.0
-phi_L = 0.0
-phi_H = 1.0
-Phase-field Relaxation = 0.6
-Mobility = 0.056 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation parameter, to activate it need to change in kernel tauH to tauH1
-
-
-logToFile = false
-
-newStart = false
-restartStep = 10
-
-cpStart = 10
-cpStep = 10
-
-outTime = 100000
-endTime = 13
-
-rStep = 159990 #160000
\ No newline at end of file
diff --git a/apps/cpu/RisingBubble2D/RisingBubble2D.cpp b/apps/cpu/RisingBubble2D/RisingBubble2D.cpp
deleted file mode 100644
index 15da79550ae7f4e954f91d06a393d988b1c1db9d..0000000000000000000000000000000000000000
--- a/apps/cpu/RisingBubble2D/RisingBubble2D.cpp
+++ /dev/null
@@ -1,457 +0,0 @@
-#include <iostream>
-#include <memory>
-#include <string>
-
-#if defined(__unix__)
-#include <stdio.h>
-#include <stdlib.h>
-#endif
-
-#include "VirtualFluids.h"
-#include "MultiphaseFlow/MultiphaseFlow.h"
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-void run(string configname)
-{
-    using namespace vf::lbm::dir;
-
-    try {
-        vf::basics::ConfigurationFile config;
-        config.load(configname);
-
-        string pathname = config.getValue<string>("pathname");
-        int numOfThreads = config.getValue<int>("numOfThreads");
-        vector<int> blocknx = config.getVector<int>("blocknx");
-        vector<real> boundingBox = config.getVector<real>("boundingBox");
-        real uLB = config.getValue<real>("uLB");
-        real nuL = config.getValue<real>("nuL");
-        real nuG = config.getValue<real>("nuG");
-        real densityRatio = config.getValue<real>("densityRatio");
-        // double sigma           = config.getValue<double>("sigma");
-        int interfaceThickness = config.getValue<int>("interfaceThickness");
-        real radius = config.getValue<real>("radius");
-        real theta = config.getValue<real>("contactAngle");
-        real phiL = config.getValue<real>("phi_L");
-        real phiH = config.getValue<real>("phi_H");
-        real tauH = config.getValue<real>("Phase-field Relaxation");
-        real mob = config.getValue<real>("Mobility");
-
-        real endTime = config.getValue<real>("endTime");
-        real outTime = config.getValue<real>("outTime");
-        real availMem = config.getValue<real>("availMem");
-        int refineLevel = config.getValue<int>("refineLevel");
-        real Re = config.getValue<real>("Re");
-        real Eo = config.getValue<real>("Eo");
-        real dx = config.getValue<real>("dx");
-        bool logToFile = config.getValue<bool>("logToFile");
-        real restartStep = config.getValue<real>("restartStep");
-        real cpStart = config.getValue<real>("cpStart");
-        real cpStep = config.getValue<real>("cpStep");
-        bool newStart = config.getValue<bool>("newStart");
-        // double rStep = config.getValue<double>("rStep");
-
-        std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-        int myid = comm->getProcessID();
-
-        if (myid == 0) UBLOG(logINFO, "2D Rising Bubble: Start!");
-
-        if (logToFile) {
-// #if defined(__unix__)
-//             if (myid == 0) {
-//                 const char *str = pathname.c_str();
-//                 mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-//             }
-// #endif
-
-            if (myid == 0) {
-                UbSystem::makeDirectory(pathname);
-                stringstream logFilename;
-                logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-                UbLog::output_policy::setStream(logFilename.str());
-            }
-        }
-
-        std::string fileName = "./LastTimeStep" + std::to_string((int)boundingBox[1]) + ".txt";
-
-        // #if defined(__unix__)
-        //          double lastTimeStep = 0;
-        //          if (!newStart)
-        //          {
-        //              std::ifstream ifstr(fileName);
-        //              ifstr >> lastTimeStep;
-        //              restartStep = lastTimeStep;
-        //              if(endTime >= lastTimeStep)
-        //                 endTime = lastTimeStep + rStep;
-        //              else
-        //                 return;
-        //          }
-        // #endif
-
-        // Sleep(20000);
-
-        // LBMReal dLB = 0; // = length[1] / dx;
-        real rhoLB = 0.0;
-        real nuLB = nuL; //(uLB*dLB) / Re;
-
-        // diameter of circular droplet
-        real D = 2.0 * radius;
-
-        // density retio
-        // LBMReal r_rho = densityRatio;
-
-        // density of heavy fluid
-        real rho_h = 1.0;
-        // density of light fluid
-        // LBMReal rho_l = rho_h / r_rho;
-
-        // kinimatic viscosity
-        real nu_h = nuL;
-        // LBMReal nu_l = nuG;
-        // #dynamic viscosity
-        // LBMReal mu_h = rho_h * nu_h;
-
-        // gravity
-        real g_y = Re * Re * nu_h * nu_h / (D * D * D);
-        // Eotvos number
-        // LBMReal Eo = 100;
-        // surface tension
-        real sigma = rho_h * g_y * D * D / Eo;
-
-        // g_y = 0;
-
-        real beta = 12.0 * sigma / interfaceThickness;
-        real kappa = 1.5 * interfaceThickness * sigma;
-
-        if (myid == 0) {
-            // UBLOG(logINFO, "uLb = " << uLB);
-            // UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "D = " << D);
-            UBLOG(logINFO, "nuL = " << nuL);
-            UBLOG(logINFO, "nuG = " << nuG);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "Eo = " << Eo);
-            UBLOG(logINFO, "g_y = " << g_y);
-            UBLOG(logINFO, "sigma = " << sigma);
-            UBLOG(logINFO, "dx = " << dx);
-            UBLOG(logINFO, "Preprocess - start");
-        }
-
-        SPtr<LBMUnitConverter> conv(new LBMUnitConverter());
-
-        // const int baseLevel = 0;
-
-        SPtr<LBMKernel> kernel;
-
-        // kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel());
-        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel());
-        //kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel());
-        kernel = make_shared<MultiphaseScaleDistributionLBMKernel>();
-        //kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>();
-        mu::Parser fgr;
-        fgr.SetExpr("-rho*g_y");
-        fgr.DefineConst("g_y", g_y);
-
-        kernel->setWithForcing(true);
-        kernel->setForcingX1(0.0);
-        kernel->setForcingX2(fgr);
-        kernel->setForcingX3(0.0);
-
-        kernel->setPhiL(phiL);
-        kernel->setPhiH(phiH);
-        kernel->setPhaseFieldRelaxation(tauH);
-        kernel->setMobility(mob);
-        kernel->setInterfaceWidth(interfaceThickness);
-
-        kernel->setCollisionFactorMultiphase(nuL, nuG);
-        kernel->setDensityRatio(densityRatio);
-        kernel->setMultiphaseModelParameters(beta, kappa);
-        kernel->setContactAngle(theta);
-        //dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(1.0);
-        kernel->setSigma(sigma);
-        SPtr<BCSet> bcProc(new BCSet());
-
-        kernel->setBCSet(bcProc);
-
-        SPtr<BC> noSlipBC(new NoSlipBC());
-        noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy()));
-        //SPtr<BC> slipBC(new SlipBC());
-        //slipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseSlipBCStrategy()));
-        //////////////////////////////////////////////////////////////////////////////////
-        // BC visitor
-        MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
-        bcVisitor.addBC(noSlipBC);
-        //bcVisitor.addBC(slipBC);
-
-        SPtr<Grid3D> grid(new Grid3D(comm));
-        grid->setDeltaX(dx);
-        grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-        grid->setPeriodicX1(true);
-        grid->setPeriodicX2(false);
-        grid->setPeriodicX3(true);
-        grid->setGhostLayerWidth(2);
-
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
-
-        //////////////////////////////////////////////////////////////////////////
-        // restart
-        SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-        SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm));
-        // SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm));
-        // SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm));
-        //  rcp->setNu(nuLB);
-        //  rcp->setNuLG(nuL, nuG);
-        // rcp->setDensityRatio(densityRatio);
-
-        rcp->setLBMKernel(kernel);
-        rcp->setBCSet(bcProc);
-        //////////////////////////////////////////////////////////////////////////
-
-        if (newStart) {
-
-            // bounding box
-            real g_minX1 = boundingBox[0];
-            real g_minX2 = boundingBox[2];
-            real g_minX3 = boundingBox[4];
-
-            real g_maxX1 = boundingBox[1];
-            real g_maxX2 = boundingBox[3];
-            real g_maxX3 = boundingBox[5];
-
-            // geometry
-            SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-            GenBlocksGridVisitor genBlocks(gridCube);
-            grid->accept(genBlocks);
-
-            real dx2 = 2.0 * dx;
-            GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_minX1, g_maxX2 + dx2, g_maxX3 + dx2));
-            GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2));
-            GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance());
-
-            GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_minX2, g_maxX3 + dx2));
-            GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance());
-            GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - dx2, g_maxX2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2));
-            GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance());
-
-            SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, noSlipBC, Interactor3D::SOLID));
-
-            SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID));
-            SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID));
-
-            SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-            InteractorsHelper intHelper(grid, metisVisitor, true);
-            //intHelper.addInteractor(wallXminInt);
-            //intHelper.addInteractor(wallXmaxInt);
-            intHelper.addInteractor(wallYminInt);
-            intHelper.addInteractor(wallYmaxInt);
-            intHelper.selectBlocks();
-
-            ppblocks->update(0);
-            ppblocks.reset();
-
-            unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-            int ghostLayer = 5;
-            unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]);
-            unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-            unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-            real needMemAll = real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4));
-            real needMem = needMemAll / real(comm->getNumberOfProcesses());
-
-            if (myid == 0) {
-                UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-                UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-                int minInitLevel = grid->getCoarsestInitializedLevel();
-                int maxInitLevel = grid->getFinestInitializedLevel();
-                for (int level = minInitLevel; level <= maxInitLevel; level++) {
-                    int nobl = grid->getNumberOfBlocks(level);
-                    UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-                    UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock);
-                }
-                UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-                UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-                UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-            }
-
-            MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nuL, nuG, availMem, needMem);
-
-            grid->accept(kernelVisitor);
-
-            if (refineLevel > 0) {
-                SetUndefinedNodesBlockVisitor undefNodesVisitor;
-                grid->accept(undefNodesVisitor);
-            }
-
-            intHelper.setBC();
-
-            // initialization of distributions
-            real x1c = D;
-            real x2c = D;
-            real x3c = 1.5;
-            // LBMReal x3c = 2.5 * D;
-            mu::Parser fct1;
-            fct1.SetExpr("0.5+0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+0*(x3-x3c)^2)-radius)/interfaceThickness)");
-            fct1.DefineConst("x1c", x1c);
-            fct1.DefineConst("x2c", x2c);
-            fct1.DefineConst("x3c", x3c);
-            fct1.DefineConst("radius", radius);
-            fct1.DefineConst("interfaceThickness", interfaceThickness);
-
-            mu::Parser fct2;
-            fct2.SetExpr("0.5*uLB+uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+0*(x3-x3c)^2)-radius)/interfaceThickness)");
-            // fct2.SetExpr("uLB");
-            fct2.DefineConst("uLB", uLB);
-            fct2.DefineConst("x1c", x1c);
-            fct2.DefineConst("x2c", x2c);
-            fct2.DefineConst("x3c", x3c);
-            fct2.DefineConst("radius", radius);
-            fct2.DefineConst("interfaceThickness", interfaceThickness);
-
-            // MultiphaseInitDistributionsBlockVisitor initVisitor(densityRatio);
-            MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
-            initVisitor.setPhi(fct1);
-            //initVisitor.setVx1(fct2);
-            grid->accept(initVisitor);
-
-            // boundary conditions grid
-            {
-                SPtr<UbScheduler> geoSch(new UbScheduler(1));
-                SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-                ppgeo->update(0);
-                ppgeo.reset();
-            }
-
-            if (myid == 0) UBLOG(logINFO, "Preprocess - end");
-        } else {
-            if (myid == 0) {
-                UBLOG(logINFO, "Parameters:");
-                UBLOG(logINFO, "uLb = " << uLB);
-                UBLOG(logINFO, "rho = " << rhoLB);
-                UBLOG(logINFO, "nuLb = " << nuLB);
-                UBLOG(logINFO, "Re = " << Re);
-                UBLOG(logINFO, "dx = " << dx);
-                UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-                UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-                UBLOG(logINFO, "path = " << pathname);
-            }
-
-            rcp->restart((int)restartStep);
-            grid->setTimeStep(restartStep);
-
-            if (myid == 0) UBLOG(logINFO, "Restart - end");
-        }
-
-        grid->accept(bcVisitor);
-
-        // TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-        // grid->accept(setConnsVisitor);
-
-        // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        // grid->accept(setConnsVisitor);
-
-        TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        grid->accept(setConnsVisitor);
-
-        SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-        // visSch->addSchedule(307200,307200,307200); //t=2
-        // visSch->addSchedule(1228185,1228185,1228185);
-
-        //Tlb = (np.sqrt(2 * dLB / gLB)) / (np.sqrt(2 * dLT / gLT))
-        double gLT = 0.98;
-        double dLT = 0.5;
-        double Tlb = (sqrt(2 * D / g_y)) / (sqrt(2. * dLT / gLT));
-        UBLOG(logINFO, "Tlb = " << Tlb);
-        double t = Tlb * 3.;
-        visSch->addSchedule(t, t, t); // t=2
-        UBLOG(logINFO, "T3 = " << t);
-
-
-        // double t_ast, t;
-        // t_ast = 2;
-        // t = (int)(t_ast / std::sqrt(g_y / D));
-        // visSch->addSchedule(t, t, t); // t=2
-        // t_ast = 3;
-        // t = (int)(t_ast / std::sqrt(g_y / D));
-        // visSch->addSchedule(t, t, t); // t=3
-        // t_ast = 4;
-        // t = (int)(t_ast/std::sqrt(g_y/D));
-        // visSch->addSchedule(t,t,t); //t=4
-        // t_ast = 5;
-        // t = (int)(t_ast/std::sqrt(g_y/D));
-        // visSch->addSchedule(t,t,t); //t=5
-        // t_ast = 6;
-        // t = (int)(t_ast/std::sqrt(g_y/D));
-        // visSch->addSchedule(t,t,t); //t=6
-        // t_ast = 7;
-        // t = (int)(t_ast/std::sqrt(g_y/D));
-        // visSch->addSchedule(t,t,t); //t=7
-        // t_ast = 9;
-        // t = (int)(t_ast/std::sqrt(g_y/D));
-        // visSch->addSchedule(t,t,t); //t=9
-
-        //SPtr<WriteMultiphaseQuantitiesSimulationObserver> pp(new WriteMultiphaseQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-        SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> pp(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-        if (grid->getTimeStep() == 0) pp->update(0);
-
-        SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-        SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
-
-        omp_set_num_threads(numOfThreads);
-
-        endTime = t + 1000;
-        UBLOG(logINFO, "endTime = " << endTime);
-
-        SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-        SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-        simulation->addSimulationObserver(npr);
-        simulation->addSimulationObserver(pp);
-        //simulation->addSimulationObserver(rcp);
-
-        if (myid == 0) UBLOG(logINFO, "Simulation-start");
-        simulation->run();
-        if (myid == 0) UBLOG(logINFO, "Simulation-end");
-
-        // #if defined(__unix__)
-        //          //if (!newStart)
-        //          //{
-        //             if (myid == 0)
-        //             {
-        //                 std::ofstream ostr(fileName);
-        //                 ostr << endTime;
-        //                 cout << "start sbatch\n";
-        //                 //system("./start.sh");
-        //                 //system("echo test!");
-        //                 std::string str = "sbatch startJob" + std::to_string((int)boundingBox[1]) + ".sh";
-        //                 //system("sbatch startJob512.sh");
-        //                 system(str.c_str());
-        //             }
-        //             //MPI_Barrier((MPI_Comm)comm->getNativeCommunicator());
-        //          //}
-        // #endif
-
-    } catch (std::exception &e) {
-        cerr << e.what() << endl << flush;
-    } catch (std::string &s) {
-        cerr << s << endl;
-    } catch (...) {
-        cerr << "unknown exception" << endl;
-    }
-}
-int main(int argc, char *argv[])
-{
-    // Sleep(30000);
-    if (argv != NULL) {
-        if (argv[1] != NULL) {
-            run(string(argv[1]));
-        } else {
-            cout << "Configuration file is missing!" << endl;
-        }
-    }
-}
diff --git a/apps/cpu/ShotcreteJet/CMakeLists.txt b/apps/cpu/ShotcreteJet/CMakeLists.txt
deleted file mode 100644
index cd2efcfc9e15fa4f1744ba92bafd4dbfd2520847..0000000000000000000000000000000000000000
--- a/apps/cpu/ShotcreteJet/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-PROJECT(ShotcreteJet)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES jet.cpp )
diff --git a/apps/cpu/ShotcreteJet/ShotcreteJet.cfg b/apps/cpu/ShotcreteJet/ShotcreteJet.cfg
deleted file mode 100644
index 2d4507811d568974f9a338d5c3fa32c33b7989b4..0000000000000000000000000000000000000000
--- a/apps/cpu/ShotcreteJet/ShotcreteJet.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-        outputPath = /scratch/projects/nii00154/ShotcreteJet2
-        geoPath = /home/niikonst/NozzleGeo
-        logToFile = false
-        vtkSteps = 1000
-        newStart = false
-        cpStep  = 450000
-        cpStart = 450000
-        restartStep = 300000
-        endTime = 450000
-        
diff --git a/apps/cpu/ShotcreteJet/jet.cpp b/apps/cpu/ShotcreteJet/jet.cpp
deleted file mode 100644
index fbb6b07e76d4b7844c17af4186ae9e2ac682fab5..0000000000000000000000000000000000000000
--- a/apps/cpu/ShotcreteJet/jet.cpp
+++ /dev/null
@@ -1,1070 +0,0 @@
-#include <iostream>
-#include <memory>
-#include <string>
-
-#include "VirtualFluids.h"
-
-//#include "LiggghtsCoupling/LiggghtsCoupling.h"
-
-#include "MultiphaseFlow/MultiphaseFlow.h"
-
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-int main(int argc, char *argv[])
-{
-    //Sleep(30000);
-    string configname;
-    if (argv != NULL) {
-        if (argv[1] != NULL) {
-            configname = string(argv[1]);
-        } else {
-            cout << "Configuration file is missing!" << endl;
-            return 0;
-        }
-    }
-
-
-    try {
-
-        vf::basics::ConfigurationFile config;
-        config.load(configname);
-
-        string outputPath = config.getValue<string>("outputPath");
-        string geoPath = config.getValue<string>("geoPath");
-        bool logToFile = config.getValue<bool>("logToFile");
-        int vtkSteps = config.getValue<int>("vtkSteps");
-        bool newStart = config.getValue<bool>("newStart");
-        double cpStep  = config.getValue<double>("cpStep"); 
-        double cpStart = config.getValue<double>("cpStart");
-        double restartStep = config.getValue<int>("restartStep");
-        int endTime = config.getValue<int>("endTime");
-
-        std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-        int myid = comm->getProcessID();
-
-        if (myid == 0) UBLOG(logINFO, "Jet Breakup: Start!");
-
-        if (logToFile) {
-#if defined(__unix__)
-            if (myid == 0) {
-                const char *str = outputPath.c_str();
-                mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-            }
-#endif
-
-            if (myid == 0) {
-                stringstream logFilename;
-                logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-                UbLog::output_policy::setStream(logFilename.str());
-            }
-        }        
-
-        //bool newStart = false;
-        // bounding box
-        // double g_minX1 = -1341.81e-3;
-        // double g_minX2 =  348.087e-3;
-        // double g_minX3 = -210e-3;
-
-        // double g_maxX1 = -1260.81e-3;
-        // double g_maxX2 =  429.087e-3;
-        // double g_maxX3 =  214.5e-3;
-
-        // double g_minX1 = -1341.81e-3 + 10e-3;
-        // double g_minX2 =  0.360872;
-        // double g_minX3 = -210e-3;
-
-        // double g_maxX1 = -1260.81e-3 - 10e-3;
-        // double g_maxX2 =  0.416302;
-        // double g_maxX3 = 210e-3;
-
-        // int blockNX[3] = { 10, 10, 10 };
-
-        //int gridNZ = 3;
-
-        //double g_minX1 = -1.31431;
-        //double g_minX2 = 0.375582;
-        //double g_minX3 = -0.21 + 0.035 * 8.0; //-0.21; //-210e-3 - 0.2 - 6e-3; //- 1e-3;
-
-        //double g_maxX1 = -1.28831;
-        //double g_maxX2 = 0.401582;
-        //double g_maxX3 = 0.175;//0.21;
-
-        double dx = 1;
-
-        double g_maxX3_box = -0.065e3;        
-
-        double g_minX1 = -1.49631e3;
-        double g_minX2 = 0.193582e3;
-        double g_minX3 = g_maxX3_box - 0.03e3;//-0.095; //-0.215; 
-
-        double g_maxX1 = -1.10631e3;
-        double g_maxX2 = 0.583582e3;
-        double g_maxX3 = 0.175e3;
-
-      
-
-        //int blockNX[3] = { 26, 26, 35 };
-        int blockNX[3] = { 15, 15, 15 };
-
-
-        double uLB_ref = 0.0001;
-        // double rhoLB = 0.0;
-
-        // concrete
-        double d_part = 1e-3;
-        double V = 0.4; // flow rate [m^3/h]
-        double D = 0.026;     // shotcrete inlet diameter [m]
-        double R = D / 2.0;   // radius [m]
-        double A = UbMath::PI * R * R;
-        double u = V / 3600 / A;
-        double muConcrete = 2.1133054011798826; // [Pa s]
-        double rhoAir = 1.2041;                 // [kg/m^3]
-        double tau0 = 715.218181094648;         // Pa
-        double rhoConcrete = 2400;              // [kg/m^3]
-        double nu = muConcrete / rhoConcrete;
-
-        // double Re_D = d_part * u / nu;
-        // if (myid == 0) UBLOG(logINFO, "Re_D = " << Re_D);
-        //
-        SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uLB_ref);
-        if (myid == 0) std::cout << units->toString() << std::endl;
-
-        double interfaceThickness = 3; // 4.096;
-        double sigma = 0.3; //0.03;
-        double Re = rhoConcrete * u * d_part / muConcrete;
-        double We = rhoConcrete * u * u * d_part / sigma;
-
-        double u_LB_con = u * units->getFactorVelocityWToLb();
-        double nu_h_LB = nu * units->getFactorViscosityWToLb(); // uLB_ref * d_part * units->getFactorLentghWToLb() / Re;
-        double nu_l_LB = 0;                                     // = nu_h_LB;
-
-        double rho_h_LB = 1;
-
-        // surface tension
-        double sigma_LB = rho_h_LB *u_LB_con *u_LB_con *d_part * units->getFactorLentghWToLb() / We;
-
-        // LBMReal dLB = 0; // = length[1] / dx;
-        LBMReal rhoLB = 0.0;
-        // LBMReal nuLB = nu_l; //(uLB_ref*dLB) / Re;
-
-        double beta = 12.0 * sigma_LB / interfaceThickness;
-        double kappa = 1.5 * interfaceThickness * sigma_LB;
-
-        double phiL = 0.0;
-        double phiH = 1.0;
-        double tauH = 0.6; // Phase - field Relaxation
-        double mob = 0.02; // Mobility
-        // double nuL = 1e-2;
-        // double nuG = 0.015811388300841892;
-        double densityRatio = rhoConcrete / rhoAir;
-        // double sigma_old = 1.0850694444444444e-06;
-        //
-        // double beta_old = 12.0 * sigma / interfaceThickness;
-        // double kappa_old = 1.5 * interfaceThickness * sigma;
-
-        double theta = 110; // contact angle
-
-        // https://civilsir.com/density-of-cement-sand-and-aggregate-in-kg-m3-list-of-material-density/
-
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx);
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx);
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref));
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref));
-        // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uRef);
-
-        double Bm = (tau0 * d_part) / (muConcrete * u);
-        double tau0_LB = Bm * nu_h_LB * u_LB_con / (d_part * units->getFactorLentghWToLb());
-
-        SPtr<Rheology> thix = Rheology::getInstance();
-        thix->setYieldStress(tau0_LB);
-
-        if (myid == 0) VF_LOG_INFO("Yield stress = {} Pa", tau0);
-        if (myid == 0) VF_LOG_INFO("Yield stress LB = {} ", tau0_LB);
-
-        //SPtr<BC> noSlipBC(new NoSlipBC());
-        //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-        SPtr<BC> noSlipBC(new NoSlipBC());
-        noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy()));
-
-        // concrete inflow boundary condition
-        mu::Parser fct;
-        fct.SetExpr("U");
-        fct.DefineConst("U", -u_LB_con);
-        if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} m/s", u);
-        if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} dx/dt", u_LB_con);
-        if (myid == 0) VF_LOG_INFO("Concrete Re = {}", Re);
-
-        //    // Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering
-        //    // Mechanics, 21(6), 371-379.
-        //    double cx1 = -1.31431 + R;
-        //    double cx2 = 0.375582 + R;
-        //    //double cx3 = 0.20105 + R;
-        //    double L = g_maxX1 - g_minX1;
-        //    double p_concrete = 1e5; // Pa = 1 Bar
-        //    double p1 = p_concrete * units->getFactorPressureWToLb();
-        //    double p2 = 0.0;
-        //    double drhoLB = 1.0 + rhoLB;
-        //    double muLB = drhoLB * nuLB;
-        //    double N = R * R / 2 * muLB * uLB_ref * (p1 - p2) / L - 3;
-
-        //    // mu::Parser fct;
-        //    fct.SetExpr("U*(1-(((((x2-y0)^2+(x1-x0)^2)^0.5)/R)^NplusOne))");
-        //    fct.DefineConst("x0", cx1);
-        //    fct.DefineConst("y0", cx2);
-        //    //fct.DefineConst("z0", cx3);
-        //    fct.DefineConst("R", R);
-        //    fct.DefineConst("U", uLB_ref * ((N + 3) / (N + 1)));
-        //    fct.DefineConst("NplusOne", N + 1.0);
-
-        //SPtr<BC> inflowConcreteBC(new VelocityBC(false, false, true, fct, 0, BCFunction::INFCONST));
-        //inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowConcreteBC(new MultiphaseVelocityBC(false, false, true, fct, phiH, 0, BCFunction::INFCONST));
-        inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        // air inflow boundary condition
-        //  Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering
-        //  Mechanics, 21(6), 371-379.
-        // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx);
-        // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref);
-        // double V = 40;      // flow rate [m^3/h]
-        // double D = 0.0166;  // air inlet diameter [m]
-        // double R = D / 2.0; // radius [m]
-        // double A = UbMath::PI * R * R;
-        // double u = V / 3600 / A;
-        // double uLB_ref = u * unitsAir->getFactorVelocityWToLb();
-        //// double cx1 = -1.2788 + R;
-        // double cx2 = 0.3803 + R;
-        // double cx3 = 0.1517 + R;
-        // double L = g_maxX1 - g_minX1;
-        // double p_air = 7e5; // Pa = 7 Bar
-        // double p1 = p_air;
-        // double p2 = 0.0;
-        // double mu = 17.2e-6; // Pa s, air 20° C
-        // double N = R * R / 2 * mu * u * (p1 - p2) / L - 3;
-        // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u);
-        // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_ref);
-        //
-
-        // double nu = mu / rhoConcrete;
-        // double Re = d_part * u / nu;
-        // if (myid == 0) VF_LOG_INFO("Re_air = {}", Re);
-
-        // double nuLB = d_part * unitsAir->getFactorLentghWToLb() * uLB_ref / Re;
-        // if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB);
-        // nu_l_LB = nuLB;
-  
-        SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref);
-        //SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx);
-        double V_air = 40./6.;  // flow rate [m^3/h] //10.
-        double D_air = 0.00553;     // air inlet diameter [m]
-        double R_air = D_air / 2.0; // radius [m]
-        double A_air = UbMath::PI * (R_air * R_air);
-        double u_air = V_air / 3600 / A_air;
-        double uLB_air = u_air * unitsAir->getFactorVelocityWToLb();
-        // double cx1 = -1.2788 + R;
-        double cx2 = 0.385822 + R_air;
-        double cx3 = 0.135562 + R_air;
-        //double L_air = 0.00747;
-        double p_air = 7e5; // Pa = 7 Bar
-        //double p1 = p_air;
-        //double p2 = 1e5;
-        double mu_air = 17.2e-6; // Pa s, air 20° C
-        double rho_air = 1.2041; // [kg/m^3]
-        double Re_inlet = D_air * u_air * rho_air / mu_air;
-        double lambda = 0.3164 / pow(Re_inlet, 0.25);
-        double deltaP = (lambda / (2. * R_air)) * (rho_air * pow(u_air, 2) / 2.); // Darcy friction factor (Rohrreibungszahl)
-        double N = pow(R_air, 2) / (2. * mu_air * u_air) * deltaP - 3.;
-        // double N = R_air * R_air / 2 * mu_air * u_air * (p1 - p2) / L_air - 3;
-        if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u_air);
-        if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_air);
-
-        double nu_air = mu_air / rho_air;
-        double Re_air = d_part * u_air / nu_air;
-        if (myid == 0) VF_LOG_INFO("Air Re = {}", Re_air);
-
-        double nuLB_air = nu_air * unitsAir->getFactorViscosityWToLb(); // d_part * unitsAir->getFactorLentghWToLb() * uLB_air / Re_air;
-        if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB_air);
-        nu_l_LB = nuLB_air;
-
-        if (myid == 0) VF_LOG_INFO("nu_h = {}", nu_h_LB);
-        if (myid == 0) VF_LOG_INFO("nu_l = {}", nu_l_LB);
-        if (myid == 0) VF_LOG_INFO("sigma_LB = {}", sigma_LB);
-
-        double p_air_LB = p_air * unitsAir->getFactorPressureWToLb();
-        if (myid == 0) VF_LOG_INFO("p_air_LB = {}", p_air_LB);
-
-        // mu::Parser fctVx1;
-        ////fctVx1.SetExpr("U");
-        ////fctVx1.DefineConst("U", uLB_air);
-        // mu::Parser fctVx2;
-        // fctVx2.SetExpr("U");
-        // fctVx2.DefineConst("U", 0);
-        // mu::Parser fctVx3;
-        ////fctVx3.SetExpr("U");
-        ////fctVx3.DefineConst("U", -uLB_air);
-
-        double cx1 = 0;
-        double alpha = 0;
-        double gamma = 0;
-        double U = uLB_air;// * ((N + 3.) / (N + 1.));
-
-        mu::Parser fctVx1;
-        //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        // fctVx1.SetExpr("(((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5/R)^NplusOne");
-        fctVx1.SetExpr("U*cos(alpha*_pi/180)");
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("R", R_air);
-        fctVx1.DefineConst("U", U); //* ((N + 3.) / (N + 1.)));
-        fctVx1.DefineConst("NplusOne", N + 1.0);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx1.DefineConst("gamma", gamma);
-
-        mu::Parser fctVx2;
-        //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        fctVx2.SetExpr("U*sin(alpha*_pi/180)");
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("R", R_air);
-        fctVx2.DefineConst("U", U); //* ((N + 3.) / (N + 1.)));
-        fctVx2.DefineConst("NplusOne", N + 1.0);
-        fctVx2.DefineConst("alpha", alpha);
-
-        mu::Parser fctVx3;
-        //fctVx3.SetExpr("U*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
-        //fctVx3.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))");
-        fctVx3.SetExpr("U");
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        fctVx3.DefineConst("R", R_air);
-        fctVx3.DefineConst("U", -U); //* ((N + 3.) / (N + 1.)));
-        fctVx3.DefineConst("NplusOne", N + 1.0);
-        fctVx3.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("gamma", gamma);
-
-        // SPtr<BC> inflowAirBC1(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST));
-        // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        // t = U * sin(alpha * _pi / 180) * (1 - (((((x1 - x0) ^ 2 + (x2 - y0) ^ 2 + (x3 - z0) ^ 2) ^ 0.5) / R) ^ NplusOne));
-        cx1 = -1.31416e3;
-        cx2 = 0.388684e3;
-        cx3 = 0.138177e3;
-        alpha = 0;
-        gamma = 225;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx1.DefineConst("gamma", gamma);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("gamma", gamma);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        fctVx3.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("gamma", gamma);
-
-        //SPtr<BC> inflowAirBC1(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));        
-        SPtr<BC> inflowAirBC1(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        fctVx1.DefineVar("x1", &cx1);
-        fctVx1.DefineVar("x2", &cx2);
-        fctVx1.DefineVar("x3", &cx3);
-        fctVx2.DefineVar("x1", &cx1);
-        fctVx2.DefineVar("x2", &cx2);
-        fctVx2.DefineVar("x3", &cx3);
-        fctVx3.DefineVar("x1", &cx1);
-        fctVx3.DefineVar("x2", &cx2);
-        fctVx3.DefineVar("x3", &cx3);
-
-        if (myid == 0) {
-
-            VF_LOG_INFO("fctVx1 = {}", fctVx1.Eval());
-            VF_LOG_INFO("fctVx2 = {}", fctVx2.Eval());
-            VF_LOG_INFO("fctVx3 = {}", fctVx3.Eval());
-            VF_LOG_INFO("N = {}", N);
-            VF_LOG_INFO("NplusOne = {}", N + 1.0);
-            // return 0;
-        }
-        cx1 = -1.31303e3;
-        cx2 = 0.377234e3;
-        cx3 = 0.138174e3;
-        alpha = 60;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        //SPtr<BC> inflowAirBC2(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowAirBC2(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.2948374155694822e3;
-        cx2 = 0.37733728717266285e3;
-        cx3 = 0.13840460401111598e3;
-        alpha = 120;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        //SPtr<BC> inflowAirBC3(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowAirBC3(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.28847e3;
-        cx2 = 0.3885e3;
-        cx3 = 0.1385e3;
-        alpha = 180;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        //SPtr<BC> inflowAirBC4(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowAirBC4(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.294771417778694e3;
-        cx2 = 0.399787947463142e3;
-        cx3 = 0.1383429692754194e3;
-        alpha = 240;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        //SPtr<BC> inflowAirBC5(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowAirBC5(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        cx1 = -1.3077338898450492e3;
-        cx2 = 0.3998516560596088e3;
-        cx3 = 0.13843501416896437e3;
-        alpha = 300;
-        fctVx1.DefineConst("x0", cx1);
-        fctVx1.DefineConst("y0", cx2);
-        fctVx1.DefineConst("z0", cx3);
-        fctVx1.DefineConst("alpha", alpha);
-        fctVx2.DefineConst("x0", cx1);
-        fctVx2.DefineConst("y0", cx2);
-        fctVx2.DefineConst("z0", cx3);
-        fctVx2.DefineConst("alpha", alpha);
-        fctVx3.DefineConst("x0", cx1);
-        fctVx3.DefineConst("y0", cx2);
-        fctVx3.DefineConst("z0", cx3);
-        //SPtr<BC> inflowAirBC6(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST));
-        //inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        SPtr<BC> inflowAirBC6(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST));
-        inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy()));
-
-        // Pressure BC for air inlet
-        // SPtr<BC> inflowAirBC1(new DensityBC(p_air_LB));
-        // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-
-        SPtr<BC> outflowBC(new DensityBC(rhoLB));
-        //outflowBC->setBCStrategy(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
-        outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy()));
-        
-        // SPtr<BC> outflowBC(new DensityBC(rhoLB));
-        //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy()));
-        //////////////////////////////////////////////////////////////////////////////////
-        // BC visitor
-        //BoundaryConditionsBlockVisitor bcVisitor;
-        MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
-        bcVisitor.addBC(noSlipBC);
-        bcVisitor.addBC(inflowConcreteBC);
-        bcVisitor.addBC(inflowAirBC1);
-        bcVisitor.addBC(outflowBC);
-
-        // SPtr<LBMKernel> kernel   = make_shared<IBcumulantK17LBMKernel>();
-         //SPtr<LBMKernel> kernel   = make_shared<CumulantK17LBMKernel>();
-        // SPtr<LBMKernel> kernel = make_shared<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>();
-        // SPtr<LBMKernel> kernel = make_shared<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>();
-        SPtr<LBMKernel> kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>();
-        //SPtr<LBMKernel> kernel = make_shared<MultiphaseScaleDistributionLBMKernel>();
-        //SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>();
-        //SPtr<LBMKernel> kernel = make_shared<IBsharpInterfaceLBMKernel>();
-
-        kernel->setWithForcing(false);
-        kernel->setForcingX1(0.0);
-        kernel->setForcingX2(0.0);
-        kernel->setForcingX3(0.0);
-
-        kernel->setPhiL(phiL);
-        kernel->setPhiH(phiH);
-        kernel->setPhaseFieldRelaxation(tauH);
-        kernel->setMobility(mob);
-        kernel->setInterfaceWidth(interfaceThickness);
-
-        kernel->setCollisionFactorMultiphase(nu_h_LB, nu_l_LB);
-        kernel->setDensityRatio(densityRatio);
-        kernel->setMultiphaseModelParameters(beta, kappa);
-        kernel->setContactAngle(theta);
-        kernel->setSigma(sigma_LB);
-
-        SPtr<BCSet> bcProc = make_shared<BCSet>();
-        kernel->setBCSet(bcProc);
-
-        SPtr<Grid3D> grid = make_shared<Grid3D>(comm);
-        grid->setPeriodicX1(false);
-        grid->setPeriodicX2(false);
-        grid->setPeriodicX3(false);
-        grid->setDeltaX(dx);
-        grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]);
-        grid->setGhostLayerWidth(2);
-
-        //string geoPath = "/home/niikonst/NozzleGeo";
-
-        //string outputPath = "/scratch/projects/nii00154/ShotcreteJet2";
-        UbSystem::makeDirectory(outputPath);
-        UbSystem::makeDirectory(outputPath + "/liggghts");
-
-        // if (myid == 0) {
-        //     stringstream logFilename;
-        //     logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-        //     UbLog::output_policy::setStream(logFilename.str());
-        // }
-
-        /////////////////////////////////////////////////////////////////////
-        //LIGGGHTS things
-        /////////////////////////////////////////////////////////////////////
-        // string inFile1 = "d:/Projects/TRR277/Project/WP4/Config/in.nozzle";
-        // // string inFile2 = "d:/Projects/VirtualFluids_LIGGGHTS_coupling/apps/cpu/LiggghtsApp/in2.lbdem";
-        // MPI_Comm mpi_comm = *(MPI_Comm *)(comm->getNativeCommunicator());
-        // LiggghtsCouplingWrapper wrapper(argv, mpi_comm);
-
-        // double v_frac = 0.1;
-        // double dt_phys = units->getFactorTimeLbToW();
-        // int demSubsteps = 10;
-        // double dt_dem = dt_phys / (double)demSubsteps;
-         //int vtkSteps = 1000;
-        // string demOutDir = outputPath + "/liggghts";
-
-        // // wrapper.execCommand("echo none");
-
-        // // wrapper.execFile((char*)inFile1.c_str());
-
-        // //// set timestep and output directory
-        // //////wrapper.setVariable("t_step", dt_dem);
-        // //////wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps);
-        // //////wrapper.setVariable("dmp_dir", demOutDir);
-
-        // //!!!!//wrapper.execFile((char *)inFile1.c_str());
-        // //wrapper.runUpto(demSubsteps - 1);
-        // // wrapper.runUpto(1000);
-
-        // //LatticeDecomposition lDec((g_maxX1 - g_minX1) / dx, (g_maxX2 - g_minX2) / dx, (g_maxX3 - g_minX3) / dx, wrapper.lmp, grid);
-
-        SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1);
-        // SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, unitsAir);
-        // //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(std::ceil((g_maxX1 - g_minX1) / dx), std::ceil((g_maxX2 - g_minX2) / dx), std::ceil((g_maxX3 - g_minX3) / dx), wrapper.lmp);
-        // //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(blockNX[0], blockNX[1], blockNX[2] * gridNZ, wrapper.lmp);
-        
-        // /////////////////////////////////////////////////////////////////////
-        // /////////////////////////////////////////////////////////////////////
-        
-        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::KWAY));
-
-        //////////////////////////////////////////////////////////////////////////
-        // restart
-        //double cpStep  = 15000; 
-        //double cpStart = 10;
-        SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-        SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, outputPath, comm));
-        rcp->setLBMKernel(kernel);
-        rcp->setBCSet(bcProc);
-        //////////////////////////////////////////////////////////////////////////
-
-//if (newStart) {
-        SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3);
-        if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-        GenBlocksGridVisitor genBlocks(gridCube);
-        grid->accept(genBlocks);
-
-        // geo
-        //////////////////////////////////////////////////////////
-        //int accuracy = Interactor3D::EDGES;
-        ///////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleAirDistributor = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:start");
-        meshNozzleAirDistributor->readMeshFromSTLFileBinary(geoPath + "/01_Nozzle_Air_Distributor.stl", false);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirDistributor.get(), outputPath + "/geo/meshNozzleAirDistributor", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleAirDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirDistributor, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS);
-        /////////////////////////////////////////////////////////////
-        //SPtr<GbTriFaceMesh3D> meshNozzleAirInlet = std::make_shared<GbTriFaceMesh3D>();
-        //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:start");
-        //meshNozzleAirInlet->readMeshFromSTLFileASCII(geoPath + "/02_Nozzle_Air_Inlet.stl", false);
-        //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:end");
-        //if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirInlet.get(), outputPath + "/geo/meshNozzleAirInlet", WbWriterVtkXmlBinary::getInstance());
-        //SPtr<Interactor3D> intrNozzleAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        /////////////////////////////////////////////////////////////
-        //SPtr<GbTriFaceMesh3D> meshNozzleSpacer = std::make_shared<GbTriFaceMesh3D>();
-        //if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:start");
-        //meshNozzleSpacer->readMeshFromSTLFileASCII(geoPath + "/03_Nozzle_Spacer.stl", true);
-        //if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:end");
-        //if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleSpacer.get(), outputPath + "/geo/meshNozzleSpacer", WbWriterVtkXmlBinary::getInstance());
-        //SPtr<Interactor3D> intrNozzleSpacer = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleSpacer, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        /////////////////////////////////////////////////////////////
-        //SPtr<GbTriFaceMesh3D> meshNozzleAccDistributor = std::make_shared<GbTriFaceMesh3D>();
-        //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:start");
-        //meshNozzleAccDistributor->readMeshFromSTLFileASCII(geoPath + "/04_Nozzle_Acc_Distributor.stl", false);
-        //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:end");
-        //if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccDistributor.get(), outputPath + "/geo/meshNozzleAccDistributor", WbWriterVtkXmlBinary::getInstance());
-        //SPtr<Interactor3D> intrNozzleAccDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        /////////////////////////////////////////////////////////////
-        //SPtr<GbTriFaceMesh3D> meshNozzleAccInlet = std::make_shared<GbTriFaceMesh3D>();
-        //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:start");
-        //meshNozzleAccInlet->readMeshFromSTLFileASCII(geoPath + "/05_Nozzle_Acc_Inlet.stl", false);
-        //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:end");
-        //if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccInlet.get(), outputPath + "/geo/meshNozzleAccInlet", WbWriterVtkXmlBinary::getInstance());
-        //SPtr<Interactor3D> intrNozzleAccInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy);
-        /////////////////////////////////////////////////////////////
-        //SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle1 = std::make_shared<GbTriFaceMesh3D>();
-        //if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:start");
-        //meshNozzleVolcanNozzle1->readMeshFromSTLFileBinary(geoPath + "/06_1_Nozzle_Volcan_Nozzle.stl", true);
-        //if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:end");
-        //if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle1.get(), outputPath + "/geo/meshNozzleVolcanNozzle1", WbWriterVtkXmlBinary::getInstance());
-        //SPtr<Interactor3D> intrNozzleVolcanNozzle1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle1, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle2 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:start");
-        //meshNozzleVolcanNozzle2->readMeshFromSTLFileBinary(geoPath + "/06_2_Nozzle_Volcan_Nozzle.stl", true);
-        meshNozzleVolcanNozzle2->readMeshFromSTLFileBinary(geoPath + "/Nozzle_Volcan_Nozzle_Shift.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle2.get(), outputPath + "/geo/meshNozzleVolcanNozzle2", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrNozzleVolcanNozzle2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle2, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        // box
-        SPtr<D3Q27Interactor> intrBox = SPtr<D3Q27Interactor>(new D3Q27Interactor(gridCube, grid, noSlipBC, Interactor3D::INVERSESOLID));
-        ///////////////////////////////////////////////////////////
-        // inflow
-        //GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, 0.20105, -1.30181 + 0.0005, 0.390872 - 0.00229, 0.23, 0.013));
-        GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_maxX3 - 2.0 * dx, -1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_maxX3+2.0*dx, 0.013e3));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBC, Interactor3D::SOLID));
-        ///////////////////////////////////////////////////////////
-        // outflow
-        //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.22, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.21, 0.013));
-        //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.426, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.415, 0.013));
-        GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_minX3, -1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_minX3+2.*dx, 0.013e3));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), outputPath + "/geo/geoOutflow", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrOutflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBC, Interactor3D::SOLID));
-        ///////////////////////////////////////////////////////////
-        // SPtr<GbTriFaceMesh3D> geoAirInlet = std::make_shared<GbTriFaceMesh3D>();
-        // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:start");
-        // geoAirInlet->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet.stl", true);
-        // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:end");
-        // if (myid == 0) GbSystem3D::writeGeoObject(geoAirInlet.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance());
-        // SPtr<Interactor3D> intrAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(geoAirInlet, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES);
-        /////////////////////////////////////////////////////////////
-        // Fluid area
-        //GbCylinder3DPtr geoFluidArea(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013));
-        GbCylinder3DPtr geoFluidArea(new GbCylinder3D(-1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_maxX3_box, -1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_maxX3, 0.013e3));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoFluidArea.get(), outputPath + "/geo/geoFluidArea", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrFluidArea = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoFluidArea, grid, noSlipBC, Interactor3D::INVERSESOLID));
-
-        //SPtr<GbTriFaceMesh3D> meshFluidArea = std::make_shared<GbTriFaceMesh3D>();
-        //if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:start");
-        //meshFluidArea->readMeshFromSTLFileBinary(geoPath + "/FluidArea.stl", true);
-        //if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:end");
-        //if (myid == 0) GbSystem3D::writeGeoObject(meshFluidArea.get(), outputPath + "/geo/meshFluidArea", WbWriterVtkXmlBinary::getInstance());
-        //SPtr<Interactor3D> intrFluidArea = std::make_shared<D3Q27TriFaceMeshInteractor>(meshFluidArea, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES);
-
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshInflowPipe = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:start");
-        meshInflowPipe->readMeshFromSTLFileBinary(geoPath + "/InflowPipe.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshInflowPipe.get(), outputPath + "/geo/meshInflowPipe", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrInflowPipe = std::make_shared<D3Q27TriFaceMeshInteractor>(meshInflowPipe, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES);
-        ///////////////////////////////////////////////////////////
-
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshInflowPipe2 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:start");
-        meshInflowPipe2->readMeshFromSTLFileBinary(geoPath + "/LongTube2.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshInflowPipe2.get(), outputPath + "/geo/LongTube", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrInflowPipe2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshInflowPipe2, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES);
-        ///////////////////////////////////////////////////////////
-
-        ///////////////////////////////////////////////////////////
-        //outflows 
-        //////////////////////////////////////////////////////////
-        SPtr<GbObject3D> geoOutflow1 = make_shared<GbCuboid3D>(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_minX3);
-        if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow1.get(), outputPath + "/geo/geoOutflow1", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrOutflow1 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow1, grid, outflowBC, Interactor3D::SOLID));
-
-        SPtr<GbObject3D> geoOutflow2 = make_shared<GbCuboid3D>(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx);
-        if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow2.get(), outputPath + "/geo/geoOutflow2", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrOutflow2 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow2, grid, outflowBC, Interactor3D::SOLID));
-
-        SPtr<GbObject3D> geoOutflow3 = make_shared<GbCuboid3D>(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx);
-        if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow3.get(), outputPath + "/geo/geoOutflow3", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrOutflow3 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow3, grid, outflowBC, Interactor3D::SOLID));
-
-        SPtr<GbObject3D> geoOutflow4 = make_shared<GbCuboid3D>(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_minX2, g_maxX3 + 2.0 * dx);
-        if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow4.get(), outputPath + "/geo/geoOutflow4", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrOutflow4 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow4, grid, outflowBC, Interactor3D::SOLID));
-
-        SPtr<GbObject3D> geoOutflow5 = make_shared<GbCuboid3D>(g_minX1 - 2.0 * dx, g_maxX2, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx);
-        if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow5.get(), outputPath + "/geo/geoOutflow5", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrOutflow5 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow5, grid, outflowBC, Interactor3D::SOLID));
-
-        //SPtr<GbObject3D> geoOutflow6 = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_maxX3_box, g_maxX1, g_maxX2, g_maxX3_box + 2.0 * dx);
-        //if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow6.get(), outputPath + "/geo/geoOutflow6", WbWriterVtkXmlBinary::getInstance());
-        //SPtr<D3Q27Interactor> intrOutflow6 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow6, grid, outflowBC, Interactor3D::SOLID));
-
-        SPtr<GbTriFaceMesh3D> geoOutflow6 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read geoOutflow6:start");
-        geoOutflow6->readMeshFromSTLFileBinary(geoPath + "/OutflowTop.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read geoOutflow6:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow6.get(), outputPath + "/geo/geoOutflow6", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrOutflow6 = std::make_shared<D3Q27TriFaceMeshInteractor>(geoOutflow6, grid, outflowBC, Interactor3D::SOLID, Interactor3D::POINTS);
-
-        ///////////////////////////////////////////////////////////
-        GbCylinder3DPtr geoAirInflow(new GbCylinder3D(-1.31431 - 0.0005, 0.388587, 0.1383275, -1.31431, 0.388587, 0.1383275, 0.002765));
-        if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intrAirInflow = std::make_shared<D3Q27Interactor>(geoAirInflow, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet1 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:start");
-        meshAirInlet1->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_1.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet1.get(), outputPath + "/geo/meshAirInlet1", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet1, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet2 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:start");
-        meshAirInlet2->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_2.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet2.get(), outputPath + "/geo/meshAirInlet2", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet2, grid, inflowAirBC2, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet3 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:start");
-        meshAirInlet3->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_3.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet3.get(), outputPath + "/geo/meshAirInlet3", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet3 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet3, grid, inflowAirBC3, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet4 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:start");
-        meshAirInlet4->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_4.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet4.get(), outputPath + "/geo/meshAirInlet4", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet4 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet4, grid, inflowAirBC4, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet5 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:start");
-        meshAirInlet5->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_5.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet5.get(), outputPath + "/geo/meshAirInlet5", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet5 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet5, grid, inflowAirBC5, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        SPtr<GbTriFaceMesh3D> meshAirInlet6 = std::make_shared<GbTriFaceMesh3D>();
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:start");
-        meshAirInlet6->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_6.stl", true);
-        if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:end");
-        if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet6.get(), outputPath + "/geo/meshAirInlet6", WbWriterVtkXmlBinary::getInstance());
-        SPtr<Interactor3D> intAirInlet6 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet6, grid, inflowAirBC6, Interactor3D::SOLID, Interactor3D::POINTS);
-        ///////////////////////////////////////////////////////////
-        
-        SPtr<GbObject3D> geoBox1 = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_maxX3_box, g_minX1+12.0*blockNX[0]*dx, g_maxX2, g_maxX3);
-        if (myid == 0) GbSystem3D::writeGeoObject(geoBox1.get(), outputPath + "/geo/geoBox1", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrGeoBox1 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoBox1, grid, outflowBC, Interactor3D::SOLID));    
-
-        SPtr<GbObject3D> geoBox2 = make_shared<GbCuboid3D>(g_minX1 + 14.0 * blockNX[0] * dx, g_minX2, g_maxX3_box, g_maxX1, g_maxX2, g_maxX3);
-        if (myid == 0) GbSystem3D::writeGeoObject(geoBox2.get(), outputPath + "/geo/geoBox2", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrGeoBox2 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoBox2, grid, outflowBC, Interactor3D::SOLID));
-
-        SPtr<GbObject3D> geoBox3 = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_maxX3_box, g_maxX1, g_minX2 + 12.0 * blockNX[0] * dx, g_maxX3);
-        if (myid == 0) GbSystem3D::writeGeoObject(geoBox3.get(), outputPath + "/geo/geoBox3", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrGeoBox3 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoBox3, grid, outflowBC, Interactor3D::SOLID));
-
-        SPtr<GbObject3D> geoBox4 = make_shared<GbCuboid3D>(g_minX1, g_minX2 + 14.0 * blockNX[0] * dx, g_maxX3_box, g_maxX1, g_maxX2, g_maxX3);
-        if (myid == 0) GbSystem3D::writeGeoObject(geoBox4.get(), outputPath + "/geo/geoBox4", WbWriterVtkXmlBinary::getInstance());
-        SPtr<D3Q27Interactor> intrGeoBox4 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoBox4, grid, outflowBC, Interactor3D::SOLID));
-        
-        InteractorsHelper intHelper1(grid, metisVisitor, true);
-        //intHelper1.addInteractor(intrFluidArea);
-        intHelper1.addInteractor(intrGeoBox1);
-        intHelper1.addInteractor(intrGeoBox2);
-        intHelper1.addInteractor(intrGeoBox3);
-        intHelper1.addInteractor(intrGeoBox4);
-        intHelper1.selectBlocks();
-
-        //MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h_LB, nu_l_LB, 1e9, 1);
-        //grid->accept(kernelVisitor);
-
-        //intHelper1.setBC();
-
-        //SPtr<GbObject3D> gridCube2 = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3_box);
-        //if (myid == 0) GbSystem3D::writeGeoObject(gridCube2.get(), outputPath + "/geo/gridCube2", WbWriterVtkXmlBinary::getInstance());
-        //GenBlocksGridVisitor genBlocks2(gridCube2);
-        //grid->accept(genBlocks2);
-
-        MultiphaseSetKernelBlockVisitor kernelVisitor2(kernel, nu_h_LB, nu_l_LB, 1e9, 1 ); // ,MultiphaseSetKernelBlockVisitor::AddKernel);
-         grid->accept(kernelVisitor2);
-
-        vector<SPtr<Block3D>> blocks;
-         grid->getBlocksByCuboid(0, g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3, blocks);
-
-        for (auto block : blocks) {
-            if (block) {
-                block->setActive(true);
-                SPtr<BCArray3D> bcArray = block->getKernel()->getBCSet()->getBCArray();
-
-                int minX1 = 0;
-                int minX2 = 0;
-                int minX3 = 0;
-
-                int maxX1 = (int)(bcArray->getNX1()) - 1;
-                int maxX2 = (int)(bcArray->getNX2()) - 1;
-                int maxX3 = (int)(bcArray->getNX3()) - 1;
-
-                for (int ix3 = minX3; ix3 <= maxX3; ix3++) {
-                    for (int ix2 = minX2; ix2 <= maxX2; ix2++) {
-                        for (int ix1 = minX1; ix1 <= maxX1; ix1++) {
-                            bcArray->setFluid(ix1, ix2, ix3);
-                        }
-                    }
-                }
-            }
-            }
-
-        if (!newStart)
-        {
-            rcp->readBlocks((int)restartStep);
-            grid->accept(metisVisitor);
-            rcp->readDataSet((int)restartStep);
-            grid->setTimeStep(restartStep);
-        }
-
-        InteractorsHelper intHelper2(grid, metisVisitor, false);
-        intHelper2.addInteractor(intrInflowPipe);
-        intHelper2.addInteractor(intrInflowPipe2);
-        intHelper2.addInteractor(intrNozzleAirDistributor);
-        //intHelper2.addInteractor(intrFluidArea);
-        intHelper2.addInteractor(intrNozzleVolcanNozzle2);
-        // intHelper.addInteractor(intrBox);
-        intHelper2.addInteractor(intrInflow);
-        //// intHelper.addInteractor(intrAirInflow);
-        intHelper2.addInteractor(intAirInlet1);
-        intHelper2.addInteractor(intAirInlet2);
-        intHelper2.addInteractor(intAirInlet3);
-        intHelper2.addInteractor(intAirInlet4);
-        intHelper2.addInteractor(intAirInlet5);
-        intHelper2.addInteractor(intAirInlet6);
-        intHelper2.addInteractor(intrOutflow1);
-        intHelper2.addInteractor(intrOutflow2);
-        intHelper2.addInteractor(intrOutflow3);
-        intHelper2.addInteractor(intrOutflow4);
-        intHelper2.addInteractor(intrOutflow5);
-        intHelper2.addInteractor(intrOutflow6);
-
-        // intHelper.addInteractor(intrNozzleAirDistributor);
-        // intHelper.addInteractor(intrNozzleAirInlet);
-        // intHelper.addInteractor(intrNozzleSpacer);
-        // intHelper.addInteractor(intrNozzleAccDistributor);
-        // intHelper.addInteractor(intrNozzleAccInlet);
-        // intHelper.addInteractor(intrNozzleVolcanNozzle1);
-
-        intHelper2.selectBlocks();
-
-         // if (myid == 0) UBLOG(logINFO, Utilities::toString(grid, comm->getNumberOfProcesses()));
-
-        //SetKernelBlockVisitor kernelVisitor(kernel, nu_l_LB, comm->getNumberOfProcesses());
-
-
-        intHelper2.setBC();
-
-
-
-        //GenBlocksGridVisitor genBlocks2(gridCube2);
-        //grid->accept(genBlocks2);
-
-        //grid->accept(metisVisitor);
-
-        //MultiphaseSetKernelBlockVisitor kernelVisitor2(kernel, nu_h_LB, nu_l_LB, 1e9, 1, MultiphaseSetKernelBlockVisitor::AddKernel);
-        //grid->accept(kernelVisitor2);
-
-        //SetBcBlocksBlockVisitor v1(intrOutflow1);
-        //grid->accept(v1);
-        //intrOutflow1->initInteractor();
-
-
-        //SetBcBlocksBlockVisitor v2(intrOutflow2);
-        //grid->accept(v2);
-        //intrOutflow2->initInteractor();
-
-        //SetBcBlocksBlockVisitor v3(intrOutflow3);
-        //grid->accept(v3);
-        //intrOutflow3->initInteractor();
-
-        //SetBcBlocksBlockVisitor v4(intrOutflow4);
-        //grid->accept(v4);
-        //intrOutflow4->initInteractor();
-
-        //SetBcBlocksBlockVisitor v5(intrOutflow5);
-        //grid->accept(v5);
-        //intrOutflow5->initInteractor();
-
-        //SetBcBlocksBlockVisitor v6(intrOutflow6);
-        //grid->accept(v6);
-        //intrOutflow6->initInteractor();
-
-        //SetBcBlocksBlockVisitor v7(intrNozzleVolcanNozzle2);
-        //grid->accept(v7);
-        //intrNozzleVolcanNozzle2->initInteractor();
-
-
-       SPtr<SimulationObserver> ppblocks = make_shared<WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm);
-        ppblocks->update(0);
-        ppblocks.reset();
-
-        // boundary conditions grid
-        {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppgeo->update(0);
-            ppgeo.reset();
-        }
-
-
-
-        if (newStart)
-        {
-            double x1c = -1.31431 + R;
-            double x2c = 0.375582 + R;
-            double Ri = 5;
-            double x3c = 0.136 + Ri;
-
-            mu::Parser fct1;
-            // fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
-            fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
-            fct1.DefineConst("x1c", x1c);
-            fct1.DefineConst("x2c", x2c);
-            fct1.DefineConst("x3c", x3c);
-            fct1.DefineConst("radius", Ri);
-            fct1.DefineConst("interfaceThickness", interfaceThickness * dx);
-
-            MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
-            //initVisitor.setPhi(fct1);
-            grid->accept(initVisitor);
-        }
-        //else
-        //{
-        //    //rcp->restart((int)restartStep);
-        //    rcp->readBlocks((int)restartStep);
-        //    grid->accept(metisVisitor);
-        //    rcp->readDataSet((int)restartStep);
-        //    grid->setTimeStep(restartStep);
-        //}
-
-
-       
-
-//}
-//else
-//{
-//            //double restartStep = 10;
-//            rcp->restart((int)restartStep);
-//            grid->setTimeStep(restartStep);
-//
-//            //GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3 - 2.0 * dx, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3 + 2.0 * dx, 0.013));
-//            //if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlBinary::getInstance());
-//            //SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBC, Interactor3D::SOLID));
-//            //SetBcBlocksBlockVisitor v1(intrInflow);
-//            //grid->accept(v1);
-//            //intrInflow->initInteractor();
-//
-//            if (myid == 0)  UBLOG(logINFO, "Restart - end");
-//}
-        
-
-        grid->accept(bcVisitor);
-        //OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-        TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        grid->accept(setConnsVisitor);
-
-        int numOfThreads = 18;
-        omp_set_num_threads(numOfThreads);
-
-        SPtr<UbScheduler> nupsSch = std::make_shared<UbScheduler>(10, 10, 100);
-        SPtr<NUPSCounterSimulationObserver> nupsSimulationObserver = make_shared<NUPSCounterSimulationObserver>(grid, nupsSch, numOfThreads, comm);
-
-        //// write data for visualization of macroscopic quantities
-        SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps));
-        // SPtr<UbScheduler> visSch(new UbScheduler(1, 8700, 8800));
-        // visSch->addSchedule(1, 8700, 8800);
-        SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-        //writeMQSimulationObserver->update(10);
-
-        //SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-        //writeMQSimulationObserver->update(0);
-
-        //int endTime = 20;
-        SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime));
-        simulation->addSimulationObserver(nupsSimulationObserver);
-        //!!!//simulation->addSimulationObserver(lcSimulationObserver);
-        simulation->addSimulationObserver(writeMQSimulationObserver);
-        simulation->addSimulationObserver(rcp);
-
-        if (myid == 0) UBLOG(logINFO, "Simulation-start");
-        simulation->run();
-        if (myid == 0) UBLOG(logINFO, "Simulation-end");
-
-    } catch (std::exception &e) {
-        cerr << e.what() << endl << flush;
-    } catch (std::string &s) {
-        cerr << s << endl;
-    } catch (...) {
-        cerr << "unknown exception" << endl;
-    }
-    return 0;
-}
diff --git a/apps/cpu/TPMSRow/TPMSRow.cpp b/apps/cpu/TPMSRow/TPMSRow.cpp
index dad09b05446befaf507d3789e8dbdd058b26b0bf..d4f5c9df16a2bf8118b46a2862f9190c0bc4544e 100644
--- a/apps/cpu/TPMSRow/TPMSRow.cpp
+++ b/apps/cpu/TPMSRow/TPMSRow.cpp
@@ -18,7 +18,7 @@ void run(string configname)
         string pathname             = config.getValue<string>("pathname");
         int numOfThreads            = config.getValue<int>("numOfThreads");
         vector<int> blocknx         = config.getVector<int>("blocknx");
-        double beginTime            = config.getValue<double>("beginTime");
+        //double beginTime            = config.getValue<double>("beginTime");
         double endTime              = config.getValue<double>("endTime");
         double outTime              = config.getValue<double>("outTime");
         double availMem             = config.getValue<double>("availMem");
@@ -26,15 +26,15 @@ void run(string configname)
         double dx                   = config.getValue<double>("dx");
         double UnitEdgeLength       = config.getValue<double>("UnitEdgeLength");
         double Re                   = config.getValue<double>("Re");
-        double Re0                  = config.getValue<double>("Re0");
+        //double Re0                  = config.getValue<double>("Re0");
         //double rhoIn                = config.getValue<double>("rhoIn");
         //string geometry             = config.getValue<string>("geometry");
         vector<double> length       = config.getVector<double>("length");
         //vector<double> FunnelL      = config.getVector<double>("FunnelL");
         //vector<double> FunnelOrigin = config.getVector<double>("FunnelOrigin");
         
-        double          timeAvStart       = config.getValue<double>("timeAvStart");
-        double          timeAvStop        = config.getValue<double>("timeAvStop");
+        //double          timeAvStart       = config.getValue<double>("timeAvStart");
+        //double          timeAvStop        = config.getValue<double>("timeAvStop");
 
         vector<double> TPMSL        = config.getVector<double>("TPMSL");
         vector<double> TPMSOrigin   = config.getVector<double>("TPMSOrigin");
@@ -86,11 +86,11 @@ void run(string configname)
         //SPtr<BC> funnelNoslipAdapter(new NoSlipBC(1));
 
            // SPtr<BC> xMinApr(new DensityBC(0.0000001));
-         SPtr<BC> xMinApr(new DensityBC());
-        //  SPtr<BC> xMinApr(new VelocityBC(vx, 0., BCFunction::INFCONST, 0., 0., BCFunction::INFCONST,
-         //  0.,0., BCFunction::INFCONST));
+         //SPtr<BC> xMinApr(new DensityBC());
+          SPtr<BC> xMinApr(new VelocityBC(vx, 0., BCFunction::INFCONST, 0., 0., BCFunction::INFCONST,
+           0.,0., BCFunction::INFCONST));
 
-        SPtr<BC> xMaxApr(new DensityBC(0.));
+        SPtr<BC> xMaxApr(new PressureBC(0.));
         //SPtr<BC> yMinApr(new NoSlipBC(1));
         //SPtr<BC> yMaxApr(new NoSlipBC(1));
         SPtr<BC> zMinApr(new NoSlipBC());
@@ -102,35 +102,35 @@ void run(string configname)
          //tpmsNoslipAdapter->setBcAlgorithm(BCStrategyPtr(new NoSlipBCStrategy()));
          //tpmsNoslipAdapter->setBcAlgorithm(SPtr<BCStrategy>(new ThinWallNoSlipBCStrategy()));
 
-        tpmsNoslipAdapter->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+        tpmsNoslipAdapter->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated()));
         //funnelNoslipAdapter->setBcAlgorithm(SPtr<BCStrategy>(new NoSlipBCStrategy()));
 
          //xMinApr->setBcAlgorithm(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
         // xMinApr->setBcAlgorithm(SPtr<BCStrategy>(new VelocityBCStrategy()));
-        xMinApr->setBCStrategy(SPtr<BCStrategy>(new NonReflectingInflowBCStrategy(vx, c1o2))); 
+        xMinApr->setBCStrategy(SPtr<BCStrategy>(new VelocityNonReflecting(c1o2))); 
         // xMinApr->setBcAlgorithm(SPtr<BCStrategy>(new VelocityWithDensityBCStrategy()));
          //xMaxApr->setBcAlgorithm(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
-         xMaxApr->setBCStrategy(SPtr<BCStrategy>(new NonReflectingOutflowWithRelaxationBCStrategy()));
+         xMaxApr->setBCStrategy(SPtr<BCStrategy>(new OutflowNonReflectingWithPressure()));
         //yMinApr->setBcAlgorithm(SPtr<BCStrategy>(new NoSlipBCStrategy()));
         //yMaxApr->setBcAlgorithm(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-         zMinApr->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-         zMaxApr->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+         zMinApr->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated()));
+         zMaxApr->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated()));
 
         //zMinFunnelApr->setBcAlgorithm(SPtr<BCStrategy>(new NoSlipBCStrategy()));
         //zMaxFunnelApr->setBcAlgorithm(SPtr<BCStrategy>(new NoSlipBCStrategy()));
 
-        ////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////234
         // BC visitor
         BoundaryConditionsBlockVisitor bcVisitor;
         // bcVisitor.addBC(cubeNoslipAdapter);
-        bcVisitor.addBC(tpmsNoslipAdapter);
+        //bcVisitor.addBC(tpmsNoslipAdapter);
         //bcVisitor.addBC(funnelNoslipAdapter);
-        bcVisitor.addBC(xMinApr);
-        bcVisitor.addBC(xMaxApr);
+        //bcVisitor.addBC(xMinApr);
+        //bcVisitor.addBC(xMaxApr);
         //bcVisitor.addBC(yMinApr);
         //bcVisitor.addBC(yMaxApr);
-        bcVisitor.addBC(zMinApr);
-        bcVisitor.addBC(zMaxApr);
+        //bcVisitor.addBC(zMinApr);
+        //bcVisitor.addBC(zMaxApr);
         //bcVisitor.addBC(zMinFunnelApr);
         //bcVisitor.addBC(zMaxFunnelApr);
 
@@ -146,18 +146,18 @@ void run(string configname)
         // grid, kernel and BCProcessor
         SPtr<Grid3D> grid(new Grid3D(comm));
         SPtr<LBMKernel> kernel;
-        //kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel());
-         kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel());
+        //kernel = SPtr<LBMKernel>(new InK15CompressibleNavierStokes());
+         kernel = SPtr<LBMKernel>(new K15CompressibleNavierStokes());
         //kernel = SPtr<LBMKernel>(new IncompressibleCumulantWithSpongeLayerLBMKernel());       
         //kernel->setWithSpongeLayer(true);
         //kernel->setSpongeLayer(spongeLayer);
         // kernel = ;
          // kernel = SPtr<LBMKernel>(new CumulantK17LBMKernel());
-        // 		 mu::Parser fctForcingX1;
-        // 		 fctForcingX1.SetExpr("Fx2");
-        // 		 fctForcingX1.DefineConst("Fx2", 5e-4);
-        // 		 kernel->setForcingX1(fctForcingX1);
-        // 		 kernel->setWithForcing(true);
+        //          mu::Parser fctForcingX1;
+        //          fctForcingX1.SetExpr("Fx2");
+        //          fctForcingX1.DefineConst("Fx2", 5e-4);
+        //          kernel->setForcingX1(fctForcingX1);
+        //          kernel->setWithForcing(true);
         //
         // SPtr<ThinWallBCProcessor> bcProc(new ThinWallBCProcessor());
          SPtr<BCSet> bcProc(new BCSet());
@@ -186,10 +186,10 @@ void run(string configname)
                                                               TPMSOrigin[2] + TPMSL[2],
                                                               UnitEdgeLength, dx, 2.5e-4));
 
-            // 	for (int i = 0; i < 12; i++)
-            // 	{
-            // 	  cout << tpms->evaluateImplicitFunction(0.002, 0.002, i/1000., 1.)<<endl;
-            // 	}
+            //     for (int i = 0; i < 12; i++)
+            //     {
+            //       cout << tpms->evaluateImplicitFunction(0.002, 0.002, i/1000., 1.)<<endl;
+            //     }
 
             if (myid == 0)
                 GbSystem3D::writeGeoObject(tpms.get(), pathname + "/geo/tpms", WbWriterVtkXmlBinary::getInstance());
@@ -399,7 +399,7 @@ void run(string configname)
 
             //          if (refineLevel > 0)
             //          {
-            // 			 SetUndefinedNodesBlockVisitor undefNodesVisitor;
+            //              SetUndefinedNodesBlockVisitor undefNodesVisitor;
             //             grid->accept(undefNodesVisitor);
             //          }
 
@@ -447,38 +447,37 @@ void run(string configname)
                 UBLOG(logINFO, "Restart - end");
         }
         // set connectors
-        SPtr<Interpolator> iProcessor(new CompressibleOffsetInterpolator());
+        //SPtr<Interpolator> iProcessor(new CompressibleOffsetInterpolator());
+        SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolator());
         //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu, iProcessor);
         OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
         grid->accept(setConnsVisitor);
 
 
-        SPtr<GbPoint3D> pointOne(new GbPoint3D(-0.00494999997317791,0.008, 0.0099));
-        SPtr<GbPoint3D> pointTwo(new GbPoint3D(0.14994999766349792, 0.008, 0.0099));
+        //SPtr<GbPoint3D> pointOne(new GbPoint3D(-0.00494999997317791,0.008, 0.0099));
+       // SPtr<GbPoint3D> pointTwo(new GbPoint3D(0.14994999766349792, 0.008, 0.0099));
 
-        SPtr<GbLine3D> line(new GbLine3D(pointOne.get(),pointTwo.get()));
-            if (myid == 0)
-                GbSystem3D::writeGeoObject(line.get(), pathname + "/geo/line", WbWriterVtkXmlBinary::getInstance());
-        SPtr<UbScheduler> linSch(new UbScheduler(outTime/20,outTime/2/*,beginTime,endTime*/));
-        SPtr<SimulationObserver> lp(new LineTimeSeriesSimulationObserver(grid, linSch, pathname, line,refineLevel, comm));
+        //SPtr<GbLine3D> line(new GbLine3D(pointOne.get(),pointTwo.get()));
+        //SPtr<UbScheduler> linSch(new UbScheduler(endTime/20,endTime/2/*,beginTime,endTime*/));
+        //SPtr<SimulationObserver> lp(new LineTimeSeriesSimulationObserver(grid, linSch, pathname + "_line",  line,refineLevel, comm));
 
         SPtr<UbScheduler> visSch(new UbScheduler(outTime/*,beginTime,endTime*/));
         SPtr<SimulationObserver> pp(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
         
-        SPtr<UbScheduler> tavSch(new UbScheduler(100, timeAvStart, timeAvStop));
-        SPtr<TimeAveragedValuesSimulationObserver> tav(new TimeAveragedValuesSimulationObserver(grid, pathname, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,
-        TimeAveragedValuesSimulationObserver::Density | TimeAveragedValuesSimulationObserver::Velocity | TimeAveragedValuesSimulationObserver::Fluctuations));
-        tav->setWithGhostLayer(true);        
+        //SPtr<UbScheduler> tavSch(new UbScheduler(100, timeAvStart, timeAvStop));
+        //SPtr<TimeAveragedValuesSimulationObserver> tav(new TimeAveragedValuesSimulationObserver(grid, pathname, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,
+        //TimeAveragedValuesSimulationObserver::Density | TimeAveragedValuesSimulationObserver::Velocity | TimeAveragedValuesSimulationObserver::Fluctuations));
+        //tav->setWithGhostLayer(true);        
         
-        SPtr<UbScheduler> nuSch(new UbScheduler(100, 0, endTime / 2));
-        mu::Parser fnu;
-        fnu.SetExpr("(L*u/T)*(((T-2*t)/Re0)+(2*t/Re))");
-        fnu.DefineConst("Re0", Re0);
-        fnu.DefineConst("Re", Re);
-        fnu.DefineConst("T", endTime);
-        fnu.DefineConst("L", (UnitEdgeLength / dx));
-        fnu.DefineConst("u", vx);
-        SPtr<SimulationObserver> nupr(new DecreaseViscositySimulationObserver(grid, nuSch, &fnu, comm));
+        //SPtr<UbScheduler> nuSch(new UbScheduler(100, 0, endTime / 2));
+        //mu::Parser fnu;
+        //fnu.SetExpr("(L*u/T)*(((T-2*t)/Re0)+(2*t/Re))");
+        //fnu.DefineConst("Re0", Re0);
+        //fnu.DefineConst("Re", Re);
+        //fnu.DefineConst("T", endTime);
+        //fnu.DefineConst("L", (UnitEdgeLength / dx));
+        //fnu.DefineConst("u", vx);
+        //SPtr<SimulationObserver> nupr(new DecreaseViscositySimulationObserver(grid, nuSch, &fnu, comm));
 
         SPtr<UbScheduler> nupsSch(new UbScheduler(100, 100, 100000000));
         SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
@@ -492,7 +491,9 @@ void run(string configname)
         calculator->addSimulationObserver(npr);
         calculator->addSimulationObserver(pp);
         calculator->addSimulationObserver(migSimulationObserver);
-        calculator->addSimulationObserver(tav);
+        //calculator->addSimulationObserver(lp);
+
+        //calculator->addSimulationObserver(tav);
 
         if (myid == 0)
             UBLOG(logINFO, "Simulation-start");
diff --git a/apps/cpu/ViskomatXL/CMakeLists.txt b/apps/cpu/ViskomatXL/CMakeLists.txt
deleted file mode 100644
index 17b147d92b5f09e5379bb9f8594b217388bebab0..0000000000000000000000000000000000000000
--- a/apps/cpu/ViskomatXL/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(viskomat)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES viskomat.cpp )
\ No newline at end of file
diff --git a/apps/cpu/ViskomatXL/viscosity.cfg b/apps/cpu/ViskomatXL/viscosity.cfg
deleted file mode 100644
index bf2822c7b1d6dd42fdcbc513a4e6b39264ab4180..0000000000000000000000000000000000000000
--- a/apps/cpu/ViskomatXL/viscosity.cfg
+++ /dev/null
@@ -1 +0,0 @@
-nuLB = 1.5e-3
\ No newline at end of file
diff --git a/apps/cpu/ViskomatXL/viskomat.cfg b/apps/cpu/ViskomatXL/viskomat.cfg
deleted file mode 100644
index 626948407375ec46c5f4d350416225f4159bb319..0000000000000000000000000000000000000000
--- a/apps/cpu/ViskomatXL/viskomat.cfg
+++ /dev/null
@@ -1,38 +0,0 @@
-outputPath = d:/temp/viskomatXL_restart_test
-geoPath = d:/Projects/TRR277/Project/WP1/Rheometer/Aileen
-#geoPath = d:/Projects/TRR277/Project/WP1/Rheometer
-geoFile = fishboneT.stl
-#geoFile = cylinder.stl
-
-numOfThreads = 1
-availMem = 15e9
-logToFile = false
-
-blocknx = 14 14 14
-#blocknx = 14 15 15
-#blocknx = 35 83 83
-boundingBox = 0 140 -82.5 82.5 -82.5 82.5
-
-#blocknx = 32 12 12
-#boundingBox = 0 32 -12 12 -12 12
-#boundingBox = 0 64 -24 24 -24 24
-#boundingBox = 0 64 -24 24 -24 24
-
-deltax = 1
-
-refineLevel = 0
-
-OmegaLB = 1e-5
-mu = 5 # Pa s
-N = 80 # rpm
-tau0 = 20e-7
-N = 30
-
-newStart = false
-restartStep = 10
-
-cpStart = 10
-cpStep  = 10
-
-outTime = 10000
-endTime = 20
\ No newline at end of file
diff --git a/apps/cpu/ViskomatXL/viskomat.cpp b/apps/cpu/ViskomatXL/viskomat.cpp
deleted file mode 100644
index 72417c70ebd5315716f5362aac4acb938d93a103..0000000000000000000000000000000000000000
--- a/apps/cpu/ViskomatXL/viskomat.cpp
+++ /dev/null
@@ -1,479 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-
-void bflow(string configname)
-{
-    using namespace vf::lbm::dir;
-
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          outputPath = config.getValue<string>("outputPath");
-      string          geoPath = config.getValue<string>("geoPath");
-      string          geoFile = config.getValue<string>("geoFile");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-      vector<real>  boundingBox = config.getVector<real>("boundingBox");
-      real          endTime = config.getValue<real>("endTime");
-      real          outTime = config.getValue<real>("outTime");
-      real          availMem = config.getValue<real>("availMem");
-      int             refineLevel = config.getValue<int>("refineLevel");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      real          restartStep = config.getValue<real>("restartStep");
-      real          deltax = config.getValue<real>("deltax");
-      real          cpStep = config.getValue<real>("cpStep");
-      real          cpStart = config.getValue<real>("cpStart");
-      bool            newStart = config.getValue<bool>("newStart");
-      real          OmegaLB = config.getValue<real>("OmegaLB");
-      real          tau0 = config.getValue<real>("tau0");
-      real          N = config.getValue<real>("N");
-      real          mu = config.getValue<real>("mu");
-
-
-      vf::basics::ConfigurationFile   viscosity;
-
-      std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = outputPath.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      real rhoLB = 0.0;
-
-      //double N  = 70; //rpm
-      real Omega = 2 * UbMath::PI / 60.0 * N; //rad/s
-      //double mu    = 5; //Pa s
-      real R     = 0.165 / 2.0; //m
-      real rho = 2150;// 970; //kg/m^3
-      real Re    = Omega * R * R * rho / mu;
-
-      //double nuLB = OmegaLB * R * 1e3 * R * 1e3 / Re;
-
-      real dx = deltax * 1e-3;
-      real nuLB = OmegaLB * (R / dx)*(R / dx) / Re;
-
-      real Bm = tau0/(mu*Omega);
-      real tau0LB = Bm*nuLB*OmegaLB;
-
-
-      //double dx = 1.0 * 1e-3;
-      //double nuLB = OmegaLB * (R / dx)*(R / dx) / Re;
-
-      //acustic scaling
-      // OmegaLB /= 2.0;
-      // nuLB    *= 2.0;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-      //SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter(1, 1461, 970, 1e3));
-      //UBLOG(logINFO, conv->toString());
-
-      //bounding box
-
-      real g_minX1 = boundingBox[0];
-      real g_maxX1 = boundingBox[1];
-
-      real g_minX2 = boundingBox[2];
-      real g_maxX2 = boundingBox[3];
-      
-      real g_minX3 = boundingBox[4];
-      real g_maxX3 = boundingBox[5];
-
-      SPtr<Rheology> thix = Rheology::getInstance();
-      //thix->setPowerIndex(n);
-      //thix->setViscosityParameter(k);
-      thix->setYieldStress(tau0LB);
-      //thix->setOmegaMin(omegaMin);
-
-      SPtr<BC> noSlipBC(new NoSlipBC());
-      noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyHerschelBulkleyModelNoSlipBCStrategy()));
-      noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelNoSlipBCStrategy()));
-
-      SPtr<BC> slipBC(new SlipBC());
-      slipBC->setBCStrategy(SPtr<BCStrategy>(new SimpleSlipBCStrategy()));
-      //slipBC->setBCStrategy(SPtr<BCStrategy>(new SlipBCStrategy()));
-
-      //// rotation around X-axis
-      mu::Parser fctVy;
-      fctVy.SetExpr("-Omega*(x3-z0-r)/deltax");
-      fctVy.DefineConst("Omega", OmegaLB);
-      fctVy.DefineConst("r", 0.5 * (g_maxX3 - g_minX3));
-      fctVy.DefineConst("z0", g_minX3);
-      fctVy.DefineConst("deltax", deltax);
-
-      mu::Parser fctVz;
-      fctVz.SetExpr("Omega*(x2-y0-r)/deltax");
-      fctVz.DefineConst("Omega", OmegaLB);
-      fctVz.DefineConst("r", 0.5 * (g_maxX2 - g_minX2));
-      fctVz.DefineConst("y0", g_minX2);
-      fctVz.DefineConst("deltax", deltax);
-
-      mu::Parser fctVx;
-      fctVx.SetExpr("0.0");
-
-      // rotation around Y-axis
-      //mu::Parser fctVz;
-      //// fctVx.SetExpr("omega*(r-x2)");
-      //fctVz.SetExpr("Omega*(x1-r)");
-      //fctVz.DefineConst("Omega", OmegaLB);
-      //fctVz.DefineConst("r", 0.5 * (g_maxX1 - g_minX1));
-
-      //mu::Parser fctVx;
-      //fctVx.SetExpr("-Omega*(x3-r)");
-      //fctVx.DefineConst("Omega", OmegaLB);
-      //fctVx.DefineConst("r", 0.5 * (g_maxX1 - g_minX1));
-
-      //mu::Parser fctVy;
-      //fctVy.SetExpr("0.0");
-
-      SPtr<BC> velocityBC(new VelocityBC(true, true, true, fctVx, fctVy, fctVz, 0, BCFunction::INFCONST));
-      //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-      velocityBC->setBCStrategy(SPtr<BCStrategy>(new SimpleVelocityBCStrategy()));
-      //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityWithDensityBCStrategy()));
-      //velocityBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelVelocityBCStrategy()));
-
-      //SPtr<BC> densityBC(new DensityBC());
-      //densityBC->setBCStrategy(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
-      ////densityBC->setBCStrategy(SPtr<BCStrategy>(new NonReflectingOutflowBCStrategy()));
-
-
-      //BS visitor
-      BoundaryConditionsBlockVisitor bcVisitor;
-      //bcVisitor.addBC(noSlipBC);
-      bcVisitor.addBC(slipBC);
-      bcVisitor.addBC(velocityBC);
-      //bcVisitor.addBC(densityBC);
-      
-      SPtr<BCSet> bcProc;
-      bcProc = SPtr<BCSet>(new BCSet());
-
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BGKLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel()); 
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantK17LBMKernel()); 
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel());
-      kernel->setBCSet(bcProc);
-      //kernel->setForcingX1(forcing);
-      //kernel->setWithForcing(true);
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-      grid->setPeriodicX1(false);
-      grid->setPeriodicX2(false);
-      grid->setPeriodicX3(false);
-      grid->setDeltaX(deltax);
-      grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-      SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-      ////////////////////////////////////////////
-      //METIS
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE));
-      ////////////////////////////////////////////
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIOMigrationSimulationObserver> restartSimulationObserver(new MPIIOMigrationSimulationObserver(grid, mSch, metisVisitor, outputPath, comm));
-      //SPtr<MPIIORestartSimulationObserver> restartSimulationObserver(new MPIIORestartSimulationObserver(grid, mSch, outputPath, comm));
-      restartSimulationObserver->setLBMKernel(kernel);
-      restartSimulationObserver->setBCSet(bcProc);
-      //restartSimulationObserver->setNu(k);
-      //////////////////////////////////////////////////////////////////////////
-
-      ////stator
-      // rotation around X-axis 
-       //SPtr<GbObject3D> stator(new GbCylinder3D(g_minX1 - 3.0 * deltax, g_minX2 + 0.5 * (g_maxX2 - g_minX2),
-       //                                         g_minX3 + 0.5 * (g_maxX3 - g_minX3), g_maxX1 + 3.0 * deltax,
-       //    g_minX2 + 0.5 * (g_maxX2 - g_minX2), g_minX3 + 0.5 * (g_maxX3 - g_minX3), 0.5 * (g_maxX3 - g_minX3) * 0.5));
-
-      // SPtr<GbObject3D> stator(new GbCylinder3D(g_minX1 - 4.0 * deltax, g_minX2 + 0.5 * (g_maxX2 - g_minX2),
-      //                                          g_minX3 + 0.5 * (g_maxX3 - g_minX3), g_maxX1 + 3.0 * deltax,
-      //     g_minX2 + 0.5 * (g_maxX2 - g_minX2), g_minX3 + 0.5 * (g_maxX3 - g_minX3), 12.0*0.5));
-
-      ////  // rotation around Y-axis 
-      //// //SPtr<GbObject3D> stator(new GbCylinder3D(g_minX1 + 0.5 * (g_maxX1 - g_minX1), g_minX2 - 3.0 * deltax, 
-      //// //                                         g_minX3 + 0.5 * (g_maxX3 - g_minX3), g_minX1 + 0.5 * (g_maxX1 - g_minX1),
-      //// //                                         g_maxX2 + 3.0 * deltax, g_minX3 + 0.5 * (g_maxX3 - g_minX3),
-      //// //                                         0.5 * (g_maxX3 - g_minX3) * 0.5));
-
-      // SPtr<D3Q27Interactor> statorInt =
-      //    SPtr<D3Q27Interactor>(new D3Q27Interactor(stator, grid, noSlipBC, Interactor3D::SOLID));
-      
-      SPtr<GbTriFaceMesh3D> stator = make_shared<GbTriFaceMesh3D>();
-      stator->readMeshFromSTLFileBinary(geoPath + "/" + geoFile, false);
-      //stator->scale(2.0, 2.0, 2.0);
-      //stator->translate(16.0, 0.0, 0.0);
-      //stator->translate(4.0, -73.0, -6.0);
-
-      SPtr<D3Q27Interactor> statorInt = SPtr<D3Q27TriFaceMeshInteractor>(
-         new D3Q27TriFaceMeshInteractor(stator, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES));
-
-      GbSystem3D::writeGeoObject(stator.get(), outputPath + "/geo/stator", WbWriterVtkXmlBinary::getInstance());
-
-      ////rotor (cylinder)
-      // rotation around X-axis 
-      SPtr<GbObject3D> rotor(new GbCylinder3D(
-          g_minX1 - 3.0 * deltax, g_minX2 + 0.5 * (g_maxX2 - g_minX2),
-                                              g_minX3 + 0.5 * (g_maxX3 - g_minX3), g_maxX1 + 3.0 * deltax,
-          g_minX2 + 0.5 * (g_maxX2 - g_minX2), g_minX3 + 0.5 * (g_maxX3 - g_minX3), 0.5 * (g_maxX3 - g_minX3)));
-      // rotation around Y-axis
-      //SPtr<GbObject3D> rotor(new GbCylinder3D(g_minX1 + 0.5 * (g_maxX1 - g_minX1), g_minX2 - 3.0 * deltax,
-      //                                        g_minX3 + 0.5 * (g_maxX3 - g_minX3), g_minX1 + 0.5 * (g_maxX1 - g_minX1),
-      //                                        g_maxX2 + 3.0 * deltax, g_minX3 + 0.5 * (g_maxX3 - g_minX3),
-      //                                        0.5 * (g_maxX3 - g_minX3)));
-
-      GbSystem3D::writeGeoObject(rotor.get(), outputPath + "/geo/rotor", WbWriterVtkXmlBinary::getInstance());
-
-      SPtr<D3Q27Interactor> rotorInt =
-          SPtr<D3Q27Interactor>(new D3Q27Interactor(rotor, grid, velocityBC, Interactor3D::INVERSESOLID));
-
-      //walls
-      GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - deltax, g_minX2 - deltax, g_minX3 - deltax, g_minX1,
-          g_maxX2 + deltax, g_maxX3 + deltax));
-      if (myid == 0) GbSystem3D::writeGeoObject(wallXmin.get(), outputPath + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - deltax, g_minX3 - deltax, g_maxX1 +  (real)blocknx[0]*deltax,
-          g_maxX2 + deltax, g_maxX3 + deltax));
-      if (myid == 0) GbSystem3D::writeGeoObject(wallXmax.get(), outputPath + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance());
-
-      //wall interactors
-      SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, slipBC, Interactor3D::SOLID));
-      SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, slipBC, Interactor3D::SOLID));
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Parameters:");
-         UBLOG(logINFO, "N = " << N << " rpm");
-         UBLOG(logINFO, "Omega = " << Omega << " rad/s");
-         UBLOG(logINFO, "mu = " << mu << " Pa s");
-         UBLOG(logINFO, "tau0 = " << tau0<< " Pa");
-         UBLOG(logINFO, "rho = " << rho<< " kg/m^3");
-         UBLOG(logINFO, "Re = " << Re);
-         UBLOG(logINFO, "Bm = " << Bm);
-         UBLOG(logINFO, "rhoLB = " << rhoLB);
-         UBLOG(logINFO, "uLB = " << OmegaLB);
-         UBLOG(logINFO, "nuLB = " << nuLB);
-         UBLOG(logINFO, "tau0LB = " << tau0LB);
-         UBLOG(logINFO, "deltax = " << deltax << " mm");
-         UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-         UBLOG(logINFO, "number of threads = " << numOfThreads);
-         UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses());
-         UBLOG(logINFO, "blocknx = " << blocknx[0] << " " << blocknx[1] << " " << blocknx[2]);
-         UBLOG(logINFO, "output path = " << outputPath);
-         UBLOG(logINFO, "Preprozess - start");
-      }
-
-      if (newStart)
-      {
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if (refineLevel > 0)
-         {
-            GbCuboid3DPtr refCube(new GbCuboid3D(-10, -10, -10, 0, 0, 0));
-            if (myid == 0) GbSystem3D::writeGeoObject(refCube.get(), outputPath + "/geo/refCube", WbWriterVtkXmlASCII::getInstance());
-            
-            if (myid == 0) UBLOG(logINFO, "Refinement - start");
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm);
-            //refineHelper.addGbObject(sphere, refineLevel);
-            refineHelper.addGbObject(refCube, refineLevel);
-            refineHelper.refine();
-            if (myid == 0) UBLOG(logINFO, "Refinement - end");
-         }
-
-
-
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(wallXmaxInt);
-         intHelper.addInteractor(statorInt);
-         intHelper.addInteractor(rotorInt);
-         intHelper.addInteractor(wallXminInt);
-         
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->update(0);
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-         unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-         unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl);
-         real needMemAll = real(nodg * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4));
-         real needMem = needMemAll / real(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << nob);
-            UBLOG(logINFO, "Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         //BC
-         intHelper.setBC();
-
-         //initialization of distributions
-         InitDistributionsBlockVisitor initVisitor;
-         grid->accept(initVisitor);
-
-         SPtr<UbScheduler> geoSch(new UbScheduler(1));
-         WriteBoundaryConditionsSimulationObserver ppgeo = WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm);
-         ppgeo.update(0);
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         restartSimulationObserver->restart((int)restartStep);
-         
-         //restartSimulationObserver->readBlocks((int)restartStep);
-         //restartSimulationObserver->readDataSet((int)restartStep);
-         ////restartSimulationObserver->readBoundaryConds((int)restartStep);
-         //grid->setTimeStep((int)restartStep);
-         
-         SetBcBlocksBlockVisitor v2(wallXmaxInt);
-         grid->accept(v2);
-         wallXmaxInt->initInteractor();
-
-         SetBcBlocksBlockVisitor v3(statorInt);
-         grid->accept(v3);
-         statorInt->initInteractor();
-
-         SetBcBlocksBlockVisitor v4(rotorInt);
-         grid->accept(v4);
-         rotorInt->initInteractor();
-
-         SetBcBlocksBlockVisitor v1(wallXminInt);
-         grid->accept(v1);
-         wallXminInt->initInteractor();
-
-         SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath,
-                                                               WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->update(1);
-      }
-      
-      //omp_set_num_threads(numOfThreads);
-
-      //set connectors
-      //InterpolationProcessorPtr iProcessor(new ThixotropyInterpolationProcessor());
-      //static_pointer_cast<ThixotropyInterpolationProcessor>(iProcessor)->setOmegaMin(thix->getOmegaMin());
-      //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-      //grid->accept(setConnsVisitor);
-
-      OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-      grid->accept(setConnsVisitor);
-
-      grid->accept(bcVisitor);
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-      SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
-
-      //write data for visualization of macroscopic quantities
-      SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-      //SPtr<UbScheduler> visSch(new UbScheduler(10,1));
-      SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-      //writeMQSimulationObserver->update(100);
-
-      SPtr<UbScheduler> forceSch(new UbScheduler(100));
-      SPtr<CalculateTorqueSimulationObserver> fp = make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, outputPath + "/torque/TorqueRotor.csv", comm);
-      fp->addInteractor(rotorInt);
-      SPtr<CalculateTorqueSimulationObserver> fp2 = make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, outputPath + "/torque/TorqueStator.csv", comm);
-      fp2->addInteractor(statorInt);
-
-      //SPtr<WriteThixotropyQuantitiesSimulationObserver> writeThixotropicMQSimulationObserver(new WriteThixotropyQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-      SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-      simulation->addSimulationObserver(npr);
-      //simulation->addSimulationObserver(fp);
-      simulation->addSimulationObserver(fp2);
-      //simulation->addSimulationObserver(writeMQSimulationObserver);
-      //simulation->addSimulationObserver(writeThixotropicMQSimulationObserver);
-      simulation->addSimulationObserver(restartSimulationObserver);
-
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      simulation->run();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         //pflowForcing(string(argv[1]));
-         bflow(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/Wing/Bombadil.cfg b/apps/cpu/Wing/Bombadil.cfg
deleted file mode 100644
index 17b15243d313b7ed6d5b8ae1516be90ad1c70ead..0000000000000000000000000000000000000000
--- a/apps/cpu/Wing/Bombadil.cfg
+++ /dev/null
@@ -1,8 +0,0 @@
-machine=Bombadil
-path="d:/temp/wing/"
-geoFile="d:/Data/SFB/grundgeometrie.stl"
-numOfThreads=1
-availMem=15e9
-refineLevel=5
-blocknx=8
-endTime=10
\ No newline at end of file
diff --git a/apps/cpu/Wing/CMakeLists.txt b/apps/cpu/Wing/CMakeLists.txt
deleted file mode 100644
index a507c94a98eede5c4bbc67e71159038f53d5bb80..0000000000000000000000000000000000000000
--- a/apps/cpu/Wing/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(wing)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(wing BINARY)
diff --git a/apps/cpu/Wing/wing.cpp b/apps/cpu/Wing/wing.cpp
deleted file mode 100644
index d7e4cd77057f3edb63432b25e50aecc285734a7e..0000000000000000000000000000000000000000
--- a/apps/cpu/Wing/wing.cpp
+++ /dev/null
@@ -1,414 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <boost/pointer_cast.hpp>
-
-#include "vfluids.h"
-
-using namespace std;
-
-
-void setup(const char *cstr1, const char *cstr2)
-{
-   try
-   {
-      //Sleep(30000);
-
-      ConfigFileReader cf(cstr1);
-      if ( !cf.read() )
-      {
-         std::string exceptionText = "Unable to read configuration file\n";
-         throw exceptionText;
-      }
-
-      //parameters from config file
-      string machine = cf.getValue("machine");
-      string pathname = cf.getValue("path");
-      string geoFile = cf.getValue("geoFile");
-      int numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfThreads"));
-      double availMem = UbSystem::stringTo<double>(cf.getValue("availMem"));
-      int refineLevel = UbSystem::stringTo<int>(cf.getValue("refineLevel"));
-      int blocknx = UbSystem::stringTo<int>(cf.getValue("blocknx"));
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if(machine == "Bombadil") int dumy=0; 
-      else if(machine == "Ludwig" || machine == "HLRN")      
-      {
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown machine");
-
-      GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo"));
-      if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance());
-
-      double dx = (fabs(geo->getX3Maximum()-geo->getX3Minimum())*10e-3)*(double)(1<<refineLevel);
-      dx /= 4.0;
-
-      double blockLength = blocknx*dx;
-
-      double offsetX1 = fabs(geo->getX1Maximum()-geo->getX1Minimum());
-      double h = fabs(geo->getX3Maximum()-geo->getX3Minimum());
-      double offsetX2 = fabs(geo->getX2Maximum()-geo->getX2Minimum())/3.0;
-      double offsetX3 = 3.0*h; //30.0*h;
-
-      double g_minX1 = geo->getX1Minimum()-offsetX1;
-      double g_minX2 = geo->getX2Minimum()+offsetX2;
-      double g_minX3 = geo->getX3Centroid()-offsetX3;
-
-      double g_maxX1 = geo->getX1Maximum()+5.0*offsetX1;
-      double g_maxX2 = g_minX2 + 4.0*blockLength; 
-      double g_maxX3 = geo->getX3Centroid()+offsetX3;
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double Re            = 1e6;
-
-      double rhoLB    = 0.0;
-      double rhoReal  = 1.0;
-      double nueReal  = 0.000015;//0.015;
-
-      double lReal    =  3.0;//<-m     ;//Profile laenge in cm(! cm nicht m !)
-      double uReal    = Re*nueReal/lReal;
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double Ma      = 0.1;//Ma-Real!
-      double csReal  = uReal/Ma;
-      double hLB     = lReal/dx;
-
-      LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB);
-
-      double uLB     = uReal   * unitConverter.getFactorVelocityWToLb();
-      double nueLB   = nueReal * unitConverter.getFactorViscosityWToLb();
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      ////////////////////////////////////////////////////////////////////////
-      //Grid
-      //////////////////////////////////////////////////////////////////////////
-      Grid3DPtr grid(new Grid3D(comm));
-      grid->setDeltaX(dx);
-      grid->setBlockNX(blocknx, blocknx, blocknx);
-      
-      GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      //gridCube->setCenterCoordinates(geo->getX1Centroid(), geo->getX2Centroid(), geo->getX3Centroid());
-      if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-      GenBlocksGridVisitor genBlocks(gridCube);
-      grid->accept(genBlocks);
-
-      grid->setPeriodicX2(true);
-      grid->setPeriodicX3(true);
-
-      double outTime = 1.0;
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      //PostprocessorPtr pp(new D3Q27MacroscopicQuantitiesPostprocessor(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlASCII::getInstance(), conv, comm));
-
-      UbSchedulerPtr rSch(new UbScheduler());
-      rSch->addSchedule(50,50,50);
-      RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::TXT));
-      
-
-      std::string opt;
-
-      if(cstr2!= NULL)
-         opt = std::string(cstr2);
-
-      if/*(cstr== NULL)*/(cstr2!= NULL)
-      {
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-         grid = rp->restart(UbSystem::stringTo<int>(opt));
-         rp->reconnect(grid);
-
-         SetForcingBlockVisitor forcingVisitor(0.0, 0.0, 0.0);
-         grid->accept(forcingVisitor);
-
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-      }
-      else
-{
-      //rp->addPostprocessor(pp);
-      if(myid ==0)
-      {
-         UBLOG(logINFO,"Parameters:");
-         UBLOG(logINFO, "* Re            ="<<Re);
-         UBLOG(logINFO, "* Ma            ="<<Ma);
-         UBLOG(logINFO, "* uReal         ="<<uReal);
-         UBLOG(logINFO, "* nueReal       ="<<nueReal);
-         UBLOG(logINFO, "* nue           ="<<nueLB);
-         UBLOG(logINFO, "* velocity      ="<<uLB);
-         //UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx);
-         //UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx);
-         //UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-         UBLOG(logINFO, "* dx_base       ="<<dx);
-         UBLOG(logINFO, "* dx_refine     ="<<dx/(double)(1<<refineLevel));
-         //UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-         UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx<<"/"<<blocknx<<"/"<<blocknx);
-         //UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-         //UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-         UBLOG(logINFO, "*****************************************");
-         UBLOGML(logINFO, "UnitConverter:"<<unitConverter.toString());
-         UBLOG(logINFO, "*****************************************");    
-         UBLOG(logINFO,"number of levels = " << refineLevel+1 );
-         UBLOG(logINFO,"numOfThreads     = " << numOfThreads );
-         UBLOG(logINFO,"Preprozess - start");
-      }
-
-
-      //inflow
-      GbCuboid3DPtr geoInflow (new GbCuboid3D(g_minX1-4.0*blockLength, g_minX2-4.0*blockLength, g_minX3-4.0*blockLength, g_minX1+2.0*dx, g_maxX2+4.0*blockLength, g_maxX3+4.0*blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-      //outflow
-      GbCuboid3DPtr geoOutflow (new GbCuboid3D(g_maxX1-2.0*dx, g_minX2-4.0*blockLength, g_minX3-4.0*blockLength, g_maxX1+4.0*blockLength, g_maxX2+4.0*blockLength, g_maxX3+4.0*blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-      BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-
-      double scaleFactorX = 1.2;
-      double scaleFactorZ = 1.2;
-      //geo->scale(scaleFactorX, 1.0, scaleFactorZ);
-      if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo2", WbWriterVtkXmlASCII::getInstance());
-
-      int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-      D3Q27BoundaryConditionAdapterPtr noSlipBCAdapter(new D3Q27NoSlipBCAdapter(bbOption));
-
-      Interactor3DPtr geoIntr = D3Q27TriFaceMeshInteractorPtr(new D3Q27TriFaceMeshInteractor(geo, grid, noSlipBCAdapter,Interactor3D::SOLID));
-
-      //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr)->refineBlockGridToLevel(refineLevel, 0.0, 5.0);
-
-      if (refineLevel > 0)
-      {
-         if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-         //RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-         //refineHelper.addGbObject(geo, refineLevel);
-         //refineHelper.refine();
-         RefineAroundGbObjectHelper refineHelper(grid, refineLevel, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr), 0.0, 0.5);
-         refineHelper.refine();
-         if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-      }
-
-      ppblocks->update(0);
-      ppblocks.reset();
-      return;
-
-      //geo->scale(1.0/scaleFactorX, 1.0, 1.0/scaleFactorX);
-      //geo = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo"));
-      if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo3", WbWriterVtkXmlASCII::getInstance());
-
-      MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, true, numOfThreads);
-      grid->accept( metisVisitor );
-
-      SolidBlocksHelper sd(grid, comm);
-
-      mu::Parser fct;
-      fct.SetExpr("U");
-      fct.DefineConst("U", uLB);
-
-      //inflow
-      D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST));
-      velBCAdapter->setSecondaryBcOption(2);
-      D3Q27InteractorPtr inflowIntr  = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-      //outflow
-      D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-      denBCAdapter->setSecondaryBcOption(0);
-      D3Q27InteractorPtr outflowIntr = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-
-      sd.addInteractor(inflowIntr);
-      sd.addInteractor(outflowIntr);
-      sd.addInteractor(geoIntr);
-
-      sd.deleteSolidBlocks();
-
-      grid->accept( metisVisitor );
-
-      sd.setTransBlocks();
-
-      ppblocks->update(0);
-      ppblocks.reset();
-
-      //set connectors
-      D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-      D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-      grid->accept( setConnsVisitor );
-
-      //domain decomposition for threads
-      //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-      //grid->accept(pqPartVisitor);
-
-
-      unsigned long nob = grid->getNumberOfBlocks();
-      int gl = 3;
-      unsigned long nodb = (blocknx) * (blocknx) * (blocknx);
-      unsigned long nod = nob * (blocknx) * (blocknx) * (blocknx);
-      unsigned long nodg = nob * (blocknx+gl) * (blocknx+gl) * (blocknx+gl);
-      double needMemAll  = double(nodg*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-      double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"Number of blocks = " << nob);
-         UBLOG(logINFO,"Number of nodes  = " << nod);
-         int minInitLevel = grid->getCoarsestInitializedLevel();
-         int maxInitLevel = grid->getFinestInitializedLevel();
-         for(int level = minInitLevel; level<=maxInitLevel; level++)
-         {
-            int nobl = grid->getNumberOfBlocks(level);
-            UBLOG(logINFO,"Number of blocks for level " << level <<" = " << nobl);
-            UBLOG(logINFO,"Number of nodes for level " << level <<" = " << nobl*nodb);
-         }
-         UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-         UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-         UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-      }            
-
-      LBMKernel3DPtr kernel;
-      kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx, blocknx, blocknx, LBMKernelETD3Q27CCLB::NORMAL));
-
-      //mu::Parser fctForcingX1;
-      //fctForcingX1.SetExpr("Fx1");
-      //fctForcingX1.DefineConst("Fx1", 9.99685e-7);
-
-      //kernel->setForcingX1(fctForcingX1);
-      //kernel->setWithForcing(true);
-      //
-      BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-      kernel->setBCProcessor(bcProc);
-
-      SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-      grid->accept(kernelVisitor);
-
-      if (refineLevel > 0)
-      {
-         D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-         grid->accept(undefNodesVisitor);
-      }
-
-	  //UbSchedulerPtr geoSch(new UbScheduler(1));
-	  //D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-		 // new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true));
-	  //ppgeo->update(0);
-	  //ppgeo.reset();
-
-	  //return;
-
-      //inflow
-      grid->addAndInitInteractor(inflowIntr);
-
-      //outflow
-      grid->addAndInitInteractor(outflowIntr);
-
-      //geo
-      grid->addAndInitInteractor(geoIntr);
-
-      //initialization of distributions
-      D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB);
-      initVisitor.setVx1(fct);
-      initVisitor.setNu(nueLB);
-      grid->accept(initVisitor);
-
-      //Postrozess
-      //UbSchedulerPtr geoSch(new UbScheduler(1));
-      //D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-      //   new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true));
-      //ppgeo->update(0);
-      //ppgeo.reset();
-
-      {
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         //D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv,  comm, true);
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, true));
-         //grid->addObserver(ppgeo);
-         grid->doPostProcess(0);
-         //grid->notifyObservers(0);
-         //grid->removeObserver(ppgeo);
-      }
-
-      //grid->notifyObservers(0);
-
-      //UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      D3Q27MacroscopicQuantitiesPostprocessorPtr pp(new D3Q27MacroscopicQuantitiesPostprocessor(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlASCII::getInstance(), conv));
-      rp->addPostprocessor(pp);
-
-      if(myid == 0) UBLOG(logINFO,"Preprozess - end"); 
-}
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-     // double outTime = 3.0;
-     // UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      //UbSchedulerPtr stepSch(new UbScheduler());
-      //stepSch->addSchedule(10, 100, 1000);
-      //nodeSch->addSchedule(1000, 1000, 10000);
-      //nodeSch->addSchedule(10000, 10000, 50000);
-      //stepSch->addSchedule(100, 100, 1000);
-
-      //UbSchedulerPtr st(new UbScheduler(100,50,1000));
-      //UbSchedulerPtr rs(new UbScheduler(3));
-      //AverageValuesPostprocessor ap(grid, pathname + "/av/av", WbWriterVtkXmlASCII::getInstance(), stepSch, rs, comm);
-
-      //D3Q27ShearStressPostprocessor shs(grid,pathname + "/shs/shs", WbWriterVtkXmlASCII::getInstance(), stepSch, rs, comm);
-      //shs.addInteractor(boost::dynamic_pointer_cast<D3Q27Interactor>(addWallZminInt));
-
-      //D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      UbSchedulerPtr visSch(new UbScheduler(1));
-      //UbSchedulerPtr visSch(stepSch);
-      double endTime = UbSystem::stringTo<int>(cf.getValue("endTime"));//10001.0;
-
-      //cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl;
-      //cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl;
-      //cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl;
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-int main(int argc, char* argv[])
-{
-
-   if ( argv != NULL )
-   {
-      if (argc > 1)
-      {
-         setup(argv[1], argv[2]);
-      }
-      else
-      {
-         cout << "Configuration file must be set!: " <<  argv[0] << " <config file>" << endl << std::flush;
-      }
-   }
-
-   return 0;
-} 
-
diff --git a/apps/cpu/aperm/CMakeLists.txt b/apps/cpu/aperm/CMakeLists.txt
deleted file mode 100644
index c6362507ee96c1f5712e2fce600e5f44a334e2ed..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(aperm)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake)  
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(aperm BINARY)
diff --git a/apps/cpu/aperm/PA200-250-50_800MPI.cfg b/apps/cpu/aperm/PA200-250-50_800MPI.cfg
deleted file mode 100644
index 9fc6561972b903fbda884e8341c60e8801e1c8c7..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/PA200-250-50_800MPI.cfg
+++ /dev/null
@@ -1,53 +0,0 @@
-pathname = /hpc3lustre/work/koskuche/SFB880/Permeability/anisotropic/PA200-250-50_800MPI
-pathGeo = /hpc3lustre/work/koskuche/SFB880/Materials/anisotropic
-
-numOfThreads = 1
-availMem = 11e9
-logToFile = true
-
-#porous media
-rawFile = true
-sampleFilename = /PA_200-250-50%_gewalzt_1575x1616x1643_32922.raw
-
-#diminsions [voxel]
-pmNX1 = 1575 
-pmNX2 = 1616 
-pmNX3 = 1643
-
-#threshold
-lthreshold = 32922
-uthreshold = 65535
-
-#diminsions [m]
-pmL1 = 15.75e-3
-pmL2 = 16.16e-3
-pmL3 = 16.43e-3
-
-#grid
-blocknx = 32
-nx3 = 10
-deltax = 20e-6
-spongeLayer=false
-
-#physic
-newPressure = false
-dp_LB = 1e-7
-newViscosity = false
-nu_LB = 0.0005
-
-timeSeriesFile = /timeseries/1
-timeSeriesOutTime = 1000
-
-gridPrepare = true
-numOfParts = 800
-
-restartStep = 50000
-restartStepStart=50000
-flowInit = true
-
-endTime = 800000
-outTime = 50000
-
-nupsStep = 1000 1000 10000000
-
-
diff --git a/apps/cpu/aperm/PA80-110+120-150_MPI.cfg b/apps/cpu/aperm/PA80-110+120-150_MPI.cfg
deleted file mode 100644
index 6ba92ac1503650cdc40f56494927791a8a6c51c5..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/PA80-110+120-150_MPI.cfg
+++ /dev/null
@@ -1,50 +0,0 @@
-pathname = /hpc3lustre/work/koskuche/SFB880/Permeability/anisotropic/PA80-110+120-150_MPI
-pathGeo = /hpc3lustre/work/koskuche/SFB880/Materials/anisotropic
-
-numOfThreads = 1
-availMem = 11e9
-logToFile = true
-
-#porous media
-rawFile = false
-#sampleFilename = /PA_80-110+120-150_1824x1735x1603_8656.raw
-sampleFilename = /vtk/PA80-110+120-150_1600x1600x1600_8656.vti
-
-#diminsions [voxel]
-pmNX1 = 1600 
-pmNX2 = 1600 
-pmNX3 = 1600
-
-#threshold
-lthreshold = 8656
-uthreshold = 30294
-
-#diminsions [m]
-pmL1 = 16e-3
-pmL2 = 16e-3
-pmL3 = 16e-3
-
-
-#grid
-blocknx = 32
-nx3 = 10
-deltax = 16e-6
-spongeLayer=false
-
-#physic
-dp_LB = 1e-6
-nu_LB = 0.0005
-
-timeSeriesFile = /timeseries/1
-timeSeriesOutTime = 1000
-
-restartStep = 50000
-restartStepStart=50000
-
-endTime = 800000
-outTime = 50000
-
-nupsStep = 1000 1000 10000000
-
-gridPrepare = false
-numOfParts = 800
diff --git a/apps/cpu/aperm/PA80-110+120-150_dx80.cfg b/apps/cpu/aperm/PA80-110+120-150_dx80.cfg
deleted file mode 100644
index 8e0237077b725ff4adb9ed8e3d4bfeb4352ea697..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/PA80-110+120-150_dx80.cfg
+++ /dev/null
@@ -1,63 +0,0 @@
-pathname = d:/temp/apermPA80-110+120-150
-pathGeo = f:/
-
-numOfThreads = 4
-availMem = 11e9
-logToFile = flse
-
-#porous media
-rawFile = false
-sampleFilename = /PA80-110+120-150_1600x1600x1600_8656.vti
-
-#diminsions [voxel]
-pmNX1 = 1600 
-pmNX2 = 1600 
-pmNX3 = 1600
-
-#threshold
-lthreshold = 8656
-uthreshold = 30294
-
-#diminsions [m]
-pmL1 = 16e-3
-pmL2 = 16e-3
-pmL3 = 16e-3
-
-pmDeltas = true
-
-#deltas [m]
-pmDeltaX1 = 0.01e-3
-pmDeltaX2 = 0.01e-3
-pmDeltaX3 = 0.01e-3
-
-yDir = false
-zDir = false
-
-#grid
-blocknx = 32
-nx3 = 10
-deltax = 80e-6
-spongeLayer=false
-
-#physic
-newPressure = false
-dp_LB = 1e-6
-
-newViscosity = false
-nu_LB = 0.0005
-
-vx1=0
-vx2=0
-vx3=0
-
-timeSeriesFile = /timeseries/1
-timeSeriesOutTime = 1000
-
-restartStep = 50000
-restartStepStart=50000
-
-endTime = 800000
-outTime = 50000
-
-nupsStep = 1000 1000 10000000
-
diff --git a/apps/cpu/aperm/PA80-110-200-250-HLRN.cfg b/apps/cpu/aperm/PA80-110-200-250-HLRN.cfg
deleted file mode 100644
index a6a4511ddf184601ad802453c2eaff88cb630655..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/PA80-110-200-250-HLRN.cfg
+++ /dev/null
@@ -1,70 +0,0 @@
-pathname = /gfs2/work/niikonst/scratch/SFB880/Permeability/anisotropic/PA80-110-200-250-X_test2
-pathGeo = /gfs2/work/niikonst/data/materials
-
-numOfThreads = 12
-availMem = 32e9
-logToFile = true
-
-#porous media
-rawFile = true
-sampleFilename = /PA_80-110+200-250_1368x1368x1368_11461.raw
-
-#diminsions [voxel]
-pmNX1 = 1368 
-pmNX2 = 1368 
-pmNX3 = 1368
-
-#threshold
-lthreshold = 11461
-uthreshold = 65535
-
-#diminsions [m]
-pmL1 = 0.009375
-pmL2 = 0.009375
-pmL3 = 0.009375
-
-pmDeltas = true
-
-#deltas [m]
-pmDeltaX1 = 10e-6
-pmDeltaX2 = 10e-6
-pmDeltaX3 = 10e-6
-
-yDir = false
-zDir = false
-
-#grid
-blocknx = 32
-nx3 = 10
-deltax = 40e-6  #10e-6
-spongeLayer=false
-
-#physic
-newPressure = false
-dp_LB = 1e-6
-newViscosity = false
-nu_LB = 0.0005
-
-vx1=0
-vx2=0
-vx3=0
-
-timeSeriesFile = /timeseries/1
-timeSeriesOutTime = 100
-
-
-newStart    = false
-restartStep = 480000
-
-cpStep      = 960000
-cpStepStart = 960000
-
-outTimeStep = 960000
-outTimeStart = 960000
-
-nupsStep = 1000 1000 10000000
-
-endTime = 960000
-
-
-#restartStepStart = 240000000
diff --git a/apps/cpu/aperm/aperm.cpp b/apps/cpu/aperm/aperm.cpp
deleted file mode 100644
index 44b48bb3cfd4038da8be18bfa1a0328edb7cb570..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/aperm.cpp
+++ /dev/null
@@ -1,574 +0,0 @@
-#include <iostream>
-#include <string>
-#include <VirtualFluids.h>
-
-using namespace std;
-
-void changeDP()
-{
-}
-//////////////////////////////////////////////////////////////////////////
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-      string          pathGeo = config.getString("pathGeo");
-      int             numOfThreads = config.getInt("numOfThreads");
-      string          sampleFilename = config.getString("sampleFilename");
-      int             pmNX1 = config.getInt("pmNX1");
-      int             pmNX2 = config.getInt("pmNX2");
-      int             pmNX3 = config.getInt("pmNX3");
-      double          lthreshold = config.getDouble("lthreshold");
-      double          uthreshold = config.getDouble("uthreshold");
-      double          pmL1 = config.getDouble("pmL1");
-      double          pmL2 = config.getDouble("pmL2");
-      double          pmL3 = config.getDouble("pmL3");
-      int             blocknx = config.getInt("blocknx");
-      //double          nx3 = config.getDouble("nx3");
-      double          dpLB = config.getDouble("dp_LB");
-      double          nu_LB = config.getDouble("nu_LB");
-      string          timeSeriesFile = config.getString("timeSeriesFile");
-      double          restartStep = config.getDouble("restartStep");
-      //double          restartStepStart = config.getDouble("restartStepStart");
-      double          endTime = config.getDouble("endTime");
-      double          outTimeStep = config.getValue<double>("outTimeStep");
-      double          outTimeStart = config.getValue<double>("outTimeStart");
-      double          availMem = config.getDouble("availMem");
-      bool            rawFile = config.getBool("rawFile");
-      double          timeSeriesOutTime = config.getDouble("timeSeriesOutTime");
-      bool            logToFile = config.getBool("logToFile");
-      bool            spongeLayer = config.getBool("spongeLayer");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-      double          deltax = config.getDouble("deltax");
-      bool            newViscosity = config.getBool("newViscosity");
-      bool            newPressure = config.getBool("newPressure");
-      bool            pmDeltas = config.getBool("pmDeltas");
-      double          pmDeltaX1 = config.getDouble("pmDeltaX1");
-      double          pmDeltaX2 = config.getDouble("pmDeltaX2");
-      double          pmDeltaX3 = config.getDouble("pmDeltaX3");
-      double          vx1 = config.getDouble("vx1");
-      double          vx2 = config.getDouble("vx2");
-      double          vx3 = config.getDouble("vx3");
-      bool            yDir = config.getBool("yDir");
-      bool            zDir = config.getBool("zDir");
-      double          cpStep = config.getDouble("cpStep");
-      double          cpStepStart = config.getDouble("cpStepStart");
-      bool            newStart = config.getValue<bool>("newStart");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid==0)
-         {
-            const char* str = pathname.c_str();
-            int status = mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
-         }
-#endif 
-
-         if (myid==0)
-         {
-            stringstream logFilename;
-            logFilename<<pathname+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      if (myid==0) UBLOG(logINFO, "Testcase permeability");
-
-      string machinename = UbSystem::getMachineName();
-      //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename);
-      //UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-      //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-      //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-
-      int blocknx1 = blocknx;
-      int blocknx2 = blocknx;
-      int blocknx3 = blocknx;
-
-      LBMReal rhoLB = 0.0;
-      double rhoLBinflow = dpLB*3.0;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      double coord[6];
-      //double deltax;
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      //SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStepStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      
-      SPtr<UbScheduler> rSch2(new UbScheduler(cpStep, cpStepStart));
-      MPIIORestart11CoProcessor rcp(grid, rSch2, pathname, comm);
-
-      SPtr<LBMKernel> kernel;
-      kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL));
-
-      //SPtr<BCProcessor> bcProc(new BCProcessor());
-      SPtr<BCProcessor> bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor());
-      kernel->setBCProcessor(bcProc);
-
-      rcp.setLBMKernel(kernel);
-      rcp.setBCProcessor(bcProc);
-      rcp.setChunk(1);
-      //////////////////////////////////////////////////////////////////////////
-
-      //BC Adapter
-      //////////////////////////////////////////////////////////////////////////////
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm()));
-      //noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-
-      SPtr<BCAdapter> denBCAdapterInflow(new DensityBCAdapter(rhoLBinflow));
-      denBCAdapterInflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
-
-      SPtr<BCAdapter> denBCAdapterOutflow(new DensityBCAdapter(rhoLB));
-      denBCAdapterOutflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
-      //////////////////////////////////////////////////////////////////////////////////
-      //BS visitor
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-      bcVisitor.addBC(denBCAdapterInflow);
-      bcVisitor.addBC(denBCAdapterOutflow);
-
-      if (newStart)
-      {
-         if (myid==0) UBLOG(logINFO, "new start..");
-         if (myid==0) UBLOG(logINFO, "preprocess start..");
-
-         //UBLOG(logINFO, "new start PID = " << myid << " Hostname: " << machinename);
-         //UBLOG(logINFO, "new start PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-
-         string samplePathname = pathGeo+sampleFilename;
-
-         double deltaVoxelX1 = pmL1/(double)pmNX1;
-         double deltaVoxelX2 = pmL2/(double)pmNX2;
-         double deltaVoxelX3 = pmL3/(double)pmNX3;
-
-         if (pmDeltas)
-         {
-            deltaVoxelX1 = pmDeltaX1;
-            deltaVoxelX2 = pmDeltaX2;
-            deltaVoxelX3 = pmDeltaX3;
-         }
-
-         if (myid==0) UBLOG(logINFO, "read voxel matrix: start");
-         GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         if (rawFile)
-         {
-            sample->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-         }
-         else
-         {
-            sample->readMatrixFromVtiASCIIFile(samplePathname);
-         }
-
-         sample->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-         sample->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-         if (myid==0) UBLOG(logINFO, "read voxel matrix: end");
-
-
-         if (myid==0) UBLOG(logINFO, "rotate voxel matrix: start");
-         if (yDir)
-         {
-            sample->rotate90aroundZ();
-            //sample->rotate90aroundZ();
-            //sample->rotate90aroundZ();
-         }
-         if (zDir)
-         {
-            sample->rotate90aroundY();
-         }
-         if (myid==0) UBLOG(logINFO, "rotate voxel matrix: end");
-
-         if (myid==0) sample->writeToVTKImageDataASCII(pathname+"/geo/sample");
-        
-         ///////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////
-
-         double offset1 = sample->getLengthX1()/10.0;
-         double offset2 = 2.0*offset1;
-         //double offset2 = offset1;
-         //bounding box
-         double g_minX1 = sample->getX1Minimum()-offset1;
-         double g_minX2 = sample->getX2Minimum();
-         double g_minX3 = sample->getX3Minimum();
-
-         double g_maxX1 = sample->getX1Maximum()+offset2;
-         double g_maxX2 = sample->getX2Maximum();
-         double g_maxX3 = sample->getX3Maximum();
-
-         ////////////////////////////////////////////////////////////////////////////
-         //double nx1_temp = floor((g_maxX1-g_minX1)/(deltax*(double)blocknx));
-
-         //deltax = (g_maxX1-g_minX1)/(nx1_temp*(double)blocknx);
-
-         // g_maxX3 -= 0.5* deltax;
-          ////////////////////////////////////////////////////////////////////////////
-
-          ////deltax = (g_maxX3-g_minX3) /(nx3*blocknx3);
-
-         double blockLength = (double)blocknx1*deltax;
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(false);
-         grid->setPeriodicX3(false);
-         grid->setDeltaX(deltax);
-         grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-         SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "rho_LB = "<<rhoLB);
-            UBLOG(logINFO, "nu_LB = "<<nu_LB);
-            UBLOG(logINFO, "dp_LB = "<<dpLB);
-            UBLOG(logINFO, "dx = "<<deltax<<" m");
-            UBLOG(logINFO, "numOfThreads = "<<numOfThreads);
-            UBLOG(logINFO, "path = "<<pathname);
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         //walls
-         GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         WriteBlocksSPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         
-         //PM interactor
-         SPtr<D3Q27Interactor> sampleInt(new D3Q27Interactor(sample, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         //wall interactors
-         SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-
-         SPtr<D3Q27Interactor> inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID));
-
-         //outflow
-         SPtr<D3Q27Interactor> outflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID));
-
-
-         //UBLOG(logINFO, "PID = "<<myid<<" Hostname: "<<machinename);
-         //UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem());
-         //UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed());
-         //UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe());
-
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE));
-         ////////////////////////////////////////////
-         //Zoltan
-         //SPtr<Grid3DVisitor> zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW, 1));
-         //grid->accept(zoltanVisitor);
-
-         /////delete solid blocks
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(addWallYminInt);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.addInteractor(sampleInt);
-         intHelper.selectBlocks();
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nodg = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl);
-         double needMemAll = double(nodg*(27*sizeof(double)+sizeof(int)+sizeof(float)*4));
-         double needMem = needMemAll/double(comm->getNumberOfProcesses());
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Number of blocks = "<<nob);
-            UBLOG(logINFO, "Number of nodes  = "<<nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level<=maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level "<<level<<" = "<<nobl);
-               UBLOG(logINFO, "Number of nodes for level "<<level<<" = "<<nobl*nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = "<<needMemAll<<" bytes");
-            UBLOG(logINFO, "Necessary memory per process = "<<needMem<<" bytes");
-            UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes");
-         }
-
-         //SPtr<LBMKernel> kernel;
-         //kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL));
-
-         ////SPtr<BCProcessor> bcProc(new BCProcessor());
-         //SPtr<BCProcessor> bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         //BC
-         intHelper.setBC();
-
-         //BS visitor
-         grid->accept(bcVisitor);
-
-         //Press*1.6e8+(14.76-coordsX)/3.5*5000
-         //initialization of distributions
-         mu::Parser fct;
-         fct.SetExpr("(x1max-x1)/l*dp*3.0");
-         fct.DefineConst("dp", dpLB);
-         fct.DefineConst("x1max", g_maxX1);
-         fct.DefineConst("l", g_maxX1-g_minX1);
-
-         InitDistributionsBlockVisitor initVisitor(nu_LB, rhoLB);
-         initVisitor.setRho(fct);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         SPtr<UbScheduler> geoSch(new UbScheduler(1));
-         WriteBoundaryConditionsSPtr<CoProcessor> ppgeo(
-            new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-         ppgeo->process(0);
-         ppgeo.reset();
-
-         coord[0] = sample->getX1Minimum();
-         coord[1] = sample->getX2Minimum();
-         coord[2] = sample->getX3Minimum();
-         coord[3] = sample->getX1Maximum();
-         coord[4] = sample->getX2Maximum();
-         coord[5] = sample->getX3Maximum();
-
-         ////////////////////////////////////////////////////////
-         UbFileOutputASCII outf(pathname+"/checkpoints/coord.txt");
-         outf.writeDouble(deltax);
-         outf.writeDouble(coord[0]);
-         outf.writeDouble(coord[1]);
-         outf.writeDouble(coord[2]);
-         outf.writeDouble(coord[3]);
-         outf.writeDouble(coord[4]);
-         outf.writeDouble(coord[5]);
-         outf.writeDouble(g_minX1);
-         outf.writeDouble(g_maxX1);
-         outf.writeDouble(availMem);
-         outf.writeDouble(needMem);
-         ////////////////////////////////////////////////////////
-
-         grid->addInteractor(inflowInt);
-
-         if (myid==0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         ////////////////////////////////////////////////////////
-         UbFileInputASCII inf(pathname+"/checkpoints/coord.txt");
-         deltax = inf.readDouble();
-         coord[0] = inf.readDouble();
-         coord[1] = inf.readDouble();
-         coord[2] = inf.readDouble();
-         coord[3] = inf.readDouble();
-         coord[4] = inf.readDouble();
-         coord[5] = inf.readDouble();
-         double g_minX1 = inf.readDouble();
-         double g_maxX1 = inf.readDouble();
-         double availMem = inf.readDouble();
-         double needMem = inf.readDouble();
-         ////////////////////////////////////////////////////////
-         
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //new nu
-         if (newViscosity)
-         {
-            ViscosityBlockVisitor nuVisitor(nu_LB);
-            grid->accept(nuVisitor);
-         }
-
-         //new dp
-         if (newPressure)
-         {
-            Grid3D::Interactor3DSet interactors = grid->getInteractors();
-            interactors[0]->setGrid3D(grid);
-            dynamicPointerCast<D3Q27Interactor>(interactors[0])->deleteBCAdapter();
-            SPtr<BCAdapter> denBCAdapterFront(new DensityBCAdapter(rhoLBinflow));
-            denBCAdapterFront->setBcAlgorithm(SPtr<BCAlgorithm>(new EqDensityBCAlgorithm()));
-            dynamicPointerCast<D3Q27Interactor>(interactors[0])->addBCAdapter(denBCAdapterFront);
-            interactors[0]->updateInteractor();
-         }
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "rho_LB = "<<rhoLB);
-            UBLOG(logINFO, "nu_LB = "<<nu_LB);
-            UBLOG(logINFO, "dp_LB = "<<dpLB);
-            UBLOG(logINFO, "dx = "<<deltax<<" m");
-         }
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //BS visitor
-         grid->accept(bcVisitor);
-
-         SPtr<UbScheduler> geoSch(new UbScheduler(1));
-         WriteBoundaryConditionsCoProcessor ppgeo = WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm);
-         ppgeo.process(1);
-
-
-         if (myid==0) UBLOG(logINFO, "Restart - end");
-      }
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      //nupsSch->addSchedule(nupsStep[0], nupsStep[1], nupsStep[2]);
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep,outTimeStart));
-
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm);
-
-      deltax = grid->getDeltaX(baseLevel);
-      double dxd2 = deltax/2.0;
-
-      SPtr<IntegrateValuesHelper> ih1(new IntegrateValuesHelper(grid, comm, coord[0]-dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2,
-         coord[0]-dxd2*10.0-2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2));
-
-      //D3Q27SPtr<IntegrateValuesHelper> ih2(new D3Q27IntegrateValuesHelper(grid, comm, coord[3]/2.0, coord[1] - dxd2, coord[2] - dxd2,
-      //   coord[3]/2.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2));
-      SPtr<IntegrateValuesHelper> ih2(new IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]));
-
-      SPtr<IntegrateValuesHelper> ih3(new IntegrateValuesHelper(grid, comm, coord[3]+dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2,
-         coord[3]+dxd2*10.0+2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2));
-
-      //D3Q27SPtr<IntegrateValuesHelper> ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]));
-      if (myid==0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname+"/geo/ih1", WbWriterVtkXmlBinary::getInstance());
-      if (myid==0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname+"/geo/ih2", WbWriterVtkXmlBinary::getInstance());
-      if (myid==0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname+"/geo/ih3", WbWriterVtkXmlBinary::getInstance());
-
-      double factorp = 1; // dp_real / dp_LB;
-      double factorv = 1;// dx / dt;
-      SPtr<UbScheduler> stepMV(new UbScheduler(timeSeriesOutTime));
-
-      TimeseriesCoProcessor tsp1(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm);
-      TimeseriesCoProcessor tsp2(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm);
-      TimeseriesCoProcessor tsp3(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm);
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe());
-      }
-
-      const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::HYBRID));
-      if (myid==0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid==0) UBLOG(logINFO, "Simulation-end");
-      
-      //////MPIIORestart2CoProcessor 
-      //grid->deleteBlockIDs();
-      //RenumberBlockVisitor renumber;
-      //grid->accept(renumber);
-      //SPtr<UbScheduler> iiSch(new UbScheduler(1));
-      //MPIIORestart2CoProcessor rcpInit(grid, iiSch, pathname, comm);
-      //rcpInit.process(300);
-   }
-   catch (exception& e)
-   {
-      cerr<<e.what()<<endl<<flush;
-   }
-   catch (string& s)
-   {
-      cerr<<s<<endl;
-   }
-   catch (...)
-   {
-      cerr<<"unknown exception"<<endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if (argv!=NULL)
-   {
-      if (argv[1]!=NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout<<"Configuration file is missing!"<<endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/aperm/aperm.cpp.old b/apps/cpu/aperm/aperm.cpp.old
deleted file mode 100644
index 3776c454f75d0510a6ec4f033d25f35aa82618d4..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/aperm.cpp.old
+++ /dev/null
@@ -1,573 +0,0 @@
-#include <iostream>
-#include <string>
-#include <VirtualFluids.h>
-
-using namespace std;
-
-void changeDP()
-{
-}
-//////////////////////////////////////////////////////////////////////////
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-      string          pathGeo = config.getString("pathGeo");
-      int             numOfThreads = config.getInt("numOfThreads");
-      string          sampleFilename = config.getString("sampleFilename");
-      int             pmNX1 = config.getInt("pmNX1");
-      int             pmNX2 = config.getInt("pmNX2");
-      int             pmNX3 = config.getInt("pmNX3");
-      double          lthreshold = config.getDouble("lthreshold");
-      double          uthreshold = config.getDouble("uthreshold");
-      double          pmL1 = config.getDouble("pmL1");
-      double          pmL2 = config.getDouble("pmL2");
-      double          pmL3 = config.getDouble("pmL3");
-      int             blocknx = config.getInt("blocknx");
-      double          nx3 = config.getDouble("nx3");
-      double          dp_LB = config.getDouble("dp_LB");
-      double          nu_LB = config.getDouble("nu_LB");
-      string          timeSeriesFile = config.getString("timeSeriesFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          restartStepStart = config.getDouble("restartStepStart");
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      bool            rawFile = config.getBool("rawFile");
-      double          timeSeriesOutTime = config.getDouble("timeSeriesOutTime");
-      bool            logToFile = config.getBool("logToFile");
-      bool            spongeLayer = config.getBool("spongeLayer");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-      int             numOfParts = config.getInt("numOfParts");
-      bool            gridPrepare = config.getBool("gridPrepare");
-      double          deltax = config.getDouble("deltax");
-      bool            flowInit = config.getBool("flowInit");
-      bool            newViscosity = config.getBool("newViscosity");
-      bool            newPressure = config.getBool("newPressure");
-      bool            pmDeltas = config.getBool("pmDeltas");
-      double          pmDeltaX1 = config.getDouble("pmDeltaX1");
-      double          pmDeltaX2 = config.getDouble("pmDeltaX2");
-      double          pmDeltaX3 = config.getDouble("pmDeltaX3");
-      double          vx1 = config.getDouble("vx1");
-      double          vx2 = config.getDouble("vx2");
-      double          vx3 = config.getDouble("vx3");
-      bool            yDir = config.getBool("yDir");
-      bool            zDir = config.getBool("zDir");
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            int status = mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      if (myid == 0) UBLOG(logINFO, "Testcase permeability");
-
-      string machinename = UbSystem::getMachineName();
-      //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename);
-      //UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-      //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-      //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-
-      int blocknx1 = blocknx;
-      int blocknx2 = blocknx;
-      int blocknx3 = blocknx;
-
-      LBMReal rho_LB = 0.0;
-      double rhoLBinflow = dp_LB*3.0;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      double coord[6];
-      //double deltax;
-
-      Grid3DPtr grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(restartStep, restartStepStart));
-      RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (gridPrepare)
-      {
-         if (myid == 0) UBLOG(logINFO, "new start..");
-
-         UBLOG(logINFO, "new start PID = " << myid << " Hostname: " << machinename);
-         UBLOG(logINFO, "new start PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-
-         string samplePathname = pathGeo + sampleFilename;
-
-         double deltaVoxelX1 = pmL1/(double)pmNX1;
-         double deltaVoxelX2 = pmL2/(double)pmNX2;
-         double deltaVoxelX3 = pmL3/(double)pmNX3;
-
-         if (pmDeltas)
-         {
-            deltaVoxelX1 = pmDeltaX1;
-            deltaVoxelX2 = pmDeltaX2;
-            deltaVoxelX3 = pmDeltaX3;
-         }
-
-         GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         if (rawFile)
-         {
-            sample->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-         }
-         else
-         {
-            sample->readMatrixFromVtiASCIIFile(samplePathname);
-         }
-
-         sample->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-         sample->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-
-         if (yDir)
-         {
-            sample->rotate90aroundZ();
-            sample->rotate90aroundZ();
-            sample->rotate90aroundZ();
-         }
-         if (zDir)
-         {
-            sample->rotate90aroundY();
-         }
-
-         if (myid == 0) sample->writeToVTKImageDataASCII(pathname + "/geo/sample");
-
-         ///////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////
-
-         double offset1 = sample->getLengthX1()/10.0;
-         double offset2 = 2.0*offset1;
-         //double offset2 = offset1;
-         //bounding box
-         double g_minX1 = sample->getX1Minimum() - offset1;
-         double g_minX2 = sample->getX2Minimum();
-         double g_minX3 = sample->getX3Minimum();
-
-         double g_maxX1 = sample->getX1Maximum() + offset2;
-         double g_maxX2 = sample->getX2Maximum();
-         double g_maxX3 = sample->getX3Maximum();
-
-         ////////////////////////////////////////////////////////////////////////////
-         double nx1_temp = floor((g_maxX1-g_minX1)/(deltax*(double)blocknx));
-
-         deltax = (g_maxX1-g_minX1)/(nx1_temp*(double)blocknx);
-
-        // g_maxX3 -= 0.5* deltax;
-         ////////////////////////////////////////////////////////////////////////////
-
-         ////deltax = (g_maxX3-g_minX3) /(nx3*blocknx3);
-
-         double blockLength = (double)blocknx1*deltax;
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(false);
-         grid->setPeriodicX3(false);
-         grid->setDeltaX(deltax);
-         grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "rho_LB = " << rho_LB);
-            UBLOG(logINFO, "nu_LB = " << nu_LB);
-            UBLOG(logINFO, "dp_LB = " << dp_LB);
-            UBLOG(logINFO, "dx = " << deltax << " m");
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         //walls
-         GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         //PM interactor
-         BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-         noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new ThinWallNoSlipBCAlgorithm()));
-         D3Q27InteractorPtr sampleInt(new D3Q27Interactor(sample, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         //wall interactors
-         D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         BCAdapterPtr denBCAdapterInflow(new DensityBCAdapter(rhoLBinflow));
-         denBCAdapterInflow->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm()));
-         D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID));
-
-         //outflow
-         BCAdapterPtr denBCAdapterOutflow(new DensityBCAdapter(rho_LB));
-         denBCAdapterOutflow->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm()));
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID));
-
-         
-         UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename);
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-
-
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE));
-         ////////////////////////////////////////////
-         //Zoltan
-         //Grid3DVisitorPtr zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW, 1));
-         //grid->accept(zoltanVisitor);
-
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(addWallYminInt);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.addInteractor(sampleInt);
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         ppblocks->process(0);
-         ppblocks.reset();
-  
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nodg = nob * (blocknx1 + gl) * (blocknx2 + gl) * (blocknx3 + gl);
-         double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << nob);
-            UBLOG(logINFO, "Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernelPtr kernel;
-         if (comm->getNumberOfProcesses()>1 && gridPrepare)
-         {
-            kernel = LBMKernelPtr(new IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL));
-         }
-         else
-         {
-            kernel = LBMKernelPtr(new VoidLBMKernel(blocknx1, blocknx2, blocknx3));
-         }
-
-         //BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         BCProcessorPtr bcProc = BCProcessorPtr(new ThinWallBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         //BC
-         intHelper.setBC();
-
-         if (comm->getNumberOfProcesses()>1 && gridPrepare)
-         {
-            BoundaryConditionBlockVisitor bcVisitor;
-            //bcVisitor.addBC('N', BCAlgorithmPtr(new NoSlipBCAlgorithm()));
-            //bcVisitor.addBC('I', BCAlgorithmPtr(new EqDensityBCAlgorithm()));
-            //bcVisitor.addBC('O', BCAlgorithmPtr(new EqDensityBCAlgorithm()));
-            bcVisitor.addBC(noSlipBCAdapter);
-            bcVisitor.addBC(denBCAdapterInflow);
-            bcVisitor.addBC(denBCAdapterOutflow);
-            grid->accept(bcVisitor);
-
-            //Press*1.6e8+(14.76-coordsX)/3.5*5000
-            //initialization of distributions
-            mu::Parser fct;
-            fct.SetExpr("(x1max-x1)/l*dp*3.0");
-            fct.DefineConst("dp", dp_LB);
-            fct.DefineConst("x1max", g_maxX1);
-            fct.DefineConst("l", g_maxX1-g_minX1);
-
-            InitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB);
-            initVisitor.setRho(fct);
-            grid->accept(initVisitor);
-
-            //Postrozess
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessorPtr ppgeo(
-               new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-            ppgeo->process(0);
-            ppgeo.reset();
-         }
-
-
-         coord[0] = sample->getX1Minimum();
-         coord[1] = sample->getX2Minimum();
-         coord[2] = sample->getX3Minimum();
-         coord[3] = sample->getX1Maximum();
-         coord[4] = sample->getX2Maximum();
-         coord[5] = sample->getX3Maximum();
-
-         ////////////////////////////////////////////////////////
-         UbFileOutputASCII outf(pathname + "/checkpoints/coord.txt");
-         outf.writeDouble(deltax);
-         outf.writeDouble(coord[0]);
-         outf.writeDouble(coord[1]);
-         outf.writeDouble(coord[2]);
-         outf.writeDouble(coord[3]);
-         outf.writeDouble(coord[4]);
-         outf.writeDouble(coord[5]);
-         outf.writeDouble(g_minX1);
-         outf.writeDouble(g_maxX1);
-         outf.writeDouble(availMem);
-         outf.writeDouble(needMem);
-         ////////////////////////////////////////////////////////
-
-         grid->addInteractor(inflowInt);
-
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-
-         if (comm->getNumberOfProcesses() == 1 && gridPrepare)
-         {
-            UBLOG(logINFO, "Prepare grid - start");
-            rp.writeDistributedGrid(grid, numOfParts);
-            UBLOG(logINFO, "Prepare grid - end");
-            return;
-         }
-      }
-      else
-      {
-         ////////////////////////////////////////////////////////
-         UbFileInputASCII inf(pathname+"/checkpoints/coord.txt");
-         deltax   = inf.readDouble();
-         coord[0] = inf.readDouble();
-         coord[1] = inf.readDouble();
-         coord[2] = inf.readDouble();
-         coord[3] = inf.readDouble();
-         coord[4] = inf.readDouble();
-         coord[5] = inf.readDouble();
-         double g_minX1 = inf.readDouble();
-         double g_maxX1 = inf.readDouble();
-         double availMem = inf.readDouble();
-         double needMem = inf.readDouble();
-         ////////////////////////////////////////////////////////
-
-         if (flowInit)
-         {
-            grid->setRank(myid);
-            LBMKernelPtr kernel = LBMKernelPtr(new IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL));
-            BCProcessorPtr bcProc(new BCProcessor());
-            kernel->setBCProcessor(bcProc);
-            SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem, SetKernelBlockVisitor::ChangeKernelWithData);
-            grid->accept(kernelVisitor);
-
-            BoundaryConditionBlockVisitor bcVisitor;
-            grid->accept(bcVisitor);
-            
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessor pp(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm);
-            pp.process(0);
-
-            //Press*1.6e8+(14.76-coordsX)/3.5*5000
-            //initialization of distributions
-            mu::Parser fct;
-            fct.SetExpr("(x1max-x1)/l*dp*3.0");
-            fct.DefineConst("dp", dp_LB);
-            fct.DefineConst("x1max", g_maxX1);
-            fct.DefineConst("l", g_maxX1-g_minX1);
-
-            InitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB);
-            initVisitor.setRho(fct);
-            initVisitor.setVx1(vx1);
-            initVisitor.setVx1(vx2);
-            initVisitor.setVx1(vx3);
-            grid->accept(initVisitor);
-         }
-
-         //new nu
-         if (newViscosity)
-         {
-            ViscosityBlockVisitor nuVisitor(nu_LB);
-            grid->accept(nuVisitor);
-         }
-
-         //new dp
-         if (newPressure)
-         {
-            Grid3D::Interactor3DSet interactors = grid->getInteractors();
-            interactors[0]->setGrid3D(grid);
-            boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->deleteBCAdapter();
-            BCAdapterPtr denBCAdapterFront(new DensityBCAdapter(rhoLBinflow));
-            denBCAdapterFront->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm()));
-            boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->addBCAdapter(denBCAdapterFront);
-            interactors[0]->updateInteractor();
-         }
-
-         if (myid == 0)
-         {
-	         UBLOG(logINFO, "Parameters:");
-	         UBLOG(logINFO, "rho_LB = " << rho_LB);
-	         UBLOG(logINFO, "nu_LB = " << nu_LB);
-	         UBLOG(logINFO, "dp_LB = " << dp_LB);
-	         UBLOG(logINFO, "dx = " << deltax << " m");
-         }
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      //nupsSch->addSchedule(nupsStep[0], nupsStep[1], nupsStep[2]);
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm);
-
-      deltax = grid->getDeltaX(baseLevel);
-      double dxd2 = deltax / 2.0;
-
-      IntegrateValuesHelperPtr ih1(new IntegrateValuesHelper(grid, comm, coord[0] - dxd2*10.0, coord[1] - dxd2, coord[2] - dxd2,
-         coord[0] - dxd2*10.0 - 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2));
-
-      //D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, coord[3]/2.0, coord[1] - dxd2, coord[2] - dxd2,
-      //   coord[3]/2.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2));
-      IntegrateValuesHelperPtr ih2(new IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]));
-
-      IntegrateValuesHelperPtr ih3(new IntegrateValuesHelper(grid, comm, coord[3] + dxd2*10.0, coord[1] - dxd2, coord[2] - dxd2,
-         coord[3] + dxd2*10.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2));
-
-      //D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]));
-      if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance());
-      if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance());
-      if (myid == 0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname + "/geo/ih3", WbWriterVtkXmlBinary::getInstance());
-
-      double factorp = 1; // dp_real / dp_LB;
-      double factorv = 1;// dx / dt;
-      UbSchedulerPtr stepMV(new UbScheduler(timeSeriesOutTime));
-      
-      TimeseriesCoProcessor tsp1(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm);
-      TimeseriesCoProcessor tsp2(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm);
-      TimeseriesCoProcessor tsp3(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm);
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepMV));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if (argv!=NULL)
-   {
-      if (argv[1]!=NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout<<"Configuration file is missing!"<<endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/aperm/aperm.cpp.old2 b/apps/cpu/aperm/aperm.cpp.old2
deleted file mode 100644
index ece4410e92f4ac587391ed0921400c4110cfb921..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/aperm.cpp.old2
+++ /dev/null
@@ -1,543 +0,0 @@
-#include <iostream>
-#include <string>
-#include <VirtualFluids.h>
-
-using namespace std;
-
-void changeDP()
-{
-}
-//////////////////////////////////////////////////////////////////////////
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-      string          pathGeo = config.getString("pathGeo");
-      int             numOfThreads = config.getInt("numOfThreads");
-      string          sampleFilename = config.getString("sampleFilename");
-      int             pmNX1 = config.getInt("pmNX1");
-      int             pmNX2 = config.getInt("pmNX2");
-      int             pmNX3 = config.getInt("pmNX3");
-      double          lthreshold = config.getDouble("lthreshold");
-      double          uthreshold = config.getDouble("uthreshold");
-      double          pmL1 = config.getDouble("pmL1");
-      double          pmL2 = config.getDouble("pmL2");
-      double          pmL3 = config.getDouble("pmL3");
-      int             blocknx = config.getInt("blocknx");
-      double          nx3 = config.getDouble("nx3");
-      double          dp_LB = config.getDouble("dp_LB");
-      double          nu_LB = config.getDouble("nu_LB");
-      string          timeSeriesFile = config.getString("timeSeriesFile");
-      double          restartStep = config.getDouble("restartStep");
-      double          restartStepStart = config.getDouble("restartStepStart");
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      bool            rawFile = config.getBool("rawFile");
-      double          timeSeriesOutTime = config.getDouble("timeSeriesOutTime");
-      bool            logToFile = config.getBool("logToFile");
-      bool            spongeLayer = config.getBool("spongeLayer");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-      double          deltax = config.getDouble("deltax");
-      bool            newViscosity = config.getBool("newViscosity");
-      bool            newPressure = config.getBool("newPressure");
-      bool            pmDeltas = config.getBool("pmDeltas");
-      double          pmDeltaX1 = config.getDouble("pmDeltaX1");
-      double          pmDeltaX2 = config.getDouble("pmDeltaX2");
-      double          pmDeltaX3 = config.getDouble("pmDeltaX3");
-      double          vx1 = config.getDouble("vx1");
-      double          vx2 = config.getDouble("vx2");
-      double          vx3 = config.getDouble("vx3");
-      bool            yDir = config.getBool("yDir");
-      bool            zDir = config.getBool("zDir");
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid==0)
-         {
-            const char* str = pathname.c_str();
-            int status = mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
-         }
-#endif 
-
-         if (myid==0)
-         {
-            stringstream logFilename;
-            logFilename<<pathname+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      if (myid==0) UBLOG(logINFO, "Testcase permeability");
-
-      string machinename = UbSystem::getMachineName();
-      //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename);
-      //UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-      //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-      //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-
-      int blocknx1 = blocknx;
-      int blocknx2 = blocknx;
-      int blocknx3 = blocknx;
-
-      LBMReal rho_LB = 0.0;
-      double rhoLBinflow = dp_LB*3.0;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      double coord[6];
-      //double deltax;
-
-      Grid3DPtr grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(restartStep, restartStepStart));
-      //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      MPIIORestartCoProcessor rcp(grid, rSch, pathname, comm);
-      //////////////////////////////////////////////////////////////////////////
-
-      //BC Adapter
-      //////////////////////////////////////////////////////////////////////////////
-      BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new ThinWallNoSlipBCAlgorithm()));
-      //noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithm()));
-
-      BCAdapterPtr denBCAdapterInflow(new DensityBCAdapter(rhoLBinflow));
-      denBCAdapterInflow->setBcAlgorithm(BCAlgorithmPtr(new NonEqDensityBCAlgorithm()));
-
-      BCAdapterPtr denBCAdapterOutflow(new DensityBCAdapter(rho_LB));
-      denBCAdapterOutflow->setBcAlgorithm(BCAlgorithmPtr(new NonEqDensityBCAlgorithm()));
-      //////////////////////////////////////////////////////////////////////////////////
-      //BS visitor
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-      bcVisitor.addBC(denBCAdapterInflow);
-      bcVisitor.addBC(denBCAdapterOutflow);
-
-      if (grid->getTimeStep() == 0)
-      {
-         if (myid==0) UBLOG(logINFO, "new start..");
-         if (myid==0) UBLOG(logINFO, "preprocess start..");
-
-         //UBLOG(logINFO, "new start PID = " << myid << " Hostname: " << machinename);
-         //UBLOG(logINFO, "new start PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-
-         string samplePathname = pathGeo+sampleFilename;
-
-         double deltaVoxelX1 = pmL1/(double)pmNX1;
-         double deltaVoxelX2 = pmL2/(double)pmNX2;
-         double deltaVoxelX3 = pmL3/(double)pmNX3;
-
-         if (pmDeltas)
-         {
-            deltaVoxelX1 = pmDeltaX1;
-            deltaVoxelX2 = pmDeltaX2;
-            deltaVoxelX3 = pmDeltaX3;
-         }
-
-         if (myid==0) UBLOG(logINFO, "read voxel matrix: start");
-         GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         if (rawFile)
-         {
-            sample->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-         }
-         else
-         {
-            sample->readMatrixFromVtiASCIIFile(samplePathname);
-         }
-
-         sample->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-         sample->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-         if (myid==0) UBLOG(logINFO, "read voxel matrix: end");
-
-
-         if (myid==0) UBLOG(logINFO, "rotate voxel matrix: start");
-         if (yDir)
-         {
-            sample->rotate90aroundZ();
-            //sample->rotate90aroundZ();
-            //sample->rotate90aroundZ();
-         }
-         if (zDir)
-         {
-            sample->rotate90aroundY();
-         }
-         if (myid==0) UBLOG(logINFO, "rotate voxel matrix: end");
-
-         if (myid==0) sample->writeToVTKImageDataASCII(pathname+"/geo/sample");
-        
-         ///////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////
-
-         double offset1 = sample->getLengthX1()/10.0;
-         double offset2 = 2.0*offset1;
-         //double offset2 = offset1;
-         //bounding box
-         double g_minX1 = sample->getX1Minimum()-offset1;
-         double g_minX2 = sample->getX2Minimum();
-         double g_minX3 = sample->getX3Minimum();
-
-         double g_maxX1 = sample->getX1Maximum()+offset2;
-         double g_maxX2 = sample->getX2Maximum();
-         double g_maxX3 = sample->getX3Maximum();
-
-         ////////////////////////////////////////////////////////////////////////////
-         double nx1_temp = floor((g_maxX1-g_minX1)/(deltax*(double)blocknx));
-
-         deltax = (g_maxX1-g_minX1)/(nx1_temp*(double)blocknx);
-
-         // g_maxX3 -= 0.5* deltax;
-          ////////////////////////////////////////////////////////////////////////////
-
-          ////deltax = (g_maxX3-g_minX3) /(nx3*blocknx3);
-
-         double blockLength = (double)blocknx1*deltax;
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(false);
-         grid->setPeriodicX3(false);
-         grid->setDeltaX(deltax);
-         grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "rho_LB = "<<rho_LB);
-            UBLOG(logINFO, "nu_LB = "<<nu_LB);
-            UBLOG(logINFO, "dp_LB = "<<dp_LB);
-            UBLOG(logINFO, "dx = "<<deltax<<" m");
-            UBLOG(logINFO, "numOfThreads = "<<numOfThreads);
-            UBLOG(logINFO, "path = "<<pathname);
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         //walls
-         GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         
-         //PM interactor
-         D3Q27InteractorPtr sampleInt(new D3Q27Interactor(sample, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         //wall interactors
-         D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-
-         D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID));
-
-         //outflow
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID));
-
-
-         //UBLOG(logINFO, "PID = "<<myid<<" Hostname: "<<machinename);
-         //UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem());
-         //UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed());
-         //UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe());
-
-
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE));
-         ////////////////////////////////////////////
-         //Zoltan
-         //Grid3DVisitorPtr zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW, 1));
-         //grid->accept(zoltanVisitor);
-
-         /////delete solid blocks
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(addWallYminInt);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.addInteractor(sampleInt);
-         intHelper.selectBlocks();
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nodg = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl);
-         double needMemAll = double(nodg*(27*sizeof(double)+sizeof(int)+sizeof(float)*4));
-         double needMem = needMemAll/double(comm->getNumberOfProcesses());
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Number of blocks = "<<nob);
-            UBLOG(logINFO, "Number of nodes  = "<<nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level<=maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level "<<level<<" = "<<nobl);
-               UBLOG(logINFO, "Number of nodes for level "<<level<<" = "<<nobl*nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = "<<needMemAll<<" bytes");
-            UBLOG(logINFO, "Necessary memory per process = "<<needMem<<" bytes");
-            UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes");
-         }
-
-         LBMKernelPtr kernel;
-         kernel = LBMKernelPtr(new IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL));
-
-         //BCProcessorPtr bcProc(new BCProcessor());
-         BCProcessorPtr bcProc = BCProcessorPtr(new ThinWallBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         //BC
-         intHelper.setBC();
-
-         //BS visitor
-         grid->accept(bcVisitor);
-
-         //Press*1.6e8+(14.76-coordsX)/3.5*5000
-         //initialization of distributions
-         mu::Parser fct;
-         fct.SetExpr("(x1max-x1)/l*dp*3.0");
-         fct.DefineConst("dp", dp_LB);
-         fct.DefineConst("x1max", g_maxX1);
-         fct.DefineConst("l", g_maxX1-g_minX1);
-
-         InitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB);
-         initVisitor.setRho(fct);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         WriteBoundaryConditionsCoProcessorPtr ppgeo(
-            new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-         ppgeo->process(0);
-         ppgeo.reset();
-
-         coord[0] = sample->getX1Minimum();
-         coord[1] = sample->getX2Minimum();
-         coord[2] = sample->getX3Minimum();
-         coord[3] = sample->getX1Maximum();
-         coord[4] = sample->getX2Maximum();
-         coord[5] = sample->getX3Maximum();
-
-         ////////////////////////////////////////////////////////
-         UbFileOutputASCII outf(pathname+"/checkpoints/coord.txt");
-         outf.writeDouble(deltax);
-         outf.writeDouble(coord[0]);
-         outf.writeDouble(coord[1]);
-         outf.writeDouble(coord[2]);
-         outf.writeDouble(coord[3]);
-         outf.writeDouble(coord[4]);
-         outf.writeDouble(coord[5]);
-         outf.writeDouble(g_minX1);
-         outf.writeDouble(g_maxX1);
-         outf.writeDouble(availMem);
-         outf.writeDouble(needMem);
-         ////////////////////////////////////////////////////////
-
-         grid->addInteractor(inflowInt);
-
-         if (myid==0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         ////////////////////////////////////////////////////////
-         UbFileInputASCII inf(pathname+"/checkpoints/coord.txt");
-         deltax = inf.readDouble();
-         coord[0] = inf.readDouble();
-         coord[1] = inf.readDouble();
-         coord[2] = inf.readDouble();
-         coord[3] = inf.readDouble();
-         coord[4] = inf.readDouble();
-         coord[5] = inf.readDouble();
-         double g_minX1 = inf.readDouble();
-         double g_maxX1 = inf.readDouble();
-         double availMem = inf.readDouble();
-         double needMem = inf.readDouble();
-         ////////////////////////////////////////////////////////
-
-         rcp.restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-         //new nu
-         if (newViscosity)
-         {
-            ViscosityBlockVisitor nuVisitor(nu_LB);
-            grid->accept(nuVisitor);
-         }
-
-         //new dp
-         if (newPressure)
-         {
-            Grid3D::Interactor3DSet interactors = grid->getInteractors();
-            interactors[0]->setGrid3D(grid);
-            boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->deleteBCAdapter();
-            BCAdapterPtr denBCAdapterFront(new DensityBCAdapter(rhoLBinflow));
-            denBCAdapterFront->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm()));
-            boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->addBCAdapter(denBCAdapterFront);
-            interactors[0]->updateInteractor();
-         }
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "rho_LB = "<<rho_LB);
-            UBLOG(logINFO, "nu_LB = "<<nu_LB);
-            UBLOG(logINFO, "dp_LB = "<<dp_LB);
-            UBLOG(logINFO, "dx = "<<deltax<<" m");
-         }
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //BS visitor
-         grid->accept(bcVisitor);
-
-         if (myid==0) UBLOG(logINFO, "Restart - end");
-      }
-
-      UbSchedulerPtr nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm);
-
-      deltax = grid->getDeltaX(baseLevel);
-      double dxd2 = deltax/2.0;
-
-      IntegrateValuesHelperPtr ih1(new IntegrateValuesHelper(grid, comm, coord[0]-dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2,
-         coord[0]-dxd2*10.0-2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2));
-
-      //D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, coord[3]/2.0, coord[1] - dxd2, coord[2] - dxd2,
-      //   coord[3]/2.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2));
-      IntegrateValuesHelperPtr ih2(new IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]));
-
-      IntegrateValuesHelperPtr ih3(new IntegrateValuesHelper(grid, comm, coord[3]+dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2,
-         coord[3]+dxd2*10.0+2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2));
-
-      //D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]));
-      if (myid==0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname+"/geo/ih1", WbWriterVtkXmlBinary::getInstance());
-      if (myid==0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname+"/geo/ih2", WbWriterVtkXmlBinary::getInstance());
-      if (myid==0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname+"/geo/ih3", WbWriterVtkXmlBinary::getInstance());
-
-      double factorp = 1; // dp_real / dp_LB;
-      double factorv = 1;// dx / dt;
-      UbSchedulerPtr stepMV(new UbScheduler(timeSeriesOutTime));
-
-      TimeseriesCoProcessor tsp1(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm);
-      TimeseriesCoProcessor tsp2(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm);
-      TimeseriesCoProcessor tsp3(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm);
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe());
-      }
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch));
-      if (myid==0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid==0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (exception& e)
-   {
-      cerr<<e.what()<<endl<<flush;
-   }
-   catch (string& s)
-   {
-      cerr<<s<<endl;
-   }
-   catch (...)
-   {
-      cerr<<"unknown exception"<<endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if (argv!=NULL)
-   {
-      if (argv[1]!=NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout<<"Configuration file is missing!"<<endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/aperm/configBombadil2.txt b/apps/cpu/aperm/configBombadil2.txt
deleted file mode 100644
index 4e79ff63f0f6d1c6b14333bbd2e9b18ee25cf760..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/configBombadil2.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-pathname = d:/temp/aperm5
-pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/isotrop/PA80-110
-#pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/isotrop/SBP120
-numOfThreads = 4
-availMem = 5e9
-logToFile = false
-
-#poroeses Medium
-rawFile = false
-sampleFilename = /alu_80-110.vti
-#sampleFilename = /SBP120s500_center.vti
-#sampleFilename = /Sinterbronze_SBP120_1358x1376x1572_new.raw
-
-#sampleFilename = /1.raw
-
-#Diminsion in Voxel
-pmNX1 = 200
-pmNX2 = 200
-pmNX3 = 200
-
-#pmNX1 = 500
-#pmNX2 = 500
-#pmNX3 = 500
-
-#pmNX1 = 1358
-#pmNX2 = 1376
-#pmNX3 = 1572
-
-
-#Threshold
-lthreshold = 29041
-uthreshold = 65535
-
-#lthreshold = 38370
-
-#Diminsion in m
-pmL1 = 0.726e-3
-pmL2 = 0.75e-3
-pmL3 = 0.786e-3
-
-pmDeltas = true
-
-#deltas [m]
-pmDeltaX1 = 3.6e-6
-pmDeltaX2 = 3.6e-6
-pmDeltaX3 = 3.6e-6
-
-#pmDeltaX1 = 3.75e-6
-#pmDeltaX2 = 3.75e-6
-#pmDeltaX3 = 3.75e-6
-
-yDir = false
-zDir = false
-
-#grid
-blocknx = 95
-nx3 = 5
-deltax = 10e-6
-spongeLayer=false
-
-#physic
-newPressure = false
-dp_LB = 1e-6
-
-newViscosity = false
-nu_LB = 0.0005
-
-vx1=0
-vx2=0
-vx3=0
-
-timeSeriesFile = /timeseries/1
-timeSeriesOutTime = 100
-
-nupsStep = 10000 10000 10000000
-
-restartStepStart = 240000
-
-newStart    = false
-restartStep = 10
-
-cpStep      = 20
-cpStepStart = 20
-
-outTimeStart = 0
-outTimeStep = 1
-
-endTime = 20
-
-
diff --git a/apps/cpu/aperm/configBombadilSBP120s500.txt b/apps/cpu/aperm/configBombadilSBP120s500.txt
deleted file mode 100644
index 3a07c4d9803771aeba821a26d3de6fc048690e81..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/configBombadilSBP120s500.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-#Simulation parameters for determitatoin of permeability
-#SBP120
-
-pathname = d:/temp/perm
-pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/isotrop/SBP120
-numOfThreads = 4
-availMem = 3e9
-logToFile = false
-
-#porous media
-rawFile = false
-sampleFilename = /SBP120s500_center_closed.vti
-
-#diminsions [voxel]
-pmNX1 = 500
-pmNX2 = 500
-pmNX3 = 500
-
-#threshold
-#lthreshold = 38370
-#uthreshold = 65535
-lthreshold = 1
-uthreshold = 1
-
-
-#diminsions [m]
-pmL1 = 1.87e-3
-pmL2 = 1.87e-3
-pmL3 = 1.87e-3
-
-#grid
-#blocknx = 30
-#nx3 = 5
-blocknx = 50
-nx3 = 10
-spongeLayer=false
-
-#physic
-dp_LB = 1e-7
-nu_LB = 0.01
-
-timeSeriesFile = /timeseries/simSBP120_1
-timeSeriesOutTime = 10
-
-restartStep = 200
-restartStepStart=200
-
-endTime = 60000
-outTime = 100
diff --git a/apps/cpu/aperm/config_HLRS_SBP120.cfg b/apps/cpu/aperm/config_HLRS_SBP120.cfg
deleted file mode 100644
index 720302622a33d7cb8119e66c82a0992383da511e..0000000000000000000000000000000000000000
--- a/apps/cpu/aperm/config_HLRS_SBP120.cfg
+++ /dev/null
@@ -1,43 +0,0 @@
-#HLRS
-#Simulation parameters for determitatoin of permeability
-#SBP120
-
-pathname = /univ_1/ws1/ws/xrmkuchr-perm-0/SBP120
-pathGeo = /univ_1/ws1/ws/xrmkuchr-perm-0/SBP120/Data
-numOfThreads = 24
-availMem = 128e9
-logToFile = true
-#porous media
-rawFile = false
-sampleFilename = /Sinterbronze_SBP120_1358x1376x1572.raw
-
-#diminsions [voxel]
-pmNX1 = 1358
-pmNX2 = 1376
-pmNX3 = 1572
-
-#threshold
-lthreshold = 38370
-uthreshold = 65535
-
-#diminsions [m]
-pmL1 = 5092499.73e-9
-pmL2 = 5159999.85e-9
-pmL3 = 5894999.98e-9
-
-#grid
-blocknx = 64
-nx3 = 22
-
-#physic
-dp_LB = 1e-7
-nu_LB = 0.01
-
-timeSeriesFile = /timeseries/simSBP120_1
-timeSeriesOutTime = 100
-
-restartStep = 1000
-restartStepStart=1000
-
-endTime = 2000
-outTime = 1000
diff --git a/apps/cpu/bChannelA/CMakeLists.txt b/apps/cpu/bChannelA/CMakeLists.txt
deleted file mode 100644
index 51f2c4be524155746529538ee10d9511c3dcbdc7..0000000000000000000000000000000000000000
--- a/apps/cpu/bChannelA/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(bchannel)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(bchannel BINARY)
diff --git a/apps/cpu/bChannelA/bChannelA.cpp b/apps/cpu/bChannelA/bChannelA.cpp
deleted file mode 100644
index a59d829c35e6d1211d206439803c732f832831b2..0000000000000000000000000000000000000000
--- a/apps/cpu/bChannelA/bChannelA.cpp
+++ /dev/null
@@ -1,527 +0,0 @@
-#include <iostream>
-#include <string>
-#include "VirtualFluids.h"
-
-using namespace std;
-
-void generateCubes(double top_porosity, double bottom_porosity, std::array<double,3> dimensions, std::array<double,3> cubes_in_direction, string pathOut, SPtr<Grid3D> grid, SPtr<BCAdapter> noSlipBCAdapter)
-{
-   double x = dimensions[0];
-   double y = dimensions[1];
-   double z = dimensions[2];
-   double num_x_cubes = cubes_in_direction[0];
-   double num_y_cubes = cubes_in_direction[1];
-   double num_z_cubes = cubes_in_direction[2];
-
-   double H = z / 2.;
-
-   double outer_cube_side_length = 20;
-   double inner_cube_side_length = 10;
-
-   double dx = (x - outer_cube_side_length) / (num_x_cubes - 1);
-   double dy = (y - outer_cube_side_length) / (num_y_cubes - 1);
-   double dz = 20; //(z - outer_cube_side_length) / (num_z_cubes - 1);
-
-   double porosity_step_z = (top_porosity - bottom_porosity) / (num_z_cubes - 1);
-   double porosity = float(bottom_porosity);
-   double cube_side_length = pow(1.-porosity, 1. / 3) * outer_cube_side_length;
-   double initial_x = 0. + outer_cube_side_length / 2.;
-   double initial_y = 0. + outer_cube_side_length / 2.;
-   double initial_z = 0. + outer_cube_side_length / 2.;
-
-   double current_z = initial_z;
-   
-   double cube_side_length_temp = 0; 
-
-   SPtr<GbObject3D> cube(new GbCuboid3D(0, 0, 0, inner_cube_side_length, inner_cube_side_length, inner_cube_side_length));
-   double scaleFactor = cube_side_length / inner_cube_side_length;
-   cube->scale(scaleFactor, scaleFactor, scaleFactor);
-
-   std::vector< SPtr<Interactor3D> > interactors;
-
-   SPtr<D3Q27Interactor> cubeInt(new D3Q27Interactor(cube, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-   int num = 0;
-   for(int k = 0; k < num_z_cubes; k++)
-   {
-      double current_y = initial_y;
-      for(int j = 0; j < num_y_cubes; j++)
-      {
-         double current_x = initial_x;
-         for(int i = 0; i < num_x_cubes; i++)
-         {
-            cube->setCenterCoordinates(current_x, current_y, current_z);
-            //GbSystem3D::writeGeoObject(cube.get(), pathOut + "/cubes/cube"+ UbSystem::toString(num), WbWriterVtkXmlBinary::getInstance());
-            std::vector< std::shared_ptr<Block3D> > blockVector;
-            UbTupleInt3 blockNX=grid->getBlockNX();
-            SPtr<GbObject3D> geoObject(cubeInt->getGbObject3D());
-            double ext = 0.0;
-            std::array<double, 6> AABB ={ geoObject->getX1Minimum(),geoObject->getX2Minimum(),geoObject->getX3Minimum(),geoObject->getX1Maximum(),geoObject->getX2Maximum(),geoObject->getX3Maximum() };
-            grid->getBlocksByCuboid(AABB[0]-(double)val<1>(blockNX)*ext, AABB[1]-(double)val<2>(blockNX)*ext, AABB[2]-(double)val<3>(blockNX)*ext, AABB[3]+(double)val<1>(blockNX)*ext, AABB[4]+(double)val<2>(blockNX)*ext, AABB[5]+(double)val<3>(blockNX)*ext, blockVector);
-            cubeInt->getBcNodeIndicesMap();
-            dynamic_pointer_cast<Interactor3D>(cubeInt)->removeBcBlocks();
-            for (std::shared_ptr<Block3D> block : blockVector)
-            {
-               if (block->getKernel())
-               {
-                  cubeInt->setBCBlock(block);
-               }
-            }
-            cubeInt->initInteractor();
-            num ++;
-            current_x += dx;
-         }
-         current_y += dy;
-      }
-      current_z += dz;
-      porosity += porosity_step_z;
-      cube_side_length_temp = cube_side_length;
-      cube_side_length = pow(1.-porosity, 1. / 3) * outer_cube_side_length;
-      scaleFactor = cube_side_length / cube_side_length_temp;
-      cube->scale(scaleFactor, scaleFactor, scaleFactor);
-   }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathOut           = config.getValue<string>("pathOut");
-      string          pathGeo           = config.getValue<string>("pathGeo");
-      int             numOfThreads      = config.getValue<int>("numOfThreads");
-      vector<int>     blocknx           = config.getVector<int>("blocknx");
-      double          u_LB              = config.getValue<double>("u_LB");
-      double          restartStep       = config.getValue<double>("restartStep");
-      double          cpStep            = config.getValue<double>("cpStep");
-      double          cpStart           = config.getValue<double>("cpStart");
-      double          endTime           = config.getValue<double>("endTime");
-      double          outTime           = config.getValue<double>("outTime");
-      double          availMem          = config.getValue<double>("availMem");
-      bool            logToFile         = config.getValue<bool>("logToFile");
-      double          deltaXfine        = config.getValue<double>("deltaXfine");
-      int             refineLevel       = config.getValue<int>("refineLevel");
-      double          Re                = config.getValue<double>("Re");
-      double          timeAvStart       = config.getValue<double>("timeAvStart");
-      double          timeAvStop        = config.getValue<double>("timeAvStop");
-      bool            newStart          = config.getValue<bool>("newStart");
-      vector<double>  nupsStep          = config.getVector<double>("nupsStep");
-      vector<double>  boundingBox       = config.getVector<double>("boundingBox");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathOut.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathOut + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      if (myid == 0) UBLOG(logINFO, "Testcase porous channel");
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-      double deltaXcoarse = deltaXfine*(double)(1<<refineLevel);
-
-      LBMReal rho_LB = 0.0;
-      double rhoReal = 1.2041; //(kg/m3)
-      double uReal = 48; //m/s
-      double lReal = 0.008/2.0;//m
-      double hLB = lReal / deltaXcoarse;
-      double Ma = 0.13;//Ma-Real!
-      double csReal = uReal / Ma;
-      LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB);
-      if (myid==0) UBLOG(logINFO, unitConverter.toString());
-
-      //double coord[6];
-
-      vector<double> origin(3);
-      origin[0] = 0;
-      origin[1] = 0;
-      origin[2] = 0;
-
-      //real velocity is 49.63 m/s
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      //BC adapters
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-
-      SPtr<BCProcessor> bcProc;
-      bcProc = SPtr<BCProcessor>(new BCProcessor());
-
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel());
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      
-      mu::Parser fctForcingX1;
-      fctForcingX1.SetExpr("Fx1");
-      fctForcingX1.DefineConst("Fx1", 1.0e-6);
-      kernel->setWithForcing(true);
-      
-      kernel->setBCProcessor(bcProc);
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIORestartCoProcessor> restartCoProcessor(new MPIIORestartCoProcessor(grid, rSch, pathOut, comm));
-      restartCoProcessor->setLBMKernel(kernel);
-      restartCoProcessor->setBCProcessor(bcProc);
-
-      SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathOut+"/mig", comm));
-      migCoProcessor->setLBMKernel(kernel);
-      migCoProcessor->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-
-      //bounding box
-      double g_minX1 = boundingBox[0];
-      double g_minX2 = boundingBox[1];
-      double g_minX3 = boundingBox[2];
-
-      double g_maxX1 = boundingBox[3];
-      double g_maxX2 = boundingBox[4];
-      double g_maxX3 = boundingBox[5];
-
-      double blockLength = (double)blocknx[0]*deltaXcoarse;
-
-      double channel_hight = (g_maxX3-g_minX3)/2.0;
-      double channel_hight_LB = channel_hight/deltaXcoarse;
-      double d_p = channel_hight/20.0;
-      //////////////////////////////////////////////////////////////////////////
-      double nu_LB = (u_LB*channel_hight_LB)/Re;
-      //////////////////////////////////////////////////////////////////////////
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Parameters:");
-         UBLOG(logINFO, "Re                  = " << Re);
-         UBLOG(logINFO, "u_LB                = " << u_LB);
-         UBLOG(logINFO, "rho_LB              = " << rho_LB);
-         UBLOG(logINFO, "nu_LB               = " << nu_LB);
-         UBLOG(logINFO, "dx coarse           = " << deltaXcoarse);
-         UBLOG(logINFO, "dx fine             = " << deltaXfine);
-         UBLOG(logINFO, "channel_high        = " << channel_hight);
-         UBLOG(logINFO, "channel_high_LB     = " << channel_hight_LB);
-         UBLOG(logINFO, "number of levels    = " << refineLevel + 1);
-         UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses());
-         UBLOG(logINFO, "number of threads   = " << numOfThreads);
-         UBLOG(logINFO, "path = " << pathOut);
-         UBLOG(logINFO, "Preprocess - start");
-      }
-
-
-      if (newStart)
-      {
-         if (myid == 0) UBLOG(logINFO, "new start...");
-
-         
-
-         grid->setPeriodicX1(true);
-         grid->setPeriodicX2(true);
-         grid->setPeriodicX3(false);
-         grid->setDeltaX(deltaXcoarse);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-         SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-         //////////////////////////////////////////////////////////////////////////
-         //refinement
-         double blockLengthX3Fine = grid->getDeltaX(refineLevel) * blocknx[2];
-         double refHight = 0.002;
-
-         GbCuboid3DPtr refineBoxTop(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3-refHight, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxTop.get(), pathOut + "/geo/refineBoxTop", WbWriterVtkXmlASCII::getInstance());
-
-         //GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+offsetMinX3+blockLengthX3Fine));
-         GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+refHight));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxBottom.get(), pathOut + "/geo/refineBoxBottom", WbWriterVtkXmlASCII::getInstance());
-
-         if (refineLevel > 0)
-         {
-            if (myid == 0) UBLOG(logINFO, "Refinement - start");
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm);
-            refineHelper.addGbObject(refineBoxTop, refineLevel);
-            refineHelper.addGbObject(refineBoxBottom, refineLevel);
-            refineHelper.refine();
-            if (myid == 0) UBLOG(logINFO, "Refinement - end");
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-         //walls
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-
-         //wall interactors
-         SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE));
-         
-         //DEBUG METIS 
-         //////////////////////////////////////////////////////////////////////////
-         
-         //SimpleGeometricPartitioner sgp;
-         //UbTupleInt3 dim = sgp.createDimensions(30, 20, 20, 20);
-
-
-         //dynamic_pointer_cast<MetisPartitioningGridVisitor>(metisVisitor)->setNumberOfProcesses(1500);
-         //grid->accept(metisVisitor);
-
-         //SPtr<Grid3DVisitor> zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW));
-         //grid->accept(zoltanVisitor);
-
-         //WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-         //ppblocks.process(0);
-         //return;
-         //////////////////////////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         {
-            WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppblocks.process(0);
-         }
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         //////////////////////////////////
-         //undef nodes for refinement
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         //BC
-         intHelper.setBC();
-
-         double bottom_porosity = 0.875;
-         double top_porosity = 1 - (1 - bottom_porosity) / 9;
-         generateCubes(top_porosity, bottom_porosity, std::array<double, 3>{600., 400., 400.}, std::array<double, 3>{30., 20., 9.}, pathOut, grid, noSlipBCAdapter);
-
-         grid->accept(bcVisitor);
-
-         mu::Parser inflowProfileVx1, inflowProfileVx2, inflowProfileVx3, inflowProfileRho;
-         inflowProfileVx1.SetExpr("x3 < h ? 0.0 : uLB-1e-5*(x1+x2+x3)");
-         inflowProfileVx1.DefineConst("uLB", u_LB);
-         inflowProfileVx1.DefineConst("h", channel_hight-d_p);
-
-         InitDistributionsBlockVisitor initVisitor;
-         initVisitor.setVx1(inflowProfileVx1);
-         //initVisitor.setVx1(u_LB);
-         //initVisitor.setVx2(u_LB);
-         //initVisitor.setVx3(u_LB);
-
-         //initVisitor.setVx1(inflowProfileVx1);
-         initVisitor.setVx1(0);
-
-         grid->accept(initVisitor);
-
-         ////set connectors
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //Postrozess
-         {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppgeo.process(0);
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         restartCoProcessor->restart((int)restartStep);
-         //migCoProcessor->restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-         ////////////////////////////////////////////////////////////////////////////
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         grid->accept(bcVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-     
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      std::shared_ptr<NUPSCounterCoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm));
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTime));
-
-      SPtr<WriteMacroscopicQuantitiesCoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-      writeMQCoProcessor->process(0);
-
-      SPtr<GbObject3D> bbBox(new GbCuboid3D(g_minX1-blockLength, (g_maxX2-g_minX2)/2.0, g_minX3-blockLength, g_maxX1+blockLength, (g_maxX2-g_minX2)/2.0+deltaXcoarse, g_maxX3+blockLength));
-      if (myid==0) GbSystem3D::writeGeoObject(bbBox.get(), pathOut+"/geo/bbBox", WbWriterVtkXmlASCII::getInstance());
-      SPtr<WriteMQFromSelectionCoProcessor> writeMQSelectCoProcessor(new WriteMQFromSelectionCoProcessor(grid, stepSch, bbBox, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-
-      SPtr<UbScheduler> AdjForcSch(new UbScheduler());
-      AdjForcSch->addSchedule(10, 0, 10000000);
-      SPtr<IntegrateValuesHelper> intValHelp(new IntegrateValuesHelper(grid, comm, g_minX1, g_minX2, channel_hight, g_maxX1, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(intValHelp->getBoundingBox().get(), pathOut + "/geo/IntValHelp", WbWriterVtkXmlBinary::getInstance());
-
-      double vxTarget=u_LB;
-      SPtr<AdjustForcingCoProcessor> AdjForcCoProcessor(new AdjustForcingCoProcessor(grid, AdjForcSch, pathOut, intValHelp, vxTarget, comm));
-
-
-      std::vector<double> levelCoords;
-      std::vector<int> levels;
-      std::vector<double> bounds;
-
-      bounds.push_back(g_minX1);
-      bounds.push_back(g_minX2);
-      bounds.push_back(g_minX3);
-      bounds.push_back(g_maxX1);
-      bounds.push_back(g_maxX2);
-      bounds.push_back(g_maxX3);
-      levels.push_back(0);
-      levelCoords.push_back(g_minX3);
-      levelCoords.push_back(g_maxX3);
-      SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop));
-      SPtr<CoProcessor> timeAveragingCoProcessor(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,TimeAveragedValuesCoProcessor::Density |  TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations | TimeAveragedValuesCoProcessor::Triplecorrelations, levels, levelCoords, bounds));
-      
-      
-      //create line time series
-      //SPtr<UbScheduler> tpcSch(new UbScheduler(1,1,3));
-      //GbPoint3DPtr p1(new GbPoint3D(0.0,0.005,0.01));
-      //GbPoint3DPtr p2(new GbPoint3D(0.064,0.005,0.01));
-      //SPtr<GbLine3D> line(new GbLine3D(p1.get(),p2.get()));
-      //SPtr<GbLine3D> line(new GbLine3D(new GbPoint3D(0.0,0.005,0.01),new GbPoint3D(0.064,0.005,0.01)));
-      //LineTimeSeriesCoProcessor lineTs(grid, tpcSch,pathOut+"/TimeSeries/line1.csv",line, 0,comm);
-      //if (myid==0) lineTs.writeLine(pathOut+"/geo/line1");
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      omp_set_num_threads(numOfThreads);
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-      SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, (int)endTime));
-      calculator->addCoProcessor(nupsCoProcessor);
-      calculator->addCoProcessor(AdjForcCoProcessor);
-      calculator->addCoProcessor(migCoProcessor);
-      //calculator->addCoProcessor(restartCoProcessor);
-      calculator->addCoProcessor(writeMQSelectCoProcessor);
-      calculator->addCoProcessor(writeMQCoProcessor);
-      calculator->addCoProcessor(timeAveragingCoProcessor);
-
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculator->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (mu::Parser::exception_type &e)
-   {
-      std::cout << e.GetMsg() << std::endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   //Sleep(30000);
-
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/bChannelA/configBombadilpChannel.cfg b/apps/cpu/bChannelA/configBombadilpChannel.cfg
deleted file mode 100644
index 123ee12a91c9d7ed7d899ad549b961753b65cc1b..0000000000000000000000000000000000000000
--- a/apps/cpu/bChannelA/configBombadilpChannel.cfg
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-#Simulation parameters for porous channel
-#
-
-pathOut = e:/temp/BreugemChannelAnisotrop
-pathGeo = g:/pChannelBA/cubes
-numOfThreads = 1
-availMem = 14e9
-logToFile = false
-
-
-#grid
-boundingBox = 0 0 0 60 40 40
-#boundingBox = 1 1 1 4 4 4
-refineLevel = 0
-deltaXfine  = 1
-#deltaXfine  = 1
-blocknx = 20 20 20
-#blocknx = 4 4 4
-u_LB = 0.1
-Re = 5500
-#Re = 1
-
-newStart = true
-restartStep = 2000
-cpStep = 10000
-cpStart = 10000
-
-timeAvStart = 0
-timeAvStop = 200000
-
-nupsStep = 1000 1000 10000000 
-outTime = 100
-endTime = 500
-
- 
-
-
diff --git a/apps/cpu/bChannelVA/Averaging.cpp b/apps/cpu/bChannelVA/Averaging.cpp
deleted file mode 100644
index d7604b4b087c55f15b01f2bd486f7665efc1271b..0000000000000000000000000000000000000000
--- a/apps/cpu/bChannelVA/Averaging.cpp
+++ /dev/null
@@ -1,2340 +0,0 @@
-#include "Averaging.h"
-#include "UbLogger.h"
-#include "MemoryUtil.h"
-#include "UbSystem.h"
-
-#include "ReadDataSet.h"
-
-//#include "Postprocessing.h"
-#include <vtkSmartPointer.h>
-#include <vtkDataSet.h>
-#include <vtkPlane.h>
-#include <vtkCutter.h>
-#include <vtkDataArray.h>
-#include <vtkUnstructuredGrid.h>
-#include <vtkPointData.h>
-
-#include <vtkProbeFilter.h>
-#include <vtkImageData.h>
-#include <vtkXMLImageDataWriter.h>
-#include <vtkMultiBlockDataSet.h>
-#include <vtkThreshold.h>
-#include <vtkCellArray.h>
-#include <vtkCellData.h>
-#include <vtkDoubleArray.h>
-#include <vtkXMLUnstructuredGridWriter.h>
-#include <vtkFileOutputWindow.h>
-#include <vtkXMLPUnstructuredGridReader.h>
-
-#include <omp.h>
-#include <mpi.h>
-
-using namespace std;
-void Averaging::createGeoMatrix(std::string dataNameG)
-{
-   UBLOG(logINFO, "createGeoMatrix:start");
-
-   vtkSmartPointer<vtkTimerLog> timer = vtkSmartPointer<vtkTimerLog>::New();
-   vtkSmartPointer<vtkTimerLog> level_grid_timer = vtkSmartPointer<vtkTimerLog>::New();
-   vtkSmartPointer<vtkTimerLog> level_interp_timer = vtkSmartPointer<vtkTimerLog>::New();
-   vtkSmartPointer<vtkTimerLog> timer_total = vtkSmartPointer<vtkTimerLog>::New();
-
-   timer_total->StartTimer();
-
-   UBLOG(logINFO, "read data set from " << dataNameG << ": start");
-   timer->StartTimer();
-
-   vtkXMLPUnstructuredGridReader* reader = vtkXMLPUnstructuredGridReader::New();
-   reader->SetFileName(dataNameG.c_str());
-   reader->Update();
-
-   UBLOG(logINFO, "read data set from " + dataNameG + ": end");
-   timer->StopTimer();
-   UBLOG(logINFO, "read data set time: " << UbSystem::toString(timer->GetElapsedTime()) + " s");
-
-   geoMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 1);
-
-   UBLOG(logINFO, "Perform the solid nodes: start");
-   level_interp_timer->StartTimer();
-
-   vtkThreshold* thrFilter = vtkThreshold::New();
-   thrFilter->SetInputData(reader->GetOutput());
-   thrFilter->SetInputArrayToProcess(0, 0, 0, vtkDataObject::FIELD_ASSOCIATION_POINTS, "Geometry");
-   thrFilter->ThresholdBetween(1, 1);
-   thrFilter->Update();
-   vtkUnstructuredGrid* ugrid = thrFilter->GetOutput();
-
-   vtkPoints* points = vtkPoints::New();
-   vtkCellArray* cells = vtkCellArray::New();
-
-   int numberOfCells = ugrid->GetNumberOfCells();
-
-   double x[3];
-   array<double, 3> xMin;
-   array<double, 3> xMax;
-   array<int, 3> ixMin;
-   array<int, 3> ixMax;
-   vtkIdType idc = 0;
-
-   for (int i = 0; i < numberOfCells; i++)
-   {
-      vtkIdList* plist = vtkIdList::New();
-      ugrid->GetCellPoints(i, plist);
-      vector <double> x1;
-      vector <double> x2;
-      vector <double> x3;
-      for (int p = 0; p < plist->GetNumberOfIds(); p++)
-      {
-         ugrid->GetPoint(plist->GetId(p), x);
-         x1.push_back(x[0]);
-         x2.push_back(x[1]);
-         x3.push_back(x[2]);
-      }
-      xMin[0] = *min_element(x1.begin(), x1.end());
-      xMin[1] = *min_element(x2.begin(), x2.end());
-      xMin[2] = *min_element(x3.begin(), x3.end());
-
-      xMax[0] = *max_element(x1.begin(), x1.end());
-      xMax[1] = *max_element(x2.begin(), x2.end());
-      xMax[2] = *max_element(x3.begin(), x3.end());
-
-      getNodeIndexes(xMin, ixMin);
-      getNodeIndexes(xMax, ixMax);
-
-      for (int k = ixMin[2]; k <= ixMax[2]; k++)
-      {
-         for (int j = ixMin[1]; j <= ixMax[1]; j++)
-         {
-            for (int i = ixMin[0]; i <= ixMax[0]; i++)
-            {
-               if (i >= 0 && i < dimensions[0] && j >= 0 && j < dimensions[1] && k >= 0 && k < dimensions[2])
-               {
-                  geoMatrix(i, j, k) = 0;
-               }
-            }
-         }
-      }
-      plist->Delete();
-   }
-
-   reader->Delete();
-   thrFilter->Delete();
-   points->Delete();
-   cells->Delete();
-
-   UBLOG(logINFO, "Perform the solid nodes: end");
-   level_interp_timer->StopTimer();
-   UBLOG(logINFO, "interpolation time: " << UbSystem::toString(level_interp_timer->GetElapsedTime()) << " s");
-
-   UBLOG(logINFO, "createGeoMatrix:end");
-   timer_total->StopTimer();
-   UBLOG(logINFO, "total time: " << UbSystem::toString(timer_total->GetElapsedTime()) << " s");
-}
-//////////////////////////////////////////////////////////////////////////
-void Averaging::writeGeoMatrixToImageFile(std::string output)
-{
-   vtkSmartPointer<vtkTimerLog> timer_write = vtkSmartPointer<vtkTimerLog>::New();
-
-   std::string vtkfilename = output + ".vti";
-
-   UBLOG(logINFO, "write data set to " << vtkfilename << ": start");
-   timer_write->StartTimer();
-
-   vtkImageData* image = vtkImageData::New();
-
-   image->SetExtent(&geo_extent[0]);
-   image->SetOrigin(&geo_origin[0]);
-   image->SetSpacing(&geo_spacing[0]);
-
-   vtkIntArray* geoArray = vtkIntArray::New();
-   geoArray->SetNumberOfComponents(1);
-   geoArray->SetName("geo");
-
-   int size = dimensions[0] * dimensions[1] * dimensions[2];
-
-   geoArray->SetArray(geoMatrix.getStartAdressOfSortedArray(0, 0, 0), size, 1);
-   image->GetPointData()->AddArray(geoArray);
-
-   vtkXMLImageDataWriter* writer = vtkXMLImageDataWriter::New();
-   writer->SetInputData(image);
-   writer->SetFileName(vtkfilename.c_str());
-   //writer->SetDataModeToAscii();
-   writer->SetDataModeToAppended();
-   writer->SetCompressorTypeToZLib();
-   writer->Update();
-
-   image->Delete();
-   geoArray->Delete();
-   writer->Delete();
-
-   UBLOG(logINFO, "write data set: end");
-   timer_write->StopTimer();
-   UBLOG(logINFO, "write data set time: " << UbSystem::toString(timer_write->GetElapsedTime()) << " s");
-}
-void Averaging::initMeanMqValues()
-{
-   meanVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::sumMqValues()
-{
-   vector<double>& vxSum = meanVxMatrix.getDataVector();
-   vector<double>& vySum = meanVyMatrix.getDataVector();
-   vector<double>& vzSum = meanVzMatrix.getDataVector();
-   vector<double>& prSum = meanPrMatrix.getDataVector();
-
-   vector<double>& vxVa = vxMatrix.getDataVector();
-   vector<double>& vyVa = vyMatrix.getDataVector();
-   vector<double>& vzVa = vzMatrix.getDataVector();
-   vector<double>& prVa = prMatrix.getDataVector();
-
-   int size = (int)vxVa.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      vxSum[i] += vxVa[i];
-      vySum[i] += vyVa[i];
-      vzSum[i] += vzVa[i];
-      prSum[i] += prVa[i];
-   }
-}
-void Averaging::computeMeanMqValues(int numberOfTimeSteps)
-{
-   vector<double>& vxSum = meanVxMatrix.getDataVector();
-   vector<double>& vySum = meanVyMatrix.getDataVector();
-   vector<double>& vzSum = meanVzMatrix.getDataVector();
-   vector<double>& prSum = meanPrMatrix.getDataVector();
-
-   vector<double>& vxMean = meanVxMatrix.getDataVector();
-   vector<double>& vyMean = meanVyMatrix.getDataVector();
-   vector<double>& vzMean = meanVzMatrix.getDataVector();
-   vector<double>& prMean = meanPrMatrix.getDataVector();
-
-   int size = (int)vxSum.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      vxMean[i] = vxSum[i] / numberOfTimeSteps;
-      vyMean[i] = vySum[i] / numberOfTimeSteps;
-      vzMean[i] = vzSum[i] / numberOfTimeSteps;
-      prMean[i] = prSum[i] / numberOfTimeSteps;
-   }
-}
-void Averaging::writeMeanMqValuesToBinaryFiles(std::string fname)
-{
-   writeMatrixToBinaryFiles<double>(meanVxMatrix, fname + "Vx" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVyMatrix, fname + "Vy" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVzMatrix, fname + "Vz" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanPrMatrix, fname + "Pr" + ".bin");
-}
-void Averaging::readMeanMqValuesFromBinaryFiles(std::string fname)
-{
-   readMatrixFromBinaryFiles<double>(fname + "Vx" + ".bin", meanVxMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vy" + ".bin", meanVyMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vz" + ".bin", meanVzMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Pr" + ".bin", meanPrMatrix);
-}
-void Averaging::volumeAveragingOfMeanMqValuesWithMPI(double l_real)
-{
-   vtkSmartPointer<vtkTimerLog> timer_averaging = vtkSmartPointer<vtkTimerLog>::New();
-
-   UBLOG(logINFO, "volume averaging: start");
-   timer_averaging->StartTimer();
-
-   double l = round(l_real / deltax);
-   UBLOG(logINFO, "l = " + UbSystem::toString(l));
-
-   UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) << " x " + UbSystem::toString(dimensions[1]) << " x " << UbSystem::toString(dimensions[2]));
-
-   int size = dimensions[0] * dimensions[1] * dimensions[2];
-   vaMeanVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaMeanVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaMeanVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaMeanPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-
-   int numprocs, PID;
-   MPI_Comm_rank(MPI_COMM_WORLD, &PID);
-   MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
-
-   int part = (int)round((double)dimensions[0] / (double)numprocs);
-   UBLOG(logINFO, "part = " + UbSystem::toString(part));
-
-   int startX1 = part * PID;
-   int stopX1 = startX1 + part;
-   if (PID == numprocs - 1)
-   {
-      stopX1 = dimensions[0];
-   }
-
-   UBLOG(logINFO, "startX1 = " + UbSystem::toString(startX1));
-   UBLOG(logINFO, "stopX1 = " + UbSystem::toString(stopX1));
-
-   vtkSmartPointer<vtkTimerLog> timer_inloop = vtkSmartPointer<vtkTimerLog>::New();
-   //timer_inloop->StartTimer();
-   int p = 1000000;
-
-   //omp_set_num_threads(8);
-
-   //#pragma omp parallel num_threads(4) //private(i)
-   {
-      int i = 0;
-
-#pragma omp parallel for //private(i)//scheduler(dynamic, 1)
-      for (int x3 = 0; x3 < dimensions[2]; x3++)
-         for (int x2 = 0; x2 < dimensions[1]; x2++)
-            for (int x1 = startX1; x1 < stopX1; x1++)
-            {
-               int ID = omp_get_thread_num();
-               if (i == 0 && ID == 0)
-               {
-                  timer_inloop->StartTimer();
-                  UBLOG(logINFO, "point id = " + UbSystem::toString(i));
-               }
-               double vx = 0.0;
-               double vy = 0.0;
-               double vz = 0.0;
-               double pr = 0.0;
-
-               int ll = (int)l;
-               int llz1 = ll;
-               if (x3 - ll < 0) llz1 = x3;
-               if (x3 + ll >= dimensions[2]) llz1 = dimensions[2] - 1 - x3;
-               double lQuadrat = l * l;
-               double lNorm = lQuadrat * lQuadrat * double(llz1) * double(llz1);
-
-               //#pragma omp parallel for
-               for (int z = -llz1; z <= +llz1; z++)
-                  for (int y = -ll; y <= +ll; y++)
-                     for (int x = -ll; x <= +ll; x++)
-                     {
-                        int xx = x1 + x;
-                        int yy = x2 + y;
-                        int zz = x3 + z;
-
-                        //correctIndex(xx, yy, zz);
-                        if (xx < 0)   xx = dimensions[0] + xx;
-                        if (xx >= dimensions[0]) xx = xx - dimensions[0];
-
-                        if (yy < 0)   yy = dimensions[1] + yy;
-                        if (yy >= dimensions[1]) yy = yy - dimensions[1];
-
-                        if (zz < 0) zz = 0;
-                        if (zz >= dimensions[2]) zz = dimensions[2] - 1;
-
-                        double mm = (G((double)x, l) * G((double)y, l) * G((double)z, (double)llz1)) / lNorm;
-                        double gamma = (double)geoMatrix(xx, yy, zz);
-
-                        vx += gamma * mm * meanVxMatrix(xx, yy, zz);
-                        vy += gamma * mm * meanVyMatrix(xx, yy, zz);
-                        vz += gamma * mm * meanVzMatrix(xx, yy, zz);
-                        pr += gamma * mm * meanPrMatrix(xx, yy, zz);
-
-                     }
-
-               vaMeanVxMatrix(x1, x2, x3) = vx;
-               vaMeanVyMatrix(x1, x2, x3) = vy;
-               vaMeanVzMatrix(x1, x2, x3) = vz;
-               vaMeanPrMatrix(x1, x2, x3) = pr;
-
-               if (i % p == 0 && i != 0 && ID == 0)
-               {
-                  timer_inloop->StopTimer();
-                  UBLOG(logINFO, "point id = " + UbSystem::toString(i));
-                  UBLOG(logINFO, "time per " + UbSystem::toString(p) + " points: " + UbSystem::toString(timer_inloop->GetElapsedTime()) + " s");
-                  UBLOG(logINFO, "actual memory usage: " << UbSystem::toString(Utilities::getPhysMemUsedByMe() / 1e9) << " GByte");
-                  timer_inloop->StartTimer();
-                  UBLOG(logINFO, "thread id: " + UbSystem::toString(ID));
-                  UBLOG(logINFO, "Number of treads: " + UbSystem::toString(omp_get_num_threads()));
-               }
-               i++;
-            }
-   }
-
-   if (PID == 0)
-   {
-      vector<double> receiveBuffer;
-      for (int i = 1; i < numprocs; i++)
-      {
-         int count, lstartX1, lstopX1;
-         MPI_Status status;
-         MPI_Recv(&count, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         receiveBuffer.resize(count);
-         MPI_Recv(&receiveBuffer[0], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status);
-         MPI_Recv(&lstartX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         MPI_Recv(&lstopX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         int c = 0;
-         for (int x3 = 0; x3 < dimensions[2]; x3++)
-            for (int x2 = 0; x2 < dimensions[1]; x2++)
-               for (int x1 = lstartX1; x1 < lstopX1; x1++)
-               {
-                  vaMeanVxMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaMeanVyMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaMeanVzMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaMeanPrMatrix(x1, x2, x3) = receiveBuffer[c++];
-               }
-      }
-   }
-   else
-   {
-      vector<double> sendBuffer;
-      for (int x3 = 0; x3 < dimensions[2]; x3++)
-         for (int x2 = 0; x2 < dimensions[1]; x2++)
-            for (int x1 = startX1; x1 < stopX1; x1++)
-            {
-               sendBuffer.push_back(vaMeanVxMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaMeanVyMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaMeanVzMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaMeanPrMatrix(x1, x2, x3));
-            }
-      int count = (int)sendBuffer.size();
-      MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&sendBuffer[0], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&startX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&stopX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-   }
-
-   timer_averaging->StopTimer();
-   UBLOG(logINFO, "volume averaging: end");
-   UBLOG(logINFO, "volume averaging time: " + UbSystem::toString(timer_averaging->GetElapsedTime()) + " s");
-}
-void Averaging::writeVaMeanMqValuesToBinaryFiles(std::string fname)
-{
-   writeMatrixToBinaryFiles<double>(vaMeanVxMatrix, fname + "Vx" + ".bin");
-   writeMatrixToBinaryFiles<double>(vaMeanVyMatrix, fname + "Vy" + ".bin");
-   writeMatrixToBinaryFiles<double>(vaMeanVzMatrix, fname + "Vz" + ".bin");
-   writeMatrixToBinaryFiles<double>(vaMeanPrMatrix, fname + "Pr" + ".bin");
-}
-void Averaging::readVaMeanMqValuesFromBinaryFiles(std::string fname)
-{
-   readMatrixFromBinaryFiles<double>(fname + "Vx" + ".bin", vaMeanVxMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vy" + ".bin", vaMeanVyMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vz" + ".bin", vaMeanVzMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Pr" + ".bin", vaMeanPrMatrix);
-}
-void Averaging::initFluctuationsOfMqValues()
-{
-   flucVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   flucVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   flucVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   flucPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::computeFluctuationsOfMqValues()
-{
-   vector<double>& vxF = vxMatrix.getDataVector();
-   vector<double>& vyF = vyMatrix.getDataVector();
-   vector<double>& vzF = vzMatrix.getDataVector();
-   vector<double>& prF = prMatrix.getDataVector();
-
-   vector<double>& vxMean = meanVxMatrix.getDataVector();
-   vector<double>& vyMean = meanVyMatrix.getDataVector();
-   vector<double>& vzMean = meanVzMatrix.getDataVector();
-   vector<double>& prMean = meanPrMatrix.getDataVector();
-
-   vector<double>& vxFluc = flucVxMatrix.getDataVector();
-   vector<double>& vyFluc = flucVyMatrix.getDataVector();
-   vector<double>& vzFluc = flucVzMatrix.getDataVector();
-   vector<double>& prFluc = flucPrMatrix.getDataVector();
-
-   int size = (int)vxF.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      vxFluc[i] = vxF[i] - vxMean[i];
-      vyFluc[i] = vyF[i] - vyMean[i];
-      vzFluc[i] = vzF[i] - vzMean[i];
-      prFluc[i] = prF[i] - prMean[i];
-   }
-}
-void Averaging::writeFluctuationsOfMqValuesToBinaryFiles(std::string fname, int timeStep)
-{
-   writeMatrixToBinaryFiles<double>(flucVxMatrix, fname + "Vx" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(flucVyMatrix, fname + "Vy" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(flucVzMatrix, fname + "Vz" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(flucPrMatrix, fname + "Pr" + UbSystem::toString(timeStep) + ".bin");
-}
-void Averaging::readFluctuationsOfMqValuesFromBinaryFiles(std::string fname, int timeStep)
-{
-   readMatrixFromBinaryFiles<double>(fname + "Vx" + UbSystem::toString(timeStep) + ".bin", flucVxMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vy" + UbSystem::toString(timeStep) + ".bin", flucVyMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vz" + UbSystem::toString(timeStep) + ".bin", flucVzMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Pr" + UbSystem::toString(timeStep) + ".bin", flucPrMatrix);
-}
-void Averaging::volumeAveragingOfFluctuationsWithMPI(double l_real)
-{
-   vtkSmartPointer<vtkTimerLog> timer_averaging = vtkSmartPointer<vtkTimerLog>::New();
-
-   UBLOG(logINFO, "volume averaging fluct and stress: start");
-   timer_averaging->StartTimer();
-
-   double l = round(l_real / deltax);
-   UBLOG(logINFO, "l = " + UbSystem::toString(l));
-
-   UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) << " x " + UbSystem::toString(dimensions[1]) << " x " << UbSystem::toString(dimensions[2]));
-
-   int size = dimensions[0] * dimensions[1] * dimensions[2];
-   vaFlucVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaFlucVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaFlucVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaFlucPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-
-   int numprocs, PID;
-   MPI_Comm_rank(MPI_COMM_WORLD, &PID);
-   MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
-
-   int part = (int)round((double)dimensions[0] / (double)numprocs);
-   UBLOG(logINFO, "part = " + UbSystem::toString(part));
-
-   int startX1 = part * PID;
-   int stopX1 = startX1 + part;
-   if (PID == numprocs - 1)
-   {
-      stopX1 = dimensions[0];
-   }
-
-   UBLOG(logINFO, "startX1 = " + UbSystem::toString(startX1));
-   UBLOG(logINFO, "stopX1 = " + UbSystem::toString(stopX1));
-
-   vtkSmartPointer<vtkTimerLog> timer_inloop = vtkSmartPointer<vtkTimerLog>::New();
-   //timer_inloop->StartTimer();
-   int p = 1000000;
-
-   //omp_set_num_threads(8);
-
-   //#pragma omp parallel num_threads(4) //private(i)
-   {
-      int i = 0;
-#pragma omp parallel for //private(i)//scheduler(dynamic, 1)
-      for (int x3 = 0; x3 < dimensions[2]; x3++)
-         for (int x2 = 0; x2 < dimensions[1]; x2++)
-            for (int x1 = startX1; x1 < stopX1; x1++)
-            {
-               int ID = omp_get_thread_num();
-               if (i == 0 && ID == 0)
-               {
-                  timer_inloop->StartTimer();
-                  UBLOG(logINFO, "point id = " + UbSystem::toString(i));
-               }
-               double flucvx = 0.0;
-               double flucvy = 0.0;
-               double flucvz = 0.0;
-               double flucpr = 0.0;
-
-               int ll = (int)l;
-               int llz1 = ll;
-               if (x3 - ll < 0) llz1 = x3;
-               if (x3 + ll >= dimensions[2]) llz1 = dimensions[2] - 1 - x3;
-               double lQuadrat = l * l;
-               double lNorm = lQuadrat * lQuadrat * double(llz1) * double(llz1);
-
-               //#pragma omp parallel for
-               for (int z = -llz1; z <= +llz1; z++)
-                  for (int y = -ll; y <= +ll; y++)
-                     for (int x = -ll; x <= +ll; x++)
-                     {
-                        int xx = x1 + x;
-                        int yy = x2 + y;
-                        int zz = x3 + z;
-
-                        //correctIndex(xx, yy, zz);
-                        if (xx < 0)   xx = dimensions[0] + xx;
-                        if (xx >= dimensions[0]) xx = xx - dimensions[0];
-
-                        if (yy < 0)   yy = dimensions[1] + yy;
-                        if (yy >= dimensions[1]) yy = yy - dimensions[1];
-
-                        if (zz < 0)   zz = 0;
-                        if (zz >= dimensions[2]) zz = dimensions[2] - 1;
-
-                        double mm = (G((double)x, l) * G((double)y, l) * G((double)z, (double)llz1)) / lNorm;
-                        double gamma = (double)geoMatrix(xx, yy, zz);
-
-                        flucvx += gamma * mm * flucVxMatrix(xx, yy, zz);
-                        flucvy += gamma * mm * flucVyMatrix(xx, yy, zz);
-                        flucvz += gamma * mm * flucVzMatrix(xx, yy, zz);
-                        flucpr += gamma * mm * flucPrMatrix(xx, yy, zz);
-                     }
-
-               vaFlucVxMatrix(x1, x2, x3) = flucvx;
-               vaFlucVyMatrix(x1, x2, x3) = flucvy;
-               vaFlucVzMatrix(x1, x2, x3) = flucvz;
-               vaFlucPrMatrix(x1, x2, x3) = flucpr;
-
-               if (i % p == 0 && i != 0 && ID == 0)
-               {
-                  timer_inloop->StopTimer();
-                  UBLOG(logINFO, "point id = " + UbSystem::toString(i));
-                  UBLOG(logINFO, "time per " + UbSystem::toString(p) + " points: " + UbSystem::toString(timer_inloop->GetElapsedTime()) + " s");
-                  UBLOG(logINFO, "actual memory usage: " << UbSystem::toString(Utilities::getPhysMemUsedByMe() / 1e9) << " GByte");
-                  timer_inloop->StartTimer();
-                  UBLOG(logINFO, "thread id: " + UbSystem::toString(ID));
-                  UBLOG(logINFO, "Number of treads: " + UbSystem::toString(omp_get_num_threads()));
-               }
-               i++;
-            }
-   }
-
-   if (PID == 0)
-   {
-      vector<double> receiveBuffer;
-      for (int i = 1; i < numprocs; i++)
-      {
-         int count, lstartX1, lstopX1;
-         MPI_Status status;
-         MPI_Recv(&count, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         receiveBuffer.resize(count);
-         MPI_Recv(&receiveBuffer[0], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status);
-         MPI_Recv(&lstartX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         MPI_Recv(&lstopX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         int c = 0;
-         for (int x3 = 0; x3 < dimensions[2]; x3++)
-            for (int x2 = 0; x2 < dimensions[1]; x2++)
-               for (int x1 = lstartX1; x1 < lstopX1; x1++)
-               {
-                  vaFlucVxMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaFlucVyMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaFlucVzMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaFlucPrMatrix(x1, x2, x3) = receiveBuffer[c++];
-               }
-      }
-   }
-   else
-   {
-      vector<double> sendBuffer;
-      for (int x3 = 0; x3 < dimensions[2]; x3++)
-         for (int x2 = 0; x2 < dimensions[1]; x2++)
-            for (int x1 = startX1; x1 < stopX1; x1++)
-            {
-               sendBuffer.push_back(vaFlucVxMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaFlucVyMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaFlucVzMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaFlucPrMatrix(x1, x2, x3));
-            }
-      int count = (int)sendBuffer.size();
-      MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&sendBuffer[0], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&startX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&stopX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-   }
-
-   timer_averaging->StopTimer();
-   UBLOG(logINFO, "volume averaging fluct and stress: end");
-   UBLOG(logINFO, "volume averaging fluct and stress time: " + UbSystem::toString(timer_averaging->GetElapsedTime()) + " s");
-}
-void Averaging::readTimeAveragedDataFromVtkFile(std::string dataNameMQ)
-{
-   UBLOG(logINFO, "createMQMatrix:start");
-
-   vtkSmartPointer<vtkTimerLog> timer = vtkSmartPointer<vtkTimerLog>::New();
-   vtkSmartPointer<vtkTimerLog> timer_total = vtkSmartPointer<vtkTimerLog>::New();
-
-   timer_total->StartTimer();
-
-   UBLOG(logINFO, "read data set from " + dataNameMQ + ": start");
-   timer->StartTimer();
-
-   vtkXMLPUnstructuredGridReader* reader = vtkXMLPUnstructuredGridReader::New();
-   reader->SetFileName(dataNameMQ.c_str());
-   reader->Update();
-
-   UBLOG(logINFO, "read data set from " + dataNameMQ + ": end");
-   timer->StopTimer();
-   UBLOG(logINFO, "read data set time: " + UbSystem::toString(timer->GetElapsedTime()) + " s");
-
-   UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) + " x " + UbSystem::toString(dimensions[1]) + " x " + UbSystem::toString(dimensions[2]));
-
-   int size = dimensions[0] * dimensions[1] * dimensions[2];
-   meanVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-
-   StressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   StressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   StressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   StressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   StressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   StressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-
-   vtkUnstructuredGrid* ugrid = reader->GetOutput();
-
-   vtkPoints* points = vtkPoints::New();
-   vtkCellArray* cells = vtkCellArray::New();
-
-   int numberOfCells = ugrid->GetNumberOfCells();
-
-   vtkDataArray* vxArray = ugrid->GetPointData()->GetArray("taVx");
-   vtkDataArray* vyArray = ugrid->GetPointData()->GetArray("taVy");
-   vtkDataArray* vzArray = ugrid->GetPointData()->GetArray("taVz");
-   vtkDataArray* prArray = ugrid->GetPointData()->GetArray("taRho");
-
-   vtkDataArray* vxxArray = ugrid->GetPointData()->GetArray("taVxx");
-   vtkDataArray* vyyArray = ugrid->GetPointData()->GetArray("taVyy");
-   vtkDataArray* vzzArray = ugrid->GetPointData()->GetArray("taVzz");
-   vtkDataArray* vxyArray = ugrid->GetPointData()->GetArray("taVxy");
-   vtkDataArray* vxzArray = ugrid->GetPointData()->GetArray("taVxz");
-   vtkDataArray* vyzArray = ugrid->GetPointData()->GetArray("taVyz");
-   //Vxx; Vyy; Vzz; Vxy; Vxz; Vyz
-
-   double x[3];
-   array<double, 3> xMin;
-   array<double, 3> xMax;
-   array<int, 3> ixMin;
-   array<int, 3> ixMax;
-   vtkIdType idc = 0;
-
-   for (int i = 0; i < numberOfCells; i++)
-   {
-      vtkIdList* plist = vtkIdList::New();
-      ugrid->GetCellPoints(i, plist);
-      vector <double> x1;
-      vector <double> x2;
-      vector <double> x3;
-      for (int p = 0; p < plist->GetNumberOfIds(); p++)
-      {
-         ugrid->GetPoint(plist->GetId(p), x);
-         x1.push_back(x[0]);
-         x2.push_back(x[1]);
-         x3.push_back(x[2]);
-      }
-      xMin[0] = *min_element(x1.begin(), x1.end());
-      xMin[1] = *min_element(x2.begin(), x2.end());
-      xMin[2] = *min_element(x3.begin(), x3.end());
-
-      xMax[0] = *max_element(x1.begin(), x1.end());
-      xMax[1] = *max_element(x2.begin(), x2.end());
-      xMax[2] = *max_element(x3.begin(), x3.end());
-
-      getNodeIndexes(xMin, ixMin);
-      getNodeIndexes(xMax, ixMax);
-      int c = 0;
-      for (int k = ixMin[2]; k <= ixMax[2]; k++)
-      {
-         for (int j = ixMin[1]; j <= ixMax[1]; j++)
-         {
-            for (int i = ixMin[0]; i <= ixMax[0]; i++)
-            {
-               if (i >= 0 && i < dimensions[0] && j >= 0 && j < dimensions[1] && k >= 0 && k < dimensions[2])
-               {
-                  if (geoMatrix(i, j, k) == 1)
-                  {
-                     meanVxMatrix(i, j, k) = vxArray->GetTuple1(plist->GetId(c));
-                     meanVyMatrix(i, j, k) = vyArray->GetTuple1(plist->GetId(c));
-                     meanVzMatrix(i, j, k) = vzArray->GetTuple1(plist->GetId(c));
-                     meanPrMatrix(i, j, k) = prArray->GetTuple1(plist->GetId(c));
-
-                     StressXX(i, j, k) = vxxArray->GetTuple1(plist->GetId(c));
-                     StressYY(i, j, k) = vyyArray->GetTuple1(plist->GetId(c));
-                     StressZZ(i, j, k) = vzzArray->GetTuple1(plist->GetId(c));
-                     StressXY(i, j, k) = vxyArray->GetTuple1(plist->GetId(c));
-                     StressXZ(i, j, k) = vxzArray->GetTuple1(plist->GetId(c));
-                     StressYZ(i, j, k) = vyzArray->GetTuple1(plist->GetId(c));
-                     c++;
-                  }
-               }
-            }
-         }
-      }
-      plist->Delete();
-   }
-
-   reader->Delete();
-   points->Delete();
-   cells->Delete();
-
-   UBLOG(logINFO, "createMQMatrix:end");
-   timer_total->StopTimer();
-   UBLOG(logINFO, "total time: " + UbSystem::toString(timer_total->GetElapsedTime()) + " s");
-}
-void Averaging::volumeAveragingOfTimeAveragedDataWithMPI(double l_real)
-{
-   vtkSmartPointer<vtkTimerLog> timer_averaging = vtkSmartPointer<vtkTimerLog>::New();
-
-   UBLOG(logINFO, "volume averaging: start");
-   timer_averaging->StartTimer();
-
-   double l = round(l_real / deltax);
-   UBLOG(logINFO, "l = " + UbSystem::toString(l));
-
-   UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) << " x " + UbSystem::toString(dimensions[1]) << " x " << UbSystem::toString(dimensions[2]));
-
-   int size = dimensions[0] * dimensions[1] * dimensions[2];
-   vaMeanVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaMeanVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaMeanVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaMeanPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-
-   vaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-
-   int numprocs, PID;
-   MPI_Comm_rank(MPI_COMM_WORLD, &PID);
-   MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
-
-   int part = (int)round((double)dimensions[0] / (double)numprocs);
-   UBLOG(logINFO, "part = " + UbSystem::toString(part));
-
-   int startX1 = part * PID;
-   int stopX1 = startX1 + part;
-   if (PID == numprocs - 1)
-   {
-      stopX1 = dimensions[0];
-   }
-
-   UBLOG(logINFO, "startX1 = " + UbSystem::toString(startX1));
-   UBLOG(logINFO, "stopX1 = " + UbSystem::toString(stopX1));
-
-   vtkSmartPointer<vtkTimerLog> timer_inloop = vtkSmartPointer<vtkTimerLog>::New();
-   //timer_inloop->StartTimer();
-   int p = 1000000;
-
-   //omp_set_num_threads(8);
-
-   //#pragma omp parallel num_threads(4) //private(i)
-   {
-      int i = 0;
-
-#pragma omp parallel for //private(i)//scheduler(dynamic, 1)
-      for (int x3 = 0; x3 < dimensions[2]; x3++)
-         for (int x2 = 0; x2 < dimensions[1]; x2++)
-            for (int x1 = startX1; x1 < stopX1; x1++)
-            {
-               int ID = omp_get_thread_num();
-               if (i == 0 && ID == 0)
-               {
-                  timer_inloop->StartTimer();
-                  UBLOG(logINFO, "point id = " + UbSystem::toString(i));
-               }
-               double vx = 0.0;
-               double vy = 0.0;
-               double vz = 0.0;
-               double pr = 0.0;
-               double stressXX = 0.0;
-               double stressYY = 0.0;
-               double stressZZ = 0.0;
-               double stressXY = 0.0;
-               double stressXZ = 0.0;
-               double stressYZ = 0.0;
-
-               int ll = (int)l;
-               int llz1 = ll;
-               if (x3 - ll < 0) llz1 = x3;
-               if (x3 + ll >= dimensions[2]) llz1 = dimensions[2] - 1 - x3;
-               double lQuadrat = l * l;
-               double lNorm = lQuadrat * lQuadrat * double(llz1)*double(llz1);
-
-               //#pragma omp parallel for
-               for (int z = -llz1; z <= +llz1; z++)
-                  for (int y = -ll; y <= +ll; y++)
-                     for (int x = -ll; x <= +ll; x++)
-                     {
-                        int xx = x1 + x;
-                        int yy = x2 + y;
-                        int zz = x3 + z;
-
-                        //correctIndex(xx, yy, zz);
-                        if (xx < 0)   xx = dimensions[0] + xx;
-                        if (xx >= dimensions[0]) xx = xx - dimensions[0];
-
-                        if (yy < 0)   yy = dimensions[1] + yy;
-                        if (yy >= dimensions[1]) yy = yy - dimensions[1];
-
-                        if (zz < 0) zz = 0;
-                        if (zz >= dimensions[2]) zz = dimensions[2] - 1;
-
-                        if (x3 != 0 || x3 != dimensions[2] - 1)
-                        {
-                           double mm = (G((double)x, l) * G((double)y, l) * G((double)z, (double)llz1)) / lNorm;
-                           double gamma = (double)geoMatrix(xx, yy, zz);
-
-                           vx += gamma * mm * meanVxMatrix(xx, yy, zz);
-                           vy += gamma * mm * meanVyMatrix(xx, yy, zz);
-                           vz += gamma * mm * meanVzMatrix(xx, yy, zz);
-                           pr += gamma * mm * meanPrMatrix(xx, yy, zz);
-
-                           stressXX += gamma * mm * StressXX(xx, yy, zz);
-                           stressYY += gamma * mm * StressYY(xx, yy, zz);
-                           stressZZ += gamma * mm * StressZZ(xx, yy, zz);
-                           stressXY += gamma * mm * StressXY(xx, yy, zz);
-                           stressXZ += gamma * mm * StressXZ(xx, yy, zz);
-                           stressYZ += gamma * mm * StressYZ(xx, yy, zz);
-                        }
-                        else
-                        {
-                           vx += meanVxMatrix(xx, yy, zz);
-                           vy += meanVyMatrix(xx, yy, zz);
-                           vz += meanVzMatrix(xx, yy, zz);
-                           pr += meanPrMatrix(xx, yy, zz);
-
-                           stressXX += StressXX(xx, yy, zz);
-                           stressYY += StressYY(xx, yy, zz);
-                           stressZZ += StressZZ(xx, yy, zz);
-                           stressXY += StressXY(xx, yy, zz);
-                           stressXZ += StressXZ(xx, yy, zz);
-                           stressYZ += StressYZ(xx, yy, zz);
-                        }
-                     }
-
-               vaMeanVxMatrix(x1, x2, x3) = vx;
-               vaMeanVyMatrix(x1, x2, x3) = vy;
-               vaMeanVzMatrix(x1, x2, x3) = vz;
-               vaMeanPrMatrix(x1, x2, x3) = pr;
-
-               vaStressXX(x1, x2, x3) = stressXX;
-               vaStressYY(x1, x2, x3) = stressYY;
-               vaStressZZ(x1, x2, x3) = stressZZ;
-               vaStressXY(x1, x2, x3) = stressXY;
-               vaStressXZ(x1, x2, x3) = stressXZ;
-               vaStressYZ(x1, x2, x3) = stressYZ;
-
-               if (i % p == 0 && i != 0 && ID == 0)
-               {
-                  timer_inloop->StopTimer();
-                  UBLOG(logINFO, "point id = " + UbSystem::toString(i));
-                  UBLOG(logINFO, "time per " + UbSystem::toString(p) + " points: " + UbSystem::toString(timer_inloop->GetElapsedTime()) + " s");
-                  UBLOG(logINFO, "actual memory usage: " << UbSystem::toString(Utilities::getPhysMemUsedByMe() / 1e9) << " GByte");
-                  timer_inloop->StartTimer();
-                  UBLOG(logINFO, "thread id: " + UbSystem::toString(ID));
-                  UBLOG(logINFO, "Number of treads: " + UbSystem::toString(omp_get_num_threads()));
-               }
-               i++;
-            }
-   }
-
-   if (PID == 0)
-   {
-      vector<double> receiveBuffer;
-      for (int i = 1; i < numprocs; i++)
-      {
-         int count, lstartX1, lstopX1;
-         MPI_Status status;
-         MPI_Recv(&count, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         receiveBuffer.resize(count);
-         MPI_Recv(&receiveBuffer[0], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status);
-         MPI_Recv(&lstartX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         MPI_Recv(&lstopX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         int c = 0;
-         for (int x3 = 0; x3 < dimensions[2]; x3++)
-            for (int x2 = 0; x2 < dimensions[1]; x2++)
-               for (int x1 = lstartX1; x1 < lstopX1; x1++)
-               {
-                  vaMeanVxMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaMeanVyMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaMeanVzMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaMeanPrMatrix(x1, x2, x3) = receiveBuffer[c++];
-
-                  vaStressXX(x1, x2, x3) = receiveBuffer[c++];
-                  vaStressYY(x1, x2, x3) = receiveBuffer[c++];
-                  vaStressZZ(x1, x2, x3) = receiveBuffer[c++];
-                  vaStressXY(x1, x2, x3) = receiveBuffer[c++];
-                  vaStressXZ(x1, x2, x3) = receiveBuffer[c++];
-                  vaStressYZ(x1, x2, x3) = receiveBuffer[c++];
-               }
-      }
-   }
-   else
-   {
-      vector<double> sendBuffer;
-      for (int x3 = 0; x3 < dimensions[2]; x3++)
-         for (int x2 = 0; x2 < dimensions[1]; x2++)
-            for (int x1 = startX1; x1 < stopX1; x1++)
-            {
-               sendBuffer.push_back(vaMeanVxMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaMeanVyMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaMeanVzMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaMeanPrMatrix(x1, x2, x3));
-
-               sendBuffer.push_back(vaStressXX(x1, x2, x3));
-               sendBuffer.push_back(vaStressYY(x1, x2, x3));
-               sendBuffer.push_back(vaStressZZ(x1, x2, x3));
-               sendBuffer.push_back(vaStressXY(x1, x2, x3));
-               sendBuffer.push_back(vaStressXZ(x1, x2, x3));
-               sendBuffer.push_back(vaStressYZ(x1, x2, x3));
-            }
-      int count = (int)sendBuffer.size();
-      MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&sendBuffer[0], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&startX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&stopX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-   }
-
-   timer_averaging->StopTimer();
-   UBLOG(logINFO, "volume averaging: end");
-   UBLOG(logINFO, "volume averaging time: " + UbSystem::toString(timer_averaging->GetElapsedTime()) + " s");
-}
-void Averaging::planarAveragingOfVaTaData()
-{
-   double numberof_XY_points = (double)dimensions[0] * (double)dimensions[1];
-
-   for (int z = 0; z < dimensions[2]; z++)
-   {
-      double sumVx = 0, sumVy = 0, sumVz = 0, sumPr = 0;
-      double sumFluctVx = 0, sumFluctVy = 0, sumFluctVz = 0, sumFluctPr = 0;
-      double sumStressXX = 0, sumStressYY = 0, sumStressZZ = 0, sumStressXY = 0, sumStressXZ = 0, sumStressYZ = 0;
-      for (int y = 0; y < dimensions[1]; y++)
-         for (int x = 0; x < dimensions[0]; x++)
-         {
-            sumVx += vaMeanVxMatrix(x, y, z);
-            sumVy += vaMeanVyMatrix(x, y, z);
-            sumVz += vaMeanVzMatrix(x, y, z);
-            sumPr += vaMeanPrMatrix(x, y, z);
-
-            sumStressXX += vaStressXX(x, y, z);
-            sumStressYY += vaStressYY(x, y, z);
-            sumStressZZ += vaStressZZ(x, y, z);
-            sumStressXY += vaStressXY(x, y, z);
-            sumStressXZ += vaStressXZ(x, y, z);
-            sumStressYZ += vaStressYZ(x, y, z);
-         }
-      PlanarVx[z] = sumVx / numberof_XY_points;
-      PlanarVy[z] = sumVy / numberof_XY_points;
-      PlanarVz[z] = sumVz / numberof_XY_points;
-      PlanarPr[z] = sumPr / numberof_XY_points;
-
-      PlanarStressXX[z] = sumStressXX / numberof_XY_points;
-      PlanarStressYY[z] = sumStressYY / numberof_XY_points;
-      PlanarStressZZ[z] = sumStressZZ / numberof_XY_points;
-      PlanarStressXY[z] = sumStressXY / numberof_XY_points;
-      PlanarStressXZ[z] = sumStressXZ / numberof_XY_points;
-      PlanarStressYZ[z] = sumStressYZ / numberof_XY_points;
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void Averaging::getNodeIndexes(std::array<double, 3> x, std::array<int, 3>& ix)
-{
-   ix[0] = (int)round((x[0] - geo_origin[0]) / deltax);
-   ix[1] = (int)round((x[1] - geo_origin[1]) / deltax);
-   ix[2] = (int)round((x[2] - geo_origin[2]) / deltax);
-}
-//////////////////////////////////////////////////////////////////////////
-void Averaging::createMQMatrix(std::string dataNameMQ)
-{
-   UBLOG(logINFO, "createMQMatrix:start");
-
-   vtkSmartPointer<vtkTimerLog> timer = vtkSmartPointer<vtkTimerLog>::New();
-   vtkSmartPointer<vtkTimerLog> timer_total = vtkSmartPointer<vtkTimerLog>::New();
-
-   timer_total->StartTimer();
-
-   UBLOG(logINFO, "read data set from " + dataNameMQ + ": start");
-   timer->StartTimer();
-
-   vtkXMLPUnstructuredGridReader* reader = vtkXMLPUnstructuredGridReader::New();
-   reader->SetFileName(dataNameMQ.c_str());
-   reader->Update();
-
-   UBLOG(logINFO, "read data set from " + dataNameMQ + ": end");
-   timer->StopTimer();
-   UBLOG(logINFO, "read data set time: " + UbSystem::toString(timer->GetElapsedTime()) + " s");
-
-   UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) + " x " + UbSystem::toString(dimensions[1]) + " x " + UbSystem::toString(dimensions[2]));
-
-   int size = dimensions[0] * dimensions[1] * dimensions[2];
-   vxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   prMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-
-   vtkUnstructuredGrid* ugrid = reader->GetOutput(); 
-
-   vtkPoints* points = vtkPoints::New();
-   vtkCellArray* cells = vtkCellArray::New();
-
-   int numberOfCells = ugrid->GetNumberOfCells();
-
-   vtkDataArray* vxArray = ugrid->GetPointData()->GetArray("Vx");
-   vtkDataArray* vyArray = ugrid->GetPointData()->GetArray("Vy");
-   vtkDataArray* vzArray = ugrid->GetPointData()->GetArray("Vz");
-   vtkDataArray* prArray = ugrid->GetPointData()->GetArray("Rho");
-
-   double x[3];
-   array<double, 3> xMin;
-   array<double, 3> xMax;
-   array<int, 3> ixMin;
-   array<int, 3> ixMax;
-   vtkIdType idc = 0;
-
-   for (int i = 0; i < numberOfCells; i++)
-   {
-      vtkIdList* plist = vtkIdList::New();
-      ugrid->GetCellPoints(i, plist);
-      vector <double> x1;
-      vector <double> x2;
-      vector <double> x3;
-      for (int p = 0; p < plist->GetNumberOfIds(); p++)
-      {
-         ugrid->GetPoint(plist->GetId(p), x);
-         x1.push_back(x[0]);
-         x2.push_back(x[1]);
-         x3.push_back(x[2]);
-      }
-      xMin[0] = *min_element(x1.begin(), x1.end());
-      xMin[1] = *min_element(x2.begin(), x2.end());
-      xMin[2] = *min_element(x3.begin(), x3.end());
-
-      xMax[0] = *max_element(x1.begin(), x1.end());
-      xMax[1] = *max_element(x2.begin(), x2.end());
-      xMax[2] = *max_element(x3.begin(), x3.end());
-
-      getNodeIndexes(xMin, ixMin);
-      getNodeIndexes(xMax, ixMax);
-      int c = 0;
-      for (int k = ixMin[2]; k <= ixMax[2]; k++)
-      {
-         for (int j = ixMin[1]; j <= ixMax[1]; j++)
-         {
-            for (int i = ixMin[0]; i <= ixMax[0]; i++)
-            {
-               if (i >= 0 && i < dimensions[0] && j >= 0 && j < dimensions[1] && k >= 0 && k < dimensions[2])
-               {
-                  if (geoMatrix(i, j, k) == 1)
-                  {
-                     vxMatrix(i, j, k) = vxArray->GetTuple1(plist->GetId(c));
-                     vyMatrix(i, j, k) = vyArray->GetTuple1(plist->GetId(c));
-                     vzMatrix(i, j, k) = vzArray->GetTuple1(plist->GetId(c));
-                     prMatrix(i, j, k) = prArray->GetTuple1(plist->GetId(c));
-                     c++;
-                  }
-               }
-            }
-         }
-      }
-      plist->Delete();
-   }
-
-   reader->Delete();
-   points->Delete();
-   cells->Delete();
-
-   UBLOG(logINFO, "createMQMatrix:end");
-   timer_total->StopTimer();
-   UBLOG(logINFO, "total time: " + UbSystem::toString(timer_total->GetElapsedTime()) + " s");
-}
-//////////////////////////////////////////////////////////////////////////
-void Averaging::writeMatrixToImageFile(std::string output, std::array<CbArray3D<double>, 4> matrix)
-{
-   vtkSmartPointer<vtkTimerLog> timer_write = vtkSmartPointer<vtkTimerLog>::New();
-
-   std::string vtkfilename = output + ".vti";
-
-   UBLOG(logINFO, "write data set to " + vtkfilename + ": start");
-   timer_write->StartTimer();
-
-   vtkImageData* image = vtkImageData::New();
-
-   image->SetExtent(&geo_extent[0]);
-   image->SetOrigin(&geo_origin[0]);
-   image->SetSpacing(&geo_spacing[0]);
-
-   vtkDoubleArray* vxArray = vtkDoubleArray::New();
-   vxArray->SetNumberOfComponents(1);
-   vxArray->SetName("Vx");
-
-   vtkDoubleArray* vyArray = vtkDoubleArray::New();
-   vyArray->SetNumberOfComponents(1);
-   vyArray->SetName("Vy");
-
-   vtkDoubleArray* vzArray = vtkDoubleArray::New();
-   vzArray->SetNumberOfComponents(1);
-   vzArray->SetName("Vz");
-
-   vtkSmartPointer<vtkDoubleArray> prArray = vtkDoubleArray::New();
-   prArray->SetNumberOfComponents(1);
-   prArray->SetName("Press");
-
-   int size = dimensions[0] * dimensions[1] * dimensions[2];
-
-   vxArray->SetArray(matrix[0].getStartAdressOfSortedArray(0, 0, 0), size, 1);
-   vyArray->SetArray(matrix[1].getStartAdressOfSortedArray(0, 0, 0), size, 1);
-   vzArray->SetArray(matrix[2].getStartAdressOfSortedArray(0, 0, 0), size, 1);
-   prArray->SetArray(matrix[3].getStartAdressOfSortedArray(0, 0, 0), size, 1);
-
-   image->GetPointData()->AddArray(vxArray);
-   image->GetPointData()->AddArray(vyArray);
-   image->GetPointData()->AddArray(vzArray);
-   image->GetPointData()->AddArray(prArray);
-
-   vtkXMLImageDataWriter* writer = vtkXMLImageDataWriter::New();
-   writer->SetInputData(image);
-   writer->SetFileName(vtkfilename.c_str());
-   //writer->SetDataModeToAscii();
-   writer->SetDataModeToAppended();
-   writer->SetCompressorTypeToZLib();
-   writer->Update();
-   
-   image->Delete();
-   vxArray->Delete();
-   vyArray->Delete();
-   vzArray->Delete();
-   writer->Delete();
-
-   UBLOG(logINFO, "write data set: end");
-   timer_write->StopTimer();
-   UBLOG(logINFO, "write data set time: " + UbSystem::toString(timer_write->GetElapsedTime()) + " s");
-}
-void Averaging::writeMqMatrixToImageFile(std::string output)
-{
-   array < CbArray3D<double>, 4 > matrix = { vxMatrix, vyMatrix, vzMatrix, prMatrix };
-   writeMatrixToImageFile(output, matrix);
-}
-void Averaging::writeVaMatrixToImageFile(std::string output)
-{
-   array < CbArray3D<double>, 4 > matrix = { vaVxMatrix, vaVyMatrix, vaVzMatrix, vaPrMatrix };
-   writeMatrixToImageFile(output, matrix);
-}
-void Averaging::writeVaSumMatrixToImageFile(std::string output)
-{
-   array < CbArray3D<double>, 4 > matrix = { sumVaVxMatrix, sumVaVyMatrix, sumVaVzMatrix, sumVaPrMatrix };
-   writeMatrixToImageFile(output, matrix);
-}
-void Averaging::writeMeanMatrixToImageFile(std::string output)
-{
-   array < CbArray3D<double>, 4 > matrix = { vaMeanVxMatrix, vaMeanVyMatrix, vaMeanVzMatrix, vaMeanPrMatrix };
-   writeMatrixToImageFile(output, matrix);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void Averaging::readGeoMatrix(string dataNameG)
-{
-   vtkSmartPointer<vtkTimerLog> timer = vtkSmartPointer<vtkTimerLog>::New();
-
-   UBLOG(logINFO, "readGeoMatrix:start");
-
-   UBLOG(logINFO, "read data set from " + dataNameG + ": start");
-   timer->StartTimer();
-   vtkDataSet* dataSetGeo(ReadDataSet(dataNameG.c_str()));
-   UBLOG(logINFO, "read data set from " + dataNameG + ": end");
-   timer->StopTimer();
-   UBLOG(logINFO, "read data set time: " + UbSystem::toString(timer->GetElapsedTime()) + " s");
-
-   vtkImageData* image = vtkImageData::SafeDownCast(dataSetGeo);
-
-   int geo_extent[6];
-   double geo_origin[3];
-   double geo_spacing[3];
-
-   image->GetExtent(geo_extent);
-   image->GetOrigin(geo_origin);
-   image->GetSpacing(geo_spacing);
-
-   int geo_nx1 = geo_extent[1] + 1;
-   int geo_nx2 = geo_extent[3] + 1;
-   int geo_nx3 = geo_extent[5] + 1;
-
-   UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(geo_nx1) + " x " + UbSystem::toString(geo_nx2) + " x " + UbSystem::toString(geo_nx3));
-
-   geoMatrix.resize(geo_nx1, geo_nx2, geo_nx3, 0);
-
-   vtkDataArray* geoArray = dataSetGeo->GetPointData()->GetArray("geo");
-
-   int numberOfPoints = dataSetGeo->GetNumberOfPoints();
-   int* gm = geoMatrix.getStartAdressOfSortedArray(0, 0, 0);
-   for (int i = 0; i < numberOfPoints; i++)
-   {
-      gm[i] = (int)geoArray->GetTuple1(i);
-   }
-
-   dataSetGeo->Delete();
-   image->Delete();
-   geoArray->Delete();
-
-   UBLOG(logINFO, "readGeoMatrix:end");
-}
-void Averaging::writeGeoMatrixToBinaryFiles(std::string fname)
-{
-   writeMatrixToBinaryFiles<int>(geoMatrix, fname);
-}
-void Averaging::readGeoMatrixFromBinaryFiles(std::string fname)
-{
-   readMatrixFromBinaryFiles<int>(fname, geoMatrix);
-}
-void Averaging::writeMqMatrixToBinaryFiles(std::string fname, int timeStep)
-{
-   writeMatrixToBinaryFiles<double>(vxMatrix, fname + "Vx" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vyMatrix, fname + "Vy" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vzMatrix, fname + "Vz" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(prMatrix, fname + "Pr" + UbSystem::toString(timeStep) + ".bin");
-}
-void Averaging::readMqMatrixFromBinaryFiles(std::string fname, int timeStep)
-{
-   readMatrixFromBinaryFiles<double>(fname + "Vx" + UbSystem::toString(timeStep) + ".bin", vxMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vy" + UbSystem::toString(timeStep) + ".bin", vyMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vz" + UbSystem::toString(timeStep) + ".bin", vzMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Pr" + UbSystem::toString(timeStep) + ".bin", prMatrix);
-}
-
-//-------------------------------- volume avaraging --------------------------
-void Averaging::initVolumeAveragingValues()
-{
-   sumVaVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::initVolumeAveragingFluctStressValues()
-{
-   sumVaFlucVx.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaFlucVy.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaFlucVz.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaFlucPr.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   
-   sumVaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::initMeanVolumeAveragingValues()
-{
-   vaMeanVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaMeanVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaMeanVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaMeanPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::initMeanVolumeAveragingFluctStressValues()
-{
-   meanVaFlucVx.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaFlucVy.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaFlucVz.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaFlucPr.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   
-   meanVaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::sumOfVolumeAveragingValues()
-{
-   vector<double>& vxSum = sumVaVxMatrix.getDataVector();
-   vector<double>& vySum = sumVaVyMatrix.getDataVector();
-   vector<double>& vzSum = sumVaVzMatrix.getDataVector();
-   vector<double>& prSum = sumVaPrMatrix.getDataVector();
-
-   vector<double>& vxVa = vaVxMatrix.getDataVector();
-   vector<double>& vyVa = vaVyMatrix.getDataVector();
-   vector<double>& vzVa = vaVzMatrix.getDataVector();
-   vector<double>& prVa = vaPrMatrix.getDataVector();
-
-   int size = (int)vxVa.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      vxSum[i] += vxVa[i];
-      vySum[i] += vyVa[i];
-      vzSum[i] += vzVa[i];
-      prSum[i] += prVa[i];
-   }
-}
-void Averaging::meanOfVolumeAveragingValues(int numberOfTimeSteps)
-{
-   vector<double>& vxSum = sumVaVxMatrix.getDataVector();
-   vector<double>& vySum = sumVaVyMatrix.getDataVector();
-   vector<double>& vzSum = sumVaVzMatrix.getDataVector();
-   vector<double>& prSum = sumVaPrMatrix.getDataVector();
-
-   vector<double>& vxMean = vaMeanVxMatrix.getDataVector();
-   vector<double>& vyMean = vaMeanVyMatrix.getDataVector();
-   vector<double>& vzMean = vaMeanVzMatrix.getDataVector();
-   vector<double>& prMean = vaMeanPrMatrix.getDataVector();
-
-   int size = (int)vxSum.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      vxMean[i] = vxSum[i] / numberOfTimeSteps;
-      vyMean[i] = vySum[i] / numberOfTimeSteps;
-      vzMean[i] = vzSum[i] / numberOfTimeSteps;
-      prMean[i] = prSum[i] / numberOfTimeSteps;
-   }
-}
-void Averaging::volumeAveragingWithMPI(double l_real)
-{
-   //////////////////////////////////////////////////////////////////////////
-   //DEBUG
-   //////////////////////////////////////////////////////////////////////////
-   //vaVxMatrix = vxMatrix;
-   //vaVyMatrix = vyMatrix;
-   //vaVzMatrix = vzMatrix;
-   //vaPrMatrix = prMatrix;
-   //return;
-   //////////////////////////////////////////////////////////////////////////
-
-   vtkSmartPointer<vtkTimerLog> timer_averaging = vtkSmartPointer<vtkTimerLog>::New();
-
-   UBLOG(logINFO, "volume averaging: start");
-   timer_averaging->StartTimer();
-
-   double l = round(l_real / deltax);
-   UBLOG(logINFO, "l = " + UbSystem::toString(l));
-
-   UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) << " x " + UbSystem::toString(dimensions[1]) << " x " << UbSystem::toString(dimensions[2]));
-
-   int size = dimensions[0] * dimensions[1] * dimensions[2];
-   vaVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-
-   int numprocs, PID;
-   MPI_Comm_rank(MPI_COMM_WORLD, &PID);
-   MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
-
-   int part = (int)round((double)dimensions[0] / (double)numprocs);
-   UBLOG(logINFO, "part = " + UbSystem::toString(part));
-
-   int startX1 = part * PID;
-   int stopX1 = startX1 + part;
-   if (PID == numprocs - 1)
-   {
-      stopX1 = dimensions[0];
-   }
-
-   UBLOG(logINFO, "startX1 = " + UbSystem::toString(startX1));
-   UBLOG(logINFO, "stopX1 = " + UbSystem::toString(stopX1));
-
-   vtkSmartPointer<vtkTimerLog> timer_inloop = vtkSmartPointer<vtkTimerLog>::New();
-   //timer_inloop->StartTimer();
-   int p = 1000000;
-
-   //omp_set_num_threads(8);
-
-   //#pragma omp parallel num_threads(4) //private(i)
-   {
-      int i = 0;
-      
-#pragma omp parallel for //private(i)//scheduler(dynamic, 1)
-      for (int x3 = 0; x3 < dimensions[2]; x3++)
-         for (int x2 = 0; x2 < dimensions[1]; x2++)
-            for (int x1 = startX1; x1 < stopX1; x1++)
-            {
-               int ID = omp_get_thread_num();
-               if (i == 0 && ID == 0)
-               {
-                  timer_inloop->StartTimer();
-                  UBLOG(logINFO, "point id = " + UbSystem::toString(i));
-               }
-               double vx = 0.0;
-               double vy = 0.0;
-               double vz = 0.0;
-               double pr = 0.0;
-
-               int ll = (int)l;
-               int llz1 = ll;
-               if (x3 - ll < 0) llz1 = x3;
-               if (x3 + ll >= dimensions[2]) llz1 = dimensions[2] - 1 - x3;
-               double lQuadrat = l * l;
-               double lNorm = lQuadrat * lQuadrat * double(llz1) * double(llz1);
-
-               //#pragma omp parallel for
-               for (int z = -llz1; z <= +llz1; z++)
-                  for (int y = -ll; y <= +ll; y++)
-                     for (int x = -ll; x <= +ll; x++)
-                     {
-                        int xx = x1 + x;
-                        int yy = x2 + y;
-                        int zz = x3 + z;
-
-                        //correctIndex(xx, yy, zz);
-                        if (xx < 0)   xx = dimensions[0] + xx;
-                        if (xx >= dimensions[0]) xx = xx - dimensions[0];
-
-                        if (yy < 0)   yy = dimensions[1] + yy;
-                        if (yy >= dimensions[1]) yy = yy - dimensions[1];
-
-                        if (zz < 0) zz = 0;
-                        if (zz >= dimensions[2]) zz = dimensions[2] - 1;
-
-                        double mm = (G((double)x, l)*G((double)y, l)*G((double)z, (double)llz1)) / lNorm;
-                        double gamma = (double)geoMatrix(xx, yy, zz);
-
-                        vx += gamma*mm*vxMatrix(xx, yy, zz);
-                        vy += gamma*mm*vyMatrix(xx, yy, zz);
-                        vz += gamma*mm*vzMatrix(xx, yy, zz);
-                        pr += gamma*mm*prMatrix(xx, yy, zz);
-
-                     }
-
-               vaVxMatrix(x1, x2, x3) = vx;
-               vaVyMatrix(x1, x2, x3) = vy;
-               vaVzMatrix(x1, x2, x3) = vz;
-               vaPrMatrix(x1, x2, x3) = pr;
-
-               if (i%p == 0 && i != 0 && ID == 0)
-               {
-                  timer_inloop->StopTimer();
-                  UBLOG(logINFO, "point id = " + UbSystem::toString(i));
-                  UBLOG(logINFO, "time per " + UbSystem::toString(p) + " points: " + UbSystem::toString(timer_inloop->GetElapsedTime()) + " s");
-                  UBLOG(logINFO, "actual memory usage: " << UbSystem::toString(Utilities::getPhysMemUsedByMe() / 1e9) << " GByte");
-                  timer_inloop->StartTimer();
-                  UBLOG(logINFO, "thread id: " + UbSystem::toString(ID));
-                  UBLOG(logINFO, "Number of treads: " + UbSystem::toString(omp_get_num_threads()));
-               }
-               i++;
-            }
-   }
-
-   if (PID == 0)
-   {
-      vector<double> receiveBuffer;
-      for (int i = 1; i < numprocs; i++)
-      {
-         int count, lstartX1, lstopX1;
-         MPI_Status status;
-         MPI_Recv(&count, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         receiveBuffer.resize(count);
-         MPI_Recv(&receiveBuffer[0], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status);
-         MPI_Recv(&lstartX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         MPI_Recv(&lstopX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         int c = 0;
-         for (int x3 = 0; x3 < dimensions[2]; x3++)
-            for (int x2 = 0; x2 < dimensions[1]; x2++)
-               for (int x1 = lstartX1; x1 < lstopX1; x1++)
-               {
-                  vaVxMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaVyMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaVzMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaPrMatrix(x1, x2, x3) = receiveBuffer[c++];
-               }
-      }
-   }
-   else
-   {
-      vector<double> sendBuffer;
-      for (int x3 = 0; x3 < dimensions[2]; x3++)
-         for (int x2 = 0; x2 < dimensions[1]; x2++)
-            for (int x1 = startX1; x1 < stopX1; x1++)
-            {
-               sendBuffer.push_back(vaVxMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaVyMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaVzMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaPrMatrix(x1, x2, x3));
-            }
-      int count = (int)sendBuffer.size();
-      MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&sendBuffer[0], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&startX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&stopX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-   }
-
-   timer_averaging->StopTimer();
-   UBLOG(logINFO, "volume averaging: end");
-   UBLOG(logINFO, "volume averaging time: " + UbSystem::toString(timer_averaging->GetElapsedTime()) + " s");
-}
-void Averaging::volumeAveragingFluctStressWithMPI(double l_real)
-{
-   vtkSmartPointer<vtkTimerLog> timer_averaging = vtkSmartPointer<vtkTimerLog>::New();
-
-   UBLOG(logINFO, "volume averaging fluct and stress: start");
-   timer_averaging->StartTimer();
-
-   double l = round(l_real / deltax);
-   UBLOG(logINFO, "l = " + UbSystem::toString(l));
-
-   UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) << " x " + UbSystem::toString(dimensions[1]) << " x " << UbSystem::toString(dimensions[2]));
-
-   int size = dimensions[0] * dimensions[1] * dimensions[2];
-   vaFlucVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaFlucVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaFlucVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaFlucPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-
-   int numprocs, PID;
-   MPI_Comm_rank(MPI_COMM_WORLD, &PID);
-   MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
-
-   int part = (int)round((double)dimensions[0] / (double)numprocs);
-   UBLOG(logINFO, "part = " + UbSystem::toString(part));
-
-   int startX1 = part * PID;
-   int stopX1 = startX1 + part;
-   if (PID == numprocs - 1)
-   {
-      stopX1 = dimensions[0];
-   }
-
-   UBLOG(logINFO, "startX1 = " + UbSystem::toString(startX1));
-   UBLOG(logINFO, "stopX1 = " + UbSystem::toString(stopX1));
-
-   vtkSmartPointer<vtkTimerLog> timer_inloop = vtkSmartPointer<vtkTimerLog>::New();
-   //timer_inloop->StartTimer();
-   int p = 1000000;
-
-   //omp_set_num_threads(8);
-
-   //#pragma omp parallel num_threads(4) //private(i)
-   {
-      int i = 0;
-#pragma omp parallel for //private(i)//scheduler(dynamic, 1)
-      for (int x3 = 0; x3 < dimensions[2]; x3++)
-         for (int x2 = 0; x2 < dimensions[1]; x2++)
-            for (int x1 = startX1; x1 < stopX1; x1++)
-            {
-               int ID = omp_get_thread_num();
-               if (i == 0 && ID == 0)
-               {
-                  timer_inloop->StartTimer();
-                  UBLOG(logINFO, "point id = " + UbSystem::toString(i));
-               }
-               double flucvx = 0.0;
-               double flucvy = 0.0;
-               double flucvz = 0.0;
-               double flucpr = 0.0;
-               double stressXX = 0.0;
-               double stressYY = 0.0;
-               double stressZZ = 0.0;
-               double stressXY = 0.0;
-               double stressXZ = 0.0;
-               double stressYZ = 0.0;
-
-               int ll = (int)l;
-               int llz1 = ll;
-               if (x3 - ll < 0) llz1 = x3;
-               if (x3 + ll >= dimensions[2]) llz1 = dimensions[2] - 1 - x3;
-               double lQuadrat = l * l;
-               double lNorm = lQuadrat * lQuadrat * double(llz1) * double(llz1);
-
-               //#pragma omp parallel for
-               for (int z = -llz1; z <= +llz1; z++)
-                  for (int y = -ll; y <= +ll; y++)
-                     for (int x = -ll; x <= +ll; x++)
-                     {
-                        int xx = x1 + x;
-                        int yy = x2 + y;
-                        int zz = x3 + z;
-
-                        //correctIndex(xx, yy, zz);
-                        if (xx < 0)   xx = dimensions[0] + xx;
-                        if (xx >= dimensions[0]) xx = xx - dimensions[0];
-
-                        if (yy < 0)   yy = dimensions[1] + yy;
-                        if (yy >= dimensions[1]) yy = yy - dimensions[1];
-
-                        if (zz < 0)   zz = 0;
-                        if (zz >= dimensions[2]) zz = dimensions[2] - 1;
-
-                        double mm = (G((double)x, l)*G((double)y, l)*G((double)z, (double)llz1)) / lNorm;
-                        double gamma = (double)geoMatrix(xx, yy, zz);
-
-                        flucvx += gamma*mm*flucVxMatrix(xx, yy, zz);
-                        flucvy += gamma*mm*flucVyMatrix(xx, yy, zz);
-                        flucvz += gamma*mm*flucVzMatrix(xx, yy, zz);
-                        flucpr += gamma*mm*flucPrMatrix(xx, yy, zz);
-
-                        stressXX += gamma*mm*StressXX(xx, yy, zz);
-                        stressYY += gamma*mm*StressYY(xx, yy, zz);
-                        stressZZ += gamma*mm*StressZZ(xx, yy, zz);
-                        stressXY += gamma*mm*StressXY(xx, yy, zz);
-                        stressXZ += gamma*mm*StressXZ(xx, yy, zz);
-                        stressYZ += gamma*mm*StressYZ(xx, yy, zz);
-
-                     }
-
-               vaFlucVxMatrix(x1, x2, x3) = flucvx;
-               vaFlucVyMatrix(x1, x2, x3) = flucvy;
-               vaFlucVzMatrix(x1, x2, x3) = flucvz;
-               vaFlucPrMatrix(x1, x2, x3) = flucpr;
-
-               vaStressXX(x1, x2, x3) = stressXX;
-               vaStressYY(x1, x2, x3) = stressYY;
-               vaStressZZ(x1, x2, x3) = stressZZ;
-               vaStressXY(x1, x2, x3) = stressXY;
-               vaStressXZ(x1, x2, x3) = stressXZ;
-               vaStressYZ(x1, x2, x3) = stressYZ;
-
-               if (i%p == 0 && i != 0 && ID == 0)
-               {
-                  timer_inloop->StopTimer();
-                  UBLOG(logINFO, "point id = " + UbSystem::toString(i));
-                  UBLOG(logINFO, "time per " + UbSystem::toString(p) + " points: " + UbSystem::toString(timer_inloop->GetElapsedTime()) + " s");
-                  UBLOG(logINFO, "actual memory usage: " << UbSystem::toString(Utilities::getPhysMemUsedByMe() / 1e9) << " GByte");
-                  timer_inloop->StartTimer();
-                  UBLOG(logINFO, "thread id: " + UbSystem::toString(ID));
-                  UBLOG(logINFO, "Number of treads: " + UbSystem::toString(omp_get_num_threads()));
-               }
-               i++;
-            }
-   }
-
-   if (PID == 0)
-   {
-      vector<double> receiveBuffer;
-      for (int i = 1; i < numprocs; i++)
-      {
-         int count, lstartX1, lstopX1;
-         MPI_Status status;
-         MPI_Recv(&count, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         receiveBuffer.resize(count);
-         MPI_Recv(&receiveBuffer[0], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status);
-         MPI_Recv(&lstartX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         MPI_Recv(&lstopX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status);
-         int c = 0;
-         for (int x3 = 0; x3 < dimensions[2]; x3++)
-            for (int x2 = 0; x2 < dimensions[1]; x2++)
-               for (int x1 = lstartX1; x1 < lstopX1; x1++)
-               {
-                  vaFlucVxMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaFlucVyMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaFlucVzMatrix(x1, x2, x3) = receiveBuffer[c++];
-                  vaFlucPrMatrix(x1, x2, x3) = receiveBuffer[c++];
-
-                  vaStressXX(x1, x2, x3) = receiveBuffer[c++];
-                  vaStressYY(x1, x2, x3) = receiveBuffer[c++];
-                  vaStressZZ(x1, x2, x3) = receiveBuffer[c++];
-                  vaStressXY(x1, x2, x3) = receiveBuffer[c++];
-                  vaStressXZ(x1, x2, x3) = receiveBuffer[c++];
-                  vaStressYZ(x1, x2, x3) = receiveBuffer[c++];
-               }
-      }
-   }
-   else
-   {
-      vector<double> sendBuffer;
-      for (int x3 = 0; x3 < dimensions[2]; x3++)
-         for (int x2 = 0; x2 < dimensions[1]; x2++)
-            for (int x1 = startX1; x1 < stopX1; x1++)
-            {
-               sendBuffer.push_back(vaFlucVxMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaFlucVyMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaFlucVzMatrix(x1, x2, x3));
-               sendBuffer.push_back(vaFlucPrMatrix(x1, x2, x3));
-
-               sendBuffer.push_back(vaStressXX(x1, x2, x3));
-               sendBuffer.push_back(vaStressYY(x1, x2, x3));
-               sendBuffer.push_back(vaStressZZ(x1, x2, x3));
-               sendBuffer.push_back(vaStressXY(x1, x2, x3));
-               sendBuffer.push_back(vaStressXZ(x1, x2, x3));
-               sendBuffer.push_back(vaStressYZ(x1, x2, x3));
-            }
-      int count = (int)sendBuffer.size();
-      MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&sendBuffer[0], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&startX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-      MPI_Send(&stopX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
-   }
-
-   timer_averaging->StopTimer();
-   UBLOG(logINFO, "volume averaging fluct and stress: end");
-   UBLOG(logINFO, "volume averaging fluct and stress time: " + UbSystem::toString(timer_averaging->GetElapsedTime()) + " s");
-}
-void Averaging::writeVolumeAveragingValuesToBinaryFiles(std::string ffname, int timeStep)
-{
-   writeMatrixToBinaryFiles<double>(vaVxMatrix, ffname + "Vx" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaVyMatrix, ffname + "Vy" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaVzMatrix, ffname + "Vz" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaPrMatrix, ffname + "Pr" + UbSystem::toString(timeStep) + ".bin");
-}
-void Averaging::readVolumeAveragingValuesFromBinaryFiles(std::string fname, int timeStep)
-{
-   readMatrixFromBinaryFiles<double>(fname + "Vx" + UbSystem::toString(timeStep) + ".bin", vaVxMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vy" + UbSystem::toString(timeStep) + ".bin", vaVyMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vz" + UbSystem::toString(timeStep) + ".bin", vaVzMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Pr" + UbSystem::toString(timeStep) + ".bin", vaPrMatrix);
-}
-void Averaging::writeMeanVolumeAveragingValuesToBinaryFiles(std::string ffname)
-{
-   writeMatrixToBinaryFiles<double>(vaMeanVxMatrix, ffname + "Vx" + ".bin");
-   writeMatrixToBinaryFiles<double>(vaMeanVyMatrix, ffname + "Vy" + ".bin");
-   writeMatrixToBinaryFiles<double>(vaMeanVzMatrix, ffname + "Vz" + ".bin");
-   writeMatrixToBinaryFiles<double>(vaMeanPrMatrix, ffname + "Pr" + ".bin");
-}
-void Averaging::readMeanVolumeAveragingValuesFromBinaryFiles(std::string ffname)
-{
-   readMatrixFromBinaryFiles<double>(ffname + "Vx" + ".bin", vaMeanVxMatrix);
-   readMatrixFromBinaryFiles<double>(ffname + "Vy" + ".bin", vaMeanVyMatrix);
-   readMatrixFromBinaryFiles<double>(ffname + "Vz" + ".bin", vaMeanVzMatrix);
-   readMatrixFromBinaryFiles<double>(ffname + "Pr" + ".bin", vaMeanPrMatrix);
-}
-//void Averaging::readVolumeAveragingFluctStressValuesFromBinaryFiles(std::string fname, int timeStep)
-//{
-//   readMatrixFromBinaryFiles<double>(fname + "fluctVx" + UbSystem::toString(timeStep) + ".bin", vaFlucVxMatrix);
-//   readMatrixFromBinaryFiles<double>(fname + "fluctVy" + UbSystem::toString(timeStep) + ".bin", vaFlucVyMatrix);
-//   readMatrixFromBinaryFiles<double>(fname + "fluctVz" + UbSystem::toString(timeStep) + ".bin", vaFlucVzMatrix);
-//   readMatrixFromBinaryFiles<double>(fname + "fluctPr" + UbSystem::toString(timeStep) + ".bin", vaFlucPrMatrix);
-//
-//   readMatrixFromBinaryFiles<double>(fname + "stressXX" + UbSystem::toString(timeStep) + ".bin", vaStressXX);
-//   readMatrixFromBinaryFiles<double>(fname + "stressYY" + UbSystem::toString(timeStep) + ".bin", vaStressYY);
-//   readMatrixFromBinaryFiles<double>(fname + "stressZZ" + UbSystem::toString(timeStep) + ".bin", vaStressZZ);
-//   readMatrixFromBinaryFiles<double>(fname + "stressXY" + UbSystem::toString(timeStep) + ".bin", vaStressXY);
-//   readMatrixFromBinaryFiles<double>(fname + "stressXZ" + UbSystem::toString(timeStep) + ".bin", vaStressXZ);
-//   readMatrixFromBinaryFiles<double>(fname + "stressYZ" + UbSystem::toString(timeStep) + ".bin", vaStressYZ);
-//}
-
-//------------------------------ fluctuations -----------------------
-void Averaging::initFluctuations()
-{
-   flucVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   flucVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   flucVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   flucPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaFlucVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaFlucVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaFlucVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaFlucPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::initSumOfVaFluctuations()
-{
-   sumVaFlucVx.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaFlucVy.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaFlucVz.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaFlucPr.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::initMeanOfVaFluctuations()
-{
-   meanVaFlucVx.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaFlucVy.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaFlucVz.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaFlucPr.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::fluctuationsStress()
-{
-   vector<double>& vxF = vxMatrix.getDataVector();
-   vector<double>& vyF = vyMatrix.getDataVector();
-   vector<double>& vzF = vzMatrix.getDataVector();
-   vector<double>& prF = prMatrix.getDataVector();
-
-   vector<double>& vxMean = vaMeanVxMatrix.getDataVector();
-   vector<double>& vyMean = vaMeanVyMatrix.getDataVector();
-   vector<double>& vzMean = vaMeanVzMatrix.getDataVector();
-   vector<double>& prMean = vaMeanPrMatrix.getDataVector();
-
-   vector<double>& vxFluc = flucVxMatrix.getDataVector();
-   vector<double>& vyFluc = flucVyMatrix.getDataVector();
-   vector<double>& vzFluc = flucVzMatrix.getDataVector();
-   vector<double>& prFluc = flucPrMatrix.getDataVector();
-
-   vector<double>& XXStress = StressXX.getDataVector();
-   vector<double>& YYStress = StressYY.getDataVector();
-   vector<double>& ZZStress = StressZZ.getDataVector();
-   vector<double>& XYStress = StressXY.getDataVector();
-   vector<double>& XZStress = StressXZ.getDataVector();
-   vector<double>& YZStress = StressYZ.getDataVector();
-
-   int size = (int)vxF.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      vxFluc[i] = vxF[i] - vxMean[i];
-      vyFluc[i] = vyF[i] - vyMean[i];
-      vzFluc[i] = vzF[i] - vzMean[i];
-      prFluc[i] = prF[i] - prMean[i];
-
-      XXStress[i] = vxFluc[i] * vxFluc[i];
-      YYStress[i] = vyFluc[i] * vyFluc[i];
-      ZZStress[i] = vzFluc[i] * vzFluc[i];
-      XYStress[i] = vxFluc[i] * vyFluc[i];
-      XZStress[i] = vxFluc[i] * vzFluc[i];
-      YZStress[i] = vyFluc[i] * vzFluc[i];
-   }
-}
-void Averaging::fluctuationsStress2()
-{
-   vector<double>& vxVa = vaVxMatrix.getDataVector();
-   vector<double>& vyVa = vaVyMatrix.getDataVector();
-   vector<double>& vzVa = vaVzMatrix.getDataVector();
-   vector<double>& prVa = vaPrMatrix.getDataVector();
-
-   vector<double>& vxMean = vaMeanVxMatrix.getDataVector();
-   vector<double>& vyMean = vaMeanVyMatrix.getDataVector();
-   vector<double>& vzMean = vaMeanVzMatrix.getDataVector();
-   vector<double>& prMean = vaMeanPrMatrix.getDataVector();
-
-   vector<double>& vxFluc = vaFlucVxMatrix.getDataVector();
-   vector<double>& vyFluc = vaFlucVyMatrix.getDataVector();
-   vector<double>& vzFluc = vaFlucVzMatrix.getDataVector();
-   vector<double>& prFluc = vaFlucPrMatrix.getDataVector();
-
-   vector<double>& XXStress = vaStressXX.getDataVector();
-   vector<double>& YYStress = vaStressYY.getDataVector();
-   vector<double>& ZZStress = vaStressZZ.getDataVector();
-   vector<double>& XYStress = vaStressXY.getDataVector();
-   vector<double>& XZStress = vaStressXZ.getDataVector();
-   vector<double>& YZStress = vaStressYZ.getDataVector();
-
-   int size = (int)vxVa.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      vxFluc[i] = vxVa[i] - vxMean[i];
-      vyFluc[i] = vyVa[i] - vyMean[i];
-      vzFluc[i] = vzVa[i] - vzMean[i];
-      prFluc[i] = prVa[i] - prMean[i];
-
-      XXStress[i] = vxFluc[i] * vxFluc[i];
-      YYStress[i] = vyFluc[i] * vyFluc[i];
-      ZZStress[i] = vzFluc[i] * vzFluc[i];
-      XYStress[i] = vxFluc[i] * vyFluc[i];
-      XZStress[i] = vxFluc[i] * vzFluc[i];
-      YZStress[i] = vyFluc[i] * vzFluc[i];
-   }
-}
-
-
-void Averaging::sumOfVaFluctuations()
-{
-   static int counter = 0;
-   vector<double>& vxFluc = vaFlucVxMatrix.getDataVector();
-   vector<double>& vyFluc = vaFlucVyMatrix.getDataVector();
-   vector<double>& vzFluc = vaFlucVzMatrix.getDataVector();
-   vector<double>& prFluc = vaFlucPrMatrix.getDataVector();
-
-   vector<double>& SumFlucVx = sumVaFlucVx.getDataVector();
-   vector<double>& SumFlucVy = sumVaFlucVy.getDataVector();
-   vector<double>& SumFlucVz = sumVaFlucVz.getDataVector();
-   vector<double>& SumFlucPr = sumVaFlucPr.getDataVector();
-
-   int size = (int)vxFluc.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      SumFlucVx[i] += vxFluc[i];
-      SumFlucVy[i] += vyFluc[i];
-      SumFlucVz[i] += vzFluc[i];
-      SumFlucPr[i] += prFluc[i];
-      counter++;
-   }
-
-}
-void Averaging::meanOfVaFluctuations(int numberOfTimeSteps)
-{
-   vector<double>& MeanFlucVx = meanVaFlucVx.getDataVector();
-   vector<double>& MeanFlucVy = meanVaFlucVy.getDataVector();
-   vector<double>& MeanFlucVz = meanVaFlucVz.getDataVector();
-   vector<double>& MeanFlucPr = meanVaFlucPr.getDataVector();
-
-   vector<double>& SumFlucVx = sumVaFlucVx.getDataVector();
-   vector<double>& SumFlucVy = sumVaFlucVy.getDataVector();
-   vector<double>& SumFlucVz = sumVaFlucVz.getDataVector();
-   vector<double>& SumFlucPr = sumVaFlucPr.getDataVector();
-
-   int size = (int)SumFlucVx.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      MeanFlucVx[i] = SumFlucVx[i] / numberOfTimeSteps;
-      MeanFlucVy[i] = SumFlucVy[i] / numberOfTimeSteps;
-      MeanFlucVz[i] = SumFlucVz[i] / numberOfTimeSteps;
-      MeanFlucPr[i] = SumFlucPr[i] / numberOfTimeSteps;
-   }
-}
-void Averaging::writeVaFluctuationsToBinaryFiles(std::string fname, int timeStep)
-{
-   writeMatrixToBinaryFiles<double>(vaFlucVxMatrix, fname + "Vx" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaFlucVyMatrix, fname + "Vy" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaFlucVzMatrix, fname + "Vz" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaFlucPrMatrix, fname + "Pr" + UbSystem::toString(timeStep) + ".bin");
-}
-void Averaging::readVaFluctuationsFromBinaryFiles(std::string fname, int timeStep)
-{
-   readMatrixFromBinaryFiles<double>(fname + "Vx" + UbSystem::toString(timeStep) + ".bin", vaFlucVxMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vy" + UbSystem::toString(timeStep) + ".bin", vaFlucVyMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Vz" + UbSystem::toString(timeStep) + ".bin", vaFlucVzMatrix);
-   readMatrixFromBinaryFiles<double>(fname + "Pr" + UbSystem::toString(timeStep) + ".bin", vaFlucPrMatrix);
-}
-void Averaging::initMeanOfVolumeAveragedValues()
-{
-   meanVaFlucVx.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaFlucVy.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaFlucVz.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaFlucPr.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-
-   meanVaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::sumVolumeAveragedValues()
-{
-   static int counter = 0;
-   vector<double>& vxFluc = vaFlucVxMatrix.getDataVector();
-   vector<double>& vyFluc = vaFlucVyMatrix.getDataVector();
-   vector<double>& vzFluc = vaFlucVzMatrix.getDataVector();
-   vector<double>& prFluc = vaFlucPrMatrix.getDataVector();
-
-   vector<double>& sumFlucVx = meanVaFlucVx.getDataVector();
-   vector<double>& sumFlucVy = meanVaFlucVy.getDataVector();
-   vector<double>& sumFlucVz = meanVaFlucVz.getDataVector();
-   vector<double>& sumFlucPr = meanVaFlucPr.getDataVector();
-
-   vector<double>& sumStressXX = meanVaStressXX.getDataVector();
-   vector<double>& sumStressYY = meanVaStressYY.getDataVector();
-   vector<double>& sumStressZZ = meanVaStressZZ.getDataVector();
-   vector<double>& sumStressXY = meanVaStressXY.getDataVector();
-   vector<double>& sumStressXZ = meanVaStressXZ.getDataVector();
-   vector<double>& sumStressYZ = meanVaStressYZ.getDataVector();
-
-   int size = (int)vxFluc.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      sumFlucVx[i] += vxFluc[i];
-      sumFlucVy[i] += vyFluc[i];
-      sumFlucVz[i] += vzFluc[i];
-      sumFlucPr[i] += prFluc[i];
-
-      sumStressXX[i] += vxFluc[i] * vxFluc[i];
-      sumStressYY[i] += vyFluc[i] * vyFluc[i];
-      sumStressZZ[i] += vzFluc[i] * vzFluc[i];
-      sumStressXY[i] += vxFluc[i] * vyFluc[i];
-      sumStressXZ[i] += vxFluc[i] * vzFluc[i];
-      sumStressYZ[i] += vyFluc[i] * vzFluc[i];
-
-      counter++;
-   }
-}
-void Averaging::computeVolumeAveragedValues(int numberOfTimeSteps)
-{
-   vector<double>& meanFlucVx = meanVaFlucVx.getDataVector();
-   vector<double>& meanFlucVy = meanVaFlucVy.getDataVector();
-   vector<double>& meanFlucVz = meanVaFlucVz.getDataVector();
-   vector<double>& meanFlucPr = meanVaFlucPr.getDataVector();
-
-   vector<double>& meanStressXX = meanVaStressXX.getDataVector();
-   vector<double>& meanStressYY = meanVaStressYY.getDataVector();
-   vector<double>& meanStressZZ = meanVaStressZZ.getDataVector();
-   vector<double>& meanStressXY = meanVaStressXY.getDataVector();
-   vector<double>& meanStressXZ = meanVaStressXZ.getDataVector();
-   vector<double>& meanStressYZ = meanVaStressYZ.getDataVector();
-
-   int size = (int)meanFlucVx.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      meanFlucVx[i] = meanFlucVx[i] / numberOfTimeSteps;
-      meanFlucVy[i] = meanFlucVy[i] / numberOfTimeSteps;
-      meanFlucVz[i] = meanFlucVz[i] / numberOfTimeSteps;
-      meanFlucPr[i] = meanFlucPr[i] / numberOfTimeSteps;
-
-      meanStressXX[i] = meanStressXX[i] / numberOfTimeSteps;
-      meanStressYY[i] = meanStressYY[i] / numberOfTimeSteps;
-      meanStressZZ[i] = meanStressZZ[i] / numberOfTimeSteps;
-      meanStressXY[i] = meanStressXY[i] / numberOfTimeSteps;
-      meanStressXZ[i] = meanStressXZ[i] / numberOfTimeSteps;
-      meanStressYZ[i] = meanStressYZ[i] / numberOfTimeSteps;
-   }
-}
-void Averaging::writeVolumeAveragedValuesToBinaryFiles(std::string fname)
-{
-   writeMatrixToBinaryFiles<double>(meanVaFlucVx, fname + "Vx" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaFlucVy, fname + "Vy" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaFlucVz, fname + "Vz" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaFlucPr, fname + "Pr" + ".bin");
-
-   writeMatrixToBinaryFiles<double>(meanVaStressXX, fname + "XX" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaStressYY, fname + "YY" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaStressZZ, fname + "ZZ" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaStressXY, fname + "XY" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaStressXZ, fname + "XZ" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaStressYZ, fname + "YZ" + ".bin");
-}
-void Averaging::readVolumeAveragedValuesFromBinaryFiles(std::string fname)
-{
-   readMatrixFromBinaryFiles<double>(fname + "Vx" + ".bin", meanVaFlucVx);
-   readMatrixFromBinaryFiles<double>(fname + "Vy" + ".bin", meanVaFlucVy);
-   readMatrixFromBinaryFiles<double>(fname + "Vz" + ".bin", meanVaFlucVz);
-   readMatrixFromBinaryFiles<double>(fname + "Pr" + ".bin", meanVaFlucPr);
-
-   readMatrixFromBinaryFiles<double>(fname + "XX" + ".bin", meanVaStressXX);
-   readMatrixFromBinaryFiles<double>(fname + "YY" + ".bin", meanVaStressYY);
-   readMatrixFromBinaryFiles<double>(fname + "ZZ" + ".bin", meanVaStressZZ);
-   readMatrixFromBinaryFiles<double>(fname + "XY" + ".bin", meanVaStressXY);
-   readMatrixFromBinaryFiles<double>(fname + "XZ" + ".bin", meanVaStressXZ);
-   readMatrixFromBinaryFiles<double>(fname + "YZ" + ".bin", meanVaStressYZ);
-}
-void Averaging::writeMeanVaFluctuationsToBinaryFiles(std::string fname)
-{
-   writeMatrixToBinaryFiles<double>(meanVaFlucVx, fname + "Vx" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaFlucVy, fname + "Vy" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaFlucVz, fname + "Vz" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaFlucPr, fname + "Pr" + ".bin");
-}
-void Averaging::readMeanVaFluctuationsFromBinaryFiles(std::string fname)
-{
-   readMatrixFromBinaryFiles<double>(fname + "Vx" + ".bin", meanVaFlucVx);
-   readMatrixFromBinaryFiles<double>(fname + "Vy" + ".bin", meanVaFlucVy);
-   readMatrixFromBinaryFiles<double>(fname + "Vz" + ".bin", meanVaFlucVz);
-   readMatrixFromBinaryFiles<double>(fname + "Pr" + ".bin", meanVaFlucPr);
-}
-void Averaging::writeMeanOfVaFluctuationsToImageFile(std::string output)
-{
-   array < CbArray3D<double>, 4 > matrix = { meanVaFlucVx, meanVaFlucVy, meanVaFlucVz, meanVaFlucPr };
-   writeMatrixToImageFile(output, matrix);
-}
-void Averaging::writeFluctuationsToImageFile(std::string output)
-{
-   array < CbArray3D<double>, 4 > matrix = { flucVxMatrix, flucVyMatrix, flucVzMatrix, flucPrMatrix };
-   writeMatrixToImageFile(output, matrix);
-}
-void Averaging::writeVaFluctuationsToImageFile(std::string output)
-{
-   array < CbArray3D<double>, 4 > matrix = { vaFlucVxMatrix, vaFlucVyMatrix, vaFlucVzMatrix, vaFlucPrMatrix };
-   writeMatrixToImageFile(output, matrix);
-}
-
-//----------------------------- stress -----------------------------
-void Averaging::initStresses()
-{
-   StressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   StressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   StressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   StressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   StressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   StressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   vaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::initSumOfVaStresses()
-{
-   sumVaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   sumVaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::initMeanOfVaStresses()
-{
-   meanVaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-   meanVaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0);
-}
-void Averaging::sumOfVaStresses()
-{
-   vector<double>& XXStress = vaStressXX.getDataVector();
-   vector<double>& YYStress = vaStressYY.getDataVector();
-   vector<double>& ZZStress = vaStressZZ.getDataVector();
-   vector<double>& XYStress = vaStressXY.getDataVector();
-   vector<double>& XZStress = vaStressXZ.getDataVector();
-   vector<double>& YZStress = vaStressYZ.getDataVector();
-
-   vector<double>& XXSum = sumVaStressXX.getDataVector();
-   vector<double>& YYSum = sumVaStressYY.getDataVector();
-   vector<double>& ZZSum = sumVaStressZZ.getDataVector();
-   vector<double>& XYSum = sumVaStressXY.getDataVector();
-   vector<double>& XZSum = sumVaStressXZ.getDataVector();
-   vector<double>& YZSum = sumVaStressYZ.getDataVector();
-                           
-   int size = (int)XXStress.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      XXSum[i] += XXStress[i];
-      YYSum[i] += YYStress[i];
-      ZZSum[i] += ZZStress[i];
-      XYSum[i] += XYStress[i];
-      XZSum[i] += XZStress[i];
-      YZSum[i] += YZStress[i];
-   }
-}
-void Averaging::meanOfVaStresses(int numberOfTimeSteps)
-{
-   vector<double>& XXSum = sumVaStressXX.getDataVector();
-   vector<double>& YYSum = sumVaStressYY.getDataVector();
-   vector<double>& ZZSum = sumVaStressZZ.getDataVector();
-   vector<double>& XYSum = sumVaStressXY.getDataVector();
-   vector<double>& XZSum = sumVaStressXZ.getDataVector();
-   vector<double>& YZSum = sumVaStressYZ.getDataVector();
-
-   vector<double>& XXMean = meanVaStressXX.getDataVector();
-   vector<double>& YYMean = meanVaStressYY.getDataVector();
-   vector<double>& ZZMean = meanVaStressZZ.getDataVector();
-   vector<double>& XYMean = meanVaStressXY.getDataVector();
-   vector<double>& XZMean = meanVaStressXZ.getDataVector();
-   vector<double>& YZMean = meanVaStressYZ.getDataVector();
-
-   int size = (int)XXSum.size();
-
-   for (int i = 0; i < size; i++)
-   {
-      XXMean[i] = XXSum[i] / numberOfTimeSteps;
-      YYMean[i] = YYSum[i] / numberOfTimeSteps;
-      ZZMean[i] = ZZSum[i] / numberOfTimeSteps;
-      XYMean[i] = XYSum[i] / numberOfTimeSteps;
-      XZMean[i] = XZSum[i] / numberOfTimeSteps;
-      YZMean[i] = YZSum[i] / numberOfTimeSteps;
-   }
-}
-void Averaging::writeVaStressesToBinaryFiles(std::string fname, int timeStep)
-{
-   writeMatrixToBinaryFiles<double>(vaStressXX, fname + "XX" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaStressYY, fname + "YY" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaStressZZ, fname + "ZZ" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaStressXY, fname + "XY" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaStressXZ, fname + "XZ" + UbSystem::toString(timeStep) + ".bin");
-   writeMatrixToBinaryFiles<double>(vaStressYZ, fname + "YZ" + UbSystem::toString(timeStep) + ".bin");
-}
-void Averaging::readVaStressesFromBinaryFiles(std::string fname, int timeStep)
-{
-   readMatrixFromBinaryFiles<double>(fname + "XX" + UbSystem::toString(timeStep) + ".bin", vaStressXX);
-   readMatrixFromBinaryFiles<double>(fname + "YY" + UbSystem::toString(timeStep) + ".bin", vaStressYY);
-   readMatrixFromBinaryFiles<double>(fname + "ZZ" + UbSystem::toString(timeStep) + ".bin", vaStressZZ);
-   readMatrixFromBinaryFiles<double>(fname + "XY" + UbSystem::toString(timeStep) + ".bin", vaStressXY);
-   readMatrixFromBinaryFiles<double>(fname + "XZ" + UbSystem::toString(timeStep) + ".bin", vaStressXZ);
-   readMatrixFromBinaryFiles<double>(fname + "YZ" + UbSystem::toString(timeStep) + ".bin", vaStressYZ);
-}
-void Averaging::writeMeanVaStressesToBinaryFiles(std::string fname)
-{
-   writeMatrixToBinaryFiles<double>(meanVaStressXX, fname + "XX" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaStressYY, fname + "YY" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaStressZZ, fname + "ZZ" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaStressXY, fname + "XY" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaStressXZ, fname + "XZ" + ".bin");
-   writeMatrixToBinaryFiles<double>(meanVaStressYZ, fname + "YZ" + ".bin");
-}
-void Averaging::readMeanVaStressesFromBinaryFiles(std::string fname)
-{
-   readMatrixFromBinaryFiles<double>(fname + "XX" + ".bin", meanVaStressXX);
-   readMatrixFromBinaryFiles<double>(fname + "YY" + ".bin", meanVaStressYY);
-   readMatrixFromBinaryFiles<double>(fname + "ZZ" + ".bin", meanVaStressZZ);
-   readMatrixFromBinaryFiles<double>(fname + "XY" + ".bin", meanVaStressXY);
-   readMatrixFromBinaryFiles<double>(fname + "XZ" + ".bin", meanVaStressXZ);
-   readMatrixFromBinaryFiles<double>(fname + "YZ" + ".bin", meanVaStressYZ);
-}
-
-void Averaging::writeMeanOfVaStressesToImageFile(std::string ffname)
-{
-   array < CbArray3D<double>, 4 > matrix = { meanVaStressXX, meanVaStressYY, meanVaStressZZ, meanVaStressXY };
-   writeMatrixToImageFile(ffname, matrix);
-}
-
-//------------------------------------ planar --------------------------
-void Averaging::initPlanarAveraging()
-{
-   PlanarVx.resize(dimensions[2], 0);
-   PlanarVy.resize(dimensions[2], 0);
-   PlanarVz.resize(dimensions[2], 0);
-   PlanarPr.resize(dimensions[2], 0);
-
-   PlanarFlucVx.resize(dimensions[2], 0);
-   PlanarFlucVy.resize(dimensions[2], 0);
-   PlanarFlucVz.resize(dimensions[2], 0);
-   PlanarFlucPr.resize(dimensions[2], 0);
-
-   PlanarStressXX.resize(dimensions[2], 0);
-   PlanarStressYY.resize(dimensions[2], 0);
-   PlanarStressZZ.resize(dimensions[2], 0);
-   PlanarStressXY.resize(dimensions[2], 0);
-   PlanarStressXZ.resize(dimensions[2], 0);
-   PlanarStressYZ.resize(dimensions[2], 0);
-}
-void Averaging::planarAveraging()
-{
-   double numberof_XY_points = (double)dimensions[0] * (double)dimensions[1];
-
-   for (int z = 0; z < dimensions[2]; z++)
-   {
-      double sumVx = 0, sumVy = 0, sumVz = 0, sumPr = 0;
-      double sumFluctVx = 0, sumFluctVy = 0, sumFluctVz = 0, sumFluctPr = 0;
-      double sumStressXX = 0, sumStressYY = 0, sumStressZZ = 0, sumStressXY = 0, sumStressXZ = 0, sumStressYZ = 0;
-      for (int y = 0; y < dimensions[1]; y++)
-         for (int x = 0; x < dimensions[0]; x++)
-         {
-            sumVx += vaMeanVxMatrix(x, y, z);
-            sumVy += vaMeanVyMatrix(x, y, z);
-            sumVz += vaMeanVzMatrix(x, y, z);
-            sumPr += vaMeanPrMatrix(x, y, z);
-
-            sumFluctVx += meanVaFlucVx(x, y, z);
-            sumFluctVy += meanVaFlucVy(x, y, z);
-            sumFluctVz += meanVaFlucVz(x, y, z);
-            sumFluctPr += meanVaFlucPr(x, y, z);
-
-            sumStressXX += meanVaStressXX(x, y, z);
-            sumStressYY += meanVaStressYY(x, y, z);
-            sumStressZZ += meanVaStressZZ(x, y, z);
-            sumStressXY += meanVaStressXY(x, y, z);
-            sumStressXZ += meanVaStressXZ(x, y, z);
-            sumStressYZ += meanVaStressYZ(x, y, z);
-         }
-      PlanarVx[z] = sumVx / numberof_XY_points;
-      PlanarVy[z] = sumVy / numberof_XY_points;
-      PlanarVz[z] = sumVz / numberof_XY_points;
-      PlanarPr[z] = sumPr / numberof_XY_points;
-
-      PlanarFlucVx[z] = sumFluctVx / numberof_XY_points;
-      PlanarFlucVy[z] = sumFluctVy / numberof_XY_points;
-      PlanarFlucVz[z] = sumFluctVz / numberof_XY_points;
-      PlanarFlucPr[z] = sumFluctPr / numberof_XY_points;
-
-      PlanarStressXX[z] = sumStressXX / numberof_XY_points;
-      PlanarStressYY[z] = sumStressYY / numberof_XY_points;
-      PlanarStressZZ[z] = sumStressZZ / numberof_XY_points;
-      PlanarStressXY[z] = sumStressXY / numberof_XY_points;
-      PlanarStressXZ[z] = sumStressXZ / numberof_XY_points;
-      PlanarStressYZ[z] = sumStressYZ / numberof_XY_points;
-   }
-}
-   
-void Averaging::writeToCSV(std::string path, double origin, double deltax)
-   {
-      std::ofstream ostr;
-      std::string fname = path + ".csv";
-
-      ostr.open(fname.c_str(), std::ios_base::out);
-      if (!ostr)
-      {
-         ostr.clear();
-         std::string path = UbSystem::getPathFromString(fname);
-         if (path.size() > 0)
-         {
-            UbSystem::makeDirectory(path);
-            ostr.open(fname.c_str(), std::ios_base::out);
-         }
-         if (!ostr) throw UbException(UB_EXARGS, "couldn't open file " + fname);
-      }
-      ostr << "z;Vx;Vy;Vz;Pr;FlucVx;FlucVy;FlucVz;FlucPr;StressXX;StressYY;StressZZ;StressXY;StressXZ;StressYZ\n";
-      for (int i = 0; i < dimensions[2]; i++)
-      {
-         double z = origin + (deltax*i);
-         ostr << z << ";" << PlanarVx[i] << ";" << PlanarVy[i] << ";" << PlanarVz[i] << ";" << PlanarPr[i] << ";"  << PlanarFlucVx[i] << ";" << PlanarFlucVy[i] << ";" << PlanarFlucVz[i] << ";" << PlanarFlucPr[i] << ";" << PlanarStressXX[i] << ";" << PlanarStressYY[i] << ";" << PlanarStressZZ[i] << ";" << PlanarStressXY[i] << ";" << PlanarStressXZ[i] << ";" << PlanarStressYZ[i] << "\n";
-      }
-      ostr.close();
-   }
-
-   void Averaging::writeToCSV2(std::string path, double origin, double deltax)
-   {
-      std::ofstream ostr;
-      std::string fname = path + ".csv";
-
-      ostr.open(fname.c_str(), std::ios_base::out);
-      if (!ostr)
-      {
-         ostr.clear();
-         std::string path = UbSystem::getPathFromString(fname);
-         if (path.size() > 0)
-         {
-            UbSystem::makeDirectory(path);
-            ostr.open(fname.c_str(), std::ios_base::out);
-         }
-         if (!ostr) throw UbException(UB_EXARGS, "couldn't open file " + fname);
-      }
-      ostr << "z;Vx;Vy;Vz;Pr;StressXX;StressYY;StressZZ;StressXY;StressXZ;StressYZ\n";
-      for (int i = 0; i < dimensions[2]; i++)
-      {
-         double z = origin + (deltax*i);
-         ostr << z << ";" << PlanarVx[i] << ";" << PlanarVy[i] << ";" << PlanarVz[i] << ";" << PlanarPr[i] << ";"<< PlanarStressXX[i] << ";" << PlanarStressYY[i] << ";" << PlanarStressZZ[i] << ";" << PlanarStressXY[i] << ";" << PlanarStressXZ[i] << ";" << PlanarStressYZ[i] << "\n";
-      }
-      ostr.close();
-   }
\ No newline at end of file
diff --git a/apps/cpu/bChannelVA/Averaging.h b/apps/cpu/bChannelVA/Averaging.h
deleted file mode 100644
index ab9d7fc743218715f248de823ac966c3a0393ce1..0000000000000000000000000000000000000000
--- a/apps/cpu/bChannelVA/Averaging.h
+++ /dev/null
@@ -1,292 +0,0 @@
-#include <array>
-#include <fstream>
-#include "CbArray3D.h"
-#include "UbSystem.h"
-#include <vtkTimerLog.h>
-#include <vtkSmartPointer.h>
-
-
-class Averaging
-{
-public:
-   void createGeoMatrix(std::string dataNameG);
-   void writeGeoMatrixToImageFile(std::string output);
-   void readGeoMatrix(std::string dataNameG);
-   void writeGeoMatrixToBinaryFiles(std::string fname);
-   void readGeoMatrixFromBinaryFiles(std::string fname);
-
-   void createMQMatrix(std::string dataNameMQ);
-   void writeMqMatrixToBinaryFiles(std::string fname, int timeStep);
-   void readMqMatrixFromBinaryFiles(std::string fname, int timeStep);
-   void writeMqMatrixToImageFile(std::string output);
-   void writeVaMatrixToImageFile(std::string output);
-   void writeVaSumMatrixToImageFile(std::string output);
-   void writeMeanMatrixToImageFile(std::string output);
-   void writeMatrixToImageFile(std::string output, std::array<CbArray3D<double>, 4> matrix);
-
-   void initVolumeAveragingValues();
-   void initVolumeAveragingFluctStressValues();
-   void initMeanVolumeAveragingValues();
-   void initMeanVolumeAveragingFluctStressValues();
-   void volumeAveragingWithMPI(double l_real);
-   void volumeAveragingFluctStressWithMPI(double l_real);
-   void meanOfVolumeAveragingValues(int numberOfTimeSteps);
-   void sumOfVolumeAveragingValues();
-   void writeVolumeAveragingValuesToBinaryFiles(std::string ffname, int timeStep);
-   void readVolumeAveragingValuesFromBinaryFiles(std::string fname, int timeStep);
-   void writeMeanVolumeAveragingValuesToBinaryFiles(std::string ffname);
-   void readMeanVolumeAveragingValuesFromBinaryFiles(std::string fname);
-
-   void initFluctuations();
-   void initMeanOfVaFluctuations();
-   void initSumOfVaFluctuations();
-   void fluctuationsStress();
-   void fluctuationsStress2();
-   void meanOfVaFluctuations(int numberOfTimeSteps);
-   void sumOfVaFluctuations();
-   void writeMeanVaFluctuationsToBinaryFiles(std::string ffname);
-   void readMeanVaFluctuationsFromBinaryFiles(std::string ffname);
-   void writeMeanOfVaFluctuationsToImageFile(std::string ffname);
-   void writeFluctuationsToImageFile(std::string ffname);
-   void writeVaFluctuationsToImageFile(std::string ffname);
-
-   void initStresses();
-   void initSumOfVaStresses();
-   void initMeanOfVaStresses();
-   void sumOfVaStresses();
-   void meanOfVaStresses(int numberOfTimeSteps);
-   void writeVaStressesToBinaryFiles(std::string fname, int timeStep);
-   void readVaStressesFromBinaryFiles(std::string fname, int timeStep);
-   void writeMeanVaStressesToBinaryFiles(std::string ffname);
-   void readMeanVaStressesFromBinaryFiles(std::string ffname);
-   void writeMeanOfVaStressesToImageFile(std::string ffname);
-
-   void initPlanarAveraging();
-   void planarAveraging();
- 
-   void writeToCSV(std::string path, double origin, double deltax);
-   void writeToCSV2(std::string path, double origin, double deltax);
-
-   std::array<int, 3> getDimensions() const { return dimensions; }
-   void setDimensions(std::array<int, 3> val) { dimensions = val; }
-   void setExtent(std::array<int, 6> val) { geo_extent = val; }
-   void setOrigin(std::array<double, 3> val) { geo_origin = val; }
-   void setSpacing(std::array<double, 3> val) { geo_spacing = val; }
-   void setDeltaX(double val) { deltax = val; }
-
-   ////////////////////////////////////////////////////////////////
-   //new implimentation
-   ////////////////////////////////////////////////////////////////
-
-   ////////////////////////////////////////////////////////////////
-   //compute mean of MQ values
-   void initMeanMqValues();
-   void sumMqValues();
-   void computeMeanMqValues(int numberOfTimeSteps);
-   void writeMeanMqValuesToBinaryFiles(std::string fname);
-   void readMeanMqValuesFromBinaryFiles(std::string fname);
-   void volumeAveragingOfMeanMqValuesWithMPI(double l_real);
-   void writeVaMeanMqValuesToBinaryFiles(std::string fname);
-   void readVaMeanMqValuesFromBinaryFiles(std::string fname);
-
-   ////////////////////////////////////////////////////////////////
-   //compute fluctuations of MQ values
-   void initFluctuationsOfMqValues();
-   void computeFluctuationsOfMqValues();
-   void writeFluctuationsOfMqValuesToBinaryFiles(std::string fname, int timeStep);
-   void readFluctuationsOfMqValuesFromBinaryFiles(std::string fname, int timeStep);
-   void volumeAveragingOfFluctuationsWithMPI(double l_real);
-   void writeVaFluctuationsToBinaryFiles(std::string fname, int timeStep);
-   void readVaFluctuationsFromBinaryFiles(std::string fname, int timeStep);
-   void initMeanOfVolumeAveragedValues();
-   void sumVolumeAveragedValues();
-   void computeVolumeAveragedValues(int numberOfTimeSteps);
-   void writeVolumeAveragedValuesToBinaryFiles(std::string fname);
-   void readVolumeAveragedValuesFromBinaryFiles(std::string fname);
-
-   //////////////////////////////////////////////////////////////////
-   //compute volume average of time averaged data
-   void readTimeAveragedDataFromVtkFile(std::string dataNameMQ);
-   void volumeAveragingOfTimeAveragedDataWithMPI(double l_real);
-   void planarAveragingOfVaTaData();
-
-protected:
-   void getNodeIndexes(std::array<double, 3> x, std::array<int, 3>& ix);
-   double G(double x, double l);
-   
-   template <class T>
-   void writeMatrixToBinaryFiles(CbArray3D<T>& matrix, std::string fname);
-   template <class T>
-   void readMatrixFromBinaryFiles(std::string fname, CbArray3D<T>& matrix);
-private:
-   std::array<int, 3> dimensions;
-   std::array<int, 6> geo_extent;
-   std::array<double, 3> geo_origin;
-   std::array<double, 3> geo_spacing;
-   double deltax;
- 
-   CbArray3D<int> geoMatrix;
-
-   CbArray3D<double> vxMatrix;
-   CbArray3D<double> vyMatrix;
-   CbArray3D<double> vzMatrix;
-   CbArray3D<double> prMatrix;
-
-   CbArray3D<double> meanVxMatrix;
-   CbArray3D<double> meanVyMatrix;
-   CbArray3D<double> meanVzMatrix;
-   CbArray3D<double> meanPrMatrix;
-
-   CbArray3D<double> vaVxMatrix;
-   CbArray3D<double> vaVyMatrix;
-   CbArray3D<double> vaVzMatrix;
-   CbArray3D<double> vaPrMatrix;
-
-   CbArray3D<double> sumVaVxMatrix;
-   CbArray3D<double> sumVaVyMatrix;
-   CbArray3D<double> sumVaVzMatrix;
-   CbArray3D<double> sumVaPrMatrix;
-
-   CbArray3D<double> vaMeanVxMatrix;
-   CbArray3D<double> vaMeanVyMatrix;
-   CbArray3D<double> vaMeanVzMatrix;
-   CbArray3D<double> vaMeanPrMatrix;
-//----------------------------------------
-   CbArray3D<double> flucVxMatrix;
-   CbArray3D<double> flucVyMatrix;
-   CbArray3D<double> flucVzMatrix;
-   CbArray3D<double> flucPrMatrix;
-
-   CbArray3D<double> vaFlucVxMatrix;
-   CbArray3D<double> vaFlucVyMatrix;
-   CbArray3D<double> vaFlucVzMatrix;
-   CbArray3D<double> vaFlucPrMatrix;
-
-   CbArray3D<double> sumVaFlucVx;
-   CbArray3D<double> sumVaFlucVy;
-   CbArray3D<double> sumVaFlucVz;
-   CbArray3D<double> sumVaFlucPr;
-
-   CbArray3D<double> meanVaFlucVx;
-   CbArray3D<double> meanVaFlucVy;
-   CbArray3D<double> meanVaFlucVz;
-   CbArray3D<double> meanVaFlucPr;
-//----------------------------------------
-   CbArray3D<double> StressXX;
-   CbArray3D<double> StressYY;
-   CbArray3D<double> StressZZ;
-   CbArray3D<double> StressXY;
-   CbArray3D<double> StressXZ;
-   CbArray3D<double> StressYZ;
-
-   CbArray3D<double> vaStressXX;
-   CbArray3D<double> vaStressYY;
-   CbArray3D<double> vaStressZZ;
-   CbArray3D<double> vaStressXY;
-   CbArray3D<double> vaStressXZ;
-   CbArray3D<double> vaStressYZ;
-
-   CbArray3D<double> sumVaStressXX;
-   CbArray3D<double> sumVaStressYY;
-   CbArray3D<double> sumVaStressZZ;
-   CbArray3D<double> sumVaStressXY;
-   CbArray3D<double> sumVaStressXZ;
-   CbArray3D<double> sumVaStressYZ;
-
-   CbArray3D<double> meanVaStressXX;
-   CbArray3D<double> meanVaStressYY;
-   CbArray3D<double> meanVaStressZZ;
-   CbArray3D<double> meanVaStressXY;
-   CbArray3D<double> meanVaStressXZ;
-   CbArray3D<double> meanVaStressYZ;
-//----------------------------------------
-   std::vector<double> PlanarVx;
-   std::vector<double> PlanarVy;
-   std::vector<double> PlanarVz;
-   std::vector<double> PlanarPr;
-
-   std::vector<double> PlanarFlucVx;
-   std::vector<double> PlanarFlucVy;
-   std::vector<double> PlanarFlucVz;
-   std::vector<double> PlanarFlucPr;
-
-   std::vector<double> PlanarStressXX;
-   std::vector<double> PlanarStressYY;
-   std::vector<double> PlanarStressZZ;
-   std::vector<double> PlanarStressXY;
-   std::vector<double> PlanarStressXZ;
-   std::vector<double> PlanarStressYZ;
-};
-
-//////////////////////////////////////////////////////////////////////////
-template<class T> void Averaging::writeMatrixToBinaryFiles(CbArray3D<T>& matrix, std::string fname)
- {
-   vtkSmartPointer<vtkTimerLog> timer_write = vtkSmartPointer<vtkTimerLog>::New();
-
-   UBLOG(logINFO,"write matrix to " + fname + ": start");
-   timer_write->StartTimer();
-
-   std::ofstream ostr;
-   ostr.open(fname.c_str(), std::fstream::out | std::fstream::binary);
-   
-   if (!ostr)
-   {
-      ostr.clear();
-      std::string path = UbSystem::getPathFromString(fname);
-      if (path.size() > 0) { UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::fstream::binary); }
-      if (!ostr) throw UbException(UB_EXARGS, "couldn't open file " + fname);
-   }
-
-   std::vector<T>& vec = matrix.getDataVector();
-
-   ostr.write((char*)& vec[0], sizeof(T)*vec.size());
-   ostr.close();
-
-   UBLOG(logINFO,"write matrix: end");
-   timer_write->StopTimer();
-   UBLOG(logINFO,"write matrix time: " + UbSystem::toString(timer_write->GetElapsedTime()) + " s");
-}
-//////////////////////////////////////////////////////////////////////////
-template<class T> void Averaging::readMatrixFromBinaryFiles(std::string fname, CbArray3D<T>& matrix)
-{
-   vtkSmartPointer<vtkTimerLog> timer_write = vtkSmartPointer<vtkTimerLog>::New();
-
-   UBLOG(logINFO,"read matrix from " + fname + ": start");
-   timer_write->StartTimer();
-
-   FILE *file;
-   file = fopen(fname.c_str(), "rb");
-
-   if (file==NULL) { fputs("File error", stderr); exit(1); }
-
-   // obtain file size:
-   fseek(file, 0, SEEK_END);
-   long lSize = ftell(file)/sizeof(T);
-   rewind(file);
-
-   // allocate memory to contain the whole file:
-   //matrix.resize(lSize);
-   matrix.resize(dimensions[0], dimensions[1], dimensions[2]);
-   std::vector<T>& vec = matrix.getDataVector();
-
-   if (vec.size() == 0) { fputs("Memory error", stderr); exit(2); }
-
-   // copy the file into the buffer:
-   size_t result = fread(&vec[0], sizeof(T), lSize, file);
-   if (result != lSize) { fputs("Reading error", stderr); exit(3); }
-
-   fclose(file);
-
-   UBLOG(logINFO,"read matrix: end");
-   timer_write->StopTimer();
-   UBLOG(logINFO,"read matrix time: " + UbSystem::toString(timer_write->GetElapsedTime()) + " s");
-}
-//////////////////////////////////////////////////////////////////////////
-inline double Averaging::G(double x, double l)
-{
-   if (fabs(x) <= l)
-      return l - fabs(x);
-   else
-      return 0.0;
-}
-//////////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/apps/cpu/bChannelVA/CMakeLists.txt b/apps/cpu/bChannelVA/CMakeLists.txt
deleted file mode 100644
index 7c89234cb0f39640705b52ed5587988205b238d8..0000000000000000000000000000000000000000
--- a/apps/cpu/bChannelVA/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(bChannelVA)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(bchannelva BINARY)
diff --git a/apps/cpu/bChannelVA/ReadDataSet.cpp b/apps/cpu/bChannelVA/ReadDataSet.cpp
deleted file mode 100644
index 6244cb974c56ba21181e04b2fba1c71322f4c460..0000000000000000000000000000000000000000
--- a/apps/cpu/bChannelVA/ReadDataSet.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-#include "ReadDataSet.h"
-#include <vtkXMLReader.h>
-#include <vtkXMLUnstructuredGridReader.h>
-#include <vtkXMLPUnstructuredGridReader.h>
-#include <vtkXMLPolyDataReader.h>
-#include <vtkXMLPPolyDataReader.h>
-#include <vtkXMLStructuredGridReader.h>
-#include <vtkXMLRectilinearGridReader.h>
-//#include <vtkXMLHyperOctreeReader.h>
-#include <vtkXMLCompositeDataReader.h>
-#include <vtkXMLStructuredGridReader.h>
-#include <vtkXMLImageDataReader.h>
-#include <vtkDataSetReader.h>
-#include <vtkUnstructuredGrid.h>
-#include <vtkRectilinearGrid.h>
-//#include <vtkHyperOctree.h>
-#include <vtkImageData.h>
-#include <vtkPolyData.h>
-#include <vtkStructuredGrid.h>
-#include <vtkPointData.h>
-#include <vtkCellData.h>
-#include <vtkFieldData.h>
-#include <vtkCellTypes.h>
-#include <vtksys/SystemTools.hxx>
-
-vtkDataSet* ReadDataSet(std::string fileName)
-{
-   std::string extension =
-      vtksys::SystemTools::GetFilenameLastExtension(fileName);
-   // Dispatch based on the file extension
-   if (extension == ".vtu")
-   {
-      return ReadAnXMLFile<vtkXMLUnstructuredGridReader> (fileName);
-   }
-   else if (extension == ".vtp")
-   {
-      return ReadAnXMLFile<vtkXMLPolyDataReader> (fileName);
-   }
-   else if (extension == ".vts")
-   {
-      return ReadAnXMLFile<vtkXMLStructuredGridReader> (fileName);
-   }
-   else if (extension == ".vtr")
-   {
-      return ReadAnXMLFile<vtkXMLRectilinearGridReader> (fileName);
-   }
-   else if (extension == ".vti")
-   {
-      return ReadAnXMLFile<vtkXMLImageDataReader> (fileName);
-   }
-   //else if (extension == ".vto")
-   //{
-   //   return ReadAnXMLFile<vtkXMLHyperOctreeReader> (fileName);
-   //}
-   else if (extension == ".vtk")
-   {
-      return ReadAnXMLFile<vtkDataSetReader> (fileName);
-   }
-   else if (extension == ".pvtu")
-   {
-      return ReadAnXMLFile<vtkXMLPUnstructuredGridReader> (fileName);
-   }
-   else if (extension == ".pvtp")
-   {
-      return ReadAnXMLFile<vtkXMLPPolyDataReader> (fileName);
-   }
-   else
-   {
-      return NULL;
-   }
-}
-
diff --git a/apps/cpu/bChannelVA/ReadDataSet.h b/apps/cpu/bChannelVA/ReadDataSet.h
deleted file mode 100644
index 7186eafcee1b35fd21ccd60ee952442364b24aa7..0000000000000000000000000000000000000000
--- a/apps/cpu/bChannelVA/ReadDataSet.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <string>
-#include <vtkDataSet.h>
-#include <vtkSmartPointer.h>
-
-vtkDataSet* ReadDataSet(std::string fileName);
-
-//////////////////////////////////////////////////////////////////////////
-template<class TReader> 
-vtkDataSet* ReadAnXMLFile(std::string fileName)
-{
-   TReader* reader = TReader::New();
-   reader->SetFileName(fileName.c_str());
-   reader->Update();
-   reader->GetOutput()->Register(reader);
-   return vtkDataSet::SafeDownCast(reader->GetOutput());
-}
-//////////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/apps/cpu/bChannelVA/bChannelVA.cpp b/apps/cpu/bChannelVA/bChannelVA.cpp
deleted file mode 100644
index 363d02697f0fde6ff18736b07e09e1ac3310bea7..0000000000000000000000000000000000000000
--- a/apps/cpu/bChannelVA/bChannelVA.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-#include <iostream>
-#include <string>
-#include "VirtualFluids.h"
-
-#include "Averaging.h"
-
-using namespace std;
-
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   try
-   {
-      //Sleep(20000);
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      //Pheonix
-      //double deltaX = 1;
-      //double halfDeltaX = deltaX / 2.0;
-      //std::array<int, 3> dimensions = { 600 / (int)deltaX, 400 / (int)deltaX, 400 / (int)deltaX };
-      //std::array<double, 3> geo_origin = { halfDeltaX, halfDeltaX, halfDeltaX };
-      //std::array<double, 3> geo_spacing = { 1,1,1 };
-      //std::array<int, 6> geo_extent = { 0, dimensions[0] - 1, 0, dimensions[1] - 1, 0, dimensions[2] - 1 };
-      //double real_l = 40;
-      //double l = 40;
-
-      //int startTimeStep = 600000;
-      //int timeStep = 10000;
-      //int numberOfTimeSteps = 610000; //1200000;
-      //int numberOfSamples = numberOfTimeSteps / startTimeStep;
-      //int numberOfGridPoints = dimensions[0] * dimensions[1] * dimensions[2];
-
-
-      //Bombadil
-      string pathIn = "d:/temp/BreugemChannelAnisotrop2";
-      string pathOut = "d:/temp/BreugemChannelAnisotrop2";
-
-      double deltaX = 10;
-      double halfDeltaX = deltaX / 2.0;
-      std::array<int, 3> dimensions = { 600 / (int)deltaX, 400 / (int)deltaX, 400 / (int)deltaX };
-      std::array<double, 3> geo_origin = { halfDeltaX, halfDeltaX, halfDeltaX };
-      std::array<double, 3> geo_spacing = { 10,10,10 };
-      std::array<int, 6> geo_extent = { 0, dimensions[0] - 1, 0, dimensions[1] - 1, 0, dimensions[2] - 1 };
-      double real_l = 20;
-      double l = 20;
-
-      int startTimeStep = 60000;
-      int timeStep = 1000;
-      int numberOfTimeSteps = 65000;
-      int numberOfSamples = (numberOfTimeSteps - startTimeStep) / timeStep + 1;
-      int numberOfGridPoints = dimensions[0] * dimensions[1] * dimensions[2];
-
-      Averaging av;
-
-      av.setDimensions(dimensions);
-      av.setExtent(geo_extent);
-      av.setOrigin(geo_origin);
-      av.setSpacing(geo_spacing);
-      av.setDeltaX(deltaX);
-
-      //read geo matrix
-      //av.createGeoMatrix(pathIn + "/bc/bc0.pvtu");
-      //if (myid == 0) av.writeGeoMatrixToBinaryFiles(pathOut + "/va/geo/geomatrix.bin");
-      //av.readGeoMatrixFromBinaryFiles(pathOut + "/va/geo/geomatrix.bin");
-
-      ////read mq matrix
-      //for (int t = startTimeStep; t <= numberOfTimeSteps; t += timeStep)
-      //{
-      //   av.createMQMatrix(pathIn + "/mq/mq" + UbSystem::toString(t) + ".pvtu");
-      //   av.writeMqMatrixToBinaryFiles(pathOut + "/va/mq/mq", t);
-      //}
-
-      ////compute mq values
-      //av.initMeanMqValues();
-      //for (int t = startTimeStep; t <= numberOfTimeSteps; t += timeStep)
-      //{
-      //   av.readMqMatrixFromBinaryFiles(pathOut + "/va/mq/mq", t);
-      //   av.sumMqValues();
-      //}
-      //av.computeMeanMqValues(numberOfSamples);
-      //av.writeMeanMqValuesToBinaryFiles(pathOut + "/va/mean/mean");
-
-      //compute volume averaging of Reynolds averaged MQ values
-      //av.readMeanMqValuesFromBinaryFiles(pathOut + "/va/mean/mean");
-      //av.volumeAveragingOfMeanMqValuesWithMPI(l);
-      //av.writeVaMeanMqValuesToBinaryFiles(pathOut + "/va/vaMean/vaMean");
-
-      ////compute fluctuations
-      //av.readMeanMqValuesFromBinaryFiles(pathOut + "/va/mean/mean");
-      //av.initFluctuationsOfMqValues();
-      //for (int t = startTimeStep; t <= numberOfTimeSteps; t += timeStep)
-      //{
-      //   av.readMqMatrixFromBinaryFiles(pathOut + "/va/mq/mq", t);
-      //   av.computeFluctuationsOfMqValues();
-      //   av.writeFluctuationsOfMqValuesToBinaryFiles(pathOut + "/va/fluc/fluc", t);
-      //}
-
-      ////compute volume averaged fluctuations
-      //av.initMeanOfVolumeAveragedValues();
-      //for (int t = startTimeStep; t <= numberOfTimeSteps; t += timeStep)
-      //{
-      //   av.readFluctuationsOfMqValuesFromBinaryFiles(pathOut + "/va/fluc/fluc", t);
-      //   av.volumeAveragingOfFluctuationsWithMPI(l);
-      //   av.writeVaFluctuationsToBinaryFiles(pathOut + "/va/vaFluc/vaFluc", t);
-         //av.sumVolumeAveragedValues();
-      //}
-      //av.computeVolumeAveragedValues(numberOfSamples);
-      //av.writeVolumeAveragedValuesToBinaryFiles(pathOut + "/va/values/val");
-
-      //planar averaging
-      //av.initPlanarAveraging();
-      //av.planarAveraging();
-      //av.writeToCSV(pathOut + "/va/planar/planar", geo_origin[2], deltaX);
-
-      //read geo matrix
-      av.readGeoMatrixFromBinaryFiles(pathOut + "/va/geo/geomatrix.bin");
-
-      av.initMeanOfVolumeAveragedValues();
-
-      av.readTimeAveragedDataFromVtkFile(pathIn + "/tav/tav200000.pvtu");
-
-      av.volumeAveragingOfTimeAveragedDataWithMPI(l);
-
-      if (myid == 0) av.initPlanarAveraging();
-
-      if (myid == 0) av.planarAveragingOfVaTaData();
-
-      if (myid == 0) av.writeToCSV2(pathOut + "/va/planar/planar12", geo_origin[2], deltaX);
-   }
-   catch (const std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
\ No newline at end of file
diff --git a/apps/cpu/bKanal/CMakeLists.txt b/apps/cpu/bKanal/CMakeLists.txt
deleted file mode 100644
index 305be694406be5f61a51600d71203df5270359f5..0000000000000000000000000000000000000000
--- a/apps/cpu/bKanal/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(bKanal)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(bKanal BINARY)
diff --git a/apps/cpu/bKanal/HLRNb/bKanal.cpp b/apps/cpu/bKanal/HLRNb/bKanal.cpp
deleted file mode 100644
index 99b21eabf2a3c11b325fc3727e5acb795b394dfc..0000000000000000000000000000000000000000
--- a/apps/cpu/bKanal/HLRNb/bKanal.cpp
+++ /dev/null
@@ -1,683 +0,0 @@
-
-
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <sys/types.h> //mkdir rights
-#include <sys/stat.h> //mkdir
-#include <vfluids.h>
-
-using namespace std;
-
-
-void run(const char *cstr)
-{
-   try
-   {
-      string machine = QUOTEME(CAB_MACHINE);
-      UBLOG(logINFO,"Testcase BreugemChannel");
-      string pathname; 
-      string pathnameRestart;
-      string pathGeo;
-      int numOfThreads =1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      UbLog::reportingLevel() = logINFO;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-
-         pathname =        "/gfs1/work/niivfcpu/scratch/kucher/BKanaltest";
-         pathnameRestart = "/gfs1/work/niivfcpu/scratch/kucher/BKanaltest";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out";
-         //pathname =        "/work/koskuche/SFB880/BKanaltestRe260000Out";
-         //pathnameRestart = "/work/koskuche/SFB880/BKanaltestRe260000";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out";
-
-   	 pathGeo = "/home/koskuche/data/plate";
-         numOfThreads = 1;
-         availMem = 64.0e9;
-         logfile = true;
-
-         if (myid==0) 
-         {
-            const char* str = pathname.c_str();
-#if defined(__unix__)
-            int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-#endif 
-
-         }
-
-         if(myid ==0)
-         {
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-         }
-
-
-
-
-      //if(myid ==0 && logfile)
-      //{
-      UbLog::output_policy::setStream(logFilename.str());
-      //}
-
-      int baseLevel, refineLevel,nx[3],blocknx[3];
-      double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init;
-
-      //////////////////////////////////////////////////////////////////////////
-      //physik
-      //////////////////////////////////////////////////////////////////////////
-      Re            = 5500;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum  testen ob was passiert
-      velocity      = 0.01;  
-      vx1Init       = 0.01;  
-      rhoInit       = 0.0;
-      SimulationParametersPtr param = SimulationParameters::getInstanz();
-
-      int H=200;//200;//392;
-
-      //  nx[0]      =8;//ok mit 8// (int)(3.0*(double)H/8.0/8.0);//2;// (int)(0.3*(double)H/6.0/4.0);//das "/4" hier ist wegen der verfeinerung da! //l�nge
-      //  nx[1]      =8;//ok mit 8// (int)(2.0*(double)H/8.0/8.0);//2;// (int)(0.2*(double)H/6.0/4.0);//  //breite
-      nx[2]      = (int)(2.0*(double)H/5.0/8.0);// //h�he gebiet
-
-      //(3/2/2)-ratio:
-      nx[1]=nx[2];
-      nx[0]=15;
-
-      blocknx[0] = 15;//10;//5;
-      blocknx[1] = 15;//10;//5;
-      blocknx[2] = 15;//10;//5;
-
-      baseLevel   = 0;
-      refineLevel = 2;//1;////3;//3 soll 1 test;
-
-
-      ///////////////Weltabmessungen:
-      //double kanallaengeSI = ( 2.0*(double)H);
-      // double kanalbreiteSI = ( 1.0*(double)H);
-      double kanalhoeheSI  = ( 2.0*(double)H);
-
-      // double refinewidth1=kanalhoeheSI/10.0;
-
-      double fineNodeDx   = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb
-      double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte
-
-      double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte
-      double blockLengthx2 = blockLengthx1;
-      double blockLengthx3 = blockLengthx1;
-
-      double originX1 = 0.0;//-50.0*propellerDurchmesser;  //geowerte
-      double originX2 = 0.0;//-0.5*blockLengthx2*nx2;
-      double originX3 = 0.0;// minX3 + 0.5*fineNodeDx;
-
-      double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-      bool periodicx1 = true;
-      bool periodicx2 = true;
-      bool periodicx3 = false;
-
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double smagorinskiConstant = 0.18;
-
-
-      double rhoLB         = 0.0;
-
-      double rhoReal       = 1.0;
-      double nueReal  = 1;//0.000016;//0.015;
-
-      double hReal         = blocknx[2]*nx[2];//H*0.9;//0.0105;//<-m     1.05;//Plattendicke in cm(! cm nicht m !)
-      double uReal         = Re*nueReal/hReal;
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double csReal=343.0;
-      double Ma      = uReal/csReal;//Ma-Real!
-      //double csReal  = uReal/Ma;
-      double hLB     = hReal/coarseNodeDx;
-
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB));
-
-      double uLB           = uReal   * unitConverter->getFactorVelocityWToLb();
-      double nueLB         = nueReal * unitConverter->getFactorViscosityWToLb();
-      double timestep      = unitConverter->getFactorTimeLbToW(coarseNodeDx);
-
-      velocity = uLB;
-      // double viscosity =nueLB*1000.0;
-
-      Grid3DPtr grid(new Grid3D(comm));
-      //UbSchedulerPtr rSch(new UbScheduler(10000,100000,30000000000));//(50000,50000,1000000));
-      UbSchedulerPtr rSch(new UbScheduler(18000,268250,770000));//(50000,50000,1000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathnameRestart+"/checkpoints", RestartPostprocessor::BINARY);
-
-      //////////////////////////////////////////////////////////////////////////
-
-      std::string opt;
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if(/*(cstr== NULL)*/cstr!= NULL)
-      {
-         opt = std::string(cstr);
-
-         if(myid==0) {
-            UBLOG(logINFO,"Restart step: " << opt);
-            UBLOG(logINFO, "Restart=:" << pathnameRestart);
-         }
-
-         grid = rp.restart(UbSystem::stringTo<int>(opt));
-         rp.reconnect(grid);
-
-//          mu::Parser fctForcingX1, fctForcingX2, fctForcingX3;
-//          fctForcingX1.SetExpr("Fx1*dx");
-//          fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);
-// 
-//          SetForcingBlockVisitor forcingVisitor(fctForcingX1, fctForcingX2, fctForcingX3);
-//          grid->accept(forcingVisitor);
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-      }
-      else
-      {
-         //bounding box
-         double g_minX1 = originX1;
-         double g_minX2 = originX2;
-         double g_minX3 = originX3;
-
-         double g_maxX1 = originX1 + geoLength[0];
-         double g_maxX2 = originX2 + geoLength[1];
-         double g_maxX3 = originX3 + geoLength[2];
-
-         //set grid
-         grid->setDeltaX(coarseNodeDx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         grid->setPeriodicX1(periodicx1);
-         grid->setPeriodicX2(periodicx2);
-         grid->setPeriodicX3(periodicx3);
-
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-
-
-
-         //bottom and top solid bc
-         //iteractors
-         int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         double geoOverlap = coarseNodeDx;
-         GbCuboid3DPtr bottomBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, 
-            originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(bottomBCCuboid.get(), pathname+"/geo/bottomBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr bottomBCInteractor(new D3Q27Interactor(bottomBCCuboid,grid,bcObst,Interactor3D::SOLID)); 
-
-         GbCuboid3DPtr topBCCuboid(new GbCuboid3D(originX1-geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3+geoLength[2],//-coarseNodeDx*0.5, 
-            originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap));
-         if(myid == 0) GbSystem3D::writeGeoObject(topBCCuboid.get(), pathname+"/geo/topBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr topBCInteractor(new D3Q27Interactor(topBCCuboid,grid,bcObst,Interactor3D::SOLID)); 
-         //grid->addAndInitInteractor( bottomBCInteractor ); 
-         // grid->addAndInitInteractor( topBCInteractor ); 
-         //////////////////////////////////////////////////////////////////////////
-         if(myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            UBLOG(logINFO, "* Re            ="<<Re);
-            UBLOG(logINFO, "* Ma            ="<<Ma);
-            UBLOG(logINFO, "* uReal         ="<<uReal);
-            UBLOG(logINFO, "* nueReal       ="<<nueReal);
-            UBLOG(logINFO, "* nue           ="<<nueLB);
-            UBLOG(logINFO, "* velocity      ="<<uLB);
-            // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx);
-            //  UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx);
-            UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-            UBLOG(logINFO, "* cdx           ="<<coarseNodeDx);
-            UBLOG(logINFO, "* fdx           ="<<fineNodeDx);
-            UBLOG(logINFO, "* dx_base       ="<<coarseNodeDx<<" == "<<coarseNodeDx);
-            UBLOG(logINFO, "* dx_refine     ="<<fineNodeDx<<" == "<<fineNodeDx );
-            UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-            UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-            UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-            UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-            UBLOG(logINFO, "*****************************************");
-            UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString());
-            UBLOG(logINFO, "*****************************************");     
-         }
-
-         if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-
-         //////////////////////////////////////////////////////////////////////////
-         // refine
-         //////////////////////////////////////////////////////////////////////////
-         //GbCuboid3DPtr wallsX1X2maxRef1( new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI*0.95
-         //    , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax1(wallsX1X2maxRef1, 0,refineLevel-3);
-         //grid->accept(refineVisitormax1);
-         //
-         //GbCuboid3DPtr wallsX1X2minRef1(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI*0.55
-         //    , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.47));
-         // RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin1(wallsX1X2minRef1, 0,refineLevel-3);
-         // grid->accept(refineVisitormin1);
-
-         //   GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.98));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormax2);
-         //   GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormax2);
-
-         // GbCuboid3DPtr wallsX1X2maxRef3(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9995));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax3(wallsX1X2maxRef3, 0,refineLevel-1);
-         //grid->accept(refineVisitormax3);
-
-         //         GbCuboid3DPtr wallsX1X2minRefl3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.25));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitorminl3(wallsX1X2minRefl3, 0,refineLevel-3);
-         //grid->accept(refineVisitorminl3);
-         /////w�rfel unten version
-         //      GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.2));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormin2);
-
-         //   GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , kanalhoeheSI*0.04
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.18));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-1);
-         //grid->accept(refineVisitormin3);
-
-         //      GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , kanalhoeheSI*0.09
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.16));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel);
-         //grid->accept(refineVisitormin4);
-
-
-
-
-         /////w�rfel anfang version
-         //       GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.56));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormin2);
-
-         //   GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.55));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-2);
-         //grid->accept(refineVisitormin3);
-
-         //      GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.49
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1);
-         //grid->accept(refineVisitormin4);
-
-
-         /*           GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX1-3.0*geoOverlap
-         , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1));
-         RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1);
-         grid->accept(refineVisitormin4);*/
-
-         ////GbCuboid3DPtr refine1PlatteCube(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3
-         ////   , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-         ////RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP1(refine1PlatteCube, baseLevel, refineLevel-6);
-         ////grid->accept(refineAdapterP1);
-
-         //GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3*0.5
-         //  , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5);
-         //grid->accept(refineAdapterP2);
-
-         //GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D(  originX1-geoOverlap  , originX2-geoOverlap  , x3minMesh-H3*0.5
-         //   , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.5));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4);
-         //grid->accept(refineAdapterP3);
-
-         //GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D(   originX1-geoOverlap  , originX2-geoOverlap  , x3minMesh+deltaX3Platte*0.0
-         //   ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25));
-         //if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance());
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3);
-         //grid->accept(refineAdapterP4);
-
-         //GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D(   originX1-geoOverlap , originX2-geoOverlap  ,x3minMesh+deltaX3Platte*0.1/* x3minMesh+deltaX3Platte*0.8*/
-         //   ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.00375));
-         //if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance());
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2);
-         //grid->accept(refineAdapterP5);
-
-
-         //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX1-3.0*geoOverlap
-         //	  , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1));
-
-         GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.6/*0.55*/));
-
-         GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.49
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53));
-
-         GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.9
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2]));
-
-         GbCuboid3DPtr wallsX1X2maxRef1(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.95
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2]));
-
-         if (refineLevel > 0)
-         {
-
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(wallsX1X2minRef3, refineLevel-1);
-            refineHelper.addGbObject(wallsX1X2minRef4, refineLevel);
-            refineHelper.addGbObject(wallsX1X2maxRef2, refineLevel-1);
-            refineHelper.addGbObject(wallsX1X2maxRef1, refineLevel);
-
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         ///interactoren
-         //int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB
-         //D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         ///////w�rfel unten version ende
-         ////////////////////////////////////////////////////////////////////////////////
-         ////////PM grid
-         //Tempor�r:
-         //double  H=1.0;
-
-         vector<D3Q27InteractorPtr> D3Q27InteractorPtrarray;
-         ////////////////////////////////////////////////////////////////////////////////
-         double inflowCubeDx = coarseNodeDx;///(double)(1<<inflowCubeLevel);
-         double dpCubes=(double)H/20.0;//100.0; //30zum testen 100real
-         double offsetZgrid=H+0.5*inflowCubeDx;
-         double epschoch1drittel= 0.928318;
-         double abstandIn=2.0*dpCubes;
-         double c1oAbst=1.0/abstandIn;
-         for (int Nflowdir=0;Nflowdir<((nx[0]*blocknx[0]*c1oAbst)*coarseNodeDx); Nflowdir++)
-         {
-            // for (int Nhorizon=((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-2; Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-1-1; Nhorizon++)
-            // {
-            //  for (int Nhorizon=0;  Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++)
-            for (int Nhorizon=0;  Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.5-1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++)
-
-            {
-               for (int Nspanw=0; Nspanw<((nx[1]*blocknx[1]*c1oAbst)*coarseNodeDx); Nspanw++)
-               {
-                  // stringstream ss;
-                  //     ss<<"cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw;
-                  ////     //   //geoOrigin ist Mitte, nicht vordere Ecke -> korrigieren
-                  // int Nflowdir=1;
-                  //int Nhorizon=0;
-                  //int Nspanw=1;
-                  double xminCubes1=originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1);
-                  double xmaxCubes1=originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1);
-                  double xminCubes=std::max(xminCubes1,2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double xmaxCubes=std::min(xmaxCubes1,originX1+geoLength[0]-coarseNodeDx/pow(2.0,refineLevel));
-                  double yminCubes=std::max(originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double ymaxCubes=std::min(originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),originX2+geoLength[1]-coarseNodeDx/pow(2.0,refineLevel));
-                  double zminCubes=std::max(originX3+(Nhorizon*abstandIn)+4.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double zmaxCubes=std::min(originX3+(Nhorizon*abstandIn)+dpCubes+4.0*coarseNodeDx/pow(2.0,refineLevel-1),originX3+geoLength[2]-coarseNodeDx/pow(2.0,refineLevel));
-                  ////     /*GbCuboid3D  *rectTemp = new GbCuboid3D(originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, 
-                  ////										 originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx );
-                  ////*/
-                  ////  
-                  GbCuboid3DPtr rectTemp(new GbCuboid3D(xminCubes, yminCubes, zminCubes, 
-                     xmaxCubes, ymaxCubes, zmaxCubes));
-                  ////
-                  //     ostringstream ostrcubes;
-                  //	 ostrcubes<<pathname <<"/cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw;
-                  ////       
-                  ////   
-                  //// // GbSystem3D::writeGeoObject(rectTemp,outpath+cubeschar,WbWriterAvsASCII::getInstance());
-                  ////  GbSystem3D::writeGeoObject(rectTemp,ostrcubes.str(),WbWriterAvsASCII::getInstance()); //??
-                  //        ostrcubes.str("");
-                  //         ostrcubes.clear();
-
-                  ////  boost::shared_ptr<D3Q19AMRInteractor> interactorTemp( new D3Q19AMRInteractor( rectTemp,new D3Q19NoSlipBCAdapter(),AMR3DInteractor::SOLID,ss.str()) );
-                  //  //  interactorService.addInteractor(interactorTemp);
-                  D3Q27BoundaryConditionAdapterPtr cubeBCAdapter(new D3Q27NoSlipBCAdapter());                   //D3Q27DensityBCAdapter(rhoInit));
-                  D3Q27InteractorPtr cubeInteractor( new D3Q27Interactor(rectTemp,grid,cubeBCAdapter,Interactor3D::SOLID));
-                  D3Q27InteractorPtrarray.push_back(cubeInteractor);  
-
-
-               }
-            }}
-         ////////////////
-         //ende cubes
-         //////////
-         ////////////////////////////////////////////
-         //METIS
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         grid->accept( metisVisitor );
-
-
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-         SolidBlocksHelper sd(grid, comm);
-
-         sd.addInteractor(topBCInteractor);
-         sd.addInteractor(bottomBCInteractor);
-         for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i)
-         {
-            sd.addInteractor(D3Q27InteractorPtrarray[i]);
-         }
-         sd.deleteSolidBlocks();
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-         //////////////////////////////////////
-         grid->accept( metisVisitor );
-
-         sd.setTransBlocks(); 
-
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-         unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-
-         double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernel3DPtr kernel;
-         kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-
-         // LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(blocknx[0], blocknx[1], blocknx[2]));
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx[0], blocknx[1], blocknx[2],1));
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-         //	  //scheint neuerdings fuer absturz zu sorgen:
-         mu::Parser fctForcingX1;
-         fctForcingX1.SetExpr("Fx1*dx");
-         fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);//9.99685e-7);
-
-         kernel->setForcingX1(fctForcingX1);
-         kernel->setWithForcing(true); 
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-
-         grid->accept(kernelVisitor);
-
-         //////////////////////////////////
-         //undef nodes
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-         //////////////////////////////////////////
-
-         grid->addAndInitInteractor( bottomBCInteractor ); 
-         grid->addAndInitInteractor( topBCInteractor );
-         for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i)
-         {
-            grid->addAndInitInteractor( D3Q27InteractorPtrarray[i] ); 
-            char numstr[21];
-            sprintf(numstr, "%f", (double)i);
-            std::string pathObstCube = pathname+"/geo/obstBCCuboid"+ numstr;
-            if(myid == 0) GbSystem3D::writeGeoObject(D3Q27InteractorPtrarray[i]->getGbObject3D().get(),
-               /* rectTemp.get(),*/ pathObstCube, WbWriterVtkXmlASCII::getInstance());
-         }
-
-
-         UbTimer timer;
-         timer.start();
-         grid->accept( metisVisitor );
-
-         if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         if(myid == 0) ppblocks->update(0);
-         if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-
-         if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-         grid->accept( metisVisitor );
-         if(myid == 0) ppblocks->update(1);
-         ppblocks.reset();
-         if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-         //inflow
-         double uLB2=uLB;
-         double raiseVelSteps = 0;
-         vector<D3Q27BCFunction> velcX1BCs,dummy;
-
-         mu::Parser inflowProfile;
-         inflowProfile.SetExpr("uLB*0.9"); 
-
-         inflowProfile.DefineConst("uLB",uLB2);
-         velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST));
-
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition
-
-         //initialization of decompositions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor( nueLB,rhoInit);
-         initVisitor.setVx1(inflowProfile);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), 
-            unitConverter, comm, true));
-
-
-
-         grid->doPostProcess(0);
-         ppgeo.reset();
-         geoSch.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-
-      }
-
-
-
-      UbSchedulerPtr visSch(new UbScheduler());
-      //visSch->addSchedule(100,1,1000);
-      //visSch->addSchedule(1000,1000,10000);
-      //visSch->addSchedule(10000,10000,100000);
-      //visSch->addSchedule(20000,20000,800000);
-      //visSch->addSchedule(50,350000,350500);
-      //visSch->addSchedule(50,420000,420500);
-      //visSch->addSchedule(50000,420500,10000000);
-      visSch->addSchedule(2250,268250,592250);
-      UbSchedulerPtr resSch(new UbScheduler());
-      resSch->addSchedule(20000,20,10000000);
-      // AverageValuesPostprocessor       Avpp(grid,  pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/,resSch/*wann wird resettet*/,comm);
-      UbSchedulerPtr resSchRMS(new UbScheduler());
-      resSchRMS->addSchedule(40000,420000,10000000);
-      UbSchedulerPtr resSchMeans(new UbScheduler());
-      resSchMeans->addSchedule(40000,0,10000000);
-      UbSchedulerPtr stepAvSch(new UbScheduler());
-      int averageInterval=20;
-      stepAvSch->addSchedule(averageInterval,0,10000000);
-
-      double restart=10000; //??????????
-      AverageValuesPostprocessor       Avpp(grid,  pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), stepAvSch/*wann wird gemittelt*/, averageInterval,visSch/*wann wird rausgeschrieben*/,resSchMeans,resSchRMS/*wann wird resettet*/,comm,restart);
-
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 90050, 90080));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-
-      UbSchedulerPtr AdjForcSch(new UbScheduler());
-      AdjForcSch->addSchedule(100,20,20000000);
-      D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, 
-         originX1, originX2, kanalhoeheSI*0.55/*0.501*/, 
-         nx[0]*blockLengthx1, nx[1]*blockLengthx2, kanalhoeheSI*0.999));
-
-      double vxZiel=uLB;
-      //D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel*0.6, comm);//da am 11.3.2013 velo um 1/0.6 zu hoch
-      D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel, comm);//dies sollte zu Re=5500 fuehren..
-
-      UbSchedulerPtr visQSch(new UbScheduler());
-      visQSch->addSchedule(10,90100,90130);
-      QKritPostprocessor QKritPtr(grid,pathname+"/steps/Qq",WbWriterVtkXmlBinary::getInstance(),visQSch, comm);
-
-      mu::Parser decrViscFunc;
-      decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)");
-      decrViscFunc.DefineConst("nue0", nueLB);
-      decrViscFunc.DefineConst("c0", 0.1);
-      UbSchedulerPtr DecrViscSch(new UbScheduler());
-      DecrViscSch->addSchedule(10,10,1000);
-      DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm);
-
-      cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl;
-
-      double endTime = 520000;//20000001;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/bKanal/bKanal.cpp b/apps/cpu/bKanal/bKanal.cpp
deleted file mode 100644
index 33994ad706dc50ec1f1532f2b6b31fec84f4a520..0000000000000000000000000000000000000000
--- a/apps/cpu/bKanal/bKanal.cpp
+++ /dev/null
@@ -1,565 +0,0 @@
-
-
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <sys/types.h> //mkdir rights
-#include <sys/stat.h> //mkdir
-#include <vfluids.h>
-
-using namespace std;
-
-
-void run(const char *cstr)
-{
-   try
-   {
-      string pathname; 
-      string pathnameRestart;
-      int numOfThreads =1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      UbLog::reportingLevel() = logINFO;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      string machine = string(cstr);
-
-      if(machine == "my") 
-      {
-         pathname = "d:/temp/BKanal";
-         numOfThreads = 1;
-         logfile = false;
-         availMem = 10.0e9;
-      }
-      else if(machine == "Ludwig")      
-      {
-         pathname =        "/work/koskuche/SFB880/BKanal";
-         pathnameRestart = "/work/koskuche/SFB880/BKanal";
-         numOfThreads = 8;
-         availMem = 1.0e9;
-         logfile = true;
-
-         if (myid==0) 
-         {
-            const char* str = pathname.c_str();
-#if defined(__unix__)
-            int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-#endif 
-         }
-
-         if(myid ==0)
-         {
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-         }
-
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      if(myid ==0 && logfile)
-      {
-         UbLog::output_policy::setStream(logFilename.str());
-      }
-
-      UBLOG(logINFO,"Testcase BreugemChannel");
-
-      int baseLevel, refineLevel,nx[3],blocknx[3];
-      double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init;
-
-      //////////////////////////////////////////////////////////////////////////
-      //physik
-      //////////////////////////////////////////////////////////////////////////
-      Re            = 5500;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum  testen ob was passiert
-      velocity      = 0.01;  
-      vx1Init       = 0.01;  
-      rhoInit       = 0.0;
-      SimulationParametersPtr param = SimulationParameters::getInstanz();
-
-      int H=200;//200;//392;
-
-      //  nx[0]      =8;//ok mit 8// (int)(3.0*(double)H/8.0/8.0);//2;// (int)(0.3*(double)H/6.0/4.0);//das "/4" hier ist wegen der verfeinerung da! //l�nge
-      //  nx[1]      =8;//ok mit 8// (int)(2.0*(double)H/8.0/8.0);//2;// (int)(0.2*(double)H/6.0/4.0);//  //breite
-      nx[2]      = (int)(2.0*(double)H/5.0/8.0);// //h�he gebiet
-
-      //(3/2/2)-ratio:
-      nx[1]=nx[2];
-      nx[0]=15;
-
-      blocknx[0] = 15;//10;//5;
-      blocknx[1] = 15;//10;//5;
-      blocknx[2] = 15;//10;//5;
-
-      baseLevel   = 0;
-      refineLevel = 2;//1;////3;//3 soll 1 test;
-
-      ///////////////Weltabmessungen:
-      //double kanallaengeSI = ( 2.0*(double)H);
-      // double kanalbreiteSI = ( 1.0*(double)H);
-      double kanalhoeheSI  = ( 2.0*(double)H);
-
-      // double refinewidth1=kanalhoeheSI/10.0;
-
-      double fineNodeDx   = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb
-      double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte
-
-      double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte
-      double blockLengthx2 = blockLengthx1;
-      double blockLengthx3 = blockLengthx1;
-
-      double originX1 = 0.0;//-50.0*propellerDurchmesser;  //geowerte
-      double originX2 = 0.0;//-0.5*blockLengthx2*nx2;
-      double originX3 = 0.0;// minX3 + 0.5*fineNodeDx;
-
-      double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-      bool periodicx1 = true;
-      bool periodicx2 = true;
-      bool periodicx3 = false;
-
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double smagorinskiConstant = 0.18;
-
-
-      double rhoLB         = 0.0;
-
-      double rhoReal       = 1.0;
-      double nueReal  = 1;//0.000016;//0.015;
-
-      double hReal         = blocknx[2]*nx[2];//H*0.9;//0.0105;//<-m     1.05;//Plattendicke in cm(! cm nicht m !)
-      double uReal         = Re*nueReal/hReal;
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double csReal=343.0;
-      double Ma      = uReal/csReal;//Ma-Real!
-      //double csReal  = uReal/Ma;
-      double hLB     = hReal/coarseNodeDx;
-
-      //LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB));
-
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter());
-      double uLB          = velocity;
-      double nuLB         = (uLB*hLB)/Re;
-
-      //double uLB           = uReal   * unitConverter->getFactorVelocityWToLb();
-      //double nueLB         = nueReal * unitConverter->getFactorViscosityWToLb();
-      //double timestep      = unitConverter->getFactorTimeLbToW(coarseNodeDx);
-
-      //velocity = uLB;
-      // double viscosity =nueLB*1000.0;
-
-      Grid3DPtr grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(10000,10000,10000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY);
-      grid = rp.restart(-1);
-      //////////////////////////////////////////////////////////////////////////
-
-       if (grid->getTimeStep() == 0)
-       {
-         //bounding box
-         double g_minX1 = originX1;
-         double g_minX2 = originX2;
-         double g_minX3 = originX3;
-
-         double g_maxX1 = originX1 + geoLength[0];
-         double g_maxX2 = originX2 + geoLength[1];
-         double g_maxX3 = originX3 + geoLength[2];
-
-         //set grid
-         grid->setDeltaX(coarseNodeDx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         grid->setPeriodicX1(periodicx1);
-         grid->setPeriodicX2(periodicx2);
-         grid->setPeriodicX3(periodicx3);
-
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-
-         //bottom and top solid bc
-         //iteractors
-         int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         double geoOverlap = coarseNodeDx;
-         GbCuboid3DPtr bottomBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, 
-            originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(bottomBCCuboid.get(), pathname+"/geo/bottomBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr bottomBCInteractor(new D3Q27Interactor(bottomBCCuboid,grid,bcObst,Interactor3D::SOLID)); 
-
-         GbCuboid3DPtr topBCCuboid(new GbCuboid3D(originX1-geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3+geoLength[2],//-coarseNodeDx*0.5, 
-            originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap));
-         if(myid == 0) GbSystem3D::writeGeoObject(topBCCuboid.get(), pathname+"/geo/topBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr topBCInteractor(new D3Q27Interactor(topBCCuboid,grid,bcObst,Interactor3D::SOLID)); 
-         //grid->addAndInitInteractor( bottomBCInteractor ); 
-         // grid->addAndInitInteractor( topBCInteractor ); 
-         //////////////////////////////////////////////////////////////////////////
-         if(myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            UBLOG(logINFO, "* Re            ="<<Re);
-            UBLOG(logINFO, "* Ma            ="<<Ma);
-            UBLOG(logINFO, "* uReal         ="<<uReal);
-            UBLOG(logINFO, "* nueReal       ="<<nueReal);
-            UBLOG(logINFO, "* nue           ="<<nuLB);
-            UBLOG(logINFO, "* velocity      ="<<uLB);
-            // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx);
-            //  UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx);
-            UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-            UBLOG(logINFO, "* cdx           ="<<coarseNodeDx);
-            UBLOG(logINFO, "* fdx           ="<<fineNodeDx);
-            UBLOG(logINFO, "* dx_base       ="<<coarseNodeDx<<" == "<<coarseNodeDx);
-            UBLOG(logINFO, "* dx_refine     ="<<fineNodeDx<<" == "<<fineNodeDx );
-            UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-            UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-            UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-            UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-            UBLOG(logINFO, "*****************************************");
-/*            UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString());
-            UBLOG(logINFO, "*****************************************");  */   
-         }
-
-         if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-
-         //////////////////////////////////////////////////////////////////////////
-         // refine
-         //////////////////////////////////////////////////////////////////////////
-         GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.6/*0.55*/));
-
-         GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.49
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53));
-
-         GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.9
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2]));
-
-         GbCuboid3DPtr wallsX1X2maxRef1(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.95
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2]));
-
-         if (refineLevel > 0)
-         {
-
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(wallsX1X2minRef3, refineLevel-1);
-            refineHelper.addGbObject(wallsX1X2minRef4, refineLevel);
-            refineHelper.addGbObject(wallsX1X2maxRef2, refineLevel-1);
-            refineHelper.addGbObject(wallsX1X2maxRef1, refineLevel);
-
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         ///interactoren
-         //int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB
-         //D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         ///////w�rfel unten version ende
-         ////////////////////////////////////////////////////////////////////////////////
-         ////////PM grid
-         //Tempor�r:
-         //double  H=1.0;
-
-         vector<D3Q27InteractorPtr> D3Q27InteractorPtrarray;
-         ////////////////////////////////////////////////////////////////////////////////
-         double inflowCubeDx = coarseNodeDx;///(double)(1<<inflowCubeLevel);
-         double dpCubes=(double)H/20.0;//100.0; //30zum testen 100real
-         double offsetZgrid=H+0.5*inflowCubeDx;
-         double epschoch1drittel= 0.928318;
-         double abstandIn=2.0*dpCubes;
-         double c1oAbst=1.0/abstandIn;
-         for (int Nflowdir=0;Nflowdir<((nx[0]*blocknx[0]*c1oAbst)*coarseNodeDx); Nflowdir++)
-         {
-            // for (int Nhorizon=((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-2; Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-1-1; Nhorizon++)
-            // {
-            //  for (int Nhorizon=0;  Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++)
-            for (int Nhorizon=0;  Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.5-1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++)
-
-            {
-               for (int Nspanw=0; Nspanw<((nx[1]*blocknx[1]*c1oAbst)*coarseNodeDx); Nspanw++)
-               {
-                  // stringstream ss;
-                  //     ss<<"cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw;
-                  ////     //   //geoOrigin ist Mitte, nicht vordere Ecke -> korrigieren
-                  // int Nflowdir=1;
-                  //int Nhorizon=0;
-                  //int Nspanw=1;
-                  double xminCubes1=originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1);
-                  double xmaxCubes1=originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1);
-                  double xminCubes=std::max(xminCubes1,2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double xmaxCubes=std::min(xmaxCubes1,originX1+geoLength[0]-coarseNodeDx/pow(2.0,refineLevel));
-                  double yminCubes=std::max(originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double ymaxCubes=std::min(originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),originX2+geoLength[1]-coarseNodeDx/pow(2.0,refineLevel));
-                  double zminCubes=std::max(originX3+(Nhorizon*abstandIn)+4.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double zmaxCubes=std::min(originX3+(Nhorizon*abstandIn)+dpCubes+4.0*coarseNodeDx/pow(2.0,refineLevel-1),originX3+geoLength[2]-coarseNodeDx/pow(2.0,refineLevel));
-                  ////     /*GbCuboid3D  *rectTemp = new GbCuboid3D(originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, 
-                  ////										 originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx );
-                  ////*/
-                  ////  
-                  GbCuboid3DPtr rectTemp(new GbCuboid3D(xminCubes, yminCubes, zminCubes, 
-                     xmaxCubes, ymaxCubes, zmaxCubes));
-                  ////
-                  //     ostringstream ostrcubes;
-                  //	 ostrcubes<<pathname <<"/cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw;
-                  ////       
-                  ////   
-                  //// // GbSystem3D::writeGeoObject(rectTemp,outpath+cubeschar,WbWriterAvsASCII::getInstance());
-                  ////  GbSystem3D::writeGeoObject(rectTemp,ostrcubes.str(),WbWriterAvsASCII::getInstance()); //??
-                  //        ostrcubes.str("");
-                  //         ostrcubes.clear();
-
-                  ////  boost::shared_ptr<D3Q19AMRInteractor> interactorTemp( new D3Q19AMRInteractor( rectTemp,new D3Q19NoSlipBCAdapter(),AMR3DInteractor::SOLID,ss.str()) );
-                  //  //  interactorService.addInteractor(interactorTemp);
-                  D3Q27BoundaryConditionAdapterPtr cubeBCAdapter(new D3Q27NoSlipBCAdapter());                   //D3Q27DensityBCAdapter(rhoInit));
-                  D3Q27InteractorPtr cubeInteractor( new D3Q27Interactor(rectTemp,grid,cubeBCAdapter,Interactor3D::SOLID));
-                  D3Q27InteractorPtrarray.push_back(cubeInteractor);  
-
-
-               }
-            }}
-         ////////////////
-         //ende cubes
-         //////////
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(topBCInteractor);
-         intHelper.addInteractor(bottomBCInteractor);
-         for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i)
-         {
-            intHelper.addInteractor(D3Q27InteractorPtrarray[i]);
-         }
-         intHelper.selectBlocks();
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-         //////////////////////////////////////
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-         unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-
-         double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernel3DPtr kernel;
-         kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-
-         // LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(blocknx[0], blocknx[1], blocknx[2]));
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx[0], blocknx[1], blocknx[2],1));
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-         //	  //scheint neuerdings fuer absturz zu sorgen:
-         mu::Parser fctForcingX1;
-         fctForcingX1.SetExpr("Fx1*dx");
-         fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);//9.99685e-7);
-
-         kernel->setForcingX1(fctForcingX1);
-         kernel->setWithForcing(true); 
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-
-         grid->accept(kernelVisitor);
-
-         //////////////////////////////////
-         //undef nodes
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-         //////////////////////////////////////////
-         intHelper.setBC();
-
-         for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i)
-         {
-            grid->addAndInitInteractor( D3Q27InteractorPtrarray[i] ); 
-            char numstr[21];
-            sprintf(numstr, "%f", (double)i);
-            std::string pathObstCube = pathname+"/geo/obstBCCuboid"+ numstr;
-            if(myid == 0) GbSystem3D::writeGeoObject(D3Q27InteractorPtrarray[i]->getGbObject3D().get(),
-               /* rectTemp.get(),*/ pathObstCube, WbWriterVtkXmlASCII::getInstance());
-         }
-
-         UbTimer timer;
-         timer.start();
-         grid->accept( metisVisitor );
-
-         if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         if(myid == 0) ppblocks->update(0);
-         if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-         if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-         grid->accept( metisVisitor );
-         if(myid == 0) ppblocks->update(1);
-         ppblocks.reset();
-         if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-         //inflow
-         double uLB2=uLB;
-         double raiseVelSteps = 0;
-         vector<D3Q27BCFunction> velcX1BCs,dummy;
-
-         mu::Parser inflowProfile;
-         inflowProfile.SetExpr("uLB*0.9"); 
-
-         inflowProfile.DefineConst("uLB",uLB2);
-         velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST));
-
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition
-
-         //initialization of decompositions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoInit);
-         initVisitor.setVx1(inflowProfile);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), 
-            unitConverter,true));
-
-
-
-         grid->doPostProcess(0);
-         ppgeo.reset();
-         geoSch.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-
-      }
-            else
-            {
-               //set forcing
-               mu::Parser fctForcingX1, fctForcingX2, fctForcingX3;
-               fctForcingX1.SetExpr("Fx1*dx");
-               fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);
-               SetForcingBlockVisitor forcingVisitor(fctForcingX1, fctForcingX2, fctForcingX3);
-               grid->accept(forcingVisitor);
-
-               //set connectors
-               D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-               D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-               grid->accept( setConnsVisitor );
-               if(myid == 0) UBLOG(logINFO,"Restart - end"); 
-      }
-
-
-      UbSchedulerPtr visSch(new UbScheduler());
-      //visSch->addSchedule(100,1,1000);
-      //visSch->addSchedule(1000,1000,10000);
-      //visSch->addSchedule(10000,10000,100000);
-      //visSch->addSchedule(20000,20000,800000);
-      //visSch->addSchedule(50,350000,350500);
-      //visSch->addSchedule(50,420000,420500);
-      //visSch->addSchedule(50000,420500,10000000);
-      visSch->addSchedule(2250,140000,450001);
-      UbSchedulerPtr resSch(new UbScheduler());
-      resSch->addSchedule(20000,20,10000000);
-      UbSchedulerPtr resSchRMS(new UbScheduler());
-      resSchRMS->addSchedule(40000,420000,10000000);
-      UbSchedulerPtr resSchMeans(new UbScheduler());
-      resSchMeans->addSchedule(40000,0,10000000);
-      UbSchedulerPtr stepAvSch(new UbScheduler());
-      stepAvSch->addSchedule(20,0,10000000);
-      AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), 
-                                      visSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 90050, 90080));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-
-      UbSchedulerPtr AdjForcSch(new UbScheduler());
-      AdjForcSch->addSchedule(100,20,20000000);
-      D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, 
-         originX1, originX2, kanalhoeheSI*0.55/*0.501*/, 
-         nx[0]*blockLengthx1, nx[1]*blockLengthx2, kanalhoeheSI*0.999));
-
-      double vxZiel=uLB;
-      //D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel*0.6, comm);//da am 11.3.2013 velo um 1/0.6 zu hoch
-      D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel, comm);//dies sollte zu Re=5500 fuehren..
-
-      UbSchedulerPtr visQSch(new UbScheduler());
-      visQSch->addSchedule(10,90100,90130);
-      QCriterionPostprocessor QKritPtr(grid,pathname+"/steps/Qq",WbWriterVtkXmlBinary::getInstance(),visQSch, comm);
-
-      mu::Parser decrViscFunc;
-      decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)");
-      decrViscFunc.DefineConst("nue0", nuLB);
-      decrViscFunc.DefineConst("c0", 0.1);
-      UbSchedulerPtr DecrViscSch(new UbScheduler());
-      DecrViscSch->addSchedule(10,10,1000);
-      DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm);
-
-      cout << "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()<<endl;
-
-      double endTime = 2000000;//20000001;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/bKanal/sKanal/bKanal.cpp b/apps/cpu/bKanal/sKanal/bKanal.cpp
deleted file mode 100644
index 1048554fb5ffc1e91abc97cf2bbf7f4133533063..0000000000000000000000000000000000000000
--- a/apps/cpu/bKanal/sKanal/bKanal.cpp
+++ /dev/null
@@ -1,694 +0,0 @@
-
-
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <sys/types.h> //mkdir rights
-#include <sys/stat.h> //mkdir
-#include <vfluids.h>
-
-using namespace std;
-
-
-void run(const char *cstr)
-{
-   try
-   {
-      string machine = QUOTEME(CAB_MACHINE);
-      UBLOG(logINFO,"Testcase BreugemChannel");
-      string pathname; 
-      string pathnameRestart;
-      string pathGeo;
-      int numOfThreads =1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      UbLog::reportingLevel() = logINFO;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if(machine == "PIPPINNEU") 
-      {
-
-         pathname = "f:/temp/breugemKb";
-         //pathGeo = "c:/Data/plate";
-         numOfThreads = 1;
-         logfile = false;
-         availMem = 3.0e9;
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         pathname =        "/work/koskuche/SFB880/BKanaltest0Ref2up1812Ratio322f5nx15RestartQ";
-         pathnameRestart = "/work/koskuche/SFB880/BKanaltest0Ref2up1212Ratio322";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out";
-         //pathname =        "/work/koskuche/SFB880/BKanaltestRe260000Out";
-         //pathnameRestart = "/work/koskuche/SFB880/BKanaltestRe260000";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out";
-
-	pathGeo = "/home/koskuche/data/plate";
-         numOfThreads = 1;
-         availMem = 12.0e9;
-         logfile = true;
-
-         if (myid==0) 
-         {
-            const char* str = pathname.c_str();
-#if defined(__unix__)
-            int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-#endif 
-
-         }
-
-         if(myid ==0)
-         {
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-         }
-
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-
-
-      //if(myid ==0 && logfile)
-      //{
-      UbLog::output_policy::setStream(logFilename.str());
-      //}
-
-      int baseLevel, refineLevel,nx[3],blocknx[3];
-      double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init;
-
-      //////////////////////////////////////////////////////////////////////////
-      //physik
-      //////////////////////////////////////////////////////////////////////////
-      Re            = 5500;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum  testen ob was passiert
-      velocity      = 0.01;  
-      vx1Init       = 0.01;  
-      rhoInit       = 0.0;
-      SimulationParametersPtr param = SimulationParameters::getInstanz();
-
-      int H=200;//200;//392;
-
-      //  nx[0]      =8;//ok mit 8// (int)(3.0*(double)H/8.0/8.0);//2;// (int)(0.3*(double)H/6.0/4.0);//das "/4" hier ist wegen der verfeinerung da! //l�nge
-      //  nx[1]      =8;//ok mit 8// (int)(2.0*(double)H/8.0/8.0);//2;// (int)(0.2*(double)H/6.0/4.0);//  //breite
-      nx[2]      = (int)(2.0*(double)H/5.0/8.0);// //h�he gebiet
-
-      //(3/2/2)-ratio:
-      nx[1]=nx[2];
-      nx[0]=15;
-
-      blocknx[0] = 15;//10;//5;
-      blocknx[1] = 15;//10;//5;
-      blocknx[2] = 15;//10;//5;
-
-      baseLevel   = 0;
-      refineLevel = 2;//1;////3;//3 soll 1 test;
-
-
-      ///////////////Weltabmessungen:
-      //double kanallaengeSI = ( 2.0*(double)H);
-      // double kanalbreiteSI = ( 1.0*(double)H);
-      double kanalhoeheSI  = ( 2.0*(double)H);
-
-      // double refinewidth1=kanalhoeheSI/10.0;
-
-      double fineNodeDx   = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb
-      double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte
-
-      double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte
-      double blockLengthx2 = blockLengthx1;
-      double blockLengthx3 = blockLengthx1;
-
-      double originX1 = 0.0;//-50.0*propellerDurchmesser;  //geowerte
-      double originX2 = 0.0;//-0.5*blockLengthx2*nx2;
-      double originX3 = 0.0;// minX3 + 0.5*fineNodeDx;
-
-      double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-      bool periodicx1 = true;
-      bool periodicx2 = true;
-      bool periodicx3 = false;
-
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double smagorinskiConstant = 0.18;
-
-
-      double rhoLB         = 0.0;
-
-      double rhoReal       = 1.0;
-      double nueReal  = 1;//0.000016;//0.015;
-
-      double hReal         = blocknx[2]*nx[2];//H*0.9;//0.0105;//<-m     1.05;//Plattendicke in cm(! cm nicht m !)
-      double uReal         = Re*nueReal/hReal;
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double csReal=343.0;
-      double Ma      = uReal/csReal;//Ma-Real!
-      //double csReal  = uReal/Ma;
-      double hLB     = hReal/coarseNodeDx;
-
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB));
-
-      double uLB           = uReal   * unitConverter->getFactorVelocityWToLb();
-      double nueLB         = nueReal * unitConverter->getFactorViscosityWToLb();
-      double timestep      = unitConverter->getFactorTimeLbToW(coarseNodeDx);
-
-      velocity = uLB;
-      // double viscosity =nueLB*1000.0;
-
-      Grid3DPtr grid(new Grid3D(comm));
-      UbSchedulerPtr rSch(new UbScheduler(10000,100000,30000000000));//(50000,50000,1000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathnameRestart+"/checkpoints", RestartPostprocessor::BINARY);
-
-      //////////////////////////////////////////////////////////////////////////
-
-      std::string opt;
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if(/*(cstr== NULL)*/cstr!= NULL)
-      {
-         opt = std::string(cstr);
-
-         if(myid==0) {
-            UBLOG(logINFO,"Restart step: " << opt);
-            UBLOG(logINFO, "Restart=:" << pathnameRestart);
-         }
-
-         grid = rp.restart(UbSystem::stringTo<int>(opt));
-         rp.reconnect(grid);
-
-//          mu::Parser fctForcingX1, fctForcingX2, fctForcingX3;
-//          fctForcingX1.SetExpr("Fx1*dx");
-//          fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);
-// 
-//          SetForcingBlockVisitor forcingVisitor(fctForcingX1, fctForcingX2, fctForcingX3);
-//          grid->accept(forcingVisitor);
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-      }
-      else
-      {
-         //bounding box
-         double g_minX1 = originX1;
-         double g_minX2 = originX2;
-         double g_minX3 = originX3;
-
-         double g_maxX1 = originX1 + geoLength[0];
-         double g_maxX2 = originX2 + geoLength[1];
-         double g_maxX3 = originX3 + geoLength[2];
-
-         //set grid
-         grid->setDeltaX(coarseNodeDx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         grid->setPeriodicX1(periodicx1);
-         grid->setPeriodicX2(periodicx2);
-         grid->setPeriodicX3(periodicx3);
-
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-
-
-
-         //bottom and top solid bc
-         //iteractors
-         int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         double geoOverlap = coarseNodeDx;
-         GbCuboid3DPtr bottomBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, 
-            originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(bottomBCCuboid.get(), pathname+"/geo/bottomBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr bottomBCInteractor(new D3Q27Interactor(bottomBCCuboid,grid,bcObst,Interactor3D::SOLID)); 
-
-         GbCuboid3DPtr topBCCuboid(new GbCuboid3D(originX1-geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3+geoLength[2],//-coarseNodeDx*0.5, 
-            originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap));
-         if(myid == 0) GbSystem3D::writeGeoObject(topBCCuboid.get(), pathname+"/geo/topBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr topBCInteractor(new D3Q27Interactor(topBCCuboid,grid,bcObst,Interactor3D::SOLID)); 
-         //grid->addAndInitInteractor( bottomBCInteractor ); 
-         // grid->addAndInitInteractor( topBCInteractor ); 
-         //////////////////////////////////////////////////////////////////////////
-         if(myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            UBLOG(logINFO, "* Re            ="<<Re);
-            UBLOG(logINFO, "* Ma            ="<<Ma);
-            UBLOG(logINFO, "* uReal         ="<<uReal);
-            UBLOG(logINFO, "* nueReal       ="<<nueReal);
-            UBLOG(logINFO, "* nue           ="<<nueLB);
-            UBLOG(logINFO, "* velocity      ="<<uLB);
-            // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx);
-            //  UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx);
-            UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-            UBLOG(logINFO, "* cdx           ="<<coarseNodeDx);
-            UBLOG(logINFO, "* fdx           ="<<fineNodeDx);
-            UBLOG(logINFO, "* dx_base       ="<<coarseNodeDx<<" == "<<coarseNodeDx);
-            UBLOG(logINFO, "* dx_refine     ="<<fineNodeDx<<" == "<<fineNodeDx );
-            UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-            UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-            UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-            UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-            UBLOG(logINFO, "*****************************************");
-            UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString());
-            UBLOG(logINFO, "*****************************************");     
-         }
-
-         if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-
-         //////////////////////////////////////////////////////////////////////////
-         // refine
-         //////////////////////////////////////////////////////////////////////////
-         //GbCuboid3DPtr wallsX1X2maxRef1( new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI*0.95
-         //    , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax1(wallsX1X2maxRef1, 0,refineLevel-3);
-         //grid->accept(refineVisitormax1);
-         //
-         //GbCuboid3DPtr wallsX1X2minRef1(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI*0.55
-         //    , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.47));
-         // RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin1(wallsX1X2minRef1, 0,refineLevel-3);
-         // grid->accept(refineVisitormin1);
-
-         //   GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.98));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormax2);
-         //   GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormax2);
-
-         // GbCuboid3DPtr wallsX1X2maxRef3(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9995));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax3(wallsX1X2maxRef3, 0,refineLevel-1);
-         //grid->accept(refineVisitormax3);
-
-         //         GbCuboid3DPtr wallsX1X2minRefl3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.25));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitorminl3(wallsX1X2minRefl3, 0,refineLevel-3);
-         //grid->accept(refineVisitorminl3);
-         /////w�rfel unten version
-         //      GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.2));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormin2);
-
-         //   GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , kanalhoeheSI*0.04
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.18));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-1);
-         //grid->accept(refineVisitormin3);
-
-         //      GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , kanalhoeheSI*0.09
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.16));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel);
-         //grid->accept(refineVisitormin4);
-
-
-
-
-         /////w�rfel anfang version
-         //       GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.56));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormin2);
-
-         //   GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.55));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-2);
-         //grid->accept(refineVisitormin3);
-
-         //      GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.49
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1);
-         //grid->accept(refineVisitormin4);
-
-
-         /*           GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX1-3.0*geoOverlap
-         , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1));
-         RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1);
-         grid->accept(refineVisitormin4);*/
-
-         ////GbCuboid3DPtr refine1PlatteCube(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3
-         ////   , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-         ////RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP1(refine1PlatteCube, baseLevel, refineLevel-6);
-         ////grid->accept(refineAdapterP1);
-
-         //GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3*0.5
-         //  , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5);
-         //grid->accept(refineAdapterP2);
-
-         //GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D(  originX1-geoOverlap  , originX2-geoOverlap  , x3minMesh-H3*0.5
-         //   , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.5));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4);
-         //grid->accept(refineAdapterP3);
-
-         //GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D(   originX1-geoOverlap  , originX2-geoOverlap  , x3minMesh+deltaX3Platte*0.0
-         //   ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25));
-         //if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance());
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3);
-         //grid->accept(refineAdapterP4);
-
-         //GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D(   originX1-geoOverlap , originX2-geoOverlap  ,x3minMesh+deltaX3Platte*0.1/* x3minMesh+deltaX3Platte*0.8*/
-         //   ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.00375));
-         //if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance());
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2);
-         //grid->accept(refineAdapterP5);
-
-
-         //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX1-3.0*geoOverlap
-         //	  , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1));
-
-         GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.6/*0.55*/));
-
-         GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.49
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53));
-
-         GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.9
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2]));
-
-         GbCuboid3DPtr wallsX1X2maxRef1(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.95
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2]));
-
-         if (refineLevel > 0)
-         {
-
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(wallsX1X2minRef3, refineLevel-1);
-            refineHelper.addGbObject(wallsX1X2minRef4, refineLevel);
-            refineHelper.addGbObject(wallsX1X2maxRef2, refineLevel-1);
-            refineHelper.addGbObject(wallsX1X2maxRef1, refineLevel);
-
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         ///interactoren
-         //int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB
-         //D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         ///////w�rfel unten version ende
-         ////////////////////////////////////////////////////////////////////////////////
-         ////////PM grid
-         //Tempor�r:
-         //double  H=1.0;
-
-         vector<D3Q27InteractorPtr> D3Q27InteractorPtrarray;
-         ////////////////////////////////////////////////////////////////////////////////
-         double inflowCubeDx = coarseNodeDx;///(double)(1<<inflowCubeLevel);
-         double dpCubes=(double)H/20.0;//100.0; //30zum testen 100real
-         double offsetZgrid=H+0.5*inflowCubeDx;
-         double epschoch1drittel= 0.928318;
-         double abstandIn=2.0*dpCubes;
-         double c1oAbst=1.0/abstandIn;
-         for (int Nflowdir=0;Nflowdir<((nx[0]*blocknx[0]*c1oAbst)*coarseNodeDx); Nflowdir++)
-         {
-            // for (int Nhorizon=((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-2; Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-1-1; Nhorizon++)
-            // {
-            //  for (int Nhorizon=0;  Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++)
-            for (int Nhorizon=0;  Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.5-1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++)
-
-            {
-               for (int Nspanw=0; Nspanw<((nx[1]*blocknx[1]*c1oAbst)*coarseNodeDx); Nspanw++)
-               {
-                  // stringstream ss;
-                  //     ss<<"cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw;
-                  ////     //   //geoOrigin ist Mitte, nicht vordere Ecke -> korrigieren
-                  // int Nflowdir=1;
-                  //int Nhorizon=0;
-                  //int Nspanw=1;
-                  double xminCubes1=originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1);
-                  double xmaxCubes1=originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1);
-                  double xminCubes=std::max(xminCubes1,2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double xmaxCubes=std::min(xmaxCubes1,originX1+geoLength[0]-coarseNodeDx/pow(2.0,refineLevel));
-                  double yminCubes=std::max(originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double ymaxCubes=std::min(originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),originX2+geoLength[1]-coarseNodeDx/pow(2.0,refineLevel));
-                  double zminCubes=std::max(originX3+(Nhorizon*abstandIn)+4.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double zmaxCubes=std::min(originX3+(Nhorizon*abstandIn)+dpCubes+4.0*coarseNodeDx/pow(2.0,refineLevel-1),originX3+geoLength[2]-coarseNodeDx/pow(2.0,refineLevel));
-                  ////     /*GbCuboid3D  *rectTemp = new GbCuboid3D(originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, 
-                  ////										 originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx );
-                  ////*/
-                  ////  
-                  GbCuboid3DPtr rectTemp(new GbCuboid3D(xminCubes, yminCubes, zminCubes, 
-                     xmaxCubes, ymaxCubes, zmaxCubes));
-                  ////
-                  //     ostringstream ostrcubes;
-                  //	 ostrcubes<<pathname <<"/cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw;
-                  ////       
-                  ////   
-                  //// // GbSystem3D::writeGeoObject(rectTemp,outpath+cubeschar,WbWriterAvsASCII::getInstance());
-                  ////  GbSystem3D::writeGeoObject(rectTemp,ostrcubes.str(),WbWriterAvsASCII::getInstance()); //??
-                  //        ostrcubes.str("");
-                  //         ostrcubes.clear();
-
-                  ////  boost::shared_ptr<D3Q19AMRInteractor> interactorTemp( new D3Q19AMRInteractor( rectTemp,new D3Q19NoSlipBCAdapter(),AMR3DInteractor::SOLID,ss.str()) );
-                  //  //  interactorService.addInteractor(interactorTemp);
-                  D3Q27BoundaryConditionAdapterPtr cubeBCAdapter(new D3Q27NoSlipBCAdapter());                   //D3Q27DensityBCAdapter(rhoInit));
-                  D3Q27InteractorPtr cubeInteractor( new D3Q27Interactor(rectTemp,grid,cubeBCAdapter,Interactor3D::SOLID));
-                  D3Q27InteractorPtrarray.push_back(cubeInteractor);  
-
-
-               }
-            }}
-         ////////////////
-         //ende cubes
-         //////////
-         ////////////////////////////////////////////
-         //METIS
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         grid->accept( metisVisitor );
-
-
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-         SolidBlocksHelper sd(grid, comm);
-
-         sd.addInteractor(topBCInteractor);
-         sd.addInteractor(bottomBCInteractor);
-         for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i)
-         {
-            sd.addInteractor(D3Q27InteractorPtrarray[i]);
-         }
-         sd.deleteSolidBlocks();
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-         //////////////////////////////////////
-         grid->accept( metisVisitor );
-
-         sd.setTransBlocks(); 
-
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-         unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-
-         double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernel3DPtr kernel;
-         kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-
-         // LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(blocknx[0], blocknx[1], blocknx[2]));
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx[0], blocknx[1], blocknx[2],1));
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-         //	  //scheint neuerdings fuer absturz zu sorgen:
-         mu::Parser fctForcingX1;
-         fctForcingX1.SetExpr("Fx1*dx");
-         fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);//9.99685e-7);
-
-         kernel->setForcingX1(fctForcingX1);
-         kernel->setWithForcing(true); 
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-
-         grid->accept(kernelVisitor);
-
-         //////////////////////////////////
-         //undef nodes
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-         //////////////////////////////////////////
-
-         grid->addAndInitInteractor( bottomBCInteractor ); 
-         grid->addAndInitInteractor( topBCInteractor );
-         for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i)
-         {
-            grid->addAndInitInteractor( D3Q27InteractorPtrarray[i] ); 
-            char numstr[21];
-            sprintf(numstr, "%f", (double)i);
-            std::string pathObstCube = pathname+"/geo/obstBCCuboid"+ numstr;
-            if(myid == 0) GbSystem3D::writeGeoObject(D3Q27InteractorPtrarray[i]->getGbObject3D().get(),
-               /* rectTemp.get(),*/ pathObstCube, WbWriterVtkXmlASCII::getInstance());
-         }
-
-
-         UbTimer timer;
-         timer.start();
-         grid->accept( metisVisitor );
-
-         if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         if(myid == 0) ppblocks->update(0);
-         if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-
-         if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-         grid->accept( metisVisitor );
-         if(myid == 0) ppblocks->update(1);
-         ppblocks.reset();
-         if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-         //inflow
-         double uLB2=uLB;
-         double raiseVelSteps = 0;
-         vector<D3Q27BCFunction> velcX1BCs,dummy;
-
-         mu::Parser inflowProfile;
-         inflowProfile.SetExpr("uLB*0.9"); 
-
-         inflowProfile.DefineConst("uLB",uLB2);
-         velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST));
-
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition
-
-         //initialization of decompositions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor( nueLB,rhoInit);
-         initVisitor.setVx1(inflowProfile);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), 
-            unitConverter, comm, true));
-
-
-
-         grid->doPostProcess(0);
-         ppgeo.reset();
-         geoSch.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-
-      }
-
-
-
-      UbSchedulerPtr visSch(new UbScheduler());
-      //visSch->addSchedule(100,1,1000);
-      //visSch->addSchedule(1000,1000,10000);
-      //visSch->addSchedule(10000,10000,100000);
-      //visSch->addSchedule(20000,20000,800000);
-      //visSch->addSchedule(50,350000,350500);
-      //visSch->addSchedule(50,420000,420500);
-      //visSch->addSchedule(50000,420500,10000000);
-      visSch->addSchedule(2250,268250,450001);
-      UbSchedulerPtr resSch(new UbScheduler());
-      resSch->addSchedule(20000,20,10000000);
-      // AverageValuesPostprocessor       Avpp(grid,  pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/,resSch/*wann wird resettet*/,comm);
-      UbSchedulerPtr resSchRMS(new UbScheduler());
-      resSchRMS->addSchedule(40000,420000,10000000);
-      UbSchedulerPtr resSchMeans(new UbScheduler());
-      resSchMeans->addSchedule(40000,0,10000000);
-      UbSchedulerPtr stepAvSch(new UbScheduler());
-      int averageInterval=20;
-      stepAvSch->addSchedule(averageInterval,0,10000000);
-
-      double restart=10000; //??????????
-      AverageValuesPostprocessor       Avpp(grid,  pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), stepAvSch/*wann wird gemittelt*/, averageInterval,visSch/*wann wird rausgeschrieben*/,resSchMeans,resSchRMS/*wann wird resettet*/,comm,restart);
-
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 90050, 90080));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-
-      UbSchedulerPtr AdjForcSch(new UbScheduler());
-      AdjForcSch->addSchedule(100,20,20000000);
-      D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, 
-         originX1, originX2, kanalhoeheSI*0.55/*0.501*/, 
-         nx[0]*blockLengthx1, nx[1]*blockLengthx2, kanalhoeheSI*0.999));
-
-      double vxZiel=uLB;
-      //D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel*0.6, comm);//da am 11.3.2013 velo um 1/0.6 zu hoch
-      D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel, comm);//dies sollte zu Re=5500 fuehren..
-
-      UbSchedulerPtr visQSch(new UbScheduler());
-      visQSch->addSchedule(10,90100,90130);
-      QKritPostprocessor QKritPtr(grid,pathname+"/steps/Qq",WbWriterVtkXmlBinary::getInstance(),visQSch, comm);
-
-      mu::Parser decrViscFunc;
-      decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)");
-      decrViscFunc.DefineConst("nue0", nueLB);
-      decrViscFunc.DefineConst("c0", 0.1);
-      UbSchedulerPtr DecrViscSch(new UbScheduler());
-      DecrViscSch->addSchedule(10,10,1000);
-      DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm);
-
-      cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl;
-
-      double endTime = 2000000;//20000001;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/bKanal2/CMakeLists.txt b/apps/cpu/bKanal2/CMakeLists.txt
deleted file mode 100644
index c54f4ab348b51f05e4b16d498f1345e5c5cdbad0..0000000000000000000000000000000000000000
--- a/apps/cpu/bKanal2/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(bKanal2)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(bKanal2 BINARY)
diff --git a/apps/cpu/bKanal2/bKanal2.cpp b/apps/cpu/bKanal2/bKanal2.cpp
deleted file mode 100644
index ec632612596d14a747b48500d7436bbf4876f081..0000000000000000000000000000000000000000
--- a/apps/cpu/bKanal2/bKanal2.cpp
+++ /dev/null
@@ -1,466 +0,0 @@
-
-
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <sys/types.h> //mkdir rights
-#include <sys/stat.h> //mkdir
-#include <vfluids.h>
-
-using namespace std;
-
-
-void run(const char *cstr)
-{
-   try
-   {
-      string pathname; 
-      string pathnameRestart;
-      int numOfThreads =1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      UbLog::reportingLevel() = logINFO;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      string machine = string(cstr);
-
-      if(machine == "my") 
-      {
-         pathname = "d:/temp/BKanal";
-         numOfThreads = 4;
-         logfile = false;
-         availMem = 10.0e9;
-      }
-      else if(machine == "Ludwig")      
-      {
-         pathname =        "/work/koskuche/SFB880/BKanal";
-         pathnameRestart = "/work/koskuche/SFB880/BKanal";
-         numOfThreads = 8;
-         availMem = 1.0e9;
-         logfile = true;
-
-         if (myid==0) 
-         {
-            const char* str = pathname.c_str();
-#if defined(__unix__)
-            int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-#endif 
-         }
-
-         if(myid ==0)
-         {
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-         }
-
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      if(myid ==0 && logfile)
-      {
-         UbLog::output_policy::setStream(logFilename.str());
-      }
-
-      UBLOG(logINFO,"Testcase BreugemChannel");
-
-      //////////////////////////////////////////////////////////////////////////
-      //physik
-      //////////////////////////////////////////////////////////////////////////
-      double Re    = 5500;
-      double uLB   = 0.1;  
-      double rhoLB = 0.0;
-
-      int blocknx[3];
-      blocknx[0] = 20;//10;//5;
-      blocknx[1] = 20;//10;//5;
-      blocknx[2] = 20;//10;//5;
-
-      int nx[3];
-      nx[0] = 15;
-      nx[1] = 10;
-      nx[2] = 10;
-
-      double coarseNodeDx = 1.0;
-      double H     = (double)(nx[2]*blocknx[2])/2.0;
-      double hLB   = H/coarseNodeDx;
-      double nuLB  = (uLB*hLB)/Re;
-
-      int baseLevel   = 0;
-      int refineLevel = 0;//2;//1;////3;//3 soll 1 test;
-
-      ///////////////Weltabmessungen:
-      double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte
-      double blockLengthx2 = blockLengthx1;
-      double blockLengthx3 = blockLengthx1;
-
-      double originX1 = 0.0;
-      double originX2 = 0.0;
-      double originX3 = 0.0;
-
-      //bounding box
-      double g_minX1 = originX1;
-      double g_minX2 = originX2;
-      double g_minX3 = originX3;
-
-      double g_maxX1 = originX1 + 3.0*H;
-      double g_maxX2 = originX2 + 2.0*H;
-      double g_maxX3 = originX3 + 2.0*H;
-
-      //double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-      bool periodicx1 = true;
-      bool periodicx2 = true;
-      bool periodicx3 = false;
-
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      Grid3DPtr grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(10000,10000,10000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY);
-      grid = rp.restart(-1);
-      //////////////////////////////////////////////////////////////////////////
-
-       if (grid->getTimeStep() == 0)
-       {
-
-         //set grid
-         grid->setDeltaX(coarseNodeDx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         grid->setPeriodicX1(periodicx1);
-         grid->setPeriodicX2(periodicx2);
-         grid->setPeriodicX3(periodicx3);
-
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-
-         //bottom and top solid bc
-         //iteractors
-         int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         double geoOverlap = coarseNodeDx;
-         GbCuboid3DPtr bottomBCCuboid(new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_minX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(bottomBCCuboid.get(), pathname+"/geo/bottomBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr bottomBCInteractor(new D3Q27Interactor(bottomBCCuboid,grid,bcObst,Interactor3D::SOLID)); 
-
-         GbCuboid3DPtr topBCCuboid(new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_maxX3, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1));
-         if(myid == 0) GbSystem3D::writeGeoObject(topBCCuboid.get(), pathname+"/geo/topBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr topBCInteractor(new D3Q27Interactor(topBCCuboid,grid,bcObst,Interactor3D::SOLID)); 
-         //grid->addAndInitInteractor( bottomBCInteractor ); 
-         // grid->addAndInitInteractor( topBCInteractor ); 
-         //////////////////////////////////////////////////////////////////////////
-         if(myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            UBLOG(logINFO, "* Re            ="<<Re);
-            //UBLOG(logINFO, "* Ma            ="<<Ma);
-            //UBLOG(logINFO, "* uReal         ="<<uReal);
-            //UBLOG(logINFO, "* nueReal       ="<<nueReal);
-            UBLOG(logINFO, "* nue           ="<<nuLB);
-            UBLOG(logINFO, "* velocity      ="<<uLB);
-            // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx);
-            //  UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx);
-            //UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-            UBLOG(logINFO, "* cdx           ="<<coarseNodeDx);
-            //UBLOG(logINFO, "* fdx           ="<<fineNodeDx);
-            UBLOG(logINFO, "* dx_base       ="<<coarseNodeDx<<" == "<<coarseNodeDx);
-            //UBLOG(logINFO, "* dx_refine     ="<<fineNodeDx<<" == "<<fineNodeDx );
-            //UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-            UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-            UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-            UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-            UBLOG(logINFO, "* number of threads ="<<numOfThreads);
-            UBLOG(logINFO, "* number of processes ="<<comm->getNumberOfProcesses());
-            UBLOG(logINFO, "*****************************************");
-/*            UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString());
-            UBLOG(logINFO, "*****************************************");  */   
-         }
-
-         if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-
-         //////////////////////////////////////////////////////////////////////////
-         // refine
-         //////////////////////////////////////////////////////////////////////////
-         //GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.6/*0.55*/));
-
-         //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.49
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53));
-
-         //GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.9
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2]));
-
-         //GbCuboid3DPtr wallsX1X2maxRef1(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.95
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2]));
-
-         //if (refineLevel > 0)
-         //{
-
-         //   RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-         //   refineHelper.addGbObject(wallsX1X2minRef3, refineLevel-1);
-         //   refineHelper.addGbObject(wallsX1X2minRef4, refineLevel);
-         //   refineHelper.addGbObject(wallsX1X2maxRef2, refineLevel-1);
-         //   refineHelper.addGbObject(wallsX1X2maxRef1, refineLevel);
-
-         //   refineHelper.refine();
-         //   if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         //}
-
-         ///interactoren
-         //int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB
-         //D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         ///////w�rfel unten version ende
-         ////////////////////////////////////////////////////////////////////////////////
-         ////////PM grid
-         //Tempor�r:
-         //double  H=1.0;
-
-         vector<D3Q27InteractorPtr> D3Q27InteractorPtrarray;
-         ////////////////////////////////////////////////////////////////////////////////
-         double dpCubes=(double)H/20.0;
-         double distanceXY=dpCubes/2.0-coarseNodeDx*0.5;
-         double distanceZ=0;
-   
-         for (int x = 0; x<30; x++)
-            for (int y = 0; y<20; y++)
-               for (int z = 0; z<9; z++)
-               {
-                  double xminCubes = originX1+distanceXY+2.0*dpCubes*x;
-                  double yminCubes = originX2+distanceXY+2.0*dpCubes*y;
-                  double zminCubes = originX3+distanceZ+2.0*dpCubes*z;
-                  double xmaxCubes = xminCubes+dpCubes;
-                  double ymaxCubes = yminCubes+dpCubes;
-                  double zmaxCubes = zminCubes+dpCubes;
-                  GbCuboid3DPtr rectTemp(new GbCuboid3D(xminCubes, yminCubes, zminCubes, xmaxCubes, ymaxCubes, zmaxCubes));
-                  D3Q27BoundaryConditionAdapterPtr cubeBCAdapter(new D3Q27NoSlipBCAdapter());                   
-                  D3Q27InteractorPtr cubeInteractor( new D3Q27Interactor(rectTemp,grid,cubeBCAdapter,Interactor3D::SOLID));
-                  D3Q27InteractorPtrarray.push_back(cubeInteractor); 
-               }
-
-         ////////////////
-         //ende cubes
-         //////////
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(topBCInteractor);
-         intHelper.addInteractor(bottomBCInteractor);
-         for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i)
-         {
-            intHelper.addInteractor(D3Q27InteractorPtrarray[i]);
-         }
-         intHelper.selectBlocks();
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-         //////////////////////////////////////
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         if(myid == 0) ppblocks->update(0);
-         if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-         unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-
-         double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernel3DPtr kernel;
-         kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-     
-         mu::Parser fctForcingX1;
-         fctForcingX1.SetExpr("Fx1*dx");
-         fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);//9.99685e-7);
-
-         kernel->setForcingX1(fctForcingX1);
-         kernel->setWithForcing(true); 
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         //////////////////////////////////
-         //undef nodes
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-         //////////////////////////////////////////
-         intHelper.setBC();
-
-         for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i)
-         {
-            grid->addAndInitInteractor( D3Q27InteractorPtrarray[i] ); 
-            char numstr[21];
-            sprintf(numstr, "%f", (double)i);
-            std::string pathObstCube = pathname+"/geo/obstBCCuboid"+ numstr;
-            if(myid == 0) GbSystem3D::writeGeoObject(D3Q27InteractorPtrarray[i]->getGbObject3D().get(),
-               /* rectTemp.get(),*/ pathObstCube, WbWriterVtkXmlASCII::getInstance());
-         }
-
-
-         ppblocks.reset();
-
-         //inflow
-         mu::Parser inflowProfile;
-         inflowProfile.SetExpr("uLB*0.9"); 
-         inflowProfile.DefineConst("uLB",uLB);
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //initialization of decompositions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoLB);
-         initVisitor.setVx1(inflowProfile);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), 
-            unitConverter,true));
-
-         ppgeo->update(0);
-         ppgeo.reset();
-         geoSch.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-
-      }
-            else
-            {
-               //set forcing
-               mu::Parser fctForcingX1, fctForcingX2, fctForcingX3;
-               fctForcingX1.SetExpr("Fx1*dx");
-               fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);
-               fctForcingX2.SetExpr("0.0");
-               fctForcingX3.SetExpr("0.0");
-               SetForcingBlockVisitor forcingVisitor(fctForcingX1, fctForcingX2, fctForcingX3);
-               grid->accept(forcingVisitor);
-
-               //set connectors
-               D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-               D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-               grid->accept( setConnsVisitor );
-               if(myid == 0) UBLOG(logINFO,"Restart - end"); 
-      }
-
-
-      UbSchedulerPtr visSch(new UbScheduler());
-      visSch->addSchedule(100,100,1000);
-      visSch->addSchedule(1000,1000,10000);
-      visSch->addSchedule(10000,10000,100000);
-      //visSch->addSchedule(20000,20000,800000);
-      //visSch->addSchedule(50,350000,350500);
-      //visSch->addSchedule(50,420000,420500);
-      //visSch->addSchedule(50000,420500,10000000);
-      //visSch->addSchedule(2250,140000,450001);
-      //UbSchedulerPtr resSch(new UbScheduler());
-      //resSch->addSchedule(20000,20,10000000);
-      //UbSchedulerPtr resSchRMS(new UbScheduler());
-      //resSchRMS->addSchedule(40000,420000,10000000);
-      //UbSchedulerPtr resSchMeans(new UbScheduler());
-      //resSchMeans->addSchedule(40000,0,10000000);
-      //UbSchedulerPtr stepAvSch(new UbScheduler());
-      //stepAvSch->addSchedule(20,0,10000000);
-      //AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), 
-      //                                visSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-
-      UbSchedulerPtr AdjForcSch(new UbScheduler());
-      AdjForcSch->addSchedule(100,100,20000000);
-      //D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, 
-      //   originX1, originX2, kanalhoeheSI*0.55/*0.501*/, 
-      //   nx[0]*blockLengthx1, nx[1]*blockLengthx2, kanalhoeheSI*0.999));
-      D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, 
-         originX1, originX2, g_maxX3*0.55/*0.501*/, 
-         g_maxX1, g_maxX2, g_maxX3*0.999));
-
-      double vxZiel=uLB;
-      //D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel*0.6, comm);//da am 11.3.2013 velo um 1/0.6 zu hoch
-      D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel, comm);//dies sollte zu Re=5500 fuehren..
-
-      UbSchedulerPtr visQSch(new UbScheduler());
-      visQSch->addSchedule(10,90100,90130);
-      QCriterionPostprocessor QKritPtr(grid,pathname+"/steps/Qq",WbWriterVtkXmlBinary::getInstance(),visQSch, comm);
-
-      //mu::Parser decrViscFunc;
-      //decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)");
-      //decrViscFunc.DefineConst("nue0", nuLB);
-      //decrViscFunc.DefineConst("c0", 0.1);
-      //UbSchedulerPtr DecrViscSch(new UbScheduler());
-      //DecrViscSch->addSchedule(10,10,1000);
-      //DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm);
-
-      cout << "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()<<endl;
-
-      double endTime = 2000000;//20000001;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/bKanalAv/CMakeLists.txt b/apps/cpu/bKanalAv/CMakeLists.txt
deleted file mode 100644
index 5ea13434aa29131f70b73a83f385085e5995e85f..0000000000000000000000000000000000000000
--- a/apps/cpu/bKanalAv/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(bKanalAv)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(bKanalAv BINARY)
diff --git a/apps/cpu/bKanalAv/bKanal.cpp b/apps/cpu/bKanalAv/bKanal.cpp
deleted file mode 100644
index 27bf3c1a61f1d429e60a057a74479ad306098826..0000000000000000000000000000000000000000
--- a/apps/cpu/bKanalAv/bKanal.cpp
+++ /dev/null
@@ -1,738 +0,0 @@
-
-
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <sys/types.h> //mkdir rights
-#include <sys/stat.h> //mkdir
-#include <vfluids.h>
-
-using namespace std;
-
-
-void run(const char *cstr)
-{
-   try
-   {
-      string machine = QUOTEME(CAB_MACHINE);
-      UBLOG(logINFO,"Testcase BreugemChannel");
-      string pathname; 
-      string pathnameRestart;
-      string pathGeo;
-      int numOfThreads =1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      UbLog::reportingLevel() = logINFO;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-
-         pathname =        "./";
-         //pathnameRestart = "/gfs1/work/niivfcpu/scratch/kucher/BKanaltest";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out";
-         //pathname =        "/work/koskuche/SFB880/BKanaltestRe260000Out";
-         //pathnameRestart = "/work/koskuche/SFB880/BKanaltestRe260000";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out";
-
-   	 //pathGeo = "/home/koskuche/data/plate";
-         numOfThreads = 1;
-         availMem = 64.0e9;
-         logfile = true;
-
-//         if (myid==0) 
-//         {
-//            const char* str = pathname.c_str();
-//#if defined(__unix__)
-//            int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-//#endif 
-//
-//         }
-//
-//         if(myid ==0)
-//         {
-//            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-//         }
-
-
-
-
-      //if(myid ==0 && logfile)
-      //{
-      UbLog::output_policy::setStream(logFilename.str());
-      //}
-
-      int baseLevel, refineLevel,nx[3],blocknx[3];
-      double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init;
-
-      //////////////////////////////////////////////////////////////////////////
-      //physik
-      //////////////////////////////////////////////////////////////////////////
-      Re            = 5500;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum  testen ob was passiert
-      velocity      = 0.01;  
-      vx1Init       = 0.01;  
-      rhoInit       = 0.0;
-      SimulationParametersPtr param = SimulationParameters::getInstanz();
-
-      int H=200;//200;//392;
-
-      //  nx[0]      =8;//ok mit 8// (int)(3.0*(double)H/8.0/8.0);//2;// (int)(0.3*(double)H/6.0/4.0);//das "/4" hier ist wegen der verfeinerung da! //l�nge
-      //  nx[1]      =8;//ok mit 8// (int)(2.0*(double)H/8.0/8.0);//2;// (int)(0.2*(double)H/6.0/4.0);//  //breite
-      nx[2]      = (int)(2.0*(double)H/5.0/8.0);// //h�he gebiet
-
-      //(3/2/2)-ratio:
-      nx[1]=nx[2];
-      nx[0]=15;
-
-      blocknx[0] = 15;//10;//5;
-      blocknx[1] = 15;//10;//5;
-      blocknx[2] = 15;//10;//5;
-
-      baseLevel   = 0;
-      refineLevel = 2;//1;////3;//3 soll 1 test;
-
-
-      ///////////////Weltabmessungen:
-      //double kanallaengeSI = ( 2.0*(double)H);
-      // double kanalbreiteSI = ( 1.0*(double)H);
-      double kanalhoeheSI  = ( 2.0*(double)H);
-
-      // double refinewidth1=kanalhoeheSI/10.0;
-
-      double fineNodeDx   = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb
-      double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte
-
-      double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte
-      double blockLengthx2 = blockLengthx1;
-      double blockLengthx3 = blockLengthx1;
-
-      double originX1 = 0.0;//-50.0*propellerDurchmesser;  //geowerte
-      double originX2 = 0.0;//-0.5*blockLengthx2*nx2;
-      double originX3 = 0.0;// minX3 + 0.5*fineNodeDx;
-
-      double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-      bool periodicx1 = true;
-      bool periodicx2 = true;
-      bool periodicx3 = false;
-
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double smagorinskiConstant = 0.18;
-
-
-      double rhoLB         = 0.0;
-
-      double rhoReal       = 1.0;
-      double nueReal  = 1;//0.000016;//0.015;
-
-      double hReal         = blocknx[2]*nx[2];//H*0.9;//0.0105;//<-m     1.05;//Plattendicke in cm(! cm nicht m !)
-      double uReal         = Re*nueReal/hReal;
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double csReal=343.0;
-      double Ma      = uReal/csReal;//Ma-Real!
-      //double csReal  = uReal/Ma;
-      double hLB     = hReal/coarseNodeDx;
-
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB));
-
-      double uLB           = uReal   * unitConverter->getFactorVelocityWToLb();
-      double nueLB         = nueReal * unitConverter->getFactorViscosityWToLb();
-      double timestep      = unitConverter->getFactorTimeLbToW(coarseNodeDx);
-
-      velocity = uLB;
-      // double viscosity =nueLB*1000.0;
-
-      Grid3DPtr grid(new Grid3D(comm));
-      //UbSchedulerPtr rSch(new UbScheduler(10000,100000,30000000000));//(50000,50000,1000000));
-      //UbSchedulerPtr rSch(new UbScheduler(18000,268250,770000));//(50000,50000,1000000));
-      //RestartPostprocessor rp(grid, rSch, comm, pathnameRestart+"/checkpoints", RestartPostprocessor::BINARY);
-
-      //////////////////////////////////////////////////////////////////////////
-
-      std::string opt;
-
-//      if(cstr!= NULL)
-//         opt = std::string(cstr);
-//
-//      if(/*(cstr== NULL)*/cstr!= NULL)
-//      {
-//         opt = std::string(cstr);
-//
-//         if(myid==0) {
-//            UBLOG(logINFO,"Restart step: " << opt);
-//            UBLOG(logINFO, "Restart=:" << pathnameRestart);
-//         }
-//
-//         grid = rp.restart(UbSystem::stringTo<int>(opt));
-//         rp.reconnect(grid);
-//
-////          mu::Parser fctForcingX1, fctForcingX2, fctForcingX3;
-////          fctForcingX1.SetExpr("Fx1*dx");
-////          fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);
-//// 
-////          SetForcingBlockVisitor forcingVisitor(fctForcingX1, fctForcingX2, fctForcingX3);
-////          grid->accept(forcingVisitor);
-//
-//         //set connectors
-//         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-//         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-//         grid->accept( setConnsVisitor );
-//
-//      }
-//      else
-//      {
-         //bounding box
-         double g_minX1 = originX1;
-         double g_minX2 = originX2;
-         double g_minX3 = originX3;
-
-         double g_maxX1 = originX1 + geoLength[0];
-         double g_maxX2 = originX2 + geoLength[1];
-         double g_maxX3 = originX3 + geoLength[2];
-
-         //set grid
-         grid->setDeltaX(coarseNodeDx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         grid->setPeriodicX1(periodicx1);
-         grid->setPeriodicX2(periodicx2);
-         grid->setPeriodicX3(periodicx3);
-
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         //GenBlocksGridVisitor genBlocks;
-         //genBlocks.addGeoObject(gridCube);
-         //grid->accept(genBlocks);
-
-
-
-         //bottom and top solid bc
-         //iteractors
-         int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         double geoOverlap = coarseNodeDx;
-         GbCuboid3DPtr bottomBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, 
-            originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(bottomBCCuboid.get(), pathname+"/geo/bottomBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr bottomBCInteractor(new D3Q27Interactor(bottomBCCuboid,grid,bcObst,Interactor3D::SOLID)); 
-
-         GbCuboid3DPtr topBCCuboid(new GbCuboid3D(originX1-geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3+geoLength[2],//-coarseNodeDx*0.5, 
-            originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap));
-         if(myid == 0) GbSystem3D::writeGeoObject(topBCCuboid.get(), pathname+"/geo/topBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr topBCInteractor(new D3Q27Interactor(topBCCuboid,grid,bcObst,Interactor3D::SOLID)); 
-         //grid->addAndInitInteractor( bottomBCInteractor ); 
-         // grid->addAndInitInteractor( topBCInteractor ); 
-         //////////////////////////////////////////////////////////////////////////
-         if(myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            UBLOG(logINFO, "* Re            ="<<Re);
-            UBLOG(logINFO, "* Ma            ="<<Ma);
-            UBLOG(logINFO, "* uReal         ="<<uReal);
-            UBLOG(logINFO, "* nueReal       ="<<nueReal);
-            UBLOG(logINFO, "* nue           ="<<nueLB);
-            UBLOG(logINFO, "* velocity      ="<<uLB);
-            // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx);
-            //  UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx);
-            UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-            UBLOG(logINFO, "* cdx           ="<<coarseNodeDx);
-            UBLOG(logINFO, "* fdx           ="<<fineNodeDx);
-            UBLOG(logINFO, "* dx_base       ="<<coarseNodeDx<<" == "<<coarseNodeDx);
-            UBLOG(logINFO, "* dx_refine     ="<<fineNodeDx<<" == "<<fineNodeDx );
-            UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-            UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-            UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-            UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-            UBLOG(logINFO, "*****************************************");
-            UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString());
-            UBLOG(logINFO, "*****************************************");     
-         }
-
-         if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-
-         //////////////////////////////////////////////////////////////////////////
-         // refine
-         //////////////////////////////////////////////////////////////////////////
-         //GbCuboid3DPtr wallsX1X2maxRef1( new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI*0.95
-         //    , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax1(wallsX1X2maxRef1, 0,refineLevel-3);
-         //grid->accept(refineVisitormax1);
-         //
-         //GbCuboid3DPtr wallsX1X2minRef1(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI*0.55
-         //    , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.47));
-         // RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin1(wallsX1X2minRef1, 0,refineLevel-3);
-         // grid->accept(refineVisitormin1);
-
-         //   GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.98));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormax2);
-         //   GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormax2);
-
-         // GbCuboid3DPtr wallsX1X2maxRef3(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , kanalhoeheSI
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9995));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax3(wallsX1X2maxRef3, 0,refineLevel-1);
-         //grid->accept(refineVisitormax3);
-
-         //         GbCuboid3DPtr wallsX1X2minRefl3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.25));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitorminl3(wallsX1X2minRefl3, 0,refineLevel-3);
-         //grid->accept(refineVisitorminl3);
-         /////w�rfel unten version
-         //      GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.2));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormin2);
-
-         //   GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , kanalhoeheSI*0.04
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.18));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-1);
-         //grid->accept(refineVisitormin3);
-
-         //      GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , kanalhoeheSI*0.09
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.16));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel);
-         //grid->accept(refineVisitormin4);
-
-
-
-
-         /////w�rfel anfang version
-         //       GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.56));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2);
-         //grid->accept(refineVisitormin2);
-
-         //   GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.55));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-2);
-         //grid->accept(refineVisitormin3);
-
-         //      GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.49
-         //   , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1);
-         //grid->accept(refineVisitormin4);
-
-
-         /*           GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX1-3.0*geoOverlap
-         , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1));
-         RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1);
-         grid->accept(refineVisitormin4);*/
-
-         ////GbCuboid3DPtr refine1PlatteCube(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3
-         ////   , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-         ////RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP1(refine1PlatteCube, baseLevel, refineLevel-6);
-         ////grid->accept(refineAdapterP1);
-
-         //GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3*0.5
-         //  , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5);
-         //grid->accept(refineAdapterP2);
-
-         //GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D(  originX1-geoOverlap  , originX2-geoOverlap  , x3minMesh-H3*0.5
-         //   , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.5));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4);
-         //grid->accept(refineAdapterP3);
-
-         //GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D(   originX1-geoOverlap  , originX2-geoOverlap  , x3minMesh+deltaX3Platte*0.0
-         //   ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25));
-         //if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance());
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3);
-         //grid->accept(refineAdapterP4);
-
-         //GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D(   originX1-geoOverlap , originX2-geoOverlap  ,x3minMesh+deltaX3Platte*0.1/* x3minMesh+deltaX3Platte*0.8*/
-         //   ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.00375));
-         //if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance());
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2);
-         //grid->accept(refineAdapterP5);
-
-
-         //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX1-3.0*geoOverlap
-         //	  , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1));
-
-         GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX3-3.0*geoOverlap
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.6/*0.55*/));
-
-         GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.49
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53));
-
-         GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.9
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2]));
-
-         GbCuboid3DPtr wallsX1X2maxRef1(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  ,kanalhoeheSI*0.95
-            , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2]));
-
-         //if (refineLevel > 0)
-         //{
-
-         //   RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-         //   refineHelper.addGbObject(wallsX1X2minRef3, refineLevel-1);
-         //   refineHelper.addGbObject(wallsX1X2minRef4, refineLevel);
-         //   refineHelper.addGbObject(wallsX1X2maxRef2, refineLevel-1);
-         //   refineHelper.addGbObject(wallsX1X2maxRef1, refineLevel);
-
-         //   refineHelper.refine();
-         //   if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         //}
-
-         ///interactoren
-         //int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB
-         //D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         ///////w�rfel unten version ende
-         ////////////////////////////////////////////////////////////////////////////////
-         ////////PM grid
-         //Tempor�r:
-         //double  H=1.0;
-
-         //vector<D3Q27InteractorPtr> D3Q27InteractorPtrarray;
-         
-         double newDx = fineNodeDx;///2.0;
-         int geoNX1=(int)(600.0/newDx)-1; 
-         int geoNX2=(int)(400.0/newDx)-1; 
-         int geoNX3=(int)((398.0+newDx*2)/newDx); 
-         GbVoxelMatrix3D geoMatrix(geoNX1,geoNX2,geoNX3,0);
-         geoMatrix.setVoxelMatrixDelta(newDx, newDx, newDx);
-         double m_minX1 = 0 - newDx/2.0;
-         double m_minX2 = 0 - newDx/2.0;
-         double m_minX3 = 0.666 + newDx/2.0;
-         geoMatrix.setVoxelMatrixMininum(m_minX1, m_minX2, m_minX3);
-
-         //geoMatrix.writeToVTKImageDataASCII(pathname + "/geo/geoMatrix");
-         //return;
-
-         CoordinateTransformation3D trafo(m_minX1, m_minX2, m_minX3, newDx, newDx, newDx);
-
-         ////////////////////////////////////////////////////////////////////////////////
-         double inflowCubeDx = coarseNodeDx;///(double)(1<<inflowCubeLevel);
-         double dpCubes=(double)H/20.0;//100.0; //30zum testen 100real
-         double offsetZgrid=H+0.5*inflowCubeDx;
-         double epschoch1drittel= 0.928318;
-         double abstandIn=2.0*dpCubes;
-         double c1oAbst=1.0/abstandIn;
-         
-         UBLOG(logINFO,"cubes:start");
-         
-         for (int Nflowdir=0;Nflowdir<((nx[0]*blocknx[0]*c1oAbst)*coarseNodeDx); Nflowdir++)
-         {
-            // for (int Nhorizon=((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-2; Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-1-1; Nhorizon++)
-            // {
-            //  for (int Nhorizon=0;  Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++)
-            for (int Nhorizon=0;  Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.5-1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++)
-
-            {
-               for (int Nspanw=0; Nspanw<((nx[1]*blocknx[1]*c1oAbst)*coarseNodeDx); Nspanw++)
-               {
-                  // stringstream ss;
-                  //     ss<<"cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw;
-                  ////     //   //geoOrigin ist Mitte, nicht vordere Ecke -> korrigieren
-                  // int Nflowdir=1;
-                  //int Nhorizon=0;
-                  //int Nspanw=1;
-                  double xminCubes1=originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1);
-                  double xmaxCubes1=originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1);
-                  double xminCubes=std::max(xminCubes1,2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double xmaxCubes=std::min(xmaxCubes1,originX1+geoLength[0]-coarseNodeDx/pow(2.0,refineLevel));
-                  double yminCubes=std::max(originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double ymaxCubes=std::min(originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),originX2+geoLength[1]-coarseNodeDx/pow(2.0,refineLevel));
-                  double zminCubes=std::max(originX3+(Nhorizon*abstandIn)+4.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel));
-                  double zmaxCubes=std::min(originX3+(Nhorizon*abstandIn)+dpCubes+4.0*coarseNodeDx/pow(2.0,refineLevel-1),originX3+geoLength[2]-coarseNodeDx/pow(2.0,refineLevel));
-                  ////     /*GbCuboid3D  *rectTemp = new GbCuboid3D(originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, 
-                  ////										 originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx );
-                  ////*/
-                  ////  
-                  //GbCuboid3DPtr rectTemp(new GbCuboid3D(xminCubes, yminCubes, zminCubes, xmaxCubes, ymaxCubes, zmaxCubes));
-
-                  double x1min = trafo.transformForwardToX1Coordinate( xminCubes, yminCubes, zminCubes );
-                  double x2min = trafo.transformForwardToX2Coordinate( xminCubes, yminCubes, zminCubes );
-                  double x3min = trafo.transformForwardToX3Coordinate( xminCubes, yminCubes, zminCubes );
-
-                  int ix1min, ix2min, ix3min; 
-
-                  if (x1min-(int)x1min>.9999999999) ix1min=(int)x1min+1;else ix1min=(int)x1min; 
-                  if (x2min-(int)x2min>.9999999999) ix2min=(int)x2min+1;else ix2min=(int)x2min; 
-                  if (x3min-(int)x3min>.9999999999) ix3min=(int)x3min+1;else ix3min=(int)x3min; 
-
-                  double x1max = trafo.transformForwardToX1Coordinate( xmaxCubes, ymaxCubes, zmaxCubes );
-                  double x2max = trafo.transformForwardToX2Coordinate( xmaxCubes, ymaxCubes, zmaxCubes );
-                  double x3max = trafo.transformForwardToX3Coordinate( xmaxCubes, ymaxCubes, zmaxCubes );
-
-                  int ix1max, ix2max, ix3max; 
-
-                  if (x1max-(int)x1max>.9999999999) ix1max=(int)x1max+1;else ix1max=(int)x1max; 
-                  if (x2max-(int)x2max>.9999999999) ix2max=(int)x2max+1;else ix2max=(int)x2max; 
-                  if (x3max-(int)x3max>.9999999999) ix3max=(int)x3max+1;else ix3max=(int)x3max; 
-
-                  for (int z = ix3min+1; z <= ix3max; z++)
-                     for (int y = ix2min+1; y <= ix2max; y++)
-                        for (int x = ix1min+1; x <= ix1max; x++)
-                  {
-                     geoMatrix(x,y,z)=GbVoxelMatrix3D::SOLID;
-                  }
-
-
-                  ////
-                  //     ostringstream ostrcubes;
-                  //	 ostrcubes<<pathname <<"/cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw;
-                  ////       
-                  ////   
-                  //// // GbSystem3D::writeGeoObject(rectTemp,outpath+cubeschar,WbWriterAvsASCII::getInstance());
-                  ////  GbSystem3D::writeGeoObject(rectTemp,ostrcubes.str(),WbWriterAvsASCII::getInstance()); //??
-                  //        ostrcubes.str("");
-                  //         ostrcubes.clear();
-
-                  ////  boost::shared_ptr<D3Q19AMRInteractor> interactorTemp( new D3Q19AMRInteractor( rectTemp,new D3Q19NoSlipBCAdapter(),AMR3DInteractor::SOLID,ss.str()) );
-                  //  //  interactorService.addInteractor(interactorTemp);
-                  //D3Q27BoundaryConditionAdapterPtr cubeBCAdapter(new D3Q27NoSlipBCAdapter());                   //D3Q27DensityBCAdapter(rhoInit));
-                  //D3Q27InteractorPtr cubeInteractor( new D3Q27Interactor(rectTemp,grid,cubeBCAdapter,Interactor3D::SOLID));
-                  //D3Q27InteractorPtrarray.push_back(cubeInteractor);  
-
-
-               }
-            }}
-         ////////////////
-         //ende cubes
-         //////////
-         UBLOG(logINFO,"cubes:end");
-
-         UBLOG(logINFO,"write geo matrix:start");
-         //geoMatrix.writeToLegacyVTKBinary(pathname + "/geo/geoMatrix");
-         geoMatrix.writeToVTKImageDataASCII(pathname + "/geo/geoMatrix");
-         UBLOG(logINFO,"write geo matrix:end");
-
-         ////////////////////////////////////////////
-      //   //METIS
-      //   MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-      //   grid->accept( metisVisitor );
-
-
-      //   ////////////////////////////////////////////
-      //   /////delete solid blocks
-      //   if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-      //   SolidBlocksHelper sd(grid, comm);
-
-      //   sd.addInteractor(topBCInteractor);
-      //   sd.addInteractor(bottomBCInteractor);
-      //   for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i)
-      //   {
-      //      sd.addInteractor(D3Q27InteractorPtrarray[i]);
-      //   }
-      //   sd.deleteSolidBlocks();
-      //   if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-      //   //////////////////////////////////////
-      //   grid->accept( metisVisitor );
-
-      //   sd.setTransBlocks(); 
-
-
-      //   unsigned long nob = grid->getNumberOfBlocks();
-      //   unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-      //   unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-
-      //   double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-      //   double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-      //   if(myid == 0)
-      //   {
-      //      UBLOG(logINFO,"Number of blocks = " << nob);
-      //      UBLOG(logINFO,"Number of nodes  = " << nod);
-      //      UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-      //      UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-      //      UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-      //   }
-
-      //   LBMKernel3DPtr kernel;
-      //   kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-
-      //   // LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(blocknx[0], blocknx[1], blocknx[2]));
-      //   //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx[0], blocknx[1], blocknx[2],1));
-      //   BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-      //   kernel->setBCProcessor(bcProc);
-      //   //	  //scheint neuerdings fuer absturz zu sorgen:
-      //   mu::Parser fctForcingX1;
-      //   fctForcingX1.SetExpr("Fx1*dx");
-      //   fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);//9.99685e-7);
-
-      //   kernel->setForcingX1(fctForcingX1);
-      //   kernel->setWithForcing(true); 
-
-      //   SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-
-      //   grid->accept(kernelVisitor);
-
-      //   //////////////////////////////////
-      //   //undef nodes
-      //   if (refineLevel > 0)
-      //   {
-      //      D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-      //      grid->accept(undefNodesVisitor);
-      //   }
-      //   //////////////////////////////////////////
-
-      //   grid->addAndInitInteractor( bottomBCInteractor ); 
-      //   grid->addAndInitInteractor( topBCInteractor );
-      //   for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i)
-      //   {
-      //      grid->addAndInitInteractor( D3Q27InteractorPtrarray[i] ); 
-      //      char numstr[21];
-      //      sprintf(numstr, "%f", (double)i);
-      //      std::string pathObstCube = pathname+"/geo/obstBCCuboid"+ numstr;
-      //      if(myid == 0) GbSystem3D::writeGeoObject(D3Q27InteractorPtrarray[i]->getGbObject3D().get(),
-      //         /* rectTemp.get(),*/ pathObstCube, WbWriterVtkXmlASCII::getInstance());
-      //   }
-
-
-      //   UbTimer timer;
-      //   timer.start();
-      //   grid->accept( metisVisitor );
-
-      //   if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-      //   BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-      //   if(myid == 0) ppblocks->update(0);
-      //   if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-
-      //   if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-      //   grid->accept( metisVisitor );
-      //   if(myid == 0) ppblocks->update(1);
-      //   ppblocks.reset();
-      //   if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-      //   //inflow
-      //   double uLB2=uLB;
-      //   double raiseVelSteps = 0;
-      //   vector<D3Q27BCFunction> velcX1BCs,dummy;
-
-      //   mu::Parser inflowProfile;
-      //   inflowProfile.SetExpr("uLB*0.9"); 
-
-      //   inflowProfile.DefineConst("uLB",uLB2);
-      //   velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST));
-
-
-      //   //set connectors
-      //   D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-      //   D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-      //   grid->accept( setConnsVisitor );
-
-      //   //domain decomposition
-
-      //   //initialization of decompositions
-      //   D3Q27ETInitDistributionsBlockVisitor initVisitor( nueLB,rhoInit);
-      //   initVisitor.setVx1(inflowProfile);
-      //   grid->accept(initVisitor);
-
-      //   //Postrozess
-      //   //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      //   UbSchedulerPtr geoSch(new UbScheduler(1));
-      //   D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-      //      new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), 
-      //      unitConverter, comm, true));
-
-
-
-      //   grid->doPostProcess(0);
-      //   ppgeo.reset();
-      //   geoSch.reset();
-
-      //   if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-
-      //}
-
-
-
-      //UbSchedulerPtr visSch(new UbScheduler());
-      ////visSch->addSchedule(100,1,1000);
-      ////visSch->addSchedule(1000,1000,10000);
-      ////visSch->addSchedule(10000,10000,100000);
-      ////visSch->addSchedule(20000,20000,800000);
-      ////visSch->addSchedule(50,350000,350500);
-      ////visSch->addSchedule(50,420000,420500);
-      ////visSch->addSchedule(50000,420500,10000000);
-      //visSch->addSchedule(2250,268250,592250);
-      //UbSchedulerPtr resSch(new UbScheduler());
-      //resSch->addSchedule(20000,20,10000000);
-      //// AverageValuesPostprocessor       Avpp(grid,  pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/,resSch/*wann wird resettet*/,comm);
-      //UbSchedulerPtr resSchRMS(new UbScheduler());
-      //resSchRMS->addSchedule(40000,420000,10000000);
-      //UbSchedulerPtr resSchMeans(new UbScheduler());
-      //resSchMeans->addSchedule(40000,0,10000000);
-      //UbSchedulerPtr stepAvSch(new UbScheduler());
-      //int averageInterval=20;
-      //stepAvSch->addSchedule(averageInterval,0,10000000);
-
-      //double restart=10000; //??????????
-      //AverageValuesPostprocessor       Avpp(grid,  pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), stepAvSch/*wann wird gemittelt*/, averageInterval,visSch/*wann wird rausgeschrieben*/,resSchMeans,resSchRMS/*wann wird resettet*/,comm,restart);
-
-
-      //D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm);
-
-      //UbSchedulerPtr nupsSch(new UbScheduler(10, 90050, 90080));
-      //NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-
-      //UbSchedulerPtr AdjForcSch(new UbScheduler());
-      //AdjForcSch->addSchedule(100,20,20000000);
-      //D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, 
-      //   originX1, originX2, kanalhoeheSI*0.55/*0.501*/, 
-      //   nx[0]*blockLengthx1, nx[1]*blockLengthx2, kanalhoeheSI*0.999));
-
-      //double vxZiel=uLB;
-      ////D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel*0.6, comm);//da am 11.3.2013 velo um 1/0.6 zu hoch
-      //D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel, comm);//dies sollte zu Re=5500 fuehren..
-
-      //UbSchedulerPtr visQSch(new UbScheduler());
-      //visQSch->addSchedule(10,90100,90130);
-      //QKritPostprocessor QKritPtr(grid,pathname+"/steps/Qq",WbWriterVtkXmlBinary::getInstance(),visQSch, comm);
-
-      //mu::Parser decrViscFunc;
-      //decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)");
-      //decrViscFunc.DefineConst("nue0", nueLB);
-      //decrViscFunc.DefineConst("c0", 0.1);
-      //UbSchedulerPtr DecrViscSch(new UbScheduler());
-      //DecrViscSch->addSchedule(10,10,1000);
-      //DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm);
-
-      //cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl;
-      //cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl;
-      //cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl;
-
-      //double endTime = 520000;//20000001;
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      //if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      //calculation->calculate();
-      //if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/bananas/CMakeLists.txt b/apps/cpu/bananas/CMakeLists.txt
deleted file mode 100644
index 744322b5274e2dc924a40c3c7cd22169cd59338e..0000000000000000000000000000000000000000
--- a/apps/cpu/bananas/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(bananas)
-
-INCLUDE(${SOURCE_ROOT}/core/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES core)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(bananas BINARY)
diff --git a/apps/cpu/bananas/bananas.cpp b/apps/cpu/bananas/bananas.cpp
deleted file mode 100644
index 7d8b05a97fbd611144e2916eb992659f39aa15a0..0000000000000000000000000000000000000000
--- a/apps/cpu/bananas/bananas.cpp
+++ /dev/null
@@ -1,457 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "geometry3d/CoordinateTransformation3D.h"
-#include "Grid3D.h"
-#include "GenBlocksGridVisitor.h"
-#include "geometry3d/GbSystem3D.h"
-#include "geometry3d/GbCuboid3D.h"
-#include "geometry3d/GbCylinder3D.h"
-#include <geometry3d/GbSphere3D.h>
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include "basics/writer/WbWriterVtkXmlBinary.h"
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "RatioBlockVisitor.h"
-#include "RatioSmoothBlockVisitor.h"
-#include "OverlapBlockVisitor.h"
-#include "RefineInterGbObjectsVisitor.h"
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "SetKernelBlockVisitor.h"
-#include "LBMKernelETD3Q27Cascaded.h"
-#include "D3Q27MacroscopicQuantitiesPostprocessor.h"
-#include "MPICommunicator.h"
-#include "D3Q27ETBCProcessor.h"
-#include "SimulationParameters.h"
-#include "D3Q27SetUndefinedNodesBlockVisitor.h"
-#include "SetInterpolationDirsBlockVisitor.h"
-#include "D3Q27SetConnectorsBlockVisitor.h"
-#include "NullCommunicator.h"
-#include "D3Q27ETInitDistributionsBlockVisitor.h"
-#include "CalculationManager.h"
-#include "PQueuePartitioningGridVisitor.h"
-#include "MetisPartitioningGridVisitor.h"
-#include "D3Q27Interactor.h"
-#include "D3Q27NoSlipBCAdapter.h"
-#include "D3Q27VelocityBCAdapter.h"
-#include "D3Q27DensityBCAdapter.h"
-#include "D3Q27BoundaryConditionAdapter.h"
-#include "StringUtil.hpp"
-#include "D3Q27OffsetInterpolationProcessor.h"
-#include "D3Q27CompactInterpolationProcessor.h"
-#include "SyncBcBlockVisitor.h"
-#include "geometry3d/creator/GbTriFaceMesh3DCreator.h"
-#include "geometry3d/GbTriFaceMesh3D.h"
-#include "D3Q27TriFaceMeshInteractor.h"
-#include "basics/utilities/UbFileOutputASCII.h"
-#include "basics/utilities/UbFileInputASCII.h"
-#include "basics/utilities/UbFileInputBinary.h"
-#include "basics/container/CbArray3D.h"
-#include "geometry3d/GbVoxelMatrix3D.h"
-
-#define CONVEXHULL
-
-using namespace std;
-
-const int FLUID = 1;
-const int SOLID = 15;
-
-//////////////////////////////////////////////////////////////////////////
-void writeMatrixToVtkImageFile(const std::string& fileName, const CbArray3D <int>& geoMatrix,
-                               double itsDeltaXWorld, double orgX1, double orgX2, double orgX3)
-{
-   UbFileOutputASCII out(fileName);
-
-   int NX1 = (int)geoMatrix.getNX1();	
-   int NX2 = (int)geoMatrix.getNX2();	
-   int NX3 = (int)geoMatrix.getNX3();
-   int nn = NX1*NX2*NX3;
-   out.writeLine("# vtk DataFile Version 3.0");
-   out.writeLine(fileName);
-   out.writeLine("ASCII");
-   out.writeLine("DATASET STRUCTURED_POINTS");
-   out.writeString("DIMENSIONS");
-   out.writeInteger(NX1);
-   out.writeInteger(NX2);
-   out.writeInteger(NX3);
-   out.writeLine();
-   out.writeString("ORIGIN");
-   out.writeDouble(orgX1);
-   out.writeDouble(orgX2);
-   out.writeDouble(orgX3);
-   out.writeLine();
-   out.writeString("SPACING");
-   out.writeDouble(itsDeltaXWorld);
-   out.writeDouble(itsDeltaXWorld);
-   out.writeDouble(itsDeltaXWorld);
-   out.writeLine();
-   out.writeString("POINT_DATA");
-   out.writeInteger(nn);
-   out.writeLine();
-   out.writeLine("SCALARS Geo integer");
-   out.writeLine("LOOKUP_TABLE default");
-
-   for(int k=0 ; k<NX3 ; k++){
-      for(int j=0 ; j<NX2 ; j++){
-         for(int i=0 ; i<NX1 ; i++){
-            out.writeInteger( geoMatrix(i,j,k) );
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void readDimensionsFromFldFile(const std::string& fileName, int& d1, int& d2, int& d3)
-{
-   UbFileInputASCII in(fileName);
-   // read grid nx3
-   int dim   = in.readIntegerAfterString("ndim=");
-
-   if (dim != 3) throw UbException(UB_EXARGS,"readGeoMatrixFromFldFile() - Wrong number of dimensions.");
-
-   d1 = in.readIntegerAfterString("dim1=");
-   d2 = in.readIntegerAfterString("dim2=");
-   d3 = in.readIntegerAfterString("dim3=");
-}
-//////////////////////////////////////////////////////////////////////////
-void readGeoMatrixFromFldFile(const std::string& fileName, GbVoxelMatrix3DPtr geoMatrix)
-{
-   UbFileInputASCII in(fileName);
-   // read grid nx3
-   int dim   = in.readIntegerAfterString("ndim=");
-
-   if (dim != 3) throw UbException(UB_EXARGS,"readGeoMatrixFromFldFile() - Wrong number of dimensions.");
-
-   int sizeX = in.readIntegerAfterString("dim1=");
-   int sizeY = in.readIntegerAfterString("dim2=");
-   int sizeZ = in.readIntegerAfterString("dim3=");
-
-   std::string binFileName = in.readStringAfterString("variable 1 file=");
-
-   //separate name from path
-   std::string path = fileName.substr( 0, fileName.find_last_of('//')+1 );
-
-   binFileName = path.append(binFileName);
-
-   UbFileInputBinary binIn(binFileName);
-
-   for (int i=0; i<2048; i++) 
-   {
-      binIn.readChar();
-   }
-
-   int x, y, z, val;
-
-   for(z=0; z<sizeZ; z++)
-   {
-      for(y=0; y<sizeY; y++)
-      {
-         for(x=0; x<sizeX; x++)
-         {
-            val = binIn.readChar();
-
-            if(x!=0 && x!=sizeX-1 && 
-               y!=0 && y!=sizeY-1 &&
-               z!=0 && z!=sizeZ-1   )
-            {
-               if(val == 0)
-               {
-                   (*geoMatrix)(x,y,z) = GbVoxelMatrix3D::SOLID;
-               }
-            }
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void discretizeGeoObject(GbObject3DPtr geoObject, CbArray3D<int>& geoMatrix, double delta, double orgX1, double orgX2, double orgX3)
-{
-   int nx1 = (int)geoMatrix.getNX1();
-   int nx2 = (int)geoMatrix.getNX2();
-   int nx3 = (int)geoMatrix.getNX3();
-
-   for(int k=0 ; k<nx3 ; k++)
-   {
-      for(int j=0 ; j<nx2 ; j++)
-      {
-         for(int i=0 ; i<nx1 ; i++)
-         {
-            double x = orgX1 + i*delta;
-            double y = orgX2 + j*delta;
-            double z = orgX3 + k*delta;
-            if(geoObject->isPointInGbObject3D(x, y, z)) geoMatrix(i,j,k) = SOLID;
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void writeGbVoxelMatrix3DtoVtuXmlASCII(const std::string& fileName, GbVoxelMatrix3DPtr voxelMatrix, 
-                                       double worldDeltaX1, double worldDeltaX2, double worldDeltaX3,
-                                       int nx1, int nx2, int nx3)
-{
-   std::vector< UbTupleFloat3 > nodes;
-   std::vector<std::string > datanames;
-   std::vector<std::vector<double > > nodedata;
-   
-   datanames.resize(0);
-   datanames.push_back("Solid");
-   nodes.resize(0);
-   nodedata.resize(datanames.size());
-
-   double orgX1 = voxelMatrix->getX1Minimum();
-   double orgX2 = voxelMatrix->getX2Minimum();
-   double orgX3 = voxelMatrix->getX3Minimum();
-
-   int index = 0;
-   double x1KO,x2KO,x3KO;
-   
-      for (int x3=0; x3<nx3;x3++){
-         for (int x2=0; x2<nx2;x2++){
-            for(int x1=0; x1<nx1;x1++)
-            {
-                  x1KO = orgX1 + worldDeltaX1*(double)x1;
-                  x2KO = orgX2 + worldDeltaX2*(double)x2;
-                  x3KO = orgX3 + worldDeltaX3*(double)x3;
-                  nodes.push_back( makeUbTuple(float(x1KO), float(x2KO), float(x3KO)) );
-                  nodedata[0].push_back((*voxelMatrix)(x1,x2,x3));
-            }
-         }
-      }
-   WbWriterVtkXmlASCII::getInstance()->writeNodesWithNodeData(fileName, nodes,  datanames, nodedata); 
-}
-//////////////////////////////////////////////////////////////////////////
-void writeGbVoxelMatrix3DtoLegacyVTK(const std::string& fileName, GbVoxelMatrix3DPtr voxelMatrix,
-                                       double worldDeltaX1, double worldDeltaX2, double worldDeltaX3,
-                                       int nx1, int nx2, int nx3)
-{
-   UbFileOutputASCII out(fileName);
-
-   int nn = nx1*nx2*nx3;
-   out.writeLine("# vtk DataFile Version 3.0");
-   out.writeLine(fileName);
-   out.writeLine("ASCII");
-   out.writeLine("DATASET STRUCTURED_POINTS");
-   out.writeString("DIMENSIONS");
-   out.writeInteger(nx1);
-   out.writeInteger(nx2);
-   out.writeInteger(nx3);
-   out.writeLine();
-   out.writeString("ORIGIN");
-   out.writeDouble(voxelMatrix->getX1Minimum());
-   out.writeDouble(voxelMatrix->getX2Minimum());
-   out.writeDouble(voxelMatrix->getX3Minimum());
-   out.writeLine();
-   out.writeString("SPACING");
-   out.writeDouble(worldDeltaX1);
-   out.writeDouble(worldDeltaX2);
-   out.writeDouble(worldDeltaX3);
-   out.writeLine();
-   out.writeString("POINT_DATA");
-   out.writeInteger(nn);
-   out.writeLine();
-   out.writeLine("SCALARS Geo integer");
-   out.writeLine("LOOKUP_TABLE default");
-
-   for(int k=0 ; k<nx3 ; k++){
-      for(int j=0 ; j<nx2 ; j++){
-         for(int i=0 ; i<nx1 ; i++){
-            out.writeInteger( (int)(*voxelMatrix)(i,j,k) );
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void run(const char *cstr)
-{
-   try
-   {
-      //string pathname = "c:/temp/bananas/out";
-      //string pathnameGeo = "c:/temp/bananas/geo";
-
-      std::string opt;
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-      else
-      {
-         UBLOG(logINFO,"no option: x, y or z");
-         return;
-      }
-      
-      string pathnameGeo = "/home/koskuche/data/bananas";
-      string pathname;
-
-      if(opt == "z") pathname = "/work/koskuche/scratch/bananas/setupZ/out";
-
-      if(opt == "x") pathname = "/work/koskuche/scratch/bananas/setupX/out";
-
-      if(opt == "y") pathname = "/work/koskuche/scratch/bananas/setupY/out";
-
-      CommunicatorPtr comm(new MPICommunicator());
-     
-      //////////////////////////////////////////////////////////////////////////
-      // Geometries
-      //////////////////////////////////////////////////////////////////////////
-      //bananas box geometry
-      UBLOG(logINFO,"Start read bananas box geometry");
-      GbTriFaceMesh3DPtr bananaBox (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathnameGeo+"/Banana_boxD.stl","banana_box"));
-      UBLOG(logINFO,"Stop read bananas box geometry");
-      bananaBox->rotate(90.0, 0.0, 0.0); //around Z
-
-      double b_minX1 = bananaBox->getX1Minimum();
-      double b_minX2 = bananaBox->getX2Minimum();
-      double b_minX3 = bananaBox->getX3Minimum();
-
-      double b_maxX1 = bananaBox->getX1Maximum();
-      double b_maxX2 = bananaBox->getX2Maximum();
-      double b_maxX3 = bananaBox->getX3Maximum();
-
-      if(opt == "x") bananaBox->rotate(0.0, 0.0, -90.0); //around X
-      
-      if(opt == "y") bananaBox->rotate(0.0, -90.0, 0.0); //around Y
-
-      UBLOG(logINFO,"Start write bananas box geometry");
-      GbSystem3D::writeGeoObject(bananaBox.get(), pathname+"/banana_box", WbWriterVtkXmlASCII::getInstance());
-      UBLOG(logINFO,"Stop write bananas box geometry");
-
-      //distances for bounding box
-      double dist_z = 0.12;
-      double dist_x = 0.26;
-      double dist_y = 0.195;
-
-      double g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3;
-
-      //bounding box of simulation
-      //setup1 - z
-      if(opt == "z")
-      {
-         g_minX1 = bananaBox->getX1Minimum();
-         g_minX2 = bananaBox->getX2Minimum();
-         g_minX3 = bananaBox->getX3Minimum()-dist_z;
-
-         g_maxX1 = bananaBox->getX1Maximum();
-         g_maxX2 = bananaBox->getX2Maximum();
-         g_maxX3 = bananaBox->getX3Maximum()+dist_z*2.0;
-      }
-
-      //setup2 - x
-      if(opt == "x")
-      {
-         g_minX1 = bananaBox->getX1Minimum();
-         g_minX2 = bananaBox->getX2Minimum();
-         g_minX3 = bananaBox->getX3Minimum()-dist_x;
-
-         g_maxX1 = bananaBox->getX1Maximum();
-         g_maxX2 = bananaBox->getX2Maximum();
-         g_maxX3 = bananaBox->getX3Maximum()+dist_x*2.0;
-      }
-
-      //setup3 - y
-      if(opt == "y")
-      {
-         g_minX1 = bananaBox->getX1Minimum();
-         g_minX2 = bananaBox->getX2Minimum();
-         g_minX3 = bananaBox->getX3Minimum()-dist_y;
-
-         g_maxX1 = bananaBox->getX1Maximum();
-         g_maxX2 = bananaBox->getX2Maximum();
-         g_maxX3 = bananaBox->getX3Maximum()+dist_y*2.0;
-      }
-
-      const double gridOriginX1 = g_minX1;
-      const double gridOriginX2 = g_minX2;
-      const double gridOriginX3 = g_minX3;
-
-      //int gridNX1 = 170;
-      //int gridNX2 = 226;
-      //int gridNX3 = 104;
-
-      const double dx = 2.20183486239e-3; //blockLentghX1/static_cast<double>(blocknx1);
-
-      UBLOG(logINFO,"DeltaX = " << dx);
-
-      CbArray3D<int> grid(int((g_maxX1-g_minX1)/dx)+1, int((g_maxX2-g_minX2)/dx)+1, int((g_maxX3-g_minX3)/dx)+1, FLUID);
-
-      UBLOG(logINFO,"Start write geo matrix empty");
-      writeMatrixToVtkImageFile(pathname + "/geo_matrix_empty.vtk", grid, dx, gridOriginX1, gridOriginX2, gridOriginX3);
-      UBLOG(logINFO,"Stop write geo matrix empty");
-
-#ifdef BANANAS
-      //reed bananas
-      UBLOG(logINFO,"Start read bananas geometry");
-      int d1, d2, d3;
-      readDimensionsFromFldFile(pathnameGeo + "/BANANA_8binn_Binear_A.fld", d1, d2, d3);
-      UBLOG(logINFO,"Dimensions of bananas geometry: " << d1 << ", " << d2 << ", " << d3);
-      GbVoxelMatrix3DPtr bananas(new GbVoxelMatrix3D(d1, d2, d3, float(GbVoxelMatrix3D::FLUID))); 
-      readGeoMatrixFromFldFile(pathnameGeo + "/BANANA_8binn_Binear_A.fld", bananas);
-      UBLOG(logINFO,"Stop read bananas geometry");
-      double bananasDx1 = (b_maxX1 - b_minX1) / float(d1);
-      double bananasDx2 = (b_maxX2 - b_minX2) / float(d2);
-      double bananasDx3 = (b_maxX3 - b_minX3) / float(d3);
-      bananas->setVoxelMatrixDelta(float(bananasDx1), float(bananasDx2), float(bananasDx3));
-      bananas->setCenterCoordinates(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid());
-      bananas->setVoxelMatrixMininum(float(b_minX1), float(b_minX2), float(b_minX3));
-
-      bananas->rotate90aroundX();
-      bananas->rotate90aroundY();
-      //bananas->rotate90aroundX();
-
-      UBLOG(logINFO,"Start write bananas geometry");
-      bananas->writeToLegacyVTK(pathname + "/bananas.vtk");
-      UBLOG(logINFO,"Stop write bananas geometry");
-#endif
-
-#ifdef CONVEXHULL
-      UBLOG(logINFO,"Start read bananas box geometry");
-      GbTriFaceMesh3DPtr bananaHull (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathnameGeo+"/convexhullASCII.stl","banana_hull"));
-      UBLOG(logINFO,"Stop read bananas box geometry");
-      bananaHull->translate(0.0, 0.0, 5.0*dx);
-      if(opt == "x") bananaHull->rotateAroundPoint(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid(), 0.0, 0.0, -90.0); //around X
-      if(opt == "y") bananaHull->rotateAroundPoint(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid(), 0.0, -90.0, 0.0); //around Y
-      UBLOG(logINFO,"Start write banana hull geometry");
-      GbSystem3D::writeGeoObject(bananaHull.get(), pathname+"/banana_hull", WbWriterVtkXmlASCII::getInstance());
-      UBLOG(logINFO,"Stop write banana hull geometry");
-#endif
-      ////////////////////////////////////////
-      //return;
-      /////////////////////////////////////////
-
-      UBLOG(logINFO,"Start discretization of banana box");
-      discretizeGeoObject(bananaBox, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3);
-      UBLOG(logINFO,"Stop discretization of banana box");
-
-#ifdef BANANAS
-      UBLOG(logINFO,"Start discretization of bananas");
-      discretizeGeoObject(bananas, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3);
-      UBLOG(logINFO,"Stop discretization of bananas");
-#endif
-
-#ifdef CONVEXHULL
-      UBLOG(logINFO,"Start discretization of banana hull");
-      discretizeGeoObject(bananaHull, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3);
-      UBLOG(logINFO,"Stop discretization of banana hull");
-#endif
-
-      UBLOG(logINFO,"Start write geo matrix");
-      writeMatrixToVtkImageFile(pathname + "/geo_matrix.vtk", grid, dx, gridOriginX1, gridOriginX2, gridOriginX3);
-      UBLOG(logINFO,"Stop write geo matrix");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/bananas2/CMakeLists.txt b/apps/cpu/bananas2/CMakeLists.txt
deleted file mode 100644
index 2abcdd2b640f525b8e026592c641ef8921532bfb..0000000000000000000000000000000000000000
--- a/apps/cpu/bananas2/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(bananas2)
-
-INCLUDE(${SOURCE_ROOT}/core/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES core)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(bananas2 BINARY)
diff --git a/apps/cpu/bananas2/bananas2.cpp b/apps/cpu/bananas2/bananas2.cpp
deleted file mode 100644
index 447e1702c72a8a193d21134f6f983eb9b10366cf..0000000000000000000000000000000000000000
--- a/apps/cpu/bananas2/bananas2.cpp
+++ /dev/null
@@ -1,633 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "geometry3d/CoordinateTransformation3D.h"
-#include "Grid3D.h"
-#include "GenBlocksGridVisitor.h"
-#include "geometry3d/GbSystem3D.h"
-#include "geometry3d/GbCuboid3D.h"
-#include "geometry3d/GbCylinder3D.h"
-#include <geometry3d/GbSphere3D.h>
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include "basics/writer/WbWriterVtkXmlBinary.h"
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "RatioBlockVisitor.h"
-#include "RatioSmoothBlockVisitor.h"
-#include "OverlapBlockVisitor.h"
-#include "RefineInterGbObjectsVisitor.h"
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "SetKernelBlockVisitor.h"
-#include "LBMKernelETD3Q27Cascaded.h"
-#include "D3Q27MacroscopicQuantitiesPostprocessor.h"
-#include "MPICommunicator.h"
-#include "D3Q27ETBCProcessor.h"
-#include "SimulationParameters.h"
-#include "D3Q27SetUndefinedNodesBlockVisitor.h"
-#include "SetInterpolationDirsBlockVisitor.h"
-#include "D3Q27SetConnectorsBlockVisitor.h"
-#include "NullCommunicator.h"
-#include "D3Q27ETInitDistributionsBlockVisitor.h"
-#include "CalculationManager.h"
-#include "PQueuePartitioningGridVisitor.h"
-#include "MetisPartitioningGridVisitor.h"
-#include "D3Q27Interactor.h"
-#include "D3Q27NoSlipBCAdapter.h"
-#include "D3Q27VelocityBCAdapter.h"
-#include "D3Q27DensityBCAdapter.h"
-#include "D3Q27BoundaryConditionAdapter.h"
-#include "StringUtil.hpp"
-#include "D3Q27OffsetInterpolationProcessor.h"
-#include "D3Q27CompactInterpolationProcessor.h"
-#include "SyncBcBlockVisitor.h"
-#include "geometry3d/creator/GbTriFaceMesh3DCreator.h"
-#include "geometry3d/GbTriFaceMesh3D.h"
-#include "D3Q27TriFaceMeshInteractor.h"
-#include "basics/utilities/UbFileOutputASCII.h"
-#include "basics/utilities/UbFileInputASCII.h"
-#include "basics/utilities/UbFileInputBinary.h"
-#include "basics/container/CbArray3D.h"
-#include "geometry3d/GbVoxelMatrix3D.h"
-
-
-/* 
- *  The first 3 bits contain node type (fluid, inlet, etc.).
- *  The remaining 5 bits contain the unique geometry number 
- *  in case of solid nodes.
- *
- *  0 0 0 0 0 | 0 0 0
- */
-#define getGeoType(geo) (geo & 0x7) /*= 00000111*/
-#define getNormal(geo) (geo >> 3)
-#define setGeoType(dest, geo_type) dest = (dest & 0xF8) + geo_type
-#define setGeoNormal(dest, geo_id) dest = (geo_id << 3) + getGeoType(dest)
-
-#define GEO_INVALID 0
-#define GEO_FLUID 1
-#define GEO_INLET 2
-#define GEO_HULL 3           //hull
-#define GEO_FLUID_IN_HULL 4  //fluid inside hull
-#define GEO_BANANAS 5        //bananas    
-#define GEO_BOX 6            //box
-
-#define NORMAL_POS_X1 1
-#define NORMAL_NEG_X1 2
-
-#define NORMAL_POS_X2 3
-#define NORMAL_NEG_X2 4
-
-#define NORMAL_POS_X3 5
-#define NORMAL_NEG_X3 6
-
-#define CONVEXHULL
-
-using namespace std;
-
-typedef CbArray3D<int> VoxelMatrix;
-
-//index             0   1   2   3   4   5  6   7   8    9  10  11  12  13  14  15  16  17  18
-//f:                E,  W,  N,  S,  T,  B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, ZERO
-const int EX1[] = { 1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,  0 };
-const int EX2[] = { 0,  0,  1, -1,  0,  0,  1, -1, -1,  1,  0,  0,  0,  0,  1, -1,  1, -1,  0 };
-const int EX3[] = { 0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  1, -1, -1,  1,  1, -1, -1,  1,  0 };
-
-//////////////////////////////////////////////////////////////////////////
-void writeMatrixToVtkImageFile(const std::string& fileName, const VoxelMatrix& geoMatrix,
-                               double itsDeltaXWorld, double orgX1, double orgX2, double orgX3)
-{
-   UbFileOutputASCII out(fileName);
-
-   int NX1 = (int)geoMatrix.getNX1();	
-   int NX2 = (int)geoMatrix.getNX2();	
-   int NX3 = (int)geoMatrix.getNX3();
-   int nn = NX1*NX2*NX3;
-   out.writeLine("# vtk DataFile Version 3.0");
-   out.writeLine(fileName);
-   out.writeLine("ASCII");
-   out.writeLine("DATASET STRUCTURED_POINTS");
-   out.writeString("DIMENSIONS");
-   out.writeInteger(NX1);
-   out.writeInteger(NX2);
-   out.writeInteger(NX3);
-   out.writeLine();
-   out.writeString("ORIGIN");
-   out.writeDouble(orgX1);
-   out.writeDouble(orgX2);
-   out.writeDouble(orgX3);
-   out.writeLine();
-   out.writeString("SPACING");
-   out.writeDouble(itsDeltaXWorld);
-   out.writeDouble(itsDeltaXWorld);
-   out.writeDouble(itsDeltaXWorld);
-   out.writeLine();
-   out.writeString("POINT_DATA");
-   out.writeInteger(nn);
-   out.writeLine();
-   out.writeLine("SCALARS Geo integer");
-   out.writeLine("LOOKUP_TABLE default");
-
-   for(int k=0 ; k<NX3 ; k++){
-      for(int j=0 ; j<NX2 ; j++){
-         for(int i=0 ; i<NX1 ; i++){
-            out.writeInteger( geoMatrix(i,j,k) );
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void readDimensionsFromFldFile(const std::string& fileName, int& d1, int& d2, int& d3)
-{
-   UbFileInputASCII in(fileName);
-   // read grid nx3
-   int dim   = in.readIntegerAfterString("ndim=");
-
-   if (dim != 3) throw UbException(UB_EXARGS,"readGeoMatrixFromFldFile() - Wrong number of dimensions.");
-
-   d1 = in.readIntegerAfterString("dim1=");
-   d2 = in.readIntegerAfterString("dim2=");
-   d3 = in.readIntegerAfterString("dim3=");
-}
-//////////////////////////////////////////////////////////////////////////
-void readGeoMatrixFromFldFile(const std::string& fileName, GbVoxelMatrix3DPtr geoMatrix)
-{
-   UbFileInputASCII in(fileName);
-   // read grid nx3
-   int dim   = in.readIntegerAfterString("ndim=");
-
-   if (dim != 3) throw UbException(UB_EXARGS,"readGeoMatrixFromFldFile() - Wrong number of dimensions.");
-
-   int sizeX = in.readIntegerAfterString("dim1=");
-   int sizeY = in.readIntegerAfterString("dim2=");
-   int sizeZ = in.readIntegerAfterString("dim3=");
-
-   std::string binFileName = in.readStringAfterString("variable 1 file=");
-
-   //separate name from path
-   std::string path = fileName.substr( 0, fileName.find_last_of('//')+1 );
-
-   binFileName = path.append(binFileName);
-
-   UbFileInputBinary binIn(binFileName);
-
-   for (int i=0; i<2048; i++) 
-   {
-      binIn.readChar();
-   }
-
-   int x, y, z, val;
-
-   for(z=0; z<sizeZ; z++)
-   {
-      for(y=0; y<sizeY; y++)
-      {
-         for(x=0; x<sizeX; x++)
-         {
-            val = binIn.readChar();
-
-            if(x!=0 && x!=sizeX-1 && 
-               y!=0 && y!=sizeY-1 &&
-               z!=0 && z!=sizeZ-1   )
-            {
-               if(val == 0)
-               {
-                   (*geoMatrix)(x,y,z) = GbVoxelMatrix3D::SOLID;
-               }
-            }
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void discretizeGeoObject(GbObject3DPtr geoObject, VoxelMatrix& geoMatrix, double delta, 
-                         double orgX1, double orgX2, double orgX3, 
-                         int inValue, int outValue, bool bothSides,
-                         bool overwriteIn, bool overwriteOut,
-                         int noInValue, int noOutValue)
-{
-   int nx1 = (int)geoMatrix.getNX1();
-   int nx2 = (int)geoMatrix.getNX2();
-   int nx3 = (int)geoMatrix.getNX3();
-
-   for(int k=0 ; k<nx3 ; k++)
-   {
-      for(int j=0 ; j<nx2 ; j++)
-      {
-         for(int i=0 ; i<nx1 ; i++)
-         {
-            double x = orgX1 + i*delta;
-            double y = orgX2 + j*delta;
-            double z = orgX3 + k*delta;
-
-            int temp = 0;
-            int gm = geoMatrix(i,j,k);
-
-            if(geoObject->isPointInGbObject3D(x, y, z))  
-            {
-               setGeoType(temp, inValue);
-               if (overwriteIn)
-               {
-                  geoMatrix(i,j,k) = temp;
-               }
-               else
-               {
-                  if(gm != noInValue) 
-                  {
-                     geoMatrix(i,j,k) = temp;
-                  }
-               }
-            }
-            else if(bothSides)
-            {
-               setGeoType(temp, outValue);
-               if (overwriteOut)
-               {
-                  geoMatrix(i,j,k) = temp;
-               }
-               else
-               {
-                  if(gm != noOutValue) 
-                  {
-                     geoMatrix(i,j,k) = temp;
-                  }
-               }
-            }
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-bool hasNeighbor(VoxelMatrix& geoMatrix, int x1, int x2, int x3)
-{
-   bool result = false;
-   for( int dir = 0; dir < 18; dir++)
-   {
-      int temp = geoMatrix(x1+EX1[dir], x2+EX2[dir], x3+EX3[dir]);
-      if(temp == GEO_BANANAS || temp == GEO_FLUID_IN_HULL)
-      {
-         result = true;
-         break;
-      }
-   }
-   return result;
-}
-//////////////////////////////////////////////////////////////////////////
-void createHull(VoxelMatrix& geoMatrix)
-{
-   int nx1 = (int)geoMatrix.getNX1();
-   int nx2 = (int)geoMatrix.getNX2();
-   int nx3 = (int)geoMatrix.getNX3();
-
-   for(int k=1 ; k<nx3-1 ; k++)
-   {
-      for(int j=1 ; j<nx2-1 ; j++)
-      {
-         for(int i=1 ; i<nx1-1 ; i++)
-         {
-            int val = geoMatrix(i,j,k);
-            if(val == GEO_FLUID)
-            {
-               if(hasNeighbor(geoMatrix, i, j, k))
-               {
-                  int temp = 0;
-                  setGeoType(temp, GEO_HULL);
-                  geoMatrix(i,j,k) = temp;
-               }
-            }
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void writeGbVoxelMatrix3DtoVtuXmlASCII(const std::string& fileName, GbVoxelMatrix3DPtr voxelMatrix, 
-                                       double worldDeltaX1, double worldDeltaX2, double worldDeltaX3,
-                                       int nx1, int nx2, int nx3)
-{
-   std::vector< UbTupleFloat3 > nodes;
-   std::vector<std::string > datanames;
-   std::vector<std::vector<double > > nodedata;
-   
-   datanames.resize(0);
-   datanames.push_back("Solid");
-   nodes.resize(0);
-   nodedata.resize(datanames.size());
-
-   double orgX1 = voxelMatrix->getX1Minimum();
-   double orgX2 = voxelMatrix->getX2Minimum();
-   double orgX3 = voxelMatrix->getX3Minimum();
-
-   int index = 0;
-   double x1KO,x2KO,x3KO;
-   
-      for (int x3=0; x3<nx3;x3++){
-         for (int x2=0; x2<nx2;x2++){
-            for(int x1=0; x1<nx1;x1++)
-            {
-                  x1KO = orgX1 + worldDeltaX1*(double)x1;
-                  x2KO = orgX2 + worldDeltaX2*(double)x2;
-                  x3KO = orgX3 + worldDeltaX3*(double)x3;
-                  nodes.push_back( makeUbTuple(float(x1KO), float(x2KO), float(x3KO)) );
-                  nodedata[0].push_back((*voxelMatrix)(x1,x2,x3));
-            }
-         }
-      }
-   WbWriterVtkXmlASCII::getInstance()->writeNodesWithNodeData(fileName, nodes,  datanames, nodedata); 
-}
-//////////////////////////////////////////////////////////////////////////
-void writeGbVoxelMatrix3DtoLegacyVTK(const std::string& fileName, GbVoxelMatrix3DPtr voxelMatrix,
-                                       double worldDeltaX1, double worldDeltaX2, double worldDeltaX3,
-                                       int nx1, int nx2, int nx3)
-{
-   UbFileOutputASCII out(fileName);
-
-   int nn = nx1*nx2*nx3;
-   out.writeLine("# vtk DataFile Version 3.0");
-   out.writeLine(fileName);
-   out.writeLine("ASCII");
-   out.writeLine("DATASET STRUCTURED_POINTS");
-   out.writeString("DIMENSIONS");
-   out.writeInteger(nx1);
-   out.writeInteger(nx2);
-   out.writeInteger(nx3);
-   out.writeLine();
-   out.writeString("ORIGIN");
-   out.writeDouble(voxelMatrix->getX1Minimum());
-   out.writeDouble(voxelMatrix->getX2Minimum());
-   out.writeDouble(voxelMatrix->getX3Minimum());
-   out.writeLine();
-   out.writeString("SPACING");
-   out.writeDouble(worldDeltaX1);
-   out.writeDouble(worldDeltaX2);
-   out.writeDouble(worldDeltaX3);
-   out.writeLine();
-   out.writeString("POINT_DATA");
-   out.writeInteger(nn);
-   out.writeLine();
-   out.writeLine("SCALARS Geo integer");
-   out.writeLine("LOOKUP_TABLE default");
-
-   for(int k=0 ; k<nx3 ; k++){
-      for(int j=0 ; j<nx2 ; j++){
-         for(int i=0 ; i<nx1 ; i++){
-            out.writeInteger( (int)(*voxelMatrix)(i,j,k) );
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void setNormalsOnBoundary(int minX1, int minX2, int minX3, int maxX1, int maxX2, int maxX3, VoxelMatrix& matrix, int dir)
-{
-   for (int ix3 = minX3; ix3 <= maxX3; ix3++)
-      for (int ix2 = minX2; ix2 <= maxX2; ix2++)
-         for (int ix1 = minX1; ix1 <= maxX1; ix1++)
-         {
-
-            int temp = 0;
-            temp = getGeoType(matrix(ix1, ix2, ix3));
-            setGeoNormal(temp, dir);
-            matrix(ix1, ix2, ix3) = temp;
-         }
-}
-//////////////////////////////////////////////////////////////////////////
-void run(const char *cstr)
-{
-   try
-   {
-      std::string opt;
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-      else
-      {
-         UBLOG(logINFO,"no option: x, y or z");
-         return;
-      }
-
-      string pathnameGeo = "/home/koskuche/data/bananas";
-      string pathname;
-
-      if(opt == "z") pathname = "/work/koskuche/scratch/bananas2/setupZ";
-
-      if(opt == "x") pathname = "/work/koskuche/scratch/bananas2/setupX";
-
-      if(opt == "y") pathname = "/work/koskuche/scratch/bananas2/setupY";
-
-      CommunicatorPtr comm(new MPICommunicator());
-     
-      //////////////////////////////////////////////////////////////////////////
-      // Geometries
-      //////////////////////////////////////////////////////////////////////////
-      //bananas box geometry
-      UBLOG(logINFO,"Start read bananas box geometry");
-      GbTriFaceMesh3DPtr bananaBox (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathnameGeo+"/Banana_boxD.stl","banana_box"));
-      UBLOG(logINFO,"Stop read bananas box geometry");
-      bananaBox->rotate(90.0, 0.0, 0.0); //around Z
-
-      double b_minX1 = bananaBox->getX1Minimum();
-      double b_minX2 = bananaBox->getX2Minimum();
-      double b_minX3 = bananaBox->getX3Minimum();
-
-      double b_maxX1 = bananaBox->getX1Maximum();
-      double b_maxX2 = bananaBox->getX2Maximum();
-      double b_maxX3 = bananaBox->getX3Maximum();
-
-      if(opt == "x") bananaBox->rotate(0.0, 0.0, -90.0); //around X
-
-      if(opt == "y") bananaBox->rotate(0.0, -90.0, 0.0); //around Y
-
-      //after rotation for setup 2-3
-      double bb_minX1 = bananaBox->getX1Minimum();
-      double bb_minX2 = bananaBox->getX2Minimum();
-      double bb_minX3 = bananaBox->getX3Minimum();
-
-      double bb_maxX1 = bananaBox->getX1Maximum();
-      double bb_maxX2 = bananaBox->getX2Maximum();
-      double bb_maxX3 = bananaBox->getX3Maximum();
-
-      UBLOG(logINFO,"Start write bananas box geometry");
-      GbSystem3D::writeGeoObject(bananaBox.get(), pathname+"/banana_box", WbWriterVtkXmlASCII::getInstance());
-      UBLOG(logINFO,"Stop write bananas box geometry");
-
-      //distances for bounding box
-      double dist_z = 0.022;
-      double site   = 0.011;
-
-      //bounding box of simulation
-      double g_minX1 = bananaBox->getX1Minimum()-site;
-      double g_minX2 = bananaBox->getX2Minimum()-site;
-      double g_minX3 = bananaBox->getX3Minimum()-dist_z*2.0;
-
-      double g_maxX1 = bananaBox->getX1Maximum()+site;
-      double g_maxX2 = bananaBox->getX2Maximum()+site;
-      double g_maxX3 = bananaBox->getX3Maximum()+dist_z*2.0;
-
-      const double gridOriginX1 = g_minX1;
-      const double gridOriginX2 = g_minX2;
-      const double gridOriginX3 = g_minX3;
-
-      const double dx = 2.20183486239e-3;
-      UBLOG(logINFO,"DeltaX = " << dx);
-
-      GbCuboid3DPtr addWall1 (new GbCuboid3D(g_minX1, g_minX2, bb_minX3, bb_minX1, g_maxX2, bb_minX3+2*dx));
-      GbSystem3D::writeGeoObject(addWall1.get(), pathname+"/addWall1", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWall2 (new GbCuboid3D(bb_maxX1, g_minX2, bb_minX3, g_maxX1, g_maxX2, bb_minX3+2*dx));
-      GbSystem3D::writeGeoObject(addWall2.get(), pathname+"/addWall2", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWall3 (new GbCuboid3D(g_minX1, g_minX2, bb_minX3, g_maxX1, bb_minX2, bb_minX3+2*dx));
-      GbSystem3D::writeGeoObject(addWall3.get(), pathname+"/addWall3", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWall4 (new GbCuboid3D(g_minX1, bb_maxX2, bb_minX3, g_maxX1, g_maxX2, bb_minX3+2*dx));
-      GbSystem3D::writeGeoObject(addWall4.get(), pathname+"/addWall4", WbWriterVtkXmlASCII::getInstance());
-
-      VoxelMatrix grid(int((g_maxX1-g_minX1)/dx)+1, int((g_maxX2-g_minX2)/dx)+1, int((g_maxX3-g_minX3)/dx)+1, GEO_FLUID);
-
-      UBLOG(logINFO,"Start write geo matrix empty");
-      writeMatrixToVtkImageFile(pathname + "/geo_matrix_empty.vtk", grid, dx, gridOriginX1, gridOriginX2, gridOriginX3);
-      UBLOG(logINFO,"Stop write geo matrix empty");
-
-#ifdef CONVEXHULL
-      UBLOG(logINFO,"Start read bananas box geometry");
-      GbTriFaceMesh3DPtr bananasHull (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathnameGeo+"/convexhullASCII.stl","banana_hull"));
-      UBLOG(logINFO,"Stop read bananas box geometry");
-      double tr1 = bananasHull->getX3Minimum() - bananaBox->getX3Minimum();
-      bananasHull->translate(0.0, 0.0, 5.0*dx);
-#endif
-
-      //reed bananas
-      UBLOG(logINFO,"Start read bananas geometry");
-      int d1, d2, d3;
-      readDimensionsFromFldFile(pathnameGeo + "/BANANA_8binn_Binear_A.fld", d1, d2, d3);
-      UBLOG(logINFO,"Dimensions of bananas geometry: " << d1 << ", " << d2 << ", " << d3);
-      GbVoxelMatrix3DPtr bananas(new GbVoxelMatrix3D(d1, d2, d3, float(GbVoxelMatrix3D::FLUID))); 
-      readGeoMatrixFromFldFile(pathnameGeo + "/BANANA_8binn_Binear_A.fld", bananas);
-      UBLOG(logINFO,"Stop read bananas geometry");
-      double bananasDx1 = (b_maxX1 - b_minX1) / float(d1);
-      double bananasDx2 = (b_maxX2 - b_minX2) / float(d2);
-      double bananasDx3 = (b_maxX3 - b_minX3) / float(d3);
-      bananas->setVoxelMatrixDelta(float(bananasDx1), float(bananasDx2), float(bananasDx3));
-      bananas->setCenterCoordinates(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid());
-      bananas->setVoxelMatrixMininum(float(b_minX1), float(b_minX2), float(b_minX3));
-      
-      bananas->rotate90aroundY();
-      bananas->rotate90aroundY();
-      bananas->rotate90aroundZ();
-      bananas->rotate90aroundZ();
-      
-#ifdef CONVEXHULL
-      std::cout << "translate bananas: " <<bananasHull->getX3Minimum() - bananas->getX3Minimum() - tr1<<"\n";
-      bananas->translate(0.0, 0.0, bananasHull->getX3Minimum() - bananas->getX3Minimum() - tr1);
-      if(opt == "x") bananasHull->rotateAroundPoint(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid(), 0.0, 0.0, -90.0); //around X
-      if(opt == "y") bananasHull->rotateAroundPoint(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid(), 0.0, -90.0, 0.0); //around Y
-      UBLOG(logINFO,"Start write banana hull geometry");
-      GbSystem3D::writeGeoObject(bananasHull.get(), pathname+"/banana_hull", WbWriterVtkXmlASCII::getInstance());
-      UBLOG(logINFO,"Stop write banana hull geometry");
-#endif
-      
-      if(opt == "x")
-      {
-         bananas->rotate90aroundX(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid());
-         bananas->rotate90aroundX(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid());
-         bananas->rotate90aroundX(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid());
-      }
-      else if(opt == "y")
-      {
-         bananas->rotate90aroundY(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid());
-         bananas->rotate90aroundY(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid());
-         bananas->rotate90aroundY(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid());
-      }
-
-      UBLOG(logINFO,"Start write bananas geometry");
-      bananas->writeToLegacyVTK(pathname + "/bananas.vtk");
-      UBLOG(logINFO,"Stop write bananas geometry");
-
-#ifdef BANANAS
-      UBLOG(logINFO,"Start discretization of banana box");
-      discretizeGeoObject(bananaBox, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX);
-      UBLOG(logINFO,"Stop discretization of banana box");
-      UBLOG(logINFO,"Start discretization of bananas");
-      discretizeGeoObject(bananas, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BANANAS);
-      UBLOG(logINFO,"Stop discretization of bananas");
-#endif
-
-#ifdef CONVEXHULL
-      UBLOG(logINFO,"Start discretization of bananas");
-      discretizeGeoObject(bananas, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BANANAS, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID);
-      UBLOG(logINFO,"Stop discretization of bananas");
-      UBLOG(logINFO,"Start discretization of hull");
-      discretizeGeoObject(bananasHull, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_FLUID_IN_HULL, GEO_FLUID, true, false, true, GEO_BANANAS, GEO_INVALID);
-      UBLOG(logINFO,"Stop discretization of hull");
-      UBLOG(logINFO,"Start creation of hull film");
-      createHull(grid);
-      UBLOG(logINFO,"Stop creation of hull film");
-      UBLOG(logINFO,"Start discretization of banana box");
-      discretizeGeoObject(bananaBox, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID);
-      UBLOG(logINFO,"Stop discretization of banana box");
-#endif
-
-      UBLOG(logINFO,"Start discretization of add walls");
-      discretizeGeoObject(addWall1, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID);
-      discretizeGeoObject(addWall2, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID);
-      discretizeGeoObject(addWall3, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID);
-      discretizeGeoObject(addWall4, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID);
-      UBLOG(logINFO,"Stop discretization of add walls");
-
-      UBLOG(logINFO,"Start set normals");
-      int boxNX1 = int(bananaBox->getLengthX1() / dx);
-      int boxNX2 = int(bananaBox->getLengthX2() / dx);
-      int boxNX3 = int(bananaBox->getLengthX3() / dx);
-
-      int minX1 = int((bb_minX1 - gridOriginX1) / dx)+1;
-      int minX2 = int((bb_minX2 - gridOriginX2) / dx)+1;
-      int minX3 = int((bb_minX3 - gridOriginX3) / dx)+1;
-
-      int maxX1 = minX1 + boxNX1;
-      int maxX2 = minX2 + boxNX2;
-      int maxX3 = minX3 + boxNX3;
-
-      UBLOG(logINFO,"minX1="<<minX1<<",minX2= "<<minX2<<",minX3="<<minX3);
-      UBLOG(logINFO,"maxX1="<<maxX1<<",maxX2= "<<maxX2<<",maxX3="<<maxX3);
-
-
-      for (int ix3 = 0; ix3 < grid.getNX3(); ix3++)
-         for (int ix2 = 0; ix2 < grid.getNX2(); ix2++)
-            for (int ix1 = 0; ix1 < grid.getNX1(); ix1++)
-            {
-               int temp = grid(ix1, ix2, ix3);
-               setGeoNormal(temp, 0);
-               grid(ix1, ix2, ix3) = temp;
-            }
-
-
-      setNormalsOnBoundary(minX1, minX2, minX3, minX1, maxX2, maxX3, grid, NORMAL_NEG_X1);
-      setNormalsOnBoundary(maxX1, minX2, minX3, maxX1, maxX2, maxX3, grid, NORMAL_POS_X1);
-      setNormalsOnBoundary(minX1, minX2, minX3, maxX1, minX2, maxX3, grid, NORMAL_NEG_X2);
-      setNormalsOnBoundary(minX1, maxX2, minX3, maxX1, maxX2, maxX3, grid, NORMAL_POS_X2);
-      setNormalsOnBoundary(minX1, minX2, minX3, maxX1, maxX2, minX3, grid, NORMAL_NEG_X3);
-      setNormalsOnBoundary(minX1, minX2, maxX3, maxX1, maxX2, maxX3, grid, NORMAL_POS_X3);
-      UBLOG(logINFO,"Stop set normals");
-
-
-      UBLOG(logINFO,"Start write geo matrix");
-      writeMatrixToVtkImageFile(pathname + "/geo_matrix.vtk", grid, dx, gridOriginX1, gridOriginX2, gridOriginX3);
-      UBLOG(logINFO,"Stop write geo matrix");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/band/band.cpp b/apps/cpu/band/band.cpp
index b454ff1284bbb1d64d657e9c87a51be2cbf06d66..da9a14d9e069c6deb165d4c6e469ef78f37f4519 100644
--- a/apps/cpu/band/band.cpp
+++ b/apps/cpu/band/band.cpp
@@ -265,11 +265,11 @@ void run(const char *cstr)
 
          if (refineLevel > 0)
          {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - start");    
             RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
             refineHelper.addGbObject(refinePlatteBox, refineLevel);
             refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - end");    
          }
 
          /////////////////////////////////////////////////
@@ -331,7 +331,7 @@ void run(const char *cstr)
 
          ////////////////////////////////////////////
          //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));	
+         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));    
 
          ////////////////////////////////////////////
          /////delete solid blocks
@@ -350,7 +350,7 @@ void run(const char *cstr)
          intHelper.addInteractor(densInteractor);
          intHelper.addInteractor(velBCInteractor);
          intHelper.selectBlocks();
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
+         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");     
          //////////////////////////////////////
 
          //domain decomposition for threads
diff --git a/apps/cpu/bbone/CMakeLists.txt b/apps/cpu/bbone/CMakeLists.txt
deleted file mode 100644
index 42a14bfafe227eae31150ee23d24d9c37622e501..0000000000000000000000000000000000000000
--- a/apps/cpu/bbone/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(bbone)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(bbone BINARY)
diff --git a/apps/cpu/bbone/bbone.cpp b/apps/cpu/bbone/bbone.cpp
deleted file mode 100644
index 558ff4c9848bac363e4e01ad94fcd450745ea3de..0000000000000000000000000000000000000000
--- a/apps/cpu/bbone/bbone.cpp
+++ /dev/null
@@ -1,427 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <vfluids.h>
-
-using namespace std;
-
-
-void sbonepd(string configname)
-{
-   try
-   {
-      Configuration   config;
-      config.load(configname);
-
-      string          pathname          = config.getString("pathname");
-      string          pathGeo           = config.getString("pathGeo");
-      int             numOfThreads      = config.getInt("numOfThreads");
-      string          sampleFilename    = config.getString("sampleFilename");
-      int             pmNX1             = config.getInt("pmNX1");
-      int             pmNX2             = config.getInt("pmNX2");
-      int             pmNX3             = config.getInt("pmNX3");
-      double          lthreshold        = config.getDouble("lthreshold");
-      double          uthreshold        = config.getDouble("uthreshold");
-      double          dp_real           = config.getDouble("dp_real");
-      string          timeSeriesFile    = config.getString("timeSeriesFile");
-      double          restartStep       = config.getDouble("restartStep");
-      double          restartStepStart  = config.getDouble("restartStepStart");
-      double          endTime           = config.getDouble("endTime");
-      double          outTime           = config.getDouble("outTime");
-      double          availMem          = config.getDouble("availMem");
-      double          timeSeriesOutTime = config.getDouble("timeSeriesOutTime");
-      bool            logToFile         = config.getBool("logToFile");
-      double          deltaT            = config.getDouble("deltaT");
-      
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            int status = mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-
-
-      if (myid == 0) UBLOG(logINFO, "Testcase big bone");
-
-      Grid3DPtr grid(new Grid3D(comm));
-      double deltaVoxel = 11.658e-6;
-
-      double dx = deltaVoxel;
-
-      const int blocknx1 = 64;
-      const int blocknx2 = 64;
-      const int blocknx3 = 64;
-
-      LBMReal rho_LB = 0.0;
-      //nueWasser = 1e-6 m^2/s
-      double nu_real = 1e-6;
-      LBMReal dt = deltaT; //1e-5; // s (frei gew�hlt)
-      //dx - frei gew�hlt
-      //
-      LBMReal nu_LB = nu_real / (dx*dx / dt);
-
-
-      //dp = 50000 Pa - 0 Pa = 50000 Pa
-      //rho wasser = 1000 kg*m^-3
-      double rho_real = 1000;
-      //dp/rho = 50000/1000 = 50 m^2/s^2
-      double dp_div_rho_real = dp_real / rho_real;
-
-      double dp_LB = dp_div_rho_real / ((dx / dt)*(dx / dt));
-
-      double rhoLBinflow;
-      rhoLBinflow = dp_LB*3.0;
-     
-      double deltax = dx;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-      const int refineLevel = 0;
-
-      double coord[6];
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(restartStep, restartStepStart));
-      RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (grid->getTimeStep() == 0)
-      {
-         if (myid == 0) UBLOG(logINFO, "Neustart..");
-
-         string boneFilename = pathGeo + sampleFilename;
-
-         //int pmNX1 = 1164;  //abmessung einzelbild in x-richtung
-         //int pmNX2 = 972; //abmessung einzelbild in y richtung
-         //int pmNX3 = 900; //anzahl der bilder
-         ////int pmNX3 = 10; //anzahl der bilder
-         //float lthreshold = 109.0;
-         //float uthreshold = 255.0;
-
-         GbVoxelMatrix3DPtr bone(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         bone->readMatrixFromRawFile<unsigned char>(boneFilename, GbVoxelMatrix3D::BigEndian);
-         bone->setVoxelMatrixDelta(deltaVoxel, deltaVoxel, deltaVoxel);
-         bone->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-
-         if (myid == 0) bone->writeToVTKImageDataASCII(pathname + "/geo/bone");
-
-         ///////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////
-
-         double offset = 0.5e-3;
-         //bounding box
-         double g_minX1 = bone->getX1Minimum();
-         double g_minX2 = bone->getX2Minimum();
-         double g_minX3 = bone->getX3Minimum() - offset;
-
-         double g_maxX1 = bone->getX1Maximum();
-         double g_maxX2 = bone->getX2Maximum();
-         double g_maxX3 = bone->getX3Maximum() + offset;
-
-         double blockLength = (double)blocknx1*deltax;
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(false);
-         grid->setPeriodicX3(false);
-         grid->setDeltaX(deltax);
-         grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "rho_LB = " << rho_LB);
-            UBLOG(logINFO, "nu_LB = " << nu_LB);
-            UBLOG(logINFO, "dp_LB = " << dp_LB);
-            UBLOG(logINFO, "dx = " << dx << " m");
-            UBLOG(logINFO, "dt = " << dt << " s");
-            UBLOG(logINFO, "rho_real = " << rho_real << " kg*m^-3");
-            UBLOG(logINFO, "nu_real = " << nu_real << " m^2/s");
-            UBLOG(logINFO, "dp_real = " << dp_real << " Pa");
-
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         //cylinder
-         double radius = 0.0036;
-         double cx1 = 0.007;
-         double cx2 = 0.0046;
-
-         GbObject3DPtr cylinder(new GbCylinder3D(cx1, cx2, g_minX3 - offset, cx1, cx2, g_maxX3 + offset, radius));
-         GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance());
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         //bone interactor
-         int bcOptionBone = 1; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall
-         D3Q27BoundaryConditionAdapterPtr bcBone(new D3Q27NoSlipBCAdapter(bcOptionBone));
-         D3Q27InteractorPtr boneInt(new D3Q27Interactor(bone, grid, bcBone, Interactor3D::SOLID));
-
-         //wall interactors
-         int bcOptionWall = 1; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall
-         D3Q27BoundaryConditionAdapterPtr bcWall(new D3Q27NoSlipBCAdapter(bcOptionWall));
-         D3Q27InteractorPtr cylInt(new D3Q27Interactor(cylinder, grid, bcWall, Interactor3D::INVERSESOLID));
-
-         D3Q27BoundaryConditionAdapterPtr denBCAdapterInflow(new D3Q27DensityBCAdapter(rhoLBinflow));
-         denBCAdapterInflow->setSecondaryBcOption(0);
-         D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID));
-
-         //outflow
-         D3Q27BoundaryConditionAdapterPtr denBCAdapterOutflow(new D3Q27DensityBCAdapter(rho_LB));
-         denBCAdapterOutflow->setSecondaryBcOption(0);
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW));
-         ////////////////////////////////////////////
-         //Zoltan
-         //Grid3DVisitorPtr zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW, 1));
-         //////////////////////////////////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(boneInt);
-         intHelper.addInteractor(cylInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nodg = nob * (blocknx1 + gl) * (blocknx2 + gl) * (blocknx3 + gl);
-         double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << nob);
-            UBLOG(logINFO, "Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernel3DPtr kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL));
-
-         //BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor());
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         BoundaryConditionPtr densityBC(new NonEqDensityBoundaryCondition());
-         BoundaryConditionPtr noSlipBC(new NoSlipBoundaryCondition());
-         bcProc->addBC(densityBC);
-         bcProc->addBC(noSlipBC);
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         //BC
-         intHelper.setBC();
-
-         BoundaryConditionBlockVisitor bcVisitor;
-         grid->accept(bcVisitor);
-
-         //Press*1.6e8+(14.76-coordsX)/3.5*5000
-         //initialization of distributions
-         mu::Parser fct;
-         fct.SetExpr("(x3max-x3)/l*dp*3.0");
-         fct.DefineConst("dp", dp_LB);
-         fct.DefineConst("x3max", g_maxX3);
-         fct.DefineConst("l", g_maxX3-g_minX3);
-
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB);
-         initVisitor.setRho(fct);
-         //initVisitor.setVx1(fct);
-         //initVisitor.setVx1(0.0);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-
-
-         coord[0] = bone->getX1Minimum();
-         coord[1] = bone->getX2Minimum();
-         coord[2] = bone->getX3Minimum();//cylinder->getX3Centroid();
-         coord[3] = bone->getX1Maximum();
-         coord[4] = bone->getX2Maximum();
-         coord[5] = bone->getX3Maximum(); //cylinder->getX3Centroid();
-
-         ////////////////////////////////////////////////////////
-         FILE * pFile;
-         string str = pathname + "/checkpoints/coord.txt";
-         pFile = fopen(str.c_str(), "w");
-         fprintf(pFile, "%g\n", coord[0]);
-         fprintf(pFile, "%g\n", coord[1]);
-         fprintf(pFile, "%g\n", coord[2]);
-         fprintf(pFile, "%g\n", coord[3]);
-         fprintf(pFile, "%g\n", coord[4]);
-         fprintf(pFile, "%g\n", coord[5]);
-         fclose(pFile);
-         ////////////////////////////////////////////////////////
-         grid->addInteractor(inflowInt);
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         Grid3D::Interactor3DSet interactors = grid->getInteractors();
-         interactors[0]->setGrid3D(grid);
-         boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->deleteBCAdapter();
-         D3Q27BoundaryConditionAdapterPtr denBCAdapterFront(new D3Q27DensityBCAdapter(rhoLBinflow));
-         boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->addBCAdapter(denBCAdapterFront);
-         interactors[0]->updateInteractor();
-
-         UBLOG(logINFO, "rhoLBinflow = "<<rhoLBinflow);
-
-         BoundaryConditionBlockVisitor bcVisitor;
-         grid->accept(bcVisitor);
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         ////////////////////////////////////////////////////////
-         FILE * pFile;
-         string str = pathname + "/checkpoints/coord.txt";
-         pFile = fopen(str.c_str(), "r");
-         fscanf(pFile, "%lg\n", &coord[0]);
-         fscanf(pFile, "%lg\n", &coord[1]);
-         fscanf(pFile, "%lg\n", &coord[2]);
-         fscanf(pFile, "%lg\n", &coord[3]);
-         fscanf(pFile, "%lg\n", &coord[4]);
-         fscanf(pFile, "%lg\n", &coord[5]);
-         fclose(pFile);
-         ////////////////////////////////////////////////////////
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm);
-
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      //stepSch->addSchedule(10, 10, 10);
-      //stepSch->addSchedule(100, 100, 100);
-      //stepSch->addSchedule(1000, 1000, 1000);
-      //stepSch->addSchedule(100, 1500, 2000);
-      //stepSch->addSchedule(10000, 10000, 10000);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv);
-
-      double dxd2 = deltax / 2.0;
-      D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2] - dxd2*10.0,
-         coord[3], coord[4], coord[2] - dxd2*10.0 - 2.0*dxd2));
-      D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]));
-      D3Q27IntegrateValuesHelperPtr ih3(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[5] + dxd2*10.0,
-         coord[3], coord[4], coord[5] + dxd2*10.0 + 2.0*dxd2));
-
-      if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance());
-      if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance());
-      if (myid == 0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname + "/geo/ih3", WbWriterVtkXmlBinary::getInstance());
-
-      UbSchedulerPtr stepMV(new UbScheduler(timeSeriesOutTime));
-
-      TimeseriesPostprocessor tsp1(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm);
-      TimeseriesPostprocessor tsp2(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm);
-      TimeseriesPostprocessor tsp3(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm);
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepMV));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-         sbonepd(string(argv[1]));
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/bbone/configBombadilBone.txt b/apps/cpu/bbone/configBombadilBone.txt
deleted file mode 100644
index 880c0cce60766fc9c4d8327ed275a9bda0d072ba..0000000000000000000000000000000000000000
--- a/apps/cpu/bbone/configBombadilBone.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-#Simulation parameters for determitatoin of permeability
-#SBP120
-
-pathname = d:/temp/bbone2
-pathGeo = d:/Data/Bone/BigBone
-numOfThreads = 4
-availMem = 3e9
-logToFile = false
-
-#porous media
-#rawFile = false
-sampleFilename = /cyl_bone2.raw
-
-#diminsions [voxel]
-pmNX1 = 1164
-pmNX2 = 972
-pmNX3 = 900
-
-#threshold
-lthreshold = 109
-uthreshold = 255
-
-#diminsions [m]
-#pmL1 = 1.87e-3
-#pmL2 = 1.87e-3
-#pmL3 = 1.87e-3
-
-#grid
-#blocknx = 30
-#nx3 = 5
-#blocknx = 50
-#nx3 = 10
-#spongeLayer=true
-
-#physic
-dp_real = 1
-
-timeSeriesFile = /timeseries/bone1
-timeSeriesOutTime = 10
-
-restartStep = 20000
-restartStepStart=20000
-
-endTime = 60000
-outTime = 100
diff --git a/apps/cpu/bbone/configLudwigBone.cfg b/apps/cpu/bbone/configLudwigBone.cfg
deleted file mode 100644
index aee907cae82eccf522b8ed7d29cdca57a7e6f018..0000000000000000000000000000000000000000
--- a/apps/cpu/bbone/configLudwigBone.cfg
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-#Simulation parameters for determitatoin of permeability
-#SBP120
-
-pathname = /hpc3lustre/work/koskuche/Bone/BigBone2
-pathGeo = /hpc3lustre/work/koskuche/Bone/data/bbone
-numOfThreads = 4
-availMem = 11e9
-logToFile = true
-
-#porous media
-sampleFilename = /cyl_bone2.raw
-
-#diminsions [voxel]
-pmNX1 = 1164
-pmNX2 = 972
-pmNX3 = 900
-
-#threshold
-lthreshold = 109
-uthreshold = 255
-
-#physic
-dp_real = 1
-
-timeSeriesFile = /timeseries/bone1
-timeSeriesOutTime = 10
-
-restartStep = 20000
-restartStepStart=20000
-
-endTime = 60000
-outTime = 10000
diff --git a/apps/cpu/block_test/block_test_all.hpp b/apps/cpu/block_test/block_test_all.hpp
index bbe172dd3f6477a5262bc9eee997d32ceed95e5e..19a1d0be14d5fb1a228a37f0c93c9d536e58cc90 100644
--- a/apps/cpu/block_test/block_test_all.hpp
+++ b/apps/cpu/block_test/block_test_all.hpp
@@ -106,12 +106,12 @@ void block_test_all(const char *cstr)
       double L2, L3, H;
       L2 = L3 = H = gridNx2*blocknx1;
 
-      LBMReal radius = 3;
-      LBMReal uLB = 0.05;
-      LBMReal Re = 300.0;
-      LBMReal rhoLB = 1.0;
-      LBMReal l = L2 / dx;
-      LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
+      real radius = 3;
+      real uLB = 0.05;
+      real Re = 300.0;
+      real rhoLB = 1.0;
+      real l = L2 / dx;
+      real nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
 
 
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
@@ -196,7 +196,7 @@ void block_test_all(const char *cstr)
 
       if (refineLevel > 0)
       {
-         if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+         if(myid == 0) UBLOG(logINFO,"Refinement - start");    
          RefineCrossAndInsideGbObjectBlockVisitor refVisitor(refineCube, baseLevel, refineLevel-1);
          grid->accept(refVisitor);
 
@@ -213,7 +213,7 @@ void block_test_all(const char *cstr)
          D3Q27System::getLBMDirections(dirs);
          SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
          grid->accept(interDirsVisitor);
-         if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+         if(myid == 0) UBLOG(logINFO,"Refinement - end");    
       }
 
       MetisPartitioningGridVisitor metisVisitor(numOfThreads, D3Q27System::B, comm, true);
diff --git a/apps/cpu/block_test/block_test_incompressible.hpp b/apps/cpu/block_test/block_test_incompressible.hpp
index 61b8d762bdf727816f07833c30e02e86e02c2c20..27e21f452bb1672310da2052c2d030b72b51c4d4 100644
--- a/apps/cpu/block_test/block_test_incompressible.hpp
+++ b/apps/cpu/block_test/block_test_incompressible.hpp
@@ -68,13 +68,13 @@ void block_test_incompressible(const char *cstr1, const char *cstr2)
       double L2, L3, H;
       L2 = L3 = H = gridNx2*blocknx1*dx;
 
-      LBMReal radius = 3.0*dx;
-      LBMReal uLB = 0.01;
-      LBMReal Re = 0.5;
-      LBMReal rhoLB = 0.0;
-      LBMReal l = L2 / dx;
-      LBMReal nuLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
-      //LBMReal nueLB = 0.005842;
+      real radius = 3.0*dx;
+      real uLB = 0.01;
+      real Re = 0.5;
+      real rhoLB = 0.0;
+      real l = L2 / dx;
+      real nuLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
+      //real nueLB = 0.005842;
 
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
 
@@ -198,11 +198,11 @@ void block_test_incompressible(const char *cstr1, const char *cstr2)
 
          if (refineLevel > 0)
          {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - start");    
             RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
             refineHelper.addGbObject(refineCube, refineLevel);
             refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+            if(myid == 0) UBLOG(logINFO,"Refinement - end");    
          }
 
 
diff --git a/apps/cpu/block_test/block_test_periodic.hpp b/apps/cpu/block_test/block_test_periodic.hpp
index 4189a903a791cbff4dac801f8b0e34c25bcfac4c..875f69f2375470d9b89f519ef3dc97d431d4c0a1 100644
--- a/apps/cpu/block_test/block_test_periodic.hpp
+++ b/apps/cpu/block_test/block_test_periodic.hpp
@@ -59,13 +59,13 @@ void block_test_periodic(const char *cstr1, const char *cstr2)
       double L2, L3, H;
       L2 = L3 = H = gridNx2*blocknx1;
 
-      LBMReal radius = 3;
-      LBMReal uLB = 0.05;
-      LBMReal Re = 20.0;
-      LBMReal rhoLB = 0.0;
-      LBMReal l = L2 / dx;
-      //LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
-      LBMReal nueLB = 0.05842;
+      real radius = 3;
+      real uLB = 0.05;
+      real Re = 20.0;
+      real rhoLB = 0.0;
+      real l = L2 / dx;
+      //real nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
+      real nueLB = 0.05842;
 
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
 
@@ -189,7 +189,7 @@ void block_test_periodic(const char *cstr1, const char *cstr2)
 
       if (refineLevel > 0)
       {
-         if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+         if(myid == 0) UBLOG(logINFO,"Refinement - start");    
          RefineCrossAndInsideGbObjectBlockVisitor refVisitor(refineCube, refineLevel);
          grid->accept(refVisitor);
 
@@ -206,7 +206,7 @@ void block_test_periodic(const char *cstr1, const char *cstr2)
          D3Q27System::getLBMDirections(dirs);
          SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
          grid->accept(interDirsVisitor);
-         if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+         if(myid == 0) UBLOG(logINFO,"Refinement - end");    
       }
 
       MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, true, numOfThreads);
diff --git a/apps/cpu/bond_benchmark/bonb_b_chanel.cpp b/apps/cpu/bond_benchmark/bonb_b_chanel.cpp
index 7df5a016279b60337a5a24b4c3a5241d7f0555b9..ab39733fe82f054d30789af402c70a9f94d5fa5e 100644
--- a/apps/cpu/bond_benchmark/bonb_b_chanel.cpp
+++ b/apps/cpu/bond_benchmark/bonb_b_chanel.cpp
@@ -77,12 +77,12 @@ void chanel(const char *cstr)
       double L2, L3, H;
       L2 = L3 = H = gridNx2*blocknx1;
 
-      LBMReal radius = 7;
-      LBMReal uLB = 0.05;
-      LBMReal Re = 300.0;
-      LBMReal rhoLB = 1.0;
-      LBMReal l = L2 / dx;
-      LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
+      real radius = 7;
+      real uLB = 0.05;
+      real Re = 300.0;
+      real rhoLB = 1.0;
+      real l = L2 / dx;
+      real nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
 
 
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
@@ -167,11 +167,11 @@ void chanel(const char *cstr)
 
       if (refineLevel > 0)
       {
-         if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+         if(myid == 0) UBLOG(logINFO,"Refinement - start");    
          RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
          refineHelper.addGbObject(refineCube, 1);
          refineHelper.refine();
-         if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+         if(myid == 0) UBLOG(logINFO,"Refinement - end");    
       }
 
       
diff --git a/apps/cpu/bond_benchmark/bond_b.cpp b/apps/cpu/bond_benchmark/bond_b.cpp
index e3924595d89afd1f81cd4dde159f42a569e0cd01..5a1b1f47a7d3c3c90752eb69800c5d4d6e0c2163 100644
--- a/apps/cpu/bond_benchmark/bond_b.cpp
+++ b/apps/cpu/bond_benchmark/bond_b.cpp
@@ -108,10 +108,10 @@ void periodic(const char *cstr1, const char *cstr2)
       double L2, L3, H;
       L2 = L3 = H = gridNx2*blocknx1;
 
-      LBMReal uLB = 0.05;
-      LBMReal Re = 20.0;
-      LBMReal rhoLB = 0.0;
-      LBMReal nueLB = 0.05842;
+      real uLB = 0.05;
+      real Re = 20.0;
+      real rhoLB = 0.0;
+      real nueLB = 0.05842;
 
       LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
 
@@ -172,11 +172,11 @@ void periodic(const char *cstr1, const char *cstr2)
 
       //if (refineLevel > 0)
       //{
-      //   if(myid == 0) UBLOG(logINFO,"Refinement - start");	
+      //   if(myid == 0) UBLOG(logINFO,"Refinement - start");    
       //   RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
       //   refineHelper.addGbObject(refineCube, 1);
       //   refineHelper.refine();
-      //   if(myid == 0) UBLOG(logINFO,"Refinement - end");	
+      //   if(myid == 0) UBLOG(logINFO,"Refinement - end");    
       //}
 
       D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
@@ -191,7 +191,7 @@ void periodic(const char *cstr1, const char *cstr2)
       else if(comm_type == "BOND")
       {
          //MetisPartitioningWithBundlesGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, true, numOfThreads);
-	 MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, true, numOfThreads);
+     MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, true, numOfThreads);
          grid->accept( metisVisitor );
          D3Q27BondSetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
          grid->accept( setConnsVisitor );
diff --git a/apps/cpu/bond_benchmark/bond_b_test.cpp b/apps/cpu/bond_benchmark/bond_b_test.cpp
index 8ad0b60c37d84ef7038fd0c016ba6fd8146bc504..52e96c0888f018a6a2555e3f1552bc38a87db95e 100644
--- a/apps/cpu/bond_benchmark/bond_b_test.cpp
+++ b/apps/cpu/bond_benchmark/bond_b_test.cpp
@@ -44,7 +44,7 @@ int agent_main()
    MPI_Initialized(&_mpiInitialized);
    if(!_mpiInitialized)
    {
-      MPI_Init(0, 0);	
+      MPI_Init(0, 0);    
       _mpiInitialized = true;
    }
 
diff --git a/apps/cpu/bond_test/CMakeLists.txt b/apps/cpu/bond_test/CMakeLists.txt
deleted file mode 100644
index 1bb473c949127f4deedabd11f23e02f3478db7d5..0000000000000000000000000000000000000000
--- a/apps/cpu/bond_test/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(bond_test)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(bond_test BINARY)
diff --git a/apps/cpu/bond_test/bond_test.cpp b/apps/cpu/bond_test/bond_test.cpp
deleted file mode 100644
index fd77c285f540034b8c1d432097c45d9d0c6e9a7c..0000000000000000000000000000000000000000
--- a/apps/cpu/bond_test/bond_test.cpp
+++ /dev/null
@@ -1,500 +0,0 @@
-#ifdef VF_BOND
-
-#include <iostream>
-#include <string>
-
-#include <vfluids.h>
-
-#include "fbond.h"
-#include "Version.h"
-
-
-using namespace std;
-
-int agent_main();
-void simulation(const char *cstr);
-
-int main(int argc, char* argv[])
-{
-   int returnval = 0;
-   try
-   {
-      bond::init();
-      returnval = agent_main();
-      bond::finalize();
-
-      //CommunicatorPtr comm(new BondCommunicator());
-      //cout<<"Bundle ID = "<<comm->getBundleID()<<", MPI rank = "<<comm->getProcessID()<<", root = "<<comm->getRoot()<<endl;
-
-      //if ( argv != NULL )
-      //{
-      //   if (argc > 1)
-      //   {
-      //      simulation(argv[1]);
-      //   }
-      //   else
-      //   {
-      //      cout << "Configuration file must be set!: " <<  argv[0] << " <config file>" << endl << std::flush;
-      //   }
-      //}
-   }
-   catch(std::runtime_error& e)
-   {
-      std::cerr<<"\nRUNTIME ERROR: "<<e.what()<<"\n"<<std::endl;
-   }
-   catch(...)
-   {
-      std::cerr<<"unknown error"<<std::endl;
-   }
-   return returnval;
-}
-
-
-int agent_main()
-{
-   cout<<"\n=== bond lib info:\n"<<bond::Version::info()<<"\n===\n\n";
-
-   // try to work around a bug in mpich (at least mpich2-1.4.1p1 and mpich2-1.5a1)
-   int _mpiInitialized = (int)false;
-   MPI_Initialized(&_mpiInitialized);
-   if(!_mpiInitialized)
-      MPI_Init(0, 0);	
-
-   int mpi_rank;
-   MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
-   int mpi_size;
-   MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
-   cout<<"I am process "<<bond::processID()<<" of "<<bond::processCount()
-      <<", bundle ID "<<bond::bundleID()<<" of "<<bond::bundleCount()
-      <<", MPI rank "<<mpi_rank<<" of "<<mpi_size<<"\n";
-
-   if(bond::processID() == 0)
-   {
-      try
-      {
-         Sleep(10000);
-         // send
-         vector<double> data(42);
-         data[0] = 123.1;
-         data[data.size()-1] = -999.1;
-
-         int dst_rank = 1;
-         int msg_tag = 42;
-         cout<<"["<<bond::processID()<<"] nonblocking send ... "<<data[0]<<"..."<<data[data.size()-1]<<"\n";
-         std::tr1::shared_ptr<bond::FutureSend> fus = bond::sendFuture(&data[0], data.size(), MPI_DOUBLE, dst_rank, msg_tag);
-
-         vector<double> data2(42);
-         data2[0] = 123.2;
-         data2[data2.size()-1] = -999.2;
-         cout<<"["<<bond::processID()<<"] blocking send ... "<<data2[0]<<"..."<<data2[data.size()-1]<<"\n";
-         bond::sendComplete(&data2[0], data2.size(), MPI_DOUBLE, dst_rank, msg_tag);
-
-         //Sleep(10000);
-
-         fus->complete();
-      }
-      catch(std::runtime_error& e)
-      {
-         std::cerr<<"\nSEND ERROR: "<<e.what()<<"\n"<<std::endl;
-      }
-   }
-   else
-   {
-      try
-      {
-         // receive
-         vector<double> data(42);
-         int src_rank = 0;
-         cout<<"["<<bond::processID()<<"] nonblocking receive ...\n";
-         int msg_tag = 42;
-         std::tr1::shared_ptr<bond::FutureReceive> fur = bond::receiveFuture(&data[0], data.size(), MPI_DOUBLE, src_rank, msg_tag);
-
-
-         //Sleep(10000);
-
-         cout<<"["<<bond::processID()<<"] blocking receive ...\n";
-         vector<double> data2(42);
-         bond::receiveComplete(&data2[0], data2.size(), MPI_DOUBLE, src_rank, msg_tag);
-         cout<<"received blocking "<<data2[0]<<"..."<<data2[data.size()-1]<<"\n";
-
-         
-
-         fur->complete();
-         cout<<"received nonblocking "<<data[0]<<"..."<<data[data.size()-1]<<"\n";
-      }
-      catch(std::runtime_error& e)
-      {
-         std::cerr<<"\nRECEIVE ERROR: "<<e.what()<<"\n"<<std::endl;
-      }
-   }
-
-   cout<<"process "<<bond::processID()<<" done\n";
-   return 0;
-}
-//////////////////////////////////////////////////////////////////////////
-void simulation(const char *cstr)
-{
-   try
-   {
-      ConfigFileReader cf(cstr);
-      if ( !cf.read() )
-      {
-         std::string exceptionText = "Unable to read configuration file\n";
-         throw exceptionText;
-      }
-
-      //UbLog::reportingLevel() = logDEBUG5;
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname = cf.getValue("path"); 
-      int numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfThreads"));
-      double availMem = 0;
-
-      CommunicatorPtr comm;
-      string comm_type = cf.getValue("comm");
-      if(comm_type == "MPI")
-         comm = vf::parallel::MPICommunicator::getInstance();
-      else if(comm_type == "BOND")
-         comm = BondCommunicator::getInstance();
-
-      int myid = comm->getProcessID();
-      int mybundle = comm->getBundleID();
-      int root = comm->getRoot();
-
-      //UbLog::reportingLevel() = logDEBUG5;
-
-      if(machine == "BOMBADIL") 
-      {
-         availMem = 3.0e9;
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         availMem = 12.0e9;
-
-         if(myid==root && mybundle==root)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      double dx = 1;
-
-      const int blocknx1 = UbSystem::stringTo<int>(cf.getValue("blocknx1")); //16;
-      const int blocknx2 = UbSystem::stringTo<int>(cf.getValue("blocknx2"));//16;
-      const int blocknx3 = UbSystem::stringTo<int>(cf.getValue("blocknx3"));//16;
-
-      const int gridNx1 = UbSystem::stringTo<int>(cf.getValue("gridNx1"));//3;
-      const int gridNx2 = UbSystem::stringTo<int>(cf.getValue("gridNx2"));//3;
-      const int gridNx3 = UbSystem::stringTo<int>(cf.getValue("gridNx3"));//3;
-
-
-      double L1 = gridNx1*blocknx1;
-      double L2, L3, H;
-      L2 = L3 = H = gridNx2*blocknx1;
-
-      LBMReal radius = 7;
-      LBMReal uLB = 0.05;
-      LBMReal Re = 300.0;
-      LBMReal rhoLB = 0.0;
-      LBMReal l = L2 / dx;
-      LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
-
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-      const int refineLevel = UbSystem::stringTo<int>(cf.getValue("refineLevel"));
-
-      //obstacle
-      GbObject3DPtr cylinder(new GbCylinder3D(L1*0.5, L2*0.5, 0, L1*0.5, L2*0.5, L3, radius));
-      GbSystem3D::writeGeoObject(cylinder.get(),pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance());
-
-      D3Q27InteractorPtr cylinderInt;
-
-      //bounding box
-      double d_minX1 = 0.0;
-      double d_minX2 = 0.0;
-      double d_minX3 = 0.0;
-
-      double d_maxX1 = L1;
-      double d_maxX2 = L2;
-      double d_maxX3 = L3;
-
-      double offs = dx;
-
-      //double g_minX1 = d_minX1-offs-0.499999*dx;
-      double g_minX1 = d_minX1-offs;
-      double g_minX2 = d_minX2-offs;
-      double g_minX3 = d_minX3-offs;
-
-      double g_maxX1 = d_maxX1+offs;
-      double g_maxX2 = d_maxX2+offs;
-      double g_maxX3 = d_maxX3+offs;
-
-      double blockLength = blocknx1*dx;
-
-      //refinement area
-      double off = 1;
-      GbObject3DPtr refineCube(new  GbCuboid3D(cylinder->getX1Minimum()-off, cylinder->getX2Minimum()-off, cylinder->getX3Minimum(), 
-         cylinder->getX1Maximum()+off, cylinder->getX2Maximum()+off, cylinder->getX3Maximum()));
-
-      Grid3DPtr grid(new Grid3D(comm, blocknx1, blocknx2, blocknx3, gridNx1, gridNx2, gridNx3));
-
-      //grid->setPeriodicX1(true);
-      //grid->setPeriodicX2(true);
-      //grid->setPeriodicX3(true);
-
-
-      if(myid ==0)
-      {
-         UBLOG(logINFO,"Parameters:");
-         UBLOG(logINFO,"L = " << L2/dx );
-         UBLOG(logINFO,"v = " << uLB );
-         UBLOG(logINFO,"rho = " << rhoLB );
-         UBLOG(logINFO,"nue = " << nueLB );
-         UBLOG(logINFO,"Re = " << Re );
-         UBLOG(logINFO,"dx = " << dx );
-         UBLOG(logINFO,"number of levels = " << refineLevel+1 );
-         UBLOG(logINFO,"numOfThreads = " << numOfThreads );
-         UBLOG(logINFO,"Preprozess - start");
-      }
-
-      if(myid ==0) GbSystem3D::writeGeoObject(refineCube.get(),pathname + "/geo/refineCube", WbWriterVtkXmlBinary::getInstance());
-
-      //walls
-      GbCuboid3DPtr addWallYmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_minX2, d_maxX3+4.0*blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallZmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_minX3));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallYmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_maxX2, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallZmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_maxX3, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-      //inflow
-      GbCuboid3DPtr geoInflow (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_minX1, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-      //outflow
-      GbCuboid3DPtr geoOutflow (new GbCuboid3D(d_maxX1, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-      BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-
-      if (refineLevel > 0)
-      {
-         if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-         RefineCrossAndInsideGbObjectBlockVisitor refVisitor(refineCube, refineLevel);
-         grid->accept(refVisitor);
-
-         RatioBlockVisitor ratioVisitor(refineLevel);
-         grid->accept(ratioVisitor);
-
-         RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-         grid->accept(ratioSmoothVisitor);
-
-         OverlapBlockVisitor overlapVisitor(refineLevel);
-         grid->accept(overlapVisitor);
-
-         std::vector<int> dirs;
-         D3Q27System::getLBMDirections(dirs);
-         SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-         grid->accept(interDirsVisitor);
-         if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-      }
-
-
-      D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-
-      if(comm_type == "MPI")
-      {
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, true, numOfThreads);
-         grid->accept( metisVisitor );
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-      }
-      else if(comm_type == "BOND")
-      {
-         MetisPartitioningWithBundlesGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, true, numOfThreads);
-         grid->accept( metisVisitor );
-         D3Q27BondSetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         setConnsVisitor.activate();
-      }
-      
-      int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-      D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-      cylinderInt = D3Q27InteractorPtr ( new D3Q27Interactor(cylinder, grid, bcObst,Interactor3D::SOLID));
-
-      //walls
-      D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcObst,Interactor3D::SOLID));
-      D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcObst,Interactor3D::SOLID));
-      D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcObst,Interactor3D::SOLID));
-      D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcObst,Interactor3D::SOLID));
-
-      mu::Parser fct;
-      fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4");
-      fct.DefineConst("U", uLB);
-      fct.DefineConst("H", H);
-
-      //inflow
-      D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST));
-      velBCAdapter->setSecondaryBcOption(2);
-      D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-      //outflow
-      D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-      D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-      //SolidBlocksHelper sd(grid, comm);
-      //sd.addInteractor(cylinderInt);
-      //sd.addInteractor(addWallYminInt);
-      //sd.addInteractor(addWallZminInt);
-      //sd.addInteractor(addWallYmaxInt);
-      //sd.addInteractor(addWallZmaxInt);
-      //sd.addInteractor(inflowInt);
-      //sd.addInteractor(outflowInt);
-
-      //sd.deleteSolidBlocks();
-
-      //grid->accept( metisVisitor );
-
-      //grid->getBlock(0)->setBundle(0);
-      //grid->getBlock(0)->setRank(0);
-      //grid->getBlock(1)->setBundle(1);
-      //grid->getBlock(1)->setRank(1);
-      //grid->getBlock(2)->setBundle(0);
-      //grid->getBlock(2)->setRank(0);
-      //grid->getBlock(3)->setBundle(1);
-      //grid->getBlock(3)->setRank(1);
-      //grid->getBlock(4)->setBundle(0);
-      //grid->getBlock(4)->setRank(0);
-      //grid->getBlock(5)->setBundle(1);
-      //grid->getBlock(5)->setRank(1);
-      //grid->getBlock(6)->setBundle(1);
-      //grid->getBlock(6)->setRank(1);
-      //grid->getBlock(7)->setBundle(0);
-      //grid->getBlock(7)->setRank(0);
-
-      ppblocks->update(0);
-      ppblocks.reset();
-
-      unsigned long nob = grid->getNumberOfBlocks();
-      int gl = 3;
-      unsigned long nod = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl);
-
-      double needMemAll  = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-      double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"Number of blocks = " << nob);
-         UBLOG(logINFO,"Number of nodes  = " << nod);
-         UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-         UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-         UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-      }            
-
-      //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3));
-      //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx1, blocknx2, blocknx3, true));
-      //option = 0 - ohne param., option = 1 - mit param.
-      int option = 0;
-      LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL));
-
-      BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-      kernel->setBCProcessor(bcProc);
-
-      SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-      grid->accept(kernelVisitor);
-
-      if (refineLevel > 0)
-      {
-         D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-         grid->accept(undefNodesVisitor);
-      }
-
-      //walls
-      grid->addAndInitInteractor(addWallYminInt);
-      grid->addAndInitInteractor(addWallZminInt);
-      grid->addAndInitInteractor(addWallYmaxInt);
-      grid->addAndInitInteractor(addWallZmaxInt);
-
-      //obstacle
-      //grid->addAndInitInteractor(cylinderInt);
-
-      //inflow
-      grid->addAndInitInteractor(inflowInt);
-
-      //outflow
-      grid->addAndInitInteractor(outflowInt);
-
-      //initialization of distributions
-      D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB);
-      initVisitor.setVx1(fct);
-      grid->accept(initVisitor);
-
-      //Postrozess
-      UbSchedulerPtr geoSch(new UbScheduler(1));
-      D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-         new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, true));
-      ppgeo->update(0);
-      ppgeo.reset();
-
-      if(myid == 0) UBLOG(logINFO,"Preprozess - end"); 
-
-            //double outTime = 100.0;
-      UbSchedulerPtr stepSch(new UbScheduler());
-      stepSch->addSchedule(100, 0, 1000);
-      //nodeSch->addSchedule(1000, 1000, 10000);
-      //nodeSch->addSchedule(10000, 10000, 50000);
-      //nodeSch->addSchedule(100, 100, 10000);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      UbSchedulerPtr visSch(new UbScheduler(10.0));
-      double endTime = UbSystem::stringTo<int>(cf.getValue("endTime"));
-      //CalculatorPtr calc = CalculatorPtr(new FETOLCalculator());
-      //CalculatorPtr calc = CalculatorPtr(new Calculator());
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch, calc));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch));
-      //if(myid == 0) 
-      UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      //if(myid == 0) 
-      UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-#endif
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/cpu/bond_test/start.bat b/apps/cpu/bond_test/start.bat
deleted file mode 100644
index b824f13a4f7d5f3feb8f7084ea708a9e90b86127..0000000000000000000000000000000000000000
--- a/apps/cpu/bond_test/start.bat
+++ /dev/null
@@ -1,6 +0,0 @@
-@echo off
-set FETOL_BUNDLE_INFO_PATH=c:\Projects\FETOL\dev\bond_config\YAML_Bond_ConfigFile.yaml
-set FETOL_CLASSPATH=c:\Projects\FETOL\dev\fetol_bond\fetol_bond.jar
-
-set FETOL_BUNDLE_ID=%1
-call %2
\ No newline at end of file
diff --git a/apps/cpu/bone/CMakeLists.txt b/apps/cpu/bone/CMakeLists.txt
deleted file mode 100644
index 0677fd51b64a263a209cc16569ce62d3b2741ad3..0000000000000000000000000000000000000000
--- a/apps/cpu/bone/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(bone)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(bone BINARY)
diff --git a/apps/cpu/bone/bone.cpp b/apps/cpu/bone/bone.cpp
deleted file mode 100644
index 17d0eca37975fa2cee87aa87f815d7237673111d..0000000000000000000000000000000000000000
--- a/apps/cpu/bone/bone.cpp
+++ /dev/null
@@ -1,568 +0,0 @@
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <vfluids.h>
-
-using namespace std;
-
-void run(const char *cstr1, const char *cstr2)
-{
-   try
-   {
-      string pathname; 
-      string pathGeo;
-      string pathLog;
-      int numOfThreads = 1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      string machine = string(cstr1);
-
-      if(machine == "my") 
-      {
-         pathname = "d:/temp/bone";
-         pathGeo = "d:/Data/Bone/BigBone";
-         pathLog = "d:/temp/bone";
-         numOfThreads = 4;
-         logfile = false;
-         availMem = 15.0e9;
-      }
-      else if(machine == "Ludwig")      
-      {
-         pathname = "/work/koskuche/SFB880/plate2Con";
-         pathGeo = "/home/koskuche/data/plate";
-         pathLog = pathname;
-         numOfThreads = 8;
-         availMem = 12.0e9;///8*numOfThreads;
-         logfile = true;
-      }
-      else if(machine == "HLRS")      
-      {
-         pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0";
-         pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate";
-         pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate";
-         numOfThreads = 16;
-         availMem = 2.0e9;
-         logfile = true;
-      }
-      else if(machine == "HLRN")      
-      {
-         pathname = "/gfs1/work/niivfcpu/scratch/plateEx";
-         pathGeo = "/gfs1/work/niivfcpu/data/plate";
-         pathLog = pathname;
-         numOfThreads = 24;
-         availMem = 64.0e9/24.0*numOfThreads;
-         logfile = true;
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-#if defined(__unix__)
-      if (myid==0) 
-      {
-         const char* str = pathLog.c_str();
-         int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-      }
-#endif 
-
-      if(myid == 0 && logfile)
-      {
-         //UbLog::reportingLevel() = logDEBUG5;
-         logFilename <<  pathLog + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-         UbLog::output_policy::setStream(logFilename.str());
-      }
-
-      if(myid==0) UBLOG(logINFO,"Testcase bone");
-
-      string boneFilename = pathGeo + "/bone.raw";
-      
-      int pmNX1=1800;  //abmessung einzelbild in x-richtung
-      int pmNX2=972; //abmessung einzelbild in y richtung
-      int pmNX3=1164; //anzahl der bilder
-      float lthreshold = 27756.0;
-      float uthreshold = 65535.0;
-
-      GbVoxelMatrix3DPtr pmMesh(new GbVoxelMatrix3D(pmNX1,pmNX2,pmNX3,0,lthreshold,uthreshold));
-      pmMesh->readMatrixFromRawFile<unsigned short>(boneFilename, GbVoxelMatrix3D::BigEndian);
-
-      double scaleFactor = 0.001;
-      double delta = 11.0*scaleFactor;
-      pmMesh->setVoxelMatrixDelta(delta, delta, delta);
-
-      pmMesh->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-      if(myid == 0) pmMesh->writeToLegacyVTKBinary(pathname+"/geo/bone");
-
-      ///////////////////////////////////////////////////////
-      return;
-
-
-      /////////////////Knotenabmessungen:
-      //int nx[3], blocknx[3];
-      //nx[0]      = 90;//240;//120;//60;//86;//43;//65;//50;  //l�nge
-      //nx[1]      = 2;//2;//6;///1;//5;// //breite
-      //nx[2]      = 30;//64;//32;//18;//5;//15;//15; //h�he gebiet
-      //blocknx[0] = 16;//10;//6;
-      //blocknx[1] = 16;//10;//6;
-      //blocknx[2] = 16;//10;//6;
-
-      //int baseLevel   = 0;
-      //int refineLevel = 4;
-
-      //double H = 600.0; // Kanalh�he [mm]
-      //double cdx = H/(double)(nx[2]*blocknx[2]);
-      //double fdx = cdx/double(1<<refineLevel);
-
-      ////double h = 200.0; // gew�nschte Plattenh�he in Gitterpunkten
-      ////double fdx = plate->getLengthX3()/h;
-      ////double cdx = fdx*double(1<<refineLevel);
-
-      //LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////physik
-      ////////////////////////////////////////////////////////////////////////////
-      //double Re            = 1133333.3333333335; 
-      //double rhoLB         = 0.0;
-      //double uLB           = 0.1; 
-      //double lReal         = 1000; //Plattenl�nge in mm
-      //double nuLB          = (uLB*(lReal/cdx))/Re;
-
-      //int sizeSP=4;
-      //mu::Parser spongeLayer;
-      //spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0");
-      //spongeLayer.DefineConst("sizeX", nx[0]*blocknx[0]);
-      //spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]);
-
-      //Grid3DPtr grid(new Grid3D(comm));
-
-      ////////////////////////////////////////////////////////////////////////////
-      ////restart
-      //UbSchedulerPtr rSch(new UbScheduler(1000,1000,10000000));
-      //RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY);
-      ////////////////////////////////////////////////////////////////////////////
-
-      //if (grid->getTimeStep() == 0)
-      //{
-
-      //   if(myid==0) UBLOG(logINFO,"Neustart..");
-
-      //   //////////////////////////////////////////////////////////////////////////
-      //   //Platte
-      //   GbTriFaceMesh3DPtr plate (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename,"Netz"));
-      //   plate->rotate(90.0,0.0,0.0);  //TriFacMesh-KO-System anders als LB-KO-System
-      //   if(myid == 0) GbSystem3D::writeGeoObject( plate.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() );
-      //   //////////////////////////////////////////////////////////////////////////
-      //   // Zackenband
-      //   //////////////////////////////////////////////////////////////////////////
-      //   GbTriFaceMesh3DPtr meshBand1 (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand"));
-      //   meshBand1->translate(-495, -700, -19.94);
-      //   if(myid == 0) GbSystem3D::writeGeoObject( meshBand1.get(), pathname+"/geo/Band1", WbWriterVtkXmlASCII::getInstance() );
-      //   // Zackenband2
-      //   GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand2"));
-      //   meshBand2->translate(-495, -705, -19.94); 
-      //   if(myid == 0) GbSystem3D::writeGeoObject( meshBand2.get(), pathname+"/geo/Band2", WbWriterVtkXmlASCII::getInstance() );
-      //   // Zackenband3
-      //   GbTriFaceMesh3DPtr meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand3"));
-      //   meshBand3->translate(-495, -700, -19.64); 
-      //   if(myid == 0) GbSystem3D::writeGeoObject( meshBand3.get(), pathname+"/geo/Band3", WbWriterVtkXmlASCII::getInstance() );
-      //   // Zackenband4
-      //   GbTriFaceMesh3DPtr meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand4"));
-      //   meshBand4->translate(-495, -705, -19.64); 
-      //   if(myid == 0) GbSystem3D::writeGeoObject( meshBand4.get(), pathname+"/geo/Band4", WbWriterVtkXmlASCII::getInstance() );
-      //   //////////////////////////////////////////////////////////////////////////
-
-      //   double blockLengthx1 = blocknx[0]*cdx; //geowerte
-      //   double blockLengthx2 = blockLengthx1;
-      //   double blockLengthx3 = blockLengthx1;
-
-      //   double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-      //   double originX1 = plate->getX1Minimum()-plate->getLengthX1()/4.0;
-      //   double originX2 = plate->getX2Minimum();
-      //   double originX3 = plate->getX3Minimum()-299.5;
-
-
-      //   bool periodicx1 = false;
-      //   bool periodicx2 = true;
-      //   bool periodicx3 = true;
-
-      //   //bounding box
-      //   double g_minX1 = originX1;
-      //   double g_minX2 = originX2;
-      //   double g_minX3 = originX3;
-
-      //   double g_maxX1 = originX1 + geoLength[0];
-      //   double g_maxX2 = originX2 + geoLength[1];
-      //   double g_maxX3 = originX3 + geoLength[2];;
-
-
-      //   //set grid
-      //   grid->setDeltaX(cdx);
-      //   grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-      //   grid->setPeriodicX1(periodicx1);
-      //   grid->setPeriodicX2(periodicx2);
-      //   grid->setPeriodicX3(periodicx3);
-
-      //   GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      //   gridCube->setCenterCoordinates(gridCube->getX1Centroid(),meshBand1->getX2Centroid(),gridCube->getX3Centroid());
-      //   if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-      //   originX2 = gridCube->getX2Minimum();
-      //   g_minX2 = originX2;
-      //   g_maxX2 = originX2 + geoLength[1];
-
-      //   GenBlocksGridVisitor genBlocks(gridCube);
-      //   grid->accept(genBlocks);
-
-      //   //////////////////////////////////////////////////////////////////////////
-      //   if(myid == 0)
-      //   {
-      //      UBLOG(logINFO, "*****************************************");
-      //      UBLOG(logINFO, "* Parameters                            *");
-      //      UBLOG(logINFO, "* Re            ="<<Re);
-      //      UBLOG(logINFO, "* nuLB          ="<<nuLB);
-      //      UBLOG(logINFO, "* uLB           ="<<uLB);
-      //      UBLOG(logINFO, "* cdx           ="<<cdx);
-      //      UBLOG(logINFO, "* fdx           ="<<fdx);
-      //      double Hzb = 0.6/fdx;
-      //      UBLOG(logINFO, "* Height of Zackenband ="<<Hzb);
-      //      UBLOG(logINFO, "* Re on Zackenband ="<<(uLB*Hzb)/(nuLB*double(1<<refineLevel)));
-      //      UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-      //      UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-      //      UBLOG(logINFO, "* x1Periodic    ="<<periodicx1);
-      //      UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-      //      UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-      //      UBLOG(logINFO, "* number of levels  ="<<refineLevel+1);
-      //      UBLOG(logINFO, "* path          ="<<pathname);
-
-      //      UBLOG(logINFO, "*****************************************");
-      //      UBLOG(logINFO, "* number of threads    ="<<numOfThreads);
-      //      UBLOG(logINFO, "* number of processes  ="<<comm->getNumberOfProcesses());
-      //      UBLOG(logINFO, "*****************************************");
-      //      UBLOG(logINFO, "*****************************************");     
-      //   }
-      //   //////////////////////////////////////////////////////////////////////////
-
-
-      //   //////////////////////////////////////////////////////////////////////////
-      //   //refinement
-      //   GbCuboid3DPtr refinePlatteBox(new GbCuboid3D(plate->getX1Minimum(), plate->getX2Minimum(), plate->getX3Minimum()+(plate->getX3Maximum()-plate->getX3Minimum())/2.0, 
-      //      plate->getX1Maximum()+40.0, plate->getX2Maximum(), plate->getX3Maximum()));
-      //   if(myid == 0) GbSystem3D::writeGeoObject( refinePlatteBox.get(), pathname+"/geo/refinePlatteBox", WbWriterVtkXmlASCII::getInstance() );
-
-      //   if (refineLevel > 0)
-      //   {
-      //      if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-      //      RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-      //      refineHelper.addGbObject(refinePlatteBox, refineLevel);
-      //      refineHelper.refine();
-      //      if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-      //   }
-
-      //   /////////////////////////////////////////////////
-      //   ///interactoren
-      //   int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-      //   D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-      //   D3Q27TriFaceMeshInteractorPtr triPlateInteractor( new D3Q27TriFaceMeshInteractor(plate, grid, bcObst,Interactor3D::SOLID));
-      //   D3Q27TriFaceMeshInteractorPtr triBand1Interactor( new D3Q27TriFaceMeshInteractor( meshBand1, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) );
-      //   D3Q27TriFaceMeshInteractorPtr triBand2Interactor( new D3Q27TriFaceMeshInteractor( meshBand2, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) );
-      //   D3Q27TriFaceMeshInteractorPtr triBand3Interactor( new D3Q27TriFaceMeshInteractor( meshBand3, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) );
-      //   D3Q27TriFaceMeshInteractorPtr triBand4Interactor( new D3Q27TriFaceMeshInteractor( meshBand4, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) );
-
-      //   //inflow
-      //   GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1-blockLengthx1, originX2-blockLengthx1, originX3-blockLengthx1, 
-      //      originX1, originX2+geoLength[1]+blockLengthx1, originX3+geoLength[2]+blockLengthx1));
-      //   if(myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname+"/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance());
-      //   D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid,grid,Interactor3D::SOLID)); 
-
-      //   //inflow
-      //   double raiseVelSteps = 0;
-      //   vector<D3Q27BCFunction> velcX1BCs,dummy;
-
-      //   mu::Parser inflowProfile;
-      //   inflowProfile.SetExpr("uLB"); 
-      //   inflowProfile.DefineConst("uLB",uLB);
-      //   velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST));
-
-      //   D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (velcX1BCs,dummy,dummy));
-      //   velBCInteractor->addBCAdapter(velBCAdapter);
-
-      //   //outflow
-      //   GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1+geoLength[0], originX2-blockLengthx1, originX3-blockLengthx1, 
-      //      originX1+geoLength[0]+blockLengthx1, originX2+geoLength[1]+blockLengthx1, originX3+geoLength[2]+blockLengthx1 ));
-      //   if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance());
-      //   D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-      //   D3Q27InteractorPtr densInteractor( new D3Q27Interactor(densCuboid,grid,denBCAdapter,Interactor3D::SOLID) );
-
-      //   ////////////////////////////////////////////
-      //   //METIS
-      //   Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));	
-
-      //   ////////////////////////////////////////////
-      //   /////delete solid blocks
-      //   if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-      //   InteractorsHelper intHelper(grid, metisVisitor);
-      //   intHelper.addInteractor(triPlateInteractor);
-      //   intHelper.addInteractor(triBand1Interactor);
-      //   intHelper.addInteractor(triBand2Interactor);
-      //   intHelper.addInteractor(triBand3Interactor);
-      //   intHelper.addInteractor(triBand4Interactor);
-      //   intHelper.addInteractor(densInteractor);
-      //   intHelper.addInteractor(velBCInteractor);
-      //   intHelper.selectBlocks();
-      //   if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-      //   //////////////////////////////////////
-
-      //   //domain decomposition for threads
-      //   if(numOfThreads > 1)
-      //   {
-      //      PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-      //      grid->accept(pqPartVisitor);
-      //   }
-
-      //   if(myid == 0)
-      //   {
-      //      UBLOG(logINFO,"Write blocks - start");
-      //      BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-      //      ppblocks->update(0);
-      //      UBLOG(logINFO,"Write blocks - end");
-      //   }
-
-      //   unsigned long nob = grid->getNumberOfBlocks();
-      //   unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-      //   unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-      //   unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-
-      //   double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-      //   double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-      //   
-      //   double nup = 0; 
-
-      //   if(myid == 0)
-      //   {
-      //      UBLOG(logINFO,"Number of blocks = " << nob);
-      //      UBLOG(logINFO,"Number of nodes  = " << nod);
-      //      int minInitLevel = grid->getCoarsestInitializedLevel();
-      //      int maxInitLevel = grid->getFinestInitializedLevel();
-      //      for(int level = minInitLevel; level<=maxInitLevel; level++)
-      //      {
-      //         int nobl = grid->getNumberOfBlocks(level);
-      //         UBLOG(logINFO,"Number of blocks for level " << level <<" = " << nobl);
-      //         UBLOG(logINFO,"Number of nodes for level " << level <<" = " << nobl*nodb);
-      //         nup += nobl*nodb*double(1<<level); 
-      //      }
-      //      UBLOG(logINFO,"Hypothetically time for calculation step for 120 nodes  = " << nup/6.0e5/(120*8)  << " s");
-      //      UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-      //      UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-      //      UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-      //      UBLOG(logINFO,"Available memory per node/8.0 = " << (availMem/8.0) << " bytes");
-      //   }
-
-      //   //////////////////////////////////////////
-      //   //set connectors
-      //   if(myid == 0) UBLOG(logINFO,"set connectors - start");
-      //   D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-      //   D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-      //   grid->accept( setConnsVisitor );
-      //   if(myid == 0) UBLOG(logINFO,"set connectors - end");
-
-      //   ////////////////////////////
-      //   LBMKernel3DPtr kernel;
-      //   //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-
-      //   //with sponge layer
-      //   kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-      //   kernel->setWithSpongeLayer(true);
-      //   kernel->setSpongeLayer(spongeLayer);
-
-      //   BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-      //   kernel->setBCProcessor(bcProc);
-      //   SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-      //   grid->accept(kernelVisitor);
-      //   //////////////////////////////////
-      //   //undef nodes
-      //   if (refineLevel > 0)
-      //   {
-      //      D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-      //      grid->accept(undefNodesVisitor);
-      //   }
-
-
-      //   intHelper.setBC();
-
-      //   //initialization of decompositions
-      //   D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoLB);
-      //   initVisitor.setVx1(uLB);
-      //   grid->accept(initVisitor);
-
-      //   //Postprozess
-      //   UbSchedulerPtr geoSch(new UbScheduler(1));
-      //   D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-      //      new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), 
-      //      unitConverter, true));
-      //   ppgeo->update(0);
-      //   ppgeo.reset();
-      //   geoSch.reset();
-
-      //   if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-      //}
-      //else
-      //{
-      //   //domain decomposition for threads
-      //   if(numOfThreads > 1)
-      //   {
-      //      PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-      //      grid->accept(pqPartVisitor);
-      //   }
-      //   //set connectors
-      //   //grid->setPeriodicX3(false);
-      //   D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-      //   D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-      //   grid->accept( setConnsVisitor );
-      //   SetSpongeLayerBlockVisitor ssp(spongeLayer);
-      //   grid->accept(ssp);
-
-      //   //////////////////////////////////////////////////////////////////////////
-      //   //////////////////////////////////////////////////////////////////////////
-      //   //Platte
-      //   GbTriFaceMesh3DPtr plate (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename,"Netz"));
-      //   plate->rotate(90.0,0.0,0.0);  //TriFacMesh-KO-System anders als LB-KO-System
-      //   if(myid == 0) GbSystem3D::writeGeoObject( plate.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() );
-      //   //////////////////////////////////////////////////////////////////////////
-      //   //////////////////////////////////////////////////////////////////////////
-      //   // Zackenband
-      //   //////////////////////////////////////////////////////////////////////////
-      //   GbTriFaceMesh3DPtr meshBand1 (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand"));
-      //   meshBand1->translate(-495, -700, -19.94);
-      //   if(myid == 0) GbSystem3D::writeGeoObject( meshBand1.get(), pathname+"/geo/Band1", WbWriterVtkXmlASCII::getInstance() );
-
-      //   double blockLengthx1 = blocknx[0]*cdx; //geowerte
-      //   double blockLengthx2 = blockLengthx1;
-      //   double blockLengthx3 = blockLengthx1;
-
-      //   double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-      //   double originX1 = plate->getX1Minimum()-plate->getLengthX1()/4.0;
-      //   double originX2 = plate->getX2Minimum();
-      //   double originX3 = plate->getX3Minimum()-299.5;
-
-      //   //bounding box
-      //   double g_minX1 = originX1;
-      //   double g_minX2 = originX2;
-      //   double g_minX3 = originX3;
-
-      //   double g_maxX1 = originX1 + geoLength[0];
-      //   double g_maxX2 = originX2 + geoLength[1];
-      //   double g_maxX3 = originX3 + geoLength[2];;
-
-      //   GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      //   gridCube->setCenterCoordinates(gridCube->getX1Centroid(),meshBand1->getX2Centroid(),gridCube->getX3Centroid());
-      //   if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-      //   originX2 = gridCube->getX2Minimum();
-      //   g_minX2 = originX2;
-      //   g_maxX2 = originX2 + geoLength[1];
-      //   //walls
-      //   GbCuboid3DPtr addWallZmin (new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_minX3));
-      //   if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-      //   GbCuboid3DPtr addWallZmax (new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_maxX3, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1));
-      //   if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-      //   //walls
-      //   int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB        
-      //   D3Q27BoundaryConditionAdapterPtr slip(new D3Q27SlipBCAdapter(bbOption));
-      //   D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slip,Interactor3D::SOLID));
-      //   D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slip,Interactor3D::SOLID));
-
-      //   SetSolidOrTransBlockVisitor v1(addWallZminInt, SetSolidOrTransBlockVisitor::TRANS);
-      //   grid->accept(v1);
-      //   addWallZminInt->initInteractor();
-      //   SetSolidOrTransBlockVisitor v2(addWallZmaxInt, SetSolidOrTransBlockVisitor::TRANS);
-      //   grid->accept(v2);        
-      //   addWallZmaxInt->initInteractor();
-
-      //   UbSchedulerPtr geoSch(new UbScheduler(1));
-      //   D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-      //      new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), 
-      //      unitConverter, true));
-      //   ppgeo->update(0);
-      //   ppgeo.reset();
-      //   geoSch.reset();
-      //   //////////////////////////////////////////////////////////////////////////
-
-      //   if(myid == 0) UBLOG(logINFO,"Restart - end"); 
-      //}
-      //UbSchedulerPtr visSch(new UbScheduler());
-      ////visSch->addSchedule(1,0,3);
-      ////visSch->addSchedule(100,100,1000);
-      ////visSch->addSchedule(1000,1000,5000);
-      ////visSch->addSchedule(5000,5000,100000);
-      ////visSch->addSchedule(100000,100000,10000000);
-
-      //visSch->addSchedule(1000,1000,10000000);
-
-      //D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter);
-
-      //UbSchedulerPtr resSchRMS(new UbScheduler());
-      //resSchRMS->addSchedule(1000000,93000,10000000);
-      //UbSchedulerPtr resSchMeans(new UbScheduler());
-      //resSchMeans->addSchedule(1000000,93000,10000000);
-      //UbSchedulerPtr stepAvSch(new UbScheduler());
-      //int averageInterval=100;
-      //stepAvSch->addSchedule(averageInterval,0,10000000);
-      //AverageValuesPostprocessor Avpp(grid, pathname, WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans,resSchRMS/*wann wird resettet*/);
-
-      //UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30));
-      //nupsSch->addSchedule(500,500,1e6);
-      //NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm);
-
-      //UbSchedulerPtr emSch(new UbScheduler(10));
-      //EmergencyExitPostprocessor empr(grid, emSch, pathname, RestartPostprocessorPtr(&rp), comm);
-
-      //if(myid == 0)
-      //{
-      //   UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem());
-      //   UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed());
-      //   UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe());
-      //}
-
-      //string lastStep = string(cstr2);
-      //double endTime = UbSystem::stringTo<double>(lastStep);
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      //if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      //calculation->calculate();
-      //if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argc == 1)
-   {
-      cout<<"Command line argument isn't specified!"<<endl;
-      cout<<"plate2 <machine name>"<<endl;
-      return 1;
-   }
-   run(argv[1], argv[2]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/f16Test/CMakeLists.txt b/apps/cpu/f16Test/CMakeLists.txt
deleted file mode 100644
index f8cfe5f4bb024c2cf4036b54a67d378fdc37721e..0000000000000000000000000000000000000000
--- a/apps/cpu/f16Test/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(f16test)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(f16test BINARY)
diff --git a/apps/cpu/f16Test/F16BombadilTestSmall.cfg b/apps/cpu/f16Test/F16BombadilTestSmall.cfg
deleted file mode 100644
index c0ee5662e270b6450e8d3dc0bb6bda4617512cce..0000000000000000000000000000000000000000
--- a/apps/cpu/f16Test/F16BombadilTestSmall.cfg
+++ /dev/null
@@ -1,55 +0,0 @@
-pathOut = d:/temp/f16Small
-pathGeo = d:/Projects/SFB880/DLR-F16/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian
-#fngFileWhole = f16-ascii.stl
-#fngFileWhole = grundgeometrie-direkter-export.stl
-#fngFileWhole = grundgeometrie-mittel.stl
-
-fngFileWhole = cylinder.ASCII.stl
-
-fngFileBodyPart = f16-body-part-ascii.stl
-fngFileTrailingEdge = f16-trailing-edge-ascii.stl
-zigZagTape = 2zackenbaender0.stl
-
-numOfThreads = 2
-availMem = 10e9
-refineLevel = 8
-#blockNx = 8 4 8
-blockNx = 21 6 13
-#blockNx = 294 12 247
-uLB = 0.1
-
-#x1min x1max x2min x2max x3min x3max [m]
-#boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65
-#boundingBox = -0.1 0.60 0.035 0.065 -0.3 0.3
-#boundingBox = -10e-3 310e-3 0.035 0.065 -21e-3 21e-3
-
-boundingBox = -0.255 0.27 0.035 0.065 -0.17 0.155
-
-#deltaXfine = 0.005 #level 0
-#deltaXfine = 0.0025 #level 1
-#deltaXfine = 0.00125 #level 2
-#deltaXfine = 0.000625 #level 3
-#deltaXfine = 0.0003125 #level 4
-#deltaXfine = 0.00015625 #level 5
-#deltaXfine = 0.000078125 #level 6
-#deltaXfine = 0.0000390625 #level 7
-deltaXfine = 0.00001953125 #level 8
-
-
-refineDistance = 0.3
-
-restartStep = 10
-restartStepStart = 10
-
-outTime = 1
-endTime = 10
-
-logToFile = false
-
-porousTralingEdge = false
-
-thinWall = false
-
-testBox=false
-
-nupsStep = 1 1 10000000
\ No newline at end of file
diff --git a/apps/cpu/f16Test/f16test.cpp b/apps/cpu/f16Test/f16test.cpp
deleted file mode 100644
index 32f424bdbcd8c2fa9f9596147757dc63f2c0b684..0000000000000000000000000000000000000000
--- a/apps/cpu/f16Test/f16test.cpp
+++ /dev/null
@@ -1,659 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <boost/pointer_cast.hpp>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-double rangeRandom1()
-{
-   return (2.0*rand())/RAND_MAX-1.0;
-}
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathOut = config.getString("pathOut");
-      string          pathGeo = config.getString("pathGeo");
-      string          fngFileWhole = config.getString("fngFileWhole");
-      string          fngFileTrailingEdge = config.getString("fngFileTrailingEdge");
-      string          fngFileBodyPart = config.getString("fngFileBodyPart");
-      string          zigZagTape = config.getString("zigZagTape");
-      int             numOfThreads = config.getInt("numOfThreads");
-      vector<int>     blockNx = config.getVector<int>("blockNx");
-      vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      double          uLB = config.getDouble("uLB");
-      double          restartStep = config.getDouble("restartStep");
-      double          restartStepStart = config.getDouble("restartStepStart");
-      double          endTime = config.getDouble("endTime");
-      double          outTime = config.getDouble("outTime");
-      double          availMem = config.getDouble("availMem");
-      int             refineLevel = config.getInt("refineLevel");
-      bool            logToFile = config.getBool("logToFile");
-      bool            porousTralingEdge = config.getBool("porousTralingEdge");
-      double          deltaXfine = config.getDouble("deltaXfine")*1000.0;
-      bool            thinWall = config.getBool("thinWall");
-      double          refineDistance = config.getDouble("refineDistance");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathOut.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathOut + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      
-      double g_minX1 = boundingBox[0]*1000.0;
-      double g_minX2 = boundingBox[2]*1000.0;
-      double g_minX3 = boundingBox[4]*1000.0;
-
-      double g_maxX1 = boundingBox[1]*1000.0;
-      double g_maxX2 = boundingBox[3]*1000.0;
-      double g_maxX3 = boundingBox[5]*1000.0;
-       
-      //////////////////////////////////////////////////////////////////////////
-      double deltaXcoarse = deltaXfine*(double)(1 << refineLevel);
-      //double nx2_temp = floor((g_maxX2 - g_minX2) / (deltaXcoarse*(double)blockNx[0]));
-
-      //deltaXcoarse = (g_maxX2 - g_minX2) / (nx2_temp*(double)blockNx[0]);
-      //UBLOG(logINFO, "nx2_temp:"<<nx2_temp);
-      //g_maxX2 -= 0.5* deltaXcoarse;
-      //////////////////////////////////////////////////////////////////////////
-      double blockLength = (double)blockNx[0] * deltaXcoarse;
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double Re = 1;//e6;
-
-      double rhoLB = 0.0;
-      double rhoReal = 1.2041; //(kg/m3)
-      double nueReal = 153.5e-7; //m^2/s
-
-      double lReal = 3.0;//m
-      double uReal = Re*nueReal / lReal;
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double Ma = 0.15;//Ma-Real!
-      //double csReal = uReal / Ma;
-      //double hLB = lReal / deltaXcoarse;
-
-      //LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB);
-
-      //double u_LB = uReal   * unitConverter.getFactorVelocityWToLb();
-      //double nu_LB = nueReal * unitConverter.getFactorViscosityWToLb();
-      double l_LB = 300 / deltaXcoarse;
-      double nuLB = (uLB*l_LB) / Re; //0.005;
-      //double nuLB = 0.005;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      ////////////////////////////////////////////////////////////////////////
-      //Grid
-      //////////////////////////////////////////////////////////////////////////
-      SPtr<Grid3D> grid(new Grid3D(comm));
-      grid->setDeltaX(deltaXcoarse);
-      grid->setBlockNX(blockNx[0], blockNx[1], blockNx[2]);
-
-      SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      //gridCube->setCenterCoordinates(geo->getX1Centroid(), geo->getX2Centroid(), geo->getX3Centroid());
-      if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut + "/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-      GenBlocksGridVisitor genBlocks(gridCube);
-      grid->accept(genBlocks);
-
-      grid->setPeriodicX1(false);
-      grid->setPeriodicX2(true);
-      grid->setPeriodicX3(false);
-
-      //BC adapters
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      if (thinWall)
-      {
-         noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm()));
-      }
-      else
-      {
-         noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-      }
-
-      SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter());
-      slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm()));
-
-      mu::Parser fct;
-      fct.SetExpr("U");
-      fct.DefineConst("U", uLB);
-      SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-      velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm()));
-
-      SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB));
-      denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm()));
-
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-      bcVisitor.addBC(slipBCAdapter);
-      bcVisitor.addBC(velBCAdapter);
-      bcVisitor.addBC(denBCAdapter);
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> rSch(new UbScheduler(restartStep, restartStep));
-      RestartCoProcessor rp(grid, rSch, comm, pathOut, RestartCoProcessor::TXT);
-      //////////////////////////////////////////////////////////////////////////
-
-
-      if (grid->getTimeStep() == 0)
-      {
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "* Re                  = "<<Re);
-            UBLOG(logINFO, "* Ma                  = "<<Ma);
-            UBLOG(logINFO, "* velocity (uReal)    = "<<uReal<<" m/s");
-            UBLOG(logINFO, "* viscosity (nuReal)  = "<<nueReal<<" m^2/s");
-            UBLOG(logINFO, "* velocity LB (uLB)   = "<<uLB);
-            UBLOG(logINFO, "* viscosity LB (nuLB) = "<<nuLB);
-            UBLOG(logINFO, "* dx_base             = "<<deltaXcoarse/1000.0<<" m");
-            UBLOG(logINFO, "* dx_refine           = "<<deltaXfine/1000.0<<" m");
-            UBLOG(logINFO, "* number of levels    = " << refineLevel + 1);
-            UBLOG(logINFO, "* number of threads   = " << numOfThreads);
-            UBLOG(logINFO, "* number of processes = " << comm->getNumberOfProcesses());
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         SPtr<GbTriFaceMesh3D> fngMeshWhole;
-         SPtr<GbTriFaceMesh3D> fngMeshBodyPart;
-         SPtr<GbTriFaceMesh3D> fngMeshTrailingEdge;
-         if (porousTralingEdge)
-         {
-            if (myid==0) UBLOG(logINFO, "Read fngFileBodyPart:start");
-            fngMeshBodyPart = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileBodyPart, "fngMeshBody", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read fngFileBodyPart:end");
-            fngMeshBodyPart->rotate(0.0, 0.5, 0.0);
-            if (myid==0) GbSystem3D::writeGeoObject(fngMeshBodyPart.get(), pathOut+"/geo/fngMeshBody", WbWriterVtkXmlBinary::getInstance());
-
-            if (myid==0) UBLOG(logINFO, "Read fngFileTrailingEdge:start");
-            fngMeshTrailingEdge = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileTrailingEdge, "fngMeshTrailingEdge", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read fngFileTrailingEdge:end");
-            fngMeshTrailingEdge->rotate(0.0, 0.5, 0.0);
-            fngMeshTrailingEdge->translate(0,0,1.3);
-            if (myid==0) GbSystem3D::writeGeoObject(fngMeshTrailingEdge.get(), pathOut+"/geo/fngMeshTrailingEdge", WbWriterVtkXmlBinary::getInstance());
-         }
-         else
-         {
-            if (myid==0) UBLOG(logINFO, "Read fngFileWhole:start");
-            fngMeshWhole = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileWhole, "fngMeshWhole", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read fngFileWhole:end");
-            fngMeshWhole->rotate(0.0, 0.5, 0.0);
-            if (myid==0) GbSystem3D::writeGeoObject(fngMeshWhole.get(), pathOut+"/geo/fngMeshWhole", WbWriterVtkXmlBinary::getInstance());
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         // Zackenband
-         //////////////////////////////////////////////////////////////////////////
-         //top
-         //////////////////////////////////////////////////////////////////////////
-         //if (myid==0) UBLOG(logINFO, "Read zigZagTape:start");
-         //string ZckbndFilename = pathGeo+"/"+zigZagTape;
-         //SPtr<GbTriFaceMesh3D> meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape1"));
-         //meshBand1->rotate(0.0, 5, 0.0);
-         //meshBand1->translate(15, 0, -12.850);
-         //if (myid==0) GbSystem3D::writeGeoObject(meshBand1.get(), pathOut+"/geo/zigZagTape1", WbWriterVtkXmlASCII::getInstance());
-         //// Zackenband2
-         //SPtr<GbTriFaceMesh3D> meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape2"));
-         //meshBand2->rotate(0.0, 5, 0.0);
-         //meshBand2->translate(15, 5, -12.850);
-         //if (myid==0) GbSystem3D::writeGeoObject(meshBand2.get(), pathOut+"/geo/zigZagTape2", WbWriterVtkXmlASCII::getInstance());
-         ////// Zackenband3
-         ////SPtr<GbTriFaceMesh3D> meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape3"));
-         ////meshBand3->rotate(0.0, 5, 0.0);
-         ////meshBand3->translate(15, 0, -12.35);
-         ////if (myid==0) GbSystem3D::writeGeoObject(meshBand3.get(), pathOut+"/geo/zigZagTape3", WbWriterVtkXmlASCII::getInstance());
-         ////// Zackenband4
-         ////SPtr<GbTriFaceMesh3D> meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape4"));
-         ////meshBand4->rotate(0.0, 5, 0.0);
-         ////meshBand4->translate(15, 5, -12.35);
-         ////if (myid==0) GbSystem3D::writeGeoObject(meshBand4.get(), pathOut+"/geo/zigZagTape4", WbWriterVtkXmlASCII::getInstance());
-        
-         ////bottom
-         //SPtr<GbTriFaceMesh3D> meshBand5(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape5"));
-         //meshBand5->rotate(0.0, -1, 0.0);
-         //meshBand5->rotate(0.0, 0.0,180.0);
-         //meshBand5->translate(30, 0, -37.3);
-         //if (myid==0) GbSystem3D::writeGeoObject(meshBand5.get(), pathOut+"/geo/zigZagTape5", WbWriterVtkXmlASCII::getInstance());
-         //// Zackenband6
-         //SPtr<GbTriFaceMesh3D> meshBand6(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape6"));
-         //meshBand6->rotate(0.0, -1, 0.0);
-         //meshBand6->rotate(0.0, 0.0, 180.0);
-         //meshBand6->translate(30, 5, -37.3);
-         //if (myid==0) GbSystem3D::writeGeoObject(meshBand6.get(), pathOut+"/geo/zigZagTape6", WbWriterVtkXmlASCII::getInstance());
-         ////// Zackenband7
-         ////SPtr<GbTriFaceMesh3D> meshBand7(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape7"));
-         ////meshBand7->rotate(0.0, 5, 0.0);
-         ////meshBand7->translate(15, 0, -12.35);
-         ////if (myid==0) GbSystem3D::writeGeoObject(meshBand7.get(), pathOut+"/geo/zigZagTape7", WbWriterVtkXmlASCII::getInstance());
-         ////// Zackenband8
-         ////SPtr<GbTriFaceMesh3D> meshBan8(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape8"));
-         ////meshBan8->rotate(0.0, 5, 0.0);
-         ////meshBan8->translate(15, 5, -12.35);
-         ////if (myid==0) GbSystem3D::writeGeoObject(meshBan8.get(), pathOut+"/geo/zigZagTape8", WbWriterVtkXmlASCII::getInstance());
-         //if (myid==0) UBLOG(logINFO, "Read zigZagTape:end");
-
-         //////////////////////////////////////////////////////////////////////////
-
-         SPtr<Interactor3D> fngIntrWhole;
-         SPtr<Interactor3D> fngIntrBodyPart;
-         SPtr<Interactor3D> fngIntrTrailingEdge;
-         if (porousTralingEdge)
-         {
-            fngIntrBodyPart = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshBodyPart, grid, noSlipBCAdapter, Interactor3D::SOLID));
-            fngIntrTrailingEdge = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshTrailingEdge, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         }
-         else
-         {
-            fngIntrWhole = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::EDGES));
-         }
-
-         //SPtr<D3Q27TriFaceMeshInteractor> triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::EDGES));
-         //SPtr<D3Q27TriFaceMeshInteractor> triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::EDGES));
-         //SPtr<D3Q27TriFaceMeshInteractor> triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand3, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::EDGES));
-         //SPtr<D3Q27TriFaceMeshInteractor> triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand4, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::EDGES));
-
-
-
-         if (refineLevel > 0 && myid == 0)
-         {
-            if (myid == 0) UBLOG(logINFO, "Refinement - start");
-            //RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            //refineHelper.addGbObject(geo, refineLevel);
-            //refineHelper.refine();
-            
-            //RefineAroundGbObjectHelper refineHelper1(grid, refineLevel-1, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr1), 0.0, 10.0, comm);
-            //refineHelper1.refine();
-            //RefineAroundGbObjectHelper refineHelper2(grid, refineLevel, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr2), -1.0, 5.0, comm);
-            //refineHelper2.refine();
-            
-
-            int rank = grid->getRank();
-            grid->setRank(0);
-            //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand1Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance);
-            //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand2Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance);
-            //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand3Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance);
-            //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand4Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance);
-            grid->setRank(rank);
-
-            if (porousTralingEdge)
-            {
-               int rank = grid->getRank();
-               grid->setRank(0);
-               boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(fngIntrBodyPart)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance);
-               grid->setRank(rank);
-            }
-            else
-            {
-               int rank = grid->getRank();
-               grid->setRank(0);
-               boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(fngIntrWhole)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance);
-               grid->setRank(rank);
-            }
-
-
-
-            ////////////////////////////////////////////
-            //METIS
-            //SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-            ////////////////////////////////////////////
-            /////delete solid blocks
-            if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-            //InteractorsHelper intHelper(grid, metisVisitor);
-            //if (porousTralingEdge)
-            //{
-            //   intHelper.addInteractor(fngIntrBodyPart);
-            //}
-            //else
-            //{
-            //   intHelper.addInteractor(fngIntrWhole);
-            //}
-            //////////////////////////////////////////////////////////////////////////
-            
-            //intHelper.selectBlocks();
-            
-            if (porousTralingEdge)
-            {
-               SetSolidBlockVisitor v(fngIntrBodyPart, BlockType::SOLID);
-               grid->accept(v);
-               std::vector<SPtr<Block3D>>& sb = fngIntrBodyPart->getSolidBlockSet();
-               for(SPtr<Block3D> block : sb)
-               {
-                  grid->deleteBlock(block);
-               }
-               fngIntrBodyPart->removeSolidBlocks();
-               fngIntrBodyPart->removeBcBlocks();
-            }
-            else
-            {
-               SetSolidBlockVisitor v(fngIntrWhole, BlockType::SOLID);
-               grid->accept(v);
-               std::vector<SPtr<Block3D>>& sb = fngIntrWhole->getSolidBlockSet();
-               for(SPtr<Block3D> block : sb)
-               {
-                  grid->deleteBlock(block);
-               }
-               fngIntrWhole->removeSolidBlocks();
-               fngIntrWhole->removeBcBlocks();
-            }
-
-            if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-            //////////////////////////////////////
-
-            if (porousTralingEdge)
-            {
-               grid->setRank(0);
-               boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(fngIntrTrailingEdge)->refineBlockGridToLevel(refineLevel, -2.0, refineDistance);
-               grid->setRank(rank);
-
-               //SPtr<GbObject3D> trailingEdgeCube(new GbCuboid3D(fngMeshTrailingEdge->getX1Minimum()-blockLength, fngMeshTrailingEdge->getX2Minimum(), fngMeshTrailingEdge->getX3Minimum()-blockLength/2.0,
-               //   fngMeshTrailingEdge->getX1Maximum()+blockLength, fngMeshTrailingEdge->getX2Maximum(), fngMeshTrailingEdge->getX3Maximum()+blockLength/2.0));
-               //if (myid == 0) GbSystem3D::writeGeoObject(trailingEdgeCube.get(), pathOut + "/geo/trailingEdgeCube", WbWriterVtkXmlASCII::getInstance());
-
-               //RefineCrossAndInsideGbObjectBlockVisitor refVisitor(trailingEdgeCube, refineLevel);
-               //grid->accept(refVisitor);
-            }
-
-            RatioBlockVisitor ratioVisitor(refineLevel);
-            CheckRatioBlockVisitor checkRatio(refineLevel);
-            int count = 0;
-            
-            do {
-               grid->accept(ratioVisitor);
-               checkRatio.resetState();
-               grid->accept(checkRatio);
-               if (myid == 0) UBLOG(logINFO, "count ="<<count++<<" state="<<checkRatio.getState());
-            } while (!checkRatio.getState());
-
-            //RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-            //grid->accept(ratioSmoothVisitor);
-
-            {
-               WriteBlocksSPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm));
-               ppblocks->process(0);
-               ppblocks.reset();
-            }
-
-            OverlapBlockVisitor overlapVisitor(refineLevel, false);
-            grid->accept(overlapVisitor);
-
-            //std::vector<int> dirs;
-            //for (int i = D3Q27System::E; i <= D3Q27System::TS; i++)
-            //{
-            //   dirs.push_back(i);
-            //}
-            //SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-            //grid->accept(interDirsVisitor);
-
-            if (myid == 0) UBLOG(logINFO, "Refinement - end");
-         }
-
-         grid->updateDistributedBlocks(comm);
-
-
-         //return;
-
-         std::vector<int> dirs;
-         for (int i = D3Q27System::E; i<=D3Q27System::TS; i++)
-         {
-            dirs.push_back(i);
-         }
-         SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-         grid->accept(interDirsVisitor);
-
-         //walls
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-
-
-         //wall interactors
-         SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slipBCAdapter, Interactor3D::SOLID));
-         //SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         //SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathOut+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         //inflow
-         SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //outflow
-         SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(inflowIntr);
-         intHelper.addInteractor(outflowIntr);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         //intHelper.addInteractor(triBand1Interactor);
-         //intHelper.addInteractor(triBand2Interactor);
-         //intHelper.addInteractor(triBand3Interactor);
-         //intHelper.addInteractor(triBand4Interactor);
-         
-         if (porousTralingEdge)
-         {
-            intHelper.addInteractor(fngIntrBodyPart);
-            //intHelper.addInteractor(fngIntrTrailingEdge);
-         } 
-         else
-         {
-            intHelper.addInteractor(fngIntrWhole);
-         }
-         
-         //////////////////////////////////////////////////////////////////////////
-         intHelper.selectBlocks();
-
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         WriteBlocksSPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->process(1);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blockNx[0])* (unsigned long long)(blockNx[1])* (unsigned long long)(blockNx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blockNx[0] + ghostLayer) * (blockNx[1] + ghostLayer) * (blockNx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], CompressibleCumulantLBMKernel::NORMAL));
-         //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], IncompressibleCumulantLBMKernel::NORMAL));
-
-         SPtr<BCProcessor> bcProc;
-
-         if (thinWall)
-         {
-            bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor());
-         }
-         else
-         {
-            bcProc = SPtr<BCProcessor>(new BCProcessor());
-         }
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         //BC
-         intHelper.setBC();
-         
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-         mu::Parser inflowProfileVx1, inflowProfileVx2, inflowProfileVx3;
-         inflowProfileVx1.SetExpr("U*rangeRandom1()");
-         inflowProfileVx1.DefineConst("U", uLB);
-         inflowProfileVx1.DefineFun("rangeRandom1", rangeRandom1);
-         inflowProfileVx2.SetExpr("0.1*U*rangeRandom1()");
-         inflowProfileVx2.DefineConst("U", uLB);
-         inflowProfileVx2.DefineFun("rangeRandom1", rangeRandom1);
-         inflowProfileVx3.SetExpr("0.1*U*rangeRandom1()");
-         inflowProfileVx3.DefineConst("U", uLB);
-         inflowProfileVx3.DefineFun("rangeRandom1", rangeRandom1);
-         
-         InitDistributionsBlockVisitor initVisitor(nuLB, rhoLB);
-         //initVisitor.setVx1(fct);
-         //initVisitor.setVx1(inflowProfileVx1);
-         //initVisitor.setVx2(inflowProfileVx2);
-         //initVisitor.setVx3(inflowProfileVx3);
-         //initVisitor.setNu(nuLB);
-         grid->accept(initVisitor);
-
-         ////set connectors
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //Postrozess
-         SPtr<UbScheduler> geoSch(new UbScheduler(1));
-         WriteBoundaryConditionsSPtr<CoProcessor> ppgeo(
-            new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-         ppgeo->process(0);
-         ppgeo.reset();
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         grid->accept(bcVisitor);
-      }
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTime));
-
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv,comm);
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::HYBRID));
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch, CalculationManager::PrePostBc));
-      //calculation->setTimeAveragedValuesCoProcessor(tav);
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-int main(int argc, char* argv[])
-{
-
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file must be set!: " << argv[0] << " <config file>" << endl << std::flush;
-      }
-   }
-
-   return 0;
-}
-
diff --git a/apps/cpu/fetol_demo/CMakeLists.txt b/apps/cpu/fetol_demo/CMakeLists.txt
deleted file mode 100644
index c0c5a123ce7efead3757eac4c52af02ea26cb4f3..0000000000000000000000000000000000000000
--- a/apps/cpu/fetol_demo/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(fetol_demo)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids ${FETOL_RELEASE_LIBRARY})
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(fetol_demo BINARY)
diff --git a/apps/cpu/fetol_demo/fetol_demo.cpp b/apps/cpu/fetol_demo/fetol_demo.cpp
deleted file mode 100644
index a4cf176cdd8f12dc005c405ac4a067d7aecdce7d..0000000000000000000000000000000000000000
--- a/apps/cpu/fetol_demo/fetol_demo.cpp
+++ /dev/null
@@ -1,306 +0,0 @@
-#include <vfluids.h>
-
-#include <fbond.h>
-#include <Version.h>
-
-#include <JM.h>
-
-using namespace std;
-
-using namespace fetol;
-
-////////////////////////////////////////////////////////////////////////
-void chanel(const char *cstr)
-{
-   try
-   {
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname; 
-      int numOfThreads = 1;
-      double availMem = 0;
-
-      UBLOG(logINFO,"Communicator-init::strat");
-      CommunicatorPtr comm = FETOLCommunicator::getInstance();
-      UBLOG(logINFO,"Communicator-init::end");
-
-      int myid = comm->getProcessID();
-      int mybundle = comm->getBundleID();
-      int root = comm->getRoot();
-      int myrank = boost::dynamic_pointer_cast<FETOLCommunicator>(comm)->getMPIRank();
-
-      UBLOG(logINFO,"myid = " << myid );
-      UBLOG(logINFO,"mybundle = " << mybundle );
-      UBLOG(logINFO,"myrank = " << myrank );
-
-      JM::init(mybundle, myrank);
-
-      //UbLog::reportingLevel() = logDEBUG5;
-
-      if(machine == "BOMBADIL") 
-      {
-         pathname = "d:/temp/fetol_demo";
-         availMem = 3.0e9;
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         //pathname = "/work/koskuche/scratch/fetol_demo";
-
-         pathname = string(cstr);
-         availMem = 1.5e9;
-
-        if(myid==root && mybundle==root)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/log/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      double dx = 1;
-
-      const int blocknx1 = 40;
-      const int blocknx2 = 40;
-      const int blocknx3 = 40;
-
-      const int gridNx1 = 4;
-      const int gridNx2 = 2;
-      const int gridNx3 = 2;
-
-      double L1 = gridNx1*blocknx1;
-      double L2, L3, H;
-      L2 = H = gridNx2*blocknx1;
-      L3 = gridNx3*blocknx1;
-
-      LBMReal radius = 7;
-      LBMReal uLB = 0.1;
-      LBMReal Re = 3000.0;
-      LBMReal rhoLB = 0.0;
-      LBMReal l = L2 / dx;
-      LBMReal nueLB = (uLB*2.0*radius)/Re;
-
-      Grid3DPtr grid(new Grid3D(comm));
-      grid->setDeltaX(dx);
-      grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-      //UBLOG(logINFO,"Restart:start");
-      UbSchedulerPtr restartSch(new UbScheduler(1000, 1000, 100000));
-      RestartPostprocessor rp(grid, restartSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY);
-      grid = rp.restart(-1);
-      //UBLOG(logINFO,"Restart:end");
-
-      if (grid->getTimeStep() == 0)
-      {
-
-         const int baseLevel = 0;
-         const int refineLevel = 0;
-
-         //obstacle
-         GbObject3DPtr sphere(new GbSphere3D(L1/4.0, L2*0.5, L3*0.5, radius));
-         GbSystem3D::writeGeoObject(sphere.get(),pathname + "/geo/sphere", WbWriterVtkXmlBinary::getInstance());
-
-         D3Q27InteractorPtr sphereInt;
-
-         //bounding box
-         double d_minX1 = 0.0;
-         double d_minX2 = 0.0;
-         double d_minX3 = 0.0;
-
-         double d_maxX1 = L1;
-         double d_maxX2 = L2;
-         double d_maxX3 = L3;
-
-         double blockLength = blocknx1*dx;
-
-         GbObject3DPtr gridCube(new GbCuboid3D(d_minX1, d_minX2, d_minX3, d_maxX1, d_maxX2, d_maxX3));
-         if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); 
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"Parameters:");
-            UBLOG(logINFO,"L = " << L2/dx );
-            UBLOG(logINFO,"v = " << uLB );
-            UBLOG(logINFO,"rho = " << rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-            UBLOG(logINFO,"Re = " << Re );
-            UBLOG(logINFO,"dx = " << dx );
-            UBLOG(logINFO,"number of levels = " << refineLevel+1 );
-            UBLOG(logINFO,"numOfThreads = " << numOfThreads );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-         //walls
-         GbCuboid3DPtr addWallYmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_minX2, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_minX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallYmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_maxX2, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_maxX3, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         //inflow
-         GbCuboid3DPtr geoInflow (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_minX1, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow (new GbCuboid3D(d_maxX1, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-
-         //sphere
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-         sphereInt = D3Q27InteractorPtr ( new D3Q27Interactor(sphere, grid, bcObst,Interactor3D::SOLID));
-
-         //walls
-         D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcObst,Interactor3D::SOLID));
-
-         mu::Parser fct;
-         fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4");
-         fct.DefineConst("U", uLB);
-         fct.DefineConst("H", H);
-
-         //inflow
-         D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST));
-         velBCAdapter->setSecondaryBcOption(2);
-         D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //outflow
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(sphereInt);
-         intHelper.addInteractor(addWallYminInt);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-         FETOLSetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nod = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl);
-
-         double needMemAll  = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }            
-
-         LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL));
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         intHelper.setBC();
-
-         //initialization of distributions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB);
-         initVisitor.setVx1(fct);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end"); 
-      }
-      else
-      {
-         UBLOG(logINFO,"SetConnectors - start, id="<<myid);
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-         FETOLSetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         
-         UBLOG(logINFO,"SetConnectors - end, id="<<myid); 
-      }
-
-      UbSchedulerPtr stepSch(new UbScheduler());
-      stepSch->addSchedule(1000, 0, 1000000);
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv);
-
-      //UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      //NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double endTime = 100000;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch, CalculationManager::FETOL));
-      
-      if(myid == 0) 
-         UBLOG(logINFO,"Simulation-start");
-      
-      calculation->calculate();
-      
-      if(myid == 0) 
-         UBLOG(logINFO,"Simulation-end");
-
-      JM::finalize();
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if ( argv != NULL )
-   {
-      if (argc > 1)
-      {
-         chanel(argv[1]);
-      }
-      else
-      {
-         cout << "Configuration file must be set!: " <<  argv[0] << " <config file>" << endl << std::flush;
-      }
-   }
-}
-
diff --git a/apps/cpu/greenvortex/greenvortex.cpp b/apps/cpu/greenvortex/greenvortex.cpp
index ba54105e338e28b660d79613eae67aa6bfcd76a2..207700755db3bcf29642c9208ad6eaa05919d79a 100644
--- a/apps/cpu/greenvortex/greenvortex.cpp
+++ b/apps/cpu/greenvortex/greenvortex.cpp
@@ -71,11 +71,11 @@ void run(const char *cstr)
 
       CommunicatorPtr comm(new MPICommunicator());
 
-      LBMReal uLB = 0.01;
-      LBMReal Re = 20.0;
-      LBMReal rhoLB = 1.0;
-      LBMReal l = blockLentghX2 / dx;
-      LBMReal nueLB = (uLB*l)/Re;
+      real uLB = 0.01;
+      real Re = 20.0;
+      real rhoLB = 1.0;
+      real l = blockLentghX2 / dx;
+      real nueLB = (uLB*l)/Re;
 
       SimulationParametersPtr param = SimulationParameters::getInstanz();
       param->setCollisionModelType(SimulationParameters::COMPRESSIBLE);
diff --git a/apps/cpu/gridRf/gridRf.cpp b/apps/cpu/gridRf/gridRf.cpp
index 38e5c46f53e59fff2cb5135549cf69370c933a09..8dd1d7449f57bff34a312968dd6a69e9e16d3c66 100644
--- a/apps/cpu/gridRf/gridRf.cpp
+++ b/apps/cpu/gridRf/gridRf.cpp
@@ -70,11 +70,11 @@ void run(const char *cstr)
 
       CommunicatorPtr comm(new MPICommunicator());
 
-      LBMReal uLB = 0.01;
-      LBMReal Re = 20.0;
-      LBMReal rhoLB = 1.0;
-      LBMReal l = blockLentghX2 / dx;
-      LBMReal nueLB = (uLB*l)/Re;
+      real uLB = 0.01;
+      real Re = 20.0;
+      real rhoLB = 1.0;
+      real l = blockLentghX2 / dx;
+      real nueLB = (uLB*l)/Re;
 
       SimulationParametersPtr param = SimulationParameters::getInstanz();
       param->setCollisionModelType(SimulationParameters::COMPRESSIBLE);
diff --git a/apps/cpu/insitu_demo/CMakeLists.txt b/apps/cpu/insitu_demo/CMakeLists.txt
deleted file mode 100644
index df3d4879adb9e4736fbd393a251b123aa2ede6a5..0000000000000000000000000000000000000000
--- a/apps/cpu/insitu_demo/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(insitu_demo)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids ${FETOL_RELEASE_LIBRARY})
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(insitu_demo BINARY)
diff --git a/apps/cpu/insitu_demo/config.txt b/apps/cpu/insitu_demo/config.txt
deleted file mode 100644
index 0d4b199937822e5235e280e9c8522b0cc7eefc00..0000000000000000000000000000000000000000
--- a/apps/cpu/insitu_demo/config.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-#Ordner für Simulationsergebnisse
-path=d:/temp/insitu_demo
-
-#Verfügbare Arbeitsspeicher in Byte
-memory=12e9
-
-#Pfad zum Metafile
-metafile=d:/Data/insituDemo/metafile.csv
-
-#Ausgabezeitschritt
-outstep=1
-
-#maximale Anzahl Simulationszeitschritte
-endstep=10000
-
-#Blockauflösung in Knoten
-blocknx1=8
-blocknx2=8
-blocknx3=8
-
-#Gitterauflösung in Blöcken
-gridnx1=10
-gridnx2=5
-gridnx3=5
\ No newline at end of file
diff --git a/apps/cpu/insitu_demo/insitu_demo.cpp b/apps/cpu/insitu_demo/insitu_demo.cpp
deleted file mode 100644
index bd5f150191f2b9a63a1b7532d8f91b8f068d089a..0000000000000000000000000000000000000000
--- a/apps/cpu/insitu_demo/insitu_demo.cpp
+++ /dev/null
@@ -1,329 +0,0 @@
-#include <vfluids.h>
-
-using namespace std;
-
-
-////////////////////////////////////////////////////////////////////////
-void chanel(const char *cstr1)
-{
-   try
-   {
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname; 
-      int numOfThreads = 6;
-      double availMem = 0;
-
-      //CommunicatorPtr comm = FETOLCommunicator::getInstance();
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-
-      int myid = comm->getProcessID();
-      int mybundle = comm->getBundleID();
-      int root = comm->getRoot();
-
-      if(machine == "BOMBADIL") 
-      {
-         pathname = "d:/temp/insitu_demo";
-         availMem = 3.0e9;
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         pathname = "/work/koskuche/scratch/fetol_demo";
-         availMem = 1.5e9;
-
-         if(myid==root && mybundle==root)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(mybundle)+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      ConfigFileReader cf(cstr1);
-      if ( !cf.read() )
-      {
-         std::string exceptionText = "Unable to read configuration file\n";
-         throw exceptionText;
-      }
-
-
-      pathname = cf.getValue("path");
-      availMem = UbSystem::stringTo<double>(cf.getValue("memory"));
-      string metafile = cf.getValue("metafile");
-      double outstep = UbSystem::stringTo<double>(cf.getValue("outstep"));
-      double endstep = UbSystem::stringTo<double>(cf.getValue("endstep"));
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      double dx = 1;
-
-      const int blocknx1 = UbSystem::stringTo<int>(cf.getValue("blocknx1")); //16;
-      const int blocknx2 = UbSystem::stringTo<int>(cf.getValue("blocknx2"));//16;
-      const int blocknx3 = UbSystem::stringTo<int>(cf.getValue("blocknx3"));//16;
-
-      const int gridNx1 = UbSystem::stringTo<int>(cf.getValue("gridnx1"));//3;
-      const int gridNx2 = UbSystem::stringTo<int>(cf.getValue("gridnx2"));//3;
-      const int gridNx3 = UbSystem::stringTo<int>(cf.getValue("gridnx3"));//3;
-
-      double L1 = gridNx1*blocknx1;
-      double L2, L3, H;
-      L2 = H = gridNx2*blocknx1;
-      L3 = gridNx3*blocknx1;
-
-      LBMReal radius = 7;
-      LBMReal uLB = 0.01;
-      LBMReal Re = 3000.0;
-      LBMReal rhoLB = 0.0;
-      LBMReal l = L2 / dx;
-      LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
-
-      Grid3DPtr grid(new Grid3D(comm));
-      grid->setDeltaX(dx);
-      grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-      //UbSchedulerPtr restartSch(new UbScheduler(10000, 10000, 100000));
-      //RestartPostprocessor rp(grid, restartSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY);
-      //grid = rp.restart(-1);
-
-      if (grid->getTimeStep() == 0)
-      {
-
-         const int baseLevel = 0;
-         const int refineLevel = 0;
-
-         //obstacle
-         GbObject3DPtr cylinder(new GbCylinder3D(L1*0.5, L2*0.5, 0, L1*0.5, L2*0.5, L3, radius));
-         GbSystem3D::writeGeoObject(cylinder.get(),pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance());
-
-         D3Q27InteractorPtr cylinderInt;
-
-         //bounding box
-         double d_minX1 = 0.0;
-         double d_minX2 = 0.0;
-         double d_minX3 = 0.0;
-
-         double d_maxX1 = L1;
-         double d_maxX2 = L2;
-         double d_maxX3 = L3;
-
-
-         double blockLength = blocknx1*dx;
-
-         //refinement area
-         double off = 1;
-         GbObject3DPtr refineCube(new  GbCuboid3D(cylinder->getX1Minimum()-off, cylinder->getX2Minimum()-off, cylinder->getX3Minimum(), 
-            cylinder->getX1Maximum()+off, cylinder->getX2Maximum()+off, cylinder->getX3Maximum()));
-
-         GbObject3DPtr gridCube(new GbCuboid3D(d_minX1, d_minX2, d_minX3, d_maxX1, d_maxX2, d_maxX3));
-         if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); 
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"Parameters:");
-            UBLOG(logINFO,"L = " << L2/dx );
-            UBLOG(logINFO,"v = " << uLB );
-            UBLOG(logINFO,"rho = " << rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-            UBLOG(logINFO,"Re = " << Re );
-            UBLOG(logINFO,"dx = " << dx );
-            UBLOG(logINFO,"number of levels = " << refineLevel+1 );
-            UBLOG(logINFO,"numOfThreads = " << numOfThreads );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-         if(myid ==0) GbSystem3D::writeGeoObject(refineCube.get(),pathname + "/geo/refineCube", WbWriterVtkXmlBinary::getInstance());
-
-         //walls
-         GbCuboid3DPtr addWallYmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_minX2, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_minX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallYmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_maxX2, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_maxX3, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         //inflow
-         GbCuboid3DPtr geoInflow (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_minX1, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow (new GbCuboid3D(d_maxX1, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-
-         if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(refineCube, 1);
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-         cylinderInt = D3Q27InteractorPtr ( new D3Q27Interactor(cylinder, grid, bcObst,Interactor3D::SOLID));
-
-         //walls
-         D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcObst,Interactor3D::SOLID));
-
-         mu::Parser fct;
-         fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4");
-         fct.DefineConst("U", uLB);
-         fct.DefineConst("H", H);
-
-         //inflow
-         D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST));
-         velBCAdapter->setSecondaryBcOption(2);
-         D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //outflow
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-         InteractorsHelper intHelper(grid, metisVisitor);
-         //intHelper.addInteractor(cylinderInt);
-         intHelper.addInteractor(addWallYminInt);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-         //FETOLSetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nod = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl);
-
-         double needMemAll  = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }            
-
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3));
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx1, blocknx2, blocknx3, true));
-         //option = 0 - ohne param., option = 1 - mit param.
-         //int option = 0;
-         LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL));
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         intHelper.setBC();
-
-         //initialization of distributions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB);
-         //initVisitor.setVx1(fct);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end"); 
-      }
-      else
-      {
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-      }
-
-      UbSchedulerPtr stepSch(new UbScheduler(outstep));
-      //D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv);
-
-      InSituVTKPostprocessor isp(grid, stepSch, metafile, conv);
-      //isp.update(0);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endstep, stepSch));
-      
-      if(myid == 0) 
-         UBLOG(logINFO,"Simulation-start");
-      
-      calculation->calculate();
-      
-      if(myid == 0) 
-         UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if ( argv != NULL )
-   {
-      if (argc > 1)
-      {
-            chanel(argv[1]);
-      }
-      else
-      {
-         cout << "Configuration file must be set!: " <<  argv[0] << " <config file>" << endl << std::flush;
-      }
-   }
-
-   return 0;
-}
-
diff --git a/apps/cpu/insitu_demoserver/CMakeLists.txt b/apps/cpu/insitu_demoserver/CMakeLists.txt
deleted file mode 100644
index b7fd3816c02e55f9636069005f5143a3e801f269..0000000000000000000000000000000000000000
--- a/apps/cpu/insitu_demoserver/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(insitu_demoserver)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids ${FETOL_RELEASE_LIBRARY})
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(insitu_demoserver BINARY)
diff --git a/apps/cpu/insitu_demoserver/insitu_demoserver.cpp b/apps/cpu/insitu_demoserver/insitu_demoserver.cpp
deleted file mode 100644
index c52d50fcd4567e994f2dfcf912dfac37d149f439..0000000000000000000000000000000000000000
--- a/apps/cpu/insitu_demoserver/insitu_demoserver.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL)
-#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)
-
-#include "vtkActor.h"
-#include "vtkContourFilter.h"
-#include "vtkDataSetMapper.h"
-#include "vtkDebugLeaks.h"
-#include "vtkDoubleArray.h"
-#include "vtkPolyData.h"
-#include "vtkPolyDataMapper.h"
-#include "vtkRectilinearGrid.h"
-#include "vtkRegressionTestImage.h"
-#include "vtkRenderWindow.h"
-#include "vtkOpenGLRenderer.h"
-#include "vtkSocketCommunicator.h"
-#include "vtkSocketController.h"
-#include "vtkStructuredGrid.h"
-#include "vtkImageData.h"
-#include "vtkUnstructuredGrid.h"
-#include "vtkCamera.h"
-#include "vtkImageActor.h"
-#include <vtkXMLUnstructuredGridWriter.h>
-#include "vtkRenderWindowInteractor.h"
-#include "vtkOpenGLActor.h"
-#include "vtkSmartPointer.h"
-#include "vtkInteractorStyleTrackballCamera.h"
-#include <vtkProperty.h>
-#include <vtkPointData.h>
-#include <vtkPlane.h>
-#include <vtkCutter.h>
-
-#include <boost/thread.hpp>
-
-#define VTK_CREATE(type, name) \
-   vtkSmartPointer<type> name = vtkSmartPointer<type>::New()
-
-
-static const int scMsgLength = 10;
-
-static void CleanUp(vtkSmartPointer<vtkSocketCommunicator> vtkNotUsed(comm),
-                    vtkSmartPointer<vtkSocketController> vtkNotUsed(contr))
-{
-   // This will close the connection as well as delete
-   // the communicator
-   // Deleting no longer necessary with smart pointers.
-   //   comm->Delete();
-   //   contr->Delete();
-}
-
-using namespace std;
-
-vtkSmartPointer<vtkSocketController> contr;
-vtkSmartPointer<vtkSocketCommunicator> comm;
-
-void receive(vtkSmartPointer<vtkUnstructuredGrid> ugrid, vtkSmartPointer<vtkDataSetMapper> umapper, vtkSmartPointer<vtkRenderWindow> renWin)
-{
-   int step;
-   while (true)
-   {
-      if (!comm->Receive(&step, 1, 1, 11))
-      {
-         cerr << "Server error: Error receiving data." << endl;
-         CleanUp(comm, contr);
-         return;
-      }
-
-      cout << "step: "<<step<<"\n";
-
-      if (!comm->Receive(ugrid, 1, 9))
-      {
-         cerr << "Client error: Error receiving data." << endl;
-         CleanUp(comm, contr);
-         return;
-      }
-      double range[2];
-      ugrid->GetPointData()->GetArray("Vx")->GetRange(range);
-      umapper->SetScalarRange(range);
-      umapper->Update();
-      //renWin->Render();
-   }
-}
-
-////////////////////////////////////////////////////////////////////////
-void server()
-{
-   try
-   {
-      contr = vtkSmartPointer<vtkSocketController>::New();
-      contr->Initialize();
-
-      comm = vtkSmartPointer<vtkSocketCommunicator>::New();
-
-      string hostname = "localhost";
-      int port=11111;
-
-      // Establish connection
-      if (!comm->WaitForConnection(port))
-      {
-         cerr << "Server error: Wait timed out or could not initialize socket." << endl;
-         return;
-      }
-
-      // Test receiving vtkDataObject
-      VTK_CREATE(vtkUnstructuredGrid, ugrid);
-
-      int step;
-
-      if (!comm->Receive(&step, 1, 1, 11))
-      {
-         cerr << "Server error: Error receiving data." << endl;
-         CleanUp(comm, contr);
-         return;
-      }
-
-      cout << "step: "<<step<<"\n";
-
-      if (!comm->Receive(ugrid, 1, 9))
-      {
-         cerr << "Client error: Error receiving data." << endl;
-         CleanUp(comm, contr);
-         return;
-      }
-
-      vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer = vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
-      writer->SetInput(ugrid);
-      writer->SetFileName("test.vtu");
-      writer->SetDataModeToAscii();
-      writer->Update();
-
-      //vtkPlane
-      vtkSmartPointer<vtkPlane> plane = vtkPlane::New();
-      plane->SetNormal(0.0, 1.0, 0.0);
-      plane->SetOrigin(40, 19.5, 19.5);
-
-      //Cut
-      vtkSmartPointer<vtkCutter> planeCut = vtkCutter::New();
-      planeCut->SetInput(ugrid);
-      planeCut->SetCutFunction(plane);
-      planeCut->Update();
-
-      VTK_CREATE(vtkDataSetMapper, umapper);
-      //umapper->SetInput(planeCut->GetOutput());
-      umapper->SetInput(ugrid);
-
-      umapper->SetScalarModeToUsePointFieldData();
-      umapper->SetColorModeToMapScalars();
-      umapper->ScalarVisibilityOn();
-      double range[2];
-      //planeCut->GetOutput()->GetPointData()->GetArray("Vx")->GetRange(range);
-      ugrid->GetPointData()->GetArray("Vx")->GetRange(range);
-      umapper->SetScalarRange(range);
-      umapper->SelectColorArray("Vx");
-
-      VTK_CREATE(vtkActor, uactor);
-      uactor->SetMapper(umapper);
-
-      VTK_CREATE(vtkRenderer, ren);
-      ren->AddActor(uactor);
-      ren->SetBackground( 0.1, 0.2, 0.4 );
-
-      VTK_CREATE(vtkRenderWindow, renWin);
-      renWin->SetSize(1024,800);
-      renWin->AddRenderer(ren);
-
-      //while (true)
-      //{
-      //   if (!comm->Receive(&step, 1, 1, 11))
-      //   {
-      //      cerr << "Server error: Error receiving data." << endl;
-      //      CleanUp(comm, contr);
-      //      return;
-      //   }
-
-      //   cout << "step: "<<step<<"\n";
-
-      //   if (!comm->Receive(ugrid, 1, 9))
-      //   {
-      //      cerr << "Client error: Error receiving data." << endl;
-      //      CleanUp(comm, contr);
-      //      return;
-      //   }
-
-      //   //writer->Update();
-      //   
-      //   planeCut->Update();
-      //   planeCut->GetOutput()->GetPointData()->GetArray("Vx")->GetRange(range);
-      //   umapper->SetScalarRange(range);
-      //   umapper->Update();
-      //   renWin->Render();
-      //}
-
-      boost::thread t(boost::bind( &receive, ugrid, umapper,renWin));
-
-      vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
-      iren->SetRenderWindow(renWin);
-
-      vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
-      iren->SetInteractorStyle(style);
-
-      iren->Initialize();
-      iren->Start();
-
-      iren->Delete();
-      style->Delete();
-
-      CleanUp(comm, contr);
-
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   server();
-}
-
diff --git a/apps/cpu/levels/levels.cpp b/apps/cpu/levels/levels.cpp
index 10672abe42441f69e9536fb78e54efb01503264e..36061c54f6787f48de9eff0a4ae93b30f39960a9 100644
--- a/apps/cpu/levels/levels.cpp
+++ b/apps/cpu/levels/levels.cpp
@@ -33,13 +33,13 @@ void run(string configname)
       vector<int> blockNx = config.getVector<int>("blockNx");
       double radius = config.getValue<double>("radius");
 
-      //LBMReal radius = 4;
-      LBMReal uLB = 0.1;
-      LBMReal Re = 1;
-      LBMReal rhoLB = 0.0;
-      //LBMReal nuLB = (uLB*2.0*radius)/Re;
-      //LBMReal nuLB = (uLB*L2)/Re;
-      LBMReal nuLB = 0.168666666667/100;
+      //real radius = 4;
+      real uLB = 0.1;
+      real Re = 1;
+      real rhoLB = 0.0;
+      //real nuLB = (uLB*2.0*radius)/Re;
+      //real nuLB = (uLB*L2)/Re;
+      real nuLB = 0.168666666667/100;
 
       double dp_LB = 1e-6;
       double rhoLBinflow = dp_LB*3.0;
@@ -244,7 +244,7 @@ void run(string configname)
             UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes");
          }
 
-         SPtr<LBMKernel> kernel(new IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL));
+         SPtr<LBMKernel> kernel(new InK15CompressibleNavierStokes(blocknx1, blocknx2, blocknx3, InK15CompressibleNavierStokes::NORMAL));
 
          SPtr<BCProcessor> bcProcessor(new BCProcessor());
 
diff --git a/apps/cpu/micropart/CMakeLists.txt b/apps/cpu/micropart/CMakeLists.txt
deleted file mode 100644
index 09ebee3c8a5bde68b98a6ac6fcde15b747e28a10..0000000000000000000000000000000000000000
--- a/apps/cpu/micropart/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(micropart)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(mcpart BINARY)
diff --git a/apps/cpu/micropart/mcpart.cpp b/apps/cpu/micropart/mcpart.cpp
deleted file mode 100644
index 1003102e83bb5e221eeb6db3749652ef481fdb98..0000000000000000000000000000000000000000
--- a/apps/cpu/micropart/mcpart.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "micropartTestQs3.hpp"
-//#include "micropartSetup1.hpp"
-//#include "micropartSetup2.hpp"
-//#include "orifice.hpp"
-
-int main(int argc, char* argv[])
-{
-   micropartTestQs3(argv[1]);
-   //runSetup1(argv[1]);
-   //runSetup2(argv[1]);
-   //orifice(argv[1]);
-   return 0;
-}
-
diff --git a/apps/cpu/micropart/micropartSetup1.hpp b/apps/cpu/micropart/micropartSetup1.hpp
deleted file mode 100644
index 843ec702cf017c04f6ed68cba306dfb211d95f49..0000000000000000000000000000000000000000
--- a/apps/cpu/micropart/micropartSetup1.hpp
+++ /dev/null
@@ -1,451 +0,0 @@
-#include <iostream>
-#include <string>
-#include <map>
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "RatioBlockVisitor.h"
-#include "RatioSmoothBlockVisitor.h"
-#include "OverlapBlockVisitor.h"
-#include "SetInterpolationDirsBlockVisitor.h"
-#include "geometry3d/GbSystem3D.h"
-#include "geometry3d/GbCuboid3D.h"
-#include "geometry3d/GbCylinder3D.h"
-#include "geometry3d/GbSphere3D.h"
-#include "BlocksPostprocessor.h"
-#include "Grid3D.h"
-#include "Patch3D.h"
-#include "Patch3DSystem.h"
-#include "Block3D.h"
-#include "LBMKernelETD3Q27Cascaded.h"
-#include "LBMKernelETD3Q27BGK.h"
-#include "CalculationManager.h" 
-#include "D3Q27SetConnectorsBlockVisitor.h" 
-#include "D3Q27ETInitDistributionsBlockVisitor.h"
-#include "D3Q27Interactor.h"
-#include "D3Q27NoSlipBCAdapter.h"
-#include "D3Q27VelocityBCAdapter.h"
-#include "D3Q27DensityBCAdapter.h"
-#include "SimulationParameters.h"
-#include "Communicator.h"
-#include "MPICommunicator.h"
-#include "SimpleGeometricPartitioner.h"
-#include "D3Q27MacroscopicQuantitiesPostprocessor.h"
-#include "D3Q27ETBCProcessor.h"
-#include "D3Q27TriFaceMeshInteractor.h"
-#include "ConfigFileReader.h"
-#include "StringUtil.hpp"
-#include "D3Q27PressureDifferencePostprocessor.h"
-#include "D3Q27IntegrateValuesHelper.h"
-#include "LBMUnitConverter.h"
-#include "NUPSCounterPostprocessor.h"
-#include "PQueuePartitioningGridVisitor.h"
-#include "SetKernelBlockVisitor.h"
-#include "GenBlocksGridVisitor.h"
-#include "D3Q27PathLinePostprocessor.h"
-#include "D3Q27SetUndefinedNodesBlockVisitor.h"
-   //
-#include "basics/writer/WbWriterVtkXmlBinary.h"
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include "geometry3d/creator/GbTriFaceMesh3DCreator.h"
-#include "geometry3d/GbTriFaceMesh3D.h"
-#include "D3Q27System.h"
-#include <basics/transmitter/TbTransmitterMpiPool.h>
-#include "MathUtil.hpp"
-#include "D3Q27OffsetInterpolationProcessor.h"
-#include "SolidBlocksHelper.h"
-#include "MetisPartitioningGridVisitor.h"
-#include "RestartPostprocessor.h"
-#include "LBMKernelETD3Q27CCLB.h"
-#include "D3Q27IncompressibleOffsetInterpolationProcessor.h"
-
-using namespace std;
-
-void runSetup1(const char *cstr)
-{
-   try
-   {
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-      int numprocs = comm->getNumberOfProcesses();
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname; 
-      double availMem = 0;
-      string geoFile;
-      int numOfThreads = 1;
-
-      if(machine == "BOMBADIL") 
-      {
-         pathname = "c:/temp/micropart";
-         availMem = 3.0e9;
-         //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl";
-         //geoFile = "c:/Data/micropart/ktoolcav.stl";
-         //geoFile = "c:/Data/micropart/boxN.stl";
-         //geoFile = "c:/Data/bananas/Banana_boxD.stl";
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         pathname = "/work/koskuche/scratch/micropart_s1";
-         //pathname = "/work/koskuche/scratch/micropart2";
-         availMem = 12.0e9;
-         geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl";
-
-         numOfThreads = 1;
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      UbLog::reportingLevel() = logINFO;
-      //UbLog::reportingLevel() = logDEBUG1;
-
-      int nodePerBlockX1 = 8; //Anzahl an Knoten pro Block
-      int nodePerBlockX2 = 8;//(int)16;
-      int nodePerBlockX3 = 8;//(int)16;
-
-      double bH = nodePerBlockX1;    //gewuenschte Rand- und Blockbreite
-
-      //Simulation Parameters
-
-      double sf = 1.0;
-      double endTime = 160001*sf;
-      //length [m]
-      double lSI = 0.067;
-      //length [LB]
-      double lLB = 30;
-
-      double dx = 0.0134;//lSI/lLB;
-
-      double left_offset = 0.5;
-      double right_offset  = 0.5;//2*0.5
-      double front_offset = 0.15;
-      double back_offset  = 0.15;
-      double top_offset = 0.0;
-      double bottom_offset  = 0.07;
-
-      LBMReal vLB = 0.016103/sf;
-      LBMReal Re;
-      LBMReal rhoLB = 0.0;
-      LBMReal nueLB = 0.0000249/sf;//(vLB*lLB)/Re;
-      Re = (vLB*(0.303/dx))/nueLB;
-      const int baseLevel = 0;
-      const int refineLevel = 5;
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      //////////////////////////////////////////////////////////////////////////
-      GbObject3DPtr refineCube1(new  GbCuboid3D(-0.2222890,-0.52993, -0.141754, 0.578916113,0.6089970,0.0446053));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCube2(new  GbCuboid3D(-0.16,-0.05, -0.141754, 0.2,0.05,0.0446053));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance());
-      //////////////////////////////////////////////////////////////////////////
-
-      Grid3DPtr grid(new Grid3D());
-
-      UbSchedulerPtr rSch(new UbScheduler());
-      rSch->addSchedule(20000, 20000, endTime-1);
-      RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY));
-
-      std::string opt;
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if/*(cstr== NULL)*/(cstr!= NULL)
-      {
-         opt = std::string(cstr);
-
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-
-         grid = rp->restart(UbSystem::stringTo<int>(opt));
-         rp->reconnect();
-
-         if(myid ==0) UBLOG(logINFO,"TimeStep = " <<grid->getTimeStep());
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition
-         //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         //grid->accept(pqPartVisitor);
-      }
-      else
-      {
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"L = " <<lLB );
-            UBLOG(logINFO,"v = " <<vLB );
-            UBLOG(logINFO,"rho = " <<rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-            UBLOG(logINFO,"Re = " << Re );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-
-         ////////////////////////////////////////////////////////////////////////
-         //Grid
-         //////////////////////////////////////////////////////////////////////////
-         grid->setDeltaX(dx);
-         grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2);
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Geometrie
-         ////////////////////////////////////////////////////////////////////////////
-         //GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo"));
-
-         //if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance());
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Randgeometrien erstellen
-         ////////////////////////////////////////////////////////////////////////////
-         
-         GbCuboid3DPtr plate1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 ));
-
-         GbCuboid3DPtr plate2  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 ));
-         GbCuboid3DPtr plate3  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 ));
-
-         GbCuboid3DPtr plate1_1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 ));
-         GbCuboid3DPtr plate1_2  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 ));
-         //GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0  ));
-         GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -9.831e-2, 7.5, 2.515e-1, 0.06  ));
-         GbCuboid3DPtr plate1_4  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 ));
-
-         GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 ));
-         GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 ));
-
-         if(myid == 0)
-         {
-            GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance());
-
-            GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance());
-
-            GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance());
-         }
-
-         double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*1.5;
-
-         GbObject3DPtr gridCube(new GbCuboid3D(plate1->getX1Minimum()-shiftForMG, plate1->getX2Minimum()-shiftForMG, plate1->getX3Minimum()-shiftForMG,
-                                                plate1->getX1Maximum()+shiftForMG, 
-                                                plate1->getX2Maximum()+shiftForMG, 
-                                                plate1->getX3Maximum()+shiftForMG));
-
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-
-         if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-            RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, baseLevel, refineLevel-3);
-            grid->accept(refVisitor1);
-
-            RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, baseLevel, refineLevel-1);
-            grid->accept(refVisitor2);
-
-            RatioBlockVisitor ratioVisitor(refineLevel);
-            grid->accept(ratioVisitor);
-
-            RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-            grid->accept(ratioSmoothVisitor);
-
-            OverlapBlockVisitor overlapVisitor(refineLevel);
-            grid->accept(overlapVisitor);
-
-            std::vector<int> dirs;
-            D3Q27System::getLBMDirections(dirs);
-            SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-            grid->accept(interDirsVisitor);
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         //INTERAKTOREN SETZEN (=Randbedingungen)
-         //////////////////////////////////////////////////////////////////////////
-         //oben/unten = Haftrand
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-         //D3Q27TriFaceMeshInteractorPtr geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::SOLID));
-         //geoInt->setUseHalfSpaceCheck(true);
-         //geoInt->setRegardPointInObjectTest(true);
-
-         //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID));
-         D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID));
-
-         D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID));
-
-         //links: geschwindigkeits-einfluss
-         //Velocity-BC
-         //////////////////////////////////////////////////////////////////////////
-         mu::Parser fct;
-         fct.DefineConst("vx1"  , vLB*9.0/4.0);
-         fct = Utilities::getDuctParaboloidX(plate1->getX2Centroid(), plate1->getX2Maximum() - plate1->getX2Minimum(), plate1->getX3Centroid(), plate1->getX3Minimum() - plate1->getX3Maximum(), vLB*9.0/4.0);
-         //fct.SetExpr("vx1");
-         //////////////////////////////////////////////////////////////////////////
-         //////////////////////////////////////////////////////////////////////////
-         D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST));
-        // velBCAdapter->setSecondaryBcOption(2);
-         D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //rechts: druckrand
-         //Density-BC
-         //fuer Kompressibles Modell  rho = 1.0
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-         denBCAdapter->setSecondaryBcOption(1);
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         //MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelIntersected, D3Q27System::B, true, numOfThreads);
-         grid->accept( metisVisitor );
-
-         SolidBlocksHelper sd(grid, comm);
-         //sd.addInteractor(geoInt);
-         sd.addInteractor(inflowInt);
-         sd.addInteractor(outflowInt);
-         sd.addInteractor(plate1_1Int);
-         sd.addInteractor(plate1_2Int);
-         sd.addInteractor(plate1_3Int);
-         sd.addInteractor(plate1_4Int);
-         sd.addInteractor(plate2Int);
-         sd.addInteractor(plate3Int);
-         sd.deleteSolidBlocks();     
-
-         grid->accept( metisVisitor );
-
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl);
-         unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3);
-         double needMemAll  = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }  
-
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2));
-         //option = 0 - ohne param., option = 1 - mit param.
-         int option = 0;
-         LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2, option));
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         //canal
-         //grid->addAndInitInteractor(geoInt);
-         grid->addAndInitInteractor(plate1_1Int);
-         grid->addAndInitInteractor(plate1_2Int);
-         grid->addAndInitInteractor(plate1_3Int);
-         grid->addAndInitInteractor(plate1_4Int);
-         grid->addAndInitInteractor(plate2Int);
-         grid->addAndInitInteractor(plate3Int);
-
-         //inflow
-         grid->addAndInitInteractor(inflowInt);
-
-         //outflow
-         grid->addAndInitInteractor(outflowInt);
-
-         //////////////////////////////////////////////////////////////////////////
-         //connectoren setzen:
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         //////////////////////////////////////////////////////////////////////////
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-         //////////////////////////////////////////////////////////////////////////
-         //Stroemungsfeld initialisieren
-         //////////////////////////////////////////////////////////////////////////
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0
-         //initVisitor.setVx1(0.0); 
-         grid->accept(initVisitor);
-
-         //if(myid == 0)
-         //{
-         //   //Abst�nde "q" als Linien rausschreiben
-         //   std::vector< UbTupleFloat3 > nodes;
-         //   std::vector< UbTupleInt2 >   lines;
-         //   geoInt->addQsLineSet(nodes, lines);
-         //   WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines);
-         //}
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");
-
-      }
-      //////////////////////////////////////////////////////////////////////////
-      //Set Postprozessors
-      //////////////////////////////////////////////////////////////////////////
-      {
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv,  comm, true);
-         grid->doPostProcess(0);
-      }
-
-      UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double outTime = 2000;
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      stepSch->addSchedule(100, 100, 100);
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv,  comm);
-      //////////////////////////////////////////////////////////////////////////
-      //PathLine
-      //UbSchedulerPtr plSch(new UbScheduler(10, 1500));
-      //D3Q27PathLinePostprocessor pathLine(grid, pathname + "/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm, -0.3285474538, 0.09692341,-0.0376166666, nueLB, iProcessor);
-      //////////////////////////////////////////////////////////////////////////
-      //Simulation
-      //////////////////////////////////////////////////////////////////////////
-
-      UbSchedulerPtr visSch(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
diff --git a/apps/cpu/micropart/micropartSetup2.hpp b/apps/cpu/micropart/micropartSetup2.hpp
deleted file mode 100644
index 80eff1378c7c6a5cb8e4af6616d48cec286afd93..0000000000000000000000000000000000000000
--- a/apps/cpu/micropart/micropartSetup2.hpp
+++ /dev/null
@@ -1,444 +0,0 @@
-#include <iostream>
-#include <string>
-#include <map>
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "RatioBlockVisitor.h"
-#include "RatioSmoothBlockVisitor.h"
-#include "OverlapBlockVisitor.h"
-#include "SetInterpolationDirsBlockVisitor.h"
-#include "geometry3d/GbSystem3D.h"
-#include "geometry3d/GbCuboid3D.h"
-#include "geometry3d/GbCylinder3D.h"
-#include "geometry3d/GbSphere3D.h"
-#include "BlocksPostprocessor.h"
-#include "Grid3D.h"
-#include "Patch3D.h"
-#include "Patch3DSystem.h"
-#include "Block3D.h"
-#include "LBMKernelETD3Q27Cascaded.h"
-#include "LBMKernelETD3Q27BGK.h"
-#include "CalculationManager.h" 
-#include "D3Q27SetConnectorsBlockVisitor.h" 
-#include "D3Q27ETInitDistributionsBlockVisitor.h"
-#include "D3Q27Interactor.h"
-#include "D3Q27NoSlipBCAdapter.h"
-#include "D3Q27VelocityBCAdapter.h"
-#include "D3Q27DensityBCAdapter.h"
-#include "SimulationParameters.h"
-#include "Communicator.h"
-#include "MPICommunicator.h"
-#include "SimpleGeometricPartitioner.h"
-#include "D3Q27MacroscopicQuantitiesPostprocessor.h"
-#include "D3Q27ETBCProcessor.h"
-#include "D3Q27TriFaceMeshInteractor.h"
-#include "ConfigFileReader.h"
-#include "StringUtil.hpp"
-#include "D3Q27PressureDifferencePostprocessor.h"
-#include "D3Q27IntegrateValuesHelper.h"
-#include "LBMUnitConverter.h"
-#include "NUPSCounterPostprocessor.h"
-#include "PQueuePartitioningGridVisitor.h"
-#include "SetKernelBlockVisitor.h"
-#include "GenBlocksGridVisitor.h"
-#include "D3Q27PathLinePostprocessor.h"
-#include "D3Q27SetUndefinedNodesBlockVisitor.h"
-   //
-#include "basics/writer/WbWriterVtkXmlBinary.h"
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include "geometry3d/creator/GbTriFaceMesh3DCreator.h"
-#include "geometry3d/GbTriFaceMesh3D.h"
-#include "D3Q27System.h"
-#include <basics/transmitter/TbTransmitterMpiPool.h>
-#include "MathUtil.hpp"
-#include "D3Q27OffsetInterpolationProcessor.h"
-#include "SolidBlocksHelper.h"
-#include "MetisPartitioningGridVisitor.h"
-#include "RestartPostprocessor.h"
-#include "D3Q27IncompressibleOffsetInterpolationProcessor.h"
-#include "LBMKernelETD3Q27CCLB.h"
-
-using namespace std;
-
-void runSetup2(const char *cstr)
-{
-   try
-   {
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-      int numprocs = comm->getNumberOfProcesses();
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname; 
-      double availMem = 0;
-      string geoFile;
-      int numOfThreads = 1;
-
-      if(machine == "BOMBADIL") 
-      {
-         pathname = "c:/temp/micropart";
-         availMem = 3.0e9;
-         //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl";
-         //geoFile = "c:/Data/micropart/ktoolcav.stl";
-         //geoFile = "c:/Data/micropart/boxN.stl";
-         //geoFile = "c:/Data/bananas/Banana_boxD.stl";
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         pathname = "/work/koskuche/scratch/micropart2";
-         availMem = 12.0e9;
-         //geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl";
-
-         numOfThreads = 1;
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      UbLog::reportingLevel() = logINFO;
-      //UbLog::reportingLevel() = logDEBUG1;
-
-      int nodePerBlockX1 = 16; //Anzahl an Knoten pro Block
-      int nodePerBlockX2 = 16;//(int)16;
-      int nodePerBlockX3 = 16;//(int)16;
-
-      double bH = nodePerBlockX1;    //gewuenschte Rand- und Blockbreite
-
-      //Simulation Parameters
-
-      //length [m]
-      double lSI = 0.067;
-      //length [LB]
-      double lLB = 30;
-
-      double dx = 0.0134*0.5;//lSI/lLB;
-
-      double left_offset = 0.5;
-      double right_offset  = 0.5;//2*0.5
-      double front_offset = 0.15;
-      double back_offset  = 0.15;
-      double top_offset = 0.0;
-      double bottom_offset  = 0.07;
-
-      LBMReal vLB = 0.016103;
-      LBMReal Re;
-      LBMReal rhoLB = 0.0;
-      LBMReal nueLB = 0.0000249*2.0;//(vLB*lLB)/Re;
-      Re = (vLB*(0.303/dx))/nueLB;
-      const int baseLevel = 0;
-      const int refineLevel = 5;
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      //////////////////////////////////////////////////////////////////////////
-      GbObject3DPtr refineCube1(new  GbCuboid3D(-0.2222890,-0.52993, -0.141754, 0.578916113,0.6089970,0.0446053));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCube2(new  GbCuboid3D(-0.16,-0.05, -0.141754, 0.2,0.05,0.0446053));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance());
-      //////////////////////////////////////////////////////////////////////////
-
-      Grid3DPtr grid(new Grid3D());
-
-      UbSchedulerPtr rSch(new UbScheduler(1000, 1000));
-      //RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY));
-
-      std::string opt;
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if/*(cstr== NULL)*/(cstr!= NULL)
-      {
-         opt = std::string(cstr);
-
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-
-         //grid = rp->restart(UbSystem::stringTo<int>(opt));
-         //rp->reconnect();
-         grid->setTimeStep(UbSystem::stringTo<int>(opt));
-
-         if(myid ==0) UBLOG(logINFO,"TimeStep = " <<grid->getTimeStep());
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-      }
-      else
-      {
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"L = " <<lLB );
-            UBLOG(logINFO,"v = " <<vLB );
-            UBLOG(logINFO,"rho = " <<rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-            UBLOG(logINFO,"Re = " << Re );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-
-         ////////////////////////////////////////////////////////////////////////
-         //Grid
-         //////////////////////////////////////////////////////////////////////////
-         grid->setDeltaX(dx);
-         grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2);
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Geometrie
-         ////////////////////////////////////////////////////////////////////////////
-         //GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo"));
-
-         //if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance());
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Randgeometrien erstellen
-         ////////////////////////////////////////////////////////////////////////////
-         double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0;
-         GbCuboid3DPtr plate1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 ));
-
-         GbCuboid3DPtr plate2  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 ));
-         GbCuboid3DPtr plate3  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 ));
-
-         GbCuboid3DPtr plate1_1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 ));
-         GbCuboid3DPtr plate1_2  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 ));
-         GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0  ));
-         GbCuboid3DPtr plate1_4  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 ));
-
-         GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 ));
-         GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 ));
-
-         if(myid == 0)
-         {
-            GbSystem3D::writeGeoObject(plate1.get(),pathname+"/geo/plate1", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance());
-
-            GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance());
-
-            GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance());
-         }
-
-         GbObject3DPtr gridCube(new GbCuboid3D(plate1->getX1Minimum()-shiftForMG, plate1->getX2Minimum()-shiftForMG, plate1->getX3Minimum()-shiftForMG,
-                                                plate1->getX1Maximum()+shiftForMG, 
-                                                plate1->getX2Maximum()+shiftForMG, 
-                                                plate1->getX3Maximum()+shiftForMG));
-
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-
-         if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-            RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, baseLevel, refineLevel-3);
-            grid->accept(refVisitor1);
-
-            RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, baseLevel, refineLevel-1);
-            grid->accept(refVisitor2);
-
-            RatioBlockVisitor ratioVisitor(refineLevel);
-            grid->accept(ratioVisitor);
-
-            RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-            grid->accept(ratioSmoothVisitor);
-
-            OverlapBlockVisitor overlapVisitor(refineLevel);
-            grid->accept(overlapVisitor);
-
-            std::vector<int> dirs;
-            D3Q27System::getLBMDirections(dirs);
-            SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-            grid->accept(interDirsVisitor);
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         //INTERAKTOREN SETZEN (=Randbedingungen)
-         //////////////////////////////////////////////////////////////////////////
-         //oben/unten = Haftrand
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-         //D3Q27TriFaceMeshInteractorPtr geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::SOLID));
-         //geoInt->setUseHalfSpaceCheck(true);
-         //geoInt->setRegardPointInObjectTest(true);
-
-         //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID));
-         D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID));
-
-         D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID));
-         D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID));
-
-         //links: geschwindigkeits-einfluss
-         //Velocity-BC
-         //////////////////////////////////////////////////////////////////////////
-         mu::Parser fct;
-         fct.DefineConst("vx1"  , vLB*9.0/4.0 );
-         fct = Utilities::getDuctParaboloidX(plate1->getX2Centroid(), plate1->getX2Maximum() - plate1->getX2Minimum(), plate1->getX3Centroid(), plate1->getX3Minimum() - plate1->getX3Maximum(), vLB*9.0/4.0);
-         //fct.SetExpr("vx1");
-         //////////////////////////////////////////////////////////////////////////
-
-         //////////////////////////////////////////////////////////////////////////
-         D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST));
-         velBCAdapter->setSecondaryBcOption(2);
-         D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //rechts: druckrand
-         //Density-BC
-         //fuer Kompressibles Modell  rho = 1.0
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-         denBCAdapter->setSecondaryBcOption(1);
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         grid->accept( metisVisitor );
-
-         SolidBlocksHelper sd(grid, comm);
-         //sd.addInteractor(geoInt);
-         sd.addInteractor(inflowInt);
-         sd.addInteractor(outflowInt);
-         sd.addInteractor(plate1_1Int);
-         sd.addInteractor(plate1_2Int);
-         sd.addInteractor(plate1_3Int);
-         sd.addInteractor(plate1_4Int);
-         sd.addInteractor(plate2Int);
-         sd.addInteractor(plate3Int);
-         sd.deleteSolidBlocks();     
-
-         grid->accept( metisVisitor );
-
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl);
-         unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3);
-         double needMemAll  = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }  
-
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2));
-         LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2));
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         //canal
-         //grid->addAndInitInteractor(geoInt);
-         grid->addAndInitInteractor(plate1_1Int);
-         grid->addAndInitInteractor(plate1_2Int);
-         grid->addAndInitInteractor(plate1_3Int);
-         grid->addAndInitInteractor(plate1_4Int);
-         grid->addAndInitInteractor(plate2Int);
-         grid->addAndInitInteractor(plate3Int);
-
-         //inflow
-         grid->addAndInitInteractor(inflowInt);
-
-         //outflow
-         grid->addAndInitInteractor(outflowInt);
-
-         //////////////////////////////////////////////////////////////////////////
-         //connectoren setzen:
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         //////////////////////////////////////////////////////////////////////////
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-         //////////////////////////////////////////////////////////////////////////
-         //Stroemungsfeld initialisieren
-         //////////////////////////////////////////////////////////////////////////
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0
-         //initVisitor.setVx1(0.0); 
-         grid->accept(initVisitor);
-
-         //if(myid == 0)
-         //{
-         //   //Abst�nde "q" als Linien rausschreiben
-         //   std::vector< UbTupleFloat3 > nodes;
-         //   std::vector< UbTupleInt2 >   lines;
-         //   geoInt->addQsLineSet(nodes, lines);
-         //   WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines);
-         //}
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");
-
-      }
-      //////////////////////////////////////////////////////////////////////////
-      //Set Postprozessors
-      //////////////////////////////////////////////////////////////////////////
-      {
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv,  comm, true);
-         grid->doPostProcess(0);
-      }
-
-      UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double outTime = 2000;
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv,  comm);
-      //////////////////////////////////////////////////////////////////////////
-      //PathLine
-      //UbSchedulerPtr plSch(new UbScheduler(10, 1500));
-      //D3Q27PathLinePostprocessor pathLine(grid, pathname + "/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm, -0.3285474538, 0.09692341,-0.0376166666, nueLB, iProcessor);
-      //////////////////////////////////////////////////////////////////////////
-      //Simulation
-      //////////////////////////////////////////////////////////////////////////
-      double endTime = 1000000;
-      UbSchedulerPtr visSch(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
diff --git a/apps/cpu/micropart/micropartTestQs.hpp b/apps/cpu/micropart/micropartTestQs.hpp
deleted file mode 100644
index 0ee098948cfee79111ced71a403aac28c0cc3f5b..0000000000000000000000000000000000000000
--- a/apps/cpu/micropart/micropartTestQs.hpp
+++ /dev/null
@@ -1,380 +0,0 @@
-#include <iostream>
-#include <string>
-#include <map>
-#include <vfluids.h>
-
-
-using namespace std;
-
-void micropartTestQs(const char *cstr)
-{
-   try
-   {
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-      int numprocs = comm->getNumberOfProcesses();
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname; 
-      double availMem = 0;
-      string geoFile;
-      int numOfThreads = 3;
-
-      if(machine == "BOMBADIL") 
-      {
-         pathname = "c:/temp/micropart";
-         availMem = 3.0e9;
-         //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl";
-         geoFile = "d:/Data/micropart/E0019B_mit_Radien.stl";
-         //geoFile = "c:/Data/micropart/boxN.stl";
-         //geoFile = "c:/Data/bananas/Banana_boxD.stl";
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         pathname = "/work/koskuche/scratch/micropart3";
-         //pathname = "/work/koskuche/scratch/micropart2";
-         availMem = 12.0e9;
-         geoFile = "/home/koskuche/data/micropart/E0019B_mit_Radien_Inv_new_Box.stl";
-
-         numOfThreads = 8;
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      UbLog::reportingLevel() = logINFO;
-      //UbLog::reportingLevel() = logDEBUG1;
-
-      int nodePerBlockX1 = 8; //Anzahl an Knoten pro Block
-      int nodePerBlockX2 = 8;//(int)16;
-      int nodePerBlockX3 = 8;//(int)16;
-
-      double bH = nodePerBlockX1;    //gewuenschte Rand- und Blockbreite
-
-      //Simulation Parameters
-
-      //length [m]
-      double lSI = 0.067;
-      //length [LB]
-      double lLB = 30;
-
-      double dx = 5;//0.0134;//lSI/lLB;
-
-      double left_offset = 0.5;
-      double right_offset  = 0.5;//2*0.5
-      double front_offset = 0.15;
-      double back_offset  = 0.15;
-      double top_offset = 0.0;
-      double bottom_offset  = 0.07;
-
-      LBMReal vLB = 0.016103;
-      LBMReal Re;
-      LBMReal rhoLB = 0.0;
-      LBMReal nueLB = 0.0000249;//(vLB*lLB)/Re;
-      Re = (vLB*(0.303/dx))/nueLB;
-      const int baseLevel = 0;
-      const int refineLevel = 2;
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      double ft=1000.0;
-      //////////////////////////////////////////////////////////////////////////
-      GbObject3DPtr refineCube1(new  GbCuboid3D(-0.2222890*ft,-0.52993*ft, -0.141754*ft, /*0.578916113*ft*/275.0,0.6089970*ft,0.0446053*ft));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCube2(new  GbCuboid3D(-0.16*ft-10.0,-0.05*ft, -0.141754*ft, 0.2*ft+10.0,0.05*ft,0.0446053*ft));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance());
-      //////////////////////////////////////////////////////////////////////////
-
-      Grid3DPtr grid(new Grid3D());
-
-      UbSchedulerPtr rSch(new UbScheduler(1000, 1000));
-      RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY));
-
-      std::string opt;
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if/*(cstr== NULL)*/(cstr!= NULL)
-      {
-         opt = std::string(cstr);
-
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-
-         grid = rp->restart(UbSystem::stringTo<int>(opt));
-         rp->reconnect(grid);
-         grid->setTimeStep(UbSystem::stringTo<int>(opt));
-
-         if(myid ==0) UBLOG(logINFO,"TimeStep = " <<grid->getTimeStep());
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-      }
-      else
-      {
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"L = " <<lLB );
-            UBLOG(logINFO,"v = " <<vLB );
-            UBLOG(logINFO,"rho = " <<rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-            UBLOG(logINFO,"Re = " << Re );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-
-         ////////////////////////////////////////////////////////////////////////
-         //Grid
-         //////////////////////////////////////////////////////////////////////////
-         grid->setDeltaX(dx);
-         grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2);
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Geometrie
-         ////////////////////////////////////////////////////////////////////////////
-         UBLOG(logINFO,"Read geometry: start");
-         GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo"));
-         UBLOG(logINFO,"Read geometry: end");
-         if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance());
-
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Randgeometrien erstellen
-         ////////////////////////////////////////////////////////////////////////////
-         double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0;
-
-         GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D(geo->getX1Minimum()+9100.0,  geo->getX2Minimum()-200.0, geo->getX3Minimum()-200.0,
-                                                               geo->getX1Minimum()+10000.0, geo->getX2Maximum()+200.0, geo->getX3Maximum()+200.0));
-         GbCuboid3DPtr outflow  = GbCuboid3DPtr( new GbCuboid3D(geo->getX1Maximum()-10000.0,  geo->getX2Minimum()-200.0, geo->getX3Minimum()-200.0,
-                                                                geo->getX1Maximum()-9100.0, geo->getX2Maximum()+200.0, geo->getX3Maximum()+200.0));
-
-         if(myid == 0)
-         {
-            GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance());
-         }
-
-         //GbObject3DPtr gridCube(new GbCuboid3D(geo->getX1Minimum()-(double)nodePerBlockX1*dx, geo->getX2Minimum()-(double)nodePerBlockX1*dx, geo->getX3Minimum()-(double)nodePerBlockX1*dx,
-         //   geo->getX1Maximum()+(double)nodePerBlockX1*dx, 
-         //   geo->getX2Maximum()+(double)nodePerBlockX1*dx, 
-         //   geo->getX3Maximum()+(double)nodePerBlockX1*dx));
-
-
-         shiftForMG=0.0;
-         GbObject3DPtr gridCube(new GbCuboid3D(geo->getX1Minimum()+10000.0, geo->getX2Minimum()-shiftForMG, -0.141754*ft/2.0/*geo->getX3Minimum()-shiftForMG*/,
-            geo->getX1Maximum()-10000.0, 
-            geo->getX2Maximum()+shiftForMG, 
-            geo->getX3Maximum()+shiftForMG));
-
-         if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-
-         if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-            //RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, baseLevel, refineLevel-3);
-            //grid->accept(refVisitor1);
-
-            RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube1, refineLevel);
-            grid->accept(refVisitor2);
-
-            RatioBlockVisitor ratioVisitor(refineLevel);
-            grid->accept(ratioVisitor);
-
-            RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-            grid->accept(ratioSmoothVisitor);
-
-            OverlapBlockVisitor overlapVisitor(refineLevel);
-            grid->accept(overlapVisitor);
-
-            std::vector<int> dirs;
-            D3Q27System::getLBMDirections(dirs);
-            SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-            grid->accept(interDirsVisitor);
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         //INTERAKTOREN SETZEN (=Randbedingungen)
-         //////////////////////////////////////////////////////////////////////////
-         //oben/unten = Haftrand
-         int bbOption = 2; //0=simple Bounce Back, 1=quadr. BB, 2=quadr. BB 2nd choice 
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-         D3Q27TriFaceMeshInteractorPtr geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::INVERSESOLID));
-         geoInt->setUseHalfSpaceCheck(true);
-         geoInt->setRegardPointInObjectTest(true);
-
-         //links: geschwindigkeits-einfluss
-         //Velocity-BC
-         //////////////////////////////////////////////////////////////////////////
-         mu::Parser fct;
-         fct.DefineConst("vx1"  , vLB           );
-         //fct = MathUtil::getDuctParaboloidX(plate1->getX2Centroid(), plate1->getX2Maximum() - plate1->getX2Minimum(), plate1->getX3Centroid(), plate1->getX3Minimum() - plate1->getX3Maximum(), vLB*9.0/4.0);
-         fct.SetExpr("vx1");
-         //////////////////////////////////////////////////////////////////////////
-         //////////////////////////////////////////////////////////////////////////
-         D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST));
-         velBCAdapter->setSecondaryBcOption(2);
-         D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID));
-         //D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, bcObst, Interactor3D::SOLID));
-
-         //rechts: druckrand
-         //Density-BC
-         //fuer Kompressibles Modell  rho = 1.0
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27DensityBCAdapter(rhoLB)),Interactor3D::SOLID));
-         //D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, bcObst,Interactor3D::SOLID));
-
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         grid->accept( metisVisitor );
-
-         SolidBlocksHelper sd(grid, comm);
-         sd.addInteractor(geoInt);
-         sd.addInteractor(inflowInt);
-         sd.addInteractor(outflowInt);
-         sd.deleteSolidBlocks();     
-
-         grid->accept( metisVisitor );
-
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         UBLOG(logINFO,grid->getBlock(10,12,0,1)->toString());
-         vector<Block3DPtr> blocks;
-         //grid->getNeighborBlocksForDirection(D3Q27System::W,10,12,0,1,3,blocks);
-         grid->getNeighborBlocksForDirection(D3Q27System::E,4,6,0,0,2,blocks);
-         BOOST_FOREACH(Block3DPtr b, blocks)
-            UBLOG(logINFO, b->toString());
-
-
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl);
-         unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3);
-         double needMemAll  = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }  
-
-
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2));
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2, true));
-         LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2,0));
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         //canal
-         grid->addAndInitInteractor(geoInt);
-
-         //inflow
-         grid->addAndInitInteractor(inflowInt);
-
-         //outflow
-         grid->addAndInitInteractor(outflowInt);
-
-         //////////////////////////////////////////////////////////////////////////
-         //connectoren setzen:
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         //////////////////////////////////////////////////////////////////////////
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-         //////////////////////////////////////////////////////////////////////////
-         //Stroemungsfeld initialisieren
-         //////////////////////////////////////////////////////////////////////////
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0
-         //initVisitor.setVx1(0.0); 
-         grid->accept(initVisitor);
-
-         if(myid == 0)
-         {
-            //Abstände "q" als Linien rausschreiben
-            std::vector< UbTupleFloat3 > nodes;
-            std::vector< UbTupleInt2 >   lines;
-            geoInt->addQsLineSet(nodes, lines);
-            WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines);
-         }
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");
-
-      }
-      //////////////////////////////////////////////////////////////////////////
-      //Set Postprozessors
-      //////////////////////////////////////////////////////////////////////////
-      {
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv,  comm, true);
-         grid->doPostProcess(0);
-      }
-
-
-      UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double outTime = 100;
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      //visSch->addSchedule(20, 1010, 1100);
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid,visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv,  comm);
-      //////////////////////////////////////////////////////////////////////////
-      //PathLine
-      //UbSchedulerPtr plSch(new UbScheduler(10, 1500));
-      //D3Q27PathLinePostprocessor pathLine(grid, pathname + "/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm, -0.3285474538, 0.09692341,-0.0376166666, nueLB, iProcessor);
-      //////////////////////////////////////////////////////////////////////////
-      //Simulation
-      //////////////////////////////////////////////////////////////////////////
-      double endTime = 1000;
-      UbSchedulerPtr visSch1(new UbScheduler(1));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
diff --git a/apps/cpu/micropart/micropartTestQs2.hpp b/apps/cpu/micropart/micropartTestQs2.hpp
deleted file mode 100644
index ced24710a450e84c6baa6ce47c573245858fb6ee..0000000000000000000000000000000000000000
--- a/apps/cpu/micropart/micropartTestQs2.hpp
+++ /dev/null
@@ -1,592 +0,0 @@
-#include <iostream>
-#include <string>
-#include <map>
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "RatioBlockVisitor.h"
-#include "RatioSmoothBlockVisitor.h"
-#include "OverlapBlockVisitor.h"
-#include "SetInterpolationDirsBlockVisitor.h"
-#include "geometry3d/GbSystem3D.h"
-#include "geometry3d/GbCuboid3D.h"
-#include "geometry3d/GbCylinder3D.h"
-#include "geometry3d/GbSphere3D.h"
-#include "BlocksPostprocessor.h"
-#include "Grid3D.h"
-#include "Patch3D.h"
-#include "Patch3DSystem.h"
-#include "Block3D.h"
-#include "LBMKernelETD3Q27Cascaded.h"
-#include "LBMKernelETD3Q27BGK.h"
-#include "CalculationManager.h" 
-#include "D3Q27SetConnectorsBlockVisitor.h" 
-#include "D3Q27ETInitDistributionsBlockVisitor.h"
-#include "D3Q27Interactor.h"
-#include "D3Q27NoSlipBCAdapter.h"
-#include "D3Q27VelocityBCAdapter.h"
-#include "D3Q27DensityBCAdapter.h"
-#include "SimulationParameters.h"
-#include "Communicator.h"
-#include "MPICommunicator.h"
-#include "SimpleGeometricPartitioner.h"
-#include "D3Q27MacroscopicQuantitiesPostprocessor.h"
-#include "D3Q27ETBCProcessor.h"
-#include "D3Q27TriFaceMeshInteractor.h"
-#include "ConfigFileReader.h"
-#include "StringUtil.hpp"
-#include "D3Q27PressureDifferencePostprocessor.h"
-#include "D3Q27IntegrateValuesHelper.h"
-#include "LBMUnitConverter.h"
-#include "NUPSCounterPostprocessor.h"
-#include "PQueuePartitioningGridVisitor.h"
-#include "SetKernelBlockVisitor.h"
-#include "GenBlocksGridVisitor.h"
-#include "D3Q27PathLinePostprocessorMcpart.h"
-#include "D3Q27SetUndefinedNodesBlockVisitor.h"
-   //
-#include "basics/writer/WbWriterVtkXmlBinary.h"
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include "geometry3d/creator/GbTriFaceMesh3DCreator.h"
-#include "geometry3d/GbTriFaceMesh3D.h"
-#include "D3Q27System.h"
-#include <basics/transmitter/TbTransmitterMpiPool.h>
-#include "MathUtil.hpp"
-#include "D3Q27OffsetInterpolationProcessor.h"
-#include "SolidBlocksHelper.h"
-#include "MetisPartitioningGridVisitor.h"
-#include "RestartPostprocessor.h"
-#include "D3Q27IncompressibleOffsetInterpolationProcessor.h"
-#include "LBMKernelETD3Q27CCLB.h"
-#include "AverageValuesPostprocessor.h"
-#include <vfluids.h>
-using namespace std;
-
-void micropartTestQs2(const char *cstr)
-{
-   try
-   {
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-      int numprocs = comm->getNumberOfProcesses();
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname; 
-      double availMem = 0;
-      string geoFile;
-      int numOfThreads = 1;
-
-      if(machine == "EHSAN1491") 
-      {
-         pathname = "/work/ehsan/micropart";
-         availMem = 3.0e9;
-		  int numOfThreads = 1;
-         //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl";
-         //geoFile = "c:/Data/micropart/ktoolcav.stl";
-         //geoFile = "c:/Data/micropart/boxN.stl";
-        geoFile = "C:/Users/ehsan/Desktop/meshparticles/E0019B_mit_Radien.stl";
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         pathname = "/work/koskuche/scratch/mcpart/out";
-         availMem = 12.0e9/8.0;
-		  geoFile = "/work/ehsan/data/E0019B_mit_Radien.stl";
-         //geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl";
-
-         numOfThreads = 1;
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      UbLog::reportingLevel() = logINFO;
-      //UbLog::reportingLevel() = logDEBUG1;
-
-      int nodePerBlockX1 =16; //Anzahl an Knoten pro Block
-      int nodePerBlockX2 =16;//(int)16;
-      int nodePerBlockX3 =8;//8; //(int)16;
-
-      double bH = nodePerBlockX1;    //gewuenschte Rand- und Blockbreite
-
-      //Simulation Parameters
-      const int baseLevel = 0;
-      const int refineLevel =4;
-      //length [m]
-      double lSI = 219;//223.2;
-      //length [LB]
-      double lLB = 30;
-
-      double dx =lSI/lLB;
-
-      double left_offset = 10700;//*0.5;
-      double right_offset  = 107000;//0.5;//2*0.5
-      double front_offset = 750;//0.15;
-      double back_offset  = 750;//0.15;
-      double top_offset = 250;//0.0;
-      double bottom_offset  =750;// 70;//0.07;
-	  
-	   LBMReal vLB =0.00016103/5.0*sqrt(2.0);//0.00016103;
-       LBMReal Re;
-       LBMReal rhoLB = 0.0;
-       LBMReal nueLB = 0.0000249;//(vLB*lLB)/Re;
-       Re = (vLB*(500/dx))/nueLB;
-       double dp_Ph=200.0*100000;//
-	   double dp_lb=dp_Ph*0.001*(nueLB*dx)*(nueLB*dx);//nue_ph=10e-6 and dx is in micrometer
-      // LBMReal nueLB = 0.000016103;
-      // LBMReal Re=15000;
-      // LBMReal rhoLB = 0.0;
-      // LBMReal vLB =nueLB*Re/(500.0/dx);
-     // // Re = (vLB*(0.303/dx))/nueLB;
-	   // //Re = (vLB*lLB)/nueLB;
-	  
-      // LBMReal rhoWord = 1e-15;//kg/micrometre^3;//1000.0;
-	  // LBMReal nueRE = 1e6;//micromter^2/s;//0.000001;
-	  // LBMReal  vWorld=300*1e6;//micrometer/s;//nueRE*Re/ (lSI*4.0/9.0);
-	  LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-      //conv->init(lSI*1e-6,30000,rhoWord,vWorld,lLB,1.0/*rhoLB*/,vLB);
-      
-	 
- //////////////////////////////////////////////////////////////////////////
-      GbObject3DPtr refineCube1(new  GbCuboid3D(-500.0+5.0/*-354.0*/,-957.0/*-280.0*/,-684.0/* -72.0*/, 4100/*370.0*/,957.0/*354.0*/,70.0));//-530.0,-280.0, -72.0, 530.0,354.0,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCube2(new  GbCuboid3D(-230.0,-90.0, -684.0/*-72.0*/, 600,100.0,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance());
-	  
-	   GbObject3DPtr refineCube3(new  GbCuboid3D(-350.0,-957.0/*-120.0*/,-684.0/*-684.0*//* -72.0*/, 1700,957.0/*120.0*/,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube3.get(), pathname+"/geo/refineCube3", WbWriterVtkXmlASCII::getInstance());
-	  
-	   GbObject3DPtr refineCube4(new  GbCuboid3D(-170.0,-60.0, -684.0/*-72.0*/, 200,60.0,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube4.get(), pathname+"/geo/refineCube4", WbWriterVtkXmlASCII::getInstance());
-	  
-	   GbObject3DPtr refineCubeInlet(new  GbCuboid3D(-10600.0,-600.0, -600.0/*-72.0*/, -9000,600.0,60.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCubeInlet.get(), pathname+"/geo/refineCubeInlet", WbWriterVtkXmlASCII::getInstance());
-	  
-	  GbObject3DPtr refineCubeOutlet(new  GbCuboid3D(9000,-600.0, -600.0/*-72.0*/,10550.0 ,600.0,60.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCubeOutlet.get(), pathname+"/geo/refineCubeOutlet", WbWriterVtkXmlASCII::getInstance());
-      //////////////////////////////////////////////////////////////////////////
-      D3Q27TriFaceMeshInteractorPtr geoInt;
-	  /////////////////
-      //Grid3DPtr grid(new Grid3D());
-        Grid3DPtr grid(new Grid3D(comm));
-
-      UbSchedulerPtr rSch(new UbScheduler());
-      rSch->addSchedule(100, 200, 20000);
-      RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY));
-
-      std::string opt;
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if/*(cstr== NULL)*/(cstr!= NULL)
-      {
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-         grid = rp->restart(UbSystem::stringTo<int>(opt));
-         rp->reconnect(grid);
-
-         // SetForcingBlockVisitor forcingVisitor(0.0, 0.0, 0.0);
-         // grid->accept(forcingVisitor);
-
-         //D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-		  if(myid==0) UBLOG(logINFO,"Restart finish: " << opt);
-	 
-      }
-      else
-      {
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"L = " <<lLB );
-            UBLOG(logINFO,"v = " <<vLB );
-            UBLOG(logINFO,"rho = " <<rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-			UBLOG(logINFO,"dx = " << dx );
-            UBLOG(logINFO,"Re = " << Re );
-			 UBLOG(logINFO,"dp_lb = " << dp_lb );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-
-         ////////////////////////////////////////////////////////////////////////
-         //Grid
-         //////////////////////////////////////////////////////////////////////////
-         grid->setDeltaX(dx);
-         grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3);
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Geometrie
-         ////////////////////////////////////////////////////////////////////////////
-         GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo"));
-
-         if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance());
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Randgeometrien erstellen
-         ////////////////////////////////////////////////////////////////////////////
-         double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0;
-          GbCuboid3DPtr plate1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 ));
-
-           GbCuboid3DPtr plate2  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 ));
-           GbCuboid3DPtr plate3  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 ));
-
-          // GbCuboid3DPtr plate1_1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 ));
-          // GbCuboid3DPtr plate1_2  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 ));
-          // GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0  ));
-          // GbCuboid3DPtr plate1_4  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 ));
-
-          // GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 ));
-          // GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 ));
-		  
-		   // GbCuboid3DPtr plate2  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 ));
-          // GbCuboid3DPtr plate3  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 ));
-
-          // GbCuboid3DPtr plate1_1  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, back_offset, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx ));
-          // GbCuboid3DPtr plate1_2  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, -front_offset, top_offset+bH*dx ));
-          // GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, top_offset, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx+2.0*dx ));
-          // GbCuboid3DPtr plate1_4  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, -bottom_offset ));
-
-          //GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-5*bH*dx, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, -left_offset, back_offset+5*bH*dx, top_offset+5*bH*dx ));
-          //GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( right_offset, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, right_offset+5.0*bH*dx, back_offset+5*bH*dx, top_offset+5*bH*dx ));
-		  GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -11000.0,-600.0, -600.0, -9000.0, 600.0, -500 ));
-		  GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 9000,-600.0, -600.0, 11000.0, 600.0, -500));
-
-
-		   GbObject3DPtr gridCube(new GbCuboid3D(-10700.0/*inflow->getX1Maximum()-4.0*dx/*.5*shiftForMG*/,-550.0/*-270*/ , -550.0/*-70*/,
-                                                10700.0/*outflow->getX1Minimum()+4.0*dx/*.5*shiftForMG*/, 
-                                                550.0/*270*/, 
-                                                23.0/*10.0*/));
-
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-		  
-         if(myid == 0)
-         {
-            GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-            //GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance());
-            //GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance());
-
-            // GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance());
-
-            GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance());
-         }
-   
-
-         if (refineLevel > 0)
-         {
-		  if(myid == 0) UBLOG(logINFO,"Refinement - start");   
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(refineCube1, 1);
-            refineHelper.addGbObject(refineCube3, 2);
-			 refineHelper.addGbObject(refineCube2, 3);
-			 refineHelper.addGbObject(refineCube4, 4);
-			 
-			 refineHelper.addGbObject(refineCubeInlet, 1);
-			 refineHelper.addGbObject(refineCubeOutlet, 1);
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");   
-		 
-		 
-           // RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, refineLevel-4);
-            // grid->accept(refVisitor1);
-
-			// RefineCrossAndInsideGbObjectBlockVisitor refVisitor3(refineCube3, refineLevel-3);
-            // grid->accept(refVisitor3);
-
-            // RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, refineLevel-2);
-            // grid->accept(refVisitor2);
-			
-			 // RefineCrossAndInsideGbObjectBlockVisitor refVisitor4(refineCube4, refineLevel-1);
-            // grid->accept(refVisitor4);
-
-            // RatioBlockVisitor ratioVisitor(refineLevel);
-            // grid->accept(ratioVisitor);
-
-            // RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-            // grid->accept(ratioSmoothVisitor);
-
-            // OverlapBlockVisitor overlapVisitor(refineLevel);
-            // grid->accept(overlapVisitor);
-
-            // std::vector<int> dirs;
-            // D3Q27System::getLBMDirections(dirs);
-            // SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-            // grid->accept(interDirsVisitor);
-            // if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         //INTERAKTOREN SETZEN (=Randbedingungen)
-         //////////////////////////////////////////////////////////////////////////
-         //oben/unten = Haftrand
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-         geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::INVERSESOLID, Interactor3D::SIMPLE));
-	     geoInt->setUseHalfSpaceCheck(true);
-         geoInt->setRegardPointInObjectTest(true);
-         if(myid == 0) UBLOG(logINFO,"stl - end"); 
-         //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID));
-         // D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID));
-
-         // D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID));
-
-         //links: geschwindigkeits-einfluss
-         //Velocity-BC
-         //////////////////////////////////////////////////////////////////////////
-         mu::Parser fct;
-         fct.DefineConst("vx1"  , vLB*9.0/4.0 );
-         //fct = MathUtil::getDuctParaboloidX(0, 250*2.0, -51.08/2, 51.08, vLB*9.0/4.0);
-         fct.SetExpr("vx1");
-         //////////////////////////////////////////////////////////////////////////
-
-         //////////////////////////////////////////////////////////////////////////
-            // D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (false, false ,true ,fct, 0, D3Q27BCFunction::INFCONST));
-            // velBCAdapter->setSecondaryBcOption(2);
-            // D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-		 D3Q27BoundaryConditionAdapterPtr denBCAdapterInlet(new D3Q27DensityBCAdapter(3.0*(dp_lb-rhoLB)));
-        denBCAdapterInlet->setSecondaryBcOption(1);
-        D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, denBCAdapterInlet,Interactor3D::SOLID));
-		 
-         //rechts: druckrand
-         //Density-BC
-         //fuer Kompressibles Modell  rho = 1.0
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-         denBCAdapter->setSecondaryBcOption(1);
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         grid->accept( metisVisitor );
-         
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         if(myid == 0) ppblocks->update(0);
-         
-         SolidBlocksHelper sd(grid, comm);
-         sd.addInteractor(geoInt);
-         sd.addInteractor(inflowInt);
-         sd.addInteractor(outflowInt);
-         // sd.addInteractor(plate1_1Int);
-         // sd.addInteractor(plate1_2Int);
-         // sd.addInteractor(plate1_3Int);
-         // sd.addInteractor(plate1_4Int);
-         // sd.addInteractor(plate2Int);
-         // sd.addInteractor(plate3Int);
-		   if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         sd.deleteSolidBlocks();     
-         if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         grid->accept( metisVisitor );
-         if(myid == 0) UBLOG(logINFO,"line"<<__LINE__);
-
-         sd.setTransBlocks();
-         if(myid == 0) UBLOG(logINFO,"line"<<__LINE__);
-         //BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         if(myid == 0) ppblocks->update(1);
-         if(myid == 0) ppblocks.reset();
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl);
-         unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3);
-         double needMemAll  = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }  
-
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2));
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2));
-
-		  int option = 0;
-		 LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3,option));
-
-		 
-		 
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-		 
-		  if(myid == 0) UBLOG(logINFO,"intractor - start"); 
-          //inflow
-         grid->addAndInitInteractor(inflowInt);
-
-         //outflow
-         grid->addAndInitInteractor(outflowInt);
-         //canal
-         grid->addAndInitInteractor(geoInt);
-         // grid->addAndInitInteractor(plate1_1Int);
-         // grid->addAndInitInteractor(plate1_2Int);
-         // grid->addAndInitInteractor(plate1_3Int);
-         // grid->addAndInitInteractor(plate1_4Int);
-         // grid->addAndInitInteractor(plate2Int);
-         // grid->addAndInitInteractor(plate3Int);
-
-       
-
-         //////////////////////////////////////////////////////////////////////////
-         //connectoren setzen:
-
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         //////////////////////////////////////////////////////////////////////////	 
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-			 
-         //////////////////////////////////////////////////////////////////////////     
-	   //Stroemungsfeld initialisieren
-         //////////////////////////////////////////////////////////////////////////
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0
-         initVisitor.setVx1(0); 
-         grid->accept(initVisitor);
-
-         if(myid == 0)
-         {
-            //Abst�nde "q" als Linien rausschreiben
-            std::vector< UbTupleFloat3 > nodes;
-            std::vector< UbTupleInt2 >   lines;
-            geoInt->addQsLineSet(nodes, lines);
-            WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines);
-         }
-
-          if(myid == 0) UBLOG(logINFO,"Preprozess - end");
-		 
-		 	  ////////////////////////
-           //Set Postprozessors
-           //////////////////////////////////////////////////////////////////////////
-           {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv,  comm, true);
-            grid->doPostProcess(0);
-           }
-	    
-
-      }
-
-      //////////////////////////////////////////////////////////////////////////
-	   // UbSchedulerPtr visSchAv(new UbScheduler());
-		UbSchedulerPtr visSchAv(new UbScheduler(100,100));
-      // visSchAv->addSchedule(100,10,1000);
-      // UbSchedulerPtr resSchAv(new UbScheduler());
-	   UbSchedulerPtr resSchAv(new UbScheduler(100,100));
-      // resSchAv->addSchedule(20,20,1000);
-      AverageValuesPostprocessor       Avpp(grid,  pathname + "/Turbulence/stepAV", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm);
-	  
-	   D3Q27ShearStressPostprocessor  shear(grid,  pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm,iProcessor); 
-	   //D3Q27ShearStressPostprocessor  shear(grid,  pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm);
-	   shear.addInteractor(geoInt);
-	   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  
-
-      UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double outTime = 100.0;
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv,  comm);
-      //////////////////////////////////////////////////////////////////////////
-      //PathLine
-       UbSchedulerPtr plSch(new UbScheduler(5000, 5000));
-      const int numberofparticle=20;
-	
-	  std::vector<UbTupleDouble3 > potisions;
-	  double randomx[numberofparticle];
-	  double randomy[numberofparticle];
-	  double randomz[numberofparticle];
-	  double lowestx,highestx,lowesty,highesty,lowestz,highestz;
-	  if(myid==0)
-	  {
-		  for(int i = 0; i < numberofparticle; i++)
-		  {
-			  double random; 
-	        lowestx =-10300.0;  lowesty =-230;          lowestz =-250;
-	        highestx=-9792.0;  highesty=-330;          highestz=-250; 
-		  
-	      double rangex=(highestx-lowestx),rangey=(highesty-lowesty),rangez=(highestz-lowestz);	
-           randomx[i] = lowestx+(rangex*rand()/(RAND_MAX + 1.0));
-		   randomy[i] = lowesty+(rangey*rand()/(RAND_MAX + 1.0));
-	       randomz[i] = lowestz+(rangez*rand()/(RAND_MAX + 1.0));
-		  //val<1>(potisions[i])= 0.506983973456;
-		  //val<2>(potisions[i]) = lowesty+(rangey*rand()/(RAND_MAX + 1.0));
-		   //val<3>(potisions[i]) = lowestz+(rangez*rand()/(RAND_MAX + 1.0));
-		  }
-		  for (int i=0;i<comm->getNumberOfProcesses();i++)
-		  {
-			  if (i!=0)
-			  {
-			      MPI_Send(randomx,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-				  MPI_Send(randomy,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-				  MPI_Send(randomz,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-			  }
-		  }
-	  }
-	  if (myid!=0)
-	  {
-		  MPI_Status status; 
-		  MPI_Recv(randomx,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-		  MPI_Recv(randomy,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-		  MPI_Recv(randomz,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-	  }
-	  for(int i = 0; i < numberofparticle; i++)
-	  {	
-		  potisions.push_back( makeUbTuple(randomx[i],randomy[i],randomz[i]) );
-		  //val<1>(potisions[i])= 0.506983973456;
-		  //val<2>(potisions[i]) = randomy[i];
-		  //val<3>(potisions[i]) = randomz[i];
-	  }
-	 //  UBLOG(logINFO,"Rank="<<myid<<" positions  = " <<val<1>(potisions)<< " "<<val<2>(potisions)<<" "<< val<3>(potisions));
-	 // D3Q27InterpolationProcessorPtr iProcessor2;
-     // D3Q27PathLinePostprocessorMcpart pathLine(grid, pathname + "/pathLine/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm,potisions, nueLB, iProcessor);
-      //////////////////////////////////////////////////////////////////////////
-      //Simulation
-      //////////////////////////////////////////////////////////////////////////
-
-	  double endTime = 1000.0;
-      UbSchedulerPtr visSch(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
diff --git a/apps/cpu/micropart/micropartTestQs3.hpp b/apps/cpu/micropart/micropartTestQs3.hpp
deleted file mode 100644
index d8c870269b42929d5844bb516c79d091d6ab40ad..0000000000000000000000000000000000000000
--- a/apps/cpu/micropart/micropartTestQs3.hpp
+++ /dev/null
@@ -1,560 +0,0 @@
-#include <iostream>
-#include <string>
-#include <map>
-
-#include <vfluids.h>
-using namespace std;
-
-void micropartTestQs3(const char *cstr)
-{
-   try
-   {
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-      int numprocs = comm->getNumberOfProcesses();
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname; 
-      double availMem = 0;
-      string geoFile;
-      int numOfThreads = 1;
-
-      if(machine == "BOMBADIL") 
-      {
-         pathname = "d:/temp/micropart";
-         availMem = 1.0e9;
-         int numOfThreads = 1;
-         geoFile = "d:/Data/micropart/E0019B_mit_Radien.stl";
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         // pathname = "/work/koskuche/scratch/mcpart/out";
-         pathname = "/work/ehsan/orifice";
-         availMem = 12.0e9;
-         geoFile = "d:/Data/micropart/E0019B_mit_Radien.stl";
-         //geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl";
-
-         numOfThreads = 1;
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      UbLog::reportingLevel() = logINFO;
-      //UbLog::reportingLevel() = logDEBUG1;
-
-      int nodePerBlockX1 =16; //Anzahl an Knoten pro Block
-      int nodePerBlockX2 =16;//(int)16;
-      int nodePerBlockX3 =16;//8; //(int)16;
-
-      double bH = nodePerBlockX1;    //gewuenschte Rand- und Blockbreite
-
-
-      //Simulation Parameters
-      const int baseLevel = 0;
-      const int refineLevel = 5;
-      //length [m]
-      double lSI =217.35;// 216.75;//223.2;
-      //length [LB]
-      double lLB = 30;
-
-      double dx =10;//lSI/lLB;
-
-      double left_offset = 10700;//*0.5;
-      double right_offset  = 107000;//0.5;//2*0.5
-      double front_offset = 750;//0.15;
-      double back_offset  = 750;//0.15;
-      double top_offset = 250;//0.0;
-      double bottom_offset  =750;// 70;//0.07;
-
-      LBMReal vLB =0.00016103/5.0*sqrt(2.0);//0.00016103;
-      LBMReal Re;
-      LBMReal rhoLB = 0.0;
-      LBMReal nueLB = 0.0000249;//(vLB*lLB)/Re;
-      Re = (vLB*(500/dx))/nueLB;
-      double dp_Ph=200.0*100000;//
-      //double dp_lb=dp_Ph*0.001*(nueLB)*(nueLB);//nue_ph=10e-6 and dx is in micrometer
-      LBMReal nue_Ph = 1e-6;//
-      double dt=/*(nue_Ph/nueLB)*/(nueLB/nue_Ph)*(dx*1e-6)*(dx*1e-6);//dt=nu_lb/nu_ph*dx*dx;//nue_ph=10e-6;dx is in micrometer;
-      double dp_lb=dp_Ph/1000*(dt*dt)/((dx*1e-6)*(dx*1e-6));//dp_lb=dp_ph/rho_ph*dt*dt/dx/dx
-      // LBMReal nueLB = 0.000016103;
-      // LBMReal Re=15000;
-      // LBMReal rhoLB = 0.0;
-      // LBMReal vLB =nueLB*Re/(500.0/dx);
-      // // Re = (vLB*(0.303/dx))/nueLB;
-      // //Re = (vLB*lLB)/nueLB;
-
-      // LBMReal rhoWord = 1e-15;//kg/micrometre^3;//1000.0;
-      // LBMReal nueRE = 1e6;//micromter^2/s;//0.000001;
-      // LBMReal  vWorld=300*1e6;//micrometer/s;//nueRE*Re/ (lSI*4.0/9.0);
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-      //conv->init(lSI*1e-6,30000,rhoWord,vWorld,lLB,1.0/*rhoLB*/,vLB); 
-
-      //////////////////////////////////////////////////////////////////////////
-      GbObject3DPtr refineCube1(new  GbCuboid3D(-500.0+5.0/*-354.0*/,-957.0/*-280.0*/,-684.0/* -72.0*/, 4100/*370.0*/,957.0/*354.0*/,70.0));//-530.0,-280.0, -72.0, 530.0,354.0,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCube2(new  GbCuboid3D(-280.0,-957.0/*-120.0*/,-684.0/*-684.0*//* -72.0*/, 500,957.0/*120.0*/,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCube3(new  GbCuboid3D(-350.0,-957.0/*-120.0*/,-684.0/*-684.0*//* -72.0*/, 1700,957.0/*120.0*/,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube3.get(), pathname+"/geo/refineCube3", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCube4(new  GbCuboid3D(-230.0,-150.0/*-120.0*/,-684.0, 225,150,957.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube4.get(), pathname+"/geo/refineCube4", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCube5up(new  GbCuboid3D(-147.0,-50,-5.0, 0.0,50.0,957.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube5up.get(), pathname+"/geo/refineCube5up", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCube5down(new  GbCuboid3D(-147.0,-50,-46.0, 0,50,-957.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube5down.get(), pathname+"/geo/refineCube5down", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCubeInlet(new  GbCuboid3D(-10600.0,-600.0, -600.0/*-72.0*/, -8000,600.0,60.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCubeInlet.get(), pathname+"/geo/refineCubeInlet", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCubeOutlet(new  GbCuboid3D(8000,-600.0, -600.0/*-72.0*/,10550.0 ,600.0,60.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCubeOutlet.get(), pathname+"/geo/refineCubeOutlet", WbWriterVtkXmlASCII::getInstance());
-      //////////////////////////////////////////////////////////////////////////
-      D3Q27TriFaceMeshInteractorPtr geoInt;
-      /////////////////
-      //Grid3DPtr grid(new Grid3D());
-      Grid3DPtr grid(new Grid3D(comm));
-
-      UbSchedulerPtr rSch(new UbScheduler());
-      rSch->addSchedule(50000, 50000, 1000000000);
-      RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY));
-
-      std::string opt;
-      D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if/*(cstr== NULL)*/(cstr!= NULL)
-      {
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-         grid = rp->restart(UbSystem::stringTo<int>(opt));
-         rp->reconnect(grid);
-
-         // SetForcingBlockVisitor forcingVisitor(0.0, 0.0, 0.0);
-         // grid->accept(forcingVisitor);
-
-         //D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         if(myid==0) UBLOG(logINFO,"Restart finish: " << opt);
-
-      }
-      else
-      {
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"L = " <<lLB );
-            UBLOG(logINFO,"v = " <<vLB );
-            UBLOG(logINFO,"rho = " <<rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-            UBLOG(logINFO,"dx = " << dx );
-            UBLOG(logINFO,"Re = " << Re );
-            UBLOG(logINFO,"dt = " << dt );
-            UBLOG(logINFO,"dp_lb = " << dp_lb );
-            UBLOG(logINFO,"refineLevel = " << refineLevel );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-
-         ////////////////////////////////////////////////////////////////////////
-         //Grid
-         //////////////////////////////////////////////////////////////////////////
-         grid->setDeltaX(dx);
-         grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3);
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Geometrie
-         ////////////////////////////////////////////////////////////////////////////
-         GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo"));
-
-         if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance());
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Randgeometrien erstellen
-         ////////////////////////////////////////////////////////////////////////////
-         double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0;
-         GbCuboid3DPtr plate1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 ));
-
-         GbCuboid3DPtr plate2  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 ));
-         GbCuboid3DPtr plate3  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 ));
-
-         // GbCuboid3DPtr plate1_1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 ));
-         // GbCuboid3DPtr plate1_2  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 ));
-         // GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0  ));
-         // GbCuboid3DPtr plate1_4  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 ));
-
-         // GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 ));
-         // GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 ));
-
-         // GbCuboid3DPtr plate2  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 ));
-         // GbCuboid3DPtr plate3  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 ));
-
-         // GbCuboid3DPtr plate1_1  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, back_offset, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx ));
-         // GbCuboid3DPtr plate1_2  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, -front_offset, top_offset+bH*dx ));
-         // GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, top_offset, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx+2.0*dx ));
-         // GbCuboid3DPtr plate1_4  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, -bottom_offset ));
-
-         //GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-5*bH*dx, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, -left_offset, back_offset+5*bH*dx, top_offset+5*bH*dx ));
-         //GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( right_offset, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, right_offset+5.0*bH*dx, back_offset+5*bH*dx, top_offset+5*bH*dx ));
-
-         //GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -11000.0,-600.0, -600.0, -9000.0, 600.0, -500 ));
-         //GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 9000,-600.0, -600.0, 11000.0, 600.0, -500));
-
-         GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -11000.0,-600.0, -600.0, -9000.0, 600.0, -480 ));
-         GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 9000,-600.0, -600.0, 11000.0, 600.0, -480));
-         GbObject3DPtr gridCube(new GbCuboid3D(-1.05e4, -500-140.0, -480.0-25.54, 1.05e4, 500.0, 0.0));
-
-
-
-         //GbObject3DPtr gridCube(new GbCuboid3D(-10700.0/*inflow->getX1Maximum()-4.0*dx/*.5*shiftForMG*/,-550.0/*-270*/ , -550.0/*-70*/,
-         //                                             10700.0/*outflow->getX1Minimum()+4.0*dx/*.5*shiftForMG*/, 
-         //                                             550.0/*270*/, 
-         //                                             23.0/*10.0*/));
-
-
-
-         //GbObject3DPtr gridCube(new GbCuboid3D(-1.05e4, -500.0, -500.0-0.54, 1.05e4, 500.0, 0.0-0.54));
-         //GbObject3DPtr gridCube(new GbCuboid3D(-1.05e4, -500.0, -500.0, 1.05e4, 500.0, 0.0));
-
-         //double difX1 = geo->getX1Centroid() - gridCube->getX1Centroid();
-         //double difX2 = geo->getX2Centroid() - gridCube->getX2Centroid();
-         //double difX3 = geo->getX3Centroid() - gridCube->getX3Centroid();
-
-         ////GbObject3DPtr gridCubeCor(new GbCuboid3D(-1.05e4+difX1, -500.0+difX2, -500.0-0.54, 1.05e4+difX1, 500.0+difX2, 0.0-0.54));
-         //GbObject3DPtr gridCubeCor(new GbCuboid3D(-1.05e4+difX1, -500.0+difX2, -500.0+difX3, 1.05e4+difX1, 500.0+difX2, 0.0+difX3));
-
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-
-         if(myid == 0)
-         {
-            GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCubeCor", WbWriterVtkXmlASCII::getInstance());
-            //GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance());
-            //GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance());
-
-            // GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance());
-
-            GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance());
-         }
-
-
-         if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");   
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(refineCube1, 1);
-            refineHelper.addGbObject(refineCube3, 2);
-            refineHelper.addGbObject(refineCube2, 3);
-            refineHelper.addGbObject(refineCube4, 4);
-
-            refineHelper.addGbObject(refineCube5up, 5);
-            refineHelper.addGbObject(refineCube5down, 5);
-
-            refineHelper.addGbObject(refineCubeInlet, 1);
-            refineHelper.addGbObject(refineCubeOutlet, 1);
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");   
-
-
-            // RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, refineLevel-4);
-            // grid->accept(refVisitor1);
-
-            // RefineCrossAndInsideGbObjectBlockVisitor refVisitor3(refineCube3, refineLevel-3);
-            // grid->accept(refVisitor3);
-
-            // RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, refineLevel-2);
-            // grid->accept(refVisitor2);
-
-            // RefineCrossAndInsideGbObjectBlockVisitor refVisitor4(refineCube4, refineLevel-1);
-            // grid->accept(refVisitor4);
-
-            // RatioBlockVisitor ratioVisitor(refineLevel);
-            // grid->accept(ratioVisitor);
-
-            // RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-            // grid->accept(ratioSmoothVisitor);
-
-            // OverlapBlockVisitor overlapVisitor(refineLevel);
-            // grid->accept(overlapVisitor);
-
-            // std::vector<int> dirs;
-            // D3Q27System::getLBMDirections(dirs);
-            // SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-            // grid->accept(interDirsVisitor);
-            // if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         //INTERAKTOREN SETZEN (=Randbedingungen)
-         //////////////////////////////////////////////////////////////////////////
-         //oben/unten = Haftrand
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-         geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::INVERSESOLID, Interactor3D::SIMPLE));
-         geoInt->setUseHalfSpaceCheck(true);
-         geoInt->setRegardPointInObjectTest(true);
-         if(myid == 0) UBLOG(logINFO,"stl - end"); 
-         //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID));
-         // D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID));
-
-         // D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID));
-
-         //links: geschwindigkeits-einfluss
-         //Velocity-BC
-         //////////////////////////////////////////////////////////////////////////
-         mu::Parser fct;
-         fct.DefineConst("vx1"  , vLB*9.0/4.0 );
-         //fct = MathUtil::getDuctParaboloidX(0, 250*2.0, -51.08/2, 51.08, vLB*9.0/4.0);
-         fct.SetExpr("vx1");
-         //////////////////////////////////////////////////////////////////////////
-
-         //////////////////////////////////////////////////////////////////////////
-         // D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (false, false ,true ,fct, 0, D3Q27BCFunction::INFCONST));
-         // velBCAdapter->setSecondaryBcOption(2);
-         // D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         D3Q27BoundaryConditionAdapterPtr denBCAdapterInlet(new D3Q27DensityBCAdapter(3.0*(dp_lb-rhoLB)));
-         denBCAdapterInlet->setSecondaryBcOption(1);
-         D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, denBCAdapterInlet,Interactor3D::SOLID));
-
-         //rechts: druckrand
-         //Density-BC
-         //fuer Kompressibles Modell  rho = 1.0
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-         denBCAdapter->setSecondaryBcOption(1);
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         grid->accept( metisVisitor );
-         SolidBlocksHelper sd(grid, comm);
-         sd.addInteractor(geoInt);
-         sd.addInteractor(inflowInt);
-         sd.addInteractor(outflowInt);
-         // sd.addInteractor(plate1_1Int);
-         // sd.addInteractor(plate1_2Int);
-         // sd.addInteractor(plate1_3Int);
-         // sd.addInteractor(plate1_4Int);
-         // sd.addInteractor(plate2Int);
-         // sd.addInteractor(plate3Int);
-         if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         sd.deleteSolidBlocks();  
-
-         if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         grid->accept( metisVisitor );
-         sd.setTransBlocks();		 
-         if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl);
-         unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3);
-         double needMemAll  = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }  
-
-         LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3,LBMKernelETD3Q27CCLB::MAGIC));
-
-
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         if(myid == 0) UBLOG(logINFO,"intractor - start"); 
-         //inflow
-         grid->addAndInitInteractor(inflowInt);
-
-         //outflow
-         grid->addAndInitInteractor(outflowInt);
-         //canal
-         grid->addAndInitInteractor(geoInt);
-         // grid->addAndInitInteractor(plate1_1Int);
-         // grid->addAndInitInteractor(plate1_2Int);
-         // grid->addAndInitInteractor(plate1_3Int);
-         // grid->addAndInitInteractor(plate1_4Int);
-         // grid->addAndInitInteractor(plate2Int);
-         // grid->addAndInitInteractor(plate3Int);
-
-
-         if(myid == 0) UBLOG(logINFO,"intractor - end");
-         //////////////////////////////////////////////////////////////////////////
-         //connectoren setzen:
-
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         //////////////////////////////////////////////////////////////////////////	 
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //////////////////////////////////////////////////////////////////////////     
-         //Stroemungsfeld initialisieren
-         //////////////////////////////////////////////////////////////////////////
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB); //1.0
-         initVisitor.setVx1(0); 
-         grid->accept(initVisitor);
-
-         // if(myid == 0)
-         // {
-         // //Abst�nde "q" als Linien rausschreiben
-         // std::vector< UbTupleFloat3 > nodes;
-         // std::vector< UbTupleInt2 >   lines;
-         // geoInt->addQsLineSet(nodes, lines);
-         // WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines);
-         // }
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");
-
-         ////////////////////////
-         //Set Postprozessors
-         //////////////////////////////////////////////////////////////////////////
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv,  comm, true);
-            //grid->doPostProcess(0);
-            grid->notifyObservers(0);
-         }
-
-
-      }
-
-      //////////////////////////////////////////////////////////////////////////
-      // UbSchedulerPtr visSchAv(new UbScheduler());
-      UbSchedulerPtr visSchAv(new UbScheduler(100000,350000));
-      // visSchAv->addSchedule(100,10,1000);
-      // UbSchedulerPtr resSchAv(new UbScheduler());
-      UbSchedulerPtr resSchAv(new UbScheduler(100,10000000000));
-      // resSchAv->addSchedule(20,20,1000);
-      AverageValuesPostprocessor       Avpp(grid,  pathname + "/Turbulence/stepAV", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm);
-
-      D3Q27ShearStressPostprocessor  shear(grid,  pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/); 
-      // D3Q27ShearStressPostprocessor  shear(grid,  pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm);
-      shear.addInteractor(geoInt);
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-      UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double outTime = 10000.0;
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv,  comm);
-      //////////////////////////////////////////////////////////////////////////
-      //PathLine
-      UbSchedulerPtr plSch(new UbScheduler(5000, 5000));
-      const int numberofparticle=20;
-
-      std::vector<UbTupleDouble3 > potisions;
-      double randomx[numberofparticle];
-      double randomy[numberofparticle];
-      double randomz[numberofparticle];
-      double lowestx,highestx,lowesty,highesty,lowestz,highestz;
-      if(myid==0)
-      {
-         for(int i = 0; i < numberofparticle; i++)
-         {
-            double random; 
-            lowestx =-10300.0;  lowesty =-230;          lowestz =-250;
-            highestx=-9792.0;  highesty=-330;          highestz=-250; 
-
-            double rangex=(highestx-lowestx),rangey=(highesty-lowesty),rangez=(highestz-lowestz);	
-            randomx[i] = lowestx+(rangex*rand()/(RAND_MAX + 1.0));
-            randomy[i] = lowesty+(rangey*rand()/(RAND_MAX + 1.0));
-            randomz[i] = lowestz+(rangez*rand()/(RAND_MAX + 1.0));
-            //val<1>(potisions[i])= 0.506983973456;
-            //val<2>(potisions[i]) = lowesty+(rangey*rand()/(RAND_MAX + 1.0));
-            //val<3>(potisions[i]) = lowestz+(rangez*rand()/(RAND_MAX + 1.0));
-         }
-         for (int i=0;i<comm->getNumberOfProcesses();i++)
-         {
-            if (i!=0)
-            {
-               MPI_Send(randomx,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-               MPI_Send(randomy,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-               MPI_Send(randomz,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-            }
-         }
-      }
-      if (myid!=0)
-      {
-         MPI_Status status; 
-         MPI_Recv(randomx,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-         MPI_Recv(randomy,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-         MPI_Recv(randomz,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-      }
-      for(int i = 0; i < numberofparticle; i++)
-      {	
-         potisions.push_back( makeUbTuple(randomx[i],randomy[i],randomz[i]) );
-         //val<1>(potisions[i])= 0.506983973456;
-         //val<2>(potisions[i]) = randomy[i];
-         //val<3>(potisions[i]) = randomz[i];
-      }
-      //  UBLOG(logINFO,"Rank="<<myid<<" positions  = " <<val<1>(potisions)<< " "<<val<2>(potisions)<<" "<< val<3>(potisions));
-      // D3Q27InterpolationProcessorPtr iProcessor2;
-      // D3Q27PathLinePostprocessorMcpart pathLine(grid, pathname + "/pathLine/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm,potisions, nueLB, iProcessor);
-      //////////////////////////////////////////////////////////////////////////
-      //Simulation
-      //////////////////////////////////////////////////////////////////////////
-      return;
-
-      double endTime = 1000000000.0;
-      UbSchedulerPtr visSch(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
diff --git a/apps/cpu/micropart/miro.txt b/apps/cpu/micropart/miro.txt
deleted file mode 100644
index 43d3eeae73400b365e06c879de9d869cef851fed..0000000000000000000000000000000000000000
--- a/apps/cpu/micropart/miro.txt
+++ /dev/null
@@ -1,585 +0,0 @@
-#include <iostream>
-#include <string>
-#include <map>
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "RatioBlockVisitor.h"
-#include "RatioSmoothBlockVisitor.h"
-#include "OverlapBlockVisitor.h"
-#include "SetInterpolationDirsBlockVisitor.h"
-#include "geometry3d/GbSystem3D.h"
-#include "geometry3d/GbCuboid3D.h"
-#include "geometry3d/GbCylinder3D.h"
-#include "geometry3d/GbSphere3D.h"
-#include "BlocksPostprocessor.h"
-#include "Grid3D.h"
-#include "Patch3D.h"
-#include "Patch3DSystem.h"
-#include "Block3D.h"
-#include "LBMKernelETD3Q27Cascaded.h"
-#include "LBMKernelETD3Q27BGK.h"
-#include "CalculationManager.h" 
-#include "D3Q27SetConnectorsBlockVisitor.h" 
-#include "D3Q27ETInitDistributionsBlockVisitor.h"
-#include "D3Q27Interactor.h"
-#include "D3Q27NoSlipBCAdapter.h"
-#include "D3Q27VelocityBCAdapter.h"
-#include "D3Q27DensityBCAdapter.h"
-#include "SimulationParameters.h"
-#include "Communicator.h"
-#include "MPICommunicator.h"
-#include "SimpleGeometricPartitioner.h"
-#include "D3Q27MacroscopicQuantitiesPostprocessor.h"
-#include "D3Q27ETBCProcessor.h"
-#include "D3Q27TriFaceMeshInteractor.h"
-#include "ConfigFileReader.h"
-#include "StringUtil.hpp"
-#include "D3Q27PressureDifferencePostprocessor.h"
-#include "D3Q27IntegrateValuesHelper.h"
-#include "LBMUnitConverter.h"
-#include "NUPSCounterPostprocessor.h"
-#include "PQueuePartitioningGridVisitor.h"
-#include "SetKernelBlockVisitor.h"
-#include "GenBlocksGridVisitor.h"
-#include "D3Q27PathLinePostprocessorMcpart.h"
-#include "D3Q27SetUndefinedNodesBlockVisitor.h"
-   //
-#include "basics/writer/WbWriterVtkXmlBinary.h"
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include "geometry3d/creator/GbTriFaceMesh3DCreator.h"
-#include "geometry3d/GbTriFaceMesh3D.h"
-#include "D3Q27System.h"
-#include <basics/transmitter/TbTransmitterMpiPool.h>
-#include "MathUtil.hpp"
-#include "D3Q27OffsetInterpolationProcessor.h"
-#include "SolidBlocksHelper.h"
-#include "MetisPartitioningGridVisitor.h"
-#include "RestartPostprocessor.h"
-#include "D3Q27IncompressibleOffsetInterpolationProcessor.h"
-#include "LBMKernelETD3Q27CCLB.h"
-#include "AverageValuesPostprocessor.h"
-#include <vfluids.h>
-using namespace std;
-
-void micropartTestQs2(const char *cstr)
-{
-   try
-   {
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-      int numprocs = comm->getNumberOfProcesses();
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname; 
-      double availMem = 0;
-      string geoFile;
-      int numOfThreads = 1;
-
-      if(machine == "EHSAN1491") 
-      {
-         pathname = "/work/ehsan/micropart";
-         availMem = 3.0e9;
-		  int numOfThreads = 1;
-         //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl";
-         //geoFile = "c:/Data/micropart/ktoolcav.stl";
-         //geoFile = "c:/Data/micropart/boxN.stl";
-        geoFile = "C:/Users/ehsan/Desktop/meshparticles/E0019B_mit_Radien.stl";
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         pathname = "/work/ehsan/micropart";
-         availMem = 12.0e9;
-		  geoFile = "/work/ehsan/data/E0019B_mit_Radien.stl";
-         //geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl";
-
-         numOfThreads = 1;
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      UbLog::reportingLevel() = logINFO;
-      //UbLog::reportingLevel() = logDEBUG1;
-
-      int nodePerBlockX1 =16; //Anzahl an Knoten pro Block
-      int nodePerBlockX2 =16;//(int)16;
-      int nodePerBlockX3 =8;//8; //(int)16;
-
-      double bH = nodePerBlockX1;    //gewuenschte Rand- und Blockbreite
-
-      //Simulation Parameters
-      const int baseLevel = 0;
-      const int refineLevel =4;
-      //length [m]
-      double lSI = 219;//223.2;
-      //length [LB]
-      double lLB = 30;
-
-      double dx =lSI/lLB;
-
-      double left_offset = 10700;//*0.5;
-      double right_offset  = 107000;//0.5;//2*0.5
-      double front_offset = 750;//0.15;
-      double back_offset  = 750;//0.15;
-      double top_offset = 250;//0.0;
-      double bottom_offset  =750;// 70;//0.07;
-	  
-	   LBMReal vLB =0.00016103/5.0*sqrt(2.0);//0.00016103;
-       LBMReal Re;
-       LBMReal rhoLB = 0.0;
-       LBMReal nueLB = 0.0000249;//(vLB*lLB)/Re;
-       Re = (vLB*(500/dx))/nueLB;
-       double dp_Ph=200.0*100000;//
-	   double dp_lb=dp_Ph*0.001*(nueLB*dx)*(nueLB*dx);//nue_ph=10e-6 and dx is in micrometer
-      // LBMReal nueLB = 0.000016103;
-      // LBMReal Re=15000;
-      // LBMReal rhoLB = 0.0;
-      // LBMReal vLB =nueLB*Re/(500.0/dx);
-     // // Re = (vLB*(0.303/dx))/nueLB;
-	   // //Re = (vLB*lLB)/nueLB;
-	  
-      // LBMReal rhoWord = 1e-15;//kg/micrometre^3;//1000.0;
-	  // LBMReal nueRE = 1e6;//micromter^2/s;//0.000001;
-	  // LBMReal  vWorld=300*1e6;//micrometer/s;//nueRE*Re/ (lSI*4.0/9.0);
-	  LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-      //conv->init(lSI*1e-6,30000,rhoWord,vWorld,lLB,1.0/*rhoLB*/,vLB);
-      
-	 
- //////////////////////////////////////////////////////////////////////////
-      GbObject3DPtr refineCube1(new  GbCuboid3D(-500.0+5.0/*-354.0*/,-957.0/*-280.0*/,-684.0/* -72.0*/, 4100/*370.0*/,957.0/*354.0*/,70.0));//-530.0,-280.0, -72.0, 530.0,354.0,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance());
-
-      GbObject3DPtr refineCube2(new  GbCuboid3D(-230.0,-90.0, -684.0/*-72.0*/, 600,100.0,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance());
-	  
-	   GbObject3DPtr refineCube3(new  GbCuboid3D(-350.0,-957.0/*-120.0*/,-684.0/*-684.0*//* -72.0*/, 1700,957.0/*120.0*/,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube3.get(), pathname+"/geo/refineCube3", WbWriterVtkXmlASCII::getInstance());
-	  
-	   GbObject3DPtr refineCube4(new  GbCuboid3D(-170.0,-60.0, -684.0/*-72.0*/, 200,60.0,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube4.get(), pathname+"/geo/refineCube4", WbWriterVtkXmlASCII::getInstance());
-	  
-	   GbObject3DPtr refineCubeInlet(new  GbCuboid3D(-10600.0,-600.0, -600.0/*-72.0*/, -9000,600.0,60.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCubeInlet.get(), pathname+"/geo/refineCubeInlet", WbWriterVtkXmlASCII::getInstance());
-	  
-	  GbObject3DPtr refineCubeOutlet(new  GbCuboid3D(9000,-600.0, -600.0/*-72.0*/,10550.0 ,600.0,60.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCubeOutlet.get(), pathname+"/geo/refineCubeOutlet", WbWriterVtkXmlASCII::getInstance());
-      //////////////////////////////////////////////////////////////////////////
-      D3Q27TriFaceMeshInteractorPtr geoInt;
-	  /////////////////
-      //Grid3DPtr grid(new Grid3D());
-        Grid3DPtr grid(new Grid3D(comm));
-
-      UbSchedulerPtr rSch(new UbScheduler());
-      rSch->addSchedule(100, 200, 20000);
-      RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY));
-
-      std::string opt;
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if/*(cstr== NULL)*/(cstr!= NULL)
-      {
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-         grid = rp->restart(UbSystem::stringTo<int>(opt));
-         rp->reconnect(grid);
-
-         // SetForcingBlockVisitor forcingVisitor(0.0, 0.0, 0.0);
-         // grid->accept(forcingVisitor);
-
-         //D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-		  if(myid==0) UBLOG(logINFO,"Restart finish: " << opt);
-	 
-      }
-      else
-      {
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"L = " <<lLB );
-            UBLOG(logINFO,"v = " <<vLB );
-            UBLOG(logINFO,"rho = " <<rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-			UBLOG(logINFO,"dx = " << dx );
-            UBLOG(logINFO,"Re = " << Re );
-			 UBLOG(logINFO,"dp_lb = " << dp_lb );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-
-         ////////////////////////////////////////////////////////////////////////
-         //Grid
-         //////////////////////////////////////////////////////////////////////////
-         grid->setDeltaX(dx);
-         grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3);
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Geometrie
-         ////////////////////////////////////////////////////////////////////////////
-         GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo"));
-
-         if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance());
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Randgeometrien erstellen
-         ////////////////////////////////////////////////////////////////////////////
-         double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0;
-          GbCuboid3DPtr plate1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 ));
-
-           GbCuboid3DPtr plate2  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 ));
-           GbCuboid3DPtr plate3  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 ));
-
-          // GbCuboid3DPtr plate1_1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 ));
-          // GbCuboid3DPtr plate1_2  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 ));
-          // GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0  ));
-          // GbCuboid3DPtr plate1_4  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 ));
-
-          // GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 ));
-          // GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 ));
-		  
-		   // GbCuboid3DPtr plate2  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 ));
-          // GbCuboid3DPtr plate3  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 ));
-
-          // GbCuboid3DPtr plate1_1  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, back_offset, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx ));
-          // GbCuboid3DPtr plate1_2  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, -front_offset, top_offset+bH*dx ));
-          // GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, top_offset, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx+2.0*dx ));
-          // GbCuboid3DPtr plate1_4  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, -bottom_offset ));
-
-          //GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-5*bH*dx, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, -left_offset, back_offset+5*bH*dx, top_offset+5*bH*dx ));
-          //GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( right_offset, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, right_offset+5.0*bH*dx, back_offset+5*bH*dx, top_offset+5*bH*dx ));
-		  GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -11000.0,-600.0, -600.0, -9000.0, 600.0, -500 ));
-		  GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 9000,-600.0, -600.0, 11000.0, 600.0, -500));
-
-
-		   GbObject3DPtr gridCube(new GbCuboid3D(-10700.0/*inflow->getX1Maximum()-4.0*dx/*.5*shiftForMG*/,-550.0/*-270*/ , -550.0/*-70*/,
-                                                10700.0/*outflow->getX1Minimum()+4.0*dx/*.5*shiftForMG*/, 
-                                                550.0/*270*/, 
-                                                23.0/*10.0*/));
-
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-		  
-         if(myid == 0)
-         {
-            GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-            //GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance());
-            //GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance());
-
-            // GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance());
-
-            GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance());
-         }
-   
-
-         if (refineLevel > 0)
-         {
-		  if(myid == 0) UBLOG(logINFO,"Refinement - start");   
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(refineCube1, 1);
-            refineHelper.addGbObject(refineCube3, 2);
-			 refineHelper.addGbObject(refineCube2, 3);
-			 refineHelper.addGbObject(refineCube4, 4);
-			 
-			 refineHelper.addGbObject(refineCubeInlet, 1);
-			 refineHelper.addGbObject(refineCubeOutlet, 1);
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");   
-		 
-		 
-           // RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, refineLevel-4);
-            // grid->accept(refVisitor1);
-
-			// RefineCrossAndInsideGbObjectBlockVisitor refVisitor3(refineCube3, refineLevel-3);
-            // grid->accept(refVisitor3);
-
-            // RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, refineLevel-2);
-            // grid->accept(refVisitor2);
-			
-			 // RefineCrossAndInsideGbObjectBlockVisitor refVisitor4(refineCube4, refineLevel-1);
-            // grid->accept(refVisitor4);
-
-            // RatioBlockVisitor ratioVisitor(refineLevel);
-            // grid->accept(ratioVisitor);
-
-            // RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-            // grid->accept(ratioSmoothVisitor);
-
-            // OverlapBlockVisitor overlapVisitor(refineLevel);
-            // grid->accept(overlapVisitor);
-
-            // std::vector<int> dirs;
-            // D3Q27System::getLBMDirections(dirs);
-            // SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-            // grid->accept(interDirsVisitor);
-            // if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         //INTERAKTOREN SETZEN (=Randbedingungen)
-         //////////////////////////////////////////////////////////////////////////
-         //oben/unten = Haftrand
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-         geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::INVERSESOLID, Interactor3D::SIMPLE));
-	     geoInt->setUseHalfSpaceCheck(true);
-         geoInt->setRegardPointInObjectTest(true);
-         if(myid == 0) UBLOG(logINFO,"stl - end"); 
-         //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID));
-         // D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID));
-
-         // D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID));
-
-         //links: geschwindigkeits-einfluss
-         //Velocity-BC
-         //////////////////////////////////////////////////////////////////////////
-         mu::Parser fct;
-         fct.DefineConst("vx1"  , vLB*9.0/4.0 );
-         //fct = MathUtil::getDuctParaboloidX(0, 250*2.0, -51.08/2, 51.08, vLB*9.0/4.0);
-         fct.SetExpr("vx1");
-         //////////////////////////////////////////////////////////////////////////
-
-         //////////////////////////////////////////////////////////////////////////
-            // D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (false, false ,true ,fct, 0, D3Q27BCFunction::INFCONST));
-            // velBCAdapter->setSecondaryBcOption(2);
-            // D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-		 D3Q27BoundaryConditionAdapterPtr denBCAdapterInlet(new D3Q27DensityBCAdapter(3.0*(dp_lb-rhoLB)));
-        denBCAdapterInlet->setSecondaryBcOption(1);
-        D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, denBCAdapterInlet,Interactor3D::SOLID));
-		 
-         //rechts: druckrand
-         //Density-BC
-         //fuer Kompressibles Modell  rho = 1.0
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-         denBCAdapter->setSecondaryBcOption(1);
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         grid->accept( metisVisitor );
-         SolidBlocksHelper sd(grid, comm);
-         sd.addInteractor(geoInt);
-         sd.addInteractor(inflowInt);
-         sd.addInteractor(outflowInt);
-         // sd.addInteractor(plate1_1Int);
-         // sd.addInteractor(plate1_2Int);
-         // sd.addInteractor(plate1_3Int);
-         // sd.addInteractor(plate1_4Int);
-         // sd.addInteractor(plate2Int);
-         // sd.addInteractor(plate3Int);
-		 if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         sd.deleteSolidBlocks();     
- if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         grid->accept( metisVisitor );
-if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl);
-         unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3);
-         double needMemAll  = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }  
-
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2));
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2));
-
-		  int option = 0;
-		 LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3,option));
-
-		 
-		 
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-		 
-		  if(myid == 0) UBLOG(logINFO,"intractor - start"); 
-          //inflow
-         grid->addAndInitInteractor(inflowInt);
-
-         //outflow
-         grid->addAndInitInteractor(outflowInt);
-         //canal
-         grid->addAndInitInteractor(geoInt);
-         // grid->addAndInitInteractor(plate1_1Int);
-         // grid->addAndInitInteractor(plate1_2Int);
-         // grid->addAndInitInteractor(plate1_3Int);
-         // grid->addAndInitInteractor(plate1_4Int);
-         // grid->addAndInitInteractor(plate2Int);
-         // grid->addAndInitInteractor(plate3Int);
-
-       
-
-         //////////////////////////////////////////////////////////////////////////
-         //connectoren setzen:
-
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         //////////////////////////////////////////////////////////////////////////	 
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-			 
-         //////////////////////////////////////////////////////////////////////////     
-	   //Stroemungsfeld initialisieren
-         //////////////////////////////////////////////////////////////////////////
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0
-         initVisitor.setVx1(0); 
-         grid->accept(initVisitor);
-
-         if(myid == 0)
-         {
-            //Abst�nde "q" als Linien rausschreiben
-            std::vector< UbTupleFloat3 > nodes;
-            std::vector< UbTupleInt2 >   lines;
-            geoInt->addQsLineSet(nodes, lines);
-            WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines);
-         }
-
-          if(myid == 0) UBLOG(logINFO,"Preprozess - end");
-		 
-		 	  ////////////////////////
-           //Set Postprozessors
-           //////////////////////////////////////////////////////////////////////////
-           {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv,  comm, true);
-            grid->doPostProcess(0);
-           }
-	    
-
-      }
-
-      //////////////////////////////////////////////////////////////////////////
-	   // UbSchedulerPtr visSchAv(new UbScheduler());
-		UbSchedulerPtr visSchAv(new UbScheduler(100,100));
-      // visSchAv->addSchedule(100,10,1000);
-      // UbSchedulerPtr resSchAv(new UbScheduler());
-	   UbSchedulerPtr resSchAv(new UbScheduler(100,100));
-      // resSchAv->addSchedule(20,20,1000);
-      AverageValuesPostprocessor       Avpp(grid,  pathname + "/Turbulence/stepAV", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm);
-	  
-	 D3Q27ShearStressPostprocessor  shear(grid,  pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm,iProcessor); 
-	 // D3Q27ShearStressPostprocessor  shear(grid,  pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm);
-	  shear.addInteractor(geoInt);
-	   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  
-
-      UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double outTime = 100.0;
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv,  comm);
-      //////////////////////////////////////////////////////////////////////////
-      //PathLine
-       UbSchedulerPtr plSch(new UbScheduler(5000, 5000));
-      const int numberofparticle=20;
-	
-	  std::vector<UbTupleDouble3 > potisions;
-	  double randomx[numberofparticle];
-	  double randomy[numberofparticle];
-	  double randomz[numberofparticle];
-	  double lowestx,highestx,lowesty,highesty,lowestz,highestz;
-	  if(myid==0)
-	  {
-		  for(int i = 0; i < numberofparticle; i++)
-		  {
-			  double random; 
-	        lowestx =-10300.0;  lowesty =-230;          lowestz =-250;
-	        highestx=-9792.0;  highesty=-330;          highestz=-250; 
-		  
-	      double rangex=(highestx-lowestx),rangey=(highesty-lowesty),rangez=(highestz-lowestz);	
-           randomx[i] = lowestx+(rangex*rand()/(RAND_MAX + 1.0));
-		   randomy[i] = lowesty+(rangey*rand()/(RAND_MAX + 1.0));
-	       randomz[i] = lowestz+(rangez*rand()/(RAND_MAX + 1.0));
-		  //val<1>(potisions[i])= 0.506983973456;
-		  //val<2>(potisions[i]) = lowesty+(rangey*rand()/(RAND_MAX + 1.0));
-		   //val<3>(potisions[i]) = lowestz+(rangez*rand()/(RAND_MAX + 1.0));
-		  }
-		  for (int i=0;i<comm->getNumberOfProcesses();i++)
-		  {
-			  if (i!=0)
-			  {
-			      MPI_Send(randomx,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-				  MPI_Send(randomy,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-				  MPI_Send(randomz,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-			  }
-		  }
-	  }
-	  if (myid!=0)
-	  {
-		  MPI_Status status; 
-		  MPI_Recv(randomx,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-		  MPI_Recv(randomy,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-		  MPI_Recv(randomz,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-	  }
-	  for(int i = 0; i < numberofparticle; i++)
-	  {	
-		  potisions.push_back( makeUbTuple(randomx[i],randomy[i],randomz[i]) );
-		  //val<1>(potisions[i])= 0.506983973456;
-		  //val<2>(potisions[i]) = randomy[i];
-		  //val<3>(potisions[i]) = randomz[i];
-	  }
-	 //  UBLOG(logINFO,"Rank="<<myid<<" positions  = " <<val<1>(potisions)<< " "<<val<2>(potisions)<<" "<< val<3>(potisions));
-	 // D3Q27InterpolationProcessorPtr iProcessor2;
-     // D3Q27PathLinePostprocessorMcpart pathLine(grid, pathname + "/pathLine/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm,potisions, nueLB, iProcessor);
-      //////////////////////////////////////////////////////////////////////////
-      //Simulation
-      //////////////////////////////////////////////////////////////////////////
-
-	  double endTime = 1000.0;
-      UbSchedulerPtr visSch(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
diff --git a/apps/cpu/micropart/orifice.hpp b/apps/cpu/micropart/orifice.hpp
deleted file mode 100644
index 34028cad270bccd50d11ac61c2c515621ff767b6..0000000000000000000000000000000000000000
--- a/apps/cpu/micropart/orifice.hpp
+++ /dev/null
@@ -1,542 +0,0 @@
-#include <vfluids.h>
-using namespace std;
-
-void orifice(const char *cstr)
-{
-   try
-   {
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-      int numprocs = comm->getNumberOfProcesses();
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname; 
-      double availMem = 0;
-      string geoFile;
-      int numOfThreads = 1;
-
-      if(machine == "BOMBADIL") 
-      {
-    //     pathname = "/work/ehsan/orifice";
-		 pathname = "d:/temp/orifice";
-         availMem = 6.0e9;
-		  int numOfThreads = 1;
-         //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl";
-         //geoFile = "c:/Data/micropart/ktoolcav.stl";
-         //geoFile = "c:/Data/micropart/boxN.stl";
-        geoFile = "d:/Data/Ehsan/orifice.stl";
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-        // pathname = "/work/koskuche/scratch/mcpart/out";
-		  pathname = "/work/ehsan/orifice";
-         availMem = 12.0e9;
-		  geoFile = "/work/ehsan/data/orifice.stl";
-         //geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl";
-
-         numOfThreads = 1;
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      UbLog::reportingLevel() = logINFO;
-      //UbLog::reportingLevel() = logDEBUG1;
-
-      int nodePerBlockX1 =8; //Anzahl an Knoten pro Block
-      int nodePerBlockX2 =8;//(int)16;
-      int nodePerBlockX3 =8;//8; //(int)16;
-
-      double bH = nodePerBlockX1;    //gewuenschte Rand- und Blockbreite
-
-      //Simulation Parameters
-      const int baseLevel = 0;
-      const int refineLevel =1;
-      //length [m]
-      double lSI = 1.55;//223.2;
-      //length [LB]
-      double lLB = 15;
-
-	  
-      double dx =lSI/lLB *2;
-
-      double left_offset = 0;//*0.5;
-      double right_offset  = 159;//0.5;//2*0.5
-      double front_offset = 750;//0.15;
-      double back_offset  = 750;//0.15;
-      double top_offset = 250;//0.0;
-      double bottom_offset  =750;// 70;//0.07;
-	  
-	   LBMReal vLB =0.00016103/5.0*sqrt(2.0);//0.00016103;
-       LBMReal Re;
-       LBMReal rhoLB = 0.0;
-       LBMReal nueLB = 0.0000249;//(vLB*lLB)/Re;
-       Re = (vLB*(500/dx))/nueLB;
-       double dp_Ph=200.0*100000;//
-	   double dp_lb=dp_Ph*0.001*(nueLB*dx)*(nueLB*dx);//nue_ph=10e-6 and dx is in micrometer
-      // LBMReal nueLB = 0.000016103;
-      // LBMReal Re=15000;
-      // LBMReal rhoLB = 0.0;
-      // LBMReal vLB =nueLB*Re/(500.0/dx);
-     // // Re = (vLB*(0.303/dx))/nueLB;
-	   // //Re = (vLB*lLB)/nueLB;
-	  
-      // LBMReal rhoWord = 1e-15;//kg/micrometre^3;//1000.0;
-	  // LBMReal nueRE = 1e6;//micromter^2/s;//0.000001;
-	  // LBMReal  vWorld=300*1e6;//micrometer/s;//nueRE*Re/ (lSI*4.0/9.0);
-	  LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-      //conv->init(lSI*1e-6,30000,rhoWord,vWorld,lLB,1.0/*rhoLB*/,vLB);
-      
-	 
- //////////////////////////////////////////////////////////////////////////
-      GbObject3DPtr refineCube1(new  GbCuboid3D(78.0,-1.0,-1.0, 81/*370.0*/,20.0/*354.0*/,20.0));//-530.0,-280.0, -72.0, 530.0,354.0,70.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance());
-
-   //   GbObject3DPtr refineCube2(new  GbCuboid3D(-230.0,-90.0, -684.0/*-72.0*/, 600,100.0,70.0));
-   //   if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance());
-	  //
-	  // GbObject3DPtr refineCube3(new  GbCuboid3D(-350.0,-957.0/*-120.0*/,-684.0/*-684.0*//* -72.0*/, 1700,957.0/*120.0*/,70.0));
-   //   if(myid == 0) GbSystem3D::writeGeoObject(refineCube3.get(), pathname+"/geo/refineCube3", WbWriterVtkXmlASCII::getInstance());
-	  //
-	  // GbObject3DPtr refineCube4(new  GbCuboid3D(-170.0,-60.0, -684.0/*-72.0*/, 200,60.0,70.0));
-   //   if(myid == 0) GbSystem3D::writeGeoObject(refineCube4.get(), pathname+"/geo/refineCube4", WbWriterVtkXmlASCII::getInstance());
-	  //
-	  // GbObject3DPtr refineCubeInlet(new  GbCuboid3D(-10600.0,-600.0, -600.0/*-72.0*/, -9000,600.0,60.0));
-   //   if(myid == 0) GbSystem3D::writeGeoObject(refineCubeInlet.get(), pathname+"/geo/refineCubeInlet", WbWriterVtkXmlASCII::getInstance());
-	  //
-	  //GbObject3DPtr refineCubeOutlet(new  GbCuboid3D(9000,-600.0, -600.0/*-72.0*/,10550.0 ,600.0,60.0));
-   //   if(myid == 0) GbSystem3D::writeGeoObject(refineCubeOutlet.get(), pathname+"/geo/refineCubeOutlet", WbWriterVtkXmlASCII::getInstance());
-      //////////////////////////////////////////////////////////////////////////
-      D3Q27TriFaceMeshInteractorPtr geoInt;
-	  /////////////////
-      //Grid3DPtr grid(new Grid3D());
-        Grid3DPtr grid(new Grid3D(comm));
-
-      UbSchedulerPtr rSch(new UbScheduler());
-      rSch->addSchedule(100, 200, 20000);
-      RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY));
-
-      std::string opt;
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if/*(cstr== NULL)*/(cstr!= NULL)
-      {
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-         grid = rp->restart(UbSystem::stringTo<int>(opt));
-         rp->reconnect(grid);
-
-         // SetForcingBlockVisitor forcingVisitor(0.0, 0.0, 0.0);
-         // grid->accept(forcingVisitor);
-
-         //D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-		  if(myid==0) UBLOG(logINFO,"Restart finish: " << opt);
-	 
-      }
-      else
-      {
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"L = " <<lLB );
-            UBLOG(logINFO,"v = " <<vLB );
-            UBLOG(logINFO,"rho = " <<rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-			UBLOG(logINFO,"dx = " << dx );
-            UBLOG(logINFO,"Re = " << Re );
-			 UBLOG(logINFO,"dp_lb = " << dp_lb );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-
-         ////////////////////////////////////////////////////////////////////////
-         //Grid
-         //////////////////////////////////////////////////////////////////////////
-         grid->setDeltaX(dx);
-         grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3);
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Geometrie
-         ////////////////////////////////////////////////////////////////////////////
-         GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo"));
-
-         if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance());
-
-         ////////////////////////////////////////////////////////////////////////////
-         //// Randgeometrien erstellen
-         ////////////////////////////////////////////////////////////////////////////
-         double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0;
-          GbCuboid3DPtr plate1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 ));
-
-           GbCuboid3DPtr plate2  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 ));
-           GbCuboid3DPtr plate3  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 ));
-
-          // GbCuboid3DPtr plate1_1  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 ));
-          // GbCuboid3DPtr plate1_2  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 ));
-          // GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0  ));
-          // GbCuboid3DPtr plate1_4  = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 ));
-
-          // GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 ));
-          // GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 ));
-		  
-		   // GbCuboid3DPtr plate2  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 ));
-          // GbCuboid3DPtr plate3  = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 ));
-
-          // GbCuboid3DPtr plate1_1  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, back_offset, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx ));
-          // GbCuboid3DPtr plate1_2  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, -front_offset, top_offset+bH*dx ));
-          // GbCuboid3DPtr plate1_3  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, top_offset, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx+2.0*dx ));
-          // GbCuboid3DPtr plate1_4  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, -bottom_offset ));
-
-          //GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -left_offset-5*bH*dx, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, -left_offset, back_offset+5*bH*dx, top_offset+5*bH*dx ));
-          //GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( right_offset, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, right_offset+5.0*bH*dx, back_offset+5*bH*dx, top_offset+5*bH*dx ));
-		  GbCuboid3DPtr inflow  = GbCuboid3DPtr( new GbCuboid3D( -5.0,-1.5, -1.5, 1.5, 20.0, 20.0 ));
-		  GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 157.50,-1.5, -1.5, 160.5, 20.0, 20.0));
-
-
-		   GbObject3DPtr gridCube(new GbCuboid3D(inflow->getX1Maximum()-4.0*dx,inflow->getX2Minimum()-4.0*dx ,inflow->getX3Minimum()-4.0*dx,
-			   outflow->getX1Minimum()-4.0*dx,outflow->getX2Maximum()-4.0*dx ,outflow->getX3Maximum()-4.0*dx
-                                               ));
-
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-		  
-         if(myid == 0)
-         {
-            GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-            //GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance());
-            //GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance());
-
-            // GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance());
-            // GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance());
-
-            GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance());
-            GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance());
-         }
-   
-
-         if (refineLevel > 0)
-         {
-		  if(myid == 0) UBLOG(logINFO,"Refinement - start");   
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(refineCube1, refineLevel);
-    //        refineHelper.addGbObject(refineCube3, 2);
-			 //refineHelper.addGbObject(refineCube2, 3);
-			 //refineHelper.addGbObject(refineCube4, 4);
-			 //
-			 //refineHelper.addGbObject(refineCubeInlet, 1);
-			 //refineHelper.addGbObject(refineCubeOutlet, 1);
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");   
-		 
-		 
-           // RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, refineLevel-4);
-            // grid->accept(refVisitor1);
-
-			// RefineCrossAndInsideGbObjectBlockVisitor refVisitor3(refineCube3, refineLevel-3);
-            // grid->accept(refVisitor3);
-
-            // RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, refineLevel-2);
-            // grid->accept(refVisitor2);
-			
-			 // RefineCrossAndInsideGbObjectBlockVisitor refVisitor4(refineCube4, refineLevel-1);
-            // grid->accept(refVisitor4);
-
-            // RatioBlockVisitor ratioVisitor(refineLevel);
-            // grid->accept(ratioVisitor);
-
-            // RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-            // grid->accept(ratioSmoothVisitor);
-
-            // OverlapBlockVisitor overlapVisitor(refineLevel);
-            // grid->accept(overlapVisitor);
-
-            // std::vector<int> dirs;
-            // D3Q27System::getLBMDirections(dirs);
-            // SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-            // grid->accept(interDirsVisitor);
-            // if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         //INTERAKTOREN SETZEN (=Randbedingungen)
-         //////////////////////////////////////////////////////////////////////////
-         //oben/unten = Haftrand
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-         geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::INVERSESOLID, Interactor3D::SIMPLE));
-	     geoInt->setUseHalfSpaceCheck(true);
-         geoInt->setRegardPointInObjectTest(true);
-         if(myid == 0) UBLOG(logINFO,"stl - end"); 
-         //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID));
-         // D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID));
-
-         // D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID));
-         // D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID));
-
-         //links: geschwindigkeits-einfluss
-         //Velocity-BC
-         //////////////////////////////////////////////////////////////////////////
-         mu::Parser fct;
-         fct.DefineConst("vx1"  , vLB*9.0/4.0 );
-         //fct = MathUtil::getDuctParaboloidX(0, 250*2.0, -51.08/2, 51.08, vLB*9.0/4.0);
-         fct.SetExpr("vx1");
-         //////////////////////////////////////////////////////////////////////////
-
-         //////////////////////////////////////////////////////////////////////////
-             D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (false, false ,true ,fct, 0, D3Q27BCFunction::INFCONST));
-    //     D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (false, false ,true ,fct,fct,fct, 0, D3Q27BCFunction::INFCONST));
-			 // velBCAdapter->setSecondaryBcOption(2);
-            // D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-		 D3Q27BoundaryConditionAdapterPtr denBCAdapterInlet(new D3Q27DensityBCAdapter(3.0*(dp_lb-rhoLB)));
-        denBCAdapterInlet->setSecondaryBcOption(1);
-        D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, denBCAdapterInlet,Interactor3D::SOLID));
-		 
-         //rechts: druckrand
-         //Density-BC
-         //fuer Kompressibles Modell  rho = 1.0
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-         denBCAdapter->setSecondaryBcOption(1);
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         grid->accept( metisVisitor );
-         
-      //   BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-        // if(myid == 0) ppblocks->update(0);
-         
-         SolidBlocksHelper sd(grid, comm);
-         sd.addInteractor(geoInt);
-         sd.addInteractor(inflowInt);
-         sd.addInteractor(outflowInt);
-         // sd.addInteractor(plate1_1Int);
-         // sd.addInteractor(plate1_2Int);
-         // sd.addInteractor(plate1_3Int);
-         // sd.addInteractor(plate1_4Int);
-         // sd.addInteractor(plate2Int);
-         // sd.addInteractor(plate3Int);
-		   if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         sd.deleteSolidBlocks();     
-         if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         grid->accept( metisVisitor );
-         if(myid == 0) UBLOG(logINFO,"line"<<__LINE__);
-
-         sd.setTransBlocks();
-         if(myid == 0) UBLOG(logINFO,"line"<<__LINE__);
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         if(myid == 0) ppblocks->update(0);
-         if(myid == 0) ppblocks.reset();
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl);
-         unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3);
-         double needMemAll  = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }  
-
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2));
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2));
-
-		
-		  int option = 0;
-		// LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3,option));
-		  LBMKernel3DPtr kernel;
-		kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3, LBMKernelETD3Q27CCLB::MAGIC));
-		//  
-		// kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3, 1));
-		 
-		 
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-		 
-		  if(myid == 0) UBLOG(logINFO,"intractor - start"); 
-          //inflow
-         grid->addAndInitInteractor(inflowInt);
-
-         //outflow
-         grid->addAndInitInteractor(outflowInt);
-         //canal
-         grid->addAndInitInteractor(geoInt);
-         // grid->addAndInitInteractor(plate1_1Int);
-         // grid->addAndInitInteractor(plate1_2Int);
-         // grid->addAndInitInteractor(plate1_3Int);
-         // grid->addAndInitInteractor(plate1_4Int);
-         // grid->addAndInitInteractor(plate2Int);
-         // grid->addAndInitInteractor(plate3Int);
-
-       
-
-         //////////////////////////////////////////////////////////////////////////
-         //connectoren setzen:
-
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         //////////////////////////////////////////////////////////////////////////	 
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-			 
-         //////////////////////////////////////////////////////////////////////////     
-	   //Stroemungsfeld initialisieren
-         //////////////////////////////////////////////////////////////////////////
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0
-         initVisitor.setVx1(0); 
-		   initVisitor.setVx1(0); 
-
-         grid->accept(initVisitor);
-
-         if(myid == 0)
-         {
-            //Abstände "q" als Linien rausschreiben
-            std::vector< UbTupleFloat3 > nodes;
-            std::vector< UbTupleInt2 >   lines;
-            geoInt->addQsLineSet(nodes, lines);
-            WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines);
-         }
-
-          if(myid == 0) UBLOG(logINFO,"Preprozess - end");
-		 
-		 	  ////////////////////////
-           //Set Postprozessors
-           //////////////////////////////////////////////////////////////////////////
-           {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv,  comm, true);
-            grid->doPostProcess(0);
-           }
-	    
-
-      }
-
-      //////////////////////////////////////////////////////////////////////////
-	   // UbSchedulerPtr visSchAv(new UbScheduler());
-		UbSchedulerPtr visSchAv(new UbScheduler(100,100));
-      // visSchAv->addSchedule(100,10,1000);
-      // UbSchedulerPtr resSchAv(new UbScheduler());
-	   UbSchedulerPtr resSchAv(new UbScheduler(100,100));
-      // resSchAv->addSchedule(20,20,1000);
-      AverageValuesPostprocessor       Avpp(grid,  pathname + "/Turbulence/stepAV", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm);
-	  
-	   D3Q27ShearStressPostprocessor  shear(grid,  pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm,iProcessor); 
-	   //D3Q27ShearStressPostprocessor  shear(grid,  pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm);
-	   shear.addInteractor(geoInt);
-	   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  
-
-      UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double outTime = 100.0;
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv,  comm);
-      //////////////////////////////////////////////////////////////////////////
-      //PathLine
-       UbSchedulerPtr plSch(new UbScheduler(5000, 5000));
-      const int numberofparticle=20;
-	
-	  std::vector<UbTupleDouble3 > potisions;
-	  double randomx[numberofparticle];
-	  double randomy[numberofparticle];
-	  double randomz[numberofparticle];
-	  double lowestx,highestx,lowesty,highesty,lowestz,highestz;
-	  if(myid==0)
-	  {
-		  for(int i = 0; i < numberofparticle; i++)
-		  {
-			  double random; 
-	        lowestx =-10300.0;  lowesty =-230;          lowestz =-250;
-	        highestx=-9792.0;  highesty=-330;          highestz=-250; 
-		  
-	      double rangex=(highestx-lowestx),rangey=(highesty-lowesty),rangez=(highestz-lowestz);	
-           randomx[i] = lowestx+(rangex*rand()/(RAND_MAX + 1.0));
-		   randomy[i] = lowesty+(rangey*rand()/(RAND_MAX + 1.0));
-	       randomz[i] = lowestz+(rangez*rand()/(RAND_MAX + 1.0));
-		  //val<1>(potisions[i])= 0.506983973456;
-		  //val<2>(potisions[i]) = lowesty+(rangey*rand()/(RAND_MAX + 1.0));
-		   //val<3>(potisions[i]) = lowestz+(rangez*rand()/(RAND_MAX + 1.0));
-		  }
-		  for (int i=0;i<comm->getNumberOfProcesses();i++)
-		  {
-			  if (i!=0)
-			  {
-			      MPI_Send(randomx,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-				  MPI_Send(randomy,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-				  MPI_Send(randomz,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-			  }
-		  }
-	  }
-	  if (myid!=0)
-	  {
-		  MPI_Status status; 
-		  MPI_Recv(randomx,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-		  MPI_Recv(randomy,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-		  MPI_Recv(randomz,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-	  }
-	  for(int i = 0; i < numberofparticle; i++)
-	  {	
-		  potisions.push_back( makeUbTuple(randomx[i],randomy[i],randomz[i]) );
-		  //val<1>(potisions[i])= 0.506983973456;
-		  //val<2>(potisions[i]) = randomy[i];
-		  //val<3>(potisions[i]) = randomz[i];
-	  }
-	 //  UBLOG(logINFO,"Rank="<<myid<<" positions  = " <<val<1>(potisions)<< " "<<val<2>(potisions)<<" "<< val<3>(potisions));
-	 // D3Q27InterpolationProcessorPtr iProcessor2;
-     // D3Q27PathLinePostprocessorMcpart pathLine(grid, pathname + "/pathLine/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm,potisions, nueLB, iProcessor);
-      //////////////////////////////////////////////////////////////////////////
-      //Simulation
-      //////////////////////////////////////////////////////////////////////////
-
-	  double endTime = 1000.0;
-      UbSchedulerPtr visSch(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
\ No newline at end of file
diff --git a/apps/cpu/micropart/setup.txt b/apps/cpu/micropart/setup.txt
deleted file mode 100644
index 28a2ee7eab79679cb5a8d59a81565a8541699ba6..0000000000000000000000000000000000000000
--- a/apps/cpu/micropart/setup.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-pathname = "/work/koskuche/scratch/micropart2";
-blocknx = 16
-double dx = 0.0134*0.5;
-LBMReal nueLB = 0.0000249*2.0;
-double outTime = 2000;
\ No newline at end of file
diff --git a/apps/cpu/mirror/CMakeLists.txt b/apps/cpu/mirror/CMakeLists.txt
deleted file mode 100644
index b0ff5d5943e630b9544b7dfdcec5f4e780452db8..0000000000000000000000000000000000000000
--- a/apps/cpu/mirror/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(mirror)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(mirror BINARY)
diff --git a/apps/cpu/mirror/mirror.cfg b/apps/cpu/mirror/mirror.cfg
deleted file mode 100644
index f77377566f869e628ea29245133b22b1961140aa..0000000000000000000000000000000000000000
--- a/apps/cpu/mirror/mirror.cfg
+++ /dev/null
@@ -1,54 +0,0 @@
-pathOut = d:/temp/mirror5
-pathGeo = d:/Projects/Spiegelbenchmark/geometry
-pathMesh = d:/Projects/Spiegelbenchmark/meshBoxes
-
-#geometry
-SAE = SAE_GRUNDKOERPER_CFD_INPUT_VERFEINERT_in_m_SOLID.ASCII_D_0.8.stl
-
-
-#refinement meshes
-VRES0600_chopped = VRES0600_chopped.stl 
-VRES0700_chopped = VRES0700_chopped.stl
-VRES0800_Fahrzeug = VRES0800_Fahrzeug.stl
-#VRES0900 = VRES0900_Cube.stl
-VRES1000_ASaeule = VRES1000_ASaeule.stl
-VRES1000_Scheibe = VRES1000_Scheibe.stl
-VRES1000_Spiegel = VRES1000_Spiegel.stl
-VRES1100_Spiegel_fein = VRES1100_Spiegel_fein.stl
-
-
-numOfThreads = 4
-availMem = 10e9
-refineLevel = 11  
-#blockNx = 9 8 9
-blockNx = 14 8 10
-
-#x1min x1max x2min x2max x3min x3max [m]
-#bounding box
-WTUNNEL1 = -35.8 37.4 -31.5 31.5 -0.177 32.8
-
-#refinement cubes
-VRES0100 = -18.4 24.5 -16.2 16.2 -0.187 16.5
-VRES0200 = -10.7 16.8 -8.56 8.56 -0.187 8.82
-VRES0300 = -6.9 13 -4.72 4.72 -0.187 4.98
-VRES0400 = -4.21 10.8 -2.8 2.8 -0.187 3.06
-VRES0500 = -2.87 8.74 -1.84 1.84 -0.187 2.1
-VRES0700 = -2.6 4.69 -1.25 1.25 -0.255 -0.125 
-VRES0900 = -0.823 0.941 -1.15 -0.7 0.502 1.01
-
-#deltaXcoarse = 4096e-3 #level 0
-deltaXcoarse = 2.048 #level 0
-deltaXfine = 1e-3 #level 11
-
-
-refineDistance = 0.3
-
-restartStep = 1
-restartStepStart = 100
-
-outTime = 1
-endTime = 10
-
-logToFile = flase
-
-nupsStep = 1 1 10000000
\ No newline at end of file
diff --git a/apps/cpu/mirror/mirror.cpp b/apps/cpu/mirror/mirror.cpp
deleted file mode 100644
index 99ba78ff170513b6b8e92681b203f74dbc44e7d8..0000000000000000000000000000000000000000
--- a/apps/cpu/mirror/mirror.cpp
+++ /dev/null
@@ -1,572 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-
-using namespace std;
-
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathOut = config.getValue<string>("pathOut");
-      string          pathGeo = config.getValue<string>("pathGeo");
-      string          pathMesh = config.getValue<string>("pathMesh");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      vector<int>     blockNx = config.getVector<int>("blockNx");
-      double          restartStep = config.getValue<double>("restartStep");
-      double          restartStepStart = config.getValue<double>("restartStepStart");
-      double          endTime = config.getValue<double>("endTime");
-      double          outTime = config.getValue<double>("outTime");
-      double          availMem = config.getValue<double>("availMem");
-      int             refineLevel = config.getValue<int>("refineLevel");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      double          deltaXcoarse = config.getValue<double>("deltaXcoarse");
-      double          deltaXfine = config.getValue<double>("deltaXfine");
-      double          refineDistance = config.getValue<double>("refineDistance");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-
-      vector<double>  WTUNNEL1 = config.getVector<double>("WTUNNEL1");
-      vector<double>  VRES0100 = config.getVector<double>("VRES0100");
-      vector<double>  VRES0200 = config.getVector<double>("VRES0200");
-      vector<double>  VRES0300 = config.getVector<double>("VRES0300");
-      vector<double>  VRES0400 = config.getVector<double>("VRES0400");
-      vector<double>  VRES0500 = config.getVector<double>("VRES0500");
-      vector<double>  VRES0700 = config.getVector<double>("VRES0700");
-      vector<double>  VRES0900 = config.getVector<double>("VRES0900");
-
-      string          SAE = config.getValue<string>("SAE");
-      string          VRES0600_chopped = config.getValue<string>("VRES0600_chopped");
-      string          VRES0700_chopped = config.getValue<string>("VRES0700_chopped");
-      string          VRES0800_Fahrzeug = config.getValue<string>("VRES0800_Fahrzeug");
-      //string          VRES0900 = config.getValue<string>("VRES0900");
-      string          VRES1000_ASaeule = config.getValue<string>("VRES1000_ASaeule");
-      string          VRES1000_Scheibe = config.getValue<string>("VRES1000_Scheibe");
-      string          VRES1000_Spiegel = config.getValue<string>("VRES1000_Spiegel");
-      string          VRES1100_Spiegel_fein = config.getValue<string>("VRES1100_Spiegel_fein");
-
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid==0)
-         {
-            const char* str = pathOut.c_str();
-            mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
-         }
-#endif 
-
-         if (myid==0)
-         {
-            stringstream logFilename;
-            logFilename<<pathOut+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-
-      double g_minX1 = WTUNNEL1[0];
-      double g_minX2 = WTUNNEL1[2];
-      double g_minX3 = WTUNNEL1[4];
-
-      double g_maxX1 = WTUNNEL1[1];
-      double g_maxX2 = WTUNNEL1[3];
-      double g_maxX3 = WTUNNEL1[5];
-
-      double blockLength = (double)blockNx[0]*deltaXcoarse;
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-
-
-      double rhoLB = 0.0;
-      double rhoReal = 1.2041; //(kg/m3)
-      double nueReal = 153.5e-7; //m^2/s
-
-      double lReal = 2.048;//m
-      double uReal = 140.0/3.6;
-
-      double Re = uReal*lReal/nueReal;
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double Ma = 140.0/1236.0;//Ma-Real!
-
-      double uLB = Ma*sqrt(1.0/3.0);
-      double nuLB = (uLB*1.0)/Re;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      ////////////////////////////////////////////////////////////////////////
-      //Grid
-      //////////////////////////////////////////////////////////////////////////
-      SPtr<Grid3D> grid(new Grid3D(comm));
-      grid->setDeltaX(deltaXcoarse);
-      grid->setBlockNX(blockNx[0], blockNx[1], blockNx[2]);
-
-      SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-      GenBlocksGridVisitor genBlocks(gridCube);
-      grid->accept(genBlocks);
-
-      grid->setPeriodicX1(false);
-      grid->setPeriodicX2(false);
-      grid->setPeriodicX3(false);
-
-      //BC adapters
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-
-      SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter());
-      slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm()));
-
-      mu::Parser fct;
-      fct.SetExpr("U");
-      fct.DefineConst("U", uLB);
-      SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-      velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
-
-      SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB));
-      denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
-
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-      bcVisitor.addBC(slipBCAdapter);
-      bcVisitor.addBC(velBCAdapter);
-      bcVisitor.addBC(denBCAdapter);
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-    
-      //////////////////////////////////////////////////////////////////////////
-
-
-      if (grid->getTimeStep()==0)
-      {
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "* Re                  = "<<Re);
-            UBLOG(logINFO, "* Ma                  = "<<Ma);
-            UBLOG(logINFO, "* velocity (uReal)    = "<<uReal<<" m/s");
-            UBLOG(logINFO, "* viscosity (nuReal)  = "<<nueReal<<" m^2/s");
-            UBLOG(logINFO, "* velocity LB (uLB)   = "<<uLB);
-            UBLOG(logINFO, "* viscosity LB (nuLB) = "<<nuLB);
-            UBLOG(logINFO, "* dx_base             = "<<deltaXcoarse<<" m");
-            UBLOG(logINFO, "* dx_refine           = "<<deltaXfine<<" m");
-            UBLOG(logINFO, "* number of levels    = "<<refineLevel+1);
-            UBLOG(logINFO, "* number of threads   = "<<numOfThreads);
-            UBLOG(logINFO, "* number of processes = "<<comm->getNumberOfProcesses());
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         GbCuboid3DPtr geoVRES0100(new GbCuboid3D(VRES0100[0], VRES0100[2], VRES0100[4], VRES0100[1], VRES0100[3], VRES0100[5]));
-         if (myid==0) GbSystem3D::writeGeoObject(geoVRES0100.get(), pathOut+"/geo/geoVRES0100", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr geoVRES0200(new GbCuboid3D(VRES0200[0], VRES0200[2], VRES0200[4], VRES0200[1], VRES0200[3], VRES0200[5]));
-         if (myid==0) GbSystem3D::writeGeoObject(geoVRES0200.get(), pathOut+"/geo/geoVRES0200", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr geoVRES0300(new GbCuboid3D(VRES0300[0], VRES0300[2], VRES0300[4], VRES0300[1], VRES0300[3], VRES0300[5]));
-         if (myid==0) GbSystem3D::writeGeoObject(geoVRES0300.get(), pathOut+"/geo/geoVRES0300", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr geoVRES0400(new GbCuboid3D(VRES0400[0], VRES0400[2], VRES0400[4], VRES0400[1], VRES0400[3], VRES0400[5]));
-         if (myid==0) GbSystem3D::writeGeoObject(geoVRES0400.get(), pathOut+"/geo/geoVRES0400", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr geoVRES0500(new GbCuboid3D(VRES0500[0], VRES0500[2], VRES0500[4], VRES0500[1], VRES0500[3], VRES0500[5]));
-         if (myid==0) GbSystem3D::writeGeoObject(geoVRES0500.get(), pathOut+"/geo/geoVRES0500", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr geoVRES0700(new GbCuboid3D(VRES0700[0], VRES0700[2], VRES0700[4], VRES0700[1], VRES0700[3], VRES0700[5]));
-         if (myid==0) GbSystem3D::writeGeoObject(geoVRES0700.get(), pathOut+"/geo/geoVRES0700", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr geoVRES0900(new GbCuboid3D(VRES0900[0], VRES0900[2], VRES0900[4], VRES0900[1], VRES0900[3], VRES0900[5]));
-         if (myid==0) GbSystem3D::writeGeoObject(geoVRES0900.get(), pathOut+"/geo/geoVRES0900", WbWriterVtkXmlASCII::getInstance());
-
-         SPtr<D3Q27Interactor> geoVRES0700Int(new D3Q27Interactor(geoVRES0700, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         //GEO
-         if (myid==0) UBLOG(logINFO, "Read geoSAE:start");
-         SPtr<GbTriFaceMesh3D> geoSAE = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+SAE, "meshSAE", GbTriFaceMesh3D::KDTREE_SAHPLIT, true));
-         if (myid==0) UBLOG(logINFO, "Read meshSAE:end");
-         if (myid==0) GbSystem3D::writeGeoObject(geoSAE.get(), pathOut+"/geo/meshSAE", WbWriterVtkXmlBinary::getInstance());
-
-         SPtr<D3Q27TriFaceMeshInteractor> geoSAEInteractor(new D3Q27TriFaceMeshInteractor(geoSAE, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-
-
-         if (myid==0)
-         {
-            //////////////////////////////////////////
-            //meshes
-            if (myid==0) UBLOG(logINFO, "Read meshVRES0600:start");
-            SPtr<GbTriFaceMesh3D> meshVRES0600 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES0600_chopped, "meshVRES0600", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read meshVRES0600:end");
-            if (myid==0) GbSystem3D::writeGeoObject(meshVRES0600.get(), pathOut+"/geo/meshVRES0600", WbWriterVtkXmlBinary::getInstance());
-            SPtr<D3Q27TriFaceMeshInteractor> meshVRES0600Interactor(new D3Q27TriFaceMeshInteractor(meshVRES0600, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            if (myid==0) UBLOG(logINFO, "Read meshVRES0700:start");
-            SPtr<GbTriFaceMesh3D> meshVRES0700 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES0700_chopped, "meshVRES0700", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read meshVRES0700:end");
-            if (myid==0) GbSystem3D::writeGeoObject(meshVRES0700.get(), pathOut+"/geo/meshVRES0700", WbWriterVtkXmlBinary::getInstance());
-            SPtr<D3Q27TriFaceMeshInteractor> meshVRES0700Interactor(new D3Q27TriFaceMeshInteractor(meshVRES0700, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            if (myid==0) UBLOG(logINFO, "Read meshVRES0800:start");
-            SPtr<GbTriFaceMesh3D> meshVRES0800 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES0800_Fahrzeug, "meshVRES0800", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read meshVRES0800:end");
-            if (myid==0) GbSystem3D::writeGeoObject(meshVRES0800.get(), pathOut+"/geo/meshVRES0800", WbWriterVtkXmlBinary::getInstance());
-            SPtr<D3Q27TriFaceMeshInteractor> meshVRES0800Interactor(new D3Q27TriFaceMeshInteractor(meshVRES0800, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            //if (myid==0) UBLOG(logINFO, "Read meshVRES0900:start");
-            //SPtr<GbTriFaceMesh3D> meshVRES0900 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES0900, "meshVRES0900", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            //if (myid==0) UBLOG(logINFO, "Read meshVRES0900:end");
-            //if (myid==0) GbSystem3D::writeGeoObject(meshVRES0900.get(), pathOut+"/geo/meshVRES0900", WbWriterVtkXmlBinary::getInstance());
-            //SPtr<D3Q27TriFaceMeshInteractor> meshVRES0900Interactor(new D3Q27TriFaceMeshInteractor(meshVRES0900, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            if (myid==0) UBLOG(logINFO, "Read meshVRES1000ASaeule:start");
-            SPtr<GbTriFaceMesh3D> meshVRES1000ASaeule = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES1000_ASaeule, "meshVRES1000ASaeule", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read meshVRES1000ASaeule:end");
-            if (myid==0) GbSystem3D::writeGeoObject(meshVRES1000ASaeule.get(), pathOut+"/geo/meshVRES1000ASaeule", WbWriterVtkXmlBinary::getInstance());
-            SPtr<D3Q27TriFaceMeshInteractor> meshVRES1000ASaeuleInteractor(new D3Q27TriFaceMeshInteractor(meshVRES1000ASaeule, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            if (myid==0) UBLOG(logINFO, "Read meshVRES1000Scheibe:start");
-            SPtr<GbTriFaceMesh3D> meshVRES1000Scheibe = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES1000_Scheibe, "meshVRES1000Scheibe", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read meshVRES1000Scheibe:end");
-            if (myid==0) GbSystem3D::writeGeoObject(meshVRES1000Scheibe.get(), pathOut+"/geo/meshVRES1000Scheibe", WbWriterVtkXmlBinary::getInstance());
-            SPtr<D3Q27TriFaceMeshInteractor> meshVRES1000ScheibeInteractor(new D3Q27TriFaceMeshInteractor(meshVRES1000Scheibe, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            if (myid==0) UBLOG(logINFO, "Read meshVRES1000Spiegel:start");
-            SPtr<GbTriFaceMesh3D> meshVRES1000Spiegel = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES1000_Spiegel, "meshSpiegel", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read meshVRES1000Spiegel:end");
-            if (myid==0) GbSystem3D::writeGeoObject(meshVRES1000Spiegel.get(), pathOut+"/geo/meshVRES1000Spiegel", WbWriterVtkXmlBinary::getInstance());
-            SPtr<D3Q27TriFaceMeshInteractor> meshVRES1000SpiegelInteractor(new D3Q27TriFaceMeshInteractor(meshVRES1000Spiegel, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            if (myid==0) UBLOG(logINFO, "Read meshVRES1100SpiegelFine:start");
-            SPtr<GbTriFaceMesh3D> meshVRES1100SpiegelFine = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES1100_Spiegel_fein, "meshSpiegelFine", GbTriFaceMesh3D::KDTREE_SAHPLIT, false));
-            if (myid==0) UBLOG(logINFO, "Read meshVRES1100SpiegelFine:end");
-            if (myid==0) GbSystem3D::writeGeoObject(meshVRES1100SpiegelFine.get(), pathOut+"/geo/meshVRES1100SpiegelFine", WbWriterVtkXmlBinary::getInstance());
-            SPtr<D3Q27TriFaceMeshInteractor> meshVRES1100SpiegelFineInteractor(new D3Q27TriFaceMeshInteractor(meshVRES1100SpiegelFine, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            UBLOG(logINFO, "Refinement - start");
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm);
-            ////refineHelper.addGbObject(geoVRES0100, refineLevel-4);
-            //refineHelper.addGbObject(geoVRES0200, 1);
-            //refineHelper.addGbObject(geoVRES0300, 2);
-            //refineHelper.addGbObject(geoVRES0400, 3);
-            //refineHelper.addGbObject(geoVRES0500, 4);
-            //refineHelper.addGbObject(geoVRES0700, 7);
-            //refineHelper.addGbObject(geoVRES0900, 9);
-            //refineHelper.refine();
-
-            RefineCrossAndInsideGbObjectBlockVisitor geoVRES0200RefVisitor(geoVRES0200, 1);
-            grid->accept(geoVRES0200RefVisitor);
-            RefineCrossAndInsideGbObjectBlockVisitor geoVRES0300RefVisitor(geoVRES0300, 2);
-            grid->accept(geoVRES0300RefVisitor);
-            RefineCrossAndInsideGbObjectBlockVisitor geoVRES0400RefVisitor(geoVRES0400, 3);
-            grid->accept(geoVRES0400RefVisitor);
-            RefineCrossAndInsideGbObjectBlockVisitor geoVRES0500RefVisitor(geoVRES0500, 4);
-            grid->accept(geoVRES0500RefVisitor);
-
-
-            int rank = grid->getRank();
-            grid->setRank(0);
-            meshVRES0600Interactor->refineBlockGridToLevel(5, 0.0, 0.0);
-            meshVRES0700Interactor->refineBlockGridToLevel(6, -0.6, 0.0);
-
-            UBLOG(logINFO, "Refinement - geoVRES0700");
-            RefineCrossAndInsideGbObjectBlockVisitor geoVRES0700RefVisitor(geoVRES0700, 7);
-            grid->accept(geoVRES0700RefVisitor);
-
-            UBLOG(logINFO, "Refinement - geoSAEInteractor");
-            meshVRES0800Interactor->refineBlockGridToLevel(8, -0.5, 0.0);
-            //geoSAEInteractor->refineBlockGridToLevel(8, 0.0, 0.1);
-
-            //SetSolidOrTransBlockVisitor v(geoSAEInteractor, SetSolidOrTransBlockVisitor::SOLID);
-            //grid->accept(v);
-            //std::vector<SPtr<Block3D>>& sb = geoSAEInteractor->getSolidBlockSet();
-            //BOOST_FOREACH(SPtr<Block3D> block, sb)
-            //{
-            //   grid->deleteBlock(block);
-            //}
-            //geoSAEInteractor->removeSolidBlocks();
-            //geoSAEInteractor->removeTransBlocks();
-
-            UBLOG(logINFO, "Refinement - geoVRES0900RefVisitor");
-            //meshVRES0900Interactor->refineBlockGridToLevel(9, 0.0, 0.0);
-            RefineCrossAndInsideGbObjectBlockVisitor geoVRES0900RefVisitor(geoVRES0900, 9);
-            grid->accept(geoVRES0900RefVisitor);
-
-            UBLOG(logINFO, "Refinement - meshVRES1000ASaeuleInteractor");
-            meshVRES1000ASaeuleInteractor->refineBlockGridToLevel(10, -0.1, 0.0);
-
-            UBLOG(logINFO, "Refinement - meshVRES1000ScheibeInteractor");
-            meshVRES1000ScheibeInteractor->refineBlockGridToLevel(10, -0.1, 0.0);
-
-            UBLOG(logINFO, "Refinement - meshVRES1000SpiegelInteractor");
-            meshVRES1000SpiegelInteractor->refineBlockGridToLevel(10, -0.12, 0.0);
-
-            UBLOG(logINFO, "Refinement - meshVRES1100SpiegelFineInteractor");
-            meshVRES1100SpiegelFineInteractor->refineBlockGridToLevel(11, -0.12, 0.0);
-            grid->setRank(rank);
-
-            ///////////////////////////////////////////////////////////
-            ///BOX
-            //GbCuboid3DPtr geoBox1(new GbCuboid3D(-0.495, -0.8, 0.545, -0.045, -0.7, 0.795));
-            //if (myid==0) GbSystem3D::writeGeoObject(geoBox1.get(), pathOut+"/geo/geoBox1", WbWriterVtkXmlASCII::getInstance());
-            //CoarsenCrossAndInsideGbObjectBlockVisitor geoBox1Visitor(geoBox1, 11, 11);
-            //grid->accept(geoBox1Visitor);
-            //////////////////////////////////////////////////////////////////////////
-
-
-            if (myid==0)
-            {
-               WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-               ppblocks.process(0);
-            }
-
-            RatioBlockVisitor ratioVisitor(refineLevel);
-            CheckRatioBlockVisitor checkRatio(refineLevel);
-            int count = 0;
-
-            do {
-               UBLOG(logINFO, "Refinement - RatioBlockVisitor");
-               grid->accept(ratioVisitor);
-               checkRatio.resetState();
-               UBLOG(logINFO, "Refinement - CheckRatioBlockVisitor");
-               grid->accept(checkRatio);
-               if (myid==0) UBLOG(logINFO, "count ="<<count++<<" state="<<checkRatio.getState());
-            } while (!checkRatio.getState());
-
-            UBLOG(logINFO, "Refinement - OverlapBlockVisitor");
-            OverlapBlockVisitor overlapVisitor(refineLevel, false);
-            grid->accept(overlapVisitor);
-
-            if (myid==0) UBLOG(logINFO, "Refinement - end");
-
-            if (myid==0)
-            {
-               WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-               ppblocks.process(1);
-            }
-         }
-
-         grid->updateDistributedBlocks(comm);
-
-         if (myid == 0) UBLOG(logINFO, "SetInterpolationDirsBlockVisitor");
-         std::vector<int> dirs;
-         for (int i = D3Q27System::E; i<=D3Q27System::TS; i++)
-         {
-            dirs.push_back(i);
-         }
-         SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-         grid->accept(interDirsVisitor);
-
-         //////////////////////////////////////////////////////////////////////////
-
-
-         //walls
-         GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathOut+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathOut+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         //wall interactors
-         SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, slipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, slipBCAdapter, Interactor3D::SOLID));
-
-         //walls
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         //wall interactors
-         SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slipBCAdapter, Interactor3D::SOLID));
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathOut+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         //inflow
-         SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-         //outflow
-         SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(inflowIntr);
-         intHelper.addInteractor(outflowIntr);
-         intHelper.addInteractor(addWallYminInt);
-         intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(geoVRES0700Int);
-         intHelper.addInteractor(geoSAEInteractor);
-         //////////////////////////////////////////////////////////////////////////
-         intHelper.selectBlocks();
-
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         if (myid==0)
-         {
-            SPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppblocks->process(2);
-            ppblocks.reset();
-         }
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blockNx[0])* (unsigned long long)(blockNx[1])* (unsigned long long)(blockNx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blockNx[0]+ghostLayer) * (blockNx[1]+ghostLayer) * (blockNx[2]+ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27*sizeof(double)+sizeof(int)+sizeof(float)*4));
-         double needMem = needMemAll/double(comm->getNumberOfProcesses());
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Number of blocks = "<<numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = "<<numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level<=maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level "<<level<<" = "<<nobl);
-               UBLOG(logINFO, "Number of nodes for level "<<level<<" = "<<nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = "<<needMemAll<<" bytes");
-            UBLOG(logINFO, "Necessary memory per process = "<<needMem<<" bytes");
-            UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes");
-         }
-
-         SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], CompressibleCumulantLBMKernel::NORMAL));
-
-         SPtr<BCProcessor> bcProc;
-
-         bcProc = SPtr<BCProcessor>(new BCProcessor());
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel>0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         //BC
-         intHelper.setBC();
-
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-         InitDistributionsBlockVisitor initVisitor(nuLB, rhoLB);
-         initVisitor.setVx1(fct);
-         initVisitor.setNu(nuLB);
-         grid->accept(initVisitor);
-
-         ////set connectors
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //Postrozess
-         SPtr<UbScheduler> geoSch(new UbScheduler(1));
-         SPtr<CoProcessor> ppgeo(new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-         ppgeo->process(0);
-         ppgeo.reset();
-
-         if (myid==0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         grid->accept(bcVisitor);
-      }
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTime));
-
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm);
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe());
-      }
-
-      const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::HYBRID));
-      if (myid==0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid==0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr<<e.what()<<endl<<flush;
-   }
-   catch (std::string& s)
-   {
-      cerr<<s<<endl;
-   }
-   catch (...)
-   {
-      cerr<<"unknown exception"<<endl;
-   }
-
-}
-
-int main(int argc, char* argv[])
-{
-
-   if (argv!=NULL)
-   {
-      if (argv[1]!=NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout<<"Configuration file must be set!: "<<argv[0]<<" <config file>"<<endl<<std::flush;
-      }
-   }
-
-   return 0;
-}
-
diff --git a/apps/cpu/mirror/mirrorV1.cfg b/apps/cpu/mirror/mirrorV1.cfg
deleted file mode 100644
index f06bb8efb096a7328edf693cd50f060c9aa727fa..0000000000000000000000000000000000000000
--- a/apps/cpu/mirror/mirrorV1.cfg
+++ /dev/null
@@ -1,60 +0,0 @@
-pathOut = d:/temp/mirror5
-pathGeo = d:/Projects/Spiegelbenchmark/geometry
-pathMesh = d:/Projects/Spiegelbenchmark/meshBoxes
-
-#geometry
-SAE = SAE_GRUNDKOERPER_CFD_INPUT_VERFEINERT_in_m_SOLID.ASCII_D_0.8.stl
-
-
-#refinement meshes
-VRES0600_chopped = VRES0600_chopped.stl 
-VRES0700_chopped = VRES0700_chopped.stl
-VRES0800_Fahrzeug = VRES0800_Fahrzeug.stl
-#VRES0900 = VRES0900_Cube.stl
-VRES1000_ASaeule = VRES1000_ASaeule.stl
-VRES1000_Scheibe = VRES1000_Scheibe.stl
-VRES1000_Spiegel = VRES1000_Spiegel.stl
-VRES1100_Spiegel_fein = VRES1100_Spiegel_fein.stl
-
-
-numOfThreads = 4
-availMem = 10e9
-refineLevel = 11  
-#blockNx = 9 8 9
-blockNx = 5 5 5
-
-#x1min x1max x2min x2max x3min x3max [m]
-#bounding box
-WTUNNEL1 = -35.8 37.4 -31.5 31.5 -0.177 32.8
-
-#refinement cubes
-VRES0100 = -18.4 24.5 -16.2 16.2 -0.187 16.5
-VRES0200 = -10.7 16.8 -8.56 8.56 -0.187 8.82
-VRES0300 = -6.9 13 -4.72 4.72 -0.187 4.98
-VRES0400 = -4.21 10.8 -2.8 2.8 -0.187 3.06
-VRES0500 = -2.87 8.74 -1.84 1.84 -0.187 2.1
-VRES0700 = -2.6 4.69 -1.25 1.25 -0.255 -0.125 
-VRES0900 = -0.823 0.941 -1.15 -0.7 0.502 1.01
-
-#deltaXcoarse = 4096e-3 #level 0
-deltaXcoarse = 2.048 #level 0
-deltaXfine = 1e-3 #level 11
-
-
-refineDistance = 0.3
-
-restartStep = 1
-restartStepStart = 100
-
-outTime = 1
-endTime = 10
-
-logToFile = false
-
-porousTralingEdge = false
-
-thinWall = false
-
-testBox=false
-
-nupsStep = 1 1 10000000
\ No newline at end of file
diff --git a/apps/cpu/mpi_benchmark/mpib.cpp b/apps/cpu/mpi_benchmark/mpib.cpp
index 8ddf7bde30aaaf2f6707e3ac53e577919c546f40..8cde2fa67a41d6f635d70633c4e46f73e4e15fff 100644
--- a/apps/cpu/mpi_benchmark/mpib.cpp
+++ b/apps/cpu/mpi_benchmark/mpib.cpp
@@ -67,10 +67,10 @@ void run(string configname)
 
       }
 
-      LBMReal uLB = 0.05;
-      LBMReal Re = 20.0;
-      LBMReal rhoLB = 0.0;
-      LBMReal nueLB = 0.05842;
+      real uLB = 0.05;
+      real Re = 20.0;
+      real rhoLB = 0.0;
+      real nueLB = 0.05842;
       
       SPtr<Grid3D> grid(new Grid3D(comm));
       
@@ -195,7 +195,7 @@ void run(string configname)
          }
 
          SPtr<LBMKernel> kernel;
-         kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], IncompressibleCumulantLBMKernel::NORMAL));
+         kernel = SPtr<LBMKernel>(new InK15CompressibleNavierStokes(blockNx[0], blockNx[1], blockNx[2], InK15CompressibleNavierStokes::NORMAL));
 
          SPtr<BCProcessor> bcProc(new BCProcessor());
          kernel->setBCProcessor(bcProc);
diff --git a/apps/cpu/musis/CMakeLists.txt b/apps/cpu/musis/CMakeLists.txt
deleted file mode 100644
index 829e61a8a006ffb53e5c479224245bcc906b3175..0000000000000000000000000000000000000000
--- a/apps/cpu/musis/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(musis)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(musis BINARY)
diff --git a/apps/cpu/musis/config.txt b/apps/cpu/musis/config.txt
deleted file mode 100644
index 33d618aa626333c2dea4d22cd69dc50056eac6f4..0000000000000000000000000000000000000000
--- a/apps/cpu/musis/config.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-#number of threads
-numOfThreads = 1
-
-#block dimensions
-blocknx1 = 12
-blocknx2 = 12
-blocknx3 = 12
-
-#grid refinement
-refineLevel = 2
-numBaseBlock_L1 = 1
-
-#physical length
-L1 = 0.07
-L2 = 0.07
-L3 = 0.4169
-
-#material parameter
-nueLB = 0.0016666666667
-
-#Forcing
-ForcingX1 = 1.0e-7
-
-path = "J:/TBL/scratch/C100_DrySampleTest/"
-
-# musis sample
-geoFile = "J:/TBL/TBL_Sw_Geos/C100/C100MulTest.geo.00000000.raw"
-geoDimX1 = 78
-geoDimX2 = 78
-geoDimX3 = 45
-
-#paraview visualization
-outTime = 1.0
-endTime = 7.0
-
-#retart parameters
-restartDump = 3.0
-
-#data measurement
-calcBegin = 500.0
-calcEnd	 = 1000.0
-calcIntervall = 50.0
-
-
-#BGK=0, CLB=1, CCLB=2
-kernel = 2
\ No newline at end of file
diff --git a/apps/cpu/musis/musis.cpp b/apps/cpu/musis/musis.cpp
deleted file mode 100644
index 4ac78943b03b6f05a4ad172eea3820cd611c77b5..0000000000000000000000000000000000000000
--- a/apps/cpu/musis/musis.cpp
+++ /dev/null
@@ -1,474 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <vfluids.h>
-
-using namespace std;
-
-
-void run(const char *cstr1, const char *cstr2)
-{
-   
-   try
-   {
-      ConfigFileReader cf(cstr1);
-      if ( !cf.read() )
-      {
-         std::string exceptionText = "Unable to read configuration file\n";
-         throw exceptionText;
-      }
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname = cf.getValue("path"); 
-      int numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfThreads"));
-      double availMem = 0;
-      string geoFile;
-
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-
-      int d1, d2, d3; // for reading musis sample 
-
-      if(machine == "BOMBADIL") 
-      //if(machine == "YWANG")
-      {
-         //pathname = "J:/TBL/scratch/C100_DrySampleTest/";
-         //geoFile  = "J:/TBL/TBL_Sw_Geos/CS518/TBL_CS518_MulSim02.geo.00000000.raw";
-         pathname = cf.getValue("path"); 
-         geoFile  = cf.getValue("geoFile"); 
-         numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfThreads"));
-         
-         availMem = 3.0e9;
-         d1 = UbSystem::stringTo<int>(cf.getValue("geoDimX1"));;
-         d2 = UbSystem::stringTo<int>(cf.getValue("geoDimX2"));;
-         d3 = UbSystem::stringTo<int>(cf.getValue("geoDimX3"));;
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         //pathname = "/hpc3lustre/work/wang/TBL/scratch/CS518_DrySampleTest/";
-         //geoFile = "/hpc3lustre/work/wang/TBL/TBL_Sw_Geos/CS518.X2Y2Z1/TBL_CS518_MulSim02.geo.00030000.raw";
-         //numOfThreads = 1;
-         pathname = cf.getValue("path"); 
-         geoFile  = cf.getValue("geoFile"); 
-         numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfThreads"));
-         availMem = 12.0e9;
-
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-         d1 = UbSystem::stringTo<int>(cf.getValue("geoDimX1"));;
-         d2 = UbSystem::stringTo<int>(cf.getValue("geoDimX2"));;
-         d3 = UbSystem::stringTo<int>(cf.getValue("geoDimX3"));;
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-      
-      const int baseLevel = 0;
-      const int refineLevel = UbSystem::stringTo<int>(cf.getValue("refineLevel"));//2;
-      const int blocknx1    = UbSystem::stringTo<int>(cf.getValue("blocknx1"));//12; 
-      const int blocknx2    = UbSystem::stringTo<int>(cf.getValue("blocknx1"));//12;
-      const int blocknx3    = UbSystem::stringTo<int>(cf.getValue("blocknx1"));//12;
-
-      const int numBaseBlockL1 = UbSystem::stringTo<int>(cf.getValue("numBaseBlock_L1"));//1;
-      ////////////////////////////////////////////////////////////////////////////
-      //// Geometrie
-      ////////////////////////////////////////////////////////////////////////////
-      double L1 = UbSystem::stringTo<double>(cf.getValue("L1"));//0.07; //m
-      double L2 = UbSystem::stringTo<double>(cf.getValue("L2"));//0.07; //m
-      double L3 = UbSystem::stringTo<double>(cf.getValue("L3"));//0.0379 + 0.379; //m
-      double dx = L1/(blocknx1*numBaseBlockL1)/(pow(2.0,refineLevel)); //0.0379/272.0; //m
-
-      LBMReal rhoReal = 1.0; //kg/m^3
-      LBMReal uReal = 5.0;  //m/s
-      LBMReal uLB = 0.1;
-      LBMReal nueLB = UbSystem::stringTo<double>(cf.getValue("nueLB"));//0.00166666666667;
-      LBMReal Re = 0.0;
-      LBMReal rhoLB = 0.0;
-
-      //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter(1.0, 1/sqrt(3.0)*(uReal/uLB), 1.0, 1.0/dx, dx*dx*dx));
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-      
-      //bounding box
-      double d_minX1 = 0.0;
-      double d_minX2 = 0.0;
-      double d_minX3 = 0.0;
-
-      double d_maxX1 = L1;
-      double d_maxX2 = L2;
-      double d_maxX3 = L3;
-
-      double offs = 0.0;
-
-      double g_minX1 = d_minX1-offs;
-      double g_minX2 = d_minX2-offs;;
-      double g_minX3 = d_minX3-offs;
-
-      double g_maxX1 = d_maxX1+offs;
-      double g_maxX2 = d_maxX2+offs;
-      double g_maxX3 = d_maxX3+offs;
-
-      double blockLength = blocknx1 * dx;
-
-      Grid3DPtr grid(new Grid3D(comm));
-      grid->setPeriodicX1(true);
-      grid->setPeriodicX2(true);
-      grid->setPeriodicX3(false);
-      grid->setDeltaX(pow(2.0,refineLevel)*dx); // for coarse
-      grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-      double restartDump = UbSystem::stringTo<double>(cf.getValue("restartDump"));
-      UbSchedulerPtr rSch(new UbScheduler(restartDump));
-      RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY));
-      //UbSchedulerPtr emSch(new UbScheduler(1000, 1000));
-      //EmergencyExitPostprocessor em(grid, emSch, pathname+"/checkpoints/emex.txt", rp, comm);
-
-      std::string opt;
-      if(cstr2!= NULL)
-         opt = std::string(cstr2);
-
-      LBMKernel3DPtr kernel;
-      double ForcingX1 = UbSystem::stringTo<double>(cf.getValue("ForcingX1"));
-
-      mu::Parser fctForcingX1;
-      mu::Parser fctForcingX2;
-      mu::Parser fctForcingX3;
-
-      fctForcingX2.SetExpr("0.0");
-      fctForcingX3.SetExpr("0.0");
-      fctForcingX1.SetExpr("c3*(tanh(c1*(x3-c2))+c4)*Fx1*dx");
-      //fctForcingX1.SetExpr("Fx1*dx");
-      fctForcingX1.DefineConst("Fx1", ForcingX1);
-      fctForcingX1.DefineConst("c1", 0.5);       // incline
-      double ForcingLevel = 0.039/dx;
-      fctForcingX1.DefineConst("c2", ForcingLevel); // forcing switch level
-      fctForcingX1.DefineConst("c3", 0.5); // const always
-      fctForcingX1.DefineConst("c4", 1.0); // const always
-      if(myid == 0) UBLOG(logINFO,"Forcing Level = " << ForcingLevel );
-
-      if(cstr2!= NULL)
-      {
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-         grid = rp->restart(UbSystem::stringTo<int>(opt));
-         //rp->reconnect(grid);
-
-         //Forcing setzen falls nötig
-         SetForcingBlockVisitor forcingVisitor(fctForcingX1,fctForcingX2,fctForcingX3);
-         grid->accept(forcingVisitor); 
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         ////domain decomposition //useful if pro mpi processor contains more than 1 thread 
-         //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         //grid->accept(pqPartVisitor);
-
-         //int option = 0;
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, option));
-
-
-        
-      }
-      else
-      {
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"L = " << L1/dx );
-            UBLOG(logINFO,"v = " << uLB );
-            UBLOG(logINFO,"rho = " << rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-            UBLOG(logINFO,"Re = " << Re );
-            UBLOG(logINFO,"dx = " << dx );
-            //UBLOG(logINFO,conv->toString() );
-            UBLOG(logINFO,"number of levels = " << refineLevel+1 );
-            UBLOG(logINFO,"numOfThreads = " << numOfThreads );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-         // read musis geometry 
-         //if(myid ==0) UBLOG(logINFO,"Read geometry: start");
-         //GbVoxelMatrix3DPtr vmatrix(new GbVoxelMatrix3D(d1, d2, d3, float(GbVoxelMatrix3D::FLUID),8.0,8.0)); 
-
-         //vmatrix->readMatrixFromRawFile<char>(geoFile);
-         //if(myid ==0) UBLOG(logINFO,"Read geometry: end");
-
-         //vmatrix->setVoxelMatrixDelta(L1/(d1-1),L1/(d1-1),L1/(d1-1));
-
-         //if(myid ==0) UBLOG(logINFO,"Write geometry: start");
-         //if(myid == 0) vmatrix->writeToLegacyVTK(pathname+"/geo/geo");
-         //if(myid ==0) UBLOG(logINFO,"Write geometry: end");
-         
-         // domain
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-         //refinement area
-         GbObject3DPtr refineCube1(new  GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+8.0*0.0379));
-         if(myid ==0) GbSystem3D::writeGeoObject(refineCube1.get(),pathname + "/geo/refineCube1", WbWriterVtkXmlBinary::getInstance());
-         GbObject3DPtr refineCube2(new  GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+4.0*0.0379));
-         if(myid ==0) GbSystem3D::writeGeoObject(refineCube2.get(),pathname + "/geo/refineCube2", WbWriterVtkXmlBinary::getInstance());
-
-         // walls
-         GbCuboid3DPtr addWallZmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-         GbCuboid3DPtr addWallZmax (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-         
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-
-         if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");   
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(refineCube1, refineLevel-1);
-            refineHelper.addGbObject(refineCube2, refineLevel);
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");   
-         }
-         
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         grid->accept( metisVisitor );
-
-         SolidBlocksHelper sd(grid, comm);
-
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bc_noslip(new D3Q27NoSlipBCAdapter(bbOption));
-         D3Q27BoundaryConditionAdapterPtr bc_slip(new D3Q27SlipBCAdapter(bbOption));
-         // porous geometry
-         //D3Q27InteractorPtr geoInt = D3Q27InteractorPtr ( new D3Q27Interactor(vmatrix, grid, bc_noslip,Interactor3D::SOLID));
-
-         //mu::Parser fct; 
-         //fct.DefineConst("U", uLB);//Vx
-         //fct.SetExpr("U"); 
-         
-         //D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); 
-
-         //walls
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bc_noslip,Interactor3D::SOLID));
-         ////up velocity
-         //D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, velBCAdapter,Interactor3D::SOLID)); 
-         //up slip
-         D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bc_slip  ,Interactor3D::SOLID));
-         
-         //sd.addInteractor(geoInt);
-         sd.addInteractor(addWallZminInt);
-         sd.addInteractor(addWallZmaxInt);
-      
-         sd.deleteSolidBlocks();
-
-         grid->accept( metisVisitor );
-
-
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx1) * (blocknx2) * (blocknx3);
-         unsigned long nod = nob * (blocknx1) * (blocknx2) * (blocknx3);
-         unsigned long nodg = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl);
-         double needMemAll  = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for(int level = minInitLevel; level<=maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO,"Number of blocks for level " << level <<" = " << nobl);
-               UBLOG(logINFO,"Number of nodes for level " << level <<" = " << nobl*nodb);
-            }
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-
-         }            
-
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3));
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx1, blocknx2, blocknx3, true));
-         //option = 0 - ohne param., option = 1 - mit param.
-         //int option = 0;
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, option));
-         
-
-         int kernelType = UbSystem::stringTo<int>(cf.getValue("kernel"));
-         LBMKernel3DPtr kernel;
-         if (kernelType == 0)
-         {
-            rhoLB = 1.0;
-            kernel = LBMKernel3DPtr(new LBMKernelETD3Q27BGK(blocknx1, blocknx2, blocknx3, true));
-         }
-         else if (kernelType == 1)
-         {
-            rhoLB = 1.0;
-            kernel = LBMKernel3DPtr(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3));
-         }
-         else if (kernelType == 2)
-         {
-            rhoLB = 0.0;
-            kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, 0));
-            //kernel = LBMKernel3DPtr(new LBMKernelESD3Q27CCLB(blocknx1, blocknx2, blocknx3, grid));
-            //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBex(blocknx1, blocknx2, blocknx3, 0, grid));
-         }
-         
-         kernel->setForcingX1(fctForcingX1);
-         kernel->setForcingX2(fctForcingX2);
-         kernel->setForcingX3(fctForcingX3);
-         kernel->setWithForcing(true);
-         
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         mu::Parser fctnueLB;
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-      //   //walls
-         grid->addAndInitInteractor(addWallZminInt);
-         grid->addAndInitInteractor(addWallZmaxInt);
-         // porous geometry
-         //grid->addAndInitInteractor(geoInt);
-
-         //initialization of distributions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB);
-         //initVisitor.setVx1(0.0);
-         grid->accept(initVisitor);
-
-         ////Postrozess - Measurement
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-
-         //if(myid == 0) UBLOG(logINFO,"Preprozess - end"); 
-      }
-      
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double calcBegin = UbSystem::stringTo<double>(cf.getValue("calcBegin"));//0.07; //m
-      double calcEnd = UbSystem::stringTo<double>(cf.getValue("calcEnd"));//0.07; //m
-      double calcIntervall = UbSystem::stringTo<double>(cf.getValue("calcIntervall"));//0.0379 + 0.379; //m
-      
-      /*UbSchedulerPtr TBL_Sch(new UbScheduler(calcIntervall,calcBegin,calcEnd));
-      UbSchedulerPtr TBL_rSch(new UbScheduler(100000));
-      TurbulentStrengthSurfaceRoughnessPostprocessor TBLpp(grid,pathname +"/results/TBL", TBL_Sch,TBL_rSch,comm);
-      */
-
-      double outTime = UbSystem::stringTo<double>(cf.getValue("outTime"));
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlASCII::getInstance(), conv, comm);
-
-      double fdx = grid->getDeltaX(grid->getFinestInitializedLevel());
-
-      //D3Q27IntegrateValuesHelperPtr h1(new D3Q27IntegrateValuesHelper(grid, comm, 
-      //   g_minX1, g_minX2, g_minX3, 
-      //   g_minX1+1.0*fdx, g_maxX2, g_maxX3));
-      ////if(myid ==0) GbSystem3D::writeGeoObject(h1->getBoundingBox().get(),pathname + "/geo/iv1", WbWriterVtkXmlBinary::getInstance());
-      //D3Q27IntegrateValuesHelperPtr h2(new D3Q27IntegrateValuesHelper(grid, comm, 
-      //   g_maxX1-1.0*fdx, g_minX2, g_minX3, 
-      //   g_maxX1, g_maxX2, g_maxX3));
-      ////if(myid ==0) GbSystem3D::writeGeoObject(h2->getBoundingBox().get(),pathname + "/geo/iv2", WbWriterVtkXmlBinary::getInstance());
-      //LBMReal rhoReal = rhoLB;
-      //LBMReal uReal = uLB; 
-      //D3Q27PressureDifferencePostprocessor rhopp(grid, stepSch, pathname + "/results/rho_diff.txt", h1, h2, rhoReal, uReal, uLB, comm);
-
-      //UbSchedulerPtr resSch(new UbScheduler(1000,10000,10000));
-      //UbSchedulerPtr visSch(new UbScheduler(1,0,1));         
-      //AverageValuesPostprocessor TBLpp(grid, pathname + "/results/AvVelocity", WbWriterVtkXmlBinary::getInstance(), visSch, resSch, comm); 
-
-
-      double endTime = UbSystem::stringTo<double>(cf.getValue("endTime"));;//10001.0;
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-      //
-      //double point1[3] = {0.45, 0.20, 0.205};
-      //double point2[3] = {0.55, 0.20, 0.205};
-      //D3Q27IntegrateValuesHelperPtr h1(new D3Q27IntegrateValuesHelper(grid, comm, 
-      //   point1[0]-1.0*fdx, point1[1]-1.0*fdx, point1[2]-1.0*fdx, 
-      //   point1[0], point1[1], point1[2]));
-      //if(myid ==0) GbSystem3D::writeGeoObject(h1->getBoundingBox().get(),pathname + "/geo/iv1", WbWriterVtkXmlBinary::getInstance());
-      //D3Q27IntegrateValuesHelperPtr h2(new D3Q27IntegrateValuesHelper(grid, comm, 
-      //   point2[0], point2[1]-1.0*fdx, point2[2]-1.0*fdx, 
-      //   point2[0]+1.0*fdx, point2[1], point2[2]));
-      //if(myid ==0) GbSystem3D::writeGeoObject(h2->getBoundingBox().get(),pathname + "/geo/iv2", WbWriterVtkXmlBinary::getInstance());
-      ////D3Q27PressureDifferencePostprocessor rhopp(grid, visSch, pathname + "/results/rho_diff.txt", h1, h2, conv, comm);
-      //D3Q27PressureDifferencePostprocessor rhopp(grid, visSch, pathname + "/results/rho_diff.txt", h1, h2, rhoReal, uReal, uLB, comm);
-      //
-      //double area = 2.0*radius*H;
-      //double v    = 4.0*uLB/9.0;
-      //D3Q27ForcesPostprocessor fp(grid, visSch, pathname + "/results/forces.txt", comm, rhoLB, v, area, D3Q27ForcesPostprocessor::X, D3Q27ForcesPostprocessor::Y);
-      //fp.addInteractor(cylinderInt);
-      //
-      //UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 40));
-      //NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      //double endTime = 40001.0;
-      //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      //if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      //calculation->calculate();
-      //if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   if ( argv != NULL )
-   {
-      if (argc > 1)
-      {
-         run(argv[1], argv[2]);
-      }
-      else
-      {
-         cout << "Configuration file must be set!: " <<  argv[0] << " <config file>" << endl << std::flush;
-      }
-   }
-
-   return 0;
- 
-}
-
-
-
-
diff --git a/apps/cpu/pChannel/CMakeLists.txt b/apps/cpu/pChannel/CMakeLists.txt
deleted file mode 100644
index 8af2de6d0580e0ca5cc9a10591474ec378e2145a..0000000000000000000000000000000000000000
--- a/apps/cpu/pChannel/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-PROJECT(PChannel)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core VirtualFluidsBasic FILES pChannel.cpp)
diff --git a/apps/cpu/pChannel/configBombadilpChannel.cfg b/apps/cpu/pChannel/configBombadilpChannel.cfg
deleted file mode 100644
index bdf03526079117aa448ab01cf92a990ce2c4f7c7..0000000000000000000000000000000000000000
--- a/apps/cpu/pChannel/configBombadilpChannel.cfg
+++ /dev/null
@@ -1,107 +0,0 @@
-#
-#Simulation parameters for porous channel
-#
-
-pathOut = d:/temp/ChannelFlow
-pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/isotrop/PA80-110
-numOfThreads = 4
-availMem = 14e9
-logToFile = false
-
-#porous media
-#rawFile = false
-sampleFilename = PA80-110_275x267x254_1mm.vti  
-#sampleFilename = PA80-110_1096x1062x254_4x4x1mm.vti
-#sampleFilename = PA80-110_1096x1327x303.vti  
-#writeSample = true
-
-rawFile = false
-#sampleFilename = PA80-110_1096x1327x1265.raw
-#sampleFilename = PA80-110_1096x1327x423.vti
-#sampleFilename = PA80-110_1096x1327x216.vti  
-#sampleFilename = PA80-110_1096x1327x303.vti  
-writeSample = false
-
-#diminsions [voxel]
-pmNX = 275 267 254
-#pmNX = 1096  1327  1265
-#pmNX = 1096 1327 216
-#pmNX = 1096 1062 254
-
-#threshold
-lthreshold = 29041
-uthreshold = 65535
-
-#deltas
-voxelDeltaX = 3.6496350365e-6 3.76789751319e-6 3.95256916996e-6
-
-#diminsions [m]
-#pmL = 7.299270073e-4 7.53579502638e-4 7.90513833992e-4
-
-#grid
-# deltax = 0.0000144
-# blocknx = 32 20 20
-
-#diminsions [m]
-#pmL = 4e-3 5e-3 5e-3
-#pmL = 4e-3 5e-3 1.67e-3
-#pmL = 4e-3 5e-3 0.85e-3
-
-#letzte
-#pmL = 4e-3 5e-3 1.19e-3
-
-#pmL = 4e-3 0.5e-3 1e-3
-
-pmL = 1e-3 1e-3 1e-3
-#pmL = 4e-3 4e-3 1e-3
-
-#grid
-refineLevel = 0
-#deltaXfine  = 10e-6
-
-
-#deltaXfine  = 20e-6
-deltaXfine  = 80e-6 #level 2
-
-
-
-blocknx = 10 10 10
-
-thinWall = false
-changeQs = false
-
-#channelHigh = 0.002
-
-#DLR-F15
-#channelHigh = 0.017
-channelHigh = 0.008
-#NACA 0012
-#channelHigh = 0.008
-
-#channelHigh = 0.005
-
-boundingBox = 0 0 0 0.024 0.008 0.009 
- 
-#physic
-# for DLRF-15 Re = 102000/2
-Re = 25000
-#real velocity is 54.95 m/s
-u_LB = 0.1
-
-newStart = true
-restartStep = 230000
-
-cpStep = 100
-cpStart = 100
-
-averaging = false
-averagingReset = false
-timeAvStart = 21000000
-timeAvStop = 2100010000
-
-outTime = 100
-endTime = 230000
-
- 
-nupsStep = 10 10 10000000 
-
diff --git a/apps/cpu/pChannel/configHLRNpChannel.cfg b/apps/cpu/pChannel/configHLRNpChannel.cfg
deleted file mode 100644
index f7e90bceedaba9a756f14fba62bf15db29fbbfa4..0000000000000000000000000000000000000000
--- a/apps/cpu/pChannel/configHLRNpChannel.cfg
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-#Simulation parameters for porous channel
-#
-
-pathname = /gfs2/work/niikonst/scratch/pChannel2
-pathGeo = /gfs1/work/niikonst/data/materials
-numOfThreads = 24
-availMem = 128e9
-logToFile = true
-
-#porous media
-rawFile = false
-#sampleFilename = /PA80-110_1096x1327x1265.raw  
-sampleFilename = PA80-110_1096x1327x303.vti  
-writeSample = false
-
-#diminsions [voxel]
-#pmNX = 1096  1327  1265
-pmNX = 1096  1327  303
-
-#threshold
-lthreshold = 29041
-uthreshold = 65535
-
-#deltas
-voxelDeltaX = 3.6496350365e-6 3.76789751319e-6 3.95256916996e-6
-
-#diminsions [m]
-#pmL = 4e-3 5e-3 5e-3
-pmL = 4e-3 5e-3 1.19e-3
-
-#grid
-refineLevel = 2
-deltaXfine = 8.0e-6
-blocknx = 32 40 20
-lengthFactor = 2
-thinWall = true
-
-#DLR-F15
-channelHigh = 0.017
-
-#physic
-# for DLRF-15 Re = 102000/2
-Re = 51000
-#real velocity is 54.95 m/s
-u_LB = 0.1
-
-restartStep = 10000
-restartStepStart=10000
-
-endTime = 80000
-outTime = 10000
-
-nupsStep = 1000 1000 10000000
diff --git a/apps/cpu/pChannel/configLudwigpChannel.cfg b/apps/cpu/pChannel/configLudwigpChannel.cfg
deleted file mode 100644
index 5500f300967d860ec6ab193d1d0b3dcbeccdfc5e..0000000000000000000000000000000000000000
--- a/apps/cpu/pChannel/configLudwigpChannel.cfg
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-#Simulation parameters for porous channel
-#
-
-pathname = /hpc3lustre/work/koskuche/SFB880/pChannel
-pathGeo = /hpc3lustre/work/koskuche/SFB880/Materials/PA80-110
-numOfThreads = 8
-availMem = 11e9
-logToFile = true
-
-#porous media
-rawFile = false
-#sampleFilename = /PA80-110_1096x1327x1265.raw  
-sampleFilename = PA80-110_1096x1327x303.vti  
-writeSample = false
-
-#diminsions [voxel]
-#pmNX = 1096  1327  1265
-pmNX = 1096  1327  303
-
-#threshold
-lthreshold = 29041
-uthreshold = 65535
-
-#deltas
-voxelDeltaX = 3.6496350365e-6 3.76789751319e-6 3.95256916996e-6
-
-#diminsions [m]
-#pmL = 4e-3 5e-3 5e-3
-pmL = 4e-3 5e-3 1.19e-3
-
-#grid
-refineLevel = 2
-deltaXfine = 8.0e-6
-blocknx = 32 40 20
-lengthFactor = 2
-thinWall = true
-
-#DLR-F15
-channelHigh = 0.017
-
-#physic
-# for DLRF-15 Re = 102000/2
-Re = 51000
-#real velocity is 54.95 m/s
-u_LB = 0.1
-
-restartStep = 10000
-restartStepStart=10000
-
-endTime = 80000
-outTime = 10000
-
diff --git a/apps/cpu/pChannel/pChannel.cpp b/apps/cpu/pChannel/pChannel.cpp
deleted file mode 100644
index d30b28d262fa8d09c1658452eb11496b5c5c61f9..0000000000000000000000000000000000000000
--- a/apps/cpu/pChannel/pChannel.cpp
+++ /dev/null
@@ -1,706 +0,0 @@
-#include <iostream>
-#include <string>
-#include "VirtualFluids.h"
-#include <omp.h>
-double rangeRandom(double M, double N)
-{
-   return M + (rand() / (RAND_MAX / (N - M)));
-}
-
-double rangeRandom1()
-{
-   return (2.0*rand())/RAND_MAX - 1.0;
-}
-
-//double rangeRandom(double M, double N)
-//{
-//   return rand() % (int)N+(int)M;
-//}
-
-
-
-//#include <thread>
-
-using namespace std;
-
-std::vector<int> x1Nbr;
-std::vector<int> x2Nbr;
-std::vector<int> x3Nbr;
-
-std::vector<int> x1NbrTemp;
-std::vector<int> x2NbrTemp;
-std::vector<int> x3NbrTemp;
-
-//void findSolidNeighbor(SPtr<GbVoxelMatrix3D> voxelMatrix, int x1, int x2, int x3)
-//{
-//   for (int k3 = -1; k3<=1; k3++)
-//   {
-//      for (int k2 = -1; k2<=1; k2++)
-//      {
-//         for (int k1 = -1; k1<=1; k1++)
-//         {
-//            int j1 = x1+k1;
-//            int j2 = x2+k2;
-//            int j3 = x3+k3;
-//            if (j1>=0&&j1<nodesX1 && j2>=0&&j2<nodesX2 && j3>=0&&j3<nodesX3)
-//            {
-//               if ((*voxelMatrix)(j1, j2, j3)==GbVoxelMatrix3D::FLUID)
-//               {
-//                  if (flagMatrix(j1, j2, j3)==0)
-//                  {
-//                     voxelMatrixTemp(j1, j2, j3) = GbVoxelMatrix3D::SOLID;
-//                     flagMatrix(j1, j2, j3) = 1;
-//                     x1NbrTemp.push_back(j1);
-//                     x2NbrTemp.push_back(j2);
-//                     x3NbrTemp.push_back(j3);
-//                  }
-//               }
-//            }
-//         }
-//      }
-//   }
-//}
-
-void changePorosity(SPtr<GbVoxelMatrix3D> sample, vector<int> pmNX)
-{
-   int minX1 = 0;
-   int minX2 = 0;
-   int minX3 = 0;
-   int maxX1 = pmNX[0];
-   int maxX2 = pmNX[1];
-   int maxX3 = pmNX[2];
-   sample->calculateNumberOfSolidAndFluid();
-   double nSolid = sample->getNumberOfSolid();
-   double nFluid = sample->getNumberOfFluid();
-   double porosityStart = nFluid/(nSolid+nFluid);
-   double porosityEnd = 0.5;
-   double porosityStep = (porosityEnd-porosityStart)/(double)maxX3;
-   double totallSliceVoxel = maxX1*maxX2;
-   vector<int> fluidThreshold;
-
-   SPtr<GbVoxelMatrix3D> sampleTemp = SPtr<GbVoxelMatrix3D>(sample->clone());
-
-   int count=1;
-
-   for (int ix3=minX3; ix3<maxX3; ix3++)
-   {
-      int cFluid = 0;
-      for (int ix2=minX2; ix2<maxX2; ix2++)
-      {
-         for (int ix1=minX1; ix1<maxX1; ix1++)
-         {
-            if ((*sample)(ix1, ix2, ix3) == GbVoxelMatrix3D::FLUID)
-            {
-               cFluid++;
-            }
-         }
-      }
-      double slicePorosity = (double)cFluid/totallSliceVoxel;
-      double porosityPercent = (porosityStep*(double)count)/slicePorosity;
-      fluidThreshold.push_back((totallSliceVoxel-(double)cFluid)*porosityPercent);
-      count++;
-   }
-   int solidCount = 0;
-   count=0;
-
-   for (int ix3=minX3; ix3<maxX3; ix3++)
-   {
-      //while (fluidThreshold[count] > 0)
-      //{
-     // int fTh = fluidThreshold[count];
-
-         int solidCount = 0;
-         for (int ix2=minX2; ix2<maxX2; ix2++)
-         {
-            for (int ix1=minX1; ix1<maxX1; ix1++)
-            {
-               if ((*sample)(ix1, ix2, ix3) == GbVoxelMatrix3D::SOLID)
-               {
-                  bool flagSolid = true;
-                  for (int k3 = -1; k3<=1; k3++)
-                  {
-                     for (int k2 = -1; k2<=1; k2++)
-                     {
-                        for (int k1 = -1; k1<=1; k1++)
-                        {
-                           int j1 = ix1+k1;
-                           int j2 = ix2+k2;
-                           int j3 = ix3;//+k3;
-                           if (j1>=0&&j1<maxX1 && j2>=0&&j2<maxX2 && j3>=0&&j3<maxX3)
-                           {
-                              if ((*sample)(j1, j2, j3) == GbVoxelMatrix3D::FLUID)
-                              {
-                                 flagSolid = flagSolid && false;
-                              }
-                           }
-                        }
-                     }
-                  }
-                  if (!flagSolid)
-                  {
-                     (*sample)(ix1, ix2, ix3)=GbVoxelMatrix3D::FLUID;
-                      fluidThreshold[count]--;
-                     solidCount++;
-                  }
-                  if ( fluidThreshold[count] == 0)
-                  {
-                     ix1=maxX1;
-                     ix2=maxX2;
-                  }
-               }
-            }
-         }
-         UBLOG(logINFO, "count = " << count);
-         UBLOG(logINFO, "fTh = " <<  fluidThreshold[count]);
-         UBLOG(logINFO, "solidCount = " << solidCount);
-         //sample = sampleTemp;
-         //sampleTemp = SPtr<GbVoxelMatrix3D>(sample->clone());
-         
-        count++;     
-      
-       }
-      
-   //}
-   //sampleTemp->writeToLegacyVTKBinary("d:/temp/ChannelFlow/geo/sampleTemp.vtk");
-}
-
-//////////////////////////////////////////////////////////////////////////
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathOut           = config.getValue<string>("pathOut");
-      string          pathGeo           = config.getValue<string>("pathGeo");
-      int             numOfThreads      = config.getValue<int>("numOfThreads");
-      string          sampleFilename    = config.getValue<string>("sampleFilename");
-      vector<int>     pmNX              = config.getVector<int>("pmNX");
-      double          lthreshold        = config.getValue<double>("lthreshold");
-      double          uthreshold        = config.getValue<double>("uthreshold");
-      vector<float>   voxelDeltaX       = config.getVector<float>("voxelDeltaX");
-      vector<int>     blocknx           = config.getVector<int>("blocknx");
-      double          u_LB              = config.getValue<double>("u_LB");
-      double          restartStep       = config.getValue<double>("restartStep");
-      double          cpStep            = config.getValue<double>("cpStep");
-      double          cpStart           = config.getValue<double>("cpStart");
-      double          endTime           = config.getValue<double>("endTime");
-      double          outTime           = config.getValue<double>("outTime");
-      double          availMem          = config.getValue<double>("availMem");
-      bool            rawFile           = config.getValue<bool>("rawFile");
-      bool            logToFile         = config.getValue<bool>("logToFile");
-      bool            writeSample       = config.getValue<bool>("writeSample");
-      vector<double>  pmL               = config.getVector<double>("pmL");
-      double          deltaXfine        = config.getValue<double>("deltaXfine");
-      int             refineLevel       = config.getValue<int>("refineLevel");
-      bool            thinWall          = config.getValue<bool>("thinWall");
-      double          Re                = config.getValue<double>("Re");
-      double          channelHigh       = config.getValue<double>("channelHigh");
-      bool            changeQs          = config.getValue<bool>("changeQs");
-      double          timeAvStart       = config.getValue<double>("timeAvStart");
-      double          timeAvStop        = config.getValue<double>("timeAvStop");
-      bool            averaging         = config.getValue<bool>("averaging");
-      bool            averagingReset    = config.getValue<bool>("averagingReset");
-      bool            newStart          = config.getValue<bool>("newStart");
-      vector<double>  nupsStep          = config.getVector<double>("nupsStep");
-      vector<double>  boundingBox       = config.getVector<double>("boundingBox");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathOut.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathOut + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      if (myid == 0) UBLOG(logINFO, "Testcase porous channel");
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-      double deltaXcoarse = deltaXfine*(double)(1<<refineLevel);
-
-      LBMReal rho_LB = 0.0;
-      double rhoReal = 1.2041; //(kg/m3)
-      double uReal = 48; //m/s
-      double lReal = 0.008;//m
-      double hLB = lReal / deltaXcoarse;
-      double Ma = 0.13;//Ma-Real!
-      double csReal = uReal / Ma;
-      LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB);
-      if (myid==0) UBLOG(logINFO, unitConverter.toString());
-
-      //double coord[6];
-
-      vector<double> origin(3);
-      origin[0] = 0;
-      origin[1] = 0;
-      origin[2] = 0;
-
-      //real velocity is 49.63 m/s
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      //BC adapters
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-
-      SPtr<BCProcessor> bcProc;
-      bcProc = SPtr<BCProcessor>(new BCProcessor());
-
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel());
-
-      mu::Parser fctForcingX1;
-      fctForcingX1.SetExpr("Fx1");
-      fctForcingX1.DefineConst("Fx1", 1.0e-6);
-      kernel->setWithForcing(true);
-
-      kernel->setBCProcessor(bcProc);
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIORestartCoProcessor> restartCoProcessor(new MPIIORestartCoProcessor(grid, rSch, pathOut, comm));
-      restartCoProcessor->setLBMKernel(kernel);
-      restartCoProcessor->setBCProcessor(bcProc);
-
-      SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathOut+"/mig", comm));
-      migCoProcessor->setLBMKernel(kernel);
-      migCoProcessor->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-
-      //bounding box
-      double g_minX1 = boundingBox[0];
-      double g_minX2 = boundingBox[1];
-      double g_minX3 = boundingBox[2];
-
-      double g_maxX1 = boundingBox[3];
-      double g_maxX2 = boundingBox[4];
-      double g_maxX3 = boundingBox[5];
-
-      double blockLength = (double)blocknx[0]*deltaXcoarse;
-
-      double channel_high = channelHigh; // g_maxX3-g_minX3;
-      double channel_high_LB = channel_high/deltaXcoarse;
-      //////////////////////////////////////////////////////////////////////////
-      double nu_LB = (u_LB*channel_high_LB)/Re;
-      //////////////////////////////////////////////////////////////////////////
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Parameters:");
-         UBLOG(logINFO, "Re                  = " << Re);
-         UBLOG(logINFO, "u_LB                = " << u_LB);
-         UBLOG(logINFO, "rho_LB              = " << rho_LB);
-         UBLOG(logINFO, "nu_LB               = " << nu_LB);
-         UBLOG(logINFO, "dx coarse           = " << deltaXcoarse << " m");
-         UBLOG(logINFO, "dx fine             = " << deltaXfine << " m");
-         UBLOG(logINFO, "channel_high        = " << channel_high << " m");
-         UBLOG(logINFO, "channel_high_LB     = " << channel_high_LB);
-         UBLOG(logINFO, "number of levels    = " << refineLevel + 1);
-         UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses());
-         UBLOG(logINFO, "number of threads   = " << numOfThreads);
-         UBLOG(logINFO, "path = " << pathOut);
-         UBLOG(logINFO, "Preprocess - start");
-      }
-
-
-      if (newStart)
-      {
-         if (myid == 0) UBLOG(logINFO, "new start...");
-
-
-
-         grid->setPeriodicX1(true);
-         grid->setPeriodicX2(true);
-         grid->setPeriodicX3(false);
-         grid->setDeltaX(deltaXcoarse);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-         SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-         //////////////////////////////////////////////////////////////////////////
-         //refinement
-         double blockLengthX3Fine = grid->getDeltaX(refineLevel) * blocknx[2];
-         double refHight = 0.002;
-
-         GbCuboid3DPtr refineBoxTop(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3-refHight, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxTop.get(), pathOut + "/geo/refineBoxTop", WbWriterVtkXmlASCII::getInstance());
-
-         //GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+offsetMinX3+blockLengthX3Fine));
-         GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+refHight));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxBottom.get(), pathOut + "/geo/refineBoxBottom", WbWriterVtkXmlASCII::getInstance());
-
-         if (refineLevel > 0)
-         {
-            if (myid == 0) UBLOG(logINFO, "Refinement - start");
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm);
-            refineHelper.addGbObject(refineBoxTop, refineLevel);
-            refineHelper.addGbObject(refineBoxBottom, refineLevel);
-            refineHelper.refine();
-            if (myid == 0) UBLOG(logINFO, "Refinement - end");
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-         //walls
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-
-         //wall interactors
-         SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-         ////////////////////////////////////////////
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         {
-            WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppblocks.process(0);
-         }
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         //////////////////////////////////
-         //undef nodes for refinement
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-
-         //BC
-         intHelper.setBC();
-
-         ////porous media
-         if (true)
-         {
-            string samplePathname = pathGeo + "/" + sampleFilename;
-
-            SPtr<GbVoxelMatrix3D> sample(new GbVoxelMatrix3D(pmNX[0], pmNX[1], pmNX[2], 0, lthreshold, uthreshold));
-            if (rawFile)
-            {
-               sample->readBufferedMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-            }
-            else
-            {
-               sample->readMatrixFromVtiASCIIFile(samplePathname);
-            }
-
-            sample->setVoxelMatrixDelta(voxelDeltaX[0], voxelDeltaX[1], voxelDeltaX[2]);
-            sample->setVoxelMatrixMininum(origin[0], origin[1], origin[2]);
-
-            changePorosity(sample, pmNX);
-
-            sample->writeToLegacyVTKBinary(pathOut+"/geo/sample.vtk");
-            return;
-
-            int bounceBackOption = 1;
-            bool vxFile = false;
-            int i = 0;
-            //for (int x = 0; x < lengthFactor; x+=2)
-            int lenX = (int)((g_maxX1-g_minX1)/(pmL[0]));
-            int lenY = (int)((g_maxX2-g_minX2)/(pmL[1]));
-
-            for (int y = 0; y < lenY; y+=2)
-               for (int x = 0; x < lenX; x+=2)
-               {
-                  double offsetX = pmL[0] * (double)x;
-                  double offsetY = pmL[1] * (double)y;
-                  //sample 0
-                  if (myid == 0) UBLOG(logINFO, "sample # " << i);
-                  sample->setVoxelMatrixMininum(origin[0]+offsetX, origin[1]+offsetY, origin[2]);
-                  Utilities::voxelMatrixDiscretisation(sample, pathOut, myid, i, grid, bounceBackOption, vxFile);
-                  i++;
-
-                  if (myid == 0)
-                  {
-                     UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()/1073741824.0<<" GB");
-                     UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()/1073741824.0<<" GB");
-                     UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-                  }
-
-                  //sample 1
-                  if (myid == 0) UBLOG(logINFO, "sample # " << i);
-                  sample->setVoxelMatrixMininum(origin[0]+pmL[0]+offsetX, origin[1]+offsetY, origin[2]);
-                  sample->mirrorX();
-                  Utilities::voxelMatrixDiscretisation(sample, pathOut, myid, i, grid, bounceBackOption, vxFile);
-                  i++;
-
-                  if (myid == 0)
-                  {
-                     UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()/1073741824.0<<" GB");
-                     UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()/1073741824.0<<" GB");
-                     UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB");
-                  }
-
-                  //sample 2
-                  if (myid == 0) UBLOG(logINFO, "sample # " << i);
-                  sample->setVoxelMatrixMininum(origin[0]+pmL[0]+offsetX, origin[1]+pmL[1]+offsetY, origin[2]);
-                  sample->mirrorY();
-                  Utilities::voxelMatrixDiscretisation(sample, pathOut, myid, i, grid, bounceBackOption, vxFile);
-                  i++;
-
-                  if (myid == 0)
-                  {
-                     UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()/1073741824.0<<" GB");
-                     UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()/1073741824.0<<" GB");
-                     UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-                  }
-
-                  //sample 3
-                  if (myid == 0) UBLOG(logINFO, "sample # " << i);
-                  sample->setVoxelMatrixMininum(origin[0]+offsetX, origin[1]+pmL[1]+offsetY, origin[2]);
-                  sample->mirrorX();
-                  Utilities::voxelMatrixDiscretisation(sample, pathOut, myid, i, grid, bounceBackOption, vxFile);
-                  sample->mirrorY();
-                  i++;
-               }
-
-         }
-
-         grid->accept(bcVisitor);
-
-         mu::Parser inflowProfileVx1, inflowProfileVx2, inflowProfileVx3, inflowProfileRho;
-         inflowProfileVx1.SetExpr("x3 < h ? 0.0 : uLB+1*x1");
-         inflowProfileVx1.DefineConst("uLB", u_LB);
-         inflowProfileVx1.DefineConst("h", pmL[2]);
-
-         InitDistributionsBlockVisitor initVisitor;
-         initVisitor.setVx1(inflowProfileVx1);
-         grid->accept(initVisitor);
-
-         ////set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //Postrozess
-         {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppgeo.process(0);
-         }
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         //restartCoProcessor->restart((int)restartStep);
-         migCoProcessor->restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-         ////////////////////////////////////////////////////////////////////////////
-         InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         grid->accept(bcVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      std::shared_ptr<NUPSCounterCoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm));
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTime));
-
-      SPtr<WriteMacroscopicQuantitiesCoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-      SPtr<GbObject3D> bbBox(new GbCuboid3D(g_minX1-blockLength, (g_maxX2-g_minX2)/2.0, g_minX3-blockLength, g_maxX1+blockLength, (g_maxX2-g_minX2)/2.0+deltaXcoarse, g_maxX3+blockLength));
-      if (myid==0) GbSystem3D::writeGeoObject(bbBox.get(), pathOut+"/geo/bbBox", WbWriterVtkXmlASCII::getInstance());
-      SPtr<WriteMQFromSelectionCoProcessor> writeMQSelectCoProcessor(new WriteMQFromSelectionCoProcessor(grid, stepSch, bbBox, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-
-      SPtr<UbScheduler> AdjForcSch(new UbScheduler());
-      AdjForcSch->addSchedule(10, 0, 10000000);
-      SPtr<IntegrateValuesHelper> intValHelp(new IntegrateValuesHelper(grid, comm, g_minX1, g_minX2, g_minX3+pmL[2], g_maxX1, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(intValHelp->getBoundingBox().get(), pathOut + "/geo/IntValHelp", WbWriterVtkXmlBinary::getInstance());
-
-      double vxTarget=u_LB;
-      SPtr<AdjustForcingCoProcessor> AdjForcCoProcessor(new AdjustForcingCoProcessor(grid, AdjForcSch, pathOut, intValHelp, vxTarget, comm));
-
-      //mu::Parser decrViscFunc;
-      //decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)");
-      //decrViscFunc.DefineConst("nue0", nu_LB*4.0);
-      //decrViscFunc.DefineConst("c0", 0.1);
-      //SPtr<UbScheduler> DecrViscSch(new UbScheduler());
-      //DecrViscSch->addSchedule(10, 0, 1000);
-      //DecreaseViscosityCoProcessor decrViscPPPtr(grid, DecrViscSch, &decrViscFunc, comm);
-
-     //if (changeQs)
-     //{
-       // double z1 = pmL[2];
-       // SPtr<IntegrateValuesHelper> intValHelp2(new IntegrateValuesHelper(grid, comm,
-         //  coord[0], coord[1], z1 - deltaXfine,
-         //  coord[3], coord[4], z1 + deltaXfine));
-       // if (myid == 0) GbSystem3D::writeGeoObject(intValHelp2->getBoundingBox().get(), pathOut + "/geo/intValHelp2", WbWriterVtkXmlBinary::getInstance());
-       // Utilities::ChangeRandomQs(intValHelp2);
-     //}
-
-      std::vector<double> levelCoords;
-      std::vector<int> levels;
-      std::vector<double> bounds;
-      //bounds.push_back(0);
-      //bounds.push_back(0);
-      //bounds.push_back(0);
-      //bounds.push_back(0.004);
-      //bounds.push_back(0.002);
-      //bounds.push_back(0.003);
-      //levels.push_back(1);
-      //levels.push_back(0);
-      //levels.push_back(1);
-      //levelCoords.push_back(0);
-      //levelCoords.push_back(0.0016);
-      //levelCoords.push_back(0.0024);
-      //levelCoords.push_back(0.003);
-      bounds.push_back(0);
-      bounds.push_back(0);
-      bounds.push_back(0);
-      bounds.push_back(0.004);
-      bounds.push_back(0.002);
-      bounds.push_back(0.002);
-      levels.push_back(0);
-      levelCoords.push_back(0);
-      levelCoords.push_back(0.002);
-      //SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop));
-      //SPtr<CoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,
-      //   TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations | TimeAveragedValuesCoProcessor::Triplecorrelations,
-      //   levels, levelCoords, bounds));
-
-
-      //create line time series
-      SPtr<UbScheduler> tpcSch(new UbScheduler(1, 1, 3));
-      //GbPoint3DPtr p1(new GbPoint3D(0.0,0.005,0.01));
-      //GbPoint3DPtr p2(new GbPoint3D(0.064,0.005,0.01));
-      //SPtr<GbLine3D> line(new GbLine3D(p1.get(),p2.get()));
-      SPtr<GbLine3D> line(new GbLine3D(new GbPoint3D(0.0, 0.005, 0.01), new GbPoint3D(0.064, 0.005, 0.01)));
-      LineTimeSeriesCoProcessor lineTs(grid, tpcSch, pathOut+"/TimeSeries/line1.csv", line, 0, comm);
-      if (myid==0) lineTs.writeLine(pathOut+"/geo/line1");
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      //omp_set_num_threads(numOfThreads);
-       numOfThreads = 4;
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-      SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, (int)endTime));
-      calculator->addCoProcessor(nupsCoProcessor);
-      calculator->addCoProcessor(AdjForcCoProcessor);
-      calculator->addCoProcessor(migCoProcessor);
-      //calculator->addCoProcessor(restartCoProcessor);
-      calculator->addCoProcessor(writeMQSelectCoProcessor);
-      calculator->addCoProcessor(writeMQCoProcessor);
-
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculator->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (mu::Parser::exception_type &e)
-   {
-      std::cout << e.GetMsg() << std::endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/pChannel/pChannel.cpp.hlrn b/apps/cpu/pChannel/pChannel.cpp.hlrn
deleted file mode 100644
index 812566c96d046cf9da9b72bd388ce0696224df7b..0000000000000000000000000000000000000000
--- a/apps/cpu/pChannel/pChannel.cpp.hlrn
+++ /dev/null
@@ -1,729 +0,0 @@
-#include <iostream>
-#include <string>
-#include "VirtualFluids.h"
-
-
-
-//#include <thread>
-
-using namespace std;
-
-//////////////////////////////////////////////////////////////////////////
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname          = config.getString("pathname");
-      string          pathGeo           = config.getString("pathGeo");
-      int             numOfThreads      = config.getInt("numOfThreads");
-      string          sampleFilename    = config.getString("sampleFilename");
-      vector<int>     pmNX              = config.getVector<int>("pmNX");
-      double          lthreshold        = config.getDouble("lthreshold");
-      double          uthreshold        = config.getDouble("uthreshold");
-      vector<float>   voxelDeltaX       = config.getVector<float>("voxelDeltaX");
-      vector<int>     blocknx           = config.getVector<int>("blocknx");
-      double          u_LB              = config.getDouble("u_LB");
-      double          restartStep       = config.getDouble("restartStep");
-      double          restartStepStart  = config.getDouble("restartStepStart");
-      double          endTime           = config.getDouble("endTime");
-      double          outTime           = config.getDouble("outTime");
-      double          availMem          = config.getDouble("availMem");
-      bool            rawFile           = config.getBool("rawFile");
-      bool            logToFile         = config.getBool("logToFile");
-      bool            writeSample       = config.getBool("writeSample");
-      vector<double>  pmL               = config.getVector<double>("pmL");
-      double          deltaXfine        = config.getDouble("deltaXfine");
-      int             refineLevel       = config.getInt("refineLevel");
-      bool            thinWall          = config.getBool("thinWall");
-      double          Re                = config.getDouble("Re");
-      double          channelHigh       = config.getDouble("channelHigh");
-      double          lengthFactor      = config.getDouble("lengthFactor");
-      double          forcing           = config.getDouble("forcing");
-      bool            changeQs          = config.getBool("changeQs"); 
-      double          timeAvStart       = config.getDouble("timeAvStart");
-      double          timeAvStop        = config.getDouble("timeAvStop");
-      bool            averaging         = config.getBool("averaging");
-      bool            averagingReset    = config.getBool("averagingReset");
-      double          nupsSteps         = config.getDouble("nupsSteps");
-      double          timeLineTsStart   = config.getDouble("timeLineTsStart");
-      double          timeLineTsStop    = config.getDouble("timeLineTsStop");
-
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      if (myid == 0) UBLOG(logINFO, "Testcase porous channel");
-
-      LBMReal rho_LB = 0.0;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-      double deltaXcoarse = deltaXfine*(double)(1<<refineLevel);
-
-      double coord[6];
-      bool restart;
-
-      vector<double> origin(3);
-      origin[0] = 0;
-      origin[1] = 0;
-      origin[2] = 0;
-
-      //real velocity is 49.63 m/s
-      double nu_LB;
-
-      Grid3DPtr grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(restartStep, restartStepStart));
-      RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (grid->getTimeStep() == 0)
-      {
-         if (myid == 0) UBLOG(logINFO, "new start...");
-         restart = false;
-
-         double offsetMinX3 = pmL[2];
-         
-         double offsetMaxX1 = pmL[0]*lengthFactor;
-         double offsetMaxX2 = pmL[1]*2.0;
-         double offsetMaxX3 = pmL[2] + channelHigh; //DLR-F15  //pmL[2]*2.0;
-
-         //bounding box
-         double g_minX1 = origin[0];
-         double g_minX2 = origin[1];
-         double g_minX3 = origin[2];
-
-         double g_maxX1 = origin[0] + offsetMaxX1;
-         double g_maxX2 = origin[1] + offsetMaxX2;
-         double g_maxX3 = origin[2] + offsetMaxX3;
-//////////////////////////////////////////////////////////////////////////
-         double nx1_temp = floor((g_maxX1-g_minX1) /(deltaXcoarse*(double)blocknx[0]));
-
-         deltaXcoarse = (g_maxX1-g_minX1) /(nx1_temp*(double)blocknx[0]);
-
-         g_maxX1 -= 0.5* deltaXcoarse;
-//////////////////////////////////////////////////////////////////////////
-         double blockLength = (double)blocknx[0]*deltaXcoarse;
-
-         grid->setPeriodicX1(true);
-         grid->setPeriodicX2(true);
-         grid->setPeriodicX3(false);
-         grid->setDeltaX(deltaXcoarse);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-         double channel_high = channelHigh; // g_maxX3-g_minX3;
-         double channel_high_LB = channel_high/deltaXcoarse;
-//////////////////////////////////////////////////////////////////////////
-         //nu_LB = 0.005;
-         nu_LB = (u_LB*channel_high_LB)/Re;
-//////////////////////////////////////////////////////////////////////////
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "u_LB = " << u_LB);
-            UBLOG(logINFO, "rho_LB = " << rho_LB);
-            UBLOG(logINFO, "nu_LB = " << nu_LB);
-            UBLOG(logINFO, "dx coarse = " << deltaXcoarse << " m");
-            UBLOG(logINFO, "dx fine = " << grid->getDeltaX(refineLevel) << " m");
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses());
-            UBLOG(logINFO, "number of threads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-            UBLOG(logINFO, "Preprocess - start");
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         //refinement
-         double blockLengthX3Fine = grid->getDeltaX(refineLevel) * blocknx[2];
-
-         GbCuboid3DPtr refineBoxTop(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3-blockLengthX3Fine, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxTop.get(), pathname + "/geo/refineBoxTop", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+offsetMinX3+blockLengthX3Fine));
-         //GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLengthX3Fine, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+blockLengthX3Fine));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineBoxBottom.get(), pathname + "/geo/refineBoxBottom", WbWriterVtkXmlASCII::getInstance());
-
-         if (refineLevel > 0)
-         {
-            if (myid == 0) UBLOG(logINFO, "Refinement - start");
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(refineBoxTop, refineLevel);
-            refineHelper.addGbObject(refineBoxBottom, refineLevel);
-            refineHelper.refine();
-            if (myid == 0) UBLOG(logINFO, "Refinement - end");
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-         //walls
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-
-         //wall interactors
-         int bbOption = 1;
-         D3Q27BoundaryConditionAdapterPtr bcNoSlip(new D3Q27NoSlipBCAdapter(bbOption));
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcNoSlip, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcNoSlip, Interactor3D::SOLID));
-
-		 ////////////////////////////////////////////////
-		 //TEST
-		 //GbObject3DPtr testCube(new GbCuboid3D(g_minX1 + 2.0 * blockLength, g_minX2 + 2.0 * blockLength, g_minX3 + 5.0 * blockLength, 
-			// g_minX1 + 3.0 * blockLength, g_minX2 + 3.0 * blockLength, g_minX3 + 6.0 * blockLength));
-		 //if (myid == 0) GbSystem3D::writeGeoObject(testCube.get(), pathname + "/geo/testCube", WbWriterVtkXmlBinary::getInstance());
-		 //D3Q27InteractorPtr testCubeInt(new D3Q27Interactor(testCube, grid, bcNoSlip, Interactor3D::SOLID));
-		 ///////////////////////////////////////////////
-
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-         ////////////////////////////////////////////
-         //Zoltan
-         //Grid3DVisitorPtr zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW, 1));
-         //grid->accept(zoltanVisitor);
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallZmaxInt);
-		 //////////////////////////////////////////////////////////////////////////
-		 //TEST
-		 //intHelper.addInteractor(testCubeInt);
-         //////////////////////////////////////////////////////////////////////////
-		 intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
-         int ghostLayer = 3;
-         unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]);
-         unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
-         unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
-         double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-	 
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
-            UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernel3DPtr kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-
-         mu::Parser fctForcingX1;
-         fctForcingX1.SetExpr("Fx1");
-         fctForcingX1.DefineConst("Fx1", 1.0e-6);
-
-         kernel->setWithForcing(true);
-
-         BCProcessorPtr bcProc;
-         BoundaryConditionPtr noSlipBC;
-
-         if (thinWall)
-         {
-            bcProc = BCProcessorPtr(new D3Q27ETForThinWallBCProcessor());
-            noSlipBC = BoundaryConditionPtr(new ThinWallNoSlipBoundaryCondition());
-         }
-         else
-         {
-            bcProc = BCProcessorPtr(new D3Q27ETBCProcessor());
-            noSlipBC = BoundaryConditionPtr(new NoSlipBoundaryCondition());
-         }
-
-         bcProc->addBC(noSlipBC);
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         //////////////////////////////////
-         //undef nodes for refinement
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-
-         //BC
-         intHelper.setBC();
-
-         ////porous media
-         {
-            string samplePathname = pathGeo + "/" + sampleFilename;
-
-            GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX[0], pmNX[1], pmNX[2], 0, lthreshold, uthreshold));
-            if (rawFile)
-            {
-               sample->readBufferedMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-            }
-            else
-            {
-               sample->readMatrixFromVtiASCIIFile(samplePathname);
-            }
-
-            sample->setVoxelMatrixDelta(voxelDeltaX[0], voxelDeltaX[1], voxelDeltaX[2]);
-            sample->setVoxelMatrixMininum(origin[0], origin[1], origin[2]);
-
-            int bounceBackOption = 1;
-            bool vxFile = false;
-            int i = 0;
-            for (int x = 0; x < lengthFactor; x+=2)
-            {
-               double offset = pmL[0] * (double)x;
-               //sample 0
-               if (myid == 0) UBLOG(logINFO, "sample # " << i);
-               sample->setVoxelMatrixMininum(origin[0]+offset, origin[1], origin[2]);
-               Utilities::voxelMatrixDiscretisation(sample, pathname, myid, i, grid, bounceBackOption, vxFile);
-               i++;
-
-               if (myid == 0)
-               {
-                  UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-                  UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-                  UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-               }
-
-               //sample 1
-               if (myid == 0) UBLOG(logINFO, "sample # " << i);
-               sample->setVoxelMatrixMininum(origin[0]+pmL[0]+offset, origin[1], origin[2]);
-               sample->mirrorX();
-               Utilities::voxelMatrixDiscretisation(sample, pathname, myid, i, grid, bounceBackOption, vxFile);
-               i++;
-
-               if (myid == 0)
-               {
-                  UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-                  UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-                  UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-               }
-
-               //sample 2
-               if (myid == 0) UBLOG(logINFO, "sample # " << i);
-               sample->setVoxelMatrixMininum(origin[0]+pmL[0]+offset, origin[1]+pmL[1], origin[2]);
-               sample->mirrorY();
-               Utilities::voxelMatrixDiscretisation(sample, pathname, myid, i, grid, bounceBackOption, vxFile);
-               i++;
-
-               if (myid == 0)
-               {
-                  UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-                  UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-                  UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-               }
-
-               //sample 3
-               if (myid == 0) UBLOG(logINFO, "sample # " << i);
-               sample->setVoxelMatrixMininum(origin[0]+offset, origin[1]+pmL[1], origin[2]);
-               sample->mirrorX();
-               Utilities::voxelMatrixDiscretisation(sample, pathname, myid, i, grid, bounceBackOption, vxFile);
-               sample->mirrorY();
-               i++;
-            }
-
-         }
-         BoundaryConditionBlockVisitor bcVisitor;
-         grid->accept(bcVisitor);
-
-         mu::Parser inflowProfile;
-         inflowProfile.SetExpr("x3 < h ? 0.0 : uLB+1*x1-1*x2");
-		   //inflowProfile.SetExpr("uLB+1*x1-1*x2");
-         //inflowProfile.SetExpr("uLB");
-         inflowProfile.DefineConst("uLB", u_LB);
-         inflowProfile.DefineConst("h", pmL[2]);
-
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB);
-         initVisitor.setVx1(inflowProfile);
-         //initVisitor.setVx1(u_LB);
-         grid->accept(initVisitor);
-
-         ////set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //Postrozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         MacroscopicQuantitiesCoProcessorPtr ppgeo(
-            new MacroscopicQuantitiesCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true));
-         ppgeo->process(0);
-         ppgeo.reset();
-
-         coord[0] = g_minX1;
-         coord[1] = g_minX2;
-         coord[2] = g_minX3;
-         coord[3] = g_maxX1;
-         coord[4] = g_maxX2;
-         coord[5] = g_maxX3;
-
-         ////////////////////////////////////////////////////////
-         FILE * pFile;
-         string str = pathname + "/checkpoints/coord.txt";
-         pFile = fopen(str.c_str(), "w");
-         fprintf(pFile, "%g\n", deltaXcoarse);
-         fprintf(pFile, "%g\n", nu_LB);
-         fprintf(pFile, "%g\n", coord[0]);
-         fprintf(pFile, "%g\n", coord[1]);
-         fprintf(pFile, "%g\n", coord[2]);
-         fprintf(pFile, "%g\n", coord[3]);
-         fprintf(pFile, "%g\n", coord[4]);
-         fprintf(pFile, "%g\n", coord[5]);
-         fclose(pFile);
-         ////////////////////////////////////////////////////////
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         ////////////////////////////////////////////////////////
-         FILE * pFile;
-         string str = pathname + "/checkpoints/coord.txt";
-         pFile = fopen(str.c_str(), "r");
-         fscanf(pFile, "%lg\n", &deltaXcoarse);
-         fscanf(pFile, "%lg\n", &nu_LB);
-         fscanf(pFile, "%lg\n", &coord[0]);
-         fscanf(pFile, "%lg\n", &coord[1]);
-         fscanf(pFile, "%lg\n", &coord[2]);
-         fscanf(pFile, "%lg\n", &coord[3]);
-         fscanf(pFile, "%lg\n", &coord[4]);
-         fscanf(pFile, "%lg\n", &coord[5]);
-         fclose(pFile);
-         ////////////////////////////////////////////////////////
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "u_LB = " << u_LB);
-            UBLOG(logINFO, "rho_LB = " << rho_LB);
-            UBLOG(logINFO, "nu_LB = " << nu_LB);
-            UBLOG(logINFO, "dx coarse = " << deltaXcoarse << " m");
-            UBLOG(logINFO, "dx fine = " << grid->getDeltaX(refineLevel) << " m");
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-         }
-         
-         /////////////////////////////////////////////////////////////
-         /////////////////////////////////////////////////////////////
-         //bounding box
-//          double offsetMinX3 = pmL[2];
-// 
-//          double offsetMaxX1 = pmL[0]*lengthFactor;
-//          double offsetMaxX2 = pmL[1]*2.0;
-//          double offsetMaxX3 = channelHigh;
-// 
-//          double g_minX1 = origin[0];
-//          double g_minX2 = origin[1];
-//          double g_minX3 = origin[2];
-// 
-//          double g_maxX1 = origin[0]+offsetMaxX1;
-//          double g_maxX2 = origin[1]+offsetMaxX2;
-//          double g_maxX3 = origin[2]+offsetMaxX3;
-// 
-//          double blockLength = (double)blocknx[0]*deltaXcoarse;
-// 
-//          GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+offsetMinX3));
-//          if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-//          int bbOption = 1;
-//          D3Q27BoundaryConditionAdapterPtr bcNoSlip(new D3Q27NoSlipBCAdapter(bbOption));
-//          D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcNoSlip, Interactor3D::SOLID));
-// 
-//          SetSolidOrTransBlockVisitor v1(addWallZminInt, SetSolidOrTransBlockVisitor::SOLID);
-//          grid->accept(v1);
-//          SetSolidOrTransBlockVisitor v2(addWallZminInt, SetSolidOrTransBlockVisitor::TRANS);
-//          grid->accept(v2);
-// 
-//          std::vector<Block3DPtr> blocks;
-//          std::vector<Block3DPtr>& sb = addWallZminInt->getSolidBlockSet();
-//          if (myid==0) UBLOG(logINFO, "number of solid blocks = "<<sb.size());
-//          blocks.insert(blocks.end(), sb.begin(), sb.end());
-//          std::vector<Block3DPtr>& tb = addWallZminInt->getTransBlockSet();
-//          if (myid==0) UBLOG(logINFO, "number of trans blocks = "<<tb.size());
-//          blocks.insert(blocks.end(), tb.begin(), tb.end());
-// 
-//          if (myid==0) UBLOG(logINFO, "number of blocks = "<<blocks.size());
-// 
-//          BOOST_FOREACH(Block3DPtr block, blocks)
-//          {
-//             block->setActive(true);
-//             addWallZminInt->setDifferencesToGbObject3D(block);
-//          }
-// 
-//          //////////////////////////////////////////////
-//          ////METIS
-//          //Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY));
-//          //////////////////////////////////////////////
-//          ///////delete solid blocks
-//          //if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-//          //InteractorsHelper intHelper(grid, metisVisitor);
-//          //intHelper.addInteractor(addWallZminInt);
-//          //intHelper.selectBlocks();
-//          //if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-//          ////////////////////////////////////////
-//          //intHelper.setBC();
-//          //////////////////////////////////////////////////////////////
-// 
-//          BoundaryConditionBlockVisitor bcVisitor;
-//          grid->accept(bcVisitor);
-// 
-//          WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-//          ppblocks->process(0);
-//          ppblocks.reset();
-// 
-//          UbSchedulerPtr geoSch(new UbScheduler(1));
-//          MacroscopicQuantitiesCoProcessorPtr ppgeo(
-//             new MacroscopicQuantitiesCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true));
-//          ppgeo->process(0);
-//          ppgeo.reset();
-         ////////////////////////////////////////////////////////////////
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         restart = true;
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr nupsSch(new UbScheduler(nupsSteps));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-
-      MacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv);
-
-      double startStep = grid->getTimeStep();
-
-      //UbSchedulerPtr visSch(new UbScheduler());
-      //visSch->addSchedule(40000,40000,40000000);
-      //UbSchedulerPtr resSchRMS(new UbScheduler());
-      //resSchRMS->addSchedule(40000, startStep, 40000000);
-      //UbSchedulerPtr resSchMeans(new UbScheduler());
-      //resSchMeans->addSchedule(40000, startStep, 40000000);
-      //UbSchedulerPtr stepAvSch(new UbScheduler());
-      //stepAvSch->addSchedule(100, 0, 10000000);
-      //AverageValuesPostprocessor Avpp(grid, pathname, WbWriterVtkXmlBinary::getInstance(),
-      //   stepSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/, restart);
-
-
-      UbSchedulerPtr AdjForcSch(new UbScheduler());
-      AdjForcSch->addSchedule(10, 0, 10000000);
-      D3Q27IntegrateValuesHelperPtr intValHelp(new D3Q27IntegrateValuesHelper(grid, comm,
-         coord[0], coord[1], coord[2],
-         coord[3], coord[4], coord[5]));
-      if (myid == 0) GbSystem3D::writeGeoObject(intValHelp->getBoundingBox().get(), pathname + "/geo/IntValHelp", WbWriterVtkXmlBinary::getInstance());
-
-      double vxTarget=u_LB;
-      AdjustForcingCoProcessor AdjForcPPPtr(grid, AdjForcSch, pathname, intValHelp, vxTarget, comm);
-
-      //mu::Parser decrViscFunc;
-      //decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)");
-      //decrViscFunc.DefineConst("nue0", nu_LB*4.0);
-      //decrViscFunc.DefineConst("c0", 0.1);
-      //UbSchedulerPtr DecrViscSch(new UbScheduler());
-      //DecrViscSch->addSchedule(10, 0, 1000);
-      //DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch, &decrViscFunc, comm);
-
-	  //if (changeQs)
-	  //{
-		 // double z1 = pmL[2];
-		 // D3Q27IntegrateValuesHelperPtr intValHelp2(new D3Q27IntegrateValuesHelper(grid, comm,
-			//  coord[0], coord[1], z1 - deltaXfine,
-			//  coord[3], coord[4], z1 + deltaXfine));
-		 // if (myid == 0) GbSystem3D::writeGeoObject(intValHelp2->getBoundingBox().get(), pathname + "/geo/intValHelp2", WbWriterVtkXmlBinary::getInstance());
-		 // Utilities::ChangeRandomQs(intValHelp2);
-	  //}
-
-      std::vector<double> levelCoords;
-      std::vector<int> levels;
-      std::vector<double> bounds;
-      bounds.push_back(0);
-      bounds.push_back(0);
-      bounds.push_back(1e-3);
-      bounds.push_back(0.064);
-      bounds.push_back(0.008);
-      bounds.push_back(0.018);
-      levels.push_back(3);
-      levels.push_back(2);
-      levels.push_back(1);
-      levels.push_back(0);
-      levels.push_back(1);
-      levels.push_back(2);
-      levels.push_back(3);
-      levelCoords.push_back(0);
-      levelCoords.push_back(0.0016-6.0*deltaXfine);
-      levelCoords.push_back(0.0016);
-      levelCoords.push_back(0.0024-6.0*deltaXfine*2.0);
-      levelCoords.push_back(0.0024);
-      levelCoords.push_back(0.0048-6.0*deltaXfine*4.0);
-      levelCoords.push_back(0.0048);
-      levelCoords.push_back(0.0144);
-      levelCoords.push_back(0.0144+6.0*deltaXfine*4.0);
-      levelCoords.push_back(0.0168);
-      levelCoords.push_back(0.0168+6.0*deltaXfine*2.0);
-      levelCoords.push_back(0.0176);
-      levelCoords.push_back(0.0176+6.0*deltaXfine);
-      levelCoords.push_back(0.018);
-      UbSchedulerPtr tavSch(new UbScheduler(1, timeAvStart, timeAvStop));
-      TimeAveragedValuesCoProcessorPtr tav(new TimeAveragedValuesCoProcessor(grid, pathname, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,
-         TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations | TimeAveragedValuesCoProcessor::Triplecorrelations//));
-         ,levels, levelCoords, bounds, false));
-      if (averagingReset)
-      {
-	     tav->reset();
-      }
-      //UbSchedulerPtr catalystSch(new UbScheduler(1));
-      //InSituCatalystCoProcessor catalyst(grid, catalystSch, "pchannel.py");
-      
-      UbSchedulerPtr exitSch(new UbScheduler(10));
-      EmergencyExitCoProcessor exitCoProc(grid, exitSch, pathname, RestartCoProcessorPtr(&rp), comm);
-      
-      //create line time series
-      UbSchedulerPtr tpcSch(new UbScheduler(1,timeLineTsStart,timeLineTsStop));
-      
-      GbLine3DPtr line1(new GbLine3D(new GbPoint3D(0.0,0.004,0.00078),new GbPoint3D(0.064,0.004,0.00078)));
-      LineTimeSeriesCoProcessor lineTs1(grid, tpcSch,pathname+"/TimeSeries/line1.csv",line1, 3,comm);
-      if (myid==0) lineTs1.writeLine(pathname+"/geo/line1");
-      
-      GbLine3DPtr line2(new GbLine3D(new GbPoint3D(0.0,0.004,0.001+deltaXfine*8.0),new GbPoint3D(0.064,0.004,0.001+deltaXfine*8.0)));
-      LineTimeSeriesCoProcessor lineTs2(grid, tpcSch,pathname+"/TimeSeries/line2.csv",line2, 3,comm);
-      if (myid==0) lineTs2.writeLine(pathname+"/geo/line2");
-      
-      GbLine3DPtr line3(new GbLine3D(new GbPoint3D(0.03,0.0,0.00078),new GbPoint3D(0.03,0.008,0.00078)));
-      LineTimeSeriesCoProcessor lineTs3(grid, tpcSch,pathname+"/TimeSeries/line3.csv",line3, 3,comm);
-      if (myid==0) lineTs3.writeLine(pathname+"/geo/line3");
-      
-      GbLine3DPtr line4(new GbLine3D(new GbPoint3D(0.03,0.0,0.001+deltaXfine*8.0),new GbPoint3D(0.03,0.008,0.001+deltaXfine*8.0)));
-      LineTimeSeriesCoProcessor lineTs4(grid, tpcSch,pathname+"/TimeSeries/line4.csv",line4, 3,comm);
-      if (myid==0) lineTs4.writeLine(pathname+"/geo/line4");
-      
-      GbLine3DPtr line5(new GbLine3D(new GbPoint3D(0.0,0.004,0.002),new GbPoint3D(0.064,0.004,0.002)));
-      LineTimeSeriesCoProcessor lineTs5(grid, tpcSch,pathname+"/TimeSeries/line5.csv",line5,2,comm);
-      if (myid==0) lineTs5.writeLine(pathname+"/geo/line5");
-      
-      GbLine3DPtr line6(new GbLine3D(new GbPoint3D(0.0,0.004,0.0035),new GbPoint3D(0.064,0.004,0.0035)));
-      LineTimeSeriesCoProcessor lineTs6(grid, tpcSch,pathname+"/TimeSeries/line6.csv",line6,1,comm);
-      if (myid==0) lineTs6.writeLine(pathname+"/geo/line6");
-      
-      GbLine3DPtr line7(new GbLine3D(new GbPoint3D(0.0,0.004,0.009),new GbPoint3D(0.064,0.004,0.009)));
-      LineTimeSeriesCoProcessor lineTs7(grid, tpcSch,pathname+"/TimeSeries/line7.csv",line7,0,comm);
-      if (myid==0) lineTs7.writeLine(pathname+"/geo/line7");
-      
-      GbLine3DPtr line8(new GbLine3D(new GbPoint3D(0.0,0.004,0.015),new GbPoint3D(0.064,0.004,0.015)));
-      LineTimeSeriesCoProcessor lineTs8(grid, tpcSch,pathname+"/TimeSeries/line8.csv",line8,1,comm);
-      if (myid==0) lineTs8.writeLine(pathname+"/geo/line8");
-      
-      GbLine3DPtr line9(new GbLine3D(new GbPoint3D(0.0,0.004,0.017),new GbPoint3D(0.064,0.004,0.017)));
-      LineTimeSeriesCoProcessor lineTs9(grid, tpcSch,pathname+"/TimeSeries/line9.csv",line9,2,comm);
-      if (myid==0) lineTs9.writeLine(pathname+"/geo/line9");    
-      
-      GbLine3DPtr line10(new GbLine3D(new GbPoint3D(0.0,0.004,0.018-deltaXfine*14.0),new GbPoint3D(0.064,0.004,0.018-deltaXfine*14.0)));
-      LineTimeSeriesCoProcessor lineTs10(grid, tpcSch,pathname+"/TimeSeries/line10.csv",line10,3,comm);
-      if (myid==0) lineTs10.writeLine(pathname+"/geo/line10");  
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch));
-      if (averaging)
-      {
-         calculation->setTimeAveragedValuesCoProcessor(tav);
-      }
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/pChannel/pchannel.py b/apps/cpu/pChannel/pchannel.py
deleted file mode 100644
index a32efd60f157bc13a5fa6351a910f42405ee546c..0000000000000000000000000000000000000000
--- a/apps/cpu/pChannel/pchannel.py
+++ /dev/null
@@ -1,85 +0,0 @@
-try: paraview.simple
-except: from paraview.simple import *
-
-from paraview import coprocessing
-
-
-#--------------------------------------------------------------
-# Code generated from cpstate.py to create the CoProcessor.
-
-
-# ----------------------- CoProcessor definition -----------------------
-
-def CreateCoProcessor():
-  def _CreatePipeline(coprocessor, datadescription):
-    class Pipeline:
-      filename_3_pvtu = coprocessor.CreateProducer( datadescription, "input" )
-
-      #~ Slice1 = Slice( guiName="Slice1", Crinkleslice=0, SliceOffsetValues=[0.0], Triangulatetheslice=1, SliceType="Plane" )
-      #~ Slice1.SliceType.Offset = 0.0
-      #~ Slice1.SliceType.Origin = [34.5, 32.45, 27.95]
-      #~ Slice1.SliceType.Normal = [1.0, 0.0, 0.0]
-#~ 
-      #~ ParallelPolyDataWriter1 = coprocessor.CreateWriter( XMLPPolyDataWriter, "slice_%t.pvtp", 10 )
-
-      SetActiveSource(filename_3_pvtu)
-      #~ ParallelUnstructuredGridWriter1 = coprocessor.CreateWriter( XMLPUnstructuredGridWriter, "fullgrid_%t.pvtu", 100 )
-
-    return Pipeline()
-
-  class CoProcessor(coprocessing.CoProcessor):
-    def CreatePipeline(self, datadescription):
-      self.Pipeline = _CreatePipeline(self, datadescription)
-
-  coprocessor = CoProcessor()
-  freqs = {'input': [10, 100]}
-  coprocessor.SetUpdateFrequencies(freqs)
-  return coprocessor
-
-#--------------------------------------------------------------
-# Global variables that will hold the pipeline for each timestep
-# Creating the CoProcessor object, doesn't actually create the ParaView pipeline.
-# It will be automatically setup when coprocessor.UpdateProducers() is called the
-# first time.
-coprocessor = CreateCoProcessor()
-
-#--------------------------------------------------------------
-# Enable Live-Visualizaton with ParaView
-coprocessor.EnableLiveVisualization(True)
-
-
-# ---------------------- Data Selection method ----------------------
-
-def RequestDataDescription(datadescription):
-    "Callback to populate the request for current timestep"
-    global coprocessor
-    if datadescription.GetForceOutput() == True:
-        # We are just going to request all fields and meshes from the simulation
-        # code/adaptor.
-        for i in range(datadescription.GetNumberOfInputDescriptions()):
-            datadescription.GetInputDescription(i).AllFieldsOn()
-            datadescription.GetInputDescription(i).GenerateMeshOn()
-        return
-
-    # setup requests for all inputs based on the requirements of the
-    # pipeline.
-    coprocessor.LoadRequestedData(datadescription)
-
-# ------------------------ Processing method ------------------------
-
-def DoCoProcessing(datadescription):
-    "Callback to do co-processing for current timestep"
-    global coprocessor
-
-    # Update the coprocessor by providing it the newly generated simulation data.
-    # If the pipeline hasn't been setup yet, this will setup the pipeline.
-    coprocessor.UpdateProducers(datadescription)
-
-    # Write output data, if appropriate.
-    coprocessor.WriteData(datadescription);
-
-    # Write image capture (Last arg: rescale lookup table), if appropriate.
-    coprocessor.WriteImages(datadescription, rescale_lookuptable=False)
-
-    # Live Visualization, if enabled.
-    coprocessor.DoLiveVisualization(datadescription, "localhost", 22222)
diff --git a/apps/cpu/pDisk/CMakeLists.txt b/apps/cpu/pDisk/CMakeLists.txt
deleted file mode 100644
index 96e8db4cf640ca05b12093e572e474a87cabf046..0000000000000000000000000000000000000000
--- a/apps/cpu/pDisk/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(pDisk)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(pdisk BINARY)
diff --git a/apps/cpu/pDisk/configBombadilPdisk.cfg b/apps/cpu/pDisk/configBombadilPdisk.cfg
deleted file mode 100644
index 95df549a4712d46c93b3d656b758c83dbff4fdc5..0000000000000000000000000000000000000000
--- a/apps/cpu/pDisk/configBombadilPdisk.cfg
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-#Simulation parameters for porous disk
-#
-
-pathname = d:/temp/pDisk
-pathGeo = d:/Data/PorousDisk
-numOfThreads = 1
-availMem = 3e9
-logToFile = false
-
-#geometry
-diskFilename = PorousDiskDR.stl 
-mastFilename = Mast.stl
-
-#grid
-fineNodeDx = 10  # 0.3 / 0.2
-blocknx = 16 16 16
-refineLevel = 2
-geoLength = 5000 2000 2000
-
-#physic
-Re = 6.66e4
-u_LB = 0.01
-rho_LB = 0.0
-
-#averaging
-restart = false
-averaging = false
-
-restartStep = 20000
-restartStepStart=20000
-
-endTime = 60000
-outTime = 100
-
-
diff --git a/apps/cpu/pDisk/configHlrnPorousDisk.cfg b/apps/cpu/pDisk/configHlrnPorousDisk.cfg
deleted file mode 100644
index da50c9dac4ef4c61a782e57c7e941e7650a9fd3b..0000000000000000000000000000000000000000
--- a/apps/cpu/pDisk/configHlrnPorousDisk.cfg
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-#Simulation parameters for porous disk
-#
-
-pathname = /gfs1/work/niikonst/scratch/pDisk
-pathGeo = /gfs1/work/niikonst/data/PorousDisk
-numOfThreads = 24
-availMem = 128e9
-logToFile = true
-
-#geometry
-diskFilename = PorousDiskD2.stl 
-mastFilename = Mast.stl
-
-#grid
-fineNodeDx = 1.9  
-blocknx = 16 16 16
-refineLevel = 4
-geoLength = 5000 2000 2000
-
-#physic
-Re = 6.66e4
-u_LB = 0.01
-rho_LB = 0.0
-
-#averaging
-restart = false
-averaging = false
-
-restartStep = 10000
-restartStepStart=10000
-
-outTime = 10000
-
-endTime = 100000
-
diff --git a/apps/cpu/pDisk/pdisk.cpp b/apps/cpu/pDisk/pdisk.cpp
deleted file mode 100644
index fed4f38b64eb8fa8471fc9e0c389fe40f77ffd4a..0000000000000000000000000000000000000000
--- a/apps/cpu/pDisk/pdisk.cpp
+++ /dev/null
@@ -1,427 +0,0 @@
-
-
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <vfluids.h>
-
-using namespace std;
-
-
-void run(string configname)
-{
-   try
-   {
-      Configuration   config;
-      config.load(configname);
-
-      string          pathname          = config.getString("pathname");
-      string          pathGeo           = config.getString("pathGeo");
-      int             numOfThreads      = config.getInt("numOfThreads");
-      string          diskFilename      = config.getString("diskFilename");
-      string          mastFilename      = config.getString("mastFilename");
-      vector<int>     blocknx           = config.getVector<int>("blocknx");
-      double          restartStep       = config.getDouble("restartStep");
-      double          restartStepStart  = config.getDouble("restartStepStart");
-      double          endTime           = config.getDouble("endTime");
-      double          outTime           = config.getDouble("outTime");
-      double          availMem          = config.getDouble("availMem");
-      bool            logToFile         = config.getBool("logToFile");
-      vector<double>  geoLength         = config.getVector<double>("geoLength");
-      int             refineLevel       = config.getInt("refineLevel");
-      double          Re                = config.getDouble("Re");
-      double          u_LB              = config.getDouble("u_LB");
-      double          rho_LB            = config.getDouble("rho_LB");
-      double          fineNodeDx        = config.getDouble("fineNodeDx");
-      bool            restart           = config.getBool("restart");
-      bool            averaging         = config.getBool("averaging");
-
-      //UbLog::reportingLevel() = logDEBUG5;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-
-#if defined(__unix__)
-      if (myid==0) 
-      {
-         const char* str = pathname.c_str();
-         int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-      }
-#endif 
-
-      if(myid == 0 && logToFile)
-      {
-         stringstream logFilename;
-         logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-         UbLog::output_policy::setStream(logFilename.str());
-      }
-
-      if(myid==0) UBLOG(logINFO,"Test case: porous disk");
-
-      int baseLevel = 0;
-
-      double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte
-
-      double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte
-      double blockLengthx2 = blockLengthx1;
-      double blockLengthx3 = blockLengthx1;
-
-      bool periodicx1 = false;
-      bool periodicx2 = true;
-      bool periodicx3 = false;
-
-      int sizeSP= (int)(500.0/coarseNodeDx); //500 mm sponge layer
-      mu::Parser spongeLayer;
-      spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dt ? (sizeX-x1)/sizeSP/2.0 + 0.5 : 1.0");
-      spongeLayer.DefineConst("sizeX", 5000.0/coarseNodeDx);
-      spongeLayer.DefineConst("sizeSP", sizeSP);
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double nu_LB = (u_LB*(geoLength[2]/coarseNodeDx))/Re;
-
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter());
-      
-      Grid3DPtr grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(restartStep, restartStepStart));
-      RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-
-      
-
-      if (grid->getTimeStep() == 0)
-      {
-         if (myid==0) UBLOG(logINFO, "new start..");
-
-         if (myid==0) UBLOG(logINFO, "load geometry start");
-         GbTriFaceMesh3DPtr geoMast(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+mastFilename, "mast"));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoMast.get(), pathname + "/geo/geoMast", WbWriterVtkXmlBinary::getInstance());
-
-         GbTriFaceMesh3DPtr geoDisk(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+diskFilename, "disk"));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoDisk.get(), pathname + "/geo/geoDisk", WbWriterVtkXmlBinary::getInstance());
-         if (myid==0) UBLOG(logINFO, "load geometry end");
-
-         //bounding box
-         double g_minX1 = geoMast->getX1Centroid() - 2000.0;
-         double g_minX2 = geoMast->getX2Centroid() - 1000.0;
-         double g_minX3 = geoMast->getX3Minimum();
-
-         double g_maxX1 = g_minX1 + geoLength[0];
-         double g_maxX2 = g_minX2 + geoLength[1];
-         double g_maxX3 = g_minX3 + geoLength[2];
-
-         double nx1_temp = floor((g_maxX2-g_minX2) /(coarseNodeDx*(double)blocknx[1]));
-
-         coarseNodeDx = (g_maxX2-g_minX2) /(nx1_temp*(double)blocknx[1]);
-
-         fineNodeDx = coarseNodeDx / (double)(1<<refineLevel);
-
-         //set grid
-         grid->setDeltaX(coarseNodeDx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         grid->setPeriodicX1(periodicx1);
-         grid->setPeriodicX2(periodicx2);
-         grid->setPeriodicX3(periodicx3);
-
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         //////////////////////////////////////////////////////////////////////////
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            UBLOG(logINFO, "* Re                = "<<Re);
-            UBLOG(logINFO, "* nu_LB             = "<<nu_LB);
-            UBLOG(logINFO, "* u_LB              = "<<u_LB);
-            UBLOG(logINFO, "* cdx               = "<<coarseNodeDx<<" mm");
-            UBLOG(logINFO, "* fdx               = "<<fineNodeDx<<" mm");
-            UBLOG(logINFO, "* nx1/2/3           = "<<grid->getNX1()<<"/"<<grid->getNX2()<<"/"<<grid->getNX3());
-            UBLOG(logINFO, "* blocknx1/2/3      = "<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-            UBLOG(logINFO, "* x1Periodic        = "<<periodicx1);
-            UBLOG(logINFO, "* x2Periodic        = "<<periodicx2);
-            UBLOG(logINFO, "* x3Periodic        = "<<periodicx3);
-            UBLOG(logINFO, "* number of levels  = "<<refineLevel+1);
-            UBLOG(logINFO, "* path              = "<<pathname);
-
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* number of threads    = "<<numOfThreads);
-            UBLOG(logINFO, "* number of processes  = "<<comm->getNumberOfProcesses());
-            UBLOG(logINFO, "*****************************************");
-            //UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString());
-            //UBLOG(logINFO, "*****************************************");     
-         }
-
-         ////walls
-         GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_minX2, g_maxX3+blockLengthx1));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLengthx1, g_maxX2, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_minX3 - blockLengthx1, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_maxX3, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_maxX3 + blockLengthx1));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcNoSlip(new D3Q27NoSlipBCAdapter(bbOption));
-         D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcNoSlip, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcNoSlip, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcNoSlip, Interactor3D::SOLID));
-         D3Q27BoundaryConditionAdapterPtr bcSlip(new D3Q27SlipBCAdapter());
-         D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcSlip, Interactor3D::SOLID));
-
-         D3Q27TriFaceMeshInteractorPtr mastInt(new D3Q27TriFaceMeshInteractor(geoMast, grid, bcNoSlip, Interactor3D::SOLID, Interactor3D::POINTS));
-         D3Q27TriFaceMeshInteractorPtr diskInt(new D3Q27TriFaceMeshInteractor(geoDisk, grid, bcNoSlip, Interactor3D::SOLID, Interactor3D::POINTS));
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_minX1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr inflowInt(new D3Q27Interactor(geoInflow, grid, Interactor3D::SOLID));
-
-         //inflow
-         mu::Parser inflowProfile;
-         //inflowProfile.SetExpr("u_ref*(((x3+Z_ref)/Z_ref)^a)");
-         inflowProfile.SetExpr("u_ref");
-         inflowProfile.DefineConst("u_ref", u_LB);
-         inflowProfile.DefineConst("Z_ref", 300.0);
-         inflowProfile.DefineConst("a", 0.143);
-
-         D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter(true, false, false, inflowProfile, 0, D3Q27BCFunction::INFCONST));
-         inflowInt->addBCAdapter(velBCAdapter);
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rho_LB));
-         D3Q27InteractorPtr outflowInt(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
-
-         {
-            if (myid == 0) UBLOG(logINFO, "Write blocks - start"); 
-            BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-            if (myid == 0)
-               ppblocks->update(0);
-            if (myid == 0) UBLOG(logINFO, "Write blocks - end"); 
-         }
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));	
-        
-         //////////////////////////////////////////////////////////////////////////
-         //refinement
-         double diameter = geoDisk->getLengthX2();
-         GbCuboid3DPtr refineDiskBox(new GbCuboid3D(geoDisk->getX1Centroid()-0.2*diameter, geoDisk->getX2Centroid()-0.6*diameter, geoDisk->getX3Minimum()-diameter, 
-            geoDisk->getX1Centroid() + 1.0*diameter, geoDisk->getX2Centroid()+0.6*diameter, geoDisk->getX3Maximum() + 0.05*diameter));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineDiskBox.get(), pathname + "/geo/refineDiskBox", WbWriterVtkXmlASCII::getInstance());
-
-         if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(refineDiskBox, refineLevel);
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         {
-            if (myid == 0) UBLOG(logINFO, "Write blocks - start");
-            BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-            if (myid == 0)
-               ppblocks->update(1);
-            if (myid == 0) UBLOG(logINFO, "Write blocks - end");
-         }
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(mastInt);
-         intHelper.addInteractor(diskInt);
-         //intHelper.addInteractor(addWallYminInt);
-         //intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.selectBlocks();
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-         //////////////////////////////////////
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx[0])* (blocknx[1])* (blocknx[2]);
-         unsigned long nod = nob * (blocknx[0])* (blocknx[1])* (blocknx[2]);
-         unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[2] + gl);
-         double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << nob);
-            UBLOG(logINFO, "Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         ////////////////////////////
-         LBMKernel3DPtr kernel;
-         //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-         //with sponge layer
-         kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-         kernel->setWithSpongeLayer(true);
-         kernel->setSpongeLayer(spongeLayer);
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         BoundaryConditionPtr densityBC(new NonEqDensityBoundaryCondition());
-         BoundaryConditionPtr noSlipBC(new NoSlipBoundaryCondition());
-         BoundaryConditionPtr velocityBC(new VelocityBoundaryCondition());
-         BoundaryConditionPtr slipBC(new SlipBoundaryCondition());
-
-         bcProc->addBC(densityBC);
-         bcProc->addBC(noSlipBC);
-         bcProc->addBC(velocityBC);
-         bcProc->addBC(slipBC);
-         kernel->setBCProcessor(bcProc);
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-         //////////////////////////////////
-         //undef nodes
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-         //////////////////////////////////////////
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         intHelper.setBC();
-
-         BoundaryConditionBlockVisitor bcVisitor;
-         grid->accept(bcVisitor);
-
-         //initialization of decompositions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor( nu_LB,rho_LB);
-         //initVisitor.setVx1(inflowProfile);
-         initVisitor.setVx1(u_LB);
-         grid->accept(initVisitor);
-
-         //Postprozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), 
-            unitConverter, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-         geoSch.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-      }
-      else
-      {
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept( setConnsVisitor );
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-         //SetSpongeLayerBlockVisitor ssp(spongeLayer);
-         //grid->accept(ssp);
-         if(myid == 0) UBLOG(logINFO,"Restart - end"); 
-      }
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-
-      double startStep = 80000;
-
-      if (averaging)
-      {
-         UbSchedulerPtr resSchRMS(new UbScheduler());
-         resSchRMS->addSchedule(100000, 80000, 10000000);
-         UbSchedulerPtr resSchMeans(new UbScheduler());
-         resSchMeans->addSchedule(100000, 80000, 10000000);
-         UbSchedulerPtr stepAvSch(new UbScheduler());
-         int averageInterval=100;
-         stepAvSch->addSchedule(averageInterval, 0, 10000000);
-
-         AverageValuesPostprocessor Avpp(grid, pathname, WbWriterVtkXmlBinary::getInstance(),
-            visSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/, restart);
-      }
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30));
-      nupsSch->addSchedule(1000, 1000, 1000000000);
-      NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm);
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      //double endTime = 80001;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-   return 0;
-}
-
diff --git a/apps/cpu/perm/CMakeLists.txt b/apps/cpu/perm/CMakeLists.txt
deleted file mode 100644
index 108fa0857c2482ab0fdecb3b250c9b1f66934706..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(perm)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(perm BINARY)
diff --git a/apps/cpu/perm/config.txt b/apps/cpu/perm/config.txt
deleted file mode 100644
index 01be8321c2dbd99bd6ab7cc578577ecd7c9bda9f..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/config.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-pathname = /gfs1/work/niikonst/scratch/permAlu
-pathGeo = /gfs1/work/niikonst/data/materials
-numOfTreads = 24
-
-#poroeses Medium
-
-sampleFilename = alu_80-110.vti
-
-#Diminsion in Voxel
-pmNX1 = 1096
-pmNX2 = 1327
-pmNX3 = 1265
-
-#Threshold
-lthreshold = 29041
-uthreshold = 65535
-
-#Diminsion in m
-pmL1 = 4e-3
-pmL2 = 5e-3
-pmL3 = 5e-3
-
-dp_LB = 0.01
-
-#for Re=2
-nu_LB = 0.02
-
-#for Re=100
-#nu_LB = 0.0004
-
-#nu -= nuFactor*simNumber
-#coefficient for nu (0.02-0.0004)/10
-nuFactor = 0.00196
-#simulation number
-simNumber = 1
-
-restartStep = 20000
-#immer 40000 pro Job
-endTime = 140000
-outTime = 20000
-nupsStep = 10 80010 80100
\ No newline at end of file
diff --git a/apps/cpu/perm/configBombadil.txt b/apps/cpu/perm/configBombadil.txt
deleted file mode 100644
index 93229b8465de908ecdf62aa29c1d7433a11b3f76..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/configBombadil.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-pathname = d:/temp/perm2
-pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/Alu_80-110
-numOfTreads = 4
-
-#poroeses Medium
-
-sampleFilename = /alu_80-110.vti
-
-#Diminsion in Voxel
-pmNX1 = 200
-pmNX2 = 200
-pmNX3 = 200
-
-#Threshold
-lthreshold = 29041
-uthreshold = 65535
-
-#Diminsion in m
-pmL1 = 0.726e-3
-pmL2 = 0.75e-3
-pmL3 = 0.786e-3
-
-#dp_LB = 1e-9
-dp_LB = 1e-1
-nu_LB = 2e-5
-
-timeSeriesOut = /timeseries/simAlu80_5
-
-restartStep = 300
-restartStepStart = 300
-#immer 40000 pro Job
-endTime = 140000
-outTime = 10
-nupsStep = 10 80010 80100
\ No newline at end of file
diff --git a/apps/cpu/perm/configBombadil2.txt b/apps/cpu/perm/configBombadil2.txt
deleted file mode 100644
index 1d6cdc954f0a9f7965c3e2595a55d86759a10ac0..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/configBombadil2.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-pathname = d:/temp/perm
-pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/Alu_80-110
-numOfTreads = 4
-
-#poroeses Medium
-
-sampleFilename = /alu_80-110.vti
-
-#Diminsion in Voxel
-pmNX1 = 200
-pmNX2 = 200
-pmNX3 = 200
-
-#Threshold
-lthreshold = 29041
-uthreshold = 65535
-
-#Diminsion in m
-pmL1 = 0.726e-3
-pmL2 = 0.75e-3
-pmL3 = 0.786e-3
-
-dp_LB = 0.001
-#nu_LB = 0.168666666667
-#nu_LB = 0.168666666667e-1
-#nu_LB = 0.168666666667e-2
-#nu_LB = 0.168666666667e-3
-nu_LB = 0.168666666667e-4
-
-timeSeriesOut = /timeseries/simAlu80_5
-
-restartStep = 20000
-#immer 40000 pro Job
-endTime = 140000
-outTime = 1000
-nupsStep = 10 80010 80100
\ No newline at end of file
diff --git a/apps/cpu/perm/configBombadilSBP120s.txt b/apps/cpu/perm/configBombadilSBP120s.txt
deleted file mode 100644
index adad95f0a7e50b7436801b1be21446afe72360be..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/configBombadilSBP120s.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-#Simulation parameters for determitatoin of permeability
-#SBP120
-
-pathname = d:/temp/perm
-pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/SBP120
-numOfThreads = 4
-availMem = 1.2e9
-
-#porous media
-rawFile = false
-sampleFilename = /SPB120s_center_closed.vti
-
-#diminsions [voxel]
-pmNX1 = 680
-pmNX2 = 689
-pmNX3 = 787
-
-#threshold
-lthreshold = 1
-uthreshold = 1
-
-#diminsions [m]
-pmL1 = 2.55e-3
-pmL2 = 2.55000278e-3
-pmL3 = 2.95125e-3
-
-#grid
-blocknx = 10
-nx3 = 10
-
-#physic
-dp_LB = 0.001
-nu_LB = 0.01
-
-timeSeriesOut = /timeseries/simSBP120_1
-
-restartStep = 20000
-restartStepStart=20000
-
-endTime = 140000
-outTime = 1000
diff --git a/apps/cpu/perm/configBombadilSBP120s500.txt b/apps/cpu/perm/configBombadilSBP120s500.txt
deleted file mode 100644
index 9e8584b98ad7e3056a35b19976bdf9724b9f1571..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/configBombadilSBP120s500.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-#Simulation parameters for determitatoin of permeability
-#SBP120
-
-pathname = d:/temp/perm
-pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/SBP120
-numOfThreads = 4
-availMem = 3e9
-logToFile = false
-
-#porous media
-rawFile = false
-sampleFilename = /SBP120s500_center_closed.vti
-
-#diminsions [voxel]
-pmNX1 = 500
-pmNX2 = 500
-pmNX3 = 500
-
-#threshold
-#lthreshold = 38370
-#uthreshold = 65535
-lthreshold = 1
-uthreshold = 1
-
-
-#diminsions [m]
-pmL1 = 1.87e-3
-pmL2 = 1.87e-3
-pmL3 = 1.87e-3
-
-#grid
-#blocknx = 30
-#nx3 = 5
-blocknx = 50
-nx3 = 10
-spongeLayer=true
-
-#physic
-dp_LB = 1e-7
-nu_LB = 0.01
-
-timeSeriesFile = /timeseries/simSBP120_1
-timeSeriesOutTime = 10
-
-restartStep = 20000
-restartStepStart=20000
-
-endTime = 60000
-outTime = 100
diff --git a/apps/cpu/perm/configHlrnAlu.txt b/apps/cpu/perm/configHlrnAlu.txt
deleted file mode 100644
index 55b9bd3f2275452b85c73f1cc2ed86d5ecf43377..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/configHlrnAlu.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-pathname = /gfs1/work/niikonst/scratch/permAlu80
-pathGeo = /gfs1/work/niikonst/data/materials
-
-numOfTreads = 1
-
-#poroeses Medium
-
-sampleFilename = /alu_80-110.vti
-
-#Diminsion in Voxel
-pmNX1 = 200
-pmNX2 = 200
-pmNX3 = 200
-
-#Threshold
-lthreshold = 29041
-uthreshold = 65535
-
-#Diminsion in m
-pmL1 = 0.726e-3
-pmL2 = 0.75e-3
-pmL3 = 0.786e-3
-
-dp_LB = 0.001
-nu_LB = 0.15
-
-timeSeriesOut = /timeseries/simAlu80_1
-
-restartStep = 20
-#immer 40000 pro Job
-#endTime = 140000
-endTime = 60
-outTime = 10
-nupsStep = 10 80010 80100
\ No newline at end of file
diff --git a/apps/cpu/perm/configSBP120.txt b/apps/cpu/perm/configSBP120.txt
deleted file mode 100644
index 1d28d643c428b45b8ffbf6d882cc09932e08c416..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/configSBP120.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-#
-#Simulation parameters for determitatoin of permeability
-#SBP120
-
-pathname = /beegfs/work/koskuche/perm
-pathGeo = /work/koskuche/data/Permiability/isotropic
-numOfThreads = 10
-availMem = 320e9
-logToFile = true
-
-#porous media
-rawFile = true
-sampleFilename = /Sinterbronze_SBP120_1358x1376x1572.raw
-
-#diminsions [voxel]
-pmNX1 = 1358
-pmNX2 = 1376
-pmNX3 = 1572
-
-#threshold
-lthreshold = 38370
-uthreshold = 65535
-
-#diminsions [m]
-pmL1 = 5092499.73e-9
-pmL2 = 5159999.85e-9
-pmL3 = 5894999.98e-9
-
-#test
-#########################################
-#rawFile = false
-#sampleFilename = /SBP120s500_center.vti
-#pmNX1 = 500
-#pmNX2 = 500
-#pmNX3 = 500
-#lthreshold = 1
-#uthreshold = 1
-#pmL1 = 0.001875
-#pmL2 = 0.001875
-#pmL3 = 0.001875
-########################################
-
-writeSampleToFile = false
-
-#grid
-blocknx = 32
-deltax = 3750e-9
-
-#physic
-dpLB = 1e-7
-nuLB = 0.01
-
-timeSeriesFile = /timeseries/simSBP120_1
-timeSeriesOutTime = 10
-
-restartStep = 20000
-restartStepStart=20000
-
-newStart = true
-restartStep = 31000
-
-cpStep = 1000
-cpStart = 1000
-
-outTimeStep = 1000
-outTimeStart = 1000
-
-nupsStep = 100 100 10000000
-
-endTime = 390000000
diff --git a/apps/cpu/perm/config_HLRS_SBP120.cfg b/apps/cpu/perm/config_HLRS_SBP120.cfg
deleted file mode 100644
index 720302622a33d7cb8119e66c82a0992383da511e..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/config_HLRS_SBP120.cfg
+++ /dev/null
@@ -1,43 +0,0 @@
-#HLRS
-#Simulation parameters for determitatoin of permeability
-#SBP120
-
-pathname = /univ_1/ws1/ws/xrmkuchr-perm-0/SBP120
-pathGeo = /univ_1/ws1/ws/xrmkuchr-perm-0/SBP120/Data
-numOfThreads = 24
-availMem = 128e9
-logToFile = true
-#porous media
-rawFile = false
-sampleFilename = /Sinterbronze_SBP120_1358x1376x1572.raw
-
-#diminsions [voxel]
-pmNX1 = 1358
-pmNX2 = 1376
-pmNX3 = 1572
-
-#threshold
-lthreshold = 38370
-uthreshold = 65535
-
-#diminsions [m]
-pmL1 = 5092499.73e-9
-pmL2 = 5159999.85e-9
-pmL3 = 5894999.98e-9
-
-#grid
-blocknx = 64
-nx3 = 22
-
-#physic
-dp_LB = 1e-7
-nu_LB = 0.01
-
-timeSeriesFile = /timeseries/simSBP120_1
-timeSeriesOutTime = 100
-
-restartStep = 1000
-restartStepStart=1000
-
-endTime = 2000
-outTime = 1000
diff --git a/apps/cpu/perm/perm.cpp b/apps/cpu/perm/perm.cpp
deleted file mode 100644
index 4ea9ac93742da1bc65cd266d028bd09bcc195811..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/perm.cpp
+++ /dev/null
@@ -1,513 +0,0 @@
-#include <iostream>
-#include <string>
-#include <VirtualFluids.h>
-
-using namespace std;
-
-//////////////////////////////////////////////////////////////////////////
-void perm(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getValue<string>("pathname");
-      string          pathGeo = config.getValue<string>("pathGeo");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      string          sampleFilename = config.getValue<string>("sampleFilename");
-      int             pmNX1 = config.getValue<int>("pmNX1");
-      int             pmNX2 = config.getValue<int>("pmNX2");
-      int             pmNX3 = config.getValue<int>("pmNX3");
-      double          lthreshold = config.getValue<double>("lthreshold");
-      double          uthreshold = config.getValue<double>("uthreshold");
-      double          pmL1 = config.getValue<double>("pmL1");
-      double          pmL2 = config.getValue<double>("pmL2");
-      double          pmL3 = config.getValue<double>("pmL3");
-      int             blocknx = config.getValue<int>("blocknx");
-      double          dpLB = config.getValue<double>("dpLB");
-      double          nuLB = config.getValue<double>("nuLB");
-      string          timeSeriesFile = config.getValue<string>("timeSeriesFile");
-      double          restartStep = config.getValue<double>("restartStep");
-      double          restartStepStart = config.getValue<double>("restartStepStart");
-      double          endTime = config.getValue<double>("endTime");
-      double          availMem = config.getValue<double>("availMem");
-      bool            rawFile = config.getValue<bool>("rawFile");
-      double          timeSeriesOutTime = config.getValue<double>("timeSeriesOutTime");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      bool            newStart = config.getValue<bool>("newStart");
-      double          cpStart = config.getValue<double>("cpStart");
-      double          cpStep = config.getValue<double>("cpStep");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-      double          outTimeStep = config.getValue<double>("outTimeStep");
-      double          outTimeStart = config.getValue<double>("outTimeStart");
-      double          deltax = config.getValue<double>("deltax");
-      bool            writeSampleToFile = config.getValue<bool>("writeSampleToFile");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            int status = mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      //Sleep(30000);
-
-      if (myid == 0) UBLOG(logINFO, "Testcase permeability");
-
-      if (myid == 0)
-      {
-         //string machinename = UbSystem::getMachineName();
-         //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename);
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      int blocknx1 = blocknx;
-      int blocknx2 = blocknx;
-      int blocknx3 = blocknx;
-
-      LBMReal rhoLB = 0.0;
-
-      double rhoLBinflow = dpLB*3.0;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      double coord[6];
-
-
-
-      ///close void space
-      //////////////////////////////////////////////////////////////////////////
-      //{
-      //   string samplePathname = pathGeo + sampleFilename;
-
-      //   double deltaVoxelX1 = pmL1/(double)pmNX1;
-      //   double deltaVoxelX2 = pmL2/(double)pmNX2;
-      //   double deltaVoxelX3 = pmL3/(double)pmNX3;
-
-      //   GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-      //   if (rawFile)
-      //   {
-      //      sample->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-      //   }
-      //   else
-      //   {
-      //      sample->readMatrixFromVtiASCIIFile(samplePathname);
-      //   }
-
-      //   sample->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-      //   sample->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-
-      //   if (myid == 0) sample->writeToVTKImageDataASCII(pathname + "/geo/sampleOpen");
-      //   sample->calculateNumberOfSolidAndFluid();
-      //   if (myid == 0)  UBLOG(logINFO, "number of solid = "<<sample->getNumberOfSolid());
-      //   if (myid == 0)  UBLOG(logINFO, "number of fluid = "<<sample->getNumberOfFluid());
-
-      //   sample->setClosedVoidSpaceToSolid();
-
-      //   if (myid == 0) sample->writeToVTKImageDataASCII(pathname + "/geo/sampleClosed");
-
-      //   sample->calculateNumberOfSolidAndFluid();
-      //   if (myid == 0)  UBLOG(logINFO, "number of solid = "<<sample->getNumberOfSolid());
-      //   if (myid == 0)  UBLOG(logINFO, "number of fluid = "<<sample->getNumberOfFluid());
-
-      //   UBLOG(logINFO, "Finish!");
-      //   return;
-      //}
-      //////////////////////////////////////////////////////////////////////////
-
-      ////////////////////////////////////////////////////////////////////////
-      //Grid
-      //////////////////////////////////////////////////////////////////////////
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      //BC adapters
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-
-      SPtr<BCAdapter> denBCAdapterInflow(new DensityBCAdapter(rhoLBinflow));
-      denBCAdapterInflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
-
-      SPtr<BCAdapter> denBCAdapterOutflow(new DensityBCAdapter(rhoLB));
-      denBCAdapterOutflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
-
-      //////////////////////////////////////////////////////////////////////////////////
-      //BS visitor
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-      bcVisitor.addBC(denBCAdapterInflow);
-      bcVisitor.addBC(denBCAdapterOutflow);;
-
-      SPtr<BCProcessor> bcProc;
-      bcProc = SPtr<BCProcessor>(new BCProcessor());
-
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-
-      kernel->setBCProcessor(bcProc);
-
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathname+"/mig", comm));
-      migCoProcessor->setLBMKernel(kernel);
-      migCoProcessor->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-      
-	 if (myid == 0)
-	 {
-		UBLOG(logINFO, "Parameters:");
-		UBLOG(logINFO, "rhoLB = " << rhoLB);
-		UBLOG(logINFO, "nuLB = " << nuLB);
-		UBLOG(logINFO, "dpLB = " << dpLB);
-		UBLOG(logINFO, "dx = " << deltax << " m");
-
-		UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-		UBLOG(logINFO, "path = " << pathname);
-		UBLOG(logINFO, "Preprozess - start");
-	 }      
-
-      if (newStart)
-      {
-         if (myid == 0) UBLOG(logINFO, "new start..");
-
-         if (myid == 0)
-         {
-            //UBLOG(logINFO, "new start PID = " << myid << " Hostname: " << machinename);
-            UBLOG(logINFO, "new start PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-            UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-            UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-         }
-
-         string samplePathname = pathGeo + sampleFilename;
-
-         double deltaVoxelX1 = pmL1/(double)pmNX1;
-         double deltaVoxelX2 = pmL2/(double)pmNX2;
-         double deltaVoxelX3 = pmL3/(double)pmNX3;
-
-         SPtr<GbVoxelMatrix3D> sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         if (rawFile)
-         {
-            sample->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-         }
-         else
-         {
-            sample->readMatrixFromVtiASCIIFile(samplePathname);
-         }
-
-         sample->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-         sample->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-
-         if (myid == 0 && writeSampleToFile) sample->writeToVTKImageDataASCII(pathname + "/geo/sample");
-
-         ///////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////
-
-         double offset1 = sample->getLengthX1()/10.0;
-         double offset2 = 2.0*offset1;
-         //bounding box
-         double g_minX1 = sample->getX1Minimum() - offset1;
-         double g_minX2 = sample->getX2Minimum();
-         double g_minX3 = sample->getX3Minimum();
-
-         double g_maxX1 = sample->getX1Maximum() + offset2;
-         double g_maxX2 = sample->getX2Maximum();
-         double g_maxX3 = sample->getX3Maximum();
-
-         double blockLength = (double)blocknx1*deltax;
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(false);
-         grid->setPeriodicX3(false);
-         grid->setDeltaX(deltax);
-         grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-         SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         //walls
-         GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         //PM interactor
-         SPtr<D3Q27Interactor> sampleInt(new D3Q27Interactor(sample, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-         //wall interactors
-         SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-		 //inflow
-         SPtr<D3Q27Interactor> inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID));
-
-         //outflow
-         SPtr<D3Q27Interactor> outflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID));;
-
-         if (myid == 0)
-         {
-            //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename);
-            UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-            UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-            UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-         }
-
-         ////////////////////////////////////////////
-         //METIS
-          SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, MetisPartitioner::RECURSIVE));
-         ////////////////////////////////////////////
-
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(addWallYminInt);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.addInteractor(sampleInt);
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         {
-            WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppblocks.process(1);
-         }
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nodg = nob * (blocknx1 + gl) * (blocknx2 + gl) * (blocknx3 + gl);
-         double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << nob);
-            UBLOG(logINFO, "Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-
-         //BC
-         intHelper.setBC();
-
-
-         //Press*1.6e8+(14.76-coordsX)/3.5*5000
-         //initialization of distributions
-         mu::Parser fct;
-         fct.SetExpr("(x1max-x1)/l*dp*3.0");
-         fct.DefineConst("dp", dpLB);
-         fct.DefineConst("x1max", g_maxX1);
-         fct.DefineConst("l", g_maxX1-g_minX1);
-
-         InitDistributionsBlockVisitor initVisitor;
-         initVisitor.setRho(fct);
-         grid->accept(initVisitor);
-
-         //Post process
-         {
-            SPtr<UbScheduler> geoSch(new UbScheduler(1));
-            WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm);
-            ppgeo.process(0);
-         }
-
-         coord[0] = sample->getX1Minimum();
-         coord[1] = sample->getX2Minimum();
-         coord[2] = sample->getX3Minimum();
-         coord[3] = sample->getX1Maximum();
-         coord[4] = sample->getX2Maximum();
-         coord[5] = sample->getX3Maximum();
-
-         ////////////////////////////////////////////////////////
-         FILE * pFile;
-         string str = pathname + "/checkpoints/coord.txt";
-         pFile = fopen(str.c_str(), "w");
-         fprintf(pFile, "%g\n", deltax);
-         fprintf(pFile, "%g\n", coord[0]);
-         fprintf(pFile, "%g\n", coord[1]);
-         fprintf(pFile, "%g\n", coord[2]);
-         fprintf(pFile, "%g\n", coord[3]);
-         fprintf(pFile, "%g\n", coord[4]);
-         fprintf(pFile, "%g\n", coord[5]);
-         fclose(pFile);
-         ////////////////////////////////////////////////////////
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         ////////////////////////////////////////////////////////
-         FILE * pFile;
-         string str = pathname + "/checkpoints/coord.txt";
-         pFile = fopen(str.c_str(), "r");
-         fscanf(pFile, "%lg\n", &deltax);
-         fscanf(pFile, "%lg\n", &coord[0]);
-         fscanf(pFile, "%lg\n", &coord[1]);
-         fscanf(pFile, "%lg\n", &coord[2]);
-         fscanf(pFile, "%lg\n", &coord[3]);
-         fscanf(pFile, "%lg\n", &coord[4]);
-         fscanf(pFile, "%lg\n", &coord[5]);
-         fclose(pFile);
-         ////////////////////////////////////////////////////////
-
-         migCoProcessor->restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-         
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      
-      ////set connectors
-      SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolator());
-      SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-      grid->accept(setConnsVisitor);
-
-      //bcVisitor should be accept after initialization!!!!
-      grid->accept(bcVisitor);
-      if (myid == 0) UBLOG(logINFO, "grid->accept(bcVisitor):end");
-      
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      std::shared_ptr<CoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm));
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep, outTimeStart));
-
-      SPtr<CoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-      deltax = grid->getDeltaX(baseLevel);
-      double dxd2 = deltax / 2.0;
-
-      SPtr<IntegrateValuesHelper> ih1(new IntegrateValuesHelper(grid, comm, coord[0] - dxd2*10.0, coord[1] - dxd2, coord[2] - dxd2,
-         coord[0] - dxd2*10.0 - 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2));
-
-      //D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, coord[3]/2.0, coord[1] - dxd2, coord[2] - dxd2,
-      //   coord[3]/2.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2));
-      SPtr<IntegrateValuesHelper> ih2(new IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]));
-
-      SPtr<IntegrateValuesHelper> ih3(new IntegrateValuesHelper(grid, comm, coord[3] + dxd2*10.0, coord[1] - dxd2, coord[2] - dxd2,
-         coord[3] + dxd2*10.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2));
-
-      //D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]));
-      if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance());
-      if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance());
-      if (myid == 0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname + "/geo/ih3", WbWriterVtkXmlBinary::getInstance());
-
-      double factorp = 1; // dp_real / dpLB;
-      double factorv = 1;// dx / dt;
-      SPtr<UbScheduler> stepMV(new UbScheduler(timeSeriesOutTime));
-      
-      SPtr<CoProcessor> tsp1(new TimeseriesCoProcessor(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm));
-      SPtr<CoProcessor> tsp2(new TimeseriesCoProcessor(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm));
-      SPtr<CoProcessor> tsp3(new TimeseriesCoProcessor(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm));
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      omp_set_num_threads(numOfThreads);
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-      SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime));
-      calculator->addCoProcessor(nupsCoProcessor);
-      calculator->addCoProcessor(tsp1);
-      calculator->addCoProcessor(tsp2);
-      calculator->addCoProcessor(tsp3);
-      calculator->addCoProcessor(writeMQCoProcessor);
-      calculator->addCoProcessor(migCoProcessor);
-      
-
-
-      if (myid==0) UBLOG(logINFO, "Simulation-start");
-      calculator->calculate();
-      if (myid==0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         perm(string(argv[1]));
-      }
-      else
-      {
-         cout<<"Configuration file must be set!: "<<argv[0]<<" <config file>"<<endl<<std::flush;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/perm/perm.cpp_s b/apps/cpu/perm/perm.cpp_s
deleted file mode 100644
index e40c55fbf49d157433822462cfa5e0cfec9636a6..0000000000000000000000000000000000000000
--- a/apps/cpu/perm/perm.cpp_s
+++ /dev/null
@@ -1,442 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <vfluids.h>
-
-using namespace std;
-
-
-void perm(const char *configname)
-{
-   try
-   {
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname, pathGeo;
-      int numOfThreads;
-      double availMem;
-
-      ConfigFileReader cf(configname);
-      if (!cf.read())
-      {
-         std::string exceptionText = "Unable to read configuration file\n";
-         throw exceptionText;
-      }
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (machine == "BOMBADIL")
-      {
-         numOfThreads = 4;
-         pathname = "d:/temp/perm";
-         pathGeo = "d:/Projects/SFB880/GeometrienPoroeseMedien/Allu_80-110";
-         availMem = 15.0e9;
-      }
-      else //if (machine == "M01" || machine == "M02")
-      {
-         numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfTreads"));
-         pathname = cf.getValue("pathname");
-         pathGeo = cf.getValue("pathGeo");
-         availMem = 12.0e9;
-
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            int status = mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      //else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-
-
-      if (myid == 0) UBLOG(logINFO, "Testcase permebility");
-
-      Grid3DPtr grid(new Grid3D(comm));
-  
-      const int blocknx1 = 64;
-      const int blocknx2 = 64;
-      const int blocknx3 = 64;
-
-      LBMReal rho_LB = 0.0;
-
-      //Re = (Lp*u)/nu, Lp - size of pore, u - volume-avaraged velocity, nu - viscositi
-      double Re = 1.0;
-      double u_LB = 0.01;
-
-      //dp/dx ~ u for laminar flow
-      double dp_LB = 0.0001;
-      double rhoLBinflow = dp_LB*3.0;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-      const int refineLevel = 0;
-
-      double nx3 = 3.0; //number of blocks for z
-      double deltax;
-      double coord[6];
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(50000, 50000, 10000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (grid->getTimeStep() == 0)
-      {
-         if (myid == 0) UBLOG(logINFO, "Neustart..");
-
-         string sampleFilename = pathGeo + "/alu_80-110.vti";
-
-         int pmNX1 = 200;  //abmessung einzelbild in x-richtung
-         int pmNX2 = 200; //abmessung einzelbild in y richtung
-         int pmNX3 = 200; //anzahl der bilder
-
-         float lthreshold = 29041.0;
-         float uthreshold = 65535.0;
-         double deltaVoxelX1 = 4e-3/1096.0;
-         double deltaVoxelX2 = 5e-3/1327.0;
-         double deltaVoxelX3 = 5e-3/1265.0;
-
-
-         GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         //sample->readMatrixFromRawFile<unsigned char>(sampleFilename, GbVoxelMatrix3D::BigEndian);
-         sample->readMatrixFromVtiASCIIFile(sampleFilename);
-         sample->setVoxelMatrixDelta(deltaVoxelX1, deltaVoxelX2, deltaVoxelX3);
-         sample->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-
-         if (myid == 0) sample->writeToVTKImageDataASCII(pathname + "/geo/sample");
-
-         ///////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////
-
-         double offset = 0.2e-3; //0.5e-3;
-         //bounding box
-         double g_minX1 = sample->getX1Minimum() - offset;
-         double g_minX2 = sample->getX2Minimum();
-         double g_minX3 = sample->getX3Minimum();
-
-         double g_maxX1 = sample->getX1Maximum() + offset;
-         double g_maxX2 = sample->getX2Maximum();
-         double g_maxX3 = sample->getX3Maximum();
-
-         deltax = (g_maxX3-g_minX3) /(nx3*blocknx3);
-
-         double Lp = 90e-6/deltax;
-         double nu_LB = (Lp*u_LB)/Re;
-
-
-         double blockLength = (double)blocknx1*deltax;
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(false);
-         grid->setPeriodicX3(false);
-         grid->setDeltaX(deltax);
-         grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            //UBLOG(logINFO, "with forcing = " << with_forcing);
-            UBLOG(logINFO, "rho_LB = " << rho_LB);
-            UBLOG(logINFO, "nu_LB = " << nu_LB);
-            UBLOG(logINFO, "dp_LB = " << dp_LB);
-            UBLOG(logINFO, "u_LB = " << u_LB);
-            //UBLOG(logINFO, "forcing = " << forcing);
-            UBLOG(logINFO, "dx = " << deltax << " m");
-            //UBLOG(logINFO, "dt = " << dt << " s");
-            //UBLOG(logINFO, "rho_real = " << rho_real << " kg*m^-3");
-            //UBLOG(logINFO, "nu_real = " << nu_real << " m^2/s");
-            //UBLOG(logINFO, "dp_real = " << dp_real << " Pa");
-
-            UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         //walls
-         GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         //bone interactor
-         int bcOptionNoSlip = 1; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall
-         D3Q27BoundaryConditionAdapterPtr bcNoSlip(new D3Q27NoSlipBCAdapter(bcOptionNoSlip));
-         D3Q27InteractorPtr sampleInt(new D3Q27Interactor(sample, grid, bcNoSlip, Interactor3D::SOLID));
-
-         //wall interactors
-         D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcNoSlip, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcNoSlip, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcNoSlip, Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcNoSlip, Interactor3D::SOLID));
-
-         D3Q27BoundaryConditionAdapterPtr denBCAdapterInflow(new D3Q27DensityBCAdapter(rhoLBinflow));
-         denBCAdapterInflow->setSecondaryBcOption(0);
-         D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID));
-
-         //outflow
-         D3Q27BoundaryConditionAdapterPtr denBCAdapterOutflow(new D3Q27DensityBCAdapter(rho_LB));
-         denBCAdapterOutflow->setSecondaryBcOption(0);
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW));
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(sampleInt);
-         intHelper.addInteractor(addWallYminInt);
-         intHelper.addInteractor(addWallZminInt);
-         intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(addWallZmaxInt);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nodg = nob * (blocknx1 + gl) * (blocknx2 + gl) * (blocknx3 + gl);
-         double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << nob);
-            UBLOG(logINFO, "Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         LBMKernel3DPtr kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL));
-
-         //mu::Parser fctForcingX3;
-         //fctForcingX3.SetExpr("Fx3");
-         //fctForcingX3.DefineConst("Fx3", forcing);
-
-         //kernel->setForcingX3(fctForcingX3);
-         //kernel->setWithForcing(true);
-
-         //BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor());
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-
-         //BC
-         intHelper.setBC();
-
-         //Press*1.6e8+(14.76-coordsX)/3.5*5000
-         //initialization of distributions
-         //mu::Parser fct;
-         //fct.SetExpr("(x1max-x1)/l*dp*3.0");
-         //fct.DefineConst("dp", dp_LB);
-         //fct.DefineConst("x3max", g_maxX3);
-         //fct.DefineConst("l", g_maxX3-g_minX3);
-
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB);
-         //initVisitor.setRho(fct);
-         //initVisitor.setVx1(fct);
-         initVisitor.setVx1(0);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-
-         coord[0] = sample->getX1Minimum();
-         coord[1] = sample->getX2Minimum();
-         coord[2] = sample->getX3Minimum();
-         coord[3] = sample->getX1Maximum();
-         coord[4] = sample->getX2Maximum();
-         coord[5] = sample->getX3Maximum();
-
-         ////////////////////////////////////////////////////////
-         FILE * pFile;
-         string str = pathname + "/checkpoints/coord.txt";
-         pFile = fopen(str.c_str(), "w");
-         fprintf(pFile, "%f\n", deltax);
-         fprintf(pFile, "%f\n", coord[0]);
-         fprintf(pFile, "%f\n", coord[1]);
-         fprintf(pFile, "%f\n", coord[2]);
-         fprintf(pFile, "%f\n", coord[3]);
-         fprintf(pFile, "%f\n", coord[4]);
-         fprintf(pFile, "%f\n", coord[5]);
-         fclose(pFile);
-         ////////////////////////////////////////////////////////
-
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         ////////////////////////////////////////////////////////
-         FILE * pFile;
-         string str = pathname + "/checkpoints/coord.txt";
-         pFile = fopen(str.c_str(), "r");
-         fscanf(pFile, "%f\n", &deltax);
-         fscanf(pFile, "%f\n", &coord[0]);
-         fscanf(pFile, "%f\n", &coord[1]);
-         fscanf(pFile, "%f\n", &coord[2]);
-         fscanf(pFile, "%f\n", &coord[3]);
-         fscanf(pFile, "%f\n", &coord[4]);
-         fscanf(pFile, "%f\n", &coord[5]);
-         fclose(pFile);
-         ////////////////////////////////////////////////////////
-
-         double Lp = 0.35e-3/deltax;
-         double nu_LB = (Lp*u_LB)/Re;
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm);
-
-      double outTime = 30000;
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      stepSch->addSchedule(10, 10, 10);
-      stepSch->addSchedule(100, 100, 100);
-      stepSch->addSchedule(1000, 1000, 1000);
-      stepSch->addSchedule(100, 1500, 2000);
-      stepSch->addSchedule(10000, 10000, 10000);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv);
-
-      double dxd2 = deltax / 2.0;
-      //D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0] - dxd2, coord[1] - dxd2, coord[2] - dxd2,
-      //   coord[3] + dxd2, coord[4] + dxd2, coord[5] + dxd2));
-      //if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance());
-
-      D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[3] + dxd2, coord[1] - dxd2, coord[2] - dxd2,
-         coord[3] + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2));
-      if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance());
-
-      double factorp = 1; // dp_real / dp_LB;
-      double factorv = 1;// dx / dt;
-      UbSchedulerPtr stepMV(new UbScheduler(1));
-      D3Q27MeanValuesPostprocessor mvp1(grid, stepMV, pathname + "/mv/mv1.txt", comm, ih1, factorp, factorv);
-
-
-      //D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, g_maxX1-2.0*deltax, g_minX2, g_minX3,
-      //   g_maxX1 - deltax, g_maxX2, g_maxX3));
-      //if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance());
-
-      //D3Q27MeanValuesPostprocessor mvp2(grid, stepSch, pathname + "/mv/mv2.txt", comm, ih2, factorp, factorv);
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe());
-      }
-
-      double endTime = UbSystem::stringTo<double>(cf.getValue("endTime")); //100001;//10001.0;
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepMV));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if (argv != NULL)
-   {
-      perm(argv[1]);
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/plate/CMakeLists.txt b/apps/cpu/plate/CMakeLists.txt
deleted file mode 100644
index cc2d6aea0a0a007395f1010facdd2880608ce895..0000000000000000000000000000000000000000
--- a/apps/cpu/plate/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(plate)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(plate BINARY)
diff --git a/apps/cpu/plate/plate.cpp b/apps/cpu/plate/plate.cpp
deleted file mode 100644
index e4c78c6044106280732f151f9610e3791ff502a4..0000000000000000000000000000000000000000
--- a/apps/cpu/plate/plate.cpp
+++ /dev/null
@@ -1,652 +0,0 @@
-
-
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <vfluids.h>
-
-using namespace std;
-
-
-void run(const char *cstr, double endTime)
-{
-   try
-   {
-      string pathname; 
-      string pathGeo;
-      string pathLog;
-      string PlatteFilename;
-      string ZckbndFilename;
-      int numOfThreads = 1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      //UbLog::reportingLevel() = logDEBUG5;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      string machine = string(cstr);
-
-      if(machine == "my") 
-      {
-         pathname = "d:/temp/plate";
-         pathGeo = "d:/Data/plate";
-         pathLog = "d:/temp/plate";
-         numOfThreads = 6;
-         logfile = false;
-         availMem = 15.0e9;
-      }
-      else if(machine == "Ludwig")      
-      {
-         pathname = "/work/koskuche/SFB880/plateR1e06";
-         pathGeo = "/home/koskuche/data/plate";
-         pathLog = "/work/koskuche/SFB880/plateR1e06";
-         numOfThreads = 1;
-         availMem = 1.0e9;
-         logfile = true;
-      }
-      else if(machine == "Hermit")      
-      {
-         //Hermit
-         pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0";
-         pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate";
-         pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate";
-         numOfThreads = 16;
-         availMem = 2.0e9;
-         logfile = true;
-      }
-      else if(machine == "HLRN")      
-      {
-         //Hermit
-         pathname = "/gfs1/work/niivfcpu/scratch/plate";
-         pathGeo = "/gfs1/work/niivfcpu/data/plate";
-         pathLog = "/gfs1/work/niivfcpu/scratch/plate";
-         numOfThreads = 24;
-         availMem = 12.0e9;
-         logfile = true;
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-#if defined(__unix__)
-      if (myid==0) 
-      {
-         const char* str = pathLog.c_str();
-         int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-      }
-#endif 
-
-      if(myid == 0 && logfile)
-      {
-         logFilename <<  pathLog + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-      }
-
-      if(myid ==0 && logfile)
-      {
-         UbLog::output_policy::setStream(logFilename.str());
-      }
-
-      if(myid==0) UBLOG(logINFO,"Testcase plate");
-
-      PlatteFilename = pathGeo + "/platte_raw.stl"; 
-      ZckbndFilename= pathGeo + "/2zackenbaender0.stl";
-
-      int baseLevel, refineLevel,nx[3],blocknx[3];
-      double Re,velocity,rhoInit,vx1Init;
-
-      //////////////////////////////////////////////////////////////////////////
-      //physik
-      //////////////////////////////////////////////////////////////////////////
-      Re            = 1e6; //11900;// 13286;//13286;//gemessen 18.98 m/s...*spaeter koorestur michael moessner 17m/s
-      velocity      = 0.1;  
-      vx1Init       = 0.1;  
-      rhoInit       = 0.0;
-
-      //int H=200;//200;//392;
-      ///////////////Knotenabmessungen:
-      nx[0]      = 50;//240;//120;//60;//86;//43;//65;//50;  //l�nge
-      nx[1]      = 1;//2;//6;///1;//5;// //breite
-      nx[2]      = 16;//64;//32;//18;//5;//15;//15; //h�he gebiet
-      blocknx[0] = 25;//10;//6;
-      blocknx[1] = 25;//10;//6;
-      blocknx[2] = 25;//10;//6;
-
-      baseLevel   = 0;
-      refineLevel = 4;
-
-      ///////////////Weltabmessungen:
-      double kanalhoeheSI  = 60.0/100.0;//60.0/100.0;//cm, Kanalh�he
-      double kanalbreiteSI = kanalhoeheSI*((double)nx[1])/((double)nx[2]);//=kanalh�he*nx1/nx2//1.65/100.0;//13.2/100.0;////40.0/100.0; //cm, Kanalbreite //13.2 zeilbreite
-      double kanallaengeSI = kanalhoeheSI*((double)nx[0])/((double)nx[2]);//80.0/100.0;//cm, Kanall�nge, ist nicht angegeben
-
-      // double refinewidth1=kanalhoeheSI/10.0;
-
-
-      double fineNodeDx   = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb
-      //double fineNodeDx   = hReal/100.0;
-      double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte
-
-      double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte
-      double blockLengthx2 = blockLengthx1;
-      double blockLengthx3 = blockLengthx1;
-
-      double originX1 = 0.0;//-50.0*propellerDurchmesser;  //geowerte
-      double originX2 = 0.0;//-0.5*blockLengthx2*nx2;
-      double originX3 = 0.0;// minX3 + 0.5*fineNodeDx;
-
-      double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-      //position vorderkante cube
-      double originBridgeX1 = 20.0/100.0; //cm, geraten
-      double originBridgeX2 = 0.0;//0.5*params.nx[1]*blockLengthx2-0.5*H-fineNodeDx;
-      double originBridgeX3 = kanalhoeheSI*0.5;//H*0.0-fineNodeDx; //boden
-
-      bool periodicx1 = false;
-      bool periodicx2 = true;
-      bool periodicx3 = true;
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double rhoLB         = rhoInit;
-      double rhoReal       = 1.0;
-      double nuReal  = 0.000015;//0.015;
-
-      double hReal         = 0.0105;//<-m     1.05;//Plattendicke in cm(! cm nicht m !)
-      double uReal         = 15;//m/s   //Re*nueReal/hReal;
-      double lReal         = 1; //m Plattenl�nge
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double Ma      = 0.05;//0.0553;//Ma-Real!
-      double csReal  = 343; //uReal/Ma;
-      double hLB     = hReal/coarseNodeDx;
-
-      //LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB));
-      //LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, LBMUnitConverter::AIR_20C, hLB));
-      
-
-      double uLB           = 0.1; //uReal   * unitConverter->getFactorVelocityWToLb();
-      //double nuLB         = nueReal * unitConverter->getFactorViscosityWToLb();
-      double nuLB         = (uLB*(lReal/coarseNodeDx))/Re;
-      //double timestep      = unitConverter->getFactorTimeLbToW(coarseNodeDx);
-
-      
-      //LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(0, uReal, uLB, nuReal, nuLB));
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter());
-      
-      velocity = uLB;
-      double viscosity = nuLB;
-
-      Grid3DPtr grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(10000,10000,10000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-
-      int sizeSP=4;
-      mu::Parser spongeLayer;
-      //spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0");
-      spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-x1)/sizeSP/2.0 + 0.5 : 1.0");
-      spongeLayer.DefineConst("sizeX", nx[0]*blocknx[0]);
-      spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]);
-
-      if (grid->getTimeStep() == 0)
-      {
-         if(myid==0) UBLOG(logINFO,"Neustart..");
-         //bounding box
-         double g_minX1 = originX1;
-         double g_minX2 = originX2;
-         double g_minX3 = originX3;
-
-         double g_maxX1 = originX1 + geoLength[0];
-         double g_maxX2 = originX2 + geoLength[1];
-         double g_maxX3 = originX3 + geoLength[2];
-
-         //set grid
-         grid->setDeltaX(coarseNodeDx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         grid->setPeriodicX1(periodicx1);
-         grid->setPeriodicX2(periodicx2);
-         grid->setPeriodicX3(periodicx3);
-
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         /////////////////////////////////////////////////
-         //interactoren definieren
-         double geoOverlap = 3.0*coarseNodeDx;
-
-         //inflow
-         GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, 
-            originX1/*+coarseNodeDx*/, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap));
-         if(myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname+"/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid,grid,Interactor3D::SOLID)); 
-
-         //inflow
-         double uLB2=uLB*0.96*1.02;//*0.5;
-         double raiseVelSteps = 0;
-         vector<D3Q27BCFunction> velcX1BCs,dummy;
-
-         mu::Parser inflowProfile;
-         inflowProfile.SetExpr("uLB"); 
-
-         inflowProfile.DefineConst("uLB",uLB);
-         velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST));
-
-         D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (velcX1BCs,dummy,dummy));
-         velBCInteractor->addBCAdapter(velBCAdapter);
-
-         //outflow
-         GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1+geoLength[0], originX2-geoOverlap, originX3-geoOverlap, 
-            originX1+geoLength[0]+geoOverlap, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap ));
-         if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoInit));
-         D3Q27InteractorPtr densInteractor( new D3Q27Interactor(densCuboid,grid,denBCAdapter,Interactor3D::SOLID) );
-
-         //////////////////////////////////////////////////////////////////////////
-         if(myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            UBLOG(logINFO, "* Re            ="<<Re);
-            UBLOG(logINFO, "* Ma            ="<<Ma);
-            UBLOG(logINFO, "* uReal         ="<<uReal);
-            UBLOG(logINFO, "* nueReal       ="<<nuReal);
-            UBLOG(logINFO, "* nueLB         ="<<nuLB);
-            UBLOG(logINFO, "* uLB           ="<<uLB);
-            UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-            UBLOG(logINFO, "* cdx           ="<<coarseNodeDx);
-            UBLOG(logINFO, "* fdx           ="<<fineNodeDx);
-            UBLOG(logINFO, "* dx_base       ="<<coarseNodeDx<<" == "<<coarseNodeDx);
-            UBLOG(logINFO, "* dx_refine     ="<<fineNodeDx<<" == "<<fineNodeDx );
-            UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-            UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-            UBLOG(logINFO, "* x1Periodic    ="<<periodicx1);
-            UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-            UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-            UBLOG(logINFO, "* number of levels  ="<<refineLevel+1);
-            UBLOG(logINFO, "* path          ="<<pathname);
-
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* number of threads    ="<<numOfThreads);
-            UBLOG(logINFO, "* number of processes  ="<<comm->getNumberOfProcesses());
-            UBLOG(logINFO, "*****************************************");
-            //UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString());
-            UBLOG(logINFO, "*****************************************");     
-         }
-         //////////////////////////////////////////////////////////////////////////
-         //Platte
-         GbTriFaceMesh3DPtr mesh (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename,"Netz"));
-
-         double x1minMesh = mesh->getX1Minimum(); double x1maxMesh = mesh->getX1Maximum();
-         double x2minMesh = mesh->getX2Minimum(); double x2maxMesh = mesh->getX2Maximum();
-         double x3minMesh = mesh->getX3Minimum(); double x3maxMesh = mesh->getX3Maximum();
-
-         double drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid();
-         double drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid();
-         double drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-         mesh->rotate(90.0,0.0,0.0);  //TriFacMesh-KO-System anders als LB-KO-System
-
-         x1minMesh = mesh->getX1Minimum();  x1maxMesh = mesh->getX1Maximum();
-         x2minMesh = mesh->getX2Minimum();  x2maxMesh = mesh->getX2Maximum();
-         x3minMesh = mesh->getX3Minimum();  x3maxMesh = mesh->getX3Maximum();
-
-         drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid();
-         drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid();
-         drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-         double H3=1.05/100.0;//cm, Plattendicke
-         double scaleB=H3/(x3maxMesh-x3minMesh);
-         double scaleX2=(geoLength[2]+2.0*coarseNodeDx)/(x2minMesh-x2maxMesh);
-
-         mesh->scale(scaleB,scaleB,scaleB);
-         x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-         x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-         x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-         double offsetXBridge=originBridgeX1;//originBridgeX1;
-         double offsetYBridge=originBridgeX2;//originBridgeX2;
-         double offsetZBridge=originBridgeX3;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-         //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); 
-         mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh+offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge-(x3maxMesh-x3minMesh)*0.5/*-hReal*2.0*/); 
-
-         x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-         x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-         x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-
-         if(myid == 0) GbSystem3D::writeGeoObject( mesh.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() );
-
-         //////////////////////////////////////////////////////////////////////////
-         // Zackenband
-         //////////////////////////////////////////////////////////////////////////
-         GbTriFaceMesh3DPtr meshBand (GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand"));
-         meshBand->deleteRedundantNodes();
-
-         double x1minMeshB = meshBand->getX1Minimum(); double x1maxMeshB = meshBand->getX1Maximum();
-         double x2minMeshB = meshBand->getX2Minimum(); double x2maxMeshB = meshBand->getX2Maximum();
-         double x3minMeshB = meshBand->getX3Minimum(); double x3maxMeshB = meshBand->getX3Maximum();
-
-         x1minMeshB = meshBand->getX1Minimum();  x1maxMeshB = meshBand->getX1Maximum();
-         x2minMeshB = meshBand->getX2Minimum();  x2maxMeshB = meshBand->getX2Maximum();
-         x3minMeshB = meshBand->getX3Minimum();  x3maxMeshB = meshBand->getX3Maximum();
-
-         double H1B=1.05/100.0;//*2.0;//0.05;//cm, Banddicke..nachschauen!!!
-         double scaleBand=H1B/(x1maxMeshB-x1minMeshB);//H3B/(x3maxMeshB-x3minMeshB);
-
-         meshBand->scale(scaleBand,scaleBand,scaleBand);
-         x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum();
-         x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum();
-         x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum();
-         double dBandX=0.5/100.0;//1.29; //15mm-2.1mm Absand von Bandvorderkante
-         double dBandY=0.0/100.0;
-         double dBandZ=0.223/100.0;//0.344;//....
-         double offsetXBridgeB=x1minMesh+dBandX;//originBridgeX1+dBandX;//originBridgeX1;
-         double offsetYBridgeB=originBridgeX2+dBandY;//originBridgeX2;
-         double offsetZBridgeB=originBridgeX3+dBandZ;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-         meshBand->translate(-x1minMeshB+offsetXBridgeB, -x2minMeshB+offsetYBridgeB-coarseNodeDx, -x3minMeshB+offsetZBridgeB);//-(x3maxMeshB-x3minMeshB)*0.5); 
-
-         x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum();
-         x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum();
-         x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum();
-
-         GbSystem3D::writeGeoObject( meshBand.get(), pathname+"/geo/Band", WbWriterVtkXmlASCII::getInstance() );
-
-         /////////////////Band2
-         GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand2"));
-         meshBand->deleteRedundantNodes();
-
-         double x1minMeshB2 = meshBand2->getX1Minimum(); double x1maxMeshB2 = meshBand2->getX1Maximum();
-         double x2minMeshB2 = meshBand2->getX2Minimum(); double x2maxMeshB2 = meshBand2->getX2Maximum();
-         double x3minMeshB2 = meshBand2->getX3Minimum(); double x3maxMeshB2 = meshBand2->getX3Maximum();
-
-         x1minMeshB2 = meshBand2->getX1Minimum();  x1maxMeshB2 = meshBand2->getX1Maximum();
-         x2minMeshB2 = meshBand2->getX2Minimum();  x2maxMeshB2 = meshBand2->getX2Maximum();
-         x3minMeshB2 = meshBand2->getX3Minimum();  x3maxMeshB2 = meshBand2->getX3Maximum();
-
-         double H1B2=1.05/100.0;//0.05;//cm, Banddicke..nachschauen!!!
-         double scaleBand2=H1B2/(x1maxMeshB2-x1minMeshB2);//*3.0;//H3B/(x3maxMeshB-x3minMeshB);
-
-         meshBand2->scale(scaleBand2,scaleBand2,scaleBand2);
-         x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum();
-         x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum();
-         x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum();
-         double dBandX2=0.5/100.0;//1.29;
-         double dBandY2=0.5/100.0;
-         double dBandZ2=0.223/100.0;//0.344;//...
-         double offsetXBridgeB2=x1minMesh+dBandX2;//originBridgeX1;
-         double offsetYBridgeB2=originBridgeX2+dBandY2;//originBridgeX2;
-         double offsetZBridgeB2=originBridgeX3+dBandZ2;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-         meshBand2->translate(-x1minMeshB2+offsetXBridgeB2, -x2minMeshB2+offsetYBridgeB2-coarseNodeDx, -x3minMeshB2+offsetZBridgeB2);//-(x3maxMeshB2-x3minMeshB2)*0.5); 
-
-         x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum();
-         x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum();
-         x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum();
-
-         if(myid == 0) GbSystem3D::writeGeoObject( meshBand2.get(), pathname+"/geo/Band2", WbWriterVtkXmlASCII::getInstance() );
-         //////////////////////////////////////////////////////////////////////////
-
-         //////////////////////////////////////////////////////////////////////////
-         // refine
-         //////////////////////////////////////////////////////////////////////////
-
-         ///////////platte ausmessen:
-         x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-         x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-         x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-         double deltaX3Platte=(x3maxMesh-x3minMesh);
-
-         GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3*0.5
-            , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-         //if(myid == 0) GbSystem3D::writeGeoObject(refine2PlatteCube.get(), pathname+"/geo/refine2PlatteCube", WbWriterVtkXmlASCII::getInstance());
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5);
-         //grid->accept(refineAdapterP2);
-
-         GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D(   x1minMesh+H3*2.0  , originX2-geoOverlap  , x3minMesh+H3*0.8
-            , x1maxMesh-H3*0.2, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.1));
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4);
-         //grid->accept(refineAdapterP3);
-
-         GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D(   x1minMesh-H3*2.0  , originX2-geoOverlap  , x3minMesh+deltaX3Platte*0.04
-            ,  x1maxMesh+H3*2.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25));
-         //if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance());
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3);
-         //grid->accept(refineAdapterP4);
-
-         GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D(   originX1-geoOverlap , originX2-geoOverlap  ,x3minMesh-deltaX3Platte/*x3minMesh+deltaX3Platte*0.8*//* x3minMesh+deltaX3Platte*0.8*/
-            ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-         //if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance());
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2);
-         //grid->accept(refineAdapterP5);
-
-         GbCuboid3DPtr refine6PlatteCube(new GbCuboid3D(   originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-deltaX3Platte*3.0/*x3minMesh+deltaX3Platte*0.9*/
-            ,  x1maxMesh+H3*7.0, originX2+geoOverlap+geoLength[1], x3maxMesh+deltaX3Platte*3.0));
-         //if(myid == 0) GbSystem3D::writeGeoObject(refine6PlatteCube.get(), pathname+"/geo/refine6PlatteCube", WbWriterVtkXmlASCII::getInstance());
-         //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP6(refine6PlatteCube, baseLevel, refineLevel-1);
-         //grid->accept(refineAdapterP6);
-
-         //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX1-3.0*geoOverlap
-         //  , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1));
-
-
-         GbCuboid3DPtr refinePlatteBox(new GbCuboid3D(mesh->getX1Minimum(), mesh->getX2Minimum(), mesh->getX3Minimum()+(mesh->getX3Maximum()-mesh->getX3Minimum())/2.0, 
-                                                      mesh->getX1Maximum(), mesh->getX2Maximum(), mesh->getX3Maximum()));
-         if(myid == 0) GbSystem3D::writeGeoObject( refinePlatteBox.get(), pathname+"/geo/refinePlatteBox", WbWriterVtkXmlASCII::getInstance() );
-
-         /////////////////////////////////////////////////
-         ///interactoren
-         int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         D3Q27TriFaceMeshInteractorPtr triPlateInteractor( new D3Q27TriFaceMeshInteractor(mesh, grid, bcObst,Interactor3D::SOLID));
-         D3Q27TriFaceMeshInteractorPtr triBandInteractor( new D3Q27TriFaceMeshInteractor( meshBand, grid, bcObst,Interactor3D::SOLID) );
-         D3Q27TriFaceMeshInteractorPtr triBand2Interactor( new D3Q27TriFaceMeshInteractor( meshBand2, grid, bcObst,Interactor3D::SOLID) );
-
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));	
-        
-         //////////////////////////////////////////////////////////////////////////
-         //refinement
-         if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            //refineHelper.addGbObject( refine6PlatteCube, refineLevel-3);
-            //refineHelper.addGbObject( refine5PlatteCube, refineLevel-2);
-            //refineHelper.addGbObject( refine4PlatteCube, refineLevel-1);
-            //refineHelper.addGbObject( refine3PlatteCube, refineLevel);
-            refineHelper.addGbObject(refinePlatteBox, refineLevel);
-            refineHelper.refine();
-
-            //RefineAroundGbObjectHelper refineHelper(grid, refineLevel, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triPlateInteractor), 0.0, hReal/4.0);
-            //refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         //BlocksPostprocessorPtr ppblocks1(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         ////if(myid == 0) 
-         //ppblocks1->update(0);
-
-         //return;
-
-         //GbCuboid3DPtr testBox(new GbCuboid3D(0.2, -1, 0.1, 1.6, 0.04, 0.5));
-         //if(myid == 0) GbSystem3D::writeGeoObject(testBox.get(), pathname+"/geo/testBox", WbWriterVtkXmlASCII::getInstance());
-         //D3Q27InteractorPtr testBoxInt(new D3Q27Interactor(testBox, grid, bcObst,Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(triPlateInteractor);
-         intHelper.addInteractor(triBandInteractor);
-         intHelper.addInteractor(triBand2Interactor);
-         //intHelper.addInteractor(testBoxInt);
-         intHelper.addInteractor(densInteractor);
-         intHelper.addInteractor(velBCInteractor);
-         intHelper.selectBlocks();
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-         //////////////////////////////////////
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-
-         if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-         if(myid == 0) 
-            ppblocks->update(0);
-         if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-         
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-         unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-
-         double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-            UBLOG(logINFO,"Available memory per node/8.0 = " << (availMem/8.0) << " bytes");
-         }
-         ////////////////////////////
-         LBMKernel3DPtr kernel;
-         //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-
-         //with sponge layer
-         kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-         kernel->setWithSpongeLayer(true);
-         kernel->setSpongeLayer(spongeLayer);
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-         //////////////////////////////////
-         //undef nodes
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-         //////////////////////////////////////////
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         intHelper.setBC();
-
-         //initialization of decompositions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoInit);
-         initVisitor.setVx1(vx1Init);
-         grid->accept(initVisitor);
-
-         //Postprozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), 
-            unitConverter, true));
-         ppgeo->update(0);
-         //grid->doPostProcess(0);
-         ppgeo.reset();
-         geoSch.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-         
-         //return;
-      }
-      else
-      {
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         SetSpongeLayerBlockVisitor ssp(spongeLayer);
-         grid->accept(ssp);
-         if(myid == 0) UBLOG(logINFO,"Restart - end"); 
-      }
-      UbSchedulerPtr visSch(new UbScheduler());
-      //visSch->addSchedule(1,0,3);
-      //visSch->addSchedule(100,100,1000);
-      //visSch->addSchedule(1000,1000,5000);
-      //visSch->addSchedule(5000,5000,100000);
-      //visSch->addSchedule(100000,100000,10000000);
-
-      visSch->addSchedule(10000,10000,10000000);
-      //visSch->addSchedule(100,100,100000000);
-
-      //UbSchedulerPtr resSchRMS(new UbScheduler());
-      //resSchRMS->addSchedule(100000,0,10000000);
-      //UbSchedulerPtr resSchMeans(new UbScheduler());
-      //resSchMeans->addSchedule(100000,0,10000000);
-      //UbSchedulerPtr stepAvSch(new UbScheduler());
-      //int averageInterval=1000;
-      //stepAvSch->addSchedule(averageInterval,0,10000000);
-
-      //AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans,resSchRMS/*wann wird resettet*/);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30));
-      nupsSch->addSchedule(1000, 1000, 1000000000);
-      NUPSCounterPostprocessor npr(grid, nupsSch, comm);
-
-      //mu::Parser decrViscFunc;
-      //decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)");
-      //decrViscFunc.DefineConst("nue0", nueLB);
-      //decrViscFunc.DefineConst("c0", 0.1);
-      //UbSchedulerPtr DecrViscSch(new UbScheduler());
-      //DecrViscSch->addSchedule(10,10,5000);
-      //DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm);
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      //double endTime = 80001;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1], UbSystem::stringTo<double>(argv[2]));
-
-   return 0;
-}
-
diff --git a/apps/cpu/plate/plate.cpp.ludwig10092013 b/apps/cpu/plate/plate.cpp.ludwig10092013
deleted file mode 100644
index 00e1aed5a3414e48252a6e96536e13f76728b282..0000000000000000000000000000000000000000
--- a/apps/cpu/plate/plate.cpp.ludwig10092013
+++ /dev/null
@@ -1,626 +0,0 @@
-
-
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <vfluids.h>
-
-using namespace std;
-
-
-void run(const char *cstr)
-{
-   try
-   {
-      string machine = QUOTEME(CAB_MACHINE);
-	  UBLOG(logINFO,"Testcase plate");
-      string pathname; 
-      string pathGeo;
-	  string BrueckeFilename;
-	  string ZckbndFilename;
-      int numOfThreads =1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      UbLog::reportingLevel() = logDEBUG;
-
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-      
-      if(machine == "PIPPINNEU") 
-      {
-
-		  pathname = "f:/temp/plateBfluid";
-		  pathGeo = "e:/geometriedatenstls";
-         numOfThreads = 1;
-         logfile = false;
-         availMem = 3.0e9;
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-		  pathname = "/work/sonjaOutputs/plateBfluidNeud";
-		  pathGeo = "/home/sonuphof/Stl-Zeichnungen";
-         numOfThreads = 1;
-         availMem = 12.0e9;
-         logfile = true;
-
-         //if(myid ==0)
-         //{
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-         //}
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-	  BrueckeFilename = pathGeo + "/platte_raw.stl"; 
-	  ZckbndFilename= pathGeo + "/2zackenbaender0.stl";
-
-      //if(myid ==0 && logfile)
-      //{
-         UbLog::output_policy::setStream(logFilename.str());
-      //}
-
-      int baseLevel, refineLevel,nx[3],blocknx[3];
-      double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init;
-
-	  //////////////////////////////////////////////////////////////////////////
-	  //physik
-	  //////////////////////////////////////////////////////////////////////////
-	  Re            = 11900;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum  testen ob was passiert
-	  velocity      = 0.01;  
-	  vx1Init       = 0.01;  
-	  rhoInit       = 1.0;
-	  SimulationParametersPtr param = SimulationParameters::getInstanz();
-	  param->setCollisionModelType(SimulationParameters::COMPRESSIBLE);
-
-	  int H=200;//200;//392;
-	  ///////////////Knotenabmessungen:
-	  nx[0]      = 120;//60;//86;//43;//65;//50;  //länge
-	  nx[1]      = 3;//6;///1;//5;// //breite
-	  nx[2]      = 32;//18;//5;//15;//15; //höhe gebiet
-	  blocknx[0] = 9;
-	  blocknx[1] = 9;
-	  blocknx[2] = 9;
-
-	  baseLevel   = 0;
-	  refineLevel = 2;//1;//5;
-
-
-
-	  ///////////////Weltabmessungen:
-	  double kanalhoeheSI  = 60.0/100.0;//60.0/100.0;//cm, Kanalhöhe
-	  double kanalbreiteSI = kanalhoeheSI*120.0/2.0;//=kanalhöhe*nx1/nx2//1.65/100.0;//13.2/100.0;////40.0/100.0; //cm, Kanalbreite //13.2 zeilbreite
-	  double kanallaengeSI = kanalhoeheSI*120.0/32.0;//80.0/100.0;//cm, Kanallänge, ist nicht angegeben
-
-	  // double refinewidth1=kanalhoeheSI/10.0;
-
-	  double fineNodeDx   = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb
-	  double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte
-
-	  double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte
-	  double blockLengthx2 = blockLengthx1;
-	  double blockLengthx3 = blockLengthx1;
-
-	  double originX1 = 0.0;//-50.0*propellerDurchmesser;  //geowerte
-	  double originX2 = 0.0;//-0.5*blockLengthx2*nx2;
-	  double originX3 = 0.0;// minX3 + 0.5*fineNodeDx;
-
-	  double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-	  //position vorderkante cube
-	  double originBridgeX1 = 20.0/100.0; //cm, geraten
-	  double originBridgeX2 = 0.0;//0.5*params.nx[1]*blockLengthx2-0.5*H-fineNodeDx;
-	  double originBridgeX3 = kanalhoeheSI*0.5;//H*0.0-fineNodeDx; //boden
-
-	  bool periodicx1 = false;
-	  bool periodicx2 = true;
-	  bool periodicx3 = true;
-
-	  //##########################################################################
-	  //## physical parameters
-	  //##########################################################################
-
-	  double smagorinskiConstant = 0.18;
-
-
-	  double rhoLB         = 1.0;
-	  double rhoReal       = 1.0;
-	  double nueReal  = 0.000015;//0.015;
-
-	  double hReal         = 0.0105;//<-m     1.05;//Plattendicke in cm(! cm nicht m !)
-	  double uReal         = Re*nueReal/hReal;
-
-	  //##Machzahl:
-	  //#Ma     = uReal/csReal
-	  double Ma      = 0.05;//0.0553;//Ma-Real!
-	  double csReal  = uReal/Ma;
-	  double hLB     = hReal/coarseNodeDx;
-
-	  LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB));
-
-	  double uLB           = uReal   * unitConverter->getFactorVelocityWToLb();
-	  double nueLB         = nueReal * unitConverter->getFactorViscosityWToLb();
-	  double timestep      = unitConverter->getFactorTimeLbToW(coarseNodeDx);
-
-	  velocity = uLB;
-	  double viscosity = nueLB;
-
-	  //////////////////////////////////////////////////////////////////////////
-	  Grid3DPtr grid(new Grid3D(comm));
-	  UbSchedulerPtr rSch(new UbScheduler(5000,5000,1000000));
-	  RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY);
-
-      std::string opt;
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if(/*(cstr== NULL)*/cstr!= NULL)
-      {
-         opt = std::string(cstr);
-
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-
-         grid = rp.restart(UbSystem::stringTo<int>(opt));
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition
-         //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         //grid->accept(pqPartVisitor);
-      }
-      else
-      {
-      //bounding box
-      double g_minX1 = originX1;
-      double g_minX2 = originX2;
-      double g_minX3 = originX3;
-
-      double g_maxX1 = originX1 + geoLength[0];
-      double g_maxX2 = originX2 + geoLength[1];
-      double g_maxX3 = originX3 + geoLength[2];
-
-      //set grid
-      grid->setDeltaX(coarseNodeDx);
-      grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-      grid->setPeriodicX1(periodicx1);
-      grid->setPeriodicX2(periodicx2);
-      grid->setPeriodicX3(periodicx3);
-	  
-      
-      GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-      GenBlocksGridVisitor genBlocks;
-      genBlocks.addGeoObject(gridCube);
-      grid->accept(genBlocks);
-
-
-	  /////////////////////////////////////////////////7
-	  //interactoren definieren
-
-
-
-	  double geoOverlap = 3.0*coarseNodeDx;
-
-	  //inflow
-      GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, 
-         originX1/*+coarseNodeDx*/, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap));
-      if(myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname+"/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance());
-      D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid,grid,Interactor3D::SOLID)); 
-
-	   //inflow
-      double uLB2=uLB*0.96*1.02;//*0.5;
-      double raiseVelSteps = 0;
-      vector<D3Q27BCFunction> velcX1BCs,dummy;
-
-      mu::Parser inflowProfile;
-      inflowProfile.SetExpr("uLB"); 
-
-      inflowProfile.DefineConst("uLB",uLB2);
-      velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST));
-      
-      D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (velcX1BCs,dummy,dummy));
-      velBCInteractor->addBCAdapter(velBCAdapter);
-
-	  //outflow
-	  GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1+geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3-geoOverlap, 
-		  originX1+geoLength[0]+geoOverlap, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap ));
-	  if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance());
-	  D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoInit));
-	  D3Q27InteractorPtr densInteractor( new D3Q27Interactor(densCuboid,grid,denBCAdapter,Interactor3D::SOLID) );
-      
-      //////////////////////////////////////////////////////////////////////////
-      if(myid == 0)
-      {
-         UBLOG(logINFO, "*****************************************");
-         UBLOG(logINFO, "* Parameters                            *");
-         UBLOG(logINFO, "* Re            ="<<Re);
-         UBLOG(logINFO, "* Ma            ="<<Ma);
-         UBLOG(logINFO, "* uReal         ="<<uReal);
-         UBLOG(logINFO, "* nueReal       ="<<nueReal);
-         UBLOG(logINFO, "* nue           ="<<nueLB);
-         UBLOG(logINFO, "* velocity      ="<<uLB);
-        // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx);
-       //  UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx);
-         UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-         UBLOG(logINFO, "* cdx           ="<<coarseNodeDx);
-         UBLOG(logINFO, "* fdx           ="<<fineNodeDx);
-         UBLOG(logINFO, "* dx_base       ="<<coarseNodeDx<<" == "<<coarseNodeDx);
-         UBLOG(logINFO, "* dx_refine     ="<<fineNodeDx<<" == "<<fineNodeDx );
-         UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-         UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-         UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-         UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-         UBLOG(logINFO, "*****************************************");
-         UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString());
-         UBLOG(logINFO, "*****************************************");     
-      }
-	  //////////////////////////////////////////////////////////////////////////
-	  //platte
-	  GbTriFaceMesh3DPtr mesh (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(BrueckeFilename,"Netz"));
-
-	  double x1minMesh = mesh->getX1Minimum(); double x1maxMesh = mesh->getX1Maximum();
-	  double x2minMesh = mesh->getX2Minimum(); double x2maxMesh = mesh->getX2Maximum();
-	  double x3minMesh = mesh->getX3Minimum(); double x3maxMesh = mesh->getX3Maximum();
-
-	  double drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid();
-	  double drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid();
-	  double drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-	  mesh->rotate(90.0,0.0,0.0);  //TriFacMesh-KO-System anders als LB-KO-System
-
-	  x1minMesh = mesh->getX1Minimum();  x1maxMesh = mesh->getX1Maximum();
-	  x2minMesh = mesh->getX2Minimum();  x2maxMesh = mesh->getX2Maximum();
-	  x3minMesh = mesh->getX3Minimum();  x3maxMesh = mesh->getX3Maximum();
-
-	  drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid();
-	  drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid();
-	  drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-	  double H3=1.05/100.0;//cm, Plattendicke
-	  double scaleB=H3/(x3maxMesh-x3minMesh);
-	  double scaleX2=(geoLength[2]+2.0*coarseNodeDx)/(x2minMesh-x2maxMesh);
-
-	  mesh->scale(scaleB,scaleB,scaleB);
-	  x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-	  x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-	  x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-	  double offsetXBridge=originBridgeX1;//originBridgeX1;
-	  double offsetYBridge=originBridgeX2;//originBridgeX2;
-	  double offsetZBridge=originBridgeX3;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-	  //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); 
-	  mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh+offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge-(x3maxMesh-x3minMesh)*0.5); 
-
-	  x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-	  x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-	  x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-
-	  if(myid == 0) GbSystem3D::writeGeoObject( mesh.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() );
-
-	  //////////////////////////////////////////////////////////////////////////
-	  // Zackenband
-	  //////////////////////////////////////////////////////////////////////////
-	  GbTriFaceMesh3DPtr meshBand (GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand"));
-	  meshBand->deleteRedundantNodes();
-
-	  double x1minMeshB = meshBand->getX1Minimum(); double x1maxMeshB = meshBand->getX1Maximum();
-	  double x2minMeshB = meshBand->getX2Minimum(); double x2maxMeshB = meshBand->getX2Maximum();
-	  double x3minMeshB = meshBand->getX3Minimum(); double x3maxMeshB = meshBand->getX3Maximum();
-
-	  x1minMeshB = meshBand->getX1Minimum();  x1maxMeshB = meshBand->getX1Maximum();
-	  x2minMeshB = meshBand->getX2Minimum();  x2maxMeshB = meshBand->getX2Maximum();
-	  x3minMeshB = meshBand->getX3Minimum();  x3maxMeshB = meshBand->getX3Maximum();
-
-	  double H1B=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!!
-	  double scaleBand=H1B/(x1maxMeshB-x1minMeshB);//H3B/(x3maxMeshB-x3minMeshB);
-
-	  meshBand->scale(scaleBand,scaleBand,scaleBand);
-	  x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum();
-	  x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum();
-	  x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum();
-	  double dBandX=0.5/100.0;//1.29; //15mm-2.1mm Absand von Bandvorderkante
-	  double dBandY=0.0/100.0;
-	  double dBandZ=0.223/100.0;//0.344;//....
-	  double offsetXBridgeB=x1minMesh+dBandX;//originBridgeX1+dBandX;//originBridgeX1;
-	  double offsetYBridgeB=originBridgeX2+dBandY;//originBridgeX2;
-	  double offsetZBridgeB=originBridgeX3+dBandZ;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-	  meshBand->translate(-x1minMeshB+offsetXBridgeB, -x2minMeshB+offsetYBridgeB-coarseNodeDx, -x3minMeshB+offsetZBridgeB);//-(x3maxMeshB-x3minMeshB)*0.5); 
-
-	  x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum();
-	  x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum();
-	  x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum();
-
-	  GbSystem3D::writeGeoObject( meshBand.get(), pathname+"/geo/Band", WbWriterVtkXmlASCII::getInstance() );
-
-	  /////////////////Band2
-	  GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand2"));
-	  meshBand->deleteRedundantNodes();
-
-	  double x1minMeshB2 = meshBand2->getX1Minimum(); double x1maxMeshB2 = meshBand2->getX1Maximum();
-	  double x2minMeshB2 = meshBand2->getX2Minimum(); double x2maxMeshB2 = meshBand2->getX2Maximum();
-	  double x3minMeshB2 = meshBand2->getX3Minimum(); double x3maxMeshB2 = meshBand2->getX3Maximum();
-
-	  x1minMeshB2 = meshBand2->getX1Minimum();  x1maxMeshB2 = meshBand2->getX1Maximum();
-	  x2minMeshB2 = meshBand2->getX2Minimum();  x2maxMeshB2 = meshBand2->getX2Maximum();
-	  x3minMeshB2 = meshBand2->getX3Minimum();  x3maxMeshB2 = meshBand2->getX3Maximum();
-
-	  double H1B2=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!!
-	  double scaleBand2=H1B2/(x1maxMeshB2-x1minMeshB2);//H3B/(x3maxMeshB-x3minMeshB);
-
-	  meshBand2->scale(scaleBand2,scaleBand2,scaleBand2);
-	  x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum();
-	  x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum();
-	  x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum();
-	  double dBandX2=0.5/100.0;//1.29;
-	  double dBandY2=0.5/100.0;
-	  double dBandZ2=0.223/100.0;//0.344;//...
-	  double offsetXBridgeB2=x1minMesh+dBandX2;//originBridgeX1;
-	  double offsetYBridgeB2=originBridgeX2+dBandY2;//originBridgeX2;
-	  double offsetZBridgeB2=originBridgeX3+dBandZ2;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-	  meshBand2->translate(-x1minMeshB2+offsetXBridgeB2, -x2minMeshB2+offsetYBridgeB2-coarseNodeDx, -x3minMeshB2+offsetZBridgeB2);//-(x3maxMeshB2-x3minMeshB2)*0.5); 
-
-	  x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum();
-	  x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum();
-	  x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum();
-
-	  if(myid == 0) GbSystem3D::writeGeoObject( meshBand2.get(), pathname+"/geo/Band2", WbWriterVtkXmlASCII::getInstance() );
-	  //////////////////////////////////////////////////////////////////////////
-      if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-
-      //////////////////////////////////////////////////////////////////////////
-      // refine
-      //////////////////////////////////////////////////////////////////////////
-
-	  ///////////platte ausmessen:
-	  x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-	  x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-	  x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-	  double deltaX3Platte=(x3maxMesh-x3minMesh);
-
-
-	 // GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-	 // if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-
-
-
-	  //GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3*0.5
-	  //  , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-	  //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5);
-	  //grid->accept(refineAdapterP2);
-
-	  GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D(   x1minMesh+H3*2.0  , originX2-geoOverlap  , x3minMesh+H3*0.8
-	     , x1maxMesh-H3*0.2, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.1));
-	  //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4);
-	  //grid->accept(refineAdapterP3);
-
-	  GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D(   x1minMesh-H3*2.0  , originX2-geoOverlap  , x3minMesh+deltaX3Platte*0.04
-	     ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25));
-	  //if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance());
-	  //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3);
-	  //grid->accept(refineAdapterP4);
-
-	  GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D(   originX1-geoOverlap , originX2-geoOverlap  ,x3minMesh-deltaX3Platte/*x3minMesh+deltaX3Platte*0.8*//* x3minMesh+deltaX3Platte*0.8*/
-	     ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-	  //if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance());
-	  //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2);
-	  //grid->accept(refineAdapterP5);
-
-	  GbCuboid3DPtr refine6PlatteCube(new GbCuboid3D(   originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-deltaX3Platte*3.0/*x3minMesh+deltaX3Platte*0.9*/
-		  ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+deltaX3Platte*3.0));
-	  if(myid == 0) GbSystem3D::writeGeoObject(refine6PlatteCube.get(), pathname+"/geo/refine6PlatteCube", WbWriterVtkXmlASCII::getInstance());
-	  //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP6(refine6PlatteCube, baseLevel, refineLevel-1);
-	  //grid->accept(refineAdapterP6);
-
-	  //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D(  originX1-3.0*geoOverlap   , originX2-3.0*geoOverlap  , originX1-3.0*geoOverlap
-		//  , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1));
-
-
-
-	  if (refineLevel > 0)
-	  {
-		 
-		  RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-		  refineHelper.addGbObject( refine6PlatteCube, refineLevel-1);
-                refineHelper.addGbObject( refine5PlatteCube, refineLevel);
-                //refineHelper.addGbObject( refine4PlatteCube, refineLevel);
-		  //refineHelper.addGbObject( refine3PlatteCube, refineLevel);
-		  refineHelper.refine();
-		  if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-	  }
-
-
-
-      if(myid == 0) UBLOG(logINFO,"Refinement - end");
-	  ////////////////////////////////////////////
-	  //METIS
-	  MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-	  grid->accept( metisVisitor );
-	  /////////////////////////////////////////////////
-	  ///interactoren
-	  int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB
-	  D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-
-	  D3Q27TriFaceMeshInteractorPtr triBridgeInteractor( new D3Q27TriFaceMeshInteractor(mesh, grid, bcObst,Interactor3D::SOLID));
-	  //sd.addInteractor(triBridgeInteractor);
-
-	  D3Q27TriFaceMeshInteractorPtr triBandInteractor( new D3Q27TriFaceMeshInteractor( meshBand, grid, bcObst,Interactor3D::SOLID) );
-
-	  D3Q27TriFaceMeshInteractorPtr triBand2Interactor( new D3Q27TriFaceMeshInteractor( meshBand2, grid, bcObst,Interactor3D::SOLID) );
-
-	
-	  ////////////////////////////////////////////
-	  /////delete solid blocks
-	  if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-	  SolidBlocksHelper sd(grid, comm);
-
-	  sd.addInteractor(triBridgeInteractor);
-	  sd.addInteractor(triBandInteractor);
-	  sd.addInteractor(triBand2Interactor);
-	  sd.addInteractor(densInteractor);
-	  sd.addInteractor(velBCInteractor);
-	  sd.deleteSolidBlocks();
-	  if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-
-
-
-	  //////////////////////////////////////
-
-     
-
-      unsigned long nob = grid->getNumberOfBlocks();
-      unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-      unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-      
-      double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-      double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"Number of blocks = " << nob);
-         UBLOG(logINFO,"Number of nodes  = " << nod);
-         UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-         UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-         UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-	  UBLOG(logINFO,"Available memory per node/8.0 = " << (availMem/8.0) << " bytes");
-      }
-	  ////////////////////////////
-	  grid->accept( metisVisitor );
-	  /////kernel
-      //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(blocknx[0], blocknx[1], blocknx[2]));
-	LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2],0)); 
-//	LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK (blocknx[0], blocknx[1], blocknx[2],1));
-      BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-      kernel->setBCProcessor(bcProc);
-	 
-
-      SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-	  
-      grid->accept(kernelVisitor);
-	  //////////////////////////////////
-	  //undef nodes
-	  if (refineLevel > 0)
-	  {
-		  D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-		  grid->accept(undefNodesVisitor);
-	  }
-	  //////////////////////////////////////////
-	  grid->addAndInitInteractor(triBridgeInteractor);
-	  grid->addAndInitInteractor(triBandInteractor);
-	  grid->addAndInitInteractor(triBand2Interactor);
-	  grid->addAndInitInteractor( densInteractor ); 
-	  grid->addAndInitInteractor( velBCInteractor );
-
-	    UbTimer timer;
-   timer.start();
- 
-   grid->accept( metisVisitor );
-
-   if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-   BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-   if(myid == 0) ppblocks->update(0);
-   if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-	      
-
-   if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-   grid->accept( metisVisitor );
-   if(myid == 0) ppblocks->update(1);
-   ppblocks.reset();
-   if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-  
-
-
-      //set connectors
-      D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-      D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-      grid->accept( setConnsVisitor );
-
-      //domain decomposition
-      //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-      //grid->accept(pqPartVisitor);
-
-      //initialization of decompositions
-      D3Q27ETInitDistributionsBlockVisitor initVisitor(1.0);
-      initVisitor.setVx1(inflowProfile);
-      grid->accept(initVisitor);
-
-      //Postprozess
-	
-      
-      UbSchedulerPtr geoSch(new UbScheduler(1));
-      D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-           new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), 
-                                                       unitConverter, comm, true));
-	  									
-
-      grid->doPostProcess(0);
-      ppgeo.reset();
-      geoSch.reset();
-
-      if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-
-}
-      
-
-
-      UbSchedulerPtr visSch(new UbScheduler());
-visSch->addSchedule(1,1,3);
-      visSch->addSchedule(100,100,1000);
- //     visSch->addSchedule(1000,1000,100000);
- //     visSch->addSchedule(100000,100000,1000000);
-	//  //TurbulenceIntensityPostprocessor tipp(grid,  pathname + "/steps/stepTI", WbWriterVtkXmlBinary::getInstance(), visSch, comm);
-	  UbSchedulerPtr resSch(new UbScheduler());
-      resSch->addSchedule(0,20,1000);
-	  AverageValuesPostprocessor       Avpp(grid,  pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/,resSch/*wann wird resettet*/,comm);
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm);// unitConverter, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-	  //}
-	  mu::Parser decrViscFunc;
-      decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)");
-      decrViscFunc.DefineConst("nue0", nueLB);
-	  decrViscFunc.DefineConst("c0", 0.1);
-	  UbSchedulerPtr DecrViscSch(new UbScheduler());
-      DecrViscSch->addSchedule(10,10,1000);
-	  DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm);
-
-      cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl;
-
-      double endTime = 200001;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/plate/plate.old b/apps/cpu/plate/plate.old
deleted file mode 100644
index 4d7b2e06e1931eacdf860937e1db15fc33b2de6a..0000000000000000000000000000000000000000
--- a/apps/cpu/plate/plate.old
+++ /dev/null
@@ -1,615 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "numerics/geometry3d/CoordinateTransformation3D.h"
-#include "Grid3D.h"
-#include "GenBlocksGridVisitor.h"
-#include "numerics/geometry3d/GbSystem3D.h"
-#include "numerics/geometry3d/GbCuboid3D.h"
-#include "numerics/geometry3d/GbCylinder3D.h"
-#include <numerics/geometry3d/GbSphere3D.h>
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include "basics/writer/WbWriterVtkXmlBinary.h"
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "RatioBlockVisitor.h"
-#include "RatioSmoothBlockVisitor.h"
-#include "OverlapBlockVisitor.h"
-#include "RefineInterGbObjectsVisitor.h"
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "SetKernelBlockVisitor.h"
-#include "LBMKernelETD3Q27Cascaded.h"
-#include "D3Q27MacroscopicQuantitiesPostprocessor.h"
-#include "MPICommunicator.h"
-#include "D3Q27ETBCProcessor.h"
-#include "SimulationParameters.h"
-#include "D3Q27SetUndefinedNodesBlockVisitor.h"
-#include "SetInterpolationDirsBlockVisitor.h"
-#include "D3Q27SetConnectorsBlockVisitor.h"
-#include "NullCommunicator.h"
-#include "D3Q27ETInitDistributionsBlockVisitor.h"
-#include "CalculationManager.h"
-#include "PQueuePartitioningGridVisitor.h"
-#include "MetisPartitioningGridVisitor.h"
-#include "D3Q27Interactor.h"
-#include "D3Q27NoSlipBCAdapter.h"
-#include "D3Q27VelocityBCAdapter.h"
-#include "D3Q27DensityBCAdapter.h"
-#include "D3Q27BoundaryConditionAdapter.h"
-#include "StringUtil.hpp"
-#include "D3Q27OffsetInterpolationProcessor.h"
-#include "D3Q27CompactInterpolationProcessor.h"
-#include "SyncBcBlockVisitor.h"
-#include "numerics/geometry3d/creator/GbTriFaceMesh3DCreator.h"
-#include "numerics/geometry3d/GbTriFaceMesh3D.h"
-#include "D3Q27TriFaceMeshInteractor.h"
-#include "MathUtil.hpp"
-#include "SolidBlocksHelper.h"
-#include "LBMKernelETD3Q27CascadedTI.h"
-#include "TurbulenceIntensityPostprocessor.h"
-#include "RestartPostprocessor.h"
-#include "BlocksPostprocessor.h"
-#include "NUPSCounterPostprocessor.h"
-
-using namespace std;
-
-
-void run(const char *cstr)
-{
-   try
-   {
-      string machine = QUOTEME(CAB_MACHINE);
-      string BrueckeFilename;
-      string ZckbndFilename;
-      string pathname; 
-      string pathGeo;
-      int numOfThreads =1;
-      bool logfile = false;
-      double availMem = 0;
-
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-      
-      if(machine == "BOMBADIL") 
-      {
-         pathname = "c:/temp/plate";
-         pathGeo = "c:/Data/plate";
-         numOfThreads = 1;
-         logfile = false;
-         availMem = 3.0e9;
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         pathname = "/work/koskuche/scratch/plate";
-         pathGeo = "/home/koskuche/data/plate";
-         numOfThreads = 8;
-         availMem = 12.0e9;
-
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      BrueckeFilename = pathGeo + "/platte_raw.stl"; 
-      ZckbndFilename= pathGeo + "/2zackenbaender0.stl";
-      
-
-
-      if(myid ==0 && logfile)
-      {
-         stringstream logFilename;
-         logFilename <<  pathname + "/logfile.log";
-         UbLog::output_policy::setStream(logFilename.str());
-      }
-
-      int baseLevel, refineLevel,nx[3],blocknx[3];
-      double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init;
-
-      //////////////////////////////////////////////////////////////////////////
-      //physik
-      //////////////////////////////////////////////////////////////////////////
-      Re            = 11900;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum  testen ob was passiert
-      velocity      = 0.01;  
-      vx1Init       = 0.01;  
-      rhoInit       = 1.0;
-      SimulationParametersPtr param = SimulationParameters::getInstanz();
-      param->setCollisionModelType(SimulationParameters::COMPRESSIBLE);
-
-      ///////////////Knotenabmessungen:
-      //int KnotenCubeCoarse=40;
-      nx[0]      = 120;//60;//86;//43;//65;//50;  //länge
-      nx[1]      = 1;//6;///1;//5;// //breite
-      nx[2]      = 32;//18;//5;//15;//15; //höhe gebiet
-      blocknx[0] = 15;
-      blocknx[1] = 15;
-      blocknx[2] = 15;
-
-      baseLevel   = 0;
-      refineLevel = 4;
-
-      int inflowCubeLevel = 1;
-      int bottomLevel     = 1;
-
-      ///////////////Weltabmessungen:
-      double kanalhoeheSI  = 60.0/100.0;//60.0/100.0;//cm, Kanalhöhe
-      double kanalbreiteSI = 9.9/100.0;//1.65/100.0;//13.2/100.0;////40.0/100.0; //cm, Kanalbreite //13.2 zeilbreite
-      double kanallaengeSI = kanalhoeheSI*30.0/18.0;//80.0/100.0;//cm, Kanallänge, ist nicht angegeben
-
-      // double refinewidth1=kanalhoeheSI/10.0;
-
-      double fineNodeDx   = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb
-      double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte
-
-      double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte
-      double blockLengthx2 = blockLengthx1;
-      double blockLengthx3 = blockLengthx1;
-
-      double originX1 = 0.0;//-50.0*propellerDurchmesser;  //geowerte
-      double originX2 = 0.0;//-0.5*blockLengthx2*nx2;
-      double originX3 = 0.0;// minX3 + 0.5*fineNodeDx;
-
-      double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-      //position vorderkante cube
-      double originBridgeX1 = 20.0/100.0; //cm, geraten
-      double originBridgeX2 = 0.0;//0.5*params.nx[1]*blockLengthx2-0.5*H-fineNodeDx;
-      double originBridgeX3 = kanalhoeheSI*0.5;//H*0.0-fineNodeDx; //boden
-
-      bool periodicx1 = false;
-      bool periodicx2 = true;
-      bool periodicx3 = true;
-
-      //##########################################################################
-      //## physical parameters
-      //##########################################################################
-      double smagorinskiConstant = 0.18;
-
-
-      double rhoLB         = 1.0;
-      double rhoReal       = 1.0;
-      double nueReal  = 0.000015;//0.015;
-
-      double hReal         = 0.0105;//<-m     1.05;//Plattendicke in cm(! cm nicht m !)
-      double uReal         = Re*nueReal/hReal;
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-      double Ma      = 0.05;//0.0553;//Ma-Real!
-      double csReal  = uReal/Ma;
-      double hLB     = hReal/coarseNodeDx;
-
-      LBMUnitConverter unitConverter(hReal, csReal, rhoReal, hLB);
-
-      double uLB           = uReal   * unitConverter.getFactorVelocityWToLb();
-      double nueLB         = nueReal * unitConverter.getFactorViscosityWToLb();
-
-      velocity = uLB;
-      double viscosity = nueLB;
-
-      Grid3DPtr grid(new Grid3D());
-      UbSchedulerPtr rSch(new UbScheduler(5000,5000,1000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY);
-
-      //////////////////////////////////////////////////////////////////////////
-
-      std::string opt;
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if(/*(cstr== NULL)*/cstr!= NULL)
-      {
-         opt = std::string(cstr);
-
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-
-         grid = rp.restart(UbSystem::stringTo<int>(opt));
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-      }
-      else
-      {
-      //bounding box
-      double g_minX1 = originX1;
-      double g_minX2 = originX2;
-      double g_minX3 = originX3;
-
-      double g_maxX1 = originX1 + geoLength[0];
-      double g_maxX2 = originX2 + geoLength[1];
-      double g_maxX3 = originX3 + geoLength[2];
-
-      //set grid
-      grid->setDeltaX(coarseNodeDx);
-      grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-      grid->setPeriodicX1(periodicx1);
-      grid->setPeriodicX2(periodicx2);
-      grid->setPeriodicX3(periodicx3);
-
-      
-      GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-      GenBlocksGridVisitor genBlocks;
-      genBlocks.addGeoObject(gridCube);
-      grid->accept(genBlocks);
-
-      //////////////////////////////////////////////////////////////////////////
-      //platte
-      GbTriFaceMesh3DPtr mesh (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(BrueckeFilename,"Netz"));
-
-      double x1minMesh = mesh->getX1Minimum(); double x1maxMesh = mesh->getX1Maximum();
-      double x2minMesh = mesh->getX2Minimum(); double x2maxMesh = mesh->getX2Maximum();
-      double x3minMesh = mesh->getX3Minimum(); double x3maxMesh = mesh->getX3Maximum();
-
-      double drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid();
-      double drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid();
-      double drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-      mesh->rotate(90.0,0.0,0.0);  //TriFacMesh-KO-System anders als LB-KO-System
-
-      x1minMesh = mesh->getX1Minimum();  x1maxMesh = mesh->getX1Maximum();
-      x2minMesh = mesh->getX2Minimum();  x2maxMesh = mesh->getX2Maximum();
-      x3minMesh = mesh->getX3Minimum();  x3maxMesh = mesh->getX3Maximum();
-
-      drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid();
-      drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid();
-      drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-      double H3=1.05/100.0;//cm, Plattendicke
-      double scaleB=H3/(x3maxMesh-x3minMesh);
-      double scaleX2=(geoLength[2]+2.0*coarseNodeDx)/(x2minMesh-x2maxMesh);
-
-      mesh->scale(scaleB,scaleB,scaleB);
-      x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-      x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-      x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-      double offsetXBridge=originBridgeX1;//originBridgeX1;
-      double offsetYBridge=originBridgeX2;//originBridgeX2;
-      double offsetZBridge=originBridgeX3;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-      //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); 
-      mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh+offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge-(x3maxMesh-x3minMesh)*0.5); 
-
-      x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-      x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-      x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-
-      if(myid == 0) GbSystem3D::writeGeoObject( mesh.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() );
-
-      //////////////////////////////////////////////////////////////////////////
-      // Zackenband
-      //////////////////////////////////////////////////////////////////////////
-      GbTriFaceMesh3DPtr meshBand (GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand"));
-      meshBand->deleteRedundantNodes();
-
-      double x1minMeshB = meshBand->getX1Minimum(); double x1maxMeshB = meshBand->getX1Maximum();
-      double x2minMeshB = meshBand->getX2Minimum(); double x2maxMeshB = meshBand->getX2Maximum();
-      double x3minMeshB = meshBand->getX3Minimum(); double x3maxMeshB = meshBand->getX3Maximum();
-
-      x1minMeshB = meshBand->getX1Minimum();  x1maxMeshB = meshBand->getX1Maximum();
-      x2minMeshB = meshBand->getX2Minimum();  x2maxMeshB = meshBand->getX2Maximum();
-      x3minMeshB = meshBand->getX3Minimum();  x3maxMeshB = meshBand->getX3Maximum();
-
-      double H1B=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!!
-      double scaleBand=H1B/(x1maxMeshB-x1minMeshB);//H3B/(x3maxMeshB-x3minMeshB);
-
-      meshBand->scale(scaleBand,scaleBand,scaleBand);
-      x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum();
-      x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum();
-      x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum();
-      double dBandX=0.5/100.0;//1.29; //15mm-2.1mm Absand von Bandvorderkante
-      double dBandY=0.0/100.0;
-      double dBandZ=0.223/100.0;//0.344;//....
-      double offsetXBridgeB=x1minMesh+dBandX;//originBridgeX1+dBandX;//originBridgeX1;
-      double offsetYBridgeB=originBridgeX2+dBandY;//originBridgeX2;
-      double offsetZBridgeB=originBridgeX3+dBandZ;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-      meshBand->translate(-x1minMeshB+offsetXBridgeB, -x2minMeshB+offsetYBridgeB-coarseNodeDx, -x3minMeshB+offsetZBridgeB);//-(x3maxMeshB-x3minMeshB)*0.5); 
-
-      x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum();
-      x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum();
-      x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum();
-
-      GbSystem3D::writeGeoObject( meshBand.get(), pathname+"/geo/Band", WbWriterVtkXmlASCII::getInstance() );
-
-      /////////////////Band2
-      GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand2"));
-      meshBand->deleteRedundantNodes();
-
-      double x1minMeshB2 = meshBand2->getX1Minimum(); double x1maxMeshB2 = meshBand2->getX1Maximum();
-      double x2minMeshB2 = meshBand2->getX2Minimum(); double x2maxMeshB2 = meshBand2->getX2Maximum();
-      double x3minMeshB2 = meshBand2->getX3Minimum(); double x3maxMeshB2 = meshBand2->getX3Maximum();
-
-      x1minMeshB2 = meshBand2->getX1Minimum();  x1maxMeshB2 = meshBand2->getX1Maximum();
-      x2minMeshB2 = meshBand2->getX2Minimum();  x2maxMeshB2 = meshBand2->getX2Maximum();
-      x3minMeshB2 = meshBand2->getX3Minimum();  x3maxMeshB2 = meshBand2->getX3Maximum();
-
-      double H1B2=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!!
-      double scaleBand2=H1B2/(x1maxMeshB2-x1minMeshB2);//H3B/(x3maxMeshB-x3minMeshB);
-
-      meshBand2->scale(scaleBand2,scaleBand2,scaleBand2);
-      x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum();
-      x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum();
-      x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum();
-      double dBandX2=0.5/100.0;//1.29;
-      double dBandY2=0.5/100.0;
-      double dBandZ2=0.223/100.0;//0.344;//...
-      double offsetXBridgeB2=x1minMesh+dBandX2;//originBridgeX1;
-      double offsetYBridgeB2=originBridgeX2+dBandY2;//originBridgeX2;
-      double offsetZBridgeB2=originBridgeX3+dBandZ2;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-      meshBand2->translate(-x1minMeshB2+offsetXBridgeB2, -x2minMeshB2+offsetYBridgeB2-coarseNodeDx, -x3minMeshB2+offsetZBridgeB2);//-(x3maxMeshB2-x3minMeshB2)*0.5); 
-
-      x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum();
-      x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum();
-      x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum();
-
-      if(myid == 0) GbSystem3D::writeGeoObject( meshBand2.get(), pathname+"/geo/Band2", WbWriterVtkXmlASCII::getInstance() );
-      //////////////////////////////////////////////////////////////////////////
-      if(myid == 0) 
-      {
-         UBLOG(logINFO, "*****************************************");
-         UBLOG(logINFO, "* Parameters                            *");
-         UBLOG(logINFO, "* Re            ="<<Re);
-         UBLOG(logINFO, "* Ma            ="<<Ma);
-         UBLOG(logINFO, "* uReal         ="<<uReal);
-         UBLOG(logINFO, "* nueReal       ="<<nueReal);
-         UBLOG(logINFO, "* nue           ="<<nueLB);
-         UBLOG(logINFO, "* velocity      ="<<uLB);
-         UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx);
-         UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx);
-         UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-         //UBLOG(logINFO, "* dxInflow-Cube ="<<velBCCuboid->getX1Maximum()-mesh->getX1Minimum());
-         UBLOG(logINFO, "* cdx           ="<<coarseNodeDx);
-         UBLOG(logINFO, "* fdx           ="<<fineNodeDx);
-         //UBLOG(logINFO, "* inflowProfile ="<<inflowProfile.GetExpr());
-         UBLOG(logINFO, "* dx_base       ="<<coarseNodeDx<<" == "<<coarseNodeDx);
-         UBLOG(logINFO, "* dx_refine     ="<<fineNodeDx<<" == "<<fineNodeDx );
-         //UBLOG(logINFO, "* raiseVelSteps ="<<raiseVelSteps);
-         UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-         UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-         UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-         UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-         UBLOG(logINFO, "*****************************************");
-         UBLOGML(logINFO, "UnitConverter:"<<unitConverter.toString());
-         UBLOG(logINFO, "*****************************************");     
-      }
-      if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-      double geoOverlap = 3.0*coarseNodeDx;
-      //////////////////////////////////////////////////////////////////////////
-      // refine
-      //////////////////////////////////////////////////////////////////////////
-      ///////////platte ausmessen:
-      x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-      x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-      x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-      double deltaX3Platte=(x3maxMesh-x3minMesh);
-
-
-      //GbCuboid3DPtr refine1PlatteCube(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3
-      //   , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-      //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP1(refine1PlatteCube, baseLevel, refineLevel-6);
-      //grid->accept(refineAdapterP1);
-
-      // GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3*0.5
-        // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3));
-      // RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5);
-      // grid->accept(refineAdapterP2);
-
-      GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D(  originX1-geoOverlap  , originX2-geoOverlap  , x3minMesh-H3*0.5
-         , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.5));
-      RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4);
-      grid->accept(refineAdapterP3);
-
-      GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D(   originX1-geoOverlap  , originX2-geoOverlap  , x3minMesh+deltaX3Platte*0.0
-         ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25));
-      if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance());
-      RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3);
-      grid->accept(refineAdapterP4);
-
-      GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D(   originX1-geoOverlap , originX2-geoOverlap  ,x3minMesh+deltaX3Platte*0.1/* x3minMesh+deltaX3Platte*0.8*/
-         ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.00375));
-      if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance());
-      RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2);
-      grid->accept(refineAdapterP5);
-
-      GbCuboid3DPtr refine6PlatteCube(new GbCuboid3D(   originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-deltaX3Platte*0.1/*x3minMesh+deltaX3Platte*0.9*/
-         ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+deltaX3Platte*0.9));
-      if(myid == 0) GbSystem3D::writeGeoObject(refine6PlatteCube.get(), pathname+"/geo/refine6PlatteCube", WbWriterVtkXmlASCII::getInstance());
-      RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP6(refine6PlatteCube, baseLevel, refineLevel-1);
-      grid->accept(refineAdapterP6);
-
-      //GbCuboid3DPtr refine7PlatteCube(new GbCuboid3D(originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-deltaX3Platte*0.3, 
-      //                                               meshBand->getX1Maximum()+meshBand->getLengthX1()*3.0, originX2+geoOverlap+geoLength[1], x3maxMesh));
-      //if(myid == 0) GbSystem3D::writeGeoObject(refine7PlatteCube.get(), pathname+"/geo/refine7PlatteCube", WbWriterVtkXmlASCII::getInstance());
-      //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP7(refine7PlatteCube, baseLevel, refineLevel-1);
-      //grid->accept(refineAdapterP7);
-
-      RatioBlockVisitor ratioVisitor(refineLevel);
-      grid->accept(ratioVisitor);
-      RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-      grid->accept(ratioSmoothVisitor);
-      OverlapBlockVisitor overlapVisitor(refineLevel);
-      grid->accept(overlapVisitor);
-      std::vector<int> dirs;
-      D3Q27System::getLBMDirections(dirs);
-      SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-      grid->accept(interDirsVisitor);
-
-      if(myid == 0) UBLOG(logINFO,"Refinement - end");
-
-      if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-      BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-      if(myid == 0) ppblocks->update(0);
-      //ppblocks.reset();
-      if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-      
-      MetisPartitioningGridVisitor metisVisitor(numOfThreads, D3Q27System::B, comm, false);
-      grid->accept( metisVisitor );
-
-      if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-      SolidBlocksHelper sd(grid, comm);
-
-      //iteractors
-      int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB
-      D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-
-      D3Q27TriFaceMeshInteractorPtr triBridgeInteractor( new D3Q27TriFaceMeshInteractor(mesh, grid, bcObst,Interactor3D::SOLID));
-      sd.addInteractor(triBridgeInteractor);
-
-      D3Q27TriFaceMeshInteractorPtr triBandInteractor( new D3Q27TriFaceMeshInteractor( meshBand, grid, bcObst,Interactor3D::SOLID) );
-
-      D3Q27TriFaceMeshInteractorPtr triBand2Interactor( new D3Q27TriFaceMeshInteractor( meshBand2, grid, bcObst,Interactor3D::SOLID) );
-
-      sd.deleteSolidBlocks();
-      if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	      
-      
-      if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-      grid->accept( metisVisitor );
-      //BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-      if(myid == 0) ppblocks->update(0);
-      ppblocks.reset();
-      if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-      unsigned long nob = grid->getNumberOfBlocks();
-      unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-      
-      double needMemAll  = double(nod*(27*sizeof(double) + sizeof(int))*2);
-      double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"Number of blocks = " << nob);
-         UBLOG(logINFO,"Number of nodes  = " << nod);
-         UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-         UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-         UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-      }
-
-      LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx[0], blocknx[1], blocknx[2]));
-      BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-      kernel->setBCProcessor(bcProc);
-
-      SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-      grid->accept(kernelVisitor);
-
-      if (refineLevel > 0)
-      {
-         D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-         grid->accept(undefNodesVisitor);
-      }
-
-      //discretization
-      grid->addAndInitInteractor(triBridgeInteractor);
-      grid->addAndInitInteractor(triBandInteractor);
-      grid->addAndInitInteractor(triBand2Interactor);
-
-      //outflow
-      GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1+geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3-geoOverlap, 
-                                              originX1+geoLength[0]+geoOverlap, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap ));
-      if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance());
-      D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoInit));
-      D3Q27InteractorPtr densInteractor( new D3Q27Interactor(densCuboid,grid,denBCAdapter,Interactor3D::SOLID) );
-      grid->addAndInitInteractor( densInteractor ); 
-
-      //inflow
-      double uLB2=uLB*0.96*1.02;//*0.5;
-      double raiseVelSteps = 0;
-      vector<D3Q27BCFunction> velcX1BCs,dummy;
-
-      mu::Parser inflowProfile;
-      inflowProfile.SetExpr("uLB"); 
-
-      inflowProfile.DefineConst("uLB",uLB2);
-      velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST));
-
-      GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, 
-                                               originX1+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap));
-      if(myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname+"/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance());
-
-      D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid,grid,Interactor3D::SOLID)); 
-      D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (velcX1BCs,dummy,dummy));
-      velBCInteractor->addBCAdapter(velBCAdapter);
-      grid->addAndInitInteractor( velBCInteractor ); 
-
-      //set connectors
-      D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-      D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-      grid->accept( setConnsVisitor );
-
-      //domain decomposition
-      PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-      grid->accept(pqPartVisitor);
-
-      //initialization of decompositions
-      D3Q27ETInitDistributionsBlockVisitor initVisitor(1.0);
-      initVisitor.setVx1(inflowProfile);
-      grid->accept(initVisitor);
-
-      //Postrozess
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-      
-      UbSchedulerPtr geoSch(new UbScheduler(1));
-      D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-           new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), 
-                                                       conv, comm, true));
-      grid->doPostProcess(0);
-      ppgeo.reset();
-      geoSch.reset();
-
-      if(myid == 0) UBLOG(logINFO,"Preprozess - end");    
-      
-      if(myid == 0) 
-      {
-         UBLOG(logINFO, "* dxInflow-Cube ="<<velBCCuboid->getX1Maximum()-mesh->getX1Minimum());
-         UBLOG(logINFO, "* inflowProfile ="<<inflowProfile.GetExpr());
-         UBLOG(logINFO, "* raiseVelSteps ="<<raiseVelSteps);
-      }
-}
-      
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-      double outTime = 1000;
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      visSch->addSchedule(1000,1000,10000);
-      visSch->addSchedule(10000,10000,100000);
-      visSch->addSchedule(100000,100000,1000000);
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double endTime = 1000001;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/plate/sonjas_org.cpp.vf b/apps/cpu/plate/sonjas_org.cpp.vf
deleted file mode 100644
index 58b0d27a6219ba6fc1b2b54e14068e06b8ba4865..0000000000000000000000000000000000000000
--- a/apps/cpu/plate/sonjas_org.cpp.vf
+++ /dev/null
@@ -1,677 +0,0 @@
-
-
-..damit wir gleich damit anfangen k�nnen. So sieht das Setup aus.
-Sonja
-
-
-SpD3Q19Plattenanstroemung.hpp
-
-#include <topology/amr3d/blockadaptation/AMR3DCrossAndInsideGbObject3DAdapter.h>
-//AMR3DCrossAndInsideGbObject3DAdapter
-#include <topology/amr3d/lbmd3q19/utils/D3Q19MetisTools.h>
-#include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19GridInformationGridAdapter.h>
-#include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19SetConnectorsGridAdapter.h>
-#include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19InitDistributionsGridAdapter.h>
-#include <topology/amr3d/gridadaptation/AMR3DGridLevelPartitionMetisAdapter.h>
-#include <topology/amr3d/gridadaptation/AMR3DGridPartitionOneDirectionAdapter.h>
-#include <topology/amr3d/lbmd3q19/bcadapter/D3Q19DensityLodiBCAdapter.h>
-#include <topology/amr3d/lbmd3q19/singlephase/gridadaptation/SpD3Q19SpongeLayerAdapter.h>
-#include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19InitDistributionsGridAdapter.h>
-
-#include <numerics/geometry3d/GbTriFaceMesh3D.h>
-#include <numerics/geometry3d/creator/GbTriFaceMesh3DCreator.h>
-#include <topology/amr3d/lbmd3q19/interactor/D3Q19AMRTriFaceMeshInteractor.h>
-#include <topology/amr3d/lbmd3q19/services/adapter/D3Q19ClientGridWriteInteractorNodeFiles.h>
-#include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19ChangeSlipToNoSlipGridAdapter.h> 
-
-using namespace std;
-
-void SpD3Q19MasterTestcases::start( RcfClient<IRcfIpService>& ipService, 
-                                   RcfClient<IRcfD3Q19TopologyService>& topoService, 
-                                   RcfClient<IRcfD3Q19AMRInteractorService>& interactorService, 
-                                   RcfClient<IRcfD3Q19CalculationManager>& calculationManager,
-                                   std::vector< RcfClient<IRcfD3Q19CalcService> >& calcServices,
-                                   std::string inputfile )
-{
-   using namespace std;
-   UBLOG(logERROR,"Testcase GBBridge_Sonja "); 
-
-   string outpath = UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL);
-
-   SpD3Q19TestCaseParameters params;
-   bool useLODI;
-   bool initWithLogProfile;
-   //////////////////////////////////////////////////////////////////////////
-   // Params
-   //////////////////////////////////////////////////////////////////////////
-   // if( inputfile.empty() )
-   // {
-   params.calcSteps          = 300000;
-   params.threadedClientCall = true;
-
-   //params.distributedDumpScheduler = UbScheduler(5000, 0);
-   params.distributedDumpScheduler.addSchedule(UbSchedule(100,0,100));
-   params.distributedDumpScheduler.addSchedule(UbSchedule(100,100,6000));
-   params.distributedDumpScheduler.addSchedule(UbSchedule(1000,6000,10000));
-   params.distributedDumpScheduler.addSchedule(UbSchedule(5000,10000,Ub::inf));
-
-   //params.schedulers.calcForces    = UbScheduler(10,0);
-   //params.schedulers.writeForces   = UbScheduler(500,500);
-   params.schedulers.resetAverage  = UbScheduler(50000,50000);
-   params.schedulers.serialization = UbScheduler(20000,20000);
-
-   //Schnickschnack(  so lassen, da geht es im Wesentlichen um Kommunikationsdetails)
-   params.connsTransAttr.setRemoteProtocol(D3Q19ConnectorTransmitterAttributes::MPI_PROTOCOL);
-   params.connsTransAttr.setOptionDirectConnectors(true);
-   params.connsTransAttr.setOptionTwoVectorsForLocalVectors(false);
-   params.connsTransAttr.setOptionConsForNotActiveBlocks(true);
-   params.connsTransAttr.setOptionRemoteBlockedSend(false);
-   params.connsTransAttr.setOptionRemoteBlockedReceive(true);
-   params.connsTransAttr.setOptionRemotePool(true);
-   params.connsTransAttr.setOptionStlVecForSameLevelCons(false);
-   params.connsTransAttr.setOptionStlVecForScaleCons(false);
-
-#ifndef CAB_MPI
-   if(params.connsTransAttr.getRemoteProtocol() == D3Q19ConnectorTransmitterAttributes::MPI_PROTOCOL) 
-      throw UbException(UB_EXARGS,"MPI Transmitter not available for this compilation without /DCAB_MPI");
-#endif
-
-   string machine = QUOTEME(CAB_MACHINE);
-   string BrueckeFilename;
-   string ZckbndFilename;
-   if(machine == "ARAGORN")     {  BrueckeFilename = "f:/data/bruecke/platte_raw.stl"; ZckbndFilename="f:/data/bruecke/zweiPlatten0.stl";}
-   else if(machine == "LUDWIG") {  BrueckeFilename = "/hpc3lustre/home/sonuphof/Stl-Zeichnungen/platte_raw.stl"; ZckbndFilename="/hpc3lustre/home/sonuphof/Stl-Zeichnungen/2zackenbaender0.stl";}
-   else if(machine == "PIPPIN") {  BrueckeFilename = "C:/platteD291009/sonja2/svn_uphoff/Daten/SFB880/platte-cad/platte_raw.stl"; ZckbndFilename="C:/platteD291009/sonja2/svn_uphoff/Daten/SFB880/platte-cad/2zackenbaender0.stl";}
-   else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-
-   //////////////////////////////////////////////////////////////////////////
-   //physik
-   //////////////////////////////////////////////////////////////////////////
-   params.Re            = 11900;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum  testen ob was passiert
-   params.velocity      = 0.01;  
-   params.vx1Init       = 0.01;  
-   params.rhoInit       = 0.0;
-   initWithLogProfile   = true;
-   useLODI              = false;
-
-   params.collModel = D3Q19System::INCOMPGLBEJTLESMODEL;
-   ///////////////Knotenabmessungen:
-   //int KnotenCubeCoarse=40;
-   params.nx[0]      = 120;//60;//86;//43;//65;//50;  //l�nge
-   params.nx[1]      = 6;///1;//5;// //breite
-   params.nx[2]      = 32;//18;//5;//15;//15; //h�he gebiet
-   params.blocknx[0] = 10;
-   params.blocknx[1] = 10;
-   params.blocknx[2] = 10;
-
-   params.baseLevel   = 0;
-   params.refineLevel = 3;
-
-   int inflowCubeLevel = 1;
-   int bottomLevel     = 1;
-
-   ///////////////Weltabmessungen:
-   double kanalhoeheSI  = 60.0/100.0;//60.0/100.0;//cm, Kanalh�he
-   double kanalbreiteSI = 9.9/100.0;//1.65/100.0;//13.2/100.0;////40.0/100.0; //cm, Kanalbreite //13.2 zeilbreite
-   double kanallaengeSI = kanalhoeheSI*30.0/18.0;//80.0/100.0;//cm, Kanall�nge, ist nicht angegeben
-
-   // double refinewidth1=kanalhoeheSI/10.0;
-
-   double fineNodeDx   = (kanalhoeheSI) / (double)( params.blocknx[2]*params.nx[2]*(1<<params.refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb
-   double coarseNodeDx = fineNodeDx * (double)(1<<params.refineLevel);//geowerte
-
-   double blockLengthx1 = params.blocknx[0]*coarseNodeDx; //geowerte
-   double blockLengthx2 = blockLengthx1;
-   double blockLengthx3 = blockLengthx1;
-
-   double originX1 = 0.0;//-50.0*propellerDurchmesser;  //geowerte
-   double originX2 = 0.0;//-0.5*blockLengthx2*nx2;
-   double originX3 = 0.0;// minX3 + 0.5*fineNodeDx;
-
-   double geoLength[]   = {  params.nx[0]*blockLengthx1, params.nx[1]*blockLengthx2, params.nx[2]*blockLengthx3}; 
-
-   //position vorderkante cube
-   double originBridgeX1 = 20.0/100.0; //cm, geraten
-   double originBridgeX2 = 0.0;//0.5*params.nx[1]*blockLengthx2-0.5*H-fineNodeDx;
-   double originBridgeX3 = kanalhoeheSI*0.5;//H*0.0-fineNodeDx; //boden
-
-   bool periodicx1 = false;
-   bool periodicx2 = true;
-   bool periodicx3 = false;
-
-#ifndef CAB_MPI
-   if(params.connsTransAttr.getRemoteProtocol() == D3Q19ConnectorTransmitterAttributes::MPI_PROTOCOL) 
-      throw UbException("LbD3Q19MasterTestcases::startChannelFlow - MPI Transmitter not available for this compilation without /DCAB_MPI");
-#endif
-
-   //weitere parameter
-   double raiseVelSteps                  = 0;
-   double startViscosity                 = 1.0/3.0;
-   int    decreaseViscositySteps         = 6000;
-   int    decreaseViscosityStepForHalVis = (int)(1.0/8.0*decreaseViscositySteps);
-
-   if( D3Q19System::isCompModel(params.collModel) ) params.rhoInit = 1.0;
-   //////////////////////////////////////////////////////////////////////////
-   //grid initialization
-   //////////////////////////////////////////////////////////////////////////
-   UBLOG2(logINFO, std::cout, "grid initialization...");
-
-   CoordinateTransformation3D* trafo = new CoordinateTransformation3D(originX1,originX2, originX3, blockLengthx1, blockLengthx2, blockLengthx3);
-   vector< boost::shared_ptr<AMR3DGridAdaptationCriterion> > adapter;
-   UBLOG(logINFO,"set periodic")
-   adapter.push_back( boost::shared_ptr<AMR3DGridAdaptationCriterion>(new AMR3DSetPeriodicAdapter(periodicx1, params.nx[0], periodicx2, params.nx[1], periodicx3, params.nx[2])) );
-      UBLOG(logINFO,"construct block grid")
-   topoService.constructBlockGrid("MyGrid", UbTupleInt6(params.nx[0],params.nx[1],params.nx[2],params.blocknx[0],params.blocknx[1],params.blocknx[2]), params.baseLevel, UbPointerWrapper<CoordinateTransformation3D>(trafo),adapter );
-
-   UBLOG2(logINFO, std::cout, "grid initialization... done");
-
-   //##########################################################################
-
-   double geoOverlap = 3.0*coarseNodeDx;
-
-   //////////////////////////////////////////////////////////////////////////////
-
-   GbTriFaceMesh3D* mesh = GbTriFaceMesh3DCreator::readMeshFromFile(BrueckeFilename, "Netz");
-    mesh->deleteRedundantNodes();
-
-     double x1minMesh = mesh->getX1Minimum(); double x1maxMesh = mesh->getX1Maximum();
-   double x2minMesh = mesh->getX2Minimum(); double x2maxMesh = mesh->getX2Maximum();
-   double x3minMesh = mesh->getX3Minimum(); double x3maxMesh = mesh->getX3Maximum();
-
-   double drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid();
-   double drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid();
-   double drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-     mesh->rotateAroundPoint(drehpunktZ,drehpunktX,drehpunktY,90.0,0.0,0.0);  //TriFacMesh-KO-System anders als LB-KO-System
-
-   x1minMesh = mesh->getX1Minimum();  x1maxMesh = mesh->getX1Maximum();
-   x2minMesh = mesh->getX2Minimum();  x2maxMesh = mesh->getX2Maximum();
-   x3minMesh = mesh->getX3Minimum();  x3maxMesh = mesh->getX3Maximum();
-
-   drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid();
-   drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid();
-   drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-   double H3=1.05/100.0;//cm, Plattendicke
-   double scaleB=H3/(x3maxMesh-x3minMesh);
-   double scaleX2=(geoLength[2]+2.0*coarseNodeDx)/(x2minMesh-x2maxMesh);
-
-   mesh->scale(scaleB,scaleB,scaleB);
-   x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-   x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-   x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-   double offsetXBridge=originBridgeX1;//originBridgeX1;
-   double offsetYBridge=originBridgeX2;//originBridgeX2;
-   double offsetZBridge=originBridgeX3;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-   //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); 
-   mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh+offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge-(x3maxMesh-x3minMesh)*0.5); 
-
-   x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-   x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-   x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-
-   GbSystem3D::writeGeoObject( mesh, UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/platte", WbWriterVtkXmlBinary::getInstance() );
-
-   //GbTriFaceMesh3D* Bruecke = GbTriFaceMesh3DCreator::getInstance()->readMeshFromFile(BrueckeFilename         ,"Bruecke");
-   // Bruecke->setPointInObjectTest(GbTriFaceMesh3D::RAYCROSSING);//, HALFSPACE, MEGARAY, SEGURA, GELLER)
-   //D3Q19AMRTriFaceMeshInteractor* triInteractor = new D3Q19AMRTriFaceMeshInteractor(mesh, grid,new D3Q19NoSlipBCAdapter, AMR3DInteractor::SOLID);
-   boost::shared_ptr<D3Q19AMRTriFaceMeshInteractor> triBridgeInteractor( new D3Q19AMRTriFaceMeshInteractor( mesh,new D3Q19NoSlipBCAdapter,AMR3DInteractor::SOLID,"bridge") );
-
-   //grid->addAndInitInteractor(triInteractor);
-   interactorService.addInteractor(triBridgeInteractor);
-
-     //////////////////////////////////////////////////////////////////////////////
-
- //////////////////////////////////////////////////////////////////////////
-   // Zackenband
-   //////////////////////////////////////////////////////////////////////////
-     GbTriFaceMesh3D* meshBand = GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand");
-    meshBand->deleteRedundantNodes();
-
-   double x1minMeshB = meshBand->getX1Minimum(); double x1maxMeshB = meshBand->getX1Maximum();
-   double x2minMeshB = meshBand->getX2Minimum(); double x2maxMeshB = meshBand->getX2Maximum();
-   double x3minMeshB = meshBand->getX3Minimum(); double x3maxMeshB = meshBand->getX3Maximum();
-
-   //double drehpunktXB=x1minMeshB+(x1maxMeshB-x1minMeshB)*0.5;//triFaceMeshS->getX1Centroid();
-   //double drehpunktZB=x3minMeshB+(x3maxMeshB-x3minMeshB)*0.5;//triFaceMeshS->getX3Centroid();
-   //double drehpunktYB=x2minMeshB+(x2maxMeshB-x2minMeshB)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-    // meshBand->rotateAroundPoint(drehpunktZB,drehpunktXB,drehpunktYB,90.0,0.0,0.0);  //TriFacMesh-KO-System anders als LB-KO-System
-
-   x1minMeshB = meshBand->getX1Minimum();  x1maxMeshB = meshBand->getX1Maximum();
-   x2minMeshB = meshBand->getX2Minimum();  x2maxMeshB = meshBand->getX2Maximum();
-   x3minMeshB = meshBand->getX3Minimum();  x3maxMeshB = meshBand->getX3Maximum();
-
-   //drehpunktXB=x1minMeshB+(x1maxMeshB-x1minMeshB)*0.5;//triFaceMeshS->getX1Centroid();
-   //drehpunktZB=x3minMeshB+(x3maxMeshB-x3minMeshB)*0.5;//triFaceMeshS->getX3Centroid();
-   //drehpunktYB=x2minMeshB+(x2maxMeshB-x2minMeshB)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-   double H1B=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!!
-   double scaleBand=H1B/(x1maxMeshB-x1minMeshB);//H3B/(x3maxMeshB-x3minMeshB);
- //  double scaleX2B=(geoLength[2]+2.0*coarseNodeDx)/(x2minMeshB-x2maxMeshB);
-
-   meshBand->scale(scaleBand,scaleBand,scaleBand);
-   x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum();
-   x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum();
-   x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum();
-   double dBandX=0.5/100.0;//1.29; //15mm-2.1mm Absand von Bandvorderkante
-   double dBandY=0.0/100.0;
-   double dBandZ=0.223/100.0;//0.344;//....
-   double offsetXBridgeB=x1minMesh+dBandX;//originBridgeX1+dBandX;//originBridgeX1;
-   double offsetYBridgeB=originBridgeX2+dBandY;//originBridgeX2;
-   double offsetZBridgeB=originBridgeX3+dBandZ;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-   //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); 
-   meshBand->translate(-x1minMeshB+offsetXBridgeB, -x2minMeshB+offsetYBridgeB-coarseNodeDx, -x3minMeshB+offsetZBridgeB);//-(x3maxMeshB-x3minMeshB)*0.5); 
-
-   x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum();
-   x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum();
-   x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum();
-
-   GbSystem3D::writeGeoObject( meshBand, UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/Band", WbWriterVtkXmlBinary::getInstance() );
-
-   //GbTriFaceMesh3D* Bruecke = GbTriFaceMesh3DCreator::getInstance()->readMeshFromFile(BrueckeFilename         ,"Bruecke");
-   // Bruecke->setPointInObjectTest(GbTriFaceMesh3D::RAYCROSSING);//, HALFSPACE, MEGARAY, SEGURA, GELLER)
-   //D3Q19AMRTriFaceMeshInteractor* triInteractor = new D3Q19AMRTriFaceMeshInteractor(mesh, grid,new D3Q19NoSlipBCAdapter, AMR3DInteractor::SOLID);
-   boost::shared_ptr<D3Q19AMRTriFaceMeshInteractor> triBandInteractor( new D3Q19AMRTriFaceMeshInteractor( meshBand,new D3Q19NoSlipBCAdapter,AMR3DInteractor::SOLID,"band") );
-   interactorService.addInteractor(triBandInteractor);
-    /////////////////Band2
-
-
-      GbTriFaceMesh3D* meshBand2 = GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand2");
-    meshBand->deleteRedundantNodes();
-
-   double x1minMeshB2 = meshBand2->getX1Minimum(); double x1maxMeshB2 = meshBand2->getX1Maximum();
-   double x2minMeshB2 = meshBand2->getX2Minimum(); double x2maxMeshB2 = meshBand2->getX2Maximum();
-   double x3minMeshB2 = meshBand2->getX3Minimum(); double x3maxMeshB2 = meshBand2->getX3Maximum();
-
-   //double drehpunktXB2=x1minMeshB2+(x1maxMeshB2-x1minMeshB2)*0.5;//triFaceMeshS->getX1Centroid();
-   //double drehpunktZB2=x3minMeshB2+(x3maxMeshB2-x3minMeshB2)*0.5;//triFaceMeshS->getX3Centroid();
-   //double drehpunktYB2=x2minMeshB2+(x2maxMeshB2-x2minMeshB2)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-//     meshBand2->rotateAroundPoint(drehpunktZB2,drehpunktXB2,drehpunktYB2,90.0,0.0,0.0);  //TriFacMesh-KO-System anders als LB-KO-System
-
-   x1minMeshB2 = meshBand2->getX1Minimum();  x1maxMeshB2 = meshBand2->getX1Maximum();
-   x2minMeshB2 = meshBand2->getX2Minimum();  x2maxMeshB2 = meshBand2->getX2Maximum();
-   x3minMeshB2 = meshBand2->getX3Minimum();  x3maxMeshB2 = meshBand2->getX3Maximum();
-
-   //drehpunktXB2=x1minMeshB2+(x1maxMeshB2-x1minMeshB2)*0.5;//triFaceMeshS->getX1Centroid();
-   //drehpunktZB2=x3minMeshB2+(x3maxMeshB2-x3minMeshB2)*0.5;//triFaceMeshS->getX3Centroid();
-   //drehpunktYB2=x2minMeshB2+(x2maxMeshB2-x2minMeshB2)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2;
-
-   double H1B2=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!!
-   double scaleBand2=H1B2/(x1maxMeshB2-x1minMeshB2);//H3B/(x3maxMeshB-x3minMeshB);
-
-   meshBand2->scale(scaleBand2,scaleBand2,scaleBand2);
-   x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum();
-   x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum();
-   x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum();
-   double dBandX2=0.5/100.0;//1.29;
-   double dBandY2=0.5/100.0;
-   double dBandZ2=0.223/100.0;//0.344;//...
-   double offsetXBridgeB2=x1minMesh+dBandX2;//originBridgeX1;
-   double offsetYBridgeB2=originBridgeX2+dBandY2;//originBridgeX2;
-   double offsetZBridgeB2=originBridgeX3+dBandZ2;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh);
-   //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); 
-   meshBand2->translate(-x1minMeshB2+offsetXBridgeB2, -x2minMeshB2+offsetYBridgeB2-coarseNodeDx, -x3minMeshB2+offsetZBridgeB2);//-(x3maxMeshB2-x3minMeshB2)*0.5); 
-
-   x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum();
-   x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum();
-   x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum();
-
-   GbSystem3D::writeGeoObject( meshBand2, UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/Band2", WbWriterVtkXmlBinary::getInstance() );
-
-   //GbTriFaceMesh3D* Bruecke = GbTriFaceMesh3DCreator::getInstance()->readMeshFromFile(BrueckeFilename         ,"Bruecke");
-   // Bruecke->setPointInObjectTest(GbTriFaceMesh3D::RAYCROSSING);//, HALFSPACE, MEGARAY, SEGURA, GELLER)
-   //D3Q19AMRTriFaceMeshInteractor* triInteractor = new D3Q19AMRTriFaceMeshInteractor(mesh, grid,new D3Q19NoSlipBCAdapter, AMR3DInteractor::SOLID);
-   boost::shared_ptr<D3Q19AMRTriFaceMeshInteractor> triBand2Interactor( new D3Q19AMRTriFaceMeshInteractor( meshBand2,new D3Q19NoSlipBCAdapter,AMR3DInteractor::SOLID,"band2") );
-    interactorService.addInteractor(triBand2Interactor);
-   
-   //////////////////////////////////////////////////////////////////////////
-   // refine
-   //////////////////////////////////////////////////////////////////////////
-                        
-
-
-   
-
-
-
-   ///////////platte ausmessen:
-   x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum();
-   x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum();
-   x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum();
-  double deltaX3Platte=(x3maxMesh-x3minMesh);
-
-
-      GbCuboid3D* refine1PlatteCube = new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3
-      , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3);
-   boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP1(new AMR3DCrossAndInsideGbObject3DAdapter(refine1PlatteCube,0,params.refineLevel-6));
-   topoService.adaptGridByBlockCriterion(refineAdapterP1);
-
-        GbCuboid3D* refine2PlatteCube = new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh-H3*0.5
-      , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3);
-   boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP2(new AMR3DCrossAndInsideGbObject3DAdapter(refine2PlatteCube,0,params.refineLevel-5));
-   topoService.adaptGridByBlockCriterion(refineAdapterP2);
-
-        GbCuboid3D* refine3PlatteCube = new GbCuboid3D(  originX1-geoOverlap  , originX2-geoOverlap  , x3minMesh-H3*0.5
-      , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.5);
-   boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP3(new AMR3DCrossAndInsideGbObject3DAdapter(refine3PlatteCube,0,params.refineLevel-4));   //dieser hier hat eine ecke 
-   topoService.adaptGridByBlockCriterion(refineAdapterP3);
-
-        GbCuboid3D* refine4PlatteCube = new GbCuboid3D(   originX1-geoOverlap  , originX2-geoOverlap  , x3minMesh+deltaX3Platte*0.6
-      ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25);
-   boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP4(new AMR3DCrossAndInsideGbObject3DAdapter(refine4PlatteCube,0,params.refineLevel-3));   //weil der hier zu hoch ist
-   topoService.adaptGridByBlockCriterion(refineAdapterP4);
-
-           GbCuboid3D* refine5PlatteCube = new GbCuboid3D(   originX1-geoOverlap , originX2-geoOverlap  , x3minMesh+deltaX3Platte*0.8
-      ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.00375);
-   boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP5(new AMR3DCrossAndInsideGbObject3DAdapter(refine5PlatteCube,0,params.refineLevel-2));
-   topoService.adaptGridByBlockCriterion(refineAdapterP5);
-
-  //            GbCuboid3D* refine6PlatteCube = new GbCuboid3D(   x1minMeshB2+( x1maxMeshB2- x1minMeshB2)*0.8   , originX2-geoOverlap  , x3minMesh+deltaX3Platte*0.9
-  //    ,  x1maxMesh+H3*0.075, originX2+geoOverlap+geoLength[1], x3maxMesh+2.0*fineNodeDx);
-  // boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP6(new AMR3DCrossAndInsideGbObject3DAdapter(refine6PlatteCube,0,params.refineLevel-1));
-  // topoService.adaptGridByBlockCriterion(refineAdapterP6);
-
-           GbCuboid3D* refine6PlatteCube = new GbCuboid3D(   originX1-geoOverlap   , originX2-geoOverlap  , x3minMesh+deltaX3Platte*0.9
-      ,  x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+deltaX3Platte*0.9);
-   boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP6(new AMR3DCrossAndInsideGbObject3DAdapter(refine6PlatteCube,0,params.refineLevel-1));
-   topoService.adaptGridByBlockCriterion(refineAdapterP6);
-
-     UBLOG2(logINFO, std::cout, "Refinement..done");
-   //blockverh�ltnis von 2:1 herstellen:
-   UBLOG(logINFO,"ratio")
-      boost::shared_ptr<AMR3DBlockAdaptationCriterion> ratioAdapter(new AMR3DBlockRatioAdapter(params.refineLevel));
-   topoService.adaptGridByBlockCriterion(ratioAdapter);
-
-
-
-   //////////////////////////////////////////////////////////////////////////
-   //walls                                                                                                   
-   ////////////////////////////////////////////////////////////////////////// 
-   int noSlipSecOpt = 1; //0=2nd order BB 1=simple BB
-   int slipSecOpt   = 1; //0=2nd order BB 1=simple BB
-
-   ////x1x2-walls:                                                                                             
-   GbCuboid3D* wallsX1X2min = new GbCuboid3D(  originX1-geoOverlap   , originX2-geoOverlap  , originX3-geoOverlap
-      , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3-0.5*fineNodeDx);
-   boost::shared_ptr<D3Q19AMRInteractor> wallsX1X2minInteractor( new D3Q19AMRInteractor( wallsX1X2min,new D3Q19SlipBCAdapter(slipSecOpt),AMR3DInteractor::SOLID,"wallsX1X2min") );
-   if(!params.periodic[2]) interactorService.addInteractor( wallsX1X2minInteractor );
-
-   GbCuboid3D* wallsX1X2max = new GbCuboid3D(  originX1-geoOverlap , originX2-geoOverlap , originX3+geoLength[2]+0.5*fineNodeDx            
-      , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoLength[2]+geoOverlap); 
-   boost::shared_ptr<D3Q19AMRInteractor> wallsX1X2maxInteractor( new D3Q19AMRInteractor( wallsX1X2max,new D3Q19SlipBCAdapter(slipSecOpt),AMR3DInteractor::SOLID,"wallsX1X2max") ) ;  
-   if(!params.periodic[2]) interactorService.addInteractor( wallsX1X2maxInteractor );
-
-
-  
-
-   //##########################################################################
-   //## physical parameters
-   //##########################################################################
-   double smagorinskiConstant = 0.18;
-
-
-   double rhoLB         = 1.0;
-   double rhoReal       = 1.0;
-   double nueReal  = 0.000015;//0.015;
-
-   double hReal         = 0.0105;//<-m     1.05;//Plattendicke in cm(! cm nicht m !)
-   double uReal         = params.Re*nueReal/hReal;
-
-   //##Machzahl:
-   //#Ma     = uReal/csReal
-   double Ma      = 0.05;//0.0553;//Ma-Real!
-   double csReal  = uReal/Ma;
-   double hLB     = hReal/coarseNodeDx;
-
-   D3Q19UnitConverter unitConverter(hReal, csReal, rhoReal, hLB );
-
-   double uLB           = uReal   * unitConverter.getFactorVelocityWToLb();
-   double nueLB         = nueReal * unitConverter.getFactorViscosityWToLb();
-
-   params.velocity = uLB;
-   double viscosity = nueLB;
-
-   //////////////////////////////////////////////////////////////////////////
-   // BCs
-   //////////////////////////////////////////////////////////////////////////
-   //////////////////////////////////////////////////////////////////////////
-   // inflow
-   //////////////////////////////////////////////////////////////////////////
-
-
-   double uLB2=uLB*0.96*1.02;//*0.5;
-
-   vector<D3Q19BCFunction> velcX1BCs,dummy;
-
-   if(raiseVelSteps>0)
-   {
-      mu::Parser inflowProfile1;
-         inflowProfile1.SetExpr("uLB"); 
-    
-          inflowProfile1.DefineConst("uLB",uLB2);
-   }
-   mu::Parser inflowProfile;
-   inflowProfile.SetExpr("uLB"); 
-
-   inflowProfile.DefineConst("uLB",uLB2);
-   //inflowProfile.DefineConst("xlbnachxworld",xlbnachxworld);
-   velcX1BCs.push_back(D3Q19BCFunction(inflowProfile,raiseVelSteps,D3Q19BCFunction::INFCONST));
-
-
-   GbCuboid3D* velBCCuboid = NULL;
-   velBCCuboid = new GbCuboid3D(  originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap
-      , originX1-fineNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap);
-
-   boost::shared_ptr< D3Q19AMRInteractor> velBCInteractor(new D3Q19AMRInteractor(velBCCuboid,AMR3DInteractor::SOLID,"velBC")); 
-   velBCInteractor->addBCAdapter(new D3Q19VelocityBCAdapter(velcX1BCs,dummy,dummy) );
-   interactorService.addInteractor( velBCInteractor ); 
-
-
-
-   //////////////////////////////////////////////////////////////////////////
-   // outflow
-   //////////////////////////////////////////////////////////////////////////
-   GbCuboid3D* densCuboid = NULL;
-   densCuboid = new GbCuboid3D(  originX1+geoLength[0]+fineNodeDx, originX2-geoOverlap             , originX3-geoOverlap
-      , originX1+geoLength[0]+geoOverlap, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap );
-
-   if(useLODI)
-   {
-      float LX1 = (float)((densCuboid->getX1Minimum()-velBCCuboid->getX1Maximum())/coarseNodeDx);
-      float LX2 = -1.0f;
-      float LX3 = -1.0f;
-
-      D3Q19DensityLodiBCAdapter* lodiBCadapter = new D3Q19DensityLodiBCAdapter(3,LX1,LX2,LX3,params.rhoInit,params.vx1Init,params.vx2Init,params.vx3Init,params.rhoInit);
-      boost::shared_ptr< D3Q19AMRInteractor> densInteractor(new D3Q19AMRInteractor(densCuboid,lodiBCadapter,AMR3DInteractor::SOLID,"lodiDensBC"));
-      interactorService.addInteractor( densInteractor ); 
-   }
-   else
-   {
-      boost::shared_ptr< D3Q19AMRInteractor> densInteractor( new D3Q19AMRInteractor(densCuboid,new D3Q19DensityBCAdapter(params.rhoInit),AMR3DInteractor::SOLID,"densBC") );
-      interactorService.addInteractor( densInteractor ); 
-   }
-
-   UBLOG(logINFO, "*****************************************");
-   UBLOG(logINFO, "* Parameters                            *");
-   UBLOG(logINFO, "* Re            ="<<params.Re);
-   UBLOG(logINFO, "* Ma            ="<<Ma);
-   UBLOG(logINFO, "* uReal         ="<<uReal);
-   UBLOG(logINFO, "* nueReal       ="<<nueReal);
-   UBLOG(logINFO, "* nue           ="<<nueLB);
-   UBLOG(logINFO, "* velocity      ="<<uLB);
-   UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx);
-   UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx);
-   UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-   UBLOG(logINFO, "* dxInflow-Cube ="<<velBCCuboid->getX1Maximum()-mesh->getX1Minimum());
-   UBLOG(logINFO, "* cdx           ="<<coarseNodeDx);
-   UBLOG(logINFO, "* fdx           ="<<fineNodeDx);
-  // UBLOG(logINFO, "* H_world       ="<<H);
-  // UBLOG(logINFO, "* H_LB          ="<<H/coarseNodeDx);
-   //UBLOG(logINFO, "* H_log_world   ="<<delta);
-   //UBLOG(logINFO, "* H_log_LB      ="<<delta/baseDX);
-   //UBLOG(logINFO, "* alpha         ="<<alpha);
-   UBLOG(logINFO, "* inflowProfile ="<<inflowProfile.GetExpr());
-   UBLOG(logINFO, "* dx_base       ="<<coarseNodeDx<<" == "<<coarseNodeDx);
-   UBLOG(logINFO, "* dx_refine     ="<<fineNodeDx<<" == "<<fineNodeDx );
-   UBLOG(logINFO, "* collModel     ="<<params.collModel);
-   UBLOG(logINFO, "* raiseVelSteps ="<<raiseVelSteps);
-   UBLOG(logINFO, "* startVis      ="<<startViscosity);
-   UBLOG(logINFO, "* raiseVisSteps ="<<decreaseViscositySteps);
-   UBLOG(logINFO, "* nx1/2/3       ="<<params.nx[0]<<"/"<<params.nx[1]<<"/"<<params.nx[2]);
-   UBLOG(logINFO, "* blocknx1/2/3  ="<<params.blocknx[0]<<"/"<<params.blocknx[1]<<"/"<<params.blocknx[2]);
-   UBLOG(logINFO, "* x3Periodic    ="<<params.periodic[2]);
-   UBLOG(logINFO, "* useDirectConnectors           "<< params.connsTransAttr.useDirectConnectors()        ); 
-   UBLOG(logINFO, "* useSTLVectorForSameLevelCons  "<< params.connsTransAttr.useStlVecForSameLevelCons()  ); 
-   UBLOG(logINFO, "* useSTLVectorForScaleCons      "<< params.connsTransAttr.useStlVecForScaleCons()      ); 
-   UBLOG(logINFO, "* useConsForNotActiveBlocks     "<< params.connsTransAttr.useConsForNotActiveBlocks() ); 
-   UBLOG(logINFO, "* LODI           ="<< (useLODI ? "ON" : "OFF") ); 
-   UBLOG(logINFO, "*****************************************");
-   UBLOGML(logINFO, "UnitConverter:"<<unitConverter.toString());
-   UBLOG(logINFO, "*****************************************");
-
-   //////////////////////////////////////////////////////////////////////////
-   //geo holen und setzen!!!
-   //////////////////////////////////////////////////////////////////////////
-   topoService.getAndAddAndInitInteractors();
-
-   //////////////////////////////////////////////////////////////////////////
-   UBLOG(logINFO, "//////////////////////////////////////////////////////////////////");
-   int nofBlocks = topoService.getNumberOfBlocks(true);
-   UBLOG(logINFO, "//active blocks after interactors: "<<nofBlocks);
-   int nofAllBlocks = topoService.getNumberOfBlocks(false);
-   UBLOG(logINFO, "//total blocks after interactors: "<<nofAllBlocks);
-   UBLOG(logINFO, " -> ~"<<nofBlocks*(params.blocknx[0]+1)*(params.blocknx[1]+1)*(params.blocknx[2]+1)<<" nodes");
-   UBLOG(logINFO, "//////////////////////////////////////////////////////////////////");
-
-   //partitionierung
-   UBLOG2(logINFO,cout, "levelweise METIS SEGMENTIERUNG!!!!")
-      boost::shared_ptr<AMR3DGridAdaptationCriterion> partioningAdapter(new AMR3DGridLevelPartitionMetisAdapter( (int)calcServices.size()
-      , D3Q19MetisAdapterTools::getMetisDirsAndWeights(  params.blocknx[0]
-   , params.blocknx[1]
-   , params.blocknx[2] )
-      , params.connsTransAttr.useConsForNotActiveBlocks()
-      , D3Q19MetisAdapterTools::getD3Q19GetBlockWeightFunctor(false) ) );   ///////hier false auf keine gewichtung - default:doppelte gewichtung f�r fine
-   //  boost::shared_ptr<AMR3DGridAdaptationCriterion> partioningAdapter(new AMR3DGridPartitionOneDirectionAdapter((int)calcServices.size()) );   
-  // UBLOG2(logINFO,"params.connsTransAttr.useConsForNotActiveBlocks():" ); 
-   //UBLOG2(logINFO,params.connsTransAttr.useConsForNotActiveBlocks() );         
-   topoService.adaptGridByGridCriterion(partioningAdapter);
-   topoService.writeBlocksToAVS(outpath+"/blocksSegments",false);
-   UBLOG2(logINFO,cout, "BlockSegmentsGeschriebe")
-      //clientgrids erzeugen
-      topoService.createClientGridsAndSendBlocksToClients("client",params.connsTransAttr,params.threadedClientCall);
-   UBLOG2(logINFO,cout, "createClientGrids usw")
-
-
-
-      boost::shared_ptr<D3Q19ClientGridWriteInteractorNodeFiles> writeInteractorTransNodesAdapter(new D3Q19ClientGridWriteInteractorNodeFiles("shared",D3Q19ClientGridWriteInteractorNodeFiles::ValueProjOnGeoVertex)); 
-   writeInteractorTransNodesAdapter->setScheduler(UbSchedule(10000));
-   writeInteractorTransNodesAdapter->addInteractorID( triBridgeInteractor ->getName() );
-
-      //physik-daten zuweisen
-      D3Q19GridPhysicsAdapter* physicsAdapter = new D3Q19GridPhysicsAdapter(params.collModel,viscosity,0.0,0.0,0.0);
-   physicsAdapter->setSmagorinskyConstant(smagorinskiConstant);
-   physicsAdapter->setUnitConverter( unitConverter );
-   boost::shared_ptr<AMR3DGridAdaptationCriterion>  physicsAdapterPtr(physicsAdapter);
-
-   //UbPointerWrapper<AMR3DGridAdaptationCriterion>   decreaseViscosityAdapter( new D3Q19GridPhysicsAdapter(decreaseViscositySteps, startViscosity, viscosity, decreaseViscosityStepForHalVis) );
-   boost::shared_ptr<AMR3DGridAdaptationCriterion>  decreaseViscosityAdapter( new D3Q19GridPhysicsAdapter(decreaseViscositySteps, startViscosity, viscosity, decreaseViscosityStepForHalVis) );
-   //boost::shared_ptr<AMR3DBlockAdaptationCriterion> initadapter(new D3Q19InitDistributionsAdapter(params.connsTransAttr.useConsForNotActiveBlocks(), params.collModel, params.rhoInit,(params.vx1Init*0.96),params.vx2Init,params.vx3Init, 0, AMR3DSystem::MAXLEVEL));
-
-   boost::shared_ptr<AMR3DGridAdaptationCriterion> initadapter(new D3Q19InitDistributionsGridAdapter(params.rhoInit,params.vx1Init,params.vx2Init,params.vx3Init));
-   if(initWithLogProfile) 
-   {
-    
-      boost::dynamic_pointer_cast<D3Q19InitDistributionsGridAdapter>(initadapter)->setVx1( inflowProfile );
-   }
-
-
-   boost::shared_ptr<D3Q19ClientGridPostProcessFileAdapter> writeDumpsAdapter(new D3Q19ClientGridPostProcessFileAdapter("shared",true,false));
-   writeDumpsAdapter->setScheduler(params.distributedDumpScheduler);
-   writeDumpsAdapter->setUseFileCounterInsteadTimestepForGlobalPVD(true);
-
-
-   UBLOG(logINFO, "put physicsAdapter to clients");
-   calculationManager.adaptGridByGridCriterionAtClients(physicsAdapterPtr,params.threadedClientCall);
-
-   boost::shared_ptr<AMR3DGridAdaptationCriterion>  hackAdapter(new D3Q19ChangeSlipToNoSlipGridAdapter());
-   UBLOG2(logINFO, std::cout, "add hackAdapter to clients");
-   calculationManager.addTimeDependentGridAdapterAtClients(hackAdapter,params.threadedClientCall);
-   UBLOG2(logINFO, std::cout, "## adapter stuff - start"); 
-
-   UBLOG(logINFO, "getAndAddInteractorsAtClients at clients");
-   calculationManager.getAndAddInteractorsAtClients(params.threadedClientCall);
-
-   UBLOG(logINFO, "put initadapter to clients");
-   calculationManager.adaptGridByGridCriterionAtClients(initadapter,params.threadedClientCall);
-   UBLOG(logINFO, "put setConnectorAdapter to clients");
-   boost::shared_ptr<AMR3DGridAdaptationCriterion>  setConnectorAdapter(new D3Q19SetConnectorsGridAdapter( ) );
-   calculationManager.adaptGridByGridCriterionAtClients(setConnectorAdapter,params.threadedClientCall);
-
-   if(decreaseViscositySteps) calculationManager.addTimeDependentGridAdapterAtClients(decreaseViscosityAdapter,params.threadedClientCall);
-
-   UBLOG(logINFO,"put writeAdapter to calc clients")
-      calculationManager.addClientGridAdapterAtClients(writeDumpsAdapter,params.threadedClientCall);
-   UBLOG(logINFO, "put writeInteractorTransNodesAdapter to clients" )
-      calculationManager.addClientGridAdapterAtClients(writeInteractorTransNodesAdapter, params.threadedClientCall); 
-
-   //remote connetoren
-   UBLOG(logINFO, "setRemoteConnectorsOnCalcServices at clients");
-   topoService.setRemoteConnectorsOnCalcServices(D3Q19System::getAMR3DDirsForD3Q19Dirs(),params.connsTransAttr,params.threadedClientCall);
-
-    UbFileOutputASCII out(UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/params.txt");
-   if(out.isOpen())
-   {
-      UBLOG(logINFO, "save params to "<<out.getFileName());
-      params.write(&out);
-      out.writeLine();
-      out.writeString("useLodi                  "); out.writeBool(useLODI);             out.writeLine();
-      out.writeString("initWithLogProfile       "); out.writeBool(initWithLogProfile);  out.writeLine();
-      UBLOG(logINFO, " done" )
-   }
-
-
-   //##########################################################################
-   //## spongelayer
-   //##########################################################################
-   UBLOG2(logINFO, std::cout, "##################################################################");
-   UBLOG2(logINFO, std::cout, "## spongelayer - start");
-
-   GbCuboid3D* spongeCubeLeft = new GbCuboid3D( velBCCuboid->getX1Minimum() 
-      , velBCCuboid->getX2Minimum() 
-      , velBCCuboid->getX3Minimum() 
-      , velBCCuboid->getX1Maximum()+(velBCCuboid->getX1Maximum()-velBCCuboid->getX1Minimum() )*0.1-1.0*coarseNodeDx 
-      , velBCCuboid->getX2Maximum() 
-      , velBCCuboid->getX3Maximum() );
-
-   GbSystem3D::writeGeoObject( spongeCubeLeft, UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/spongeIn", WbWriterVtkXmlBinary::getInstance() );
-   boost::shared_ptr<AMR3DGridAdaptationCriterion>  spongeAdapterLeft( new SpD3Q19SpongeLayerAdapter(spongeCubeLeft, 1./3., nueLB,  SpD3Q19SpongeLayerAdapter::ALTERNATIONX1) );
-   calculationManager.adaptGridByGridCriterionAtClients(spongeAdapterLeft ,params.threadedClientCall);
-
-
-
-   UBLOG2(logINFO, std::cout, "## spongelayerOutflow - start");
-                                                double H=kanallaengeSI/10.0;
-   GbCuboid3D* spongeCubeRight = new GbCuboid3D( originX1+geoLength[0]+fineNodeDx-H 
-      , originX2-geoOverlap             , originX3-geoOverlap
-      , originX1+geoLength[0]+geoOverlap, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap   );   
-
-   GbSystem3D::writeGeoObject( spongeCubeRight, UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/spongeOut", WbWriterVtkXmlBinary::getInstance() );
-   boost::shared_ptr<AMR3DGridAdaptationCriterion>  spongeAdapterRight( new SpD3Q19SpongeLayerAdapter(spongeCubeRight,  nueLB,1./3.,  SpD3Q19SpongeLayerAdapter::ALTERNATIONX1) );
-   calculationManager.adaptGridByGridCriterionAtClients(spongeAdapterRight ,params.threadedClientCall);
-   UBLOG2(logINFO, std::cout, "## spongelayer - end");
-   UBLOG2(logINFO, std::cout, "##################################################################");
-
-
-
-   //GbCuboid3D* densCuboid = NULL;
-   //##########################################################################
-
-   calculationManager.calculate(params.calcSteps, UbStaticPathMap::GLOBAL, params.schedulers);
-
-   UBLOG(logINFO, "warte nun auf ende!!");
-
-}
-
diff --git a/apps/cpu/plate2/CMakeLists.txt b/apps/cpu/plate2/CMakeLists.txt
deleted file mode 100644
index 9b79ca447e13021658b721f7e869af549ffabf0e..0000000000000000000000000000000000000000
--- a/apps/cpu/plate2/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(plate2)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(plate2 BINARY)
diff --git a/apps/cpu/plate2/plate2.cpp b/apps/cpu/plate2/plate2.cpp
deleted file mode 100644
index 1fd5a281ebae6906ae7706735d32b4aedbbe8199..0000000000000000000000000000000000000000
--- a/apps/cpu/plate2/plate2.cpp
+++ /dev/null
@@ -1,557 +0,0 @@
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <vfluids.h>
-
-using namespace std;
-
-void run(const char *cstr1, const char *cstr2)
-{
-   try
-   {
-      string pathname; 
-      string pathGeo;
-      string pathLog;
-      int numOfThreads = 1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      string machine = string(cstr1);
-
-      if(machine == "my") 
-      {
-         pathname = "d:/temp/plate2R1e6";
-         pathGeo = "d:/Data/plate";
-         pathLog = "d:/temp/plate2R1e6";
-         numOfThreads = 4;
-         logfile = false;
-         availMem = 15.0e9;
-      }
-      else if(machine == "Ludwig")      
-      {
-         pathname = "/work/koskuche/SFB880/plate2Con";
-         pathGeo = "/home/koskuche/data/plate";
-         pathLog = pathname;
-         numOfThreads = 8;
-         availMem = 12.0e9;///8*numOfThreads;
-         logfile = true;
-      }
-      else if(machine == "HLRS")      
-      {
-         pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0";
-         pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate";
-         pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate";
-         numOfThreads = 16;
-         availMem = 2.0e9;
-         logfile = true;
-      }
-      else if(machine == "HLRN")      
-      {
-         pathname = "/gfs1/work/niivfcpu/scratch/plateEx";
-         pathGeo = "/gfs1/work/niivfcpu/data/plate";
-         pathLog = pathname;
-         numOfThreads = 24;
-         availMem = 64.0e9/24.0*numOfThreads;
-         logfile = true;
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-#if defined(__unix__)
-      if (myid==0) 
-      {
-         const char* str = pathLog.c_str();
-         int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-      }
-#endif 
-
-      if(myid == 0 && logfile)
-      {
-         //UbLog::reportingLevel() = logDEBUG5;
-         logFilename <<  pathLog + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-         UbLog::output_policy::setStream(logFilename.str());
-      }
-
-      if(myid==0) UBLOG(logINFO,"Testcase plate");
-
-      //string PlatteFilename = pathGeo + "/Platte4mesh_1.8mmProbendicke.stl";
-      string PlatteFilename = pathGeo + "/platte_raw.stl";
-
-      string ZckbndFilename = pathGeo + "/2zackenbaender0.stl";
-
-      ///////////////Knotenabmessungen:
-      int nx[3], blocknx[3];
-      nx[0]      = 90;//240;//120;//60;//86;//43;//65;//50;  //l�nge
-      nx[1]      = 2;//2;//6;///1;//5;// //breite
-      nx[2]      = 30;//64;//32;//18;//5;//15;//15; //h�he gebiet
-      blocknx[0] = 16;//10;//6;
-      blocknx[1] = 16;//10;//6;
-      blocknx[2] = 16;//10;//6;
-
-      int baseLevel   = 0;
-      int refineLevel = 4;
-
-      double H = 600.0; // Kanalh�he [mm]
-      double cdx = H/(double)(nx[2]*blocknx[2]);
-      double fdx = cdx/double(1<<refineLevel);
-
-      //double h = 200.0; // gew�nschte Plattenh�he in Gitterpunkten
-      //double fdx = plate->getLengthX3()/h;
-      //double cdx = fdx*double(1<<refineLevel);
-
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      //////////////////////////////////////////////////////////////////////////
-      //physik
-      //////////////////////////////////////////////////////////////////////////
-      double Re            = 1133333.3333333335; 
-      double rhoLB         = 0.0;
-      double uLB           = 0.1; 
-      double lReal         = 1000; //Plattenl�nge in mm
-      double nuLB          = (uLB*(lReal/cdx))/Re;
-
-      int sizeSP=4;
-      mu::Parser spongeLayer;
-      spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0");
-      spongeLayer.DefineConst("sizeX", nx[0]*blocknx[0]);
-      spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]);
-
-      Grid3DPtr grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(1000,1000,10000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-      bool restart;
-
-      if (grid->getTimeStep() == 0)
-      {
-
-         if(myid==0) UBLOG(logINFO,"Neustart..");
-         restart = false;
-         //////////////////////////////////////////////////////////////////////////
-         //Platte
-         GbTriFaceMesh3DPtr plate (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename,"Netz"));
-         plate->rotate(90.0,0.0,0.0);  //TriFacMesh-KO-System anders als LB-KO-System
-         if(myid == 0) GbSystem3D::writeGeoObject( plate.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() );
-         //////////////////////////////////////////////////////////////////////////
-         // Zackenband
-         //////////////////////////////////////////////////////////////////////////
-         GbTriFaceMesh3DPtr meshBand1 (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand"));
-         meshBand1->translate(-495, -700, -19.94);
-         if(myid == 0) GbSystem3D::writeGeoObject( meshBand1.get(), pathname+"/geo/Band1", WbWriterVtkXmlASCII::getInstance() );
-         // Zackenband2
-         GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand2"));
-         meshBand2->translate(-495, -705, -19.94); 
-         if(myid == 0) GbSystem3D::writeGeoObject( meshBand2.get(), pathname+"/geo/Band2", WbWriterVtkXmlASCII::getInstance() );
-         // Zackenband3
-         GbTriFaceMesh3DPtr meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand3"));
-         meshBand3->translate(-495, -700, -19.64); 
-         if(myid == 0) GbSystem3D::writeGeoObject( meshBand3.get(), pathname+"/geo/Band3", WbWriterVtkXmlASCII::getInstance() );
-         // Zackenband4
-         GbTriFaceMesh3DPtr meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand4"));
-         meshBand4->translate(-495, -705, -19.64); 
-         if(myid == 0) GbSystem3D::writeGeoObject( meshBand4.get(), pathname+"/geo/Band4", WbWriterVtkXmlASCII::getInstance() );
-         //////////////////////////////////////////////////////////////////////////
-
-         double blockLengthx1 = blocknx[0]*cdx; //geowerte
-         double blockLengthx2 = blockLengthx1;
-         double blockLengthx3 = blockLengthx1;
-
-         double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-         double originX1 = plate->getX1Minimum()-plate->getLengthX1()/4.0;
-         double originX2 = plate->getX2Minimum();
-         double originX3 = plate->getX3Minimum()-299.5;
-
-
-         bool periodicx1 = false;
-         bool periodicx2 = true;
-         bool periodicx3 = true;
-
-         //bounding box
-         double g_minX1 = originX1;
-         double g_minX2 = originX2;
-         double g_minX3 = originX3;
-
-         double g_maxX1 = originX1 + geoLength[0];
-         double g_maxX2 = originX2 + geoLength[1];
-         double g_maxX3 = originX3 + geoLength[2];;
-
-
-         //set grid
-         grid->setDeltaX(cdx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         grid->setPeriodicX1(periodicx1);
-         grid->setPeriodicX2(periodicx2);
-         grid->setPeriodicX3(periodicx3);
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         gridCube->setCenterCoordinates(gridCube->getX1Centroid(),meshBand1->getX2Centroid(),gridCube->getX3Centroid());
-         if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         originX2 = gridCube->getX2Minimum();
-         g_minX2 = originX2;
-         g_maxX2 = originX2 + geoLength[1];
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         //////////////////////////////////////////////////////////////////////////
-         if(myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            UBLOG(logINFO, "* Re            ="<<Re);
-            UBLOG(logINFO, "* nuLB          ="<<nuLB);
-            UBLOG(logINFO, "* uLB           ="<<uLB);
-            UBLOG(logINFO, "* cdx           ="<<cdx);
-            UBLOG(logINFO, "* fdx           ="<<fdx);
-            double Hzb = 0.6/fdx;
-            UBLOG(logINFO, "* Height of Zackenband ="<<Hzb);
-            UBLOG(logINFO, "* Re on Zackenband ="<<(uLB*Hzb)/(nuLB*double(1<<refineLevel)));
-            UBLOG(logINFO, "* nx1/2/3       ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-            UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-            UBLOG(logINFO, "* x1Periodic    ="<<periodicx1);
-            UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-            UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-            UBLOG(logINFO, "* number of levels  ="<<refineLevel+1);
-            UBLOG(logINFO, "* path          ="<<pathname);
-
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* number of threads    ="<<numOfThreads);
-            UBLOG(logINFO, "* number of processes  ="<<comm->getNumberOfProcesses());
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "*****************************************");     
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-
-         //////////////////////////////////////////////////////////////////////////
-         //refinement
-         GbCuboid3DPtr refinePlatteBox(new GbCuboid3D(plate->getX1Minimum(), plate->getX2Minimum(), plate->getX3Minimum()+(plate->getX3Maximum()-plate->getX3Minimum())/2.0, 
-            plate->getX1Maximum()+40.0, plate->getX2Maximum(), plate->getX3Maximum()));
-         if(myid == 0) GbSystem3D::writeGeoObject( refinePlatteBox.get(), pathname+"/geo/refinePlatteBox", WbWriterVtkXmlASCII::getInstance() );
-
-         if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            refineHelper.addGbObject(refinePlatteBox, refineLevel);
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         /////////////////////////////////////////////////
-         ///interactoren
-         int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-         D3Q27TriFaceMeshInteractorPtr triPlateInteractor( new D3Q27TriFaceMeshInteractor(plate, grid, bcObst,Interactor3D::SOLID));
-         D3Q27TriFaceMeshInteractorPtr triBand1Interactor( new D3Q27TriFaceMeshInteractor( meshBand1, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) );
-         D3Q27TriFaceMeshInteractorPtr triBand2Interactor( new D3Q27TriFaceMeshInteractor( meshBand2, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) );
-         D3Q27TriFaceMeshInteractorPtr triBand3Interactor( new D3Q27TriFaceMeshInteractor( meshBand3, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) );
-         D3Q27TriFaceMeshInteractorPtr triBand4Interactor( new D3Q27TriFaceMeshInteractor( meshBand4, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) );
-
-         //inflow
-         GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1-blockLengthx1, originX2-blockLengthx1, originX3-blockLengthx1, 
-            originX1, originX2+geoLength[1]+blockLengthx1, originX3+geoLength[2]+blockLengthx1));
-         if(myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname+"/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid,grid,Interactor3D::SOLID)); 
-
-         //inflow
-         double raiseVelSteps = 0;
-         vector<D3Q27BCFunction> velcX1BCs,dummy;
-
-         mu::Parser inflowProfile;
-         inflowProfile.SetExpr("uLB"); 
-         inflowProfile.DefineConst("uLB",uLB);
-         velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST));
-
-         D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (velcX1BCs,dummy,dummy));
-         velBCInteractor->addBCAdapter(velBCAdapter);
-
-         //outflow
-         GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1+geoLength[0], originX2-blockLengthx1, originX3-blockLengthx1, 
-            originX1+geoLength[0]+blockLengthx1, originX2+geoLength[1]+blockLengthx1, originX3+geoLength[2]+blockLengthx1 ));
-         if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance());
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-         D3Q27InteractorPtr densInteractor( new D3Q27Interactor(densCuboid,grid,denBCAdapter,Interactor3D::SOLID) );
-
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));	
-
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(triPlateInteractor);
-         intHelper.addInteractor(triBand1Interactor);
-         intHelper.addInteractor(triBand2Interactor);
-         intHelper.addInteractor(triBand3Interactor);
-         intHelper.addInteractor(triBand4Interactor);
-         intHelper.addInteractor(densInteractor);
-         intHelper.addInteractor(velBCInteractor);
-         intHelper.selectBlocks();
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-         //////////////////////////////////////
-
-         //domain decomposition for threads
-         if(numOfThreads > 1)
-         {
-            PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-            grid->accept(pqPartVisitor);
-         }
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Write blocks - start");
-            BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppblocks->update(0);
-            UBLOG(logINFO,"Write blocks - end");
-         }
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-         unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-         unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-
-         double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-         
-         double nup = 0; 
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for(int level = minInitLevel; level<=maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO,"Number of blocks for level " << level <<" = " << nobl);
-               UBLOG(logINFO,"Number of nodes for level " << level <<" = " << nobl*nodb);
-               nup += nobl*nodb*double(1<<level); 
-            }
-            UBLOG(logINFO,"Hypothetically time for calculation step for 120 nodes  = " << nup/6.0e5/(120*8)  << " s");
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-            UBLOG(logINFO,"Available memory per node/8.0 = " << (availMem/8.0) << " bytes");
-         }
-
-         //////////////////////////////////////////
-         //set connectors
-         if(myid == 0) UBLOG(logINFO,"set connectors - start");
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         if(myid == 0) UBLOG(logINFO,"set connectors - end");
-
-         ////////////////////////////
-         LBMKernel3DPtr kernel;
-         //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-
-         //with sponge layer
-         kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-         kernel->setWithSpongeLayer(true);
-         kernel->setSpongeLayer(spongeLayer);
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-         //////////////////////////////////
-         //undef nodes
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-
-         intHelper.setBC();
-
-         //initialization of decompositions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoLB);
-         initVisitor.setVx1(uLB);
-         grid->accept(initVisitor);
-
-         //Postprozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), 
-            unitConverter, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-         geoSch.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-      }
-      else
-      {
-         restart = true;
-
-         //domain decomposition for threads
-         if(numOfThreads > 1)
-         {
-            PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-            grid->accept(pqPartVisitor);
-         }
-         //set connectors
-         //grid->setPeriodicX3(false);
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         SetSpongeLayerBlockVisitor ssp(spongeLayer);
-         grid->accept(ssp);
-
-         //////////////////////////////////////////////////////////////////////////
-         //////////////////////////////////////////////////////////////////////////
-         //Platte
-         GbTriFaceMesh3DPtr plate (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename,"Netz"));
-         plate->rotate(90.0,0.0,0.0);  //TriFacMesh-KO-System anders als LB-KO-System
-         if(myid == 0) GbSystem3D::writeGeoObject( plate.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() );
-         //////////////////////////////////////////////////////////////////////////
-         //////////////////////////////////////////////////////////////////////////
-         // Zackenband
-         //////////////////////////////////////////////////////////////////////////
-         GbTriFaceMesh3DPtr meshBand1 (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand"));
-         meshBand1->translate(-495, -700, -19.94);
-         if(myid == 0) GbSystem3D::writeGeoObject( meshBand1.get(), pathname+"/geo/Band1", WbWriterVtkXmlASCII::getInstance() );
-
-         double blockLengthx1 = blocknx[0]*cdx; //geowerte
-         double blockLengthx2 = blockLengthx1;
-         double blockLengthx3 = blockLengthx1;
-
-         double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; 
-
-         double originX1 = plate->getX1Minimum()-plate->getLengthX1()/4.0;
-         double originX2 = plate->getX2Minimum();
-         double originX3 = plate->getX3Minimum()-299.5;
-
-         //bounding box
-         double g_minX1 = originX1;
-         double g_minX2 = originX2;
-         double g_minX3 = originX3;
-
-         double g_maxX1 = originX1 + geoLength[0];
-         double g_maxX2 = originX2 + geoLength[1];
-         double g_maxX3 = originX3 + geoLength[2];;
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         gridCube->setCenterCoordinates(gridCube->getX1Centroid(),meshBand1->getX2Centroid(),gridCube->getX3Centroid());
-         if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         originX2 = gridCube->getX2Minimum();
-         g_minX2 = originX2;
-         g_maxX2 = originX2 + geoLength[1];
-         //walls
-         GbCuboid3DPtr addWallZmin (new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_minX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax (new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_maxX3, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         //walls
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB        
-         D3Q27BoundaryConditionAdapterPtr slip(new D3Q27SlipBCAdapter(bbOption));
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slip,Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slip,Interactor3D::SOLID));
-
-         SetSolidOrTransBlockVisitor v1(addWallZminInt, SetSolidOrTransBlockVisitor::TRANS);
-         grid->accept(v1);
-         addWallZminInt->initInteractor();
-         SetSolidOrTransBlockVisitor v2(addWallZmaxInt, SetSolidOrTransBlockVisitor::TRANS);
-         grid->accept(v2);        
-         addWallZmaxInt->initInteractor();
-
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), 
-            unitConverter, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-         geoSch.reset();
-         //////////////////////////////////////////////////////////////////////////
-
-         if(myid == 0) UBLOG(logINFO,"Restart - end"); 
-      }
-      UbSchedulerPtr visSch(new UbScheduler());
-      //visSch->addSchedule(1,0,3);
-      //visSch->addSchedule(100,100,1000);
-      //visSch->addSchedule(1000,1000,5000);
-      //visSch->addSchedule(5000,5000,100000);
-      //visSch->addSchedule(100000,100000,10000000);
-
-      visSch->addSchedule(1000,1000,10000000);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter);
-
-      double startStep = 88000;
-
-      UbSchedulerPtr resSchRMS(new UbScheduler());
-      resSchRMS->addSchedule(1000000, startStep, 10000000);
-      UbSchedulerPtr resSchMeans(new UbScheduler());
-      resSchMeans->addSchedule(1000000, startStep, 10000000);
-      UbSchedulerPtr stepAvSch(new UbScheduler());
-      int averageInterval=100;
-      stepAvSch->addSchedule(averageInterval,0,10000000);
-      AverageValuesPostprocessor Avpp(grid, pathname, WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/, 
-         stepAvSch/*wann wird gemittelt*/, resSchMeans,resSchRMS/*wann wird resettet*/,restart);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30));
-      nupsSch->addSchedule(500,500,1e6);
-      NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm);
-
-      UbSchedulerPtr emSch(new UbScheduler(10));
-      EmergencyExitPostprocessor empr(grid, emSch, pathname, RestartPostprocessorPtr(&rp), comm);
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      string lastStep = string(cstr2);
-      double endTime = UbSystem::stringTo<double>(lastStep);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argc == 1)
-   {
-      cout<<"Command line argument isn't specified!"<<endl;
-      cout<<"plate2 <machine name>"<<endl;
-      return 1;
-   }
-   run(argv[1], argv[2]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/pmTortu/CMakeLists.txt b/apps/cpu/pmTortu/CMakeLists.txt
deleted file mode 100644
index 6f53609f0734e369f9954b581ec211aef8e2957d..0000000000000000000000000000000000000000
--- a/apps/cpu/pmTortu/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(plate)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(pmTortu BINARY)
diff --git a/apps/cpu/pmTortu/pmTortu.cpp b/apps/cpu/pmTortu/pmTortu.cpp
deleted file mode 100644
index 491e2b003ce9e03b128b6d24ea4a6884a9d6dcf6..0000000000000000000000000000000000000000
--- a/apps/cpu/pmTortu/pmTortu.cpp
+++ /dev/null
@@ -1,511 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <vfluids.h>
-
-using namespace std;
-
-//! \brief  Computes Flow thorugh a porous medium and writespathlines
-//! \details Aim: determine tortuosity. pathlines are later integrated using python-script streamlinesMean.py (needs scipy,numpy)
-//! \details If PM-data is large run on single visulalization node.
-//! \details Created on: 01.07.2013
-//! \author  Sonja Uphoff
-
-void run(const char *cstr)
-{
-   try
-   {
-     string machine = QUOTEME(CAB_MACHINE);
-      UBLOG(logINFO,"Testcase PMTortuosity");
-      string pathname;
-      string stlPath;
-      int numOfThreads =1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      UbLog::reportingLevel() = logDEBUG5; //logINFO;
-
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-
-      if(machine == "PIPPINNEU")
-      {
-
-         pathname = "f:/temp/PMtortu";
-         stlPath = "f:/GeometrienVliese";
-         numOfThreads = 3;
-         logfile = false;
-         availMem = 3.0e9;
-      }
-      else if(machine == "M01" || machine == "M02")
-      {
-         pathname = "/work/sonjaOutputs/PMTortu2metall450";
-         stlPath = "/work/sonjaOutputs";
-         numOfThreads = 4;
-         availMem = 12.0e9;
-         logfile = true;
-
-         //if(myid ==0)
-         //{
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-         //}
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-
-
-      //if(myid ==0 && logfile)
-      //{
-         UbLog::output_policy::setStream(logFilename.str());
-      //}
-
-      int baseLevel, refineLevel,nx[3],blocknx[3];
-      double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init;
-
-//////////////////////////////////////////////////////////////////////////
-      //physik
-//////////////////////////////////////////////////////////////////////////
-      Re            = 1;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum  testen ob was passiert
-      velocity      = 0.01;
-      vx1Init       = 0.01;
-      rhoInit       = 1.0;
-      SimulationParametersPtr param = SimulationParameters::getInstanz();
-param->setCollisionModelType(SimulationParameters::COMPRESSIBLE);
-
-      ///////////////Knotenabmessungen:
-
-    nx[0]=28;
-    nx[1]=27;
-       nx[2]=27;
-    blocknx[0]=10;
-    blocknx[1]=10;
-    blocknx[2]=10;
-
-   baseLevel   = 0;
-   refineLevel = 0;
-
-      bool periodicx1 = false;
-      bool periodicx2 = false;
-      bool periodicx3 = false;
-
-
-
-   double minX1 = 0.0;
-   double maxX1 = 280;
-   double minX2 = 0.0;
-   double maxX2 = 270;
-   double minX3 = 0.0;
-   double maxX3 = 270;
-   double centerX1 = 0.5*(maxX1-minX1);
-   double centerX2 = 0.5*(maxX2-minX2);
-   //double scaleAsphalt = 0.0000625; //10/1600
-   double scalepixeltomm=0.5;
-   double scaleAsphalt = 1.0;
-   minX1 = minX1*scaleAsphalt;
-   minX2 = minX2*scaleAsphalt;
-   minX3 = minX3*scaleAsphalt;
-   maxX1 = maxX1*scaleAsphalt;
-   maxX2 = maxX2*scaleAsphalt;
-   maxX3 = maxX3*scaleAsphalt;
-
-   //vorgabe geom. dx im feinsten = 1 -> abstand der voxel = 1
-   double coarseNodeDx = (maxX2 - minX2) / (double)( blocknx[1]*nx[1] );
-   double fineNodeDx   = coarseNodeDx / (double)(1<<refineLevel);
-
-   double blockLengthx1 = blocknx[0]*coarseNodeDx;
-   double blockLengthx2 = blocknx[1]*coarseNodeDx;
-   double blockLengthx3 = blocknx[2]*coarseNodeDx;
-
-   double originX1 = minX1;
-   double originX2 = minX2;
-   double originX3 = minX3;
-
-   int nx1 = nx[0];
-   int nx2 = nx[1];
-   int nx3 = nx[2];
-   int blocknx1      = blocknx[0];
-   int blocknx2      = blocknx[1];
-   int blocknx3      = blocknx[2];
-
-   double gridOrigin[3] = { originX1, originX2, originX3 };
-
-   //geom. GROBE Blocklaenge
-   double coarseBlockLength[3];
-   coarseBlockLength[0] = blockLengthx1;
-   coarseBlockLength[1] = blockLengthx2;
-   coarseBlockLength[2] = blockLengthx3;
-   double geoLength[]   = {  nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3};
-
-//////////////////////////////////////////////////////////////////////////
-   // PM File
-//////////////////////////////////////////////////////////////////////////
-   string pmFilename;
-   pmFilename = stlPath+"/metallrgbx271y271z270.vti";//
-   int pmNX1=270;
-   int pmNX2=271;
-   int pmNX3=270;
-   float threshold = 120.0;
-
-         GbVoxelMatrix3DPtr pmMesh(GbVoxelMatrix3DCreator::getInstance()->createFromVtiASCIIFloatFile(pmFilename,pmNX1,pmNX2,pmNX3,threshold));
-
-pmMesh->translate((maxX1-minX1)*0.05,-(maxX2-minX2)*0.01,-(maxX3-minX3)*0.01);
-   pmMesh->setTransferViaFilename(true, pmFilename);
-
-//##########################################################################
-      //## physical parameters
-//##########################################################################
-
-      double rhoLB         = 1.0;
-      double rhoReal       = 1.0;
-      double nueReal  = 0.16;//0.015;
-
-      double hReal         = maxX1;
-      double uReal         = Re*nueReal/hReal;
-
-      //##Machzahl:
-      //#Ma     = uReal/csReal
-
-      double csReal  = 1.0/sqrt(3.0);
-      double cs_LB=1.0/sqrt(3.0);
-      double Ma      = uReal/csReal;//0.0553;//Ma-Real!
-      double hLB     = hReal;
-
-      //LBMUnitConverter unitConverter(hReal, csReal, rhoReal, hLB);
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, blocknx[0]*nx[0] ));
-
-      double uLB           = uReal   * unitConverter->getFactorVelocityWToLb();
-      double nueLB         = nueReal * unitConverter->getFactorViscosityWToLb();
-
-      double realDeltaT     = (nueLB * hReal *hReal) / (nueReal * blocknx[0]*nx[0] *blocknx[0]*nx[0]);
-
-
-
-      Grid3DPtr grid(new Grid3D());
-      UbSchedulerPtr rSch(new UbScheduler(5000,5000,1000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY);
-
-//////////////////////////////////////////////////////////////////////////
-
-     std::string opt;
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      //bounding box
-      double g_minX1 = originX1;
-      double g_minX2 = originX2;
-      double g_minX3 = originX3;
-
-      double g_maxX1 = originX1 + geoLength[0];
-      double g_maxX2 = originX2 + geoLength[1];
-      double g_maxX3 = originX3 + geoLength[2];
-
-      //set grid
-      grid->setDeltaX(coarseNodeDx);
-      grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-      grid->setPeriodicX1(periodicx1);
-      grid->setPeriodicX2(periodicx2);
-      grid->setPeriodicX3(periodicx3);
-
-
-      GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-      GenBlocksGridVisitor genBlocks;
-      genBlocks.addGeoObject(gridCube);
-      grid->accept(genBlocks);
-
-
-//////////////////////////////////////////////////////////////////////////
-      if(myid == 0)
-      {
-         UBLOG(logINFO, "*****************************************");
-         UBLOG(logINFO, "* Parameters *");
-         UBLOG(logINFO, "* Re            ="<<Re);
-         UBLOG(logINFO, "* Ma            ="<<Ma);
-         UBLOG(logINFO, "* uReal         ="<<uReal);
-         UBLOG(logINFO, "* nueReal       ="<<nueReal);
-         UBLOG(logINFO, "* nue           ="<<nueLB);
-         UBLOG(logINFO, "* velocity      ="<<uLB);
-         UBLOG(logINFO, "* LX1 (world/LB)="<<hReal<<"/"<<hReal/coarseNodeDx);
-      //   UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx);
-      //   UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx);
-         UBLOG(logINFO, "* cdx           ="<<coarseNodeDx);
-         UBLOG(logINFO, "* fdx           ="<<fineNodeDx);
-         UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx);
-         UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx );
-         UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]);
-         UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-         UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-         UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-         UBLOG(logINFO, "*****************************************");
-         UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString());
-         UBLOG(logINFO, "*****************************************");
-      }
-
-
-      RatioBlockVisitor ratioVisitor(refineLevel);
-      grid->accept(ratioVisitor);
-      RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-      grid->accept(ratioSmoothVisitor);
-      OverlapBlockVisitor overlapVisitor(refineLevel);
-      grid->accept(overlapVisitor);
-      std::vector<int> dirs;
-      D3Q27System::getLBMDirections(dirs);
-      SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-      grid->accept(interDirsVisitor);
-
-      if(myid == 0) UBLOG(logINFO,"Refinement - end");
-
-      MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-      grid->accept( metisVisitor );
-
-      if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-      BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-      if(myid == 0) ppblocks->update(0);
-      if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-      if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-      SolidBlocksHelper sd(grid, comm);
-
-
-      sd.deleteSolidBlocks();
-      if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");
-
-      if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-      grid->accept( metisVisitor );
-      if(myid == 0) ppblocks->update(1);
-      ppblocks.reset();
-      if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-      unsigned long nob = grid->getNumberOfBlocks();
-      unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-      unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-
-      double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-      double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"Number of blocks = " << nob);
-         UBLOG(logINFO,"Number of nodes  = " << nod);
-         UBLOG(logINFO,"Necessary memory  = " << needMemAll << " bytes");
-         UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-         UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-      }
-
-      LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx[0], blocknx[1], blocknx[2]));
-
-  //    LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx[0], blocknx[1], blocknx[2],1));
-      BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-      kernel->setBCProcessor(bcProc);
-
-
-      SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-
-      grid->accept(kernelVisitor);
-
-
-
-//////////////////////////////////////////////////////////////////////////
-    double geoOverlap = 5*coarseNodeDx;
-
-
-//////////////////////////////////////////////////////////////////////////
-   // Interactoren
-//////////////////////////////////////////////////////////////////////////
-//##########################################################################
-   int noSlipSecOpt = 0; // #0=2nd order BB 1=simple BB
-//##########################################################################
-   int noSlipSecOptAsphalt = 1; // #0=2nd order BB 1=simple BB
-//##########################################################################
-     int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB
-     D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-   D3Q27InteractorPtr PM1Interactor = D3Q27InteractorPtr ( new D3Q27Interactor(pmMesh, grid, bcObst,Interactor3D::SOLID)); //wo ist bc obst definiert?
- grid->addAndInitInteractor( PM1Interactor);
-   //UBLOG(logINFO,"SpD3Q19Asphalt - send porous media to D3Q19InteractorService");
-   //UBLOG(logINFO,"SpD3Q19Asphalt - send porous media = "<<pmInteractor->getName()<<" with "<<typeid(*pmInteractor->getGbObject3D()).name()<<" node("<<pmNX1<<"/"<<pmNX2<<"/"<<pmNX3<<")");
-   UbTimer timer;
-   timer.start();
-
-
-   UBLOG(logINFO,"SpD3Q19Asphalt - send porous media to D3Q19InteractorService done in "<<timer.stop());
-
-
-      if (refineLevel > 0)
-      {
-         D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-         grid->accept(undefNodesVisitor);
-      }
-
-
-      //set connectors
-      D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-      D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-      grid->accept( setConnsVisitor );
-
-      //domain decomposition
-      PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-      grid->accept(pqPartVisitor);
-
-      //initialization of decompositions
-      D3Q27ETInitDistributionsBlockVisitor initVisitor(1.0);
-      initVisitor.setVx1(0.0);
-      grid->accept(initVisitor);
-
-
- //////////////////////////////////////////////////////////////////////////
-   // BCs
-//////////////////////////////////////////////////////////////////////////
-      //Reparatur an den Seiten:
-       UBLOG(logINFO,"inflow")
-           double x3minMesh=0.000;  double x3maxMesh=originX3 + blockLengthx3*nx3 + geoOverlap;
-   GbCuboid3DPtr leftCuboid(new GbCuboid3D( originX1 + blockLengthx1*nx1 - coarseNodeDx,
-                                           originX2 - geoOverlap,
-                                           x3minMesh,
-                                           originX1 + blockLengthx1*nx1 + geoOverlap,
-                                           originX2 + blockLengthx2*nx2 + geoOverlap,
-                                           x3maxMesh));
-   GbCuboid3DPtr rightCuboid(new GbCuboid3D( originX1 - geoOverlap,
-                                           originX2 - geoOverlap,
-                                           x3minMesh,
-                                           originX1 + geoOverlap,
-                                           originX2 + blockLengthx2*nx2 + geoOverlap,
-                                           x3maxMesh));
-   GbCuboid3DPtr northCuboid(new GbCuboid3D( originX1- geoOverlap,
-                                           originX2 + blockLengthx2*nx2 - 0.5*coarseNodeDx,
-                                           x3minMesh,
-                                           originX1 + blockLengthx1*nx1 + geoOverlap,
-                                           originX2 + blockLengthx2*nx2 + geoOverlap,
-                                           x3maxMesh));
-   GbCuboid3DPtr southCuboid(new GbCuboid3D( originX1 - geoOverlap,
-                                           originX2 - geoOverlap,
-                                           x3minMesh,
-                                           originX1 + blockLengthx1*nx1 + geoOverlap,
-                                           originX2 + geoOverlap,
-                                           x3maxMesh));
-
-//////////////////////////////////////////////////////////////////////////
-   // inflow
-//////////////////////////////////////////////////////////////////////////
-   UBLOG(logINFO,"inflow")
-
-   GbCuboid3DPtr densCuboid(new GbCuboid3D(
-                                           originX1 - geoOverlap,
-                                           originX2 - geoOverlap,
-                                           originX3 + blockLengthx3*nx3 - coarseNodeDx,
-                                           originX1 + blockLengthx1*nx1 + geoOverlap,
-                                           originX2 + blockLengthx2*nx2 + geoOverlap,
-                                           originX3 + blockLengthx3*nx3 + geoOverlap));
-
-
-//////////////////////////////////////////////////////////////////////////
-   // bottom/outflow
-//////////////////////////////////////////////////////////////////////////
-      double dRho=0.05;
-      GbCuboid3DPtr densCuboid2(new GbCuboid3D(
-                                                 originX1 - geoOverlap,
-                                                 originX2 - geoOverlap,
-                                                 originX3 - geoOverlap,
-                                                 originX1 + blockLengthx1*nx1 + geoOverlap,
-                                                 originX2 + blockLengthx2*nx2 + geoOverlap,
-minX3+0.5*fineNodeDx   ));
-
-      if(myid == 0) GbSystem3D::writeGeoObject(densCuboid2.get(), pathname+"/geo/densCuboid2", WbWriterVtkXmlASCII::getInstance());
-      D3Q27BoundaryConditionAdapterPtr denBCAdapter2(new D3Q27DensityBCAdapter(rhoInit-dRho));
-      D3Q27InteractorPtr densInteractor2( new D3Q27Interactor(leftCuboid,grid,denBCAdapter2,Interactor3D::SOLID) );
-      grid->addAndInitInteractor( densInteractor2 );
-
-            if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance());
-      D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoInit+dRho));
-      D3Q27InteractorPtr densInteractor( new D3Q27Interactor(rightCuboid,grid,denBCAdapter,Interactor3D::SOLID) );
-      grid->addAndInitInteractor( densInteractor );
-
-   D3Q27InteractorPtr leftInteractor = D3Q27InteractorPtr ( new D3Q27Interactor(densCuboid2, grid, bcObst,Interactor3D::SOLID));
-   grid->addAndInitInteractor( leftInteractor);
-   D3Q27InteractorPtr rightInteractor = D3Q27InteractorPtr ( new D3Q27Interactor(densCuboid, grid, bcObst,Interactor3D::SOLID));
-  grid->addAndInitInteractor(rightInteractor);
-   D3Q27InteractorPtr northInteractor = D3Q27InteractorPtr ( new D3Q27Interactor(northCuboid, grid, bcObst,Interactor3D::SOLID));
-   grid->addAndInitInteractor(northInteractor);
-   D3Q27InteractorPtr southInteractor = D3Q27InteractorPtr ( new D3Q27Interactor(southCuboid, grid, bcObst,Interactor3D::SOLID));
-  grid->addAndInitInteractor(southInteractor);
-
-  if(myid == 0) GbSystem3D::writeGeoObject(northCuboid.get(), pathname+"/geo/north", WbWriterVtkXmlASCII::getInstance());
-if(myid == 0) GbSystem3D::writeGeoObject(southCuboid.get(), pathname+"/geo/south", WbWriterVtkXmlASCII::getInstance());
-if(myid == 0) GbSystem3D::writeGeoObject(rightCuboid.get(), pathname+"/geo/right", WbWriterVtkXmlASCII::getInstance());
-if(myid == 0) GbSystem3D::writeGeoObject(leftCuboid.get(), pathname+"/geo/left", WbWriterVtkXmlASCII::getInstance());
-
-
-      UbSchedulerPtr geoSch(new UbScheduler(1));
-      D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-           new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(),
-unitConverter, comm, true));
-
-              double raiseVelSteps = 0;
-
-      grid->doPostProcess(0);
-      ppgeo.reset();
-      geoSch.reset();
-
-     UbSchedulerPtr plSch(new UbScheduler(10, 2));
-      vector<D3Q27PathLinePostprocessorPtr> pathlinepostPParray;
-
- for (int ppz=0; ppz<27; ppz++)
-      {
-      for (int ppy=0; ppy<27; ppy++)
-      {
-          char numstr[21];
-          sprintf(numstr, "%d", ppy+20*ppz);
-          std::string pathPL = pathname+"/pathline" + numstr+".dat";
-         D3Q27PathLinePostprocessorPtr plptr1( new D3Q27PathLinePostprocessor(grid, pathPL, WbWriterVtkXmlASCII::getInstance(), unitConverter, plSch, comm, 8.0, 6.0+8.0*(double)ppy,5.0+8.0*(double)ppz, nueLB, iProcessor));
-              pathlinepostPParray.push_back(plptr1);//new D3Q27PathLinePostprocessor(grid, pathname + "/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm, 0.01+(double)ppx*0.0001, 0.00001,0.00001, nueLB, iProcessor));
-
-          }
-      }
-
- UbSchedulerPtr visSch(new UbScheduler());
-      visSch->addSchedule(1,1,10);
-      visSch->addSchedule(10,10,100);
-      visSch->addSchedule(100,100,1000);
-      visSch->addSchedule(1000,1000,100000);
-      visSch->addSchedule(100000,100000,1000000);
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-//////////////////////////////////////////////////////////////////////////
-
-      cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl;
-      cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl;
-
-      double endTime = 40001;
-      UbSchedulerPtr ghostLSch(new UbScheduler());
-      ghostLSch->addSchedule(1,1,endTime);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, ghostLSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-} 
diff --git a/apps/cpu/pmTortu/streamlinesMean.py b/apps/cpu/pmTortu/streamlinesMean.py
deleted file mode 100644
index 6fa77ce21f76214151848c150bae96563a3c344d..0000000000000000000000000000000000000000
--- a/apps/cpu/pmTortu/streamlinesMean.py
+++ /dev/null
@@ -1,162 +0,0 @@
-import os
-import scipy
-import numpy
-import math
-
-#li=[[5,0.005]]
-
-n=409;
-i=0;
-j=0;
-k=0;
-length=[0];
-lengthx=[0];
-lengthT=[0,0,0,0,0];
-lengthxT=[0,0,0,0,0];
-ItortuList=[0];
-outKOx=78.0;#0.105;
-try:
- for i in range(1,n):
-  length.append(0);
-  lengthx.append(0);
-  #if (i<10):
-  # dateiIn="C:/Users/Sonja/Documents/pathlines3/pathline30"+str(i)+".dat.ascii.vtu"
-  #else:
-  dateiIn="C:/Users/Sonja/Documents/blech2c/pathline"+str(i)+".dat.ascii.vtu"
-  print dateiIn
-  datei = open(dateiIn,"r")
-  j=0; k=0;
-  for line in datei:
-     j=j+1
-     #print line
- ##   if ((i>6568) and (i<17261)  ):
-     #zuordnung = line.split("  ")
-     #if (j==1): print line
-     if (k==1): ##marker der anfang der koordinaten bezeichnet
-         zuordnung = line.split("  ")
-         #print zuordnung
-         #pointsxyz=zuordnung[7].split(" ")
-         #print pointsxyz
-         t=0;
-         for entry in zuordnung:
-             pointsxyz=entry.split(" ")
-             #print pointsxyz
-             t=t+1;
-             #if (i==1 | i==2):
-             lengthT.append(0);
-             lengthxT.append(0);
-             if (t>7):
-              if (pointsxyz[1]!="\n"):
-               if(float(pointsxyz[1])<outKOx): ##ende messbereich
-                 #print pointsxyz
-                 if (t==8):
-                     xalt=float(pointsxyz[1]);
-                     yalt=float(pointsxyz[2]);
-                     zalt=float(pointsxyz[3]);
-                 xneu=float(pointsxyz[1]);
-                 yneu=float(pointsxyz[2]);
-                 zneu=float(pointsxyz[3]);
-                 if (xalt>20.0):              ##beginn messbereicht
-                  length[i]=length[i]+math.sqrt((xneu-xalt)*(xneu-xalt)+(yneu-yalt)*(yneu-yalt)+(zneu-zalt)*(zneu-zalt));
-                  lengthx[i]=lengthx[i]+(xneu-xalt);
-                  lengthT[t]=lengthT[t]+length[i];
-                  lengthxT[t]=lengthxT[t]+lengthx[i];
-                  #print lengthT[t]
-                  #print xneu
-                  #print lengthx[i]
-                 xalt=xneu; yalt=yneu; zalt=zneu;
-                 
- 
-         k=2;
-     #if (str(line)=="""            <DataArray type="Float64" NumberOfComponents="3" format="ascii">"""):
- 
-     if(j==5):
-       print line
-       k=1;
-     #print zuordnung
-     #print zuordnung[0]
-     #print zuordnung[1]
-     #test0=float(zuordnung[0])
-     #test1=float(zuordnung[1])
-     #li.append([test0,test1])
- ##print float(li[10])/20
- #print li
-  datei.close();
- i=0;
- j=0;
- length.pop(0);
- lengthx.pop(0);
- #print length
- #print lengthx
- tortuGes=0;
- LGes=0.0;
- LxGes=0.0;
- fFile = open("f:/temp/pathlinesb2cLength.dat", "w")
- for entry in length:
-     #print entry;
-     #print lengthx[i];
-     LGes=LGes+length[i];
-     LxGes=LxGes+lengthx[i];
-     ItortuList.append(entry/max(lengthx[i],0.00000001));
-     if (length[i]>2.0):
-      Itortu=entry/lengthx[i]
-      print Itortu
-      j=j+1;
-      tortuGes=tortuGes+Itortu;
-     i=i+1
-     fFile.write(str(i))
-     fFile.write(" ")
-     fFile.write(str(entry))
-     fFile.write(" ")
-     #fFile.write(str(lengthx[i]))
-     #fFile.write(" ")
-     #fFile.write(str(entry/max(lengthx[i],0.00000001)))   
-     fFile.write("\n")
- tortuGes=tortuGes/j;
- print "berücksichtigte Stromlinien:" 
- print j
- fFile.close();
- ItortuList.pop(0);
- print "TortuGes:"
- print tortuGes;
- print "Lges:"
- print LGes;
- print "Lxges:"
- print LxGes;
- print "Lges/LxGes:"
- print LGes/LxGes;
- erg=[lengthx,length,ItortuList];
- #print erg
- erg=numpy.asarray(erg).T.tolist() #does a list-transpose
- #print erg
- erg=sorted(erg);
- fFile = open("f:/temp/pathlinesb2cLengthSortt1000.dat", "w")
- i=0;
- #print erg[1][1]
- #print erg[0][1]
- for entry in erg:
-     i=i+1;
-     #print i
-     fFile.write(str(entry[0]))
-     fFile.write(" ")
-     fFile.write(str(entry[1]))
-     fFile.write(" ")
-     fFile.write(" ")
-     fFile.write(str(entry[2]))
-     fFile.write("\n")
- fFile.close();
- fFile = open("f:/temp/pathlinesbcbwithTime.dat", "w")
- i=0;
- for entry in lengthxT:
-     i=i+1;
-     #print i
-     fFile.write(str(entry))
-     fFile.write(" ")
-     fFile.write(str(lengthT[i]))
-     fFile.write(" ")
-     fFile.write("\n")
- fFile.close();
-except IOError:
- datei.close()
- print "caught error couldnt process datafile"
- print i
diff --git a/apps/cpu/poiseuille_example/poiseuille.cpp b/apps/cpu/poiseuille_example/poiseuille.cpp
index d2e2c178e247f69d1629374661da9746ad8542bc..459d937f201788451dba4b32db8cfb2b4268eb58 100644
--- a/apps/cpu/poiseuille_example/poiseuille.cpp
+++ b/apps/cpu/poiseuille_example/poiseuille.cpp
@@ -26,7 +26,7 @@ int main()
     const auto writer = WbWriterVtkXmlBinary::getInstance();
 
     const auto communicator = vf::parallel::MPICommunicator::getInstance();
-    const auto kernel = std::make_shared<CompressibleCumulant4thOrderViscosityLBMKernel>();
+    const auto kernel = std::make_shared<K17CompressibleNavierStokes>();
     kernel->setBCProcessor(std::make_shared<BCProcessor>());
     kernel->setForcingX1(1e-6 * lbmUnitConverter->getFactorForceWToLb());
 
diff --git a/apps/cpu/porplate2/CMakeLists.txt b/apps/cpu/porplate2/CMakeLists.txt
deleted file mode 100644
index a1a8d917d96667de38c2e014313341303cee4810..0000000000000000000000000000000000000000
--- a/apps/cpu/porplate2/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(porplate2)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(porplate2 BINARY)
diff --git a/apps/cpu/porplate2/porplate.cpp b/apps/cpu/porplate2/porplate.cpp
deleted file mode 100644
index fe93f8fa59d7e9befa63176b253f172ae09e1e87..0000000000000000000000000000000000000000
--- a/apps/cpu/porplate2/porplate.cpp
+++ /dev/null
@@ -1,1060 +0,0 @@
-
-
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <vfluids.h>
-
-using namespace std;
-
-//////////////////////////////////////////////////////////////////////////
-void inlay(GbVoxelMatrix3DPtr pmMesh, string& pathname, int myid, int i, Grid3DPtr grid)
-{
-   int bbOptionPM = 2; //quadratic bounce back with for thin walls
-   D3Q27BoundaryConditionAdapterPtr noSlipPM(new D3Q27NoSlipBCAdapter(bbOptionPM));
-   D3Q27InteractorPtr inlayInt = D3Q27InteractorPtr(new D3Q27Interactor(pmMesh, grid, noSlipPM, Interactor3D::SOLID));
-
-   GbCuboid3DPtr inlayBox(new GbCuboid3D(pmMesh->getX1Minimum(), pmMesh->getX2Minimum(), pmMesh->getX3Minimum(), pmMesh->getX1Maximum(), pmMesh->getX2Maximum(), pmMesh->getX3Maximum()));
-   if (myid == 0) GbSystem3D::writeGeoObject(inlayBox.get(), pathname + "/geo/inlay" + UbSystem::toString(i), WbWriterVtkXmlASCII::getInstance());
-   D3Q27InteractorPtr inlayBoxInt = D3Q27InteractorPtr(new D3Q27Interactor(inlayBox, grid, noSlipPM, Interactor3D::SOLID));
-   SetSolidOrTransBlockVisitor v1(inlayBoxInt, SetSolidOrTransBlockVisitor::SOLID);
-   grid->accept(v1);
-   SetSolidOrTransBlockVisitor v2(inlayBoxInt, SetSolidOrTransBlockVisitor::TRANS);
-   grid->accept(v2);
-
-   vector<Block3DPtr> inlayBlocks;
-   vector<Block3DPtr>& sb = inlayBoxInt->getSolidBlockSet();
-   if (myid == 0) UBLOG(logINFO, "sb.size = " << sb.size());
-   inlayBlocks.insert(inlayBlocks.end(), sb.begin(), sb.end());
-   vector<Block3DPtr>& tb = inlayBoxInt->getTransBlockSet();
-   if (myid == 0) UBLOG(logINFO, "tb.size = " << tb.size());
-   inlayBlocks.insert(inlayBlocks.end(), tb.begin(), tb.end());
-
-   if (myid == 0) UBLOG(logINFO, "inlayBlocks.size = " << inlayBlocks.size());
-
-   BOOST_FOREACH(Block3DPtr block, inlayBlocks)
-   {
-      block->setActive(true);
-      inlayInt->setDifferencesToGbObject3D(block);
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void deleteExistBlocks(Grid3DPtr ngrid, Grid3DPtr ogrid)
-{
-   int minInitLevel = ogrid->getCoarsestInitializedLevel();
-   int maxInitLevel = ogrid->getFinestInitializedLevel();
-
-   std::vector<std::vector<Block3DPtr> > blockVector;
-   blockVector.resize(maxInitLevel + 1);
-
-   std::vector<int> ids;
-
-   for (int level = minInitLevel; level <= maxInitLevel; level++)
-   {
-      ogrid->getBlocks(level, blockVector[level]);
-
-      BOOST_FOREACH(Block3DPtr block, blockVector[level])
-      {
-         int x1 = block->getX1();
-         int x2 = block->getX2();
-         int x3 = block->getX3();
-         Block3DPtr nblock = ngrid->getBlock(x1, x2, x3, level);
-         if (nblock)
-         {
-            ngrid->deleteBlock(x1, x2, x3, level);
-         }
-         else
-         {
-            ids.push_back(block->getGlobalID());
-         }
-      }
-   }
-
-   ogrid->deleteBlocks(ids);
-}
-//////////////////////////////////////////////////////////////////////////
-void reindexBlocks(Grid3DPtr ngrid)
-{
-   int minInitLevel = ngrid->getCoarsestInitializedLevel();
-   int maxInitLevel = ngrid->getFinestInitializedLevel();
-
-   std::vector<std::vector<Block3DPtr> > blockVector;
-   blockVector.resize(maxInitLevel + 1);
-
-   int maxID = Block3D::getMaxGlobalID();
-
-   for (int level = minInitLevel; level <= maxInitLevel; level++)
-   {
-      ngrid->getBlocks(level, blockVector[level]);
-
-      BOOST_FOREACH(Block3DPtr block, blockVector[level])
-      {
-         block->setGlobalID(++maxID);
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void setInterpolationFlag(Grid3DPtr grid)
-{
-   int minInitLevel = grid->getCoarsestInitializedLevel();
-   int maxInitLevel = grid->getFinestInitializedLevel();
-
-   std::vector<std::vector<Block3DPtr> > blockVector;
-   blockVector.resize(maxInitLevel + 1);
-
-   int maxID = Block3D::getMaxGlobalID();
-
-   for (int level = minInitLevel; level <= maxInitLevel; level++)
-   {
-      grid->getBlocks(level, blockVector[level]);
-
-      BOOST_FOREACH(Block3DPtr block, blockVector[level])
-      {
-         block->deleteInterpolationFlag();
-      }
-   }
-
-   std::vector<int> dirs;
-
-   for (int i = D3Q27System::E; i <= D3Q27System::TS; i++)
-   {
-      dirs.push_back(i);
-   }
-   SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-   grid->accept(interDirsVisitor);
-}
-//////////////////////////////////////////////////////////////////////////
-void addExistBlocks(Grid3DPtr ngrid, Grid3DPtr ogrid, Grid3DPtr hgrid)
-{
-   int minInitLevel = ngrid->getCoarsestInitializedLevel();
-   int maxInitLevel = ngrid->getFinestInitializedLevel();
-
-   std::vector<std::vector<Block3DPtr> > blockVector;
-   blockVector.resize(maxInitLevel + 1);
-
-   std::vector<Block3DPtr> db;
-
-   //int gridRank = ogrid->getRank();
-
-   for (int level = minInitLevel; level <= maxInitLevel; level++)
-   {
-      ngrid->getBlocks(level, blockVector[level]);
-
-      BOOST_FOREACH(Block3DPtr block, blockVector[level])
-      {
-         int x1 = block->getX1();
-         int x2 = block->getX2();
-         int x3 = block->getX3();
-         Block3DPtr oblock = ogrid->getBlock(x1, x2, x3, level);
-         if (oblock)
-         {
-            hgrid->addBlock(oblock);
-         }
-
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void moveBlocks(Grid3DPtr ngrid, Grid3DPtr ogrid)
-{
-   int minInitLevel = ngrid->getCoarsestInitializedLevel();
-   int maxInitLevel = ngrid->getFinestInitializedLevel();
-
-   std::vector<std::vector<Block3DPtr> > blockVector;
-   blockVector.resize(maxInitLevel + 1);
-
-   for (int level = minInitLevel; level <= maxInitLevel; level++)
-   {
-      ngrid->getBlocks(level, blockVector[level]);
-
-      BOOST_FOREACH(Block3DPtr block, blockVector[level])
-      {
-         ogrid->addBlock(block);
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void removeUndefNodes(Grid3DPtr grid)
-{
-   int minInitLevel = grid->getCoarsestInitializedLevel();
-   int maxInitLevel = grid->getFinestInitializedLevel();
-
-   std::vector<std::vector<Block3DPtr> > blockVector;
-   blockVector.resize(maxInitLevel + 1);
-
-   int gridRank = grid->getRank();
-
-   for (int level = minInitLevel; level <= maxInitLevel; level++)
-   {
-      grid->getBlocks(level, gridRank, true, blockVector[level]);
-
-      BOOST_FOREACH(Block3DPtr block, blockVector[level])
-      {
-         int gl = 0;
-
-         LBMKernel3DPtr kernel = block->getKernel();
-         BCArray3D<D3Q27BoundaryCondition>& bcMatrix = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-
-         int minX1 = gl;
-         int minX2 = gl;
-         int minX3 = gl;
-
-         int maxX1 = static_cast<int>(bcMatrix.getNX1()) - 1 - gl;
-         int maxX2 = static_cast<int>(bcMatrix.getNX2()) - 1 - gl;
-         int maxX3 = static_cast<int>(bcMatrix.getNX3()) - 1 - gl;
-
-         minX1 = gl;
-         minX2 = gl;
-         minX3 = gl;
-
-         maxX1 = static_cast<int>(bcMatrix.getNX1()) - 1 - gl;
-         maxX2 = static_cast<int>(bcMatrix.getNX2()) - 1 - gl;
-         maxX3 = static_cast<int>(bcMatrix.getNX3()) - 1 - gl;
-
-         for (int ix3 = minX3; ix3 <= maxX3; ix3++)
-            for (int ix2 = minX2; ix2 <= maxX2; ix2++)
-               for (int ix1 = minX1; ix1 <= maxX3; ix1++)
-               {
-                  if (bcMatrix.isUndefined(ix1, ix2, ix3)) bcMatrix.setFluid(ix1, ix2, ix3);
-               }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void removeBCInformation(Grid3DPtr grid)
-{
-   int minInitLevel = grid->getCoarsestInitializedLevel();
-   int maxInitLevel = grid->getFinestInitializedLevel();
-
-   std::vector<std::vector<Block3DPtr> > blockVector;
-   blockVector.resize(maxInitLevel + 1);
-
-   int gridRank = grid->getRank();
-
-   for (int level = minInitLevel; level <= maxInitLevel; level++)
-   {
-      grid->getBlocks(level, gridRank, true, blockVector[level]);
-
-      BOOST_FOREACH(Block3DPtr block, blockVector[level])
-      {
-         int gl = 0;
-
-         LBMKernel3DPtr kernel = block->getKernel();
-         BCArray3D<D3Q27BoundaryCondition>& bcMatrix = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-
-         int minX1 = gl;
-         int minX2 = gl;
-         int minX3 = gl;
-
-         int maxX1 = static_cast<int>(bcMatrix.getNX1()) - 1 - gl;
-         int maxX2 = static_cast<int>(bcMatrix.getNX2()) - 1 - gl;
-         int maxX3 = static_cast<int>(bcMatrix.getNX3()) - 1 - gl;
-
-         for (int ix3 = minX3; ix3 <= maxX3; ix3++)
-            for (int ix2 = minX2; ix2 <= maxX2; ix2++)
-               for (int ix1 = minX1; ix1 <= maxX3; ix1++)
-               {
-                  bcMatrix.setFluid(ix1, ix2, ix3);
-                  //bcMatrix.setBC(ix1, ix2, ix3, D3Q27BoundaryConditionPtr());
-               }
-
-   //      if (!block->getKernel())
-   //      {
-   //         if (block->getRank() == grid->getRank())
-   //         {
-   //            BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor());
-   //            block->getKernel()->setBCProcessor(bcProc);
-   //         }
-   //      }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void setKernel(Grid3DPtr grid, LBMKernel3DPtr kernel, double nu)
-{
-   int minInitLevel = grid->getCoarsestInitializedLevel();
-   int maxInitLevel = grid->getFinestInitializedLevel();
-
-   std::vector<std::vector<Block3DPtr> > blockVector;
-   blockVector.resize(maxInitLevel + 1);
-
-   int gridRank = grid->getRank();
-
-   for (int level = minInitLevel; level <= maxInitLevel; level++)
-   {
-      grid->getBlocks(level, gridRank, true, blockVector[level]);
-
-      BOOST_FOREACH(Block3DPtr block, blockVector[level])
-      {
-         if (!block->getKernel())
-         {
-            if (block->getRank() == grid->getRank())
-            {
-               LBMReal collFactor = LBMSystem::calcCollisionFactor(nu, block->getLevel());
-               kernel->setCollisionFactor(collFactor);
-               kernel->setIndex(block->getX1(), block->getX2(), block->getX3());
-               kernel->setDeltaT(LBMSystem::getDeltaT(block->getLevel()));
-               kernel->setBlock(block);
-               LBMKernel3DPtr newKernel = kernel->clone();
-               block->setKernel(newKernel);
-            }
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void run(const char *cstr, bool firststart)
-{
-   try
-   {
-      string pathname;
-      string pathGeo;
-      string pathLog;
-      int numOfThreads = 1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      string machine = string(cstr);
-
-      if (machine == "my")
-      {
-         pathname = "d:/temp/porplate2";
-         pathGeo = "d:/Data/plate";
-         pathLog = pathname;
-         numOfThreads = 1;
-         logfile = false;
-         availMem = 15.0e9;
-      }
-      else if (machine == "Ludwig")
-      {
-         pathname = "/work/koskuche/SFB880/porplate2";
-         pathGeo = "/home/koskuche/data/plate";
-         pathLog = pathname;
-         numOfThreads = 8;
-         availMem = 12.0e9;///8*numOfThreads;
-         logfile = true;
-      }
-      else if (machine == "HLRS")
-      {
-         pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0";
-         pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate";
-         pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate";
-         numOfThreads = 16;
-         availMem = 2.0e9;
-         logfile = true;
-      }
-      else if (machine == "HLRN")
-      {
-         pathname = "/gfs1/work/niivfcpu/scratch/plateEx";
-         pathGeo = "/gfs1/work/niivfcpu/data/plate";
-         pathLog = pathname;
-         numOfThreads = 24;
-         availMem = 64.0e9 / 24.0*numOfThreads;
-         logfile = true;
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-#if defined(__unix__)
-      if (myid==0) 
-      {
-         const char* str = pathLog.c_str();
-         int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-      }
-#endif 
-
-      if (myid == 0 && logfile)
-      {
-         //UbLog::reportingLevel() = logDEBUG5;
-         logFilename << pathLog + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + "_" + UbSystem::toString(myid) + ".txt";
-         UbLog::output_policy::setStream(logFilename.str());
-      }
-
-      if (myid == 0) UBLOG(logINFO, "Testcase plate");
-
-      string PlatteFilename = pathGeo + "/Platte_bearbeitet2_10cmA.stl";
-
-      string ZckbndFilename = pathGeo + "/2zackenbaender0.stl";
-
-      int ppblockc = 0;
-
-      ///////////////Knotenabmessungen:
-      int nx[3], blocknx[3];
-      nx[0] = 90;//240;//120;//60;//86;//43;//65;//50;  //l�nge
-      nx[1] = 2;//2;//6;///1;//5;// //breite
-      nx[2] = 30;//64;//32;//18;//5;//15;//15; //h�he gebiet
-      blocknx[0] = 16;//10;//6;
-      blocknx[1] = 16;//10;//6;
-      blocknx[2] = 16;//10;//6;
-
-      int baseLevel = 0;
-      int refineLevel = 5;
-
-      double H = 600.0; // Kanalh�he [mm]
-      double cdx = H / (double)(nx[2] * blocknx[2]);
-      double fdx = cdx / double(1 << refineLevel);
-
-      //double h = 200.0; // gew�nschte Plattenh�he in Gitterpunkten
-      //double fdx = plate->getLengthX3()/h;
-      //double cdx = fdx*double(1<<refineLevel);
-
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      //////////////////////////////////////////////////////////////////////////
-      // physik
-      //////////////////////////////////////////////////////////////////////////
-
-      //////////////////////////////////////////////////////////////////////////
-      // Experiment Parametr
-      // Re = 1000000
-      // V = 16.05  # m / s
-      // p = 994.7  #hPa(manuell abgelesen von MUB)
-      // T = 21.78  #�C
-      // Luftfeuchte = 50.5   # %
-      //////////////////////////////////////////////////////////////////////////
-      // Simulation Parametr
-      //////////////////////////////////////////////////////////////////////////
-      double Re = 1e6; // 1133333.3333333335;
-      double rhoLB = 0.0;
-      double uLB = 0.1;
-      double lReal = 1000; //Plattenl�nge in mm
-      double nuLB = (uLB*(lReal / cdx)) / Re;
-
-      int sizeSP = 4;
-      mu::Parser spongeLayer;
-      spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0");
-      spongeLayer.DefineConst("sizeX", nx[0] * blocknx[0]);
-      spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]);
-
-      Grid3DPtr ogrid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(1000, 1000, 10000000));
-      rSch->addSchedule(100, 47000, 47100);
-      RestartPostprocessor rp(ogrid, rSch, comm, pathname, RestartPostprocessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-      bool restart;
-
-      if (firststart)
-      {
-
-         if (myid == 0) UBLOG(logINFO, "Neustart..");
-         restart = false;
-       
-         Grid3DPtr ngrid(new Grid3D(comm));
-         //////////////////////////////////////////////////////////////////////////
-         //Platte
-         GbTriFaceMesh3DPtr plate(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename, "Netz"));
-         if (myid == 0) GbSystem3D::writeGeoObject(plate.get(), pathname + "/geo/platte", WbWriterVtkXmlBinary::getInstance());
-         //////////////////////////////////////////////////////////////////////////
-         // Zackenband
-         //////////////////////////////////////////////////////////////////////////
-         GbTriFaceMesh3DPtr meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand"));
-         meshBand1->translate(5.0, -2.86, -14.717);
-         meshBand1->rotate(0.0, -0.5, 0.0);
-         if (myid == 0) GbSystem3D::writeGeoObject(meshBand1.get(), pathname + "/geo/Band1", WbWriterVtkXmlASCII::getInstance());
-         // Zackenband2
-         GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand2"));
-         meshBand2->translate(5.0, -7.86, -14.717);
-         meshBand2->rotate(0.0, -0.5, 0.0);
-         if (myid == 0) GbSystem3D::writeGeoObject(meshBand2.get(), pathname + "/geo/Band2", WbWriterVtkXmlASCII::getInstance());
-         // Zackenband3
-         GbTriFaceMesh3DPtr meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand3"));
-         meshBand3->translate(5.0, -2.86, -14.417); //+0.3
-         meshBand3->rotate(0.0, -0.5, 0.0);
-         if (myid == 0) GbSystem3D::writeGeoObject(meshBand3.get(), pathname + "/geo/Band3", WbWriterVtkXmlASCII::getInstance());
-         // Zackenband4
-         GbTriFaceMesh3DPtr meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand4"));
-         meshBand4->translate(5.0, -7.86, -14.417);
-         meshBand4->rotate(0.0, -0.5, 0.0);
-         if (myid == 0) GbSystem3D::writeGeoObject(meshBand4.get(), pathname + "/geo/Band4", WbWriterVtkXmlASCII::getInstance());
-         //////////////////////////////////////////////////////////////////////////
-
-         double blockLengthx1 = blocknx[0] * cdx; //geowerte
-         double blockLengthx2 = blockLengthx1;
-         double blockLengthx3 = blockLengthx1;
-
-         double geoLength[] = { nx[0] * blockLengthx1, nx[1] * blockLengthx2, nx[2] * blockLengthx3 };
-
-         double originX1 = plate->getX1Minimum() - plate->getLengthX1() / 4.0;
-         double originX2 = plate->getX2Minimum();
-         double originX3 = plate->getX3Minimum() - 299.5;
-
-
-         bool periodicx1 = false;
-         bool periodicx2 = true;
-         bool periodicx3 = false;
-
-         //bounding box
-         double g_minX1 = originX1;
-         double g_minX2 = originX2;
-         double g_minX3 = originX3;
-
-         double g_maxX1 = originX1 + geoLength[0];
-         double g_maxX2 = originX2 + geoLength[1];
-         double g_maxX3 = originX3 + geoLength[2];;
-
-
-         //set grid
-         ngrid->setDeltaX(cdx);
-         ngrid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         ngrid->setPeriodicX1(periodicx1);
-         ngrid->setPeriodicX2(periodicx2);
-         ngrid->setPeriodicX3(periodicx3);
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         gridCube->setCenterCoordinates(gridCube->getX1Centroid(), meshBand1->getX2Centroid(), gridCube->getX3Centroid());
-         if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         originX2 = gridCube->getX2Minimum();
-         g_minX2 = originX2;
-         g_maxX2 = originX2 + geoLength[1];
-
-         //Grid3DPtr hgrid(ngrid);
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         ngrid->accept(genBlocks);
-
-         //hgrid->setCoordinateTransformator(ngrid->getCoordinateTransformator());
-
-
-         //////////////////////////////////////////////////////////////////////////
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            UBLOG(logINFO, "* Re            =" << Re);
-            UBLOG(logINFO, "* nuLB          =" << nuLB);
-            UBLOG(logINFO, "* uLB           =" << uLB);
-            UBLOG(logINFO, "* cdx           =" << cdx);
-            UBLOG(logINFO, "* fdx           =" << fdx);
-            double Hzb = 0.6 / fdx;
-            UBLOG(logINFO, "* Height of Zackenband =" << Hzb);
-            UBLOG(logINFO, "* Re on Zackenband =" << (uLB*Hzb) / (nuLB*double(1 << refineLevel)));
-            UBLOG(logINFO, "* nx1/2/3       =" << nx[0] << "/" << nx[1] << "/" << nx[2]);
-            UBLOG(logINFO, "* blocknx1/2/3  =" << blocknx[0] << "/" << blocknx[1] << "/" << blocknx[2]);
-            UBLOG(logINFO, "* x1Periodic    =" << periodicx1);
-            UBLOG(logINFO, "* x2Periodic    =" << periodicx2);
-            UBLOG(logINFO, "* x3Periodic    =" << periodicx3);
-            UBLOG(logINFO, "* number of levels  =" << refineLevel + 1);
-            UBLOG(logINFO, "* path          =" << pathname);
-
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* number of threads    =" << numOfThreads);
-            UBLOG(logINFO, "* number of processes  =" << comm->getNumberOfProcesses());
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "*****************************************");
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-
-         //////////////////////////////////////////////////////////////////////////
-         //refinement
-         GbCuboid3DPtr refinePlatteBox(new GbCuboid3D(plate->getX1Minimum() - 1.0, plate->getX2Minimum(), plate->getX3Minimum() + (plate->getX3Maximum() - plate->getX3Minimum()) / 2.0,
-            plate->getX1Maximum() + 40.0, plate->getX2Maximum(), plate->getX3Maximum() + 2.0));
-         if (myid == 0) GbSystem3D::writeGeoObject(refinePlatteBox.get(), pathname + "/geo/refinePlatteBox", WbWriterVtkXmlASCII::getInstance());
-
-         //inlay patch
-         GbCuboid3DPtr refineInlayBox(new GbCuboid3D(plate->getX1Maximum() - 104.0, plate->getX2Minimum(), plate->getX3Minimum() + (plate->getX3Maximum() - plate->getX3Minimum()) / 2.0,
-            plate->getX1Maximum() + 1.0, plate->getX2Maximum(), plate->getX3Maximum() + 1.0));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineInlayBox.get(), pathname + "/geo/refineInlayBox", WbWriterVtkXmlASCII::getInstance());
-
-         if (refineLevel > 0)
-         {
-            if (myid == 0) UBLOG(logINFO, "Refinement - start");
-            RefineCrossAndInsideGbObjectHelper refineHelper(ngrid, refineLevel);
-            refineHelper.addGbObject(refinePlatteBox, refineLevel - 1);
-            refineHelper.addGbObject(refineInlayBox, refineLevel);
-
-            refineHelper.refine();
-            if (myid == 0) UBLOG(logINFO, "Refinement - end");
-         }
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Write blocks - start");
-            BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ngrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppblocks->update(ppblockc++);
-            UBLOG(logINFO, "Write blocks - end");
-         }
-
-
-
-         {
-
-            ////walls
-            GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_minX3 - blockLengthx1, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_minX3));
-            if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-            GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_maxX3, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_maxX3 + blockLengthx1));
-            if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-            //walls
-            int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-            D3Q27BoundaryConditionAdapterPtr slip(new D3Q27SlipBCAdapter(bbOption));
-            D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, ngrid, slip, Interactor3D::SOLID));
-            D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, ngrid, slip, Interactor3D::SOLID));
-
-            /////////////////////////////////////////////////
-            ///interactoren
-            int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-            D3Q27BoundaryConditionAdapterPtr noSlip(new D3Q27NoSlipBCAdapter(bbOption1));
-            //D3Q27TriFaceMeshInteractorPtr triPlateInteractor(new D3Q27TriFaceMeshInteractor(plate, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::POINTS));
-            D3Q27TriFaceMeshInteractorPtr triPlateInteractor(new D3Q27TriFaceMeshInteractor(plate, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::SIMPLE));
-            D3Q27TriFaceMeshInteractorPtr triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-            D3Q27TriFaceMeshInteractorPtr triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-            D3Q27TriFaceMeshInteractorPtr triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand3, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-            D3Q27TriFaceMeshInteractorPtr triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand4, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-
-            //inflow
-            GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1 - blockLengthx1, originX2 - blockLengthx1, originX3 - blockLengthx1,
-               originX1, originX2 + geoLength[1] + blockLengthx1, originX3 + geoLength[2] + blockLengthx1));
-            if (myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname + "/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance());
-            D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid, ngrid, Interactor3D::SOLID));
-
-            //inflow
-            double raiseVelSteps = 0;
-            vector<D3Q27BCFunction> velcX1BCs, dummy;
-
-            mu::Parser inflowProfile;
-            inflowProfile.SetExpr("uLB");
-            inflowProfile.DefineConst("uLB", uLB);
-            velcX1BCs.push_back(D3Q27BCFunction(inflowProfile, raiseVelSteps, D3Q27BCFunction::INFCONST));
-
-            D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter(velcX1BCs, dummy, dummy));
-            velBCInteractor->addBCAdapter(velBCAdapter);
-
-            //outflow
-            GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1 + geoLength[0], originX2 - blockLengthx1, originX3 - blockLengthx1,
-               originX1 + geoLength[0] + blockLengthx1, originX2 + geoLength[1] + blockLengthx1, originX3 + geoLength[2] + blockLengthx1));
-            if (myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname + "/geo/densCuboid", WbWriterVtkXmlASCII::getInstance());
-            D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-            D3Q27InteractorPtr densInteractor(new D3Q27Interactor(densCuboid, ngrid, denBCAdapter, Interactor3D::SOLID));
-
- 
-            ///////////////////////////////////////////////////
-            if (myid == 0) UBLOG(logINFO, "deleteExistBlocks - start");
-            deleteExistBlocks(ngrid, ogrid);
-            if (myid == 0) UBLOG(logINFO, "deleteExistBlocks - end");
-
-            if (myid == 0)
-            {
-               UBLOG(logINFO, "Write blocks - start");
-               BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ngrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-               ppblocks->update(ppblockc++);
-               UBLOG(logINFO, "Write blocks - end");
-            }
-
-            ////////////////////////////////////////////
-            //METIS
-            Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-
-            ////////////////////////////////////////////
-            /////delete solid blocks
-            if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-            InteractorsHelper intHelper(ngrid, metisVisitor);
-            intHelper.addInteractor(triPlateInteractor);
-            intHelper.addInteractor(triBand1Interactor);
-            intHelper.addInteractor(triBand2Interactor);
-            intHelper.addInteractor(triBand3Interactor);
-            intHelper.addInteractor(triBand4Interactor);
-            intHelper.addInteractor(addWallZminInt);
-            intHelper.addInteractor(addWallZmaxInt);
-            intHelper.addInteractor(densInteractor);
-            intHelper.addInteractor(velBCInteractor);
-            intHelper.selectBlocks();
-            if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-            //////////////////////////////////////
-            if (myid == 0)
-            {
-               UBLOG(logINFO, "Write blocks - start");
-               BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ngrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-               ppblocks->update(ppblockc++);
-               UBLOG(logINFO, "Write blocks - end");
-            }
-            ////////////////////////////////////////////////////////
-
-            //addExistBlocks(ngrid, ogrid, hgrid);
-
-            ////////////////////////////////////////////////////////
-            unsigned long nob = ogrid->getNumberOfBlocks();
-            unsigned long nod = nob * blocknx[0] * blocknx[1] * blocknx[2];
-            unsigned long nod_real = nob * (blocknx[0] + 3)*(blocknx[1] + 3)*(blocknx[2] + 3);
-            unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-
-            double needMemAll = double(nod_real*(27 * sizeof(double) + sizeof(int)));
-            double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-            double nup = 0;
-
-            if (myid == 0)
-            {
-               UBLOG(logINFO, "Number of blocks = " << nob);
-               UBLOG(logINFO, "Number of nodes  = " << nod);
-               int minInitLevel = ngrid->getCoarsestInitializedLevel();
-               int maxInitLevel = ngrid->getFinestInitializedLevel();
-               for (int level = minInitLevel; level <= maxInitLevel; level++)
-               {
-                  int nobl = ngrid->getNumberOfBlocks(level);
-                  UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-                  UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*nodb);
-                  nup += nobl*nodb*double(1 << level);
-               }
-               UBLOG(logINFO, "Hypothetically time for calculation step for 120 nodes  = " << nup / 6.0e5 / (120 * 8) << " s");
-               UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-               UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-               UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-               UBLOG(logINFO, "Available memory per node/8.0 = " << (availMem / 8.0) << " bytes");
-            }
-
-
-            //deleteNotExistBlocks(ngrid, ogrid);
-
-            //deleteExistBlocks(ngrid, ogrid);
-
-            //set kernel for new blocks
-            //////////////////////////////
-            LBMKernel3DPtr kernel;
-            //with sponge layer
-            kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-            kernel->setWithSpongeLayer(true);
-            kernel->setSpongeLayer(spongeLayer);
-
-            BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor());
-            kernel->setBCProcessor(bcProc);
-
-            //setKernel(ogrid, kernel, nuLB);
-
-            SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-            ngrid->accept(kernelVisitor);
-            //////////////////////////////////
-
-            //initialization of decompositions
-            D3Q27ETInitDistributionsBlockVisitor initVisitor(nuLB, rhoLB);
-            //double aVuLB = 0.1;
-            initVisitor.setVx1(uLB);
-            ngrid->accept(initVisitor);
-
-            int maxblock = Block3D::getMaxGlobalID();
-            if (myid == 0) UBLOG(logINFO, "maxblock = " << maxblock);
-
-            reindexBlocks(ngrid);
-
-            moveBlocks(ngrid, ogrid);
-
-            setInterpolationFlag(ogrid);
-
-            removeBCInformation(ogrid);
-
-            //set connectors
-            D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-            D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-            ogrid->accept(setConnsVisitor);
-
-            ////////////////////////////////////
-            ////undef nodes
-            if (refineLevel > 0)
-            {
-               D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-               ogrid->accept(undefNodesVisitor);
-            }
-
-
-            D3Q27InteractorPtr addWallZminInt1(new D3Q27Interactor(addWallZmin, ogrid, slip, Interactor3D::SOLID));
-            D3Q27InteractorPtr addWallZmaxInt1(new D3Q27Interactor(addWallZmax, ogrid, slip, Interactor3D::SOLID));
-            D3Q27TriFaceMeshInteractorPtr triPlateInteractor1(new D3Q27TriFaceMeshInteractor(plate, ogrid, noSlip, Interactor3D::SOLID, Interactor3D::SIMPLE));
-            D3Q27TriFaceMeshInteractorPtr triBand1Interactor1(new D3Q27TriFaceMeshInteractor(meshBand1, ogrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-            D3Q27TriFaceMeshInteractorPtr triBand2Interactor1(new D3Q27TriFaceMeshInteractor(meshBand2, ogrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-            D3Q27TriFaceMeshInteractorPtr triBand3Interactor1(new D3Q27TriFaceMeshInteractor(meshBand3, ogrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-            D3Q27TriFaceMeshInteractorPtr triBand4Interactor1(new D3Q27TriFaceMeshInteractor(meshBand4, ogrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES));
-            D3Q27InteractorPtr velBCInteractor1(new D3Q27Interactor(velBCCuboid, ogrid, Interactor3D::SOLID));
-            velBCInteractor1->addBCAdapter(velBCAdapter);
-            D3Q27InteractorPtr densInteractor1(new D3Q27Interactor(densCuboid, ogrid, denBCAdapter, Interactor3D::SOLID));
-
-            {SetSolidOrTransBlockVisitor v2(addWallZminInt1, SetSolidOrTransBlockVisitor::TRANS);
-            ogrid->accept(v2); }
-            {SetSolidOrTransBlockVisitor v2(addWallZmaxInt1, SetSolidOrTransBlockVisitor::TRANS);
-            ogrid->accept(v2); }
-            {SetSolidOrTransBlockVisitor v2(triPlateInteractor1, SetSolidOrTransBlockVisitor::TRANS);
-            ogrid->accept(v2); }
-            {SetSolidOrTransBlockVisitor v2(triBand1Interactor1, SetSolidOrTransBlockVisitor::TRANS);
-            ogrid->accept(v2); }
-            {SetSolidOrTransBlockVisitor v2(triBand2Interactor1, SetSolidOrTransBlockVisitor::TRANS);
-            ogrid->accept(v2); }
-            {SetSolidOrTransBlockVisitor v2(triBand3Interactor1, SetSolidOrTransBlockVisitor::TRANS);
-            ogrid->accept(v2); }
-            {SetSolidOrTransBlockVisitor v2(triBand4Interactor1, SetSolidOrTransBlockVisitor::TRANS);
-            ogrid->accept(v2); }
-            {SetSolidOrTransBlockVisitor v2(velBCInteractor1, SetSolidOrTransBlockVisitor::TRANS);
-            ogrid->accept(v2); }
-            {SetSolidOrTransBlockVisitor v2(densInteractor1, SetSolidOrTransBlockVisitor::TRANS);
-            ogrid->accept(v2); }
-
-            addWallZminInt1->initInteractor();
-            addWallZmaxInt1->initInteractor();
-            triPlateInteractor1->initInteractor();
-            triBand1Interactor1->initInteractor();
-            triBand2Interactor1->initInteractor();
-            triBand3Interactor1->initInteractor();
-            triBand4Interactor1->initInteractor();
-            velBCInteractor1->initInteractor();
-            densInteractor1->initInteractor();
-
-
-            //intHelper.setBC();
-         }
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Write blocks - start");
-            BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ogrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppblocks->update(ppblockc++);
-            UBLOG(logINFO, "Write blocks - end");
-         }
-
-         {
-            UbSchedulerPtr geoSch(new UbScheduler(1));
-            D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-               new D3Q27MacroscopicQuantitiesPostprocessor(ogrid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(),
-               unitConverter, true));
-            ppgeo->update(0);
-            ppgeo.reset();
-            geoSch.reset();
-         }
-
-         //////////////////////////////////////////////////////////////////////////
-         //porous inlay
-         {
-            string pmFilename = pathGeo + "/CT-2014-039.raw";
-            int pmNX1 = 1333;  //abmessung einzelbild in x-richtung
-            int pmNX2 = 463; //abmessung einzelbild in y richtung
-            int pmNX3 = 1333; //anzahl der bilder
-            float lthreshold = 27686.97;
-            float uthreshold = 65535.0;
-
-            GbVoxelMatrix3DPtr pmMesh(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-            pmMesh->readMatrixFromRawFile<unsigned short>(pmFilename, GbVoxelMatrix3D::LittleEndian);
-
-            double scaleFactor = 0.001;
-            double delta = 3.75*scaleFactor;
-            pmMesh->setVoxelMatrixDelta(delta, delta, delta);
-            pmMesh->rotate90aroundX();
-            pmMesh->rotate90aroundX();
-            pmMesh->rotate90aroundX();
-
-            double inlayXmin = plate->getX1Maximum() - 5.0;//995.0;
-            double inlayYmin = gridCube->getX2Minimum();//180.0;
-            double inlayZmin = 8.84 + fdx;//8.73;
-
-            //pmMesh->setVoxelMatrixMininum(inlayXmin, inlayYmin, inlayZmin);
-            //if(myid == 0) pmMesh->writeToLegacyVTKBinary(pathname+"/geo/pmMesh");
-
-            int i = 0;
-            for (int y = 0; y < 40; y += 10)
-               for (int x = 0; x < 100; x += 10)
-               {
-                  if (myid == 0) UBLOG(logINFO, "inlay # " << i);
-                  pmMesh->setVoxelMatrixMininum(inlayXmin - (double)x, inlayYmin + (double)y, inlayZmin);
-                  inlay(pmMesh, pathname, myid, i, ogrid);
-                  i++;
-
-                  if (myid == 0) UBLOG(logINFO, "inlay # " << i);
-                  pmMesh->setVoxelMatrixMininum(inlayXmin - (double)(x + 5), inlayYmin + (double)y, inlayZmin);
-                  pmMesh->mirrorX();
-                  inlay(pmMesh, pathname, myid, i, ogrid);
-                  i++;
-
-                  if (myid == 0) UBLOG(logINFO, "inlay # " << i);
-                  pmMesh->setVoxelMatrixMininum(inlayXmin - (double)(x + 5), inlayYmin + (double)(y + 5), inlayZmin);
-                  pmMesh->mirrorY();
-                  inlay(pmMesh, pathname, myid, i, ogrid);
-                  i++;
-
-                  if (myid == 0) UBLOG(logINFO, "inlay # " << i);
-                  pmMesh->setVoxelMatrixMininum(inlayXmin - (double)x, inlayYmin + (double)(y + 5), inlayZmin);
-                  pmMesh->mirrorX();
-                  inlay(pmMesh, pathname, myid, i, ogrid);
-                  pmMesh->mirrorY();
-                  i++;
-               }
-
-            if (myid == 0)
-            {
-               UBLOG(logINFO, "mit VoxelMatrix");
-               UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-               UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-               UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-            }
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Write blocks - start");
-            BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ogrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppblocks->update(ppblockc++);
-            UBLOG(logINFO, "Write blocks - end");
-         }
-
-         ////initialization of decompositions
-         //D3Q27ETInitDistributionsBlockVisitor initVisitor(nuLB, rhoLB);
-         ////initVisitor.setVx1(uLB);
-         //hgrid->accept(initVisitor);
-
-         
-         //Postprozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(ogrid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(),
-            unitConverter, true));
-         ppgeo->update(1);
-         ppgeo.reset();
-         geoSch.reset();
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Write blocks - start");
-            BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ogrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppblocks->update(ppblockc++);
-            UBLOG(logINFO, "Write blocks - end");
-         }
-
-
-         //domain decomposition for threads
-         if (numOfThreads > 1)
-         {
-            PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-            ogrid->accept(pqPartVisitor);
-         }
-
-         SetSpongeLayerBlockVisitor ssp(spongeLayer);
-         ogrid->accept(ssp);
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         restart = true;
-
-         ////////////////////////////////////////////////////////////////////////////
-         //change viscosity
-         //Re = 1e6;
-         //nuLB = (uLB*(lReal / cdx)) / Re;
-         //if (myid == 0) UBLOG(logINFO, "nuLB =" << nuLB);
-
-         //int gridRank = grid->getRank();
-         //int minInitLevel = grid->getCoarsestInitializedLevel();
-         //int maxInitLevel = grid->getFinestInitializedLevel();
-
-         //std::vector<std::vector<Block3DPtr> > blockVector;
-         //blockVector.resize(maxInitLevel + 1);
-
-         //for (int level = minInitLevel; level <= maxInitLevel; level++)
-         //{
-         //   grid->getBlocks(level, gridRank, true, blockVector[level]);
-
-         //   BOOST_FOREACH(Block3DPtr block, blockVector[level])
-         //   {
-         //      LBMReal collFactor = LBMSystem::calcCollisionFactor(nuLB, block->getLevel());
-         //      block->getKernel()->setCollisionFactor(collFactor);
-         //   }
-         //}
-         ////////////////////////////////////////////////////////////////////////////
-
-         //domain decomposition for threads
-         if (numOfThreads > 1)
-         {
-            PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-            ogrid->accept(pqPartVisitor);
-         }
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         ogrid->accept(setConnsVisitor);
-         SetSpongeLayerBlockVisitor ssp(spongeLayer);
-         ogrid->accept(ssp);
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      UbSchedulerPtr visSch(new UbScheduler());
-      //visSch->addSchedule(1,0,10);
-      visSch->addSchedule(100, 100, 1000);
-      //visSch->addSchedule(1000,1000,5000);
-      //visSch->addSchedule(5000,5000,100000);
-      //visSch->addSchedule(100000,100000,10000000);
-
-      visSch->addSchedule(1000, 1000, 10000000);
-      visSch->addSchedule(1, 47100, 47100);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(ogrid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter);
-
-      double startStep = 47000;
-      double startStep2= 47500;
-
-      if(ogrid->getTimeStep() >= startStep2) startStep = startStep2;
-
-      UbSchedulerPtr resSchRMS(new UbScheduler());
-      resSchRMS->addSchedule(1000000, startStep, 10000000);
-      resSchRMS->addSchedule(1000000, startStep2, 10000000);
-      UbSchedulerPtr resSchMeans(new UbScheduler());
-      resSchMeans->addSchedule(1000000, startStep, 10000000);
-      resSchMeans->addSchedule(1000000, startStep2, 10000000);
-      UbSchedulerPtr stepAvSch(new UbScheduler());
-      int averageInterval = 100;
-
-      stepAvSch->addSchedule(averageInterval, 0, 10000000);
-      AverageValuesPostprocessor Avpp(ogrid, pathname, WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/,
-         stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/, restart);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30));
-      nupsSch->addSchedule(500, 500, 1e6);
-      NUPSCounterPostprocessor npr(ogrid, nupsSch, numOfThreads, comm);
-
-      UbSchedulerPtr emSch(new UbScheduler(10));
-      EmergencyExitPostprocessor empr(ogrid, emSch, pathname, RestartPostprocessorPtr(&rp), comm);
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      double endTime = 100000001;
-      CalculationManagerPtr calculation(new CalculationManager(ogrid, numOfThreads, endTime, visSch));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argc == 1)
-   {
-      cout << "Command line argument isn't specified!" << endl;
-      cout << "plate2 <machine name>" << endl;
-      return 1;
-   }
-   run(argv[1], true);
-
-   return 0;
-}
-
diff --git a/apps/cpu/reefer/CMakeLists.txt b/apps/cpu/reefer/CMakeLists.txt
deleted file mode 100644
index 8c76ca7ed7678275d5d3f72d353b9ddce7c7ea44..0000000000000000000000000000000000000000
--- a/apps/cpu/reefer/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(reefer)
-
-INCLUDE(${SOURCE_ROOT}/core/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES core)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(reefer BINARY)
diff --git a/apps/cpu/reefer/reefer.cpp b/apps/cpu/reefer/reefer.cpp
deleted file mode 100644
index 6590b35c58696b773f11075ec3e631ab1fda5c05..0000000000000000000000000000000000000000
--- a/apps/cpu/reefer/reefer.cpp
+++ /dev/null
@@ -1,489 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "geometry3d/CoordinateTransformation3D.h"
-#include "Grid3D.h"
-#include "GenBlocksGridVisitor.h"
-#include "geometry3d/GbSystem3D.h"
-#include "geometry3d/GbCuboid3D.h"
-#include "geometry3d/GbCylinder3D.h"
-#include <geometry3d/GbSphere3D.h>
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include "basics/writer/WbWriterVtkXmlBinary.h"
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "RatioBlockVisitor.h"
-#include "RatioSmoothBlockVisitor.h"
-#include "OverlapBlockVisitor.h"
-#include "RefineInterGbObjectsVisitor.h"
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "SetKernelBlockVisitor.h"
-#include "LBMKernelETD3Q27Cascaded.h"
-#include "D3Q27MacroscopicQuantitiesPostprocessor.h"
-#include "MPICommunicator.h"
-#include "D3Q27ETBCProcessor.h"
-#include "SimulationParameters.h"
-#include "D3Q27SetUndefinedNodesBlockVisitor.h"
-#include "SetInterpolationDirsBlockVisitor.h"
-#include "D3Q27SetConnectorsBlockVisitor.h"
-#include "NullCommunicator.h"
-#include "D3Q27ETInitDistributionsBlockVisitor.h"
-#include "CalculationManager.h"
-#include "PQueuePartitioningGridVisitor.h"
-#include "MetisPartitioningGridVisitor.h"
-#include "D3Q27Interactor.h"
-#include "D3Q27NoSlipBCAdapter.h"
-#include "D3Q27VelocityBCAdapter.h"
-#include "D3Q27DensityBCAdapter.h"
-#include "D3Q27BoundaryConditionAdapter.h"
-#include "StringUtil.hpp"
-#include "D3Q27OffsetInterpolationProcessor.h"
-#include "D3Q27CompactInterpolationProcessor.h"
-#include "SyncBcBlockVisitor.h"
-#include "geometry3d/creator/GbTriFaceMesh3DCreator.h"
-#include "geometry3d/GbTriFaceMesh3D.h"
-#include "D3Q27TriFaceMeshInteractor.h"
-#include "MathUtil.hpp"
-#include "SolidBlocksHelper.h"
-#include "LBMKernelETD3Q27CascadedTI.h"
-#include "TurbulenceIntensityPostprocessor.h"
-#include "RestartPostprocessor.h"
-
-using namespace std;
-
-
-void run(const char *cstr)
-{
-   try
-   {
-      string pathname = "c:/temp/reefer/out";
-      string pathGeo = "c:/Data/reefer";
-
-      //string pathname = "/work/koskuche/scratch/reefer2/out";
-      //string pathGeo = "/home/koskuche/data/reefer/new";
-
-      //string pathname = "/home/kucher/temp/reefer/out";
-      //string pathGeo = "/home/kucher/data/reefer/new";
-
-      int numOfThreads = 2;
-      
-      CommunicatorPtr comm(new MPICommunicator());
-      int myid = comm->getProcessID();
-
-      //if(myid ==0)
-      //{
-      //   stringstream logFilename;
-      //   logFilename <<  "/work/koskuche/scratch/reefer2/logfile.log";
-      //   UbLog::output_policy::setStream(logFilename.str());
-      //}
-
-      //const double dx = 13.6;
-      const double dx = 2.0;
-      double refLentgthWorld = dx/1000.0; //from mm to m
-      double refLentgthLB = 1.0;
-      LBMUnitConverterPtr uconv = LBMUnitConverterPtr(new LBMUnitConverter(refLentgthWorld, LBMUnitConverter::AIR_20C, refLentgthLB));
-      LBMReal uSI = 10;//m/s
-      LBMReal uLB = uSI * uconv->getFactorVelocityWToLb();
-      LBMReal rhoLB = 1.0;
-      LBMReal nueSI = 1.5e-5;
-      LBMReal nueLB = nueSI * uconv->getFactorViscosityWToLb();//(uLB*l)/Re;
-
-      Grid3DPtr grid(new Grid3D());
-      UbSchedulerPtr rSch(new UbScheduler(1500,5000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY);
-
-      std::string opt;
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if(cstr!= NULL)
-      {
-         opt = std::string(cstr);
-
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-
-         grid = rp.restart(UbSystem::stringTo<int>(opt));
-
-         LBMReal nueLB = 1.5e-3;
-         
-         SimulationParametersPtr param = SimulationParameters::getInstanz();
-         param->setCollisionModelType(SimulationParameters::COMPRESSIBLE);
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-      }
-      else
-      {
-      const int baseLevel = 0;
-      const int refineLevel = 0;
-      //////////////////////////////////////////////////////////////////////////
-      // Geometries
-      //////////////////////////////////////////////////////////////////////////
-      //container
-      GbTriFaceMesh3DPtr geoContainer (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo +"/Containerascii.stl","geoContainer"));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoContainer.get(), pathname+"/geo/geoContainer", WbWriterVtkXmlASCII::getInstance());
-      //cargo
-      //GbTriFaceMesh3DPtr geoCargo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/Kisten_fuer_Palettenascii.stl","geoCargo"));
-      GbTriFaceMesh3DPtr geoCargo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/Kistenascii.stl","geoCargo"));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoCargo.get(), pathname+"/geo/geoCargo", WbWriterVtkXmlASCII::getInstance());
-      //palette
-      //GbTriFaceMesh3DPtr geoPalette (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/Palettenascii.stl","geoPalette"));
-      //if(myid == 0) GbSystem3D::writeGeoObject(geoPalette.get(), pathname+"/geoPalette", WbWriterVtkXmlASCII::getInstance());
-      //reefer
-      GbTriFaceMesh3DPtr geoBlower (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/Solidblockascii.stl","geoReefer"));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoBlower.get(), pathname+"/geo/geoBlower", WbWriterVtkXmlASCII::getInstance());
-      //T floor
-      GbTriFaceMesh3DPtr geoTFloor (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/T-Floorascii.stl","geoTFloor"));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoTFloor.get(), pathname+"/geo/geoTFloor", WbWriterVtkXmlASCII::getInstance());
-
-      //bounding box
-      double g_minX1 = geoContainer->getX1Minimum();
-      double g_minX2 = geoContainer->getX2Minimum();
-      double g_minX3 = geoContainer->getX3Minimum();
-
-      double g_maxX1 = geoContainer->getX1Maximum();
-      double g_maxX2 = geoContainer->getX2Maximum();
-      double g_maxX3 = geoContainer->getX3Maximum();
-
-      const int nodesPerBlock = 10;
-      //const double dx = 1.7;
-      //const double dx = 13.6;
-      const double blockLength = double(nodesPerBlock)*dx;
-
-      const double gridOriginX1 = g_minX1;
-      const double gridOriginX2 = g_minX2;
-      const double gridOriginX3 = g_minX3;
-
-      //add wall X
-      GbCuboid3DPtr addWallXmax (new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-      //GbCuboid3DPtr addWallXmax (new GbCuboid3D(geoBlower->getX1Maximum()+geoBlower->getLengthX1(), g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallXmax.get(), pathname+"/geo/addWallXmax", WbWriterVtkXmlASCII::getInstance());
-      //add wall Y
-      GbCuboid3DPtr addWallYmax (new GbCuboid3D(g_minX1-blockLength, geoBlower->getX2Maximum(), g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-      //add wall Z
-      GbCuboid3DPtr addWallZmax (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-      //add wall X
-      GbCuboid3DPtr addWallXmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, geoBlower->getX1Minimum(), g_maxX2+blockLength, g_maxX3+blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallXmin.get(), pathname+"/geo/addWallXmin", WbWriterVtkXmlASCII::getInstance());
-      //add wall Y
-      GbCuboid3DPtr addWallYmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, geoBlower->getX2Minimum(), g_maxX3+blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-      //add wall Z
-      GbCuboid3DPtr addWallZmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, geoTFloor->getX3Minimum()));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-      //add wall for blower
-      GbCuboid3DPtr addWallBlower (new GbCuboid3D(geoBlower->getX1Minimum()-3.0*blockLength, geoBlower->getX2Minimum()-3.0*blockLength, geoBlower->getX3Minimum()+4.0*dx, 
-                                                  geoBlower->getX1Maximum(), geoBlower->getX2Maximum()+3.0*blockLength, geoBlower->getX3Maximum()-4.0*dx));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallBlower.get(), pathname+"/geo/addWallBlower", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallBlowerXmin (new GbCuboid3D(geoBlower->getX1Minimum(), geoBlower->getX2Minimum(), geoBlower->getX3Minimum(), 
-                                       geoBlower->getX1Minimum()+2.0*dx, geoBlower->getX2Maximum(), geoBlower->getX3Maximum()));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallBlowerXmin.get(), pathname+"/geo/addWallBlowerXmin", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallBlowerXmax (new GbCuboid3D(geoBlower->getX1Maximum()-2.0*dx, geoBlower->getX2Minimum(), geoBlower->getX3Minimum(), 
-                                                      geoBlower->getX1Maximum(), geoBlower->getX2Maximum(), geoBlower->getX3Maximum()));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallBlowerXmax.get(), pathname+"/geo/addWallBlowerXmax", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallBlowerYmin (new GbCuboid3D(geoBlower->getX1Minimum(), geoBlower->getX2Minimum(), geoBlower->getX3Minimum(), 
-                                                      geoBlower->getX1Maximum(), geoBlower->getX2Minimum()+2.0*dx, geoBlower->getX3Maximum()));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallBlowerYmin.get(), pathname+"/geo/addWallBlowerYmin", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallBlowerYmax (new GbCuboid3D(geoBlower->getX1Minimum()-2.0*dx, geoBlower->getX2Maximum()-2.0*dx, geoBlower->getX3Minimum(), 
-                                                      geoBlower->getX1Maximum(), geoBlower->getX2Maximum(), geoBlower->getX3Maximum()));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallBlowerYmax.get(), pathname+"/geo/addWallBlowerYmax", WbWriterVtkXmlASCII::getInstance());
-
-      //inflow
-      GbCuboid3DPtr geoInflow (new GbCuboid3D(geoBlower->getX1Minimum()+dx, geoBlower->getX2Minimum()+dx, geoBlower->getX3Minimum()+2.0*dx, 
-                                              geoBlower->getX1Maximum()-dx, geoBlower->getX2Maximum()-dx, geoBlower->getX3Minimum()+4.0*dx));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-      //outflow
-      GbCuboid3DPtr geoOutflow (new GbCuboid3D(geoBlower->getX1Minimum()+2.0*dx, geoBlower->getX2Minimum()+2.0*dx, geoBlower->getX3Maximum()-4.0*dx, 
-                                               geoBlower->getX1Maximum()-2.0*dx, geoBlower->getX2Maximum()-2.0*dx, geoBlower->getX3Maximum()-2.0*dx));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-      //simulation parameters
-      double lSI = g_maxX2 - g_minX2;
-      double lLB = lSI / dx;
-      //double refLentgthWorld = blockLength/1000.0; //from mm to m
-      //double refLentgthLB = double(nodesPerBlock);
-      //LBMUnitConverterPtr uconv = LBMUnitConverterPtr(new LBMUnitConverter(refLentgthWorld, LBMUnitConverter::AIR_20C, refLentgthLB));
-      //LBMReal uSI = 10;//m/s
-      //LBMReal uLB = uSI * uconv->getFactorVelocityWToLb();
-      //LBMReal rhoLB = 1.0;
-      //LBMReal nueSI = 1.5e-5;
-      //LBMReal nueLB = nueSI * uconv->getFactorViscosityWToLb();//(uLB*l)/Re;
-      //LBMReal nueLB = 1.5e-3;
-      LBMReal Re = (uLB*(420/dx))/nueLB;
-
-      if(myid ==0)
-      {
-         UBLOG(logINFO,"grid = " <<int((g_maxX1 - g_minX1)/dx)<<"x"<<int((g_maxX2 - g_minX2)/dx) << "x"<<int((g_maxX3 - g_minX3)/dx));
-         UBLOG(logINFO,"dx = " << dx);
-         UBLOG(logINFO,"nodes per block = " << nodesPerBlock);
-         UBLOG(logINFO,"block length = " << blockLength << "mm");
-         UBLOG(logINFO,"v = " << uLB );
-         UBLOG(logINFO,"rho = " << rhoLB );
-         UBLOG(logINFO,"nue = " << nueLB );
-         UBLOG(logINFO,"Re = " << Re );
-         UBLOG(logINFO,"Preprozess - start");
-      }
-
-      SimulationParametersPtr param = SimulationParameters::getInstanz();
-      param->setCollisionModelType(SimulationParameters::COMPRESSIBLE);
-      param->setRho(rhoLB);
-      param->setVelocityX(uLB);
-      param->setViscosity(nueLB);
-      
-      //set grid
-      //Grid3DPtr grid(new Grid3D());
-      grid->setDeltaX(dx);
-      grid->setBlockNX(nodesPerBlock, nodesPerBlock, nodesPerBlock);
-      
-      GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-      GenBlocksGridVisitor genBlocks;
-      genBlocks.addGeoObject(gridCube);
-      grid->accept(genBlocks);
-
-      MetisPartitioningGridVisitor metisVisitor(numOfThreads, D3Q27System::B, comm, false);
-      grid->accept( metisVisitor );
-
-      SolidBlocksHelper sd(grid, comm);
-
-      //iteractors
-      int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB
-      D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1));
-
-      D3Q27TriFaceMeshInteractorPtr cargoInt( new D3Q27TriFaceMeshInteractor(geoCargo, grid, bcObst,Interactor3D::SOLID));
-      sd.addInteractor(cargoInt);
-
-      D3Q27InteractorPtr addWallBlowerInt(new D3Q27Interactor(addWallBlower, grid, bcObst,Interactor3D::SOLID));
-
-      sd.addInteractor(addWallBlowerInt);
-
-      //D3Q27TriFaceMeshInteractorPtr paletteInt( new D3Q27TriFaceMeshInteractor(geoPalette, grid, bcObst,Interactor3D::SOLID));
-      //sd.addInteractor(paletteInt);
-
-      D3Q27InteractorPtr addWallXmaxInt(new D3Q27Interactor(addWallXmax, grid, bcObst,Interactor3D::SOLID));
-      sd.addInteractor(addWallXmaxInt);
-
-      D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcObst,Interactor3D::SOLID));
-      sd.addInteractor(addWallYmaxInt);
-
-      D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcObst,Interactor3D::SOLID));
-      sd.addInteractor(addWallZmaxInt);
-
-      D3Q27InteractorPtr addWallXminInt(new D3Q27Interactor(addWallXmin, grid, bcObst,Interactor3D::SOLID));
-      sd.addInteractor(addWallXminInt);
-
-      D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcObst,Interactor3D::SOLID));
-      sd.addInteractor(addWallYminInt);
-
-      D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcObst,Interactor3D::SOLID));
-      sd.addInteractor(addWallZminInt);
-
-      sd.deleteSolidBlocks();
-      if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	      
-      
-      if (refineLevel > 0)
-      {
-         GbObject3DPtr refineCube1(new  GbCuboid3D(geoTFloor->getX1Minimum(), geoTFloor->getX2Minimum(), geoTFloor->getX3Minimum(), 
-            geoTFloor->getX1Maximum(), geoTFloor->getX2Maximum(), geoTFloor->getX3Maximum()));
-         GbSystem3D::writeGeoObject(refineCube1.get(),pathname + "/refineCube", WbWriterVtkXmlASCII::getInstance());
-
-         RefineCrossAndInsideGbObjectBlockVisitor refVisitor(refineCube1, baseLevel, refineLevel-1);
-         grid->accept(refVisitor);
-
-         RatioBlockVisitor ratioVisitor(refineLevel);
-         grid->accept(ratioVisitor);
-
-         RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel);
-         grid->accept(ratioSmoothVisitor);
-
-         OverlapBlockVisitor overlapVisitor(refineLevel);
-         grid->accept(overlapVisitor);
-      }
-
-      if(myid == 0) UBLOG(logINFO,"Write blocks - start");
-      grid->accept( metisVisitor );
-      if(myid == 0) grid->writeBlocks(pathname + "/blocks" + StringUtil::toString(myid), 0, WbWriterVtkXmlASCII::getInstance(), false);
-      if(myid == 0) UBLOG(logINFO,"Write blocks - end");
-
-      unsigned long nob = grid->getNumberOfBlocks();
-      unsigned long nod = nob * nodesPerBlock * nodesPerBlock *nodesPerBlock;
-      double availMem = 6.0e9;
-      double needMemAll  = double(nod*(27*sizeof(double) + sizeof(int))*2);
-      double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"Number of blocks = " << nob);
-         UBLOG(logINFO,"Number of nodes  = " << nod);
-         UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-         UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-         UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-      }
-
-      //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodesPerBlock, nodesPerBlock, nodesPerBlock));
-      LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(nodesPerBlock, nodesPerBlock, nodesPerBlock));
-      BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-      kernel->setBCProcessor(bcProc);
-
-      SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-      //SetKernelBlockVisitor kernelVisitor(kernel, nueLB);
-      grid->accept(kernelVisitor);
-
-      if (refineLevel > 0)
-      {
-         std::vector<int> dirs;
-         D3Q27System::getLBMDirections(dirs);
-         SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
-         grid->accept(interDirsVisitor);
-
-         D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-         grid->accept(undefNodesVisitor);
-      }
-
-      //discretization
-      //D3Q27TriFaceMeshInteractorPtr containerInt( new D3Q27TriFaceMeshInteractor(geoContainer, grid, bcObst,Interactor3D::SOLID));
-      //grid->addAndInitInteractor(containerInt);
-
-      D3Q27TriFaceMeshInteractorPtr tFloorInt( new D3Q27TriFaceMeshInteractor(geoTFloor, grid, bcObst,Interactor3D::SOLID));
-      grid->addAndInitInteractor(tFloorInt);
-
-      grid->addAndInitInteractor(addWallBlowerInt);
-      //grid->addAndInitInteractor(blowerInt);
-      grid->addAndInitInteractor(cargoInt);
-      //grid->addAndInitInteractor(paletteInt);
-      grid->addAndInitInteractor(addWallXmaxInt);
-      grid->addAndInitInteractor(addWallYmaxInt);
-      grid->addAndInitInteractor(addWallZmaxInt);
-      grid->addAndInitInteractor(addWallXminInt);
-      grid->addAndInitInteractor(addWallYminInt);
-      grid->addAndInitInteractor(addWallZminInt);
-
-      D3Q27InteractorPtr addWallBlowerXminInt(new D3Q27Interactor(addWallBlowerXmin, grid, bcObst,Interactor3D::SOLID));
-      grid->addAndInitInteractor(addWallBlowerXminInt);
-      
-      D3Q27InteractorPtr addWallBlowerXmaxInt(new D3Q27Interactor(addWallBlowerXmax, grid, bcObst,Interactor3D::SOLID));
-      grid->addAndInitInteractor(addWallBlowerXmaxInt);
-      
-      D3Q27InteractorPtr addWallBlowerYminInt(new D3Q27Interactor(addWallBlowerYmin, grid, bcObst,Interactor3D::SOLID));
-      grid->addAndInitInteractor(addWallBlowerYminInt);
-      
-      D3Q27InteractorPtr addWallBlowerYmaxInt(new D3Q27Interactor(addWallBlowerYmax, grid, bcObst,Interactor3D::SOLID));
-      grid->addAndInitInteractor(addWallBlowerYmaxInt);
-
-      //outflow
-      D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-      D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID));
-      grid->addAndInitInteractor(outflowInt);
-
-      //inflow
-      double Cx = geoInflow->getX1Centroid();
-      double Hx = geoInflow->getLengthX1();
-      double Cy = geoInflow->getX2Centroid();
-      double Hy = geoInflow->getLengthX2();
-      mu::Parser fct = MathUtil::getDuctParaboloidZ(Cx,Hx,Cy,Hy,-uLB);
-      //mu::Parser fct;
-      //fct.SetExpr("vx3");
-      //fct.DefineConst("vx3", uLB);
-
-      D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (false, false ,true ,fct, 0, D3Q27BCFunction::INFCONST));
-      velBCAdapter->setSecondaryBcOption(2);
-      D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-      grid->addAndInitInteractor(inflowInt);
-
-      //set connectors
-      D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-      D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-      grid->accept( setConnsVisitor );
-
-      //domain decomposition
-      PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-      grid->accept(pqPartVisitor);
-
-      //initialization of decompositions
-      D3Q27ETInitDistributionsBlockVisitor initVisitor(1.0);
-      grid->accept(initVisitor);
-
-
-      //Postrozess
-      //if(myid == 0) grid->writeBlocks(pathname + "/blocks" + StringUtil::toString(myid), 0, WbWriterVtkXmlASCII::getInstance(), false);
-
-      //std::vector< UbTupleFloat3 > nodes;
-      //std::vector< UbTupleInt2 >   lines;
-      //sphereInt->addQsLineSet(nodes, lines);
-      //WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/qs",nodes,lines);
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-      
-      UbSchedulerPtr geoSch(new UbScheduler(1));
-      D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-           new D3Q27MacroscopicQuantitiesPostprocessor(grid, pathname + "/geo/nodes_geo", WbWriterVtkXmlBinary::getInstance(), 
-                                                       conv, geoSch, comm, true));
-      grid->doPostProcess(0);
-      ppgeo.reset();
-      geoSch.reset();
-      
-
-      if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-
-}
-      
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-      //double outTime = 50000;
-      double outTime = 500;
-      UbSchedulerPtr visSch(new UbScheduler());
-      visSch->addSchedule(1000,1000,10000);
-      visSch->addSchedule(10000,10000,100000);
-      visSch->addSchedule(100000,100000,1000000);
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, pathname + "/mq/nodes", WbWriterVtkXmlBinary::getInstance(), conv, visSch, comm);
-
-      //turbulence intensity postprocessor
-      UbSchedulerPtr tiSch(new UbScheduler());
-      tiSch->addSchedule(1000, 5000, 5000);
-      tiSch->addSchedule(10000, 50000, 50000);
-      tiSch->addSchedule(100000, 500000, 500000);
-      TurbulenceIntensityPostprocessor vp(grid, pathname + "/ti/TI", WbWriterVtkXmlBinary::getInstance(), tiSch, comm);
-
-      double endTime = 1000001;
-      //double endTime = 1001.0;
-      UbSchedulerPtr upSch(new UbScheduler(1));
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, upSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/rheometer/CMakeLists.txt b/apps/cpu/rheometer/CMakeLists.txt
deleted file mode 100644
index b095887e02ca0ca6a4a63189b431147da78ba3c5..0000000000000000000000000000000000000000
--- a/apps/cpu/rheometer/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(rheometer)
-
-vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES rheometer.cpp )
\ No newline at end of file
diff --git a/apps/cpu/rheometer/rheometer.cfg b/apps/cpu/rheometer/rheometer.cfg
deleted file mode 100644
index 9b739bc67ed42d46c89adaefab1b020ad67da660..0000000000000000000000000000000000000000
--- a/apps/cpu/rheometer/rheometer.cfg
+++ /dev/null
@@ -1,34 +0,0 @@
-#outputPath = d:/temp/rheometerTest
-outputPath = d:/temp/Taylor-CouetteFlowIncompCum
-viscosityPath = d:/Projects/VirtualFluidsCombined/apps/cpu/rheometer
-
-numOfThreads = 1
-availMem = 8e9
-logToFile = false
-
-blocknx = 16 16 1  #8 8 1
-#boundingBox = 32 32 1
-deltax = 0.5
-
-#boundingBox = 0.02 0.02 0.00125
-#deltax = 0.000625
-
-refineLevel = 0
-
-#OmegaLB = 4e-5
-#tau0 = 20e-7
-
-OmegaLB = 1e-4
-tau0 = 20e-7
-
-resolution = 165
-scaleFactor = 1
-
-newStart = true
-restartStep = 100000
-
-cpStart = 10000000
-cpStep  = 10000000
-
-outTime = 1
-endTime = 10
\ No newline at end of file
diff --git a/apps/cpu/rheometer/rheometer.cpp b/apps/cpu/rheometer/rheometer.cpp
deleted file mode 100644
index 6c3c545f87d17f5a4b4e90492dfd879612028644..0000000000000000000000000000000000000000
--- a/apps/cpu/rheometer/rheometer.cpp
+++ /dev/null
@@ -1,470 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "VirtualFluids.h"
-#include "NonNewtonianFluids/NonNewtonianFluids.h"
-
-using namespace std;
-
-
-void bflow(string configname)
-{
-    using namespace vf::lbm::dir;
-
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          outputPath = config.getValue<string>("outputPath");
-      string          viscosityPath = config.getValue<string>("viscosityPath");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      vector<int>     blocknx = config.getVector<int>("blocknx");
-      //vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //double          nuLB = 1.5e-3;//config.getValue<double>("nuLB");
-      real          endTime = config.getValue<real>("endTime");
-      real          outTime = config.getValue<real>("outTime");
-      real          availMem = config.getValue<real>("availMem");
-      int             refineLevel = config.getValue<int>("refineLevel");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      real          restartStep = config.getValue<real>("restartStep");
-      real          deltax = config.getValue<real>("deltax");
-      real          cpStep = config.getValue<real>("cpStep");
-      real          cpStart = config.getValue<real>("cpStart");
-      bool            newStart = config.getValue<bool>("newStart");
-      real          OmegaLB = config.getValue<real>("OmegaLB");
-      real          tau0 = config.getValue<real>("tau0");
-      real          scaleFactor = config.getValue<real>("scaleFactor");
-      real          resolution = config.getValue<real>("resolution");
-
-      vf::basics::ConfigurationFile   viscosity;
-      viscosity.load(viscosityPath + "/viscosity.cfg");
-      real nuLB = viscosity.getValue<real>("nuLB");
-
-      //outputPath = outputPath + "/rheometerBingham_" + config.getValue<string>("resolution") + "_" + config.getValue<string>("OmegaLB");
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = outputPath.c_str();
-            mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if (myid == 0)
-         {
-            stringstream logFilename;
-            logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      real rhoLB = 0.0;
-
-      //akoustic
-       OmegaLB /= scaleFactor;
-       nuLB *=scaleFactor;
-       endTime *= scaleFactor;
-       //outTime = endTime;
-       cpStart = endTime;
-       cpStep  = endTime;
-
-//diffusive
-      //OmegaLB /= scaleFactor * scaleFactor;
-      //tau0 /= scaleFactor * scaleFactor;
-      //endTime *= scaleFactor * scaleFactor;
-      //outTime = endTime;
-      //cpStart = endTime;
-      //cpStep = endTime;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-      // double uWorld = (N * PI) / 30.0; //0.0037699111843
-      // double rhoWorld = 2350.0; //kg/m^3
-      //double R0 = boundingBox[0] * 0.5;
-
-      //SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter(deltax, uWorld*R0, rhoWorld, 1.0, uLB));
-      //if (myid == 0) UBLOG(logINFO, conv->toString());
-
-      //bounding box
-
-      //double g_minX1 = 0;
-      //double g_minX2 = 0;
-      //double g_minX3 = 0;
-
-      //double g_maxX1 = resolution;// boundingBox[0];
-      //double g_maxX2 = resolution;// boundingBox[1];
-      //double g_maxX3 = 1.0; // boundingBox[2];
-
-      real g_minX1 = 0;
-      real g_minX2 = 0;
-      real g_minX3 = 0;
-
-      real g_maxX1 = resolution; // boundingBox[0];
-      real g_maxX2 = resolution; // boundingBox[1];
-      real g_maxX3 = 1.0; // boundingBox[2];
-
-      //double g_minX1 = -boundingBox[0]/2.0;
-      //double g_minX2 = -boundingBox[1] / 2.0;
-      //double g_minX3 = -boundingBox[2]/2.0;
-
-      //double g_maxX1 = boundingBox[0]/2.0;
-      //double g_maxX2 = boundingBox[1]/2.0;
-      //double g_maxX3 = boundingBox[2]/2.0;
-
-//      double blockLength = 3.0 * deltax;
-
-      // double d = 2.0 * radius;
-      // double U = uLB;
-      // double Gamma = U / d;
-
-      // double muWorld = 20; //Pa*s
-      // double k = 0.0015; // muWorld / rhoWorld * conv->getFactorViscosityWToLb(); //(U * d) / (Re);
-
-      // //double k = (U * d) / (Re * std::pow(Gamma, n - 1));
-      // double yielStressWorld = 20; //Pa
-      // double tau0 = 1e-6;// 3e-6;//yielStressWorld * conv->getFactorPressureWToLb(); //Bn * k * std::pow(Gamma, n);
-
-      //double k = 0.05; // (U * d) / (Re * std::pow(Gamma, n - 1));
-      //double tau0 = 3e-6; //Bn * k * std::pow(Gamma, n);
-
-      //double forcing = 8e-7;
-
-      //double omegaMin = 1.0e-8;
-
-      SPtr<Rheology> thix = Rheology::getInstance();
-      //thix->setPowerIndex(n);
-      //thix->setViscosityParameter(k);
-      thix->setYieldStress(tau0);
-      //thix->setOmegaMin(omegaMin);
-
-      SPtr<BC> noSlipBC(new NoSlipBC());
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
-      //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyHerschelBulkleyModelNoSlipBCStrategy()));
-      noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelNoSlipBCStrategy()));
-
-      //SPtr<BC> slipBC(new SlipBC());
-      //slipBC->setBCStrategy(SPtr<BCStrategy>(new SimpleSlipBCStrategy()));
-
-      mu::Parser fctVx;
-      //fctVx.SetExpr("omega*(r-x2)");
-      fctVx.SetExpr("-Omega*(x2-r)");
-      fctVx.DefineConst("Omega", OmegaLB);
-      //fctVx.DefineConst("r", R0);
-      fctVx.DefineConst("r", g_maxX1*0.5);
-
-      mu::Parser fctVy;
-      fctVy.SetExpr("Omega*(x1-r)");
-      fctVy.DefineConst("Omega", OmegaLB);
-      //fctVy.DefineConst("r", R0);
-      fctVy.DefineConst("r", g_maxX2 * 0.5);
-
-      mu::Parser fctVz;
-      fctVz.SetExpr("0.0");
-
-
-      //// rotation around X-axis
-      //mu::Parser fctVy;
-      //fctVy.SetExpr("-Omega*(x3-r)");
-      //fctVy.DefineConst("Omega", OmegaLB);
-      //fctVy.DefineConst("r", 0.5 * (g_maxX2 - g_minX2));
-
-      //mu::Parser fctVz;
-      //fctVz.SetExpr("Omega*(x2-r)");
-      //fctVz.DefineConst("Omega", OmegaLB);
-      //fctVz.DefineConst("r", 0.5 * (g_maxX2 - g_minX2));
-
-      //mu::Parser fctVx;
-      //fctVx.SetExpr("0.0");
-
-      SPtr<BC> velocityBC(new VelocityBC(true, true, true, fctVx, fctVy, fctVz, 0, BCFunction::INFCONST));
-      //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-      //velocityBC->setBCStrategy(SPtr<BCStrategy>(new SimpleVelocityBCStrategy()));
-      //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityWithDensityBCStrategy()));
-      velocityBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelVelocityBCStrategy()));
-
-      //SPtr<BC> densityBC(new DensityBC());
-      //densityBC->setBCStrategy(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
-      ////densityBC->setBCStrategy(SPtr<BCStrategy>(new NonReflectingOutflowBCStrategy()));
-
-
-      //BS visitor
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBC);
-      //bcVisitor.addBC(slipBC);
-      bcVisitor.addBC(velocityBC);
-      //bcVisitor.addBC(densityBC);
-      
-      SPtr<BCSet> bcProc;
-      bcProc = SPtr<BCSet>(new BCSet());
-
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BGKLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantK17LBMKernel()); 
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel());
-      kernel->setBCSet(bcProc);
-      //kernel->setForcingX1(forcing);
-      //kernel->setWithForcing(true);
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-      grid->setPeriodicX1(false);
-      grid->setPeriodicX2(false);
-      grid->setPeriodicX3(true);
-      grid->setDeltaX(deltax);
-      grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-      SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-      ////////////////////////////////////////////
-      //METIS
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY));
-      ////////////////////////////////////////////
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
-      SPtr<MPIIOMigrationSimulationObserver> restartSimulationObserver(new MPIIOMigrationSimulationObserver(grid, mSch, metisVisitor, outputPath, comm));
-      restartSimulationObserver->setLBMKernel(kernel);
-      restartSimulationObserver->setBCSet(bcProc);
-      //restartSimulationObserver->setNu(k);
-      //////////////////////////////////////////////////////////////////////////
-
-      ////stator
-      SPtr<GbObject3D> rotor(new GbCylinder3D(0.5 * g_maxX1, 0.5 * g_maxX2, g_minX3 - 2.0 * deltax, 0.5 * g_maxX1,
-                                              0.5 * g_maxX2, g_maxX3 + 2.0 * deltax, 0.5 * g_maxX1));
-
-      //around x
-      //SPtr<GbObject3D> stator(new GbCylinder3D(g_minX1 - 3.0 * deltax, 0.5 * g_maxX2, 0.5 * g_maxX3,                                               g_maxX1 + 3.0 * deltax, 0.5 * g_maxX2, 0.5 * g_maxX3, 0.5 * g_maxX3));
-
-      GbSystem3D::writeGeoObject(rotor.get(), outputPath + "/geo/rotor", WbWriterVtkXmlBinary::getInstance());
-
-      SPtr<D3Q27Interactor> rotorInt =
-          SPtr<D3Q27Interactor>(new D3Q27Interactor(rotor, grid, velocityBC, Interactor3D::INVERSESOLID));
-
-      ////rotor (cylinder)
-      SPtr<GbObject3D> stator(new GbCylinder3D(0.5 * g_maxX1, 0.5 * g_maxX2, g_minX3- 2.0 * deltax, 0.5 * g_maxX1, 0.5 * g_maxX2, g_maxX3+ 2.0 * deltax, 0.25 * g_maxX1));
-      
-      //around x
-      //SPtr<GbObject3D> rotor(new GbCylinder3D(g_minX1 - 3.0 * deltax, 0.5 * g_maxX2, 0.5 * g_maxX3,                                           g_maxX1 + 3.0 * deltax, 0.5 * g_maxX2, 0.5 * g_maxX3, 0.25 * g_maxX3));
-
-      GbSystem3D::writeGeoObject(stator.get(), outputPath + "/geo/stator", WbWriterVtkXmlBinary::getInstance());
-
-      SPtr<D3Q27Interactor> statorInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(stator, grid, noSlipBC, Interactor3D::SOLID));
-
-      if (myid == 0)
-      {
-         UBLOG(logINFO, "Parameters:");
-         //UBLOG(logINFO, "forcing = " << forcing);
-         UBLOG(logINFO, "rho = " << rhoLB);
-         UBLOG(logINFO, "uLB = " << OmegaLB);
-         UBLOG(logINFO, "nuLB = " << nuLB);
-         // UBLOG(logINFO, "Re = " << (U * d) / (k * std::pow(Gamma, n - 1)));
-         // UBLOG(logINFO, "Bn = " << tau0 /(k * std::pow(Gamma, n)));
-         // UBLOG(logINFO, "k = " << k);
-         // UBLOG(logINFO, "n = " << n);
-         UBLOG(logINFO, "tau0 = " << tau0);
-         UBLOG(logINFO, "scaleFactor = " << scaleFactor);
-         UBLOG(logINFO, "deltax = " << deltax);
-         UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-         UBLOG(logINFO, "number of threads = " << numOfThreads);
-         UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses());
-         UBLOG(logINFO, "blocknx = " << blocknx[0] << " " << blocknx[1] << " " << blocknx[2]);
-         UBLOG(logINFO, "resolution = " << resolution);
-         // UBLOG(logINFO, "boundingBox = " << boundingBox[0] << " " << boundingBox[1] << " " << boundingBox[2]);
-         // UBLOG(logINFO, "sphereCenter = " << sphereCenter[0] << " " << sphereCenter[1] << " " << sphereCenter[2]);
-         UBLOG(logINFO, "output path = " << outputPath);
-         UBLOG(logINFO, "Preprozess - start");
-      }
-
-      if (newStart)
-      {
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if (refineLevel > 0)
-         {
-            GbCuboid3DPtr refCube(new GbCuboid3D(-10, -10, -10, 0, 0, 0));
-            if (myid == 0) GbSystem3D::writeGeoObject(refCube.get(), outputPath + "/geo/refCube", WbWriterVtkXmlASCII::getInstance());
-            
-            if (myid == 0) UBLOG(logINFO, "Refinement - start");
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm);
-            //refineHelper.addGbObject(sphere, refineLevel);
-            refineHelper.addGbObject(refCube, refineLevel);
-            refineHelper.refine();
-            if (myid == 0) UBLOG(logINFO, "Refinement - end");
-         }
-
-
-         //walls
-         //GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3));
-         //if (myid == 0) GbSystem3D::writeGeoObject(wallZmin.get(), outputPath + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         //GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-         //if (myid == 0) GbSystem3D::writeGeoObject(wallZmax.get(), outputPath + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         ////wall interactors
-         //SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID));
-         //SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY));
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         //intHelper.addInteractor(wallZminInt);
-         //intHelper.addInteractor(wallZmaxInt);
-         intHelper.addInteractor(statorInt);
-         intHelper.addInteractor(rotorInt);
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
-         ppblocks->update(0);
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-         unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-         unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl);
-         real needMemAll = real(nodg * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4));
-         real needMem = needMemAll / real(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << nob);
-            UBLOG(logINFO, "Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         //BC
-         intHelper.setBC();
-
-         //initialization of distributions
-         InitDistributionsBlockVisitor initVisitor;
-         grid->accept(initVisitor);
-
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         restartSimulationObserver->restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-         SetBcBlocksBlockVisitor v1(rotorInt);
-         grid->accept(v1);
-         rotorInt->initInteractor();
-         SetBcBlocksBlockVisitor v2(statorInt);
-         grid->accept(v2);
-         statorInt->initInteractor();
-      }
-      
-      omp_set_num_threads(numOfThreads);
-
-      //set connectors
-      //InterpolationProcessorPtr iProcessor(new ThixotropyInterpolationProcessor());
-      //static_pointer_cast<ThixotropyInterpolationProcessor>(iProcessor)->setOmegaMin(thix->getOmegaMin());
-      //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-      //grid->accept(setConnsVisitor);
-
-      OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
-      grid->accept(setConnsVisitor);
-
-      grid->accept(bcVisitor);
-
-      SPtr<UbScheduler> geoSch(new UbScheduler(1));
-      WriteBoundaryConditionsSimulationObserver ppgeo = WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlASCII::getInstance(), comm);
-      ppgeo.update(0);
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-      SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
-
-      //write data for visualization of macroscopic quantities
-      SPtr<UbScheduler> visSch(new UbScheduler(outTime));
-      //SPtr<UbScheduler> visSch(new UbScheduler(10,1));
-      SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-      //writeMQSimulationObserver->update(0);
-
-      SPtr<UbScheduler> forceSch(new UbScheduler(100));
-      SPtr<CalculateTorqueSimulationObserver> fp = make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, outputPath + "/torque/TorqueRotor.txt", comm);
-      fp->addInteractor(rotorInt);
-      SPtr<CalculateTorqueSimulationObserver> fp2 = make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, outputPath + "/torque/TorqueStator.txt", comm);
-      fp2->addInteractor(statorInt);
-
-      SPtr<WriteThixotropyQuantitiesSimulationObserver> writeThixotropicMQSimulationObserver(new WriteThixotropyQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
-
-      SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
-      SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime));
-      simulation->addSimulationObserver(npr);
-      simulation->addSimulationObserver(fp);
-      simulation->addSimulationObserver(fp2);
-      simulation->addSimulationObserver(writeMQSimulationObserver);
-      simulation->addSimulationObserver(writeThixotropicMQSimulationObserver);
-      //simulation->addSimulationObserver(restartSimulationObserver);
-
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      simulation->run();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argv != NULL)
-   {
-      if (argv[1] != NULL)
-      {
-         //pflowForcing(string(argv[1]));
-         bflow(string(argv[1]));
-      }
-      else
-      {
-         cout << "Configuration file is missing!" << endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/rheometer/viscosity.cfg b/apps/cpu/rheometer/viscosity.cfg
deleted file mode 100644
index 065757939d9313c7caaf46ba34f7b989b61914f2..0000000000000000000000000000000000000000
--- a/apps/cpu/rheometer/viscosity.cfg
+++ /dev/null
@@ -1 +0,0 @@
-nuLB = 0.0123058 #1.5e-3
\ No newline at end of file
diff --git a/apps/cpu/sbone/CMakeLists.txt b/apps/cpu/sbone/CMakeLists.txt
deleted file mode 100644
index 42b4cbee942142b119ff4892a78894e0211c9feb..0000000000000000000000000000000000000000
--- a/apps/cpu/sbone/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(sbone)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(sbone BINARY)
diff --git a/apps/cpu/sbone/sbone.cpp b/apps/cpu/sbone/sbone.cpp
deleted file mode 100644
index b52aaa3ac6e40ec9550171125141edf28b3fd89d..0000000000000000000000000000000000000000
--- a/apps/cpu/sbone/sbone.cpp
+++ /dev/null
@@ -1,421 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <vfluids.h>
-
-using namespace std;
-
-
-void sbonepd(const char *configname)
-{
-   try
-   {
-
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname, pathGeo; 
-      int numOfThreads;
-      double availMem;
-
-      ConfigFileReader cf(configname);
-      if (!cf.read())
-      {
-         std::string exceptionText = "Unable to read configuration file\n";
-         throw exceptionText;
-      }
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if(machine == "BOMBADIL") 
-      {
-         numOfThreads = 4;
-         pathname = "d:/temp/sbone2";
-         pathGeo = "d:/Data/Bone/SmallBone";
-         availMem = 3.0e9;
-      }
-      else if(machine == "M01" || machine == "M02")      
-      {
-         numOfThreads = 8;
-         pathname = cf.getValue("pathname"); //"/work/koskuche/Bone/SmallBone";
-         pathGeo = cf.getValue("pathGeo"); //"/home/koskuche/data/Bone/SmallBone/vti";
-         availMem = 1.0e9;
-
-#if defined(__unix__)
-         if (myid == 0)
-         {
-            const char* str = pathname.c_str();
-            int status = mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-         }
-#endif 
-
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      if(myid==0) UBLOG(logINFO,"Testcase small bone");
-
-      //string boneFileName = pathGeo + "/sbone.stl";
-      string boneFileName = pathGeo + "/boneimage.vti";
-
-      double dx = 3.5e-3/175.0;
-
-      const int blocknx1 = 16;
-      const int blocknx2 = 16;
-      const int blocknx3 = 16;
-
-      LBMReal rho_LB = 0.0;
-      //nueWasser = 1e-6 m^2/s
-      double nu_real = 1e-6;
-      LBMReal dt = 5e-8; // s (frei gew�hlt)
-      //dx - frei gew�hlt
-      //
-      LBMReal nu_LB = nu_real/(dx*dx/dt);
-
-
-      //dp = 50000 Pa - 0 Pa = 50000 Pa
-      double dp_real = UbSystem::stringTo<double>(cf.getValue("pressure")); //5000;
-      //rho wasser = 1000 kg*m^-3
-      double rho_real = 1000;
-      //dp/rho = 50000/1000 = 50 m^2/s^2
-      double dp_div_rho_real = dp_real/rho_real;
-
-      double dp_LB = dp_div_rho_real/((dx/dt)*(dx/dt));
-
-      bool with_forcing = false;
-
-      double rhoLBinflow;
-      if (with_forcing)
-      {
-         rhoLBinflow = 0.0;
-      } 
-      else
-      {
-         rhoLBinflow = dp_LB*3.0;
-      }
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-      const int refineLevel = 0;
-
-
-      //////////////////////////////////////////////////////////////////////////
-      //bone STL
-      //GbTriFaceMesh3DPtr bone (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(boneFileName,"Netz"));
-      //if(myid == 0) GbSystem3D::writeGeoObject( bone.get(), pathname+"/geo/bone", WbWriterVtkXmlBinary::getInstance() );
-
-      string boneFilename = pathGeo + "/boneimage.vti";
-
-      int pmNX1=151;  //abmessung einzelbild in x-richtung
-      int pmNX2=101; //abmessung einzelbild in y richtung
-      int pmNX3=101; //anzahl der bilder
-      float lthreshold = 1.0;
-      float uthreshold = 255.0;
-
-      GbVoxelMatrix3DPtr bone(new GbVoxelMatrix3D(pmNX1,pmNX2,pmNX3,0,lthreshold,uthreshold));
-      bone->readMatrixFromVtiASCIIFile(boneFilename);
-      bone->setVoxelMatrixMininum(11.5, 8.01, 5.01);
-
-      double deltax = dx*1e3;
-      double deltaVoxel = 11e-3;
-      bone->setVoxelMatrixDelta(deltaVoxel, deltaVoxel, deltaVoxel);
-      bone->setLbGridDx(deltax);
-
-      if(myid == 0) bone->writeToLegacyVTKBinary(pathname+"/geo/bone");
-
-      //bounding box
-      double g_minX1 = bone->getX1Minimum()-0.25;
-      double g_minX2 = bone->getX2Minimum()-0.25;
-      double g_minX3 = bone->getX3Minimum()-0.25;
-
-      double g_maxX1 = bone->getX1Maximum()+0.25;
-      double g_maxX2 = bone->getX2Maximum()+0.25;
-      double g_maxX3 = bone->getX3Maximum()+0.25;
-
-      double blockLength = (double)blocknx1*deltax;
-
-      //double h = g_maxX2/2.0;
-      //double dpLB = (rhoLBinflow - rhoLB)/3.0;
-
-      //
-      //double dex = g_maxX1+1.0;
-      //double Umax = (1.0/(2.0*nueLB))*(dpLB/dex)*(h*h);
-
-      //double Re = (4*h*Umax)/(3*nueLB);
-
-      Grid3DPtr grid(new Grid3D(comm));
-      grid->setPeriodicX1(false);
-      grid->setPeriodicX2(false);
-      grid->setPeriodicX3(false);
-      grid->setDeltaX(deltax);
-      grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-      GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());      
-
-
-      GenBlocksGridVisitor genBlocks(gridCube);
-      grid->accept(genBlocks);
-
-      double forcing = 0;
-      if (with_forcing)
-      {
-         forcing = dp_LB/(blocknx1*grid->getNX1());
-      }
-
-      if(myid ==0)
-      {
-         UBLOG(logINFO,"Parameters:");
-         UBLOG(logINFO,"with forcing = " << with_forcing );
-         UBLOG(logINFO,"rho_LB = " << rho_LB );
-         UBLOG(logINFO,"nu_LB = " << nu_LB );
-         UBLOG(logINFO,"dp_LB = " << dp_LB );
-         UBLOG(logINFO,"forcing = " << forcing );
-         UBLOG(logINFO,"dx = " << dx << " m");
-         UBLOG(logINFO,"dt = " << dt << " s");
-         UBLOG(logINFO,"rho_real = " << rho_real << " kg*m^-3" );
-         UBLOG(logINFO,"nu_real = " << nu_real << " m^2/s" );
-         UBLOG(logINFO,"dp_real = " << dp_real << " Pa" );
-
-         UBLOG(logINFO,"number of levels = " << refineLevel+1 );
-         UBLOG(logINFO,"numOfThreads = " << numOfThreads );
-         UBLOG(logINFO,"path = " << pathname );
-         UBLOG(logINFO,"Preprozess - start");
-      }
-
-      //walls
-      GbCuboid3DPtr addWallYmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallYmax (new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallZmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallZmax (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-      //inflow
-      GbCuboid3DPtr geoInflow (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-      //outflow
-      GbCuboid3DPtr geoOutflow (new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-      BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-
-      //   if (refineLevel > 0)
-      //   {
-      //      if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-      //      RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-      //      refineHelper.refine();
-      //      if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-      //   }
-
-
-
-      //bone interactor
-      int bcOptionBone = 2; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall
-      D3Q27BoundaryConditionAdapterPtr bcBone(new D3Q27NoSlipBCAdapter(bcOptionBone));
-
-      D3Q27InteractorPtr boneInt(new D3Q27Interactor(bone, grid, bcBone,Interactor3D::SOLID));
-
-      //wall interactors
-      int bcOptionWall = 1; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall
-      D3Q27BoundaryConditionAdapterPtr bcWall(new D3Q27NoSlipBCAdapter(bcOptionWall));
-      D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcWall,Interactor3D::SOLID));
-      D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcWall,Interactor3D::SOLID));
-      D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcWall,Interactor3D::SOLID));
-      D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcWall,Interactor3D::SOLID));
-
-      //   //inflow
-      //   //double dp_Ph=0.1*10000.0;//dp in Bar
-      //   //double dp_lb=dp_Ph*0.001*(nueLB*dx)*(nueLB*dx);//nue_ph=10e-6
-      //   //if(myid == 0) UBLOG(logINFO,"dp_lb = " << dp_lb );
-      //   //double rhoLBinflow = 3.0*(dp_lb-rhoLB);
-
-      D3Q27BoundaryConditionAdapterPtr denBCAdapterInflow(new D3Q27DensityBCAdapter(rhoLBinflow));
-      denBCAdapterInflow->setSecondaryBcOption(0);
-      D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID));
-
-      //outflow
-      D3Q27BoundaryConditionAdapterPtr denBCAdapterOutflow(new D3Q27DensityBCAdapter(rho_LB));
-      denBCAdapterOutflow->setSecondaryBcOption(0);
-      D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow,Interactor3D::SOLID));
-
-      ////////////////////////////////////////////
-      //METIS
-      Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));   
-      ////////////////////////////////////////////
-      /////delete solid blocks
-      if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-      InteractorsHelper intHelper(grid, metisVisitor);
-      intHelper.addInteractor(boneInt);
-      intHelper.addInteractor(addWallYminInt);
-      intHelper.addInteractor(addWallYmaxInt);
-      intHelper.addInteractor(addWallZminInt);
-      intHelper.addInteractor(addWallZmaxInt);
-      intHelper.addInteractor(inflowInt);
-      intHelper.addInteractor(outflowInt);
-      intHelper.selectBlocks();
-      if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-      //////////////////////////////////////
-
-      //set connectors
-      D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-      D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-      grid->accept( setConnsVisitor );
-
-      //domain decomposition for threads
-      PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-      grid->accept(pqPartVisitor);
-
-      ppblocks->update(0);
-      ppblocks.reset();
-
-      unsigned long nob = grid->getNumberOfBlocks();
-      int gl = 3;
-      unsigned long nodb = (blocknx1) * (blocknx2) * (blocknx3);
-      unsigned long nod = nob * (blocknx1) * (blocknx2) * (blocknx3);
-      unsigned long nodg = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl);
-      double needMemAll  = double(nodg*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-      double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"Number of blocks = " << nob);
-         UBLOG(logINFO,"Number of nodes  = " << nod);
-         int minInitLevel = grid->getCoarsestInitializedLevel();
-         int maxInitLevel = grid->getFinestInitializedLevel();
-         for(int level = minInitLevel; level<=maxInitLevel; level++)
-         {
-            int nobl = grid->getNumberOfBlocks(level);
-            UBLOG(logINFO,"Number of blocks for level " << level <<" = " << nobl);
-            UBLOG(logINFO,"Number of nodes for level " << level <<" = " << nobl*nodb);
-         }
-         UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-         UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-         UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-      }            
-
-      LBMKernel3DPtr kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL));
-
-      //mu::Parser fctForcingX1;
-      //fctForcingX1.SetExpr("Fx1");
-      //fctForcingX1.DefineConst("Fx1", forcing);
-
-      //kernel->setForcingX1(fctForcingX1);
-      //kernel->setWithForcing(true);
-
-      BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor());
-      kernel->setBCProcessor(bcProc);
-
-      SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-      grid->accept(kernelVisitor);
-
-
-      //if (refineLevel > 0)
-      //{
-      //   D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-      //   grid->accept(undefNodesVisitor);
-      //}
-
-      //BC
-      intHelper.setBC();
-
-      //Press*1.6e8+(14.76-coordsX)/3.5*5000
-      //initialization of distributions
-      mu::Parser fct;
-      fct.SetExpr("(x1max-x1)/l*dp*3.0");
-      fct.DefineConst("dp", dp_LB);
-      fct.DefineConst("x1max", g_maxX1);
-      fct.DefineConst("l", g_maxX1-g_minX1);
-
-      D3Q27ETInitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB);
-      initVisitor.setRho(fct);
-      //initVisitor.setVx1(fct);
-      initVisitor.setVx1(0.0);
-      grid->accept(initVisitor);
-
-      //Postrozess
-      UbSchedulerPtr geoSch(new UbScheduler(1));
-      D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-         new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true));
-      ppgeo->update(0);
-      ppgeo.reset();
-
-      if(myid == 0) UBLOG(logINFO,"Preprozess - end"); 
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm);
-
-      double outTime = 1000;
-      UbSchedulerPtr stepSch(new UbScheduler(outTime));
-      stepSch->addSchedule(10,10,100);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv);
-
-
-      double dxd2 = deltax / 2.0;
-      D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, bone->getX1Minimum() - dxd2, bone->getX2Minimum() - dxd2, bone->getX3Minimum() - dxd2,
-         bone->getX1Maximum() + dxd2, bone->getX2Maximum() + dxd2, bone->getX3Maximum() + dxd2));
-      if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance());
-
-      double factorp = dp_real/dp_LB;
-      double factorv = dx/dt;
-      D3Q27MeanValuesPostprocessor mvp1(grid, stepSch, pathname + "/mv/mv1.txt", comm, ih1, factorp, factorv);
-
-
-      D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, g_maxX1-2.0*deltax, g_minX2, g_minX3,
-         g_maxX1 - deltax, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance());
-
-      D3Q27MeanValuesPostprocessor mvp2(grid, stepSch, pathname + "/mv/mv2.txt", comm, ih2, factorp, factorv);
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      double endTime = UbSystem::stringTo<double>(cf.getValue("endTime")); //100001;//10001.0;
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if ( argv != NULL )
-   {
-      sbonepd(argv[1]);
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/screw/CMakeLists.txt b/apps/cpu/screw/CMakeLists.txt
deleted file mode 100644
index c2fb4e44f90332302a1c6918b31223664b6e539a..0000000000000000000000000000000000000000
--- a/apps/cpu/screw/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(screw)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(screw BINARY)
diff --git a/apps/cpu/screw/config.txt b/apps/cpu/screw/config.txt
deleted file mode 100644
index 4929670dd07a16078a04b3878937bd8dfe5e9750..0000000000000000000000000000000000000000
--- a/apps/cpu/screw/config.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-pathname = d:/temp/screw
-numOfThreads = 4
-availMem = 8e9
-blocknx = 20 20 20
-
-uLB = 6.66666666667e-2
-Re  = 7000
-dx  = 0.0005
-
-endTime = 100000
-outTime = 10000
-
-restartStep = 10000
\ No newline at end of file
diff --git a/apps/cpu/screw/screw.cpp b/apps/cpu/screw/screw.cpp
deleted file mode 100644
index ad7c997743a0ad10b4301765aaf73392f61f4bcc..0000000000000000000000000000000000000000
--- a/apps/cpu/screw/screw.cpp
+++ /dev/null
@@ -1,257 +0,0 @@
-#include <VirtualFluids.h>
-
-using namespace std;
-
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   try
-   {
-      // Verify input arguments
-      if (argc != 2)
-      {
-         std::cout << "Usage: " << argv[0] << " <config file> " << std::endl;
-         return EXIT_FAILURE;
-      }
-
-      vf::basics::ConfigurationFile   config;
-      config.load(argv[1]);
-
-      string          pathname     = config.getString("pathname");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      vector<int>     blocknx      = config.getVector<int>("blocknx");
-      double          uLB          = config.getValue<double>("uLB");
-      double          Re           = config.getValue<double>("Re");
-      double          dx           = config.getValue<double>("dx");
-      double          endTime      = config.getValue<double>("endTime");
-      double          outTime      = config.getValue<double>("outTime");
-      double          availMem     = config.getValue<double>("availMem");
-      int             restartStep  = config.getValue<int>("restartStep");
-
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      double r = 150e-3;
-      double h = 45e-3;
-
-      //bounding box
-      double g_minX1 = 0;
-      double g_minX2 = 0;
-      double g_minX3 = 0;
-
-      double g_maxX1 = 2.0*sqrt(2.0*r*h-h*h);
-      double g_maxX2 = 45e-3;
-      double g_maxX3 = 10e-3;
-
-      
-
-      double blockLength = (double)blocknx[0]*dx;
-
-      double nuLB = (uLB*(h/dx))/Re;
-      double rhoLB = 0.0;
-
-      //bc
-      mu::Parser fctVx;
-      fctVx.SetExpr("omega*(r-x2)");
-      fctVx.DefineConst("omega", uLB);
-      fctVx.DefineConst("r", r);
-
-      mu::Parser fctVy;
-      fctVy.SetExpr("omega*(x1-k)");
-      fctVy.DefineConst("omega", uLB);
-      fctVy.DefineConst("k", g_maxX1*0.5);
-
-      mu::Parser fctVz;
-      fctVz.SetExpr("0.0");
-
-      SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, true, true, fctVx,fctVy,fctVz, 0, BCFunction::INFCONST));
-      velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
-
-      SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter());
-      slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm()));
-
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(slipBCAdapter);
-      bcVisitor.addBC(velBCAdapter);
-
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-      grid->setPeriodicX1(false);
-      grid->setPeriodicX2(false);
-      grid->setPeriodicX3(false);
-      grid->setDeltaX(dx);
-      grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-
-      SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-      if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> rSch(new UbScheduler(restartStep));
-      RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (grid->getTimeStep() == 0)
-      {
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "h = " << h);
-            UBLOG(logINFO, "rho = " << rhoLB);
-            UBLOG(logINFO, "nue = " << nuLB);
-            UBLOG(logINFO, "Re = " << Re);
-            UBLOG(logINFO, "dx = " << dx);
-
-            //UBLOG(logINFO, "number of levels = " << refineLevel + 1);
-            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
-            UBLOG(logINFO, "path = " << pathname);
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         //BC
-         SPtr<GbObject3D> cylinder(new GbCylinder3D(g_maxX1*0.5, r, g_minX3, g_maxX1*0.5, r, g_maxX3, r));
-         GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance());
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength,  g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         WriteBlocksSPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         //interactors
-         SPtr<D3Q27Interactor> cylinderInt(new D3Q27Interactor(cylinder, grid, velBCAdapter, Interactor3D::INVERSESOLID));
-         SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallZmax, grid, slipBCAdapter, Interactor3D::SOLID));
-
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         
-         intHelper.addInteractor(addWallYmaxInt);
-         intHelper.addInteractor(cylinderInt);
-
-         intHelper.selectBlocks();
-         if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-         unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-         unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl);
-         double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
-         double needMem = needMemAll / double(comm->getNumberOfProcesses());
-
-         if (myid == 0)
-         {
-            UBLOG(logINFO, "Number of blocks = " << nob);
-            UBLOG(logINFO, "Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level <= maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
-               UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
-            UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
-            UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
-         }
-
-         int kernelType = 2;
-         SPtr<LBMKernel> kernel;
-         kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], IncompressibleCumulantLBMKernel::NORMAL));
-         //kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], CompressibleCumulantLBMKernel::NORMAL));
-         
-         SPtr<BCProcessor> bcProc(new BCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         //BC
-         intHelper.setBC();
-
-         grid->accept(bcVisitor);
-
-         //initialization of distributions
-         InitDistributionsBlockVisitor initVisitor(nuLB, rhoLB);
-         initVisitor.setVx1(fctVx);
-         initVisitor.setVx2(fctVy);
-         initVisitor.setVx3(fctVz);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         SPtr<UbScheduler> geoSch(new UbScheduler(1));
-         WriteBoundaryConditionsSPtr<CoProcessor> ppgeo(
-            new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-         ppgeo->process(0);
-         ppgeo.reset();
-
-         if (myid == 0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         grid->accept(bcVisitor);
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         if (myid == 0) UBLOG(logINFO, "Restart - end");
-      }
-      SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm);
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTime));
-
-      WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm);
-
-      const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(stepSch);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::HYBRID));
-      if (myid == 0) UBLOG(logINFO, "Simulation-start");
-      calculation->calculate();
-      if (myid == 0) UBLOG(logINFO, "Simulation-end");
-
-      return EXIT_SUCCESS;
-   }
-   catch (std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch (std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch (...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
diff --git a/apps/cpu/shear/CMakeLists.txt b/apps/cpu/shear/CMakeLists.txt
deleted file mode 100644
index 5cf6013b9f40e71b05d69672b5d56bb5aef5ad2b..0000000000000000000000000000000000000000
--- a/apps/cpu/shear/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(shear)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(shear BINARY)
diff --git a/apps/cpu/shear/shear.cpp b/apps/cpu/shear/shear.cpp
deleted file mode 100644
index 6a154c57d62a99130934fd5d6f7ab747689ef35f..0000000000000000000000000000000000000000
--- a/apps/cpu/shear/shear.cpp
+++ /dev/null
@@ -1,514 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <vfluids.h>
-using namespace std;
-
-
-void run(const char *cstr)
-{
-   CommunicatorPtr comm(new MPICommunicator());
-   try
-   {
-      //Sleep(30000);
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname; 
-	  string geosphere;	  
-      int numOfThreads = 1;
-      double availMem = 0;
-
-      
-      int myid = comm->getProcessID();
-
-      if(machine == "BOMBADIL") 
-      {
-         pathname = "d:/temp/shear";
-         numOfThreads = 1;
-         availMem = 3.0e9;
-         geosphere = "d:/Data/Ehsan/Agglomerat_n_00020_fd_1.882437_r_0033.930997.txt";
-      }
-       else if(machine == "M01" || machine == "M02")      
-      {
-         pathname = "/work/koskuche/scratch/smallAgg80";
-		// geosphere = "/work/ehsan/data/Agglomerat4.txt";
-	   // geosphere = "/work/ehsan/data/Agglomerat_n_00060_fd_1.858514_r_0061.500327.txt";
-		// geosphere = "/work/ehsan/data/Agglomerat_n_00080_fd_1.855984_r_0071.870085.txt";
-		//geosphere = "/work/ehsan/data/Agglomerat_n_00040_fd_1.864231_r_0049.358563.txt";
-		//geosphere = "/work/ehsan/data/Agglomerat_n_00020_fd_1.882437_r_0033.930997.txt";
-		geosphere = "/work/ehsan/data/Agglomerat_n_00500_fd_1.850643_r_0193.702967.txt";
-      
-		
-		
-		
-         numOfThreads = 1;
-         availMem =1.0e10;// 12.0e9;
-
-         if(myid ==0)
-         {
-            stringstream logFilename;
-            logFilename <<  pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-	   }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-      double dx =0.1*4.0;
-
-	  double eq_Diameter=2.0*38.0;//55.3586;//61.5003;//80;//71.8701;//61.5003;
-      double L1 =35.0*eq_Diameter;
-      double L2, L3, H;
-      L2 = L3 = H =35.0*eq_Diameter;//1.0;//0.42*3.9;
-
-      LBMReal radius = 6.0;
-      LBMReal rhoReal = 1.0; //kg/m^3
-      //LBMReal uReal = 0.45;//m/s
-   //   LBMReal uLB = 0.05;
-      LBMReal Re = 0.1;
-      LBMReal rhoLB = 0.0;
-      LBMReal l = L2 / dx;
-
-      //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter(1.0, 1/sqrt(3.0)*(uReal/uLB), 1.0, 1.0/dx, dx*dx*dx));
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-      const int refineLevel = 5;  
-  
-     
-
-      //bounding box
-      double d_minX1 = 0.0;
-      double d_minX2 = 0.0;
-      double d_minX3 = 0.0;
-
-      double d_maxX1 = L1;
-      double d_maxX2 = L2;
-      double d_maxX3 = L3;
-
-	  const int blocknx1 = 8;
-      const int blocknx2 = 8;
-      const int blocknx3 = 8;
-
-      dx =14.4*2.0;// ( 0.9) *(double)(1<<refineLevel);
-
-	  double area =/* radius/dx;*/radius*radius*PI/(dx/(double)(1<<refineLevel))/(dx/(double)(1<<refineLevel));//2.0*radius*H;
-	  double nueReal=1e-6;//water
-	  double uReal=Re*nueReal/(2.0*radius);//real velocity
-	  double F_stokss=6*PI*.001/*water*/*radius*uReal;
-      //LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re;
-      LBMReal nueLB =.75/((double)(1<<refineLevel));// ((uLB)*2.0*(radius/dx))/Re;
-	//  LBMReal uLB  = ((nueLB)*Re)/ ( 2.0*(radius/dx));//base on the coarsest level
-	  LBMReal uLB  = ((0.75)*Re)/ ( 2.0*(radius/(dx/((double)(1<<refineLevel)))));//base on the coarsest level if nueLB =.75/((double)(1<<refineLevel)) and  dx = ( 0.9) *(double)(1<<refineLevel)
-  //     LBMReal uLB  = ((0.75)*Re)/ ((eq_Diameter/(dx/((double)(1<<refineLevel)))));//base on the coarsest level if nueLB =.75/((double)(1<<refineLevel)) and  dx = ( 0.9) *(double)(1<<refineLevel)
-	 double blockLength = blocknx1*dx;
-	
-
-		double xsphere=1.0*L1/2.0;//0.5;
-		double ysphere=L2/2.0;//0.75;
-		double zsphere=L3/2.0;//0.75;
- //obstacle
-    	 //////////////////////////////////////////////////////////////////////////
-	  UbFileInputASCII file;
-	  file.open(geosphere);
-	  //file.skipLine();file.skipLine();//2line skiped
-	  std::string NOP=file.readString();
-	  std::string NOP2=file.readString();
-	  const int numberOfParticles=file.readDouble();
-	  if(myid == 0){UBLOG(logINFO,__FILE__<<" " <<__LINE__<<" number of particles="<<numberOfParticles);}	
-	  //std::string Dia=file.readString();
-	  double diameter=2.0*radius;//12;//file.readDouble();
-	  file.skipLine();file.skipLine();file.skipLine();file.skipLine();file.skipLine();file.skipLine();file.skipLine();//7 line skiped
-			GbSphere3DPtr *sphereP=new GbSphere3DPtr[numberOfParticles];
-			  
-			for (int i=0;i<numberOfParticles;i++)
-			{
-			double x=file.readDouble();
-			double y=file.readDouble();
-			double z=file.readDouble();
-		///0degree in x direction		
-			    double x_rotation= x;
-			    double y_rotation= y;
-			    double z_rotation= z;
-///180degree in x direction		
-			   // double x_rotation= x;
-			   // double y_rotation= -y;
-			   // double z_rotation= -z;			   
-		///90degree in y direction	
-			  // double x_rotation=-z;
-			  // double y_rotation= y;
-			  // double z_rotation=x;			
-	   // ///90degree in z axis	
-			   // double x_rotation=-y;
-			   // double y_rotation=x;
-			   // double z_rotation=z;
-		//transfer	
-			double x_final=x_rotation/*/1450*/  +xsphere;
-			double y_final=y_rotation/*/1450*/  +ysphere;
-			double z_final=z_rotation/*/1450*/  +zsphere;
-				sphereP[i]=GbSphere3DPtr(new GbSphere3D(x_final, y_final, z_final, diameter/2.0/*/1450*/));
-				if(myid == 0)GbSystem3D::writeGeoObject(sphereP[i].get(),pathname + "/sphere/sphere"+ "_" + UbSystem::toString(i), WbWriterVtkXmlASCII::getInstance());
-			}
-			file.close();
-///////////////////////////////	
-       D3Q27InteractorPtr *spherePInt=new D3Q27InteractorPtr[numberOfParticles];	
-      double offs = dx;
-
-      //double g_minX1 = d_minX1-offs-0.499999*dx;
-      double g_minX1 = d_minX1-offs;
-      double g_minX2 = d_minX2-offs;
-      double g_minX3 = d_minX3-offs;
-
-      double g_maxX1 = d_maxX1+offs;
-      double g_maxX2 = d_maxX2+offs;
-      double g_maxX3 = d_maxX3+offs;
-			if(myid == 0){UBLOG(logINFO,__FILE__<<" " <<__LINE__);}	  
-      GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-			if(myid == 0){UBLOG(logINFO,__FILE__<<" " <<__LINE__);}	  
-      
-
-      //refinement area
-      double rf = 0.50*blockLength;
-      // GbObject3DPtr refineCube(new  GbCuboid3D(sphereP[0]->getX1Minimum()-rf*3.0/4.0, sphereP[3]->getX2Minimum()-rf*3.0/4.0, sphereP[5]->getX3Minimum()-rf*1.0/2.0, 
-         // sphereP[2]->getX1Maximum()+rf*3.0/4.0, sphereP[4]->getX2Maximum()+rf*3.0/4.0, sphereP[6]->getX3Maximum()+rf*1.0/2.0));
-		 
-		 //////////
-	   double level5=xsphere-(xsphere-eq_Diameter/2-0.50*(blocknx1*dx/pow(2.0,5)));//0.065;//.085;
-	   double level4=level5+.1*(blocknx1*dx/pow(2.0,4));//0.015;//0.1;
-	   double level3=level4+0.50*(blocknx1*dx/pow(2.0,3));//0.015;//0.115;
-	   double level2=level3+1.0*(blocknx1*dx/pow(2.0,2));//.035;//0.15;
-	   double level1=level2+1.0*(blocknx1*dx/pow(2.0,1));//.05;//0.2;
-	   
-	    GbCuboid3DPtr refineCube1(new GbCuboid3D(  xsphere-level1,ysphere-level1, zsphere-level1,xsphere+level1,ysphere+level1, zsphere+level1));
-	    GbCuboid3DPtr refineCube2(new GbCuboid3D(  xsphere-level2,ysphere-level2, zsphere-level2,xsphere+level2,ysphere+level2, zsphere+level2));
-		GbCuboid3DPtr refineCube3(new GbCuboid3D(  xsphere-level3,ysphere-level3, zsphere-level3,xsphere+level3,ysphere+level3, zsphere+level3));
-		GbCuboid3DPtr refineCube4(new GbCuboid3D(  xsphere-level4,ysphere-level4, zsphere-level4,xsphere+level4,ysphere+level4, zsphere+level4));
-		GbCuboid3DPtr refineCube5(new GbCuboid3D(  xsphere-level5,ysphere-level5, zsphere-level5,xsphere+level5,ysphere+level5, zsphere+level5));
-		 ///////////
-
-      Grid3DPtr grid(new Grid3D(comm));
-
-      UbSchedulerPtr rSch(new UbScheduler(100000, 100000));
-      //RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY));
-
-      //UbSchedulerPtr emSch(new UbScheduler(1000, 1000));
-      //EmergencyExitPostprocessor em(grid, emSch, pathname+"/checkpoints/emex.txt", rp, comm);
-
-      std::string opt;
-
-      if(cstr!= NULL)
-         opt = std::string(cstr);
-
-      if/*(cstr== NULL)*/(cstr!= NULL)
-      {
-         opt = std::string(cstr);
-
-         if(myid==0) UBLOG(logINFO,"Restart step: " << opt);
-
-         //grid = rp->restart(UbSystem::stringTo<int>(opt));
-         //rp->reconnect();
-
-         //cylinderInt = 
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-      }
-      else
-      {
-         if(myid ==0)
-         {
-            UBLOG(logINFO,"L = " << L2/dx );
-            UBLOG(logINFO,"v = " << uLB );
-            UBLOG(logINFO,"rho = " << rhoLB );
-            UBLOG(logINFO,"nue = " << nueLB );
-            UBLOG(logINFO,"Re = " << Re );
-			UBLOG(logINFO,"F_stokss = " << F_stokss );
-			UBLOG(logINFO,"dx = " << dx );
-            UBLOG(logINFO,conv->toString() );
-            UBLOG(logINFO,"Preprozess - start");
-         }
-
-         grid->setDeltaX(dx);
-         grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-		 grid->setPeriodicX1(false);
-         grid->setPeriodicX2(true);
-         grid->setPeriodicX3(true);
-
-         // UbTupleDouble6 bouningBox(gridCube->getX1Minimum(),gridCube->getX2Minimum(),gridCube->getX3Minimum(),
-         // gridCube->getX1Maximum(),gridCube->getX2Maximum(),gridCube->getX3Maximum());
-         // UbTupleInt3 blockNx(blocknx1, blocknx2, blocknx3);
-         // UbTupleInt3 gridNx(8, 16, 16);
-         // grid = Grid3DPtr(new Grid3D(bouningBox, blockNx, gridNx));
-
-         if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
- //        if(myid ==0) GbSystem3D::writeGeoObject(refineCube.get(),pathname + "/geo/refineCube", WbWriterVtkXmlBinary::getInstance());
- 
-         ////
-         if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-         if(myid ==0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname + "/geo/refineCube1", WbWriterVtkXmlBinary::getInstance());
-		 if(myid ==0) GbSystem3D::writeGeoObject(refineCube2.get(),pathname + "/geo/refineCube2", WbWriterVtkXmlBinary::getInstance());
-         if(myid ==0) GbSystem3D::writeGeoObject(refineCube3.get(),pathname + "/geo/refineCube3", WbWriterVtkXmlBinary::getInstance());
-		 if(myid ==0) GbSystem3D::writeGeoObject(refineCube4.get(),pathname + "/geo/refineCube4", WbWriterVtkXmlBinary::getInstance());
-		 if(myid ==0) GbSystem3D::writeGeoObject(refineCube5.get(),pathname + "/geo/refineCube5", WbWriterVtkXmlBinary::getInstance());
-		 ////
-		 
-         GenBlocksGridVisitor genBlocks;
-         genBlocks.addGeoObject(gridCube);
-         grid->accept(genBlocks);
-
-         //walls
-         GbCuboid3DPtr addWallYmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_minX2, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_minX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallYmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_maxX2, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-
-         GbCuboid3DPtr addWallZmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_maxX3, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-         //inflow
-         GbCuboid3DPtr geoInflow (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_minX1, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-         //outflow
-         GbCuboid3DPtr geoOutflow (new GbCuboid3D(d_maxX1, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-         if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-
-        if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-			RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-			refineHelper.addGbObject(refineCube5, refineLevel);
-			
-		//	refineHelper.addGbObject(refineCube1, refineLevel);
-			// refineHelper.addGbObject(refineCube2, refineLevel-1);
-			// refineHelper.addGbObject(refineCube3, refineLevel-2);
-			// refineHelper.addGbObject(refineCube4, refineLevel-3);
-			//refineHelper.addGbObject(refineCube5, refineLevel-4);
-			
-
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");   
-		 
-         }
-
-         MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B);
-         grid->accept( metisVisitor );
-
-         SolidBlocksHelper sd(grid, comm);
-
-         int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption));
-		 D3Q27BoundaryConditionAdapterPtr bcObst2(new D3Q27SlipBCAdapter(bbOption));
-        // cylinderInt = D3Q27InteractorPtr ( new D3Q27Interactor(cylinder, grid, bcObst,Interactor3D::SOLID));
-		
-			for (int i=0;i<numberOfParticles;i++)
-			{      
-				spherePInt[i]= D3Q27InteractorPtr( new D3Q27Interactor(sphereP[i], grid, bcObst,Interactor3D::SOLID));
-			}
-         //walls
-         D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcObst2,Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcObst2,Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcObst2,Interactor3D::SOLID));
-         D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcObst2,Interactor3D::SOLID));
-
-		  //for shear strees =0
-		 // D3Q27BoundaryConditionAdapterPtr velBCAdapter2(new D3Q27VelocityBCAdapter ());
-         // velBCAdapter2->setSecondaryBcOption(1);
-         // D3Q27InteractorPtr addWallYminInt  = D3Q27InteractorPtr( new D3Q27Interactor(addWallYmin, grid, velBCAdapter2, Interactor3D::SOLID));
-		 // D3Q27InteractorPtr addWallZminInt  = D3Q27InteractorPtr( new D3Q27Interactor(addWallZmin, grid, velBCAdapter2, Interactor3D::SOLID));
-		 // D3Q27InteractorPtr addWallYmaxInt  = D3Q27InteractorPtr( new D3Q27Interactor(addWallYmax, grid, velBCAdapter2, Interactor3D::SOLID));
-		 // D3Q27InteractorPtr addWallZmaxInt  = D3Q27InteractorPtr( new D3Q27Interactor(addWallZmax, grid, velBCAdapter2, Interactor3D::SOLID));
-
-		
-		 
-         mu::Parser fct;
-         //fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4");
-         //fct.DefineConst("U", uLB);
-         //fct.DefineConst("H", H);
-
-		 fct.SetExpr("U");
-         fct.DefineConst("U", uLB);
-         
-         //inflow
-         D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST));
-         velBCAdapter->setSecondaryBcOption(0);
-         D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
- 
-         //outflow
-         D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-         D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-	for (int i=0;i<numberOfParticles;i++)
-			{      
-				sd.addInteractor(spherePInt[i]  );
-			}
-         //sd.addInteractor(cylinderInt);
-         // sd.addInteractor(addWallYminInt);
-         // sd.addInteractor(addWallZminInt);
-         // sd.addInteractor(addWallYmaxInt);
-         // sd.addInteractor(addWallZmaxInt);
-         sd.addInteractor(inflowInt);
-         sd.addInteractor(outflowInt);
-if(myid == 0) UBLOG(logINFO,"delete - start"); 
-         sd.deleteSolidBlocks();
-if(myid == 0) UBLOG(logINFO,"delete - end"); 
-
-         grid->accept( metisVisitor );
-
-         sd.setTransBlocks();
-
-         ppblocks->update(0);
-         ppblocks.reset();
-
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nod = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl);
-
-         double needMemAll  = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-         }            
-
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3));
-         //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx1, blocknx2, blocknx3, true));
-         //option = 0 - ohne param., option = 1 - mit param.
-         int option = 0;
-       LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, option));
-      //   LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB_Geier(blocknx1, blocknx2, blocknx3, option));
-	 
-//	     LBMKernel3DPtr kernel(new  LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3, option));
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-         //walls
-        // grid->addAndInitInteractor(addWallYminInt);
-        // grid->addAndInitInteractor(addWallZminInt);
-        // grid->addAndInitInteractor(addWallYmaxInt);
-        // grid->addAndInitInteractor(addWallZmaxInt);
-
-         //obstacle
-         //grid->addAndInitInteractor(cylinderInt);
-			for (int i=0;i<numberOfParticles;i++)
-			{      
-				grid->addAndInitInteractor(spherePInt[i]  );
-			}
-
-         //inflow
-         grid->addAndInitInteractor(inflowInt);
-
-         //outflow
-         grid->addAndInitInteractor(outflowInt);
-
-         //domain decomposition
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //initialization of distributions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB);
-         initVisitor.setVx1(fct);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true));
- if(myid == 0) UBLOG(logINFO,"/grid/nodes");         
-		ppgeo->update(0);
-		 if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); 
-         ppgeo.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end"); 
-      }  
-      double outTime = 5000.0;
-      UbSchedulerPtr visSch(new UbScheduler(outTime));
-      visSch->addSchedule(1000, 1000, 10000);
-      visSch->addSchedule(10000, 10000, 50000);
-      visSch->addSchedule(1000, 1000, 100000);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm);
-
-      double fdx = grid->getDeltaX(grid->getFinestInitializedLevel());
-      double point1[3] = {0.45, 0.20, 0.205};
-      double point2[3] = {0.55, 0.20, 0.205};
-
-      D3Q27IntegrateValuesHelperPtr h1(new D3Q27IntegrateValuesHelper(grid, comm, 
-         point1[0]-1.0*fdx, point1[1]-1.0*fdx, point1[2]-1.0*fdx, 
-         point1[0], point1[1], point1[2]));
-      if(myid ==0) GbSystem3D::writeGeoObject(h1->getBoundingBox().get(),pathname + "/geo/iv1", WbWriterVtkXmlBinary::getInstance());
-      D3Q27IntegrateValuesHelperPtr h2(new D3Q27IntegrateValuesHelper(grid, comm, 
-         point2[0], point2[1]-1.0*fdx, point2[2]-1.0*fdx, 
-         point2[0]+1.0*fdx, point2[1], point2[2]));
-      if(myid ==0) GbSystem3D::writeGeoObject(h2->getBoundingBox().get(),pathname + "/geo/iv2", WbWriterVtkXmlBinary::getInstance());
-      //D3Q27PressureDifferencePostprocessor rhopp(grid, visSch, pathname + "/results/rho_diff.txt", h1, h2, conv, comm);
-      D3Q27PressureDifferencePostprocessor rhopp(grid, visSch, pathname + "/results/rho_diff.txt", h1, h2, rhoReal, uReal, uLB, comm);
-    
-      
-      double v    = uLB;//4.0*uLB/9.0;
-    //  D3Q27ForcesPostprocessor fp(grid, visSch, pathname + "/results/forces.txt", comm, rhoLB, v, area, D3Q27ForcesPostprocessor::X, D3Q27ForcesPostprocessor::Y, D3Q27ForcesPostprocessor::Z);
-    //      for (int i=0;i<numberOfParticles;i++)
-			 //{      
-				// fp.addInteractor(spherePInt[i]  );
-			 //}
-	  
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 40));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-      double endTime = 65001.0;
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-
-   run(argv[1]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/sphere/sphere.cpp b/apps/cpu/sphere/sphere.cpp
index 6809d2a9fd501da2cc3205bf697dc68c1b788ed8..1fbe40b29c11555733378435dc9b2b44387e29fd 100644
--- a/apps/cpu/sphere/sphere.cpp
+++ b/apps/cpu/sphere/sphere.cpp
@@ -44,9 +44,9 @@ void run(string configname)
 //      double rhoLBinflow = dp_LB*3.0;
 
       SPtr<BC> noSlipBC(new NoSlipBC());
-      noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+      noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated()));
       SPtr<BC> slipBC(new SlipBC());
-      slipBC->setBCStrategy(SPtr<BCStrategy>(new SimpleSlipBCStrategy()));
+      slipBC->setBCStrategy(SPtr<BCStrategy>(new SlipBounceBack()));
       
       real H = 50;
       mu::Parser fct;
@@ -57,17 +57,13 @@ void run(string configname)
       //fct.DefineConst("U", uLB);
       //fct.DefineConst("H", H);
       SPtr<BC> velBC(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST));
-      //velBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy()));
-      velBC->setBCStrategy(SPtr<BCStrategy>(new SimpleVelocityBCStrategy()));
+      //velBC->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated()));
+      velBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBounceBack()));
 
-      SPtr<BC> denBC(new DensityBC(rhoLB));
-      denBC->setBCStrategy(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
+      SPtr<BC> denBC(new PressureBC(rhoLB));
+      denBC->setBCStrategy(SPtr<BCStrategy>(new PressureNonEquilibrium()));
 
       BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBC);
-      bcVisitor.addBC(slipBC);
-      bcVisitor.addBC(velBC);
-      bcVisitor.addBC(denBC);
 
       real dx = 1;
 
@@ -216,8 +212,8 @@ void run(string configname)
             UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
          }
 
-         SPtr<LBMKernel> kernel(new IncompressibleCumulantLBMKernel());
-         //SPtr<LBMKernel> kernel(new CompressibleCumulantLBMKernel());
+         SPtr<LBMKernel> kernel(new K16IncompressibleNavierStokes());
+         //SPtr<LBMKernel> kernel(new K15CompressibleNavierStokes());
 
          SPtr<BCSet> bcSet(new BCSet());
 
diff --git a/apps/cpu/stick/CMakeLists.txt b/apps/cpu/stick/CMakeLists.txt
deleted file mode 100644
index 8a8270faa4222ad583aa07ef2d1cb8e10622ba97..0000000000000000000000000000000000000000
--- a/apps/cpu/stick/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(stick)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(stick BINARY)
diff --git a/apps/cpu/stick/stick.cpp b/apps/cpu/stick/stick.cpp
deleted file mode 100644
index 8bbc820001c2e5e5b87c268d95bfce4f5323df70..0000000000000000000000000000000000000000
--- a/apps/cpu/stick/stick.cpp
+++ /dev/null
@@ -1,232 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <boost/pointer_cast.hpp>
-
-#include "vfluids.h"
-
-using namespace std;
-
-
-
-void main()
-{
-
-   try
-   {
-      string machine = QUOTEME(CAB_MACHINE);
-      string pathname = "d:/temp/stick"; 
-      int numOfThreads = 4;
-      double availMem = 10e9;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      double dx = 1;
-
-      const int blocknx1 = 10;
-      const int blocknx2 = 10;
-      const int blocknx3 = 10;
-
-      const int gridNx1 = 60;
-      const int gridNx2 = 1;
-      const int gridNx3 = 8;
-
-      double L1 = gridNx1*blocknx1;
-      double L2, L3;
-      L2 = gridNx2*blocknx1;
-      L3 = gridNx3*blocknx1;
-
-      LBMReal radius = 1.0*dx;
-      LBMReal uLB = 0.07;
-      LBMReal Re = 1000.0;
-      LBMReal rhoLB = 0.0;
-      LBMReal nueLB = (uLB*1.0*radius)/Re;
-
-      LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      Grid3DPtr grid(new Grid3D(comm));
-      grid->setDeltaX(dx);
-      grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-      grid->setPeriodicX1(false);
-      grid->setPeriodicX2(true);
-      grid->setPeriodicX3(false);
-
-      const int baseLevel = 0;
-      const int refineLevel = 0;
-
-      //bounding box
-      double d_minX1 = 0.0;
-      double d_minX2 = 0.0;
-      double d_minX3 = 0.0;
-
-      double d_maxX1 = L1;
-      double d_maxX2 = L2;
-      double d_maxX3 = L3;
-
-      double blockLength = blocknx1*dx;
-
-      if(myid ==0)
-      {
-         UBLOG(logINFO,"Parameters:");
-         UBLOG(logINFO,"uLB = " << uLB );
-         UBLOG(logINFO,"rhoLB = " << rhoLB );
-         UBLOG(logINFO,"nueLB = " << nueLB );
-         UBLOG(logINFO,"Re = " << Re );
-         UBLOG(logINFO,"dx = " << dx );
-         UBLOG(logINFO,"number of levels = " << refineLevel+1 );
-         UBLOG(logINFO,"numOfThreads = " << numOfThreads );
-         UBLOG(logINFO,"Preprozess - start");
-      }
-
-      GbObject3DPtr gridCube(new GbCuboid3D(d_minX1, d_minX2, d_minX3, d_maxX1, d_maxX2, d_maxX3));
-      if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); 
-
-      GenBlocksGridVisitor genBlocks(gridCube);
-      grid->accept(genBlocks);
-
-      //cylinder
-      //GbObject3DPtr cylinder(new GbCylinder3D(L1/4.0, -2.0, radius, L1/4.0, L2+2.0, radius, radius));
-      //GbSystem3D::writeGeoObject(cylinder.get(),pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance());
-
-      GbCuboid3DPtr stick (new GbCuboid3D(L1/4.0, -2.0, 0.0, L1/4.0+150.0, L2+2.0, radius*3.0));
-      if(myid == 0) GbSystem3D::writeGeoObject(stick.get(), pathname+"/geo/stick", WbWriterVtkXmlASCII::getInstance());
-
-      //walls
-      GbCuboid3DPtr addWallZmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_minX3));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-
-      GbCuboid3DPtr addWallZmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_maxX3, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-
-      //inflow
-      GbCuboid3DPtr geoInflow (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_minX1, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-
-      //outflow
-      GbCuboid3DPtr geoOutflow (new GbCuboid3D(d_maxX1, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength));
-      if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-      BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm));
-
-
-      //cylinder
-      int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB
-      D3Q27BoundaryConditionAdapterPtr noSlip(new D3Q27NoSlipBCAdapter(bbOption));
-      D3Q27InteractorPtr cylinderInt = D3Q27InteractorPtr ( new D3Q27Interactor(stick, grid, noSlip,Interactor3D::SOLID));
-
-      //walls
-      D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlip,Interactor3D::SOLID));
-      D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlip,Interactor3D::SOLID));
-
-      mu::Parser fct;
-      fct.SetExpr("U");
-      fct.DefineConst("U", uLB);
-
-      //inflow
-      D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST));
-      velBCAdapter->setSecondaryBcOption(2);
-      D3Q27InteractorPtr inflowInt  = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID));
-
-      //outflow
-      D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB));
-      D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID));
-
-      Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
-      InteractorsHelper intHelper(grid, metisVisitor);
-      intHelper.addInteractor(cylinderInt);
-      intHelper.addInteractor(addWallZminInt);
-      intHelper.addInteractor(addWallZmaxInt);
-      intHelper.addInteractor(inflowInt);
-      intHelper.addInteractor(outflowInt);
-      intHelper.selectBlocks();
-
-      //domain decomposition for threads
-      PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-      grid->accept(pqPartVisitor);
-
-      ppblocks->update(0);
-      ppblocks.reset();
-
-      //set connectors
-      D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-      D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor);
-      grid->accept( setConnsVisitor );
-
-      unsigned long nob = grid->getNumberOfBlocks();
-      int gl = 3;
-      unsigned long nod = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl);
-
-      double needMemAll  = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4));
-      double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"Number of blocks = " << nob);
-         UBLOG(logINFO,"Number of nodes  = " << nod);
-         UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-         UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-         UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-      }            
-
-      LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL));
-
-      BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-      kernel->setBCProcessor(bcProc);
-
-      SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem);
-      grid->accept(kernelVisitor);
-
-      intHelper.setBC();
-
-      //initialization of distributions
-      D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB);
-      initVisitor.setVx1(fct);
-      grid->accept(initVisitor);
-
-      //Postrozess
-      UbSchedulerPtr geoSch(new UbScheduler(1));
-      D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-         new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true));
-      ppgeo->update(0);
-      ppgeo.reset();
-
-      if(myid == 0) UBLOG(logINFO,"Preprozess - end"); 
-
-      UbSchedulerPtr stepSch(new UbScheduler(10000));
-      //stepSch->addSchedule(1000, 0, 1000000);
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv);
-
-      //InSituVTKPostprocessor isp(grid, stepSch, "d:/Data/insituDemo/metafile.csv", conv);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100));
-      NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm);
-
-
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, 1000000, stepSch));
-
-      if(myid == 0) 
-         UBLOG(logINFO,"Simulation-start");
-
-      calculation->calculate();
-
-      if(myid == 0) 
-         UBLOG(logINFO,"Simulation-end");
-
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-
-
diff --git a/apps/cpu/teperm/CMakeLists.txt b/apps/cpu/teperm/CMakeLists.txt
deleted file mode 100644
index 848ac938ec07d34eb90797de7bdecdcc38728396..0000000000000000000000000000000000000000
--- a/apps/cpu/teperm/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(teperm)
-
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(teperm BINARY)
diff --git a/apps/cpu/teperm/TE-PA80-110gradiert6mm_1.cfg b/apps/cpu/teperm/TE-PA80-110gradiert6mm_1.cfg
deleted file mode 100644
index 988ac261d2b0b2d889ce6707cf946d1686f7c547..0000000000000000000000000000000000000000
--- a/apps/cpu/teperm/TE-PA80-110gradiert6mm_1.cfg
+++ /dev/null
@@ -1,70 +0,0 @@
-#pathname = /work/i5042202/6mm_dir2_results/TE-PA80-110gradiertII/TE_3-part-1
-#pathGeo = /work/i5042202/data/6mm5parts/TE-PA80-110gradiert_II
-
-pathname = d:/temp/teperm
-pathGeo = d:/Data/teperm
-
-numOfThreads = 4
-availMem = 6e9
-logToFile = faöse
-
-#porous media
-rawFile = true
-#sampleFilename = /part1_345x447x447.raw
-sampleFilename = /part10_45x225x225.raw
-
-#diminsions [voxel]
-#pmNX1 = 345
-#pmNX2 = 447 
-#pmNX3 = 447
-
-pmNX1 = 45
-pmNX2 = 225 
-pmNX3 = 225
-
-
-#threshold
-lthreshold = 7874
-uthreshold = 65535
-
-#deltas [m]
-pmDeltaX1 = 13393e-9
-pmDeltaX2 = 13393e-9
-pmDeltaX3 = 13393e-9
-
-yDir = true
-zDir = false
-
-#grid
-blocknx = 30
-deltax = 13303.71333e-9
-
-spongeLayer=false
-
-#physic
-newPressure = false
-dp_LB = 1e-6
-newViscosity = false
-nu_LB = 0.01
-
-vx1=0
-vx2=0
-vx3=0
-
-timeSeriesFile = /timeseries/1
-timeSeriesOutTime = 1000
-
-newStart    = true
-restartStep = 1000
-chunk = 100
-
-cpStep  = 1000
-cpStepStart = 1000
-
-outTimeStep  = 1000
-outTimeStart = 1000
-
-nupsStep = 100 1000 10000000
-
-endTime = 1000
- 
diff --git a/apps/cpu/teperm/teperm.cpp b/apps/cpu/teperm/teperm.cpp
deleted file mode 100644
index 78e57d8ef8200c8b0552d7b2670ca43c973e9182..0000000000000000000000000000000000000000
--- a/apps/cpu/teperm/teperm.cpp
+++ /dev/null
@@ -1,601 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include <VirtualFluids.h>
-
-
-using namespace std;
-
-void changeDP()
-{
-}
-//////////////////////////////////////////////////////////////////////////
-void run(string configname)
-{
-   try
-   {
-      vf::basics::ConfigurationFile   config;
-      config.load(configname);
-
-      string          pathname = config.getString("pathname");
-      string          pathGeo = config.getString("pathGeo");
-      int             numOfThreads = config.getValue<int>("numOfThreads");
-      string          sampleFilename = config.getString("sampleFilename");
-      int             pmNX1 = config.getValue<int>("pmNX1");
-      int             pmNX2 = config.getValue<int>("pmNX2");
-      int             pmNX3 = config.getValue<int>("pmNX3");
-      double          lthreshold = config.getValue<double>("lthreshold");
-      double          uthreshold = config.getValue<double>("uthreshold");
-      //double          pmL1 = config.getValue<double>("pmL1");
-      //double          pmL2 = config.getValue<double>("pmL2");
-      //double          pmL3 = config.getValue<double>("pmL3");
-      int             blocknx = config.getValue<int>("blocknx");
-      //double          nx3 = config.getValue<double>("nx3");
-      double          dp_LB = config.getValue<double>("dp_LB");
-      double          nu_LB = config.getValue<double>("nu_LB");
-      string          timeSeriesFile = config.getString("timeSeriesFile");
-      double          restartStep = config.getValue<double>("restartStep");
-      //double          restartStepStart = config.getValue<double>("restartStepStart");
-      int          endTime = config.getValue<int>("endTime");
-      double          outTimeStep = config.getValue<double>("outTimeStep");
-      double          outTimeStart = config.getValue<double>("outTimeStart");
-      double          availMem = config.getValue<double>("availMem");
-      bool            rawFile = config.getValue<bool>("rawFile");
-      double          timeSeriesOutTime = config.getValue<double>("timeSeriesOutTime");
-      bool            logToFile = config.getValue<bool>("logToFile");
-      bool            spongeLayer = config.getValue<bool>("spongeLayer");
-      vector<double>  nupsStep = config.getVector<double>("nupsStep");
-      double          deltax = config.getValue<double>("deltax");
-      bool            newViscosity = config.getValue<bool>("newViscosity");
-      bool            newPressure = config.getValue<bool>("newPressure");
-      //bool            pmDeltas = config.getValue<bool>("pmDeltas");
-      double          pmDeltaX1 = config.getValue<double>("pmDeltaX1");
-      double          pmDeltaX2 = config.getValue<double>("pmDeltaX2");
-      double          pmDeltaX3 = config.getValue<double>("pmDeltaX3");
-      double          vx1 = config.getValue<double>("vx1");
-      double          vx2 = config.getValue<double>("vx2");
-      double          vx3 = config.getValue<double>("vx3");
-      bool            yDir = config.getValue<bool>("yDir");
-      bool            zDir = config.getValue<bool>("zDir");
-      double          cpStep = config.getValue<double>("cpStep");
-      double          cpStepStart = config.getValue<double>("cpStepStart");
-      bool            newStart = config.getValue<bool>("newStart");
-      int             chunk = config.getValue<int>("chunk");
-
-
-      SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      if (logToFile)
-      {
-#if defined(__unix__)
-         if (myid==0)
-         {
-            const char* str = pathname.c_str();
-            int status = mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
-         }
-#endif 
-
-         if (myid==0)
-         {
-            stringstream logFilename;
-            logFilename<<pathname+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt";
-            UbLog::output_policy::setStream(logFilename.str());
-         }
-      }
-
-      if (myid==0) UBLOG(logINFO, "Testcase permeability");
-
-      //string machinename = UbSystem::getMachineName();
-      //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename);
-      //UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-      //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-      //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-
-      int blocknx1 = blocknx;
-      int blocknx2 = blocknx;
-      int blocknx3 = blocknx;
-
-      LBMReal rho_LB = 0.0;
-      double rhoLBinflow = dp_LB*3.0;
-
-      SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
-
-      const int baseLevel = 0;
-
-      double coord[6];
-      //double deltax;
-
-      SPtr<Grid3D> grid(new Grid3D(comm));
-
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel());
-      SPtr<BCProcessor> bcProc;
-      bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor());
-      kernel->setBCProcessor(bcProc);
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStepStart));
-      SPtr<MPIIORestartCoProcessor> restartCoProcessor(new MPIIORestartCoProcessor(grid, rSch, pathname, comm));
-      restartCoProcessor->setLBMKernel(kernel);
-      restartCoProcessor->setBCProcessor(bcProc);
-      //////////////////////////////////////////////////////////////////////////
-
-      //BC Adapter
-      //////////////////////////////////////////////////////////////////////////////
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm()));
-
-      SPtr<BCAdapter> denBCAdapterInflow(new DensityBCAdapter(rhoLBinflow));
-      denBCAdapterInflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
-
-      SPtr<BCAdapter> denBCAdapterOutflow(new DensityBCAdapter(rho_LB));
-      denBCAdapterOutflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
-      //////////////////////////////////////////////////////////////////////////////////
-      //BS visitor
-      BoundaryConditionsBlockVisitor bcVisitor;
-      bcVisitor.addBC(noSlipBCAdapter);
-      bcVisitor.addBC(denBCAdapterInflow);
-      bcVisitor.addBC(denBCAdapterOutflow);
-
-      if (newStart)
-      {
-         if (myid==0) UBLOG(logINFO, "new start..");
-         if (myid==0) UBLOG(logINFO, "preprocess start..");
-
-         //UBLOG(logINFO, "new start PID = " << myid << " Hostname: " << machinename);
-         //UBLOG(logINFO, "new start PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-
-         string samplePathname = pathGeo+sampleFilename;
-
-         double deltaVoxelX1 = pmDeltaX1;
-         double deltaVoxelX2 = pmDeltaX2;
-         double deltaVoxelX3 = pmDeltaX3;
-
-         if (myid==0) UBLOG(logINFO, "read voxel matrix: start");
-         ////////////////////////////////////////////////////////////////////////////////////////////////////////////         
-         SPtr<GbVoxelMatrix3D> sample1(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         if (rawFile)
-         {
-            sample1->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-         }
-         else
-         {
-            sample1->readMatrixFromVtiASCIIFile(samplePathname);
-         }
-         sample1->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-         sample1->setVoxelMatrixMininum(0.0, 0.0, 0.0);
-
-         if (myid==0) UBLOG(logINFO, "sample1: rotate voxel matrix: start");
-         if (yDir)
-         {
-            sample1->rotate90aroundZ();
-         }
-         else if (zDir)
-         {
-            sample1->rotate90aroundY();
-         }
-         if (myid==0) UBLOG(logINFO, "sample1: rotate voxel matrix: end");
-         
-         if (myid==0) sample1->writeToVTKImageDataAppended(pathname+"/geo/sample1");
-///////////////////////////////////////////////////////////////////////////////////////////////////////////         
-         SPtr<GbVoxelMatrix3D> sample2(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         if (rawFile)
-         {
-            sample2->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-         }
-         else
-         {
-            sample2->readMatrixFromVtiASCIIFile(samplePathname);
-         }
-         sample2->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-         sample2->setVoxelMatrixMininum(0.0, sample1->getX2Maximum(), 0.0);
-         if (myid==0) UBLOG(logINFO, "read voxel matrix: end");
-
-         if (myid==0) UBLOG(logINFO, "sample2: rotate voxel matrix: start");
-         if (yDir)
-         {
-            sample2->rotate90aroundZ();
-            sample2->setVoxelMatrixMinX2(sample1->getX2Maximum());
-         }
-         else if (zDir)
-         {
-            sample2->rotate90aroundY();
-         }
-
-         sample2->mirrorY();
-
-         if (myid==0) UBLOG(logINFO, "sample2: rotate voxel matrix: end");
-
-         if (myid==0) sample2->writeToVTKImageDataAppended(pathname+"/geo/sample2");
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         SPtr<GbVoxelMatrix3D> sample3(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         if (rawFile)
-         {
-            sample3->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-         }
-         else
-         {
-            sample3->readMatrixFromVtiASCIIFile(samplePathname);
-         }
-         sample3->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-         sample3->setVoxelMatrixMininum(0.0, 0.0, sample1->getX3Maximum());
-         if (myid == 0) UBLOG(logINFO, "read voxel matrix: end");
-
-         if (myid==0) UBLOG(logINFO, "sample3: rotate voxel matrix: start");
-         if (yDir)
-         {
-            sample3->rotate90aroundZ();
-         }
-         else if (zDir)
-         {
-            sample3->rotate90aroundY();
-         }
-         sample3->mirrorZ();
-         if (myid==0) UBLOG(logINFO, "sample3: rotate voxel matrix: end");
-
-         if (myid==0) sample3->writeToVTKImageDataAppended(pathname+"/geo/sample3");
-
-         ////////////////////////////////////////////////////////////////////////////////////////////////////////////         
-         SPtr<GbVoxelMatrix3D> sample4(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold));
-         if (rawFile)
-         {
-            sample4->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian);
-         }
-         else
-         {
-            sample4->readMatrixFromVtiASCIIFile(samplePathname);
-         }
-         sample4->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3);
-         sample4->setVoxelMatrixMininum(0.0, sample1->getX1Maximum(), sample1->getX3Maximum());
-         if (myid == 0) UBLOG(logINFO, "read voxel matrix: end");
-
-         if (myid==0) UBLOG(logINFO, "sample4: rotate voxel matrix: start");
-
-         if (yDir)
-         {
-            sample4->rotate90aroundZ();
-            sample4->setVoxelMatrixMinX2(sample1->getX2Maximum());
-            sample4->setVoxelMatrixMinX3(sample1->getX3Maximum());
-         }
-         else if (zDir)
-         {
-            sample4->rotate90aroundY();
-         }
-         sample4->mirrorY();
-         sample4->mirrorZ();
-         if (myid==0) UBLOG(logINFO, "sample4: rotate voxel matrix: end");
-
-         if (myid==0) sample4->writeToVTKImageDataAppended(pathname+"/geo/sample4");
-
-         ///////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////
-
-         double offset1 = sample1->getLengthX1()/10.0;
-         double offset2 = 2.0*offset1;
-         //double offset2 = offset1;
-         //bounding box
-         double g_minX1 = sample1->getX1Minimum()-offset1;
-         double g_minX2 = sample1->getX2Minimum()-0.5*deltax;
-         double g_minX3 = sample1->getX3Minimum()-0.5*deltax;
-
-         double g_maxX1 = sample1->getX1Maximum()+offset2;
-         double g_maxX2 = sample4->getX2Maximum()-0.5*deltax;
-         double g_maxX3 = sample4->getX3Maximum()-0.5*deltax;
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "g_minX1="<<g_minX1<<",g_minX2="<<g_minX2<<",g_minX3="<<g_minX3<<",g_maxX1="<<g_maxX1<<",g_maxX2="<<g_maxX2<<",g_maxX3="<<g_maxX3);
-         }
-
-         double blockLength = (double)blocknx1*deltax;
-
-         grid->setPeriodicX1(false);
-         grid->setPeriodicX2(true);
-         grid->setPeriodicX3(true);
-         grid->setDeltaX(deltax);
-         grid->setBlockNX(blocknx1, blocknx2, blocknx3);
-
-         SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlBinary::getInstance());
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Parameters:");
-            UBLOG(logINFO, "rho_LB = "<<rho_LB);
-            UBLOG(logINFO, "nu_LB = "<<nu_LB);
-            UBLOG(logINFO, "dp_LB = "<<dp_LB);
-            UBLOG(logINFO, "dx = "<<deltax<<" m");
-            UBLOG(logINFO, "numOfThreads = "<<numOfThreads);
-            UBLOG(logINFO, "path = "<<pathname);
-            UBLOG(logINFO, "Preprozess - start");
-         }
-
-         //inflow
-         GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-         //outflow
-         GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength));
-         if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
-         SPtr<WriteBlocksCoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-
-         //PM interactor
-         SPtr<D3Q27Interactor> sample1Int(new D3Q27Interactor(sample1, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> sample2Int(new D3Q27Interactor(sample2, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> sample3Int(new D3Q27Interactor(sample3, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         SPtr<D3Q27Interactor> sample4Int(new D3Q27Interactor(sample4, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         //inflow
-         SPtr<D3Q27Interactor> inflowInt(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID));
-         //outflow
-         SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID));
-
-         ////////////////////////////////////////////
-         //METIS
-         SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE));
-         ////////////////////////////////////////////
-
-         /////delete solid blocks
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         intHelper.addInteractor(inflowInt);
-         intHelper.addInteractor(outflowInt);
-         intHelper.addInteractor(sample1Int);
-         intHelper.addInteractor(sample2Int);
-         intHelper.addInteractor(sample3Int);
-         intHelper.addInteractor(sample4Int);
-         intHelper.selectBlocks();
-         if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end");
-         //////////////////////////////////////
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         ppblocks->process(0);
-         ppblocks.reset();
-
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         int gl = 3;
-         unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3);
-         unsigned long nodg = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl);
-         double needMemAll = double(nodg*(27*sizeof(double)+sizeof(int)+sizeof(float)*4));
-         double needMem = needMemAll/double(comm->getNumberOfProcesses());
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Number of blocks = "<<nob);
-            UBLOG(logINFO, "Number of nodes  = "<<nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for (int level = minInitLevel; level<=maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO, "Number of blocks for level "<<level<<" = "<<nobl);
-               UBLOG(logINFO, "Number of nodes for level "<<level<<" = "<<nobl*nodb);
-            }
-            UBLOG(logINFO, "Necessary memory  = "<<needMemAll<<" bytes");
-            UBLOG(logINFO, "Necessary memory per process = "<<needMem<<" bytes");
-            UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes");
-         }
-
-         kernel->setBCProcessor(bcProc);
-
-         SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem);
-         grid->accept(kernelVisitor);
-
-         //BC
-         intHelper.setBC();
-
-         //BS visitor
-         grid->accept(bcVisitor);
-
-         //Press*1.6e8+(14.76-coordsX)/3.5*5000
-         //initialization of distributions
-         mu::Parser fct;
-         fct.SetExpr("(x1max-x1)/l*dp*3.0");
-         fct.DefineConst("dp", dp_LB);
-         fct.DefineConst("x1max", g_maxX1);
-         fct.DefineConst("l", g_maxX1-g_minX1);
-
-         InitDistributionsBlockVisitor initVisitor;
-         initVisitor.setRho(fct);
-         grid->accept(initVisitor);
-
-         //Postrozess
-         SPtr<UbScheduler> geoSch(new UbScheduler(1));
-         SPtr<WriteBoundaryConditionsCoProcessor> ppgeo(
-            new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-         ppgeo->process(0);
-         ppgeo.reset();
-
-         coord[0] = sample1->getX1Minimum();
-         coord[1] = sample1->getX2Minimum();
-         coord[2] = sample1->getX3Minimum();
-         coord[3] = sample4->getX1Maximum();
-         coord[4] = sample4->getX2Maximum();
-         coord[5] = sample4->getX3Maximum();
-
-         ////////////////////////////////////////////////////////
-         UbFileOutputASCII outf(pathname+"/checkpoints/coord.txt");
-         outf.writeDouble(deltax);
-         outf.writeDouble(coord[0]);
-         outf.writeDouble(coord[1]);
-         outf.writeDouble(coord[2]);
-         outf.writeDouble(coord[3]);
-         outf.writeDouble(coord[4]);
-         outf.writeDouble(coord[5]);
-         outf.writeDouble(g_minX1);
-         outf.writeDouble(g_maxX1);
-         outf.writeDouble(availMem);
-         outf.writeDouble(needMem);
-         ////////////////////////////////////////////////////////
-
-         grid->addInteractor(inflowInt);
-
-         if (myid==0) UBLOG(logINFO, "Preprozess - end");
-      }
-      else
-      {
-         ////////////////////////////////////////////////////////
-         UbFileInputASCII inf(pathname+"/checkpoints/coord.txt");
-         deltax = inf.readDouble();
-         coord[0] = inf.readDouble();
-         coord[1] = inf.readDouble();
-         coord[2] = inf.readDouble();
-         coord[3] = inf.readDouble();
-         coord[4] = inf.readDouble();
-         coord[5] = inf.readDouble();
-         double g_minX1 = inf.readDouble();
-         double g_maxX1 = inf.readDouble();
-         double availMem = inf.readDouble();
-         double needMem = inf.readDouble();
-         ////////////////////////////////////////////////////////
-
-         restartCoProcessor->restart((int)restartStep);
-         grid->setTimeStep(restartStep);
-
-
-         //new nu
-         //if (newViscosity)
-         //{
-         //   ViscosityBlockVisitor nuVisitor(nu_LB);
-         //   grid->accept(nuVisitor);
-         //}
-
-         ////new dp
-         //if (newPressure)
-         //{
-         //   Grid3D::Interactor3DSet interactors = grid->getInteractors();
-         //   interactors[0]->setGrid3D(grid);
-         //   boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->deleteBCAdapter();
-         //   BCAdapterPtr denBCAdapterFront(new DensityBCAdapter(rhoLBinflow));
-         //   denBCAdapterFront->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm()));
-         //   boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->addBCAdapter(denBCAdapterFront);
-         //   interactors[0]->updateInteractor();
-         //}
-
-         if (myid==0)
-         {
-            UBLOG(logINFO, "Parameters:");         UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem());
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed());
-            UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe());
-            UBLOG(logINFO, "rho_LB = "<<rho_LB);
-            UBLOG(logINFO, "nu_LB = "<<nu_LB);
-            UBLOG(logINFO, "dp_LB = "<<dp_LB);
-            UBLOG(logINFO, "dx = "<<deltax<<" m");
-         }
-
-         //set connectors
-         InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator());
-         SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor);
-         grid->accept(setConnsVisitor);
-
-         //domain decomposition for threads
-         PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-         grid->accept(pqPartVisitor);
-
-         //BS visitor
-         grid->accept(bcVisitor);
-
-         if (myid==0) UBLOG(logINFO, "Restart - end");
-      }
-
-
-
-      SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2]));
-      //nupsSch->addSchedule(nupsStep[0], nupsStep[1], nupsStep[2]);
-      SPtr<NUPSCounterCoProcessor> npr(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm));
-
-      SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep, outTimeStart));
-
-      SPtr<WriteMacroscopicQuantitiesCoProcessor> pp(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
-
-      deltax = grid->getDeltaX(baseLevel);
-      double dxd2 = deltax/2.0;
-
-      SPtr<IntegrateValuesHelper> ih1(new IntegrateValuesHelper(grid, comm, coord[0]-dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2,
-         coord[0]-dxd2*10.0-2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2));
-
-      SPtr<IntegrateValuesHelper> ih2(new IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]));
-
-      SPtr<IntegrateValuesHelper> ih3(new IntegrateValuesHelper(grid, comm, coord[3]+dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2,
-         coord[3]+dxd2*10.0+2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2));
-
-      if (myid==0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname+"/geo/ih1", WbWriterVtkXmlBinary::getInstance());
-      if (myid==0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname+"/geo/ih2", WbWriterVtkXmlBinary::getInstance());
-      if (myid==0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname+"/geo/ih3", WbWriterVtkXmlBinary::getInstance());
-
-      double factorp = 1; // dp_real / dp_LB;
-      double factorv = 1;// dx / dt;
-      SPtr<UbScheduler> stepMV(new UbScheduler(timeSeriesOutTime));
-
-      SPtr<TimeseriesCoProcessor> tsp1(new TimeseriesCoProcessor(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm));
-      SPtr<TimeseriesCoProcessor> tsp2(new TimeseriesCoProcessor(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm));
-      SPtr<TimeseriesCoProcessor> tsp3(new TimeseriesCoProcessor(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm));
-
-      if (myid==0)
-      {
-         UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed());
-         UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe());
-      }
-
-      omp_set_num_threads(numOfThreads);
-      SPtr<Calculator> calculator(new BasicCalculator(grid, stepSch, endTime));
-      calculator->addCoProcessor(npr);
-      calculator->addCoProcessor(restartCoProcessor);
-      calculator->addCoProcessor(pp);
-      calculator->addCoProcessor(tsp1);
-      calculator->addCoProcessor(tsp2);
-      calculator->addCoProcessor(tsp3);
-      if (myid==0) UBLOG(logINFO, "Simulation-start");
-      calculator->calculate();
-      if (myid==0) UBLOG(logINFO, "Simulation-end");
-   }
-   catch (exception& e)
-   {
-      cerr<<e.what()<<endl<<flush;
-   }
-   catch (string& s)
-   {
-      cerr<<s<<endl;
-   }
-   catch (...)
-   {
-      cerr<<"unknown exception"<<endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-
-   if (argv!=NULL)
-   {
-      if (argv[1]!=NULL)
-      {
-         run(string(argv[1]));
-      }
-      else
-      {
-         cout<<"Configuration file is missing!"<<endl;
-      }
-   }
-
-   return 0;
-}
diff --git a/apps/cpu/town/CMakeLists.txt b/apps/cpu/town/CMakeLists.txt
deleted file mode 100644
index af95da2b793379871b33d6f7aefcb9fd2c08663c..0000000000000000000000000000000000000000
--- a/apps/cpu/town/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(town)
-
-INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids)
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(town BINARY)
diff --git a/apps/cpu/town/town.cpp b/apps/cpu/town/town.cpp
deleted file mode 100644
index 7fcb83b314188d93a3778d06b439c5ff8e384d25..0000000000000000000000000000000000000000
--- a/apps/cpu/town/town.cpp
+++ /dev/null
@@ -1,464 +0,0 @@
-#include <iostream>
-#include <string>
-#include <math.h> 
-
-#include <vfluids.h>
-
-using namespace std;
-
-void run(const char *cstr1, const char *cstr2)
-{
-   try
-   {
-      string pathname; 
-      string pathGeo;
-      string pathLog;
-      int numOfThreads = 1;
-      bool logfile = false;
-      stringstream logFilename;
-      double availMem = 0;
-
-      CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance();
-      int myid = comm->getProcessID();
-
-      string machine = string(cstr1);
-
-      if(machine == "my") 
-      {
-         //Sleep(30000);
-         pathname = "d:/temp/town";
-         pathGeo = "d:/Data/town";
-         pathLog = "d:/temp/town";
-         numOfThreads = 1;
-         logfile = false;
-         availMem = 15.0e9;
-      }
-      else if(machine == "Ludwig")      
-      {
-         pathname = "/work/koskuche/town";
-         pathGeo = "/home/koskuche/data/town";
-         pathLog = pathname;
-         numOfThreads = 8;
-         availMem = 12.0e9;///8*numOfThreads;
-         logfile = true;
-      }
-      else if(machine == "HLRS")      
-      {
-         pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0";
-         pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate";
-         pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate";
-         numOfThreads = 16;
-         availMem = 2.0e9;
-         logfile = true;
-      }
-      else if(machine == "HLRN")      
-      {
-         pathname = "/gfs1/work/niivfcpu/scratch/plateEx";
-         pathGeo = "/gfs1/work/niivfcpu/data/plate";
-         pathLog = pathname;
-         numOfThreads = 24;
-         availMem = 64.0e9/24.0*numOfThreads;
-         logfile = true;
-      }
-      else throw UbException(UB_EXARGS, "unknown CAB_MACHINE");
-
-#if defined(__unix__)
-      if (myid==0) 
-      {
-         const char* str = pathLog.c_str();
-         int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-      }
-#endif 
-
-      if(myid == 0 && logfile)
-      {
-         //UbLog::reportingLevel() = logDEBUG5;
-         logFilename <<  pathLog + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt";
-         UbLog::output_policy::setStream(logFilename.str());
-      }
-
-      if(myid==0) UBLOG(logINFO,"Testcase town");
-
-      //string townFilename = pathGeo + "/Manhattan.stl";
-      string townFilename = pathGeo + "/town.stl"; 
-
-
-      ///////////////Knotenabmessungen:
-      int blocknx[3], nx[3];
-      blocknx[0] = 8;
-      blocknx[1] = 8;
-      blocknx[2] = 8;
-
-      nx[0] = 12;
-      nx[1] = 12;
-      nx[2] = 3;
-
-      int baseLevel   = 0;
-      int refineLevel = 2;
-
-      LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter());
-
-      //////////////////////////////////////////////////////////////////////////
-      //physik
-      //////////////////////////////////////////////////////////////////////////
-      LBMReal uLB = 0.05;
-      LBMReal rhoLB = 0.0;
-      LBMReal nuLB = 1e-5;
-
-      Grid3DPtr grid(new Grid3D(comm));
-
-      //////////////////////////////////////////////////////////////////////////
-      //restart
-      UbSchedulerPtr rSch(new UbScheduler(1000,1000,10000000));
-      RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY);
-      //////////////////////////////////////////////////////////////////////////
-
-      if (grid->getTimeStep() == 0)
-      {
-
-         if(myid==0) UBLOG(logINFO,"Neustart..");
-
-         //////////////////////////////////////////////////////////////////////////
-         //town
-         GbTriFaceMesh3DPtr town(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(townFilename, "Netz"));
-         if(myid == 0) GbSystem3D::writeGeoObject( town.get(), pathname+"/geo/town", WbWriterVtkXmlBinary::getInstance() );
-         //////////////////////////////////////////////////////////////////////////
-
-         //double cdx = 0.8;
-         double cdx = town->getX3Maximum() / (double)(nx[2] * blocknx[2]);
-         double fdx = cdx/double(1<<refineLevel);
- 
-         double blockLengthx = blocknx[0]*cdx; //geowerte
-
-         double geoLength[] = { nx[0] * blockLengthx, nx[1] * blockLengthx, nx[2] * blockLengthx };
-
-         double originX1 = town->getX1Minimum();
-         double originX2 = town->getX2Minimum();
-         double originX3 = town->getX3Minimum();
-
-
-         bool periodicx1 = true;
-         bool periodicx2 = true;
-         bool periodicx3 = false;
-
-         //bounding box
-         double g_minX1 = originX1-3.0*blockLengthx;
-         double g_minX2 = originX2-3.0*blockLengthx;
-         double g_minX3 = originX3;
-
-         double g_maxX1 = originX1 + geoLength[0]+3.0*blockLengthx;
-         double g_maxX2 = originX2 + geoLength[1]+1.0*blockLengthx;
-         double g_maxX3 = originX3 + geoLength[2]+2.0*blockLengthx;
-
-         //double g_maxX1 = town->getX1Maximum()+blockLengthx;
-         //double g_maxX2 = town->getX2Maximum()+2.0*blockLengthx;
-         //double g_maxX3 = town->getX3Maximum()+2.0*blockLengthx;
-
-
-         //set grid
-         grid->setDeltaX(cdx);
-         grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
-         grid->setPeriodicX1(periodicx1);
-         grid->setPeriodicX2(periodicx2);
-         grid->setPeriodicX3(periodicx3);
-
-         GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-         if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance());
-
-         GenBlocksGridVisitor genBlocks(gridCube);
-         grid->accept(genBlocks);
-
-
-         //////////////////////////////////////////////////////////////////////////
-         if(myid == 0)
-         {
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* Parameters                            *");
-            //UBLOG(logINFO, "* Re            ="<<Re);
-            UBLOG(logINFO, "* nuLB          ="<<nuLB);
-            UBLOG(logINFO, "* uLB           ="<<uLB);
-            UBLOG(logINFO, "* cdx           ="<<cdx);
-            UBLOG(logINFO, "* fdx           ="<<fdx);
-            UBLOG(logINFO, "* blocknx1/2/3  ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]);
-            UBLOG(logINFO, "* x1Periodic    ="<<periodicx1);
-            UBLOG(logINFO, "* x2Periodic    ="<<periodicx2);
-            UBLOG(logINFO, "* x3Periodic    ="<<periodicx3);
-            UBLOG(logINFO, "* number of levels  ="<<refineLevel+1);
-            UBLOG(logINFO, "* path          ="<<pathname);
-
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "* number of threads    ="<<numOfThreads);
-            UBLOG(logINFO, "* number of processes  ="<<comm->getNumberOfProcesses());
-            UBLOG(logINFO, "*****************************************");
-            UBLOG(logINFO, "*****************************************");     
-         }
-         //////////////////////////////////////////////////////////////////////////
-
-
-         //////////////////////////////////////////////////////////////////////////
-         //refinement
-
-         /////////////////////////////////////////////////
-         ///interactor
-         int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB
-         D3Q27BoundaryConditionAdapterPtr bcNoSlip(new D3Q27NoSlipBCAdapter(bbOption1));
-         D3Q27TriFaceMeshInteractorPtr triTownInteractor(new D3Q27TriFaceMeshInteractor(town, grid, bcNoSlip, Interactor3D::SOLID));
-
-         GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_maxX3, g_maxX1+blockLengthx, g_maxX2+blockLengthx, g_maxX3+blockLengthx));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(addWallZmax, grid, Interactor3D::SOLID));
-
-         double raiseVelSteps = 0;
-         vector<D3Q27BCFunction> velcX2BCs, dummy;
-
-         mu::Parser inflowProfile;
-         inflowProfile.SetExpr("uLB");
-         inflowProfile.DefineConst("uLB", uLB);
-         velcX2BCs.push_back(D3Q27BCFunction(inflowProfile, raiseVelSteps, D3Q27BCFunction::INFCONST));
-
-         D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter(dummy, velcX2BCs, dummy));
-         velBCInteractor->addBCAdapter(velBCAdapter);
-
-         GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_minX3-blockLengthx, g_maxX1+blockLengthx, g_maxX2+blockLengthx, g_minX3));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcNoSlip, Interactor3D::SOLID));
-
-         //GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_maxX3, g_maxX1+blockLengthx, g_maxX2+blockLengthx, g_maxX3+blockLengthx));
-         //if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance());
-         //D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcNoSlip, Interactor3D::SOLID));
-
-         GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_minX3-blockLengthx, g_maxX1+blockLengthx, g_minX2, g_maxX3+blockLengthx));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcNoSlip, Interactor3D::SOLID));
-
-         GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_maxX3, g_maxX1+blockLengthx, g_maxX2+blockLengthx, g_maxX3+blockLengthx));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcNoSlip, Interactor3D::SOLID));
-
-         GbCuboid3DPtr addWallXmin(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_minX3-blockLengthx, g_minX1, g_maxX2+blockLengthx, g_maxX3+blockLengthx));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallXmin.get(), pathname+"/geo/addWallXmin", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr addWallXminInt(new D3Q27Interactor(addWallXmin, grid, bcNoSlip, Interactor3D::SOLID));
-
-         GbCuboid3DPtr addWallXmax(new GbCuboid3D(g_maxX1, g_minX2-blockLengthx, g_minX3-blockLengthx, g_maxX1+blockLengthx, g_maxX2+blockLengthx, g_maxX3+blockLengthx));
-         if (myid == 0) GbSystem3D::writeGeoObject(addWallXmax.get(), pathname+"/geo/addWallXmax", WbWriterVtkXmlASCII::getInstance());
-         D3Q27InteractorPtr addWallXmaxInt(new D3Q27Interactor(addWallXmax, grid, bcNoSlip, Interactor3D::SOLID));
-
-         GbCuboid3DPtr refineTownBox(new GbCuboid3D(town->getX1Minimum(), town->getX2Minimum(), town->getX3Minimum(), town->getX1Maximum(), town->getX2Maximum(), town->getX3Maximum()));
-         if (myid == 0) GbSystem3D::writeGeoObject(refineTownBox.get(), pathname + "/geo/refineTownBox", WbWriterVtkXmlASCII::getInstance());
-
-         if (refineLevel > 0)
-         {
-            if(myid == 0) UBLOG(logINFO,"Refinement - start");	
-            //RefineAroundGbObjectHelper refineHelper(grid, refineLevel, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triTownInteractor), 0.0, 3.0, comm);
-            RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel);
-            //refineHelper.addGbObject(refineTownBox, refineLevel);
-            refineHelper.addGbObject(town, refineLevel);
-            refineHelper.refine();
-            if(myid == 0) UBLOG(logINFO,"Refinement - end");	
-         }
-
-         //Grid3D::BlockIDMap bmap = grid->getBlockIDs();
-         //bmap.clear();
-         //(grid->getBlockIDs()).clear();
-         //grid->deleteBlockIDs();
-
-         //RenumberBlockVisitor renumber;
-         //grid->accept(renumber);
-
-
-         ////////////////////////////////////////////
-         //METIS
-         Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));	
-
-         ////////////////////////////////////////////
-         /////delete solid blocks
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start");
-         InteractorsHelper intHelper(grid, metisVisitor);
-         //intHelper.addInteractor(triTownInteractor);
-         intHelper.addInteractor(velBCInteractor);
-         intHelper.addInteractor(addWallZminInt);
-         //intHelper.addInteractor(addWallZmaxInt);
-         //intHelper.addInteractor(addWallYminInt);
-         //intHelper.addInteractor(addWallYmaxInt);
-         //intHelper.addInteractor(addWallXminInt);
-         //intHelper.addInteractor(addWallXmaxInt);
-         intHelper.selectBlocks();
-         if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end");	 
-         //////////////////////////////////////
-
-         //grid->accept(renumber);
-
-         //if (myid == 0)
-         {
-            UBLOG(logINFO, "Write blocks - start");
-            BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-            ppblocks->update(0);
-            UBLOG(logINFO, "Write blocks - end");
-         }
-
-         
-
-
-         //domain decomposition for threads
-         if(numOfThreads > 1)
-         {
-            PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-            grid->accept(pqPartVisitor);
-         }
-
-
-         unsigned long nob = grid->getNumberOfBlocks();
-         unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2];
-         unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3);
-         unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]);
-
-         double needMemAll  = double(nod_real*(27*sizeof(double) + sizeof(int)));
-         double needMem  = needMemAll / double(comm->getNumberOfProcesses());
-         
-         double nup = 0; 
-
-         if(myid == 0)
-         {
-            UBLOG(logINFO,"Number of blocks = " << nob);
-            UBLOG(logINFO,"Number of nodes  = " << nod);
-            int minInitLevel = grid->getCoarsestInitializedLevel();
-            int maxInitLevel = grid->getFinestInitializedLevel();
-            for(int level = minInitLevel; level<=maxInitLevel; level++)
-            {
-               int nobl = grid->getNumberOfBlocks(level);
-               UBLOG(logINFO,"Number of blocks for level " << level <<" = " << nobl);
-               UBLOG(logINFO,"Number of nodes for level " << level <<" = " << nobl*nodb);
-               nup += nobl*nodb*double(1<<level); 
-            }
-            UBLOG(logINFO,"Hypothetically time for calculation step for 120 nodes  = " << nup/6.0e5/(120*8)  << " s");
-            UBLOG(logINFO,"Necessary memory  = " << needMemAll  << " bytes");
-            UBLOG(logINFO,"Necessary memory per process = " << needMem  << " bytes");
-            UBLOG(logINFO,"Available memory per process = " << availMem << " bytes");
-            UBLOG(logINFO,"Available memory per node/8.0 = " << (availMem/8.0) << " bytes");
-         }
-         //////////////////////////////////////////
-         //set connectors
-         if(myid == 0) UBLOG(logINFO,"set connectors - start");
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept( setConnsVisitor );
-         if(myid == 0) UBLOG(logINFO,"set connectors - end");
-
-         ////////////////////////////
-         LBMKernel3DPtr kernel;
-         kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL));
-
-         //mu::Parser fctForcingX2;
-         //fctForcingX2.SetExpr("Fx2*dx");
-         //fctForcingX2.DefineConst("Fx2", 5e-6);
-
-         //kernel->setForcingX2(fctForcingX2);
-         //kernel->setWithForcing(true);
-
-         BCProcessorPtr bcProc(new D3Q27ETBCProcessor());
-         //BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor());
-         kernel->setBCProcessor(bcProc);
-         SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem);
-         grid->accept(kernelVisitor);
-         //////////////////////////////////
-         //undef nodes
-         if (refineLevel > 0)
-         {
-            D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor;
-            grid->accept(undefNodesVisitor);
-         }
-
-
-         intHelper.setBC();
-
-         //initialization of decompositions
-         D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoLB);
-         initVisitor.setVx2(uLB);
-         grid->accept(initVisitor);
-
-         //Postprozess
-         UbSchedulerPtr geoSch(new UbScheduler(1));
-         D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo(
-            new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), 
-            unitConverter, true));
-         ppgeo->update(0);
-         ppgeo.reset();
-         geoSch.reset();
-
-         if(myid == 0) UBLOG(logINFO,"Preprozess - end");      
-      }
-      else
-      {
-         //domain decomposition for threads
-         if(numOfThreads > 1)
-         {
-            PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-            grid->accept(pqPartVisitor);
-         }
-         //set connectors
-         D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor());
-         D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-         grid->accept( setConnsVisitor );
-
-         if(myid == 0) UBLOG(logINFO,"Restart - end"); 
-      }
-      UbSchedulerPtr visSch(new UbScheduler());
-      visSch->addSchedule(1,0,3);
-      //visSch->addSchedule(100,100,1000);
-      //visSch->addSchedule(1000,1000,5000);
-      //visSch->addSchedule(5000,5000,100000);
-      //visSch->addSchedule(100000,100000,10000000);
-
-      visSch->addSchedule(1000,1000,10000000);
-
-      D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter);
-
-      UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30));
-      nupsSch->addSchedule(500,500,1e6);
-      NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm);
-
-      //UbSchedulerPtr emSch(new UbScheduler(100));
-      //EmergencyExitPostprocessor empr(grid, emSch, pathname, RestartPostprocessorPtr(&rp), comm);
-
-      if(myid == 0)
-      {
-         UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem());
-         UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed());
-         UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe());
-      }
-
-      string lastStep = "1000000";// string(cstr2);
-      double endTime = UbSystem::stringTo<double>(lastStep);
-      CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch));
-      if(myid == 0) UBLOG(logINFO,"Simulation-start");
-      calculation->calculate();
-      if(myid == 0) UBLOG(logINFO,"Simulation-end");
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-int main(int argc, char* argv[])
-{
-   if (argc == 1)
-   {
-      cout<<"Command line argument isn't specified!"<<endl;
-      cout<<"plate2 <machine name>"<<endl;
-      return 1;
-   }
-   run(argv[1], argv[2]);
-
-   return 0;
-}
-
diff --git a/apps/cpu/vfscript/CMakeLists.txt b/apps/cpu/vfscript/CMakeLists.txt
deleted file mode 100644
index 264a306a98ca5a36bb76f4a907e9664fe9aa70ef..0000000000000000000000000000000000000000
--- a/apps/cpu/vfscript/CMakeLists.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
-########################################################
-## C++ PROJECT                                       ###
-########################################################
-PROJECT(vfscript)
-
-INCLUDE(${SOURCE_ROOT}/core/IncludsList.txt) 
-
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES core)
-
-#YAML support
-SET(LINK_LIBRARY optimized ${YAML_RELEASE_LIBRARY} debug ${YAML_DEBUG_LIBRARY})
-SET(CAB_ADDITIONAL_LINK_LIBRARIES ${CAB_ADDITIONAL_LINK_LIBRARIES} ${LINK_LIBRARY})
-
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(vfscript BINARY)
diff --git a/apps/cpu/vfscript/input.json b/apps/cpu/vfscript/input.json
deleted file mode 100644
index 0b4c9c5bd612a8c2e33c6711dec257f4c8afe21c..0000000000000000000000000000000000000000
--- a/apps/cpu/vfscript/input.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{"Simulation": {
-   "GeoObjectList":
-   ["GeoObject" : { 
-      "ID": "channel",
-      "GeoType": "GbCuboid3D",
-      "Point1": [0.0, 0.0, 0.0],
-      "Point2": [5.0, 5.0, 5.0],
-      "Properties": {
-         "Physics": {
-            "Rho": 1.0,
-            "Vx1": 0.001
-         },
-         "Numerical":{
-            "BC": {
-               "Type": "NoSlip",
-               "State": "Fluid",
-               "SecondaryBcOptions": "SimpleBounceBack"
-            }
-         }
-      }
-    "GeoObject" : { 
-      "ID": "sphere",
-      "GeoType": "GbSphere3D",
-      "Center": [2.5, 2.5, 2.5], 
-      "Radius": 1.5,
-       "Properties": {
-         "Numerical":{
-            "BC": {
-               "Type": "NoSlip",
-               "State": "Solid",
-               "SecondaryBcOptions": "SimpleBounceBack"
-            }
-         }
-      }]      
-}}
\ No newline at end of file
diff --git a/apps/cpu/vfscript/sphere.yaml b/apps/cpu/vfscript/sphere.yaml
deleted file mode 100644
index 5a2d91a284128f8f70bc2c0c636c2a0847f4f183..0000000000000000000000000000000000000000
--- a/apps/cpu/vfscript/sphere.yaml
+++ /dev/null
@@ -1,37 +0,0 @@
-#flow around sphere
-
-SimulationParametrs:
-   OutputPath: c:\temp\sphere\out
-   Steps: 1000
-   Output: 100
-
-Grid:
- NumberOfThreads: 4
- Block: [10, 10, 10]
- BlockSize: [1.0, 1.0, 1.0]
- RefineLevel: 1
- 
-GeoObjects: 
- - ID: channel
-   GeoType: GbCuboid3D,
-   Point1: [0.0, 0.0, 0.0]
-   Point2: [5.0, 5.0, 5.0]
-   Properties: 
-    Physics: 
-     Rho: 1.0
-     Vx1: 0.001
-    Numerical:
-     BC: 
-      Type: NoSlip
-      State: Fluid
-      SecondaryBcOptions: SimpleBounceBack
- - ID: sphere
-   GeoType: GbSphere3D
-   Center: [2.5, 2.5, 2.5] 
-   Radius: 1.5
-   Properties:
-    Numerical:
-     BC:
-      Type: NoSlip
-      State: Solid
-      SecondaryBcOptions: SecondOrderBounceBack           
diff --git a/apps/cpu/vfscript/vfscript.cpp b/apps/cpu/vfscript/vfscript.cpp
deleted file mode 100644
index 13e26d36719045997cc738c250089484f34051cc..0000000000000000000000000000000000000000
--- a/apps/cpu/vfscript/vfscript.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "geometry3d/CoordinateTransformation3D.h"
-#include "Grid3D.h"
-#include "GenBlocksGridVisitor.h"
-#include "geometry3d/GbSystem3D.h"
-#include "geometry3d/GbCuboid3D.h"
-#include "geometry3d/GbCylinder3D.h"
-#include <geometry3d/GbSphere3D.h>
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include "basics/writer/WbWriterVtkXmlBinary.h"
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "RatioBlockVisitor.h"
-#include "RatioSmoothBlockVisitor.h"
-#include "OverlapBlockVisitor.h"
-#include "RefineInterGbObjectsVisitor.h"
-#include "RefineCrossAndInsideGbObjectBlockVisitor.h"
-#include "SetKernelBlockVisitor.h"
-#include "LBMKernelETD3Q27Cascaded.h"
-#include "D3Q27MacroscopicQuantitiesPostprocessor.h"
-#include "MPICommunicator.h"
-#include "D3Q27ETBCProcessor.h"
-#include "SimulationParameters.h"
-#include "D3Q27SetUndefinedNodesBlockVisitor.h"
-#include "SetInterpolationDirsBlockVisitor.h"
-#include "D3Q27SetConnectorsBlockVisitor.h"
-#include "NullCommunicator.h"
-#include "D3Q27ETInitDistributionsBlockVisitor.h"
-#include "CalculationManager.h"
-#include "PQueuePartitioningGridVisitor.h"
-#include "MetisPartitioningGridVisitor.h"
-#include "D3Q27Interactor.h"
-#include "D3Q27NoSlipBCAdapter.h"
-#include "D3Q27VelocityBCAdapter.h"
-#include "D3Q27DensityBCAdapter.h"
-#include "D3Q27BoundaryConditionAdapter.h"
-#include "StringUtil.hpp"
-//#include "rapidjson/document.h"		// rapidjson's DOM-style API
-//#include "rapidjson/filestream.h"
-
-#include <fstream>
-#include "yaml-cpp/yaml.h"
-
-using namespace std;
-
-
-void run(const char *istr)
-{
-   try
-   {
-      //// Prepare reader and input stream.
-      //rapidjson::Reader reader;
-      ////rapidjson::Document reader;
-      //FILE* fp;
-      //fp = fopen(istr, "r");
-      //rapidjson::FileStream is(fp);
-
-      //rapidjson::Document document;	// Default template parameter uses UTF8 and MemoryPoolAllocator.
-
-      //if (document.ParseStream<0>(is).HasParseError())
-      //{
-      //   //UBLOG(logINFO,"JSON parcing is fail" );
-      //   fprintf(stderr, "\nError(%u): %s\n", (unsigned)document.GetErrorOffset(), document.GetParseError());
-      //   return;
-      //}
-
-      //fclose(fp);
-
-      std::ifstream fin(istr);
-      YAML::Parser parser(fin);
-      YAML::Node doc;
-      parser.GetNextDocument(doc);
-
-      if(doc.FindValue("GeoObjects"))
-      {
-         const YAML::Node& geoObjects = doc["GeoObjects"];
-         string id;
-         for(unsigned i=0;i<geoObjects.size();i++)
-         {
-            geoObjects[i]["ID"] >> id;
-            std::cout << id << "\n";
-         }
-      }
-
-   }
-   catch(YAML::ParserException& e) {
-      std::cout << e.what() << "\n";
-   }
-   catch(std::exception& e)
-   {
-      cerr << e.what() << endl << flush;
-   }
-   catch(std::string& s)
-   {
-      cerr << s << endl;
-   }
-   catch(...)
-   {
-      cerr << "unknown exception" << endl;
-   }
-
-}
-int main(int argc, char* argv[])
-{
-   if ( argv != NULL )
-   {
-      if (argc > 1)
-      {
-         run(argv[1]);
-      }
-      else
-      {
-         cout << "Input file must be set!: " <<  argv[0] << " <input file>" << endl << std::flush;
-      }
-   }
-
-   return 0;
-}
-
diff --git a/apps/gpu/ActuatorLine/ActuatorLine.cpp b/apps/gpu/ActuatorLine/ActuatorLine.cpp
index fa3d80a2499ddf0b243e0562f78bec5167283c28..f1da073fe2ad6ac80020fb4f4be69bfd60709034 100644
--- a/apps/gpu/ActuatorLine/ActuatorLine.cpp
+++ b/apps/gpu/ActuatorLine/ActuatorLine.cpp
@@ -65,21 +65,20 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "gpu/core/LBM/Simulation.h"
-#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
 #include "gpu/core/DataStructureInitializer/GridProvider.h"
+#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
 #include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
+#include "gpu/core/GPU/CudaMemoryManager.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
+#include "gpu/core/LBM/Simulation.h"
+#include "gpu/core/Kernel/KernelTypes.h"
 #include "gpu/core/Parameter/Parameter.h"
 #include "gpu/core/Output/FileWriter.h"
-#include "gpu/core/PreCollisionInteractor/ActuatorFarm.h"
+#include "gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmStandalone.h"
 #include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h"
 #include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
 #include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
-#include "gpu/core/Kernel/KernelTypes.h"
-
-#include "gpu/core/GPU/CudaMemoryManager.h"
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -106,14 +105,14 @@ void multipleLevel(const std::string& configPath)
     vf::basics::ConfigurationFile config;
     config.load(configPath);
 
-    const real reference_diameter = config.getValue<real>("ReferenceDiameter");
-    const uint nodes_per_diameter = config.getValue<uint>("NodesPerDiameter");
+    const real referenceDiameter = config.getValue<real>("ReferenceDiameter");
+    const uint nodesPerDiameter = config.getValue<uint>("NodesPerDiameter");
     const real velocity = config.getValue<real>("Velocity");
 
 
-    const real L_x = 24*reference_diameter;
-    const real L_y = 6*reference_diameter;
-    const real L_z = 6*reference_diameter;
+    const real lengthX = 24*referenceDiameter;
+    const real lengthY = 6*referenceDiameter;
+    const real lengthZ = 6*referenceDiameter;
 
     const real viscosity = 1.56e-5;
 
@@ -136,26 +135,28 @@ void multipleLevel(const std::string& configPath)
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-    const real dx = reference_diameter/real(nodes_per_diameter);
+	const real dx = referenceDiameter/real(nodesPerDiameter);
 
-    real turbPos[3] = {3*reference_diameter, 3*reference_diameter, 3*reference_diameter};
+    std::vector<real>turbinePositionsX{3.f*referenceDiameter};
+    std::vector<real>turbinePositionsY{0.5f*lengthY};
+    std::vector<real>turbinePositionsZ{0.5f*lengthY};
 
     auto gridBuilder = std::make_shared<MultipleGridBuilder>();
 
-    gridBuilder->addCoarseGrid(0.0, 0.0, 0.0,
-                               L_x,  L_y,  L_z, dx);
+	gridBuilder->addCoarseGrid(0.0, 0.0, 0.0,
+							   lengthX,  lengthY,  lengthZ, dx);
 
     gridBuilder->setNumberOfLayers(4,0);
-    gridBuilder->addGrid( std::make_shared<Cuboid>( turbPos[0]-1.5*reference_diameter,  turbPos[1]-1.5*reference_diameter,  turbPos[2]-1.5*reference_diameter, 
-                                                    turbPos[0]+10.0*reference_diameter, turbPos[1]+1.5*reference_diameter,  turbPos[2]+1.5*reference_diameter) , 1 );
+    gridBuilder->addGrid( std::make_shared<Cuboid>( turbinePositionsX[0]-1.5*referenceDiameter,  turbinePositionsY[0]-1.5*referenceDiameter,  turbinePositionsZ[0]-1.5*referenceDiameter, 
+                                                    turbinePositionsX[0]+10.0*referenceDiameter, turbinePositionsY[0]+1.5*referenceDiameter,  turbinePositionsZ[0]+1.5*referenceDiameter) , 1 );
     para->setMaxLevel(2);
     scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleCompressible);
 
-    gridBuilder->setPeriodicBoundaryCondition(false, false, false);
+	gridBuilder->setPeriodicBoundaryCondition(false, false, false);
 
-    gridBuilder->buildGrids(false); // buildGrids() has to be called before setting the BCs!!!!
+	gridBuilder->buildGrids(false); // buildGrids() has to be called before setting the BCs!!!!
 
-    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     const real dt = dx * mach / (sqrt(3) * velocity);
 
@@ -213,28 +214,24 @@ void multipleLevel(const std::string& configPath)
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     int level = 1; // grid level at which the turbine samples velocities and distributes forces
-    const real epsilon = dx*exp2(-level)*1.5; // width of gaussian smearing
+    const real smearingWidth = dx*exp2(-level)*1.5; // width of gaussian smearing
     const real density = 1.225f;
-    const uint nBlades = 3;
     const uint nBladeNodes = 32;
-    const real tipspeed_ratio = 7.5f; // tipspeed ratio = angular vel * radius / inflow vel
-    const real omega = 2*tipspeed_ratio*velocity/reference_diameter;
-    
+    const real tipspeedRatio = 7.5f; // tipspeed ratio = angular vel * radius / inflow vel
+    const std::vector<real> rotorSpeeds = {2*tipspeedRatio*velocity/referenceDiameter};    
 
-    SPtr<ActuatorFarm> actuator_farm = std::make_shared<ActuatorFarm>(nBlades, density, nBladeNodes, epsilon, level, dt, dx, true);
-    std::vector<real> bladeRadii;
-    real dr = reference_diameter/(nBladeNodes*2);
-    for(uint node=0; node<nBladeNodes; node++){ bladeRadii.emplace_back(dr*(node+1)); }
-    actuator_farm->addTurbine(turbPos[0], turbPos[1], turbPos[2], reference_diameter, omega, 0, 0, bladeRadii);
-    para->addActuator( actuator_farm );
+    SPtr<ActuatorFarmStandalone> actuatorFarm = std::make_shared<ActuatorFarmStandalone>(referenceDiameter, nBladeNodes, turbinePositionsX, turbinePositionsZ, turbinePositionsZ, rotorSpeeds, density, smearingWidth, level, dt, dx);
+    actuatorFarm->enableOutput("ALM", uint(tStartOutProbe/dt), uint(tOutProbe/dt));
+    para->addActuator( actuatorFarm );
 
 
     SPtr<PointProbe> pointProbe = std::make_shared<PointProbe>("pointProbe", para->getOutputPath(), 100, 1, 500, 100, false);
-    std::vector<real> probeCoordsX = {reference_diameter,2*reference_diameter,5*reference_diameter};
-    std::vector<real> probeCoordsY = {3*reference_diameter,3*reference_diameter,3*reference_diameter};
-    std::vector<real> probeCoordsZ = {3*reference_diameter,3*reference_diameter,3*reference_diameter};
+    std::vector<real> probeCoordsX = {referenceDiameter,2*referenceDiameter,5*referenceDiameter};
+    std::vector<real> probeCoordsY = {3*referenceDiameter,3*referenceDiameter,3*referenceDiameter};
+    std::vector<real> probeCoordsZ = {3*referenceDiameter,3*referenceDiameter,3*referenceDiameter};
 
     pointProbe->addProbePointsFromList(probeCoordsX, probeCoordsY, probeCoordsZ);
+    // pointProbe->addProbePointsFromXNormalPlane(2*D, 0.0, 0.0, lengthY, lengthZ, (uint)lengthY/dx, (uint)lengthZ/dx);
 
     pointProbe->addStatistic(Statistic::Means);
     pointProbe->addStatistic(Statistic::Variances);
@@ -247,7 +244,7 @@ void multipleLevel(const std::string& configPath)
     para->addProbe( timeseriesProbe );
 
     SPtr<PlaneProbe> planeProbe = std::make_shared<PlaneProbe>("planeProbe", para->getOutputPath(), 100, 500, 100, 100);
-    planeProbe->setProbePlane(5*reference_diameter, 0, 0, dx, L_y, L_z);
+    planeProbe->setProbePlane(5*referenceDiameter, 0, 0, dx, lengthY, lengthZ);
     planeProbe->addStatistic(Statistic::Means);
     para->addProbe( planeProbe );
 
diff --git a/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp b/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp
index bff963de58e048982ec2878235d87b12894f8c20..6b815a6a4257b74d699df338c620f925e9235cae 100644
--- a/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp
+++ b/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp
@@ -71,13 +71,13 @@
 #include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
 #include "gpu/core/Parameter/Parameter.h"
 #include "gpu/core/Output/FileWriter.h"
-#include "gpu/core/PreCollisionInteractor/ActuatorFarm.h"
+#include "gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmStandalone.h"
 #include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h"
 #include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h"
 #include "gpu/core/PreCollisionInteractor/Probes/Probe.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
 #include "gpu/core/Kernel/KernelTypes.h"
 
 #include "gpu/core/GPU/CudaMemoryManager.h"
@@ -107,13 +107,13 @@ void multipleLevel(const std::string& configPath)
     vf::basics::ConfigurationFile config;
     config.load(configPath);
 
-    const real reference_diameter = config.getValue<real>("ReferenceDiameter");
-    const uint nodes_per_diameter = config.getValue<uint>("NodesPerDiameter");
+    const real referenceDiameter = config.getValue<real>("ReferenceDiameter");
+    const uint nodesPerDiameter = config.getValue<uint>("NodesPerDiameter");
     const real velocity = config.getValue<real>("Velocity");
 
-    const real L_x = 10 * reference_diameter;
-    const real L_y = 4 * reference_diameter;
-    const real L_z = 4 * reference_diameter;
+    const real L_x = 10 * referenceDiameter;
+    const real L_y = 4 * referenceDiameter;
+    const real L_z = 4 * referenceDiameter;
 
     const real viscosity = 1.56e-5;
 
@@ -136,9 +136,11 @@ void multipleLevel(const std::string& configPath)
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-    const real dx = reference_diameter/real(nodes_per_diameter);
+    const real dx = referenceDiameter/real(nodesPerDiameter);
 
-    real turbPos[3] = {3.0f * reference_diameter, 0.0, 0.0};
+    std::vector<real>turbinePositionsX{3.f*referenceDiameter};
+    std::vector<real>turbinePositionsY{0.0};
+    std::vector<real>turbinePositionsZ{0.0};
 
     auto gridBuilder = std::make_shared<MultipleGridBuilder>();
 
@@ -207,42 +209,37 @@ void multipleLevel(const std::string& configPath)
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     int level = 0; // grid level at which the turbine samples velocities and distributes forces
-    const real smearing_width = dx*exp2(-level)*2; // width of gaussian smearing
-    VF_LOG_INFO("smearing_width = {}m", smearing_width);
+    const real smearingWidth = dx*exp2(-level)*2; // width of gaussian smearing
+    VF_LOG_INFO("smearingWidth = {}m", smearingWidth);
     const real density = 1.225f;
-    const uint nBlades = 3;
     const uint nBladeNodes = 32;
-    const real tipspeed_ratio = 7.5f; // tipspeed ratio = angular vel * radius / inflow vel
-    const real rotor_speed = 2*tipspeed_ratio*velocity/reference_diameter;
+    const real tipspeedRatio = 7.5f; // tipspeed ratio = angular vel * radius / inflow vel
+    const std::vector<real> rotorSpeeds{2*tipspeedRatio*velocity/referenceDiameter};
 
 
-    SPtr<ActuatorFarm> actuator_farm = std::make_shared<ActuatorFarm>(nBlades, density, nBladeNodes, smearing_width, level, dt, dx, true);
-    std::vector<real> bladeRadii;
-    real dr = reference_diameter/(nBladeNodes*2);
-    for(uint node=0; node<nBladeNodes; node++){ bladeRadii.emplace_back(dr*(node+1)); }
-    actuator_farm->addTurbine(turbPos[0], turbPos[1], turbPos[2], reference_diameter, rotor_speed, 0, 0, bladeRadii);
-    para->addActuator( actuator_farm );
+    SPtr<ActuatorFarmStandalone> actuatorFarm = std::make_shared<ActuatorFarmStandalone>(referenceDiameter, nBladeNodes, turbinePositionsX, turbinePositionsY, turbinePositionsZ, rotorSpeeds, density, smearingWidth, level, dt, dx);
+    para->addActuator( actuatorFarm );
 
-    std::vector<real> planePositions = {-1*reference_diameter, 1*reference_diameter, 3*reference_diameter};
+    std::vector<real> planePositions = {-1*referenceDiameter, 1*referenceDiameter, 3*referenceDiameter};
 
     for(int i=0; i < planePositions.size(); i++)
     {
         SPtr<PlaneProbe> planeProbe = std::make_shared<PlaneProbe>("planeProbe_" + std::to_string(i), para->getOutputPath(), tStartTmpAveraging/dt, tAveraging/dt, tStartOutProbe/dt, tOutProbe/dt);
-        planeProbe->setProbePlane(turbPos[0]+planePositions[i], -0.5 * L_y, -0.5 * L_z, dx, L_y, L_z);
+        planeProbe->setProbePlane(turbinePositionsX[0]+planePositions[i], -0.5 * L_y, -0.5 * L_z, dx, L_y, L_z);
         planeProbe->addStatistic(Statistic::Means);
         planeProbe->addStatistic(Statistic::Variances);
         planeProbe->addStatistic(Statistic::Instantaneous);
         para->addProbe( planeProbe );
     }
     SPtr<PlaneProbe> planeProbeVert = std::make_shared<PlaneProbe>("planeProbeVertical", para->getOutputPath(), tStartTmpAveraging/dt, tAveraging/dt, tStartOutProbe/dt, tOutProbe/dt);
-    planeProbeVert->setProbePlane(0, turbPos[1], -0.5 * L_z, L_x, dx, L_z);
+    planeProbeVert->setProbePlane(0, turbinePositionsY[0], -0.5 * L_z, L_x, dx, L_z);
     planeProbeVert->addStatistic(Statistic::Means);
     planeProbeVert->addStatistic(Statistic::Variances);
     planeProbeVert->addStatistic(Statistic::Instantaneous);
     para->addProbe( planeProbeVert );
 
     SPtr<PlaneProbe> planeProbeHorz = std::make_shared<PlaneProbe>("planeProbeHorizontal", para->getOutputPath(), tStartTmpAveraging/dt, tAveraging/dt, tStartOutProbe/dt, tOutProbe/dt);
-    planeProbeHorz->setProbePlane(0, -0.5 * L_y, turbPos[2], L_x, L_y, dx);
+    planeProbeHorz->setProbePlane(0, -0.5 * L_y, turbinePositionsZ[0], L_x, L_y, dx);
     planeProbeHorz->addStatistic(Statistic::Means);
     planeProbeHorz->addStatistic(Statistic::Variances);
     planeProbeHorz->addStatistic(Statistic::Instantaneous);
diff --git a/apps/gpu/Basel/main.cpp b/apps/gpu/Basel/main.cpp
index dd3762c1253ee2a77e196a3c3ee886281fa7fb64..0d8a821d1bb3dd5e14c008673cdab81c353c0d95 100644
--- a/apps/gpu/Basel/main.cpp
+++ b/apps/gpu/Basel/main.cpp
@@ -26,7 +26,7 @@
 #include "gpu/core/Parameter/Parameter.h"
 #include "gpu/core/Output/FileWriter.h"
 #include "gpu/core/GPU/CudaMemoryManager.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "global.h"
 
diff --git a/apps/gpu/BaselMultiGPU/main.cpp b/apps/gpu/BaselMultiGPU/main.cpp
index 31988ab6068ea46e94cc248c882c65dc44535e73..87a230da5c012bac7487e7e634de2b4c3f8bf712 100644
--- a/apps/gpu/BaselMultiGPU/main.cpp
+++ b/apps/gpu/BaselMultiGPU/main.cpp
@@ -26,7 +26,7 @@
 #include "gpu/core/Parameter/Parameter.h"
 #include "gpu/core/Output/FileWriter.h"
 #include "gpu/core/GPU/CudaMemoryManager.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "global.h"
 
diff --git a/apps/gpu/BaselNU/main.cpp b/apps/gpu/BaselNU/main.cpp
index 48092b4f3aecce458989f3a158d889a7911c01d9..3a54000a2fdf86be1e2133d3323a79550a4c9a77 100644
--- a/apps/gpu/BaselNU/main.cpp
+++ b/apps/gpu/BaselNU/main.cpp
@@ -26,7 +26,7 @@
 #include "gpu/core/Parameter/Parameter.h"
 #include "gpu/core/Output/FileWriter.h"
 #include "gpu/core/GPU/CudaMemoryManager.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryCondtions/BoundaryConditionFactory.h"
 
 #include "global.h"
 
diff --git a/apps/gpu/BoundaryLayer/BoundaryLayer.cpp b/apps/gpu/BoundaryLayer/BoundaryLayer.cpp
index 199b28727331782d955b7f17e904977381504a24..a5bc05310d17af7d943b1db921b7eb908cc6b96c 100644
--- a/apps/gpu/BoundaryLayer/BoundaryLayer.cpp
+++ b/apps/gpu/BoundaryLayer/BoundaryLayer.cpp
@@ -80,8 +80,8 @@
 #include "gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.h"
 #include "gpu/core/PreCollisionInteractor/Probes/WallModelProbe.h"
 #include "gpu/core/PreCollisionInteractor/PrecursorWriter.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h"
 #include "gpu/core/Kernel/KernelTypes.h"
 
diff --git a/apps/gpu/DrivenCavity/DrivenCavity.cpp b/apps/gpu/DrivenCavity/DrivenCavity.cpp
index d7b897cd53a724d0cfa747124451423006853fba..2b6e0cd307c1d46b9ce8dbbd0deef45a8c506433 100644
--- a/apps/gpu/DrivenCavity/DrivenCavity.cpp
+++ b/apps/gpu/DrivenCavity/DrivenCavity.cpp
@@ -57,8 +57,8 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/DataStructureInitializer/GridProvider.h"
 #include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
 #include "gpu/core/GPU/CudaMemoryManager.h"
diff --git a/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp b/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp
index f35bfe5c151e3821af5952e6c9d921691dfe08dd..ecfbc67f6786562090665de8aedaabd8e642cb27 100755
--- a/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp
+++ b/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp
@@ -42,8 +42,8 @@
 
 #include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h"
 #include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/Kernel/KernelTypes.h"
 
 #include "gpu/core/GPU/CudaMemoryManager.h"
diff --git a/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp b/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp
index 0ffe9bd39e2fc461dd8e08e8f3ed411b2550a42f..ee18b8a52786807c57067967ccfcca18f9c5ca63 100644
--- a/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp
+++ b/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp
@@ -57,8 +57,8 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/DataStructureInitializer/GridProvider.h"
 #include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
 #include "gpu/core/GPU/CudaMemoryManager.h"
diff --git a/apps/gpu/MusselOyster/MusselOyster.cpp b/apps/gpu/MusselOyster/MusselOyster.cpp
index 0c145e5a3c6a498b26b288f614faafec2212df86..a74b4c8f8d0307ca4db9aa56fb1f8c82b7628e4f 100644
--- a/apps/gpu/MusselOyster/MusselOyster.cpp
+++ b/apps/gpu/MusselOyster/MusselOyster.cpp
@@ -43,7 +43,7 @@
 #include "gpu/core/LBM/Simulation.h"
 #include "gpu/core/Output/FileWriter.h"
 #include "gpu/core/Parameter/Parameter.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryCondtions/BoundaryConditionFactory.h"
 #include "gpu/core/Kernel/KernelTypes.h"
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/apps/gpu/SphereGPU/Sphere.cpp b/apps/gpu/SphereGPU/Sphere.cpp
index 66d381809d3f37bc85238a459b86fd54e9477b4a..03931b346450265434900dc36b5e7dbe2f7475bc 100644
--- a/apps/gpu/SphereGPU/Sphere.cpp
+++ b/apps/gpu/SphereGPU/Sphere.cpp
@@ -66,8 +66,8 @@
 #include "gpu/core/LBM/Simulation.h"
 #include "gpu/core/Output/FileWriter.h"
 #include "gpu/core/Parameter/Parameter.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h"
 #include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h"
 #include "gpu/core/Kernel/KernelTypes.h"
@@ -106,6 +106,7 @@ int main(int argc, char *argv[])
             para = std::make_shared<Parameter>();
         }
 
+        vf::parallel::Communicator& communicator = *vf::parallel::MPICommunicator::getInstance();
 
         //////////////////////////////////////////////////////////////////////////
         // create grid
@@ -219,7 +220,6 @@ int main(int argc, char *argv[])
         //////////////////////////////////////////////////////////////////////////
         // setup to copy mesh to simulation
         //////////////////////////////////////////////////////////////////////////
-        vf::parallel::Communicator &communicator = *vf::parallel::MPICommunicator::getInstance();
         auto cudaMemoryManager = std::make_shared<CudaMemoryManager>(para);
         SPtr<GridProvider> gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
 
diff --git a/apps/gpu/SphereRefined/SphereRefined.cpp b/apps/gpu/SphereRefined/SphereRefined.cpp
index 8d03154b34f0bb04b72033783195cd857b9ff4a7..6e3670c7a3c5b7696a9a8e805523f468c132d132 100644
--- a/apps/gpu/SphereRefined/SphereRefined.cpp
+++ b/apps/gpu/SphereRefined/SphereRefined.cpp
@@ -58,15 +58,15 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
 #include "gpu/core/DataStructureInitializer/GridProvider.h"
 #include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
 #include "gpu/core/GPU/CudaMemoryManager.h"
 #include "gpu/core/LBM/Simulation.h"
 #include "gpu/core/Output/FileWriter.h"
 #include "gpu/core/Parameter/Parameter.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
 #include "gpu/core/Kernel/KernelTypes.h"
 
 #include <parallel/MPICommunicator.h>
diff --git a/apps/gpu/SphereScaling/SphereScaling.cpp b/apps/gpu/SphereScaling/SphereScaling.cpp
index a45d494374ec6cd5cf04edefc23b83732ef0fae0..f2350e14fe2221449b7eee21a0b02558b1a69b97 100755
--- a/apps/gpu/SphereScaling/SphereScaling.cpp
+++ b/apps/gpu/SphereScaling/SphereScaling.cpp
@@ -45,8 +45,8 @@
 
 #include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h"
 #include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/Kernel/KernelTypes.h"
 
 #include "gpu/core/GPU/CudaMemoryManager.h"
diff --git a/apps/gpu/TGV_3D/TGV_3D.cpp b/apps/gpu/TGV_3D/TGV_3D.cpp
index 088c013b282c282e96f2fb4081b69727c3f44798..b3725af2e1687b573b02238c008e0411a0b2670a 100644
--- a/apps/gpu/TGV_3D/TGV_3D.cpp
+++ b/apps/gpu/TGV_3D/TGV_3D.cpp
@@ -67,7 +67,7 @@
 #include "gpu/core/DataStructureInitializer/GridProvider.h"
 #include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
 #include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/GPU/CudaMemoryManager.h"
 #include "gpu/core/LBM/Simulation.h"
 #include "gpu/core/Output/FileWriter.h"
diff --git a/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp b/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp
index 384d77577dc4770e30c021c568b5606e45bd05ed..997d3c8572ac46bf53f032eae182c3dc43283f9e 100644
--- a/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp
+++ b/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp
@@ -71,8 +71,8 @@
 #include "gpu/core/DataStructureInitializer/GridProvider.h"
 #include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h"
 #include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
 #include "gpu/core/GPU/CudaMemoryManager.h"
 #include "gpu/core/LBM/Simulation.h"
 #include "gpu/core/Output/FileWriter.h"
diff --git a/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp b/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp
index 1c7f4a81e924b3ab4bbe9f70c7aa67d9d9b466e0..48e72e6382fa7944fb413bb573a980b3cc3085d0 100644
--- a/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp
+++ b/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp
@@ -63,7 +63,7 @@
 
 #include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h"
 #include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "gpu/core/GPU/CudaMemoryManager.h"
 
diff --git a/apps/gpu/WTG_RUB/WTG_RUB.cpp b/apps/gpu/WTG_RUB/WTG_RUB.cpp
index 6cc1114aaebfa1080cc6c832ca312b28f66d0dbd..8de3357854fb2d28208f1956c4798544a12c84f3 100644
--- a/apps/gpu/WTG_RUB/WTG_RUB.cpp
+++ b/apps/gpu/WTG_RUB/WTG_RUB.cpp
@@ -72,7 +72,7 @@
 #include "gpu/core/Parameter/Parameter.h"
 #include "gpu/core/Output/FileWriter.h"
 #include "gpu/core/GPU/CudaMemoryManager.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/Kernel/KernelTypes.h"
 
 #include <parallel/MPICommunicator.h>
diff --git a/apps/gpu/gridGeneratorTest/gridGenerator.cpp b/apps/gpu/gridGeneratorTest/gridGenerator.cpp
index 0edb0155430b7eb3f72128587452e8911b0e4755..b8a46f11ec0fbee082f5ccf504e7135028971dea 100644
--- a/apps/gpu/gridGeneratorTest/gridGenerator.cpp
+++ b/apps/gpu/gridGeneratorTest/gridGenerator.cpp
@@ -17,7 +17,7 @@
 
 #include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h"
 #include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "gpu/core/GPU/CudaMemoryManager.h"
 
diff --git a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp
index 3b1365678749e3b92d40adf9a4e92095b61d405c..9d6f62f985b29c669d93381352593d54a969e7f3 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp
+++ b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp
@@ -8,7 +8,7 @@
 #include "gpu/core/GPU/CudaMemoryManager.h"
 #include "gpu/core/Parameter/Parameter.h"
 
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/LBM/Simulation.h"
 
 #include <parallel/MPICommunicator.h>
diff --git a/cpu.cmake b/cpu.cmake
index 226791b1bef78cf7c76c916424889982c7ce6073..f8ee4ca36a6156860ecb8f679d23ef3fc480f60b 100644
--- a/cpu.cmake
+++ b/cpu.cmake
@@ -27,10 +27,6 @@ SET(VFCPU_USE_VTK OFF CACHE BOOL "include VTK library support")
 SET(VFCPU_USE_CATALYST OFF CACHE BOOL "include Paraview Catalyst support")
 SET(VFCPU_USE_HLRN_LUSTRE OFF CACHE BOOL "include HLRN Lustre support")
 
-SET(VFCPU_ENABLE_LiggghtsCoupling OFF CACHE BOOL "enable coupling with LIGGGHTS library")
-SET(VFCPU_ENABLE_NonNewtonianFluids ON CACHE BOOL "enable non-Newtonian fluids module")
-SET(VFCPU_ENABLE_MultiphaseFlow ON CACHE BOOL "enable multiphase flow module")
-
 if(BUILD_VF_ALL_SAMPLES)
     set(VFCPU_ENABLE_NonNewtonianFluids ON)
     set(VFCPU_ENABLE_MultiphaseFlow ON)
@@ -42,12 +38,6 @@ IF((NOT ${CMAKE_CXX_COMPILER} MATCHES mpicxx) AND (NOT ${CMAKE_CXX_COMPILER} MAT
 ENDIF()
 #SET(MPI_CXX_LINK_FLAGS -mpe=mpilog)
 
-if(VFCPU_ENABLE_LiggghtsCoupling)
-    add_subdirectory(src/cpu/LiggghtsCoupling)
-    SET(VFCPU_USE_VTK ON CACHE BOOL "include VTK library support" FORCE)
-endif()
-
-
 #VTK
 IF(${VFCPU_USE_VTK})
     FIND_PACKAGE(VTK REQUIRED)
@@ -94,13 +84,5 @@ if(BUILD_VF_PYTHON_BINDINGS)
     add_subdirectory(src/cpu/simulationconfig)
 endif()
 
-if(VFCPU_ENABLE_NonNewtonianFluids)
-    add_subdirectory(src/cpu/NonNewtonianFluids)
-endif()
-
-if(VFCPU_ENABLE_MultiphaseFlow)
-    add_subdirectory(src/cpu/MultiphaseFlow)
-endif()
-
 set (APPS_ROOT_CPU "${VF_ROOT_DIR}/apps/cpu/")
 include(${APPS_ROOT_CPU}/Applications.cmake)
\ No newline at end of file
diff --git a/lizard.txt b/lizard.txt
deleted file mode 100644
index 927eca599897274df6b26beab673c50248f58b7d..0000000000000000000000000000000000000000
--- a/lizard.txt
+++ /dev/null
@@ -1,185 +0,0 @@
-src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.cpp:90: warning: RayCastingDiscretizationStrategy::doDiscretize has 117 NLOC, 33 CCN, 1018 token, 4 PARAM, 138 length
-src/gpu/GridGenerator/TransientBCSetter/TransientBCSetter.cpp:259: warning: VTKReader::fillArrays has 110 NLOC, 23 CCN, 976 token, 2 PARAM, 132 length
-src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp:232: warning: MultipleGridBuilder::getStaggeredCoordinates has 61 NLOC, 24 CCN, 827 token, 6 PARAM, 114 length
-src/gpu/GridGenerator/grid/GridImp.cpp:364: warning: GridImp::fixRefinementIntoWall has 36 NLOC, 44 CCN, 630 token, 4 PARAM, 58 length
-src/gpu/GridGenerator/grid/GridImp.cpp:612: warning: GridImp::nodeInNextCellIs has 24 NLOC, 17 CCN, 346 token, 2 PARAM, 30 length
-src/gpu/GridGenerator/grid/GridImp.cpp:643: warning: GridImp::nodeInPreviousCellIs has 24 NLOC, 17 CCN, 346 token, 2 PARAM, 30 length
-src/gpu/GridGenerator/io/STLReaderWriter/STLReader.cpp:110: warning: STLReader::readASCIISTLWithPatches has 76 NLOC, 24 CCN, 599 token, 2 PARAM, 99 length
-src/gpu/GridGenerator/io/GridVTKWriter/GridVTKWriter.cpp:162: warning: GridVTKWriter::writeInterpolationCellsToVTKXML has 84 NLOC, 16 CCN, 1035 token, 3 PARAM, 114 length
-src/gpu/core/LBM/Simulation.cpp:88: warning: Simulation::init has 127 NLOC, 24 CCN, 1214 token, 4 PARAM, 307 length
-src/gpu/core/LBM/Simulation.cpp:506: warning: Simulation::calculateTimestep has 151 NLOC, 31 CCN, 1391 token, 1 PARAM, 209 length
-src/gpu/core/LBM/Simulation.cpp:716: warning: Simulation::readAndWriteFiles has 77 NLOC, 21 CCN, 718 token, 1 PARAM, 258 length
-src/gpu/core/LBM/Simulation.cpp:975: warning: Simulation::~Simulation has 96 NLOC, 24 CCN, 748 token, 0 PARAM, 153 length
-src/gpu/core/GPU/GeometryUtils.h:19: warning: findNearestCellBSW has 18 NLOC, 16 CCN, 347 token, 11 PARAM, 23 length
-src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.cpp:329: warning: GridReader::initalValuesDomainDecompostion has 157 NLOC, 21 CCN, 2302 token, 1 PARAM, 212 length
-src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp:210: warning: GridGenerator::allocArrays_BoundaryValues has 177 NLOC, 23 CCN, 2395 token, 0 PARAM, 272 length
-src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp:483: warning: GridGenerator::initalValuesDomainDecompostion has 321 NLOC, 42 CCN, 4222 token, 0 PARAM, 429 length
-src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp:913: warning: GridGenerator::allocArrays_BoundaryQs has 135 NLOC, 21 CCN, 1339 token, 0 PARAM, 235 length
-src/gpu/core/Particles/Particles.cpp:58: warning: initParticles has 156 NLOC, 29 CCN, 2248 token, 1 PARAM, 239 length
-src/gpu/core/Calculation/Cp.cpp:224: warning: excludeGridInterfaceNodesForMirror has 55 NLOC, 16 CCN, 899 token, 2 PARAM, 59 length
-src/gpu/core/Calculation/Cp.cpp:373: warning: printGeoFile has 132 NLOC, 25 CCN, 1208 token, 2 PARAM, 166 length
-src/gpu/core/Parameter/Parameter.cpp:83: warning: Parameter::readConfigData has 175 NLOC, 82 CCN, 1974 token, 1 PARAM, 268 length
-src/gpu/core/FindInterface/FindInterface.cpp:3: warning: interpolation has 2320 NLOC, 271 CCN, 22540 token, 16 PARAM, 2893 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:170: warning: UnstructuredGridWriter::writeUnstrucuredGridLT has 86 NLOC, 20 CCN, 978 token, 3 PARAM, 129 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:307: warning: UnstructuredGridWriter::writeUnstrucuredGridLTwithTurbulentViscosity has 89 NLOC, 20 CCN, 1018 token, 3 PARAM, 115 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:430: warning: UnstructuredGridWriter::writeUnstrucuredGridLTwithTurbulentViscosityDebug has 122 NLOC, 20 CCN, 1566 token, 3 PARAM, 146 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:584: warning: UnstructuredGridWriter::writeUnstrucuredGridPM has 86 NLOC, 36 CCN, 1278 token, 3 PARAM, 128 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:720: warning: UnstructuredGridWriter::writeUnstrucuredGridLTConc has 89 NLOC, 20 CCN, 1030 token, 3 PARAM, 112 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:845: warning: UnstructuredGridWriter::writeUnstrucuredGridBig has 169 NLOC, 42 CCN, 2461 token, 4 PARAM, 246 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:1285: warning: UnstructuredGridWriter::writeUnstrucuredGridMedianLT has 86 NLOC, 20 CCN, 965 token, 3 PARAM, 109 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:1403: warning: UnstructuredGridWriter::writeUnstrucuredGridMedianLTConc has 88 NLOC, 20 CCN, 993 token, 3 PARAM, 108 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:1520: warning: UnstructuredGridWriter::writeUnstrucuredGridMedianLTwithDerivationsAndSqaredVelos has 115 NLOC, 20 CCN, 1669 token, 3 PARAM, 138 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:2209: warning: UnstructuredGridWriter::writeQs has 81 NLOC, 30 CCN, 1196 token, 3 PARAM, 96 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:2313: warning: UnstructuredGridWriter::writeQsInflow has 82 NLOC, 31 CCN, 1210 token, 3 PARAM, 97 length
-src/gpu/core/Output/UnstructuredGridWriter.hpp:2418: warning: UnstructuredGridWriter::writeQsPressure has 82 NLOC, 31 CCN, 1210 token, 3 PARAM, 97 length
-src/gpu/core/Output/FileWriter.cpp:305: warning: FileWriter::writeUnstructuredGridMedianLT has 79 NLOC, 23 CCN, 957 token, 3 PARAM, 101 length
-src/gpu/core/Output/InterfaceDebugWriter.hpp:719: warning: InterfaceDebugWriter::writeSendNodesStream has 79 NLOC, 16 CCN, 943 token, 2 PARAM, 96 length
-src/gpu/core/Output/VtkSGWriter.hpp:118: warning: VtkSGWriter::writeVTKsgSP has 119 NLOC, 21 CCN, 1071 token, 25 PARAM, 146 length
-src/gpu/core/Output/VtkSGWriter.hpp:272: warning: VtkSGWriter::writeVTKsgSPbin has 120 NLOC, 24 CCN, 1229 token, 26 PARAM, 138 length
-src/gpu/core/Output/VtkSGWriter.hpp:413: warning: VtkSGWriter::writeVTKmedSPbin has 120 NLOC, 24 CCN, 1252 token, 27 PARAM, 138 length
-src/gpu/core/Output/VtkSGWriter.hpp:554: warning: VtkSGWriter::writeVTKsgSPbinTEST has 77 NLOC, 17 CCN, 643 token, 1 PARAM, 85 length
-src/gpu/core/Output/VtkSGWriter.hpp:646: warning: VtkSGWriter::writeVTKsgThS has 109 NLOC, 20 CCN, 999 token, 25 PARAM, 125 length
-src/gpu/core/Output/VtkSGWriter.hpp:776: warning: VtkSGWriter::writeVTKsgSPbinAS has 125 NLOC, 30 CCN, 1207 token, 28 PARAM, 153 length
-src/gpu/core/Output/VtkSGWriter.hpp:932: warning: VtkSGWriter::writeVTKmedSPbinAS has 125 NLOC, 30 CCN, 1233 token, 29 PARAM, 155 length
-src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp:153: warning: MultiphaseScaleDistributionLBMKernel::calculate has 841 NLOC, 95 CCN, 15448 token, 1 PARAM, 4867 length
-src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp:147: warning: MultiphasePressureFilterLBMKernel::calculate has 1056 NLOC, 38 CCN, 15517 token, 1 PARAM, 1485 length
-src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp:136: warning: MultiphaseScratchCumulantLBMKernel::calculate has 998 NLOC, 15 CCN, 15155 token, 1 PARAM, 2793 length
-src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp:147: warning: MultiphasePressureFilterCompressibleAirLBMKernel::calculate has 954 NLOC, 37 CCN, 13902 token, 1 PARAM, 1337 length
-src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp:139: warning: MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate has 1183 NLOC, 48 CCN, 17408 token, 1 PARAM, 3150 length
-src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp:145: warning: MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate has 1091 NLOC, 20 CCN, 16030 token, 1 PARAM, 2659 length
-src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp:83: warning: MultiphaseCumulantLBMKernel::calculate has 840 NLOC, 21 CCN, 11775 token, 1 PARAM, 1099 length
-src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp:153: warning: MultiphaseSharpInterfaceLBMKernel::calculate has 780 NLOC, 87 CCN, 13990 token, 1 PARAM, 1305 length
-src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp:137: warning: MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate has 1183 NLOC, 14 CCN, 17738 token, 1 PARAM, 2855 length
-src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp:151: warning: MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate has 1173 NLOC, 37 CCN, 17390 token, 1 PARAM, 3207 length
-src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h:138: warning: MultiphaseScaleDistributionLBMKernel::isGas has 33 NLOC, 28 CCN, 282 token, 3 PARAM, 33 length
-src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp:144: warning: WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ has 151 NLOC, 30 CCN, 2116 token, 1 PARAM, 226 length
-src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp:147: warning: WriteMultiphaseQuantitiesSimulationObserver::addDataMQ has 235 NLOC, 37 CCN, 3976 token, 1 PARAM, 329 length
-src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp:177: warning: MultiphaseVelocityBC::init has 82 NLOC, 30 CCN, 907 token, 2 PARAM, 91 length
-src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp:65: warning: MultiphaseSlipBCStrategy::applyBC has 64 NLOC, 29 CCN, 1117 token, 0 PARAM, 79 length
-src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp:99: warning: IBcumulantK17LBMKernel::calculate has 502 NLOC, 20 CCN, 7949 token, 1 PARAM, 809 length
-src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp:173: warning: IBsharpInterfaceLBMKernel::calculate has 919 NLOC, 97 CCN, 17677 token, 1 PARAM, 1367 length
-src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.cpp:92: warning: LiggghtsCouplingSimulationObserver::setSingleSphere3D has 64 NLOC, 21 CCN, 839 token, 5 PARAM, 112 length
-src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.cpp:97: warning: RheologyK17LBMKernel::calculate has 613 NLOC, 16 CCN, 8545 token, 1 PARAM, 1037 length
-src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.cpp:68: warning: ThixotropyLBMKernel::calculate has 1355 NLOC, 14 CCN, 25623 token, 1 PARAM, 1750 length
-src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.cpp:68: warning: ThixotropyExpLBMKernel::calculate has 1353 NLOC, 14 CCN, 25585 token, 1 PARAM, 1756 length
-src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp:65: warning: ThixotropyVelocityWithDensityBCStrategy::applyBC has 50 NLOC, 16 CCN, 520 token, 0 PARAM, 67 length
-src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp:70: warning: ThixotropyNonReflectingOutflowBCStrategy::applyBC has 280 NLOC, 19 CCN, 7096 token, 0 PARAM, 305 length
-src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.cpp:61: warning: BoundaryConditionsBlockVisitor::visit has 63 NLOC, 16 CCN, 551 token, 2 PARAM, 75 length
-src/cpu/core/LBM/Interpolation/Interpolator.cpp:77: warning: Interpolator::findNeighborICell has 220 NLOC, 53 CCN, 1748 token, 12 PARAM, 255 length
-src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp:35: warning: IncompressibleCumulantWithSpongeLayerLBMKernel::initRelaxFactor has 74 NLOC, 16 CCN, 597 token, 4 PARAM, 82 length
-src/cpu/core/LBM/D3Q27System.h:246: warning: D3Q27System::getDirectionString has 60 NLOC, 27 CCN, 182 token, 1 PARAM, 61 length
-src/cpu/core/LBM/D3Q27System.h:308: warning: D3Q27System::setNeighborCoordinatesForDirection has 114 NLOC, 27 CCN, 337 token, 4 PARAM, 115 length
-src/cpu/core/LBM/D3Q27System.h:551: warning: D3Q27System::getCompFeqForDirection has 93 NLOC, 28 CCN, 1594 token, 5 PARAM, 94 length
-src/cpu/core/LBM/D3Q27System.h:695: warning: D3Q27System::getIncompFeqForDirection has 84 NLOC, 28 CCN, 1472 token, 5 PARAM, 86 length
-src/cpu/core/LBM/D3Q27System.h:826: warning: D3Q27System::getBoundaryVelocityForDirection has 61 NLOC, 27 CCN, 676 token, 4 PARAM, 62 length
-src/cpu/core/Connectors/CoarseToFineVectorConnector.h:150: warning: CoarseToFineVectorConnector<VectorTransmitter>::CoarseToFineVectorConnector has 23 NLOC, 27 CCN, 227 token, 11 PARAM, 24 length
-src/cpu/core/Connectors/CoarseToFineVectorConnector.h:182: warning: CoarseToFineVectorConnector<VectorTransmitter>::isRemoteConnector has 11 NLOC, 16 CCN, 93 token, 0 PARAM, 11 length
-src/cpu/core/Connectors/CoarseToFineVectorConnector.h:301: warning: CoarseToFineVectorConnector<VectorTransmitter>::init has 80 NLOC, 35 CCN, 526 token, 0 PARAM, 87 length
-src/cpu/core/Connectors/CoarseToFineVectorConnector.h:390: warning: CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors has 311 NLOC, 27 CCN, 3140 token, 0 PARAM, 406 length
-src/cpu/core/Connectors/CoarseToFineVectorConnector.h:896: warning: CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors has 592 NLOC, 27 CCN, 6167 token, 0 PARAM, 706 length
-src/cpu/core/Connectors/CoarseToFineVectorConnector.h:1634: warning: CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax has 120 NLOC, 73 CCN, 933 token, 6 PARAM, 139 length
-src/cpu/core/Connectors/CoarseToFineVectorConnector.h:1775: warning: CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax has 121 NLOC, 73 CCN, 935 token, 7 PARAM, 138 length
-src/cpu/core/Connectors/FullDirectConnector.cpp:60: warning: FullDirectConnector::exchangeData has 115 NLOC, 51 CCN, 1071 token, 0 PARAM, 129 length
-src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp:64: warning: ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData has 234 NLOC, 51 CCN, 2628 token, 0 PARAM, 256 length
-src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp:51: warning: ThreeDistributionsDoubleGhostLayerFullVectorConnector::init has 42 NLOC, 28 CCN, 384 token, 0 PARAM, 50 length
-src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp:108: warning: ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData has 230 NLOC, 51 CCN, 2353 token, 0 PARAM, 258 length
-src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp:373: warning: ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData has 230 NLOC, 51 CCN, 2353 token, 0 PARAM, 248 length
-src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.cpp:51: warning: TwoDistributionsFullVectorConnector::init has 40 NLOC, 28 CCN, 322 token, 0 PARAM, 48 length
-src/cpu/core/Connectors/OneDistributionFullVectorConnector.cpp:13: warning: OneDistributionFullVectorConnector::init has 55 NLOC, 28 CCN, 294 token, 0 PARAM, 63 length
-src/cpu/core/Connectors/FullVectorConnector.cpp:60: warning: FullVectorConnector::fillData has 177 NLOC, 62 CCN, 979 token, 0 PARAM, 189 length
-src/cpu/core/Connectors/FullVectorConnector.cpp:256: warning: FullVectorConnector::distributeData has 175 NLOC, 62 CCN, 925 token, 0 PARAM, 185 length
-src/cpu/core/Connectors/FineToCoarseVectorConnector.h:140: warning: FineToCoarseVectorConnector<VectorTransmitter>::FineToCoarseVectorConnector has 22 NLOC, 27 CCN, 187 token, 6 PARAM, 25 length
-src/cpu/core/Connectors/FineToCoarseVectorConnector.h:227: warning: FineToCoarseVectorConnector<VectorTransmitter>::init has 57 NLOC, 27 CCN, 373 token, 0 PARAM, 61 length
-src/cpu/core/Connectors/FineToCoarseVectorConnector.h:290: warning: FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors has 422 NLOC, 28 CCN, 3315 token, 0 PARAM, 500 length
-src/cpu/core/Connectors/FineToCoarseVectorConnector.h:856: warning: FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors has 233 NLOC, 27 CCN, 1623 token, 0 PARAM, 262 length
-src/cpu/core/Connectors/FineToCoarseVectorConnector.h:1164: warning: FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax has 120 NLOC, 73 CCN, 933 token, 6 PARAM, 140 length
-src/cpu/core/Connectors/FineToCoarseVectorConnector.h:1306: warning: FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax has 121 NLOC, 73 CCN, 935 token, 7 PARAM, 139 length
-src/cpu/core/Connectors/FineToCoarseVectorConnector.h:1458: warning: FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins has 74 NLOC, 37 CCN, 312 token, 6 PARAM, 101 length
-src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp:62: warning: TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData has 234 NLOC, 51 CCN, 2628 token, 0 PARAM, 256 length
-src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp:51: warning: TwoDistributionsDoubleGhostLayerFullVectorConnector::init has 41 NLOC, 28 CCN, 358 token, 0 PARAM, 49 length
-src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp:107: warning: TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData has 230 NLOC, 51 CCN, 2353 token, 0 PARAM, 258 length
-src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp:372: warning: TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData has 230 NLOC, 51 CCN, 2353 token, 0 PARAM, 248 length
-src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.cpp:51: warning: ThreeDistributionsFullVectorConnector::init has 41 NLOC, 28 CCN, 348 token, 0 PARAM, 49 length
-src/cpu/core/Interactors/D3Q27Interactor.cpp:286: warning: D3Q27Interactor::setDifferencesToGbObject3D has 233 NLOC, 55 CCN, 2007 token, 1 PARAM, 289 length
-src/cpu/core/Interactors/D3Q27Interactor.cpp:576: warning: D3Q27Interactor::addQsLineSet has 180 NLOC, 35 CCN, 1190 token, 2 PARAM, 192 length
-src/cpu/core/Interactors/D3Q27Interactor.cpp:769: warning: D3Q27Interactor::getQsLineSet has 213 NLOC, 71 CCN, 1422 token, 0 PARAM, 223 length
-src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp:123: warning: D3Q27TriFaceMeshInteractor::setQs has 290 NLOC, 46 CCN, 3345 token, 1 PARAM, 454 length
-src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp:592: warning: D3Q27TriFaceMeshInteractor::initInteractor2 has 389 NLOC, 62 CCN, 4303 token, 1 PARAM, 719 length
-src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp:1312: warning: D3Q27TriFaceMeshInteractor::refineBlockGridToLevel has 129 NLOC, 26 CCN, 1733 token, 3 PARAM, 181 length
-src/cpu/core/Interactors/Interactor3D.cpp:107: warning: Interactor3D::isBlockOutsideGeoObject has 33 NLOC, 21 CCN, 406 token, 7 PARAM, 39 length
-src/cpu/core/Interactors/Interactor3D.cpp:147: warning: Interactor3D::isBlockInsideGeoObject has 33 NLOC, 21 CCN, 405 token, 7 PARAM, 39 length
-src/cpu/core/Interactors/Interactor3D.cpp:187: warning: Interactor3D::isBlockCuttingGeoObject has 33 NLOC, 21 CCN, 405 token, 7 PARAM, 39 length
-src/cpu/core/Parallel/SimpleGeometricPartitioner.h:21: warning: SimpleGeometricPartitioner::createDimensions has 59 NLOC, 20 CCN, 414 token, 4 PARAM, 69 length
-src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.cpp:92: warning: InSituCatalystSimulationObserver::addData has 63 NLOC, 16 CCN, 655 token, 1 PARAM, 76 length
-src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.cpp:209: warning: InSituCatalystSimulationObserver::addVTKGridData has 97 NLOC, 21 CCN, 1115 token, 1 PARAM, 126 length
-src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp:855: warning: MPIIOMigrationBESimulationObserver::writeDataSet.MPIIOMigrationBESimulationObserver::writeDataSet.MPIIOMigrationBESimulationObserver::write4DArray.MPIIOMigrationBESimulationObserver::writeDataSet.MPIIOMigrationBESimulationObserver::writeDataSet.MPIIOMigrationBESimulationObserver::write4DArray.MPIIOMigrationBESimulationObserver::write3DArray.MPIIOMigrationBESimulationObserver::writeDataSet.MPIIOMigrationBESimulationObserver::writeDataSet.MPIIOMigrationBESimulationObserver::write4DArray.MPIIOMigrationBESimulationObserver::writeDataSet.MPIIOMigrationBESimulationObserver::writeDataSet.MPIIOMigrationBESimulationObserver::write4DArray.MPIIOMigrationBESimulationObserver::write3DArray.MPIIOMigrationBESimulationObserver::writeBoundaryConds.MPIIOMigrationBESimulationObserver::blocksExchange has 110 NLOC, 21 CCN, 939 token, 6 PARAM, 132 length
-src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.cpp:125: warning: InSituVTKSimulationObserver::addData has 101 NLOC, 21 CCN, 1188 token, 1 PARAM, 136 length
-src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp:111: warning: WriteMQFromSelectionSimulationObserver::addDataMQ has 74 NLOC, 16 CCN, 756 token, 1 PARAM, 103 length
-src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp:205: warning: QCriterionSimulationObserver::getNeighborVelocities has 103 NLOC, 30 CCN, 1174 token, 9 PARAM, 143 length
-src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp:144: warning: WriteMacroscopicQuantitiesSimulationObserver::addDataMQ has 79 NLOC, 18 CCN, 1004 token, 1 PARAM, 135 length
-src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.cpp:43: warning: PressureCoefficientSimulationObserver::calculateRho has 68 NLOC, 16 CCN, 642 token, 0 PARAM, 79 length
-src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp:89: warning: LineTimeSeriesSimulationObserver::collectData has 111 NLOC, 26 CCN, 957 token, 0 PARAM, 116 length
-src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp:144: warning: WriteMacroscopicQuantitiesPlusMassSimulationObserver::addDataMQ has 79 NLOC, 19 CCN, 1016 token, 1 PARAM, 135 length
-src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp:193: warning: TimeAveragedValuesSimulationObserver::addData has 126 NLOC, 18 CCN, 1543 token, 1 PARAM, 161 length
-src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp:579: warning: TimeAveragedValuesSimulationObserver::calculateAverageValues.TimeAveragedValuesSimulationObserver::planarAverage has 97 NLOC, 19 CCN, 805 token, 1 PARAM, 122 length
-src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp:413: warning: ShearStressSimulationObserver::findPlane has 399 NLOC, 122 CCN, 3322 token, 10 PARAM, 417 length
-src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp:845: warning: ShearStressSimulationObserver::initDistance has 85 NLOC, 24 CCN, 739 token, 0 PARAM, 109 length
-src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp:199: warning: D3Q27EsoTwist3DSplittedVector::setPostCollisionDistributionForDirection has 59 NLOC, 28 CCN, 1083 token, 5 PARAM, 60 length
-src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp:260: warning: D3Q27EsoTwist3DSplittedVector::setPostCollisionDistributionForDirection has 90 NLOC, 28 CCN, 772 token, 5 PARAM, 91 length
-src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp:352: warning: D3Q27EsoTwist3DSplittedVector::setPreCollisionDistributionForDirection has 59 NLOC, 28 CCN, 1083 token, 5 PARAM, 60 length
-src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp:413: warning: D3Q27EsoTwist3DSplittedVector::setPreCollisionDistributionForDirection has 90 NLOC, 28 CCN, 774 token, 5 PARAM, 91 length
-src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp:505: warning: D3Q27EsoTwist3DSplittedVector::getPreCollisionDistributionForDirection has 62 NLOC, 28 CCN, 688 token, 4 PARAM, 63 length
-src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp:569: warning: D3Q27EsoTwist3DSplittedVector::getDistributionInvForDirection has 62 NLOC, 28 CCN, 688 token, 4 PARAM, 63 length
-src/cpu/core/Simulation/Simulation.cpp:128: warning: Simulation::initRemoteConnectors has 50 NLOC, 16 CCN, 435 token, 0 PARAM, 67 length
-src/cpu/core/Simulation/Simulation.cpp:245: warning: Simulation::run has 59 NLOC, 20 CCN, 452 token, 0 PARAM, 110 length
-src/cpu/core/Simulation/Grid3D.cpp:181: warning: Grid3D::getBlock has 29 NLOC, 21 CCN, 316 token, 4 PARAM, 32 length
-src/cpu/core/Simulation/Grid3D.cpp:1103: warning: Grid3D::getNeighborBlocksForDirection has 87 NLOC, 27 CCN, 641 token, 7 PARAM, 88 length
-src/cpu/core/Simulation/Grid3D.cpp:1209: warning: Grid3D::getSubBlocksZero has 50 NLOC, 17 CCN, 510 token, 6 PARAM, 58 length
-src/cpu/core/Simulation/Grid3D.cpp:1268: warning: Grid3D::getNeighborBlocksForDirectionWithREST has 90 NLOC, 28 CCN, 663 token, 7 PARAM, 91 length
-src/cpu/core/BoundaryConditions/BoundaryConditions.h:194: warning: BoundaryConditions::getBoundaryVelocity has 62 NLOC, 27 CCN, 661 token, 1 PARAM, 63 length
-src/cpu/core/BoundaryConditions/VelocityBC.cpp:201: warning: VelocityBC::init has 77 NLOC, 30 CCN, 901 token, 2 PARAM, 85 length
-src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.cpp:59: warning: SimpleSlipBCStrategy::applyBC has 56 NLOC, 29 CCN, 928 token, 0 PARAM, 62 length
-src/cpu/core/BoundaryConditions/SlipBCStrategy.cpp:21: warning: SlipBCStrategy::applyBC has 57 NLOC, 29 CCN, 1020 token, 0 PARAM, 64 length
-src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp:73: warning: SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors has 221 NLOC, 101 CCN, 2901 token, 2 PARAM, 264 length
-src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp:338: warning: SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors has 67 NLOC, 22 CCN, 678 token, 6 PARAM, 72 length
-src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.cpp:16: warning: SetUndefinedNodesBlockVisitor::visit has 630 NLOC, 119 CCN, 4504 token, 2 PARAM, 653 length
-src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.cpp:12: warning: SetInterpolationDirsBlockVisitor::visit has 128 NLOC, 46 CCN, 822 token, 2 PARAM, 133 length
-src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp:26: warning: InitDistributionsWithInterpolationGridVisitor::visit has 57 NLOC, 19 CCN, 479 token, 1 PARAM, 69 length
-src/basics/utilities/Vector3D.cpp:274: warning: Vector3D::GetBarycentrics has 154 NLOC, 25 CCN, 1462 token, 5 PARAM, 186 length
-src/basics/writer/WbWriterAvsASCII.cpp:219: warning: WbWriterAvsASCII::writeQuadsWithNodeData has 104 NLOC, 17 CCN, 1162 token, 5 PARAM, 131 length
-src/basics/writer/WbWriterAvsASCII.cpp:351: warning: WbWriterAvsASCII::writeQuadsWithCellData has 106 NLOC, 17 CCN, 1166 token, 5 PARAM, 134 length
-src/basics/writer/WbWriterAvsASCII.cpp:486: warning: WbWriterAvsASCII::writeQuadsWithNodeAndCellData has 140 NLOC, 25 CCN, 1567 token, 7 PARAM, 181 length
-src/basics/writer/WbWriterAvsASCII.cpp:741: warning: WbWriterAvsASCII::writeTrianglesWithNodeData has 105 NLOC, 17 CCN, 1146 token, 5 PARAM, 132 length
-src/basics/writer/WbWriterAvsASCII.cpp:874: warning: WbWriterAvsASCII::writeOctsWithCellData has 112 NLOC, 17 CCN, 1286 token, 5 PARAM, 140 length
-src/basics/writer/WbWriterAvsASCII.cpp:1015: warning: WbWriterAvsASCII::writeOctsWithNodeData has 116 NLOC, 19 CCN, 1334 token, 5 PARAM, 144 length
-src/basics/writer/WbWriterVtkBinary.cpp:373: warning: WbWriterVtkBinary::writeQuadsWithNodeAndCellData has 105 NLOC, 19 CCN, 1147 token, 7 PARAM, 128 length
-src/basics/writer/WbWriterAvsBinary.cpp:389: warning: WbWriterAvsBinary::writeTrianglesWithNodeData has 105 NLOC, 17 CCN, 1144 token, 5 PARAM, 132 length
-src/basics/writer/WbWriterAvsBinary.cpp:522: warning: WbWriterAvsBinary::writeQuadsWithNodeData has 105 NLOC, 17 CCN, 1162 token, 5 PARAM, 132 length
-src/basics/writer/WbWriterAvsBinary.cpp:655: warning: WbWriterAvsBinary::writeQuadsWithCellData has 105 NLOC, 17 CCN, 1164 token, 5 PARAM, 133 length
-src/basics/writer/WbWriterAvsBinary.cpp:789: warning: WbWriterAvsBinary::writeQuadsWithNodeAndCellData has 139 NLOC, 25 CCN, 1565 token, 7 PARAM, 180 length
-src/basics/writer/WbWriterAvsBinary.cpp:970: warning: WbWriterAvsBinary::writeOctsWithCellData has 112 NLOC, 17 CCN, 1284 token, 5 PARAM, 140 length
-src/basics/writer/WbWriterAvsBinary.cpp:1111: warning: WbWriterAvsBinary::writeOctsWithNodeData has 116 NLOC, 19 CCN, 1332 token, 5 PARAM, 144 length
-src/basics/geometry3d/KdTree/splitalgorithms/KdSAHSplit.h:162: warning: Kd::SAHSplit::findPossibleSplitCandidates has 37 NLOC, 18 CCN, 440 token, 3 PARAM, 61 length
-src/basics/geometry3d/GbObject3D.cpp:59: warning: GbObject3D::isCellCuttingGbObject3D has 15 NLOC, 17 CCN, 232 token, 6 PARAM, 15 length
-src/basics/geometry3d/GbTriangularMesh3D.cpp:156: warning: GbTriangularMesh3D::deleteRedundantNodes has 78 NLOC, 17 CCN, 740 token, 0 PARAM, 85 length
-src/basics/geometry3d/GbTriangularMesh3D.cpp:1339: warning: GbTriangularMesh3D::InTri2D has 21 NLOC, 34 CCN, 368 token, 2 PARAM, 30 length
-src/basics/geometry3d/GbTriangularMesh3D.cpp:1426: warning: GbTriangularMesh3D::SegTriCross has 27 NLOC, 25 CCN, 358 token, 3 PARAM, 42 length
-src/basics/geometry3d/GbMeshTools3D.h:70: warning: GbMeshTools3D::triBoxOverlap has 159 NLOC, 35 CCN, 1686 token, 3 PARAM, 245 length
-src/basics/geometry3d/GbTriFaceMesh3D.cpp:150: warning: GbTriFaceMesh3D::deleteRedundantNodes has 69 NLOC, 18 CCN, 589 token, 0 PARAM, 127 length
-src/basics/geometry3d/GbHalfSpaceKrischan3D.cpp:100: warning: GbHalfSpaceKrischan3D::getCellVolumeInsideGbObject3D has 117 NLOC, 27 CCN, 1378 token, 6 PARAM, 203 length
-src/basics/geometry3d/GbVoxelMatrix3D.cpp:173: warning: GbVoxelMatrix3D::getIntersectionRaytraceFactor has 36 NLOC, 26 CCN, 533 token, 6 PARAM, 43 length
-src/basics/geometry3d/GbVoxelMatrix3D.cpp:722: warning: GbVoxelMatrix3D::rotateAroundY has 44 NLOC, 20 CCN, 411 token, 1 PARAM, 63 length
-src/basics/geometry3d/GbSystem3D.cpp:47: warning: GbSystem3D::calculateIntersectionPoint3D has 55 NLOC, 22 CCN, 634 token, 4 PARAM, 60 length
-src/basics/geometry3d/GbSystem3D.cpp:109: warning: GbSystem3D::hasIntersectionPoint3D has 55 NLOC, 22 CCN, 626 token, 4 PARAM, 59 length
-src/basics/geometry3d/GbSystem3D.cpp:202: warning: GbSystem3D::createClipLine3D has 119 NLOC, 22 CCN, 1168 token, 8 PARAM, 147 length
-src/basics/geometry3d/GbSystem3D.cpp:687: warning: GbSystem3D::clipPolygon3D has 256 NLOC, 53 CCN, 3060 token, 7 PARAM, 292 length
-src/basics/geometry3d/GbSystem3D.cpp:980: warning: GbSystem3D::clipRectangle3D has 50 NLOC, 16 CCN, 388 token, 8 PARAM, 53 length
-src/basics/geometry3d/GbVector3D.cpp:308: warning: GbVector3D::GetBarycentrics has 156 NLOC, 25 CCN, 1574 token, 5 PARAM, 181 length
-src/basics/geometry3d/GbSphere3D.cpp:760: warning: GbSphere3D::getCellVolumeInsideGbObject3DHelperFunction has 113 NLOC, 27 CCN, 1309 token, 6 PARAM, 155 length
-src/basics/geometry3d/GbCylinder3D.cpp:114: warning: GbCylinder3D::calculateValues has 47 NLOC, 17 CCN, 407 token, 0 PARAM, 52 length
-src/basics/geometry3d/GbCylinder3D.cpp:252: warning: GbCylinder3D::isPointInGbObject3D has 23 NLOC, 21 CCN, 278 token, 4 PARAM, 31 length
-src/basics/geometry3d/GbCylinder3D.cpp:325: warning: GbCylinder3D::isCellInsideOrCuttingGbObject3D has 59 NLOC, 31 CCN, 657 token, 6 PARAM, 78 length
-src/basics/geometry3d/GbCylinder3D.cpp:404: warning: GbCylinder3D::createClippedLine3D has 250 NLOC, 48 CCN, 3201 token, 2 PARAM, 301 length
-src/basics/geometry3d/GbCylinder3D.cpp:1155: warning: GbCylinder3D::getIntersectionRaytraceFactor has 138 NLOC, 54 CCN, 1319 token, 6 PARAM, 189 length
-src/basics/geometry3d/GbTriangle3D.cpp:645: warning: GbTriangle3D::enclosesPoint2D has 79 NLOC, 30 CCN, 640 token, 2 PARAM, 88 length
-src/basics/geometry3d/GbTriangle3D.cpp:965: warning: GbTriangle3D::getDistanceFromPoint has 171 NLOC, 26 CCN, 1453 token, 1 PARAM, 184 length
diff --git a/pythonbindings/CMakeLists.txt b/pythonbindings/CMakeLists.txt
index 53700cc8d2769581bcbfbe6e984fb3c90bbd2996..c3cf182cb8fc7ed2859b55ccab0e1c4642ffce9a 100644
--- a/pythonbindings/CMakeLists.txt
+++ b/pythonbindings/CMakeLists.txt
@@ -41,15 +41,15 @@ target_include_directories(lbm_bindings PRIVATE ${CMAKE_SOURCE_DIR}/src/)
 target_include_directories(lbm_bindings PRIVATE ${CMAKE_BINARY_DIR})
 add_dependencies(python_bindings lbm_bindings)
 
-pybind11_add_module(communicator_bindings MODULE src/communicator.cpp)
-set_target_properties(  communicator_bindings PROPERTIES
+pybind11_add_module(parallel_bindings MODULE src/parallel.cpp)
+set_target_properties(  parallel_bindings PROPERTIES
                         LIBRARY_OUTPUT_DIRECTORY ${PYFLUIDS_DIR}
-                        OUTPUT_NAME "communicator")
-target_link_libraries(communicator_bindings PRIVATE parallel)
-target_include_directories(communicator_bindings PRIVATE ${CMAKE_SOURCE_DIR}/src/)
-target_include_directories(communicator_bindings PRIVATE ${CMAKE_BINARY_DIR})
-target_compile_definitions(communicator_bindings PRIVATE VF_MPI)
-add_dependencies(python_bindings communicator_bindings)
+                        OUTPUT_NAME "parallel")
+target_link_libraries(parallel_bindings PRIVATE parallel)
+target_include_directories(parallel_bindings PRIVATE ${CMAKE_SOURCE_DIR}/src/)
+target_include_directories(parallel_bindings PRIVATE ${CMAKE_BINARY_DIR})
+target_compile_definitions(parallel_bindings PRIVATE VF_MPI)
+add_dependencies(python_bindings parallel_bindings)
 
 
 IF(BUILD_VF_GPU)
@@ -105,5 +105,5 @@ endif()
     IF(BUILD_VF_GPU)
     target_compile_definitions(gpu_bindings PRIVATE VF_DOUBLE_ACCURACY)
     endif()
-    target_compile_definitions(communicator_bindings PRIVATE VF_DOUBLE_ACCURACY)
+    target_compile_definitions(parallel_bindings PRIVATE VF_DOUBLE_ACCURACY)
 endif()
\ No newline at end of file
diff --git a/pythonbindings/pyfluids-stubs/gpu/__init__.pyi b/pythonbindings/pyfluids-stubs/gpu/__init__.pyi
index 8f78fd3387dc59c94ddf2315635e674a7330dae9..31fe74fb1a9d607960d21e7bf5448d95d99d1211 100644
--- a/pythonbindings/pyfluids-stubs/gpu/__init__.pyi
+++ b/pythonbindings/pyfluids-stubs/gpu/__init__.pyi
@@ -38,10 +38,11 @@ from typing import Callable, ClassVar, List, Optional
 from typing import overload, Union
 import numpy as np
 import numpy.typing as npt
-import basics
+import basics, parallel
 
 from . import grid_generator as grid_generator
 from . import probes as probes
+from . import kernel as kernel
 
 class PreCollisionInteractor:
     def __init__(self, *args, **kwargs) -> None: ...
@@ -51,10 +52,8 @@ class FileCollection:
     def __init__(self, *args, **kwargs) -> None: ...
 
 class ActuatorFarm(PreCollisionInteractor):
-    def __init__(self, number_of_blades_per_turbine: int, density: float, number_of_nodes_per_blade: int, epsilon: float, level: int, delta_t: float, delta_x: float, use_host_arrays: bool) -> None: ...
-    def add_turbine(self, posX: float, posY: float, posZ: float, diameter: float, omega: float, azimuth: float, yaw: float, bladeRadii: List[float]) -> None: ...
-    def calc_blade_forces(self) -> None: ...
-    def get_all_azimuths(self) -> npt.NDArray[np.float32]: ...
+    def __init__(self, diameter: float, blade_radii: npt.NDArray[np.float32],turbine_positions_x: npt.NDArray[np.float32], turbine_positions_y: npt.NDArray[np.float32], turbine_positions_z: npt.NDArray[np.float32], density: float, smearing_width: float, level: int, delta_t: float, delta_x: float, use_host_arrays: bool) -> None: ...
+    def update_forces_and_coordinates(self) -> None: ...
     def get_all_blade_coords_x(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_coords_x_device(self) -> int: ...
     def get_all_blade_coords_y(self) -> npt.NDArray[np.float32]: ...
@@ -67,20 +66,15 @@ class ActuatorFarm(PreCollisionInteractor):
     def get_all_blade_forces_y_device(self) -> int: ...
     def get_all_blade_forces_z(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_forces_z_device(self) -> int: ...
-    def get_all_blade_radii(self) -> npt.NDArray[np.float32]: ...
-    def get_all_blade_radii_device(self) -> int: ...
     def get_all_blade_velocities_x(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_velocities_x_device(self) -> int: ...
     def get_all_blade_velocities_y(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_velocities_y_device(self) -> int: ...
     def get_all_blade_velocities_z(self) -> npt.NDArray[np.float32]: ...
     def get_all_blade_velocities_z_device(self) -> int: ...
-    def get_all_omegas(self) -> npt.NDArray[np.float32]: ...
     def get_all_turbine_pos_x(self) -> npt.NDArray[np.float32]: ...
     def get_all_turbine_pos_y(self) -> npt.NDArray[np.float32]: ...
     def get_all_turbine_pos_z(self) -> npt.NDArray[np.float32]: ...
-    def get_all_yaws(self) -> npt.NDArray[np.float32]: ...
-    def get_turbine_azimuth(self, turbine: int) -> float: ...
     def get_turbine_blade_coords_x(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_coords_x_device(self, turbine: int) -> int: ...
     def get_turbine_blade_coords_y(self, turbine: int) -> npt.NDArray[np.float32]: ...
@@ -93,29 +87,20 @@ class ActuatorFarm(PreCollisionInteractor):
     def get_turbine_blade_forces_y_device(self, turbine: int) -> int: ...
     def get_turbine_blade_forces_z(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_forces_z_device(self, turbine: int) -> int: ...
-    def get_turbine_blade_radii(self, turbine: int) -> npt.NDArray[np.float32]: ...
-    def get_turbine_blade_radii_device(self, turbine: int) -> int: ...
     def get_turbine_blade_velocities_x(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_velocities_x_device(self, turbine: int) -> int: ...
     def get_turbine_blade_velocities_y(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_velocities_y_device(self, turbine: int) -> int: ...
     def get_turbine_blade_velocities_z(self, turbine: int) -> npt.NDArray[np.float32]: ...
     def get_turbine_blade_velocities_z_device(self, turbine: int) -> int: ...
-    def get_turbine_omega(self, turbine: int) -> float: ...
-    def get_turbine_pos(self, turbine: int) -> npt.NDArray[np.float32]: ...
-    def get_turbine_yaw(self, turbine: int) -> float: ...
-    def set_all_azimuths(self, azimuths: npt.NDArray[np.float32]) -> None: ...
     def set_all_blade_coords(self, blade_coords_x: npt.NDArray[np.float32], blade_coords_y: npt.NDArray[np.float32], blade_coords_z: npt.NDArray[np.float32]) -> None: ...
     def set_all_blade_forces(self, blade_forces_x: npt.NDArray[np.float32], blade_forces_y: npt.NDArray[np.float32], blade_forces_z: npt.NDArray[np.float32]) -> None: ...
     def set_all_blade_velocities(self, blade_velocities_x: npt.NDArray[np.float32], blade_velocities_y: npt.NDArray[np.float32], blade_velocities_z: npt.NDArray[np.float32]) -> None: ...
-    def set_all_omegas(self, omegas: npt.NDArray[np.float32]) -> None: ...
-    def set_all_yaws(self, yaws: npt.NDArray[np.float32]) -> None: ...
-    def set_turbine_azimuth(self, turbine: int, azimuth: float) -> None: ...
     def set_turbine_blade_coords(self, turbine: int, blade_coords_x: npt.NDArray[np.float32], blade_coords_y: npt.NDArray[np.float32], blade_coords_z: npt.NDArray[np.float32]) -> None: ...
     def set_turbine_blade_forces(self, turbine: int, blade_forces_x: npt.NDArray[np.float32], blade_forces_y: npt.NDArray[np.float32], blade_forces_z: npt.NDArray[np.float32]) -> None: ...
     def set_turbine_blade_velocities(self, turbine: int, blade_velocities_x: npt.NDArray[np.float32], blade_velocities_y: npt.NDArray[np.float32], blade_velocities_z: npt.NDArray[np.float32]) -> None: ...
-    def set_turbine_omega(self, turbine: int, omega: float) -> None: ...
-    def set_turbine_yaw(self, turbine: int, yaw: float) -> None: ...
+    def set_turbine_azimuth(self, turbine: int, azimuth: float) -> None: ...
+    def enable_output(self, output_name: str, t_start_out: int, t_out: int) -> None: ...
     @property
     def delta_t(self) -> float: ...
     @property
@@ -133,6 +118,8 @@ class ActuatorFarm(PreCollisionInteractor):
     @property
     def number_of_turbines(self) -> int: ...
 
+class ActuatorFarmStandalone(ActuatorFarm):
+    def __init__(self, diameter: float, number_of_nodes_per_blade: int, turbine_positions_x: npt.NDArray[np.float32], turbine_positions_y: npt.NDArray[np.float32], turbine_positions_z: npt.NDArray[np.float32], rotor_speeds: npt.NDArray[np.float32], density: float, smearing_width: float, level: int, delta_t: float, delta_x: float) -> None: ...
 
 class BoundaryConditionFactory:
     def __init__(self) -> None: ...
@@ -145,14 +132,6 @@ class BoundaryConditionFactory:
     def set_velocity_boundary_condition(self, boundary_condition_type: VelocityBC) -> None: ...
 
 
-class MpiCommunicator:
-    def __init__(self, *args, **kwargs) -> None: ...
-    @staticmethod
-    def get_instance() -> MpiCommunicator: ...
-    def get_number_of_process(self) -> int: ...
-    def get_pid(self) -> int: ...
-
-
 class CudaMemoryManager:
     def __init__(self, parameter: Parameter) -> None: ...
 
@@ -176,7 +155,7 @@ class FileType:
 class GridProvider:
     def __init__(self, *args, **kwargs) -> None: ...
     @staticmethod
-    def make_grid_generator(builder: grid_generator.GridBuilder, para: Parameter, cuda_memory_manager: CudaMemoryManager, communicator: MpiCommunicator) -> GridProvider: ...
+    def make_grid_generator(builder: grid_generator.GridBuilder, para: Parameter, cuda_memory_manager: CudaMemoryManager, communicator: parallel.Communicator) -> GridProvider: ...
 
 class MultipleGridBuilder:
     def __init__(self) -> None: ...
@@ -273,7 +252,7 @@ class Parameter:
     def set_initial_condition_perturbed_log_law(self, u_star: float, z0: float, length_x: float, length_z: float, height: float, velocity_ratio: float) -> None: ...
     def set_initial_condition_uniform(self, velocity_x: float, velocity_y: float, velocity_z: float) -> None: ...
     def set_is_body_force(self, is_body_force: bool) -> None: ...
-    def set_main_kernel(self, kernel: str) -> None: ...
+    def configure_main_kernel(self, kernel: str) -> None: ...
     def set_max_dev(self, max_dev: int) -> None: ...
     def set_max_level(self, number_of_levels: int) -> None: ...
     def set_outflow_pressure_correction_factor(self, correction_factor: float) -> None: ...
diff --git a/pythonbindings/pyfluids-stubs/gpu/kernel/__init__.pyi b/pythonbindings/pyfluids-stubs/gpu/kernel/__init__.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..720d94386904022b45611372179ab4d772ca2ff6
--- /dev/null
+++ b/pythonbindings/pyfluids-stubs/gpu/kernel/__init__.pyi
@@ -0,0 +1,2 @@
+from . import compressible as compressible
+from . import incompressible as incompressible
\ No newline at end of file
diff --git a/pythonbindings/pyfluids-stubs/gpu/kernel/compressible.pyi b/pythonbindings/pyfluids-stubs/gpu/kernel/compressible.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..7462ea0789da29711693df06117f6730586a0f2f
--- /dev/null
+++ b/pythonbindings/pyfluids-stubs/gpu/kernel/compressible.pyi
@@ -0,0 +1,4 @@
+BGK: str
+BGKPlus: str
+K17CompressibleNavierStokes: str
+K15CompressibleNavierStokes: str
diff --git a/pythonbindings/pyfluids-stubs/gpu/kernel/incompressible.pyi b/pythonbindings/pyfluids-stubs/gpu/kernel/incompressible.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..9ee58b85a548f63c19e87eabb11c98e3e07eb8a4
--- /dev/null
+++ b/pythonbindings/pyfluids-stubs/gpu/kernel/incompressible.pyi
@@ -0,0 +1,3 @@
+BGK: str
+BGKPlus: str
+CumulantK15: str
\ No newline at end of file
diff --git a/pythonbindings/pyfluids-stubs/parallel.pyi b/pythonbindings/pyfluids-stubs/parallel.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..a1f420de3d00b0314f22c65e78eb81bc1aed4d54
--- /dev/null
+++ b/pythonbindings/pyfluids-stubs/parallel.pyi
@@ -0,0 +1,46 @@
+r"""
+=======================================================================================
+ ____          ____    __    ______     __________   __      __       __        __
+ \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+      \    \  |    |   ________________________________________________________________
+       \    \ |    |  |  ______________________________________________________________|
+        \    \|    |  |  |         __          __     __     __     ______      _______
+         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+
+  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 parallel.pyi
+! \ingroup bindings
+! \author Henry Korb
+=======================================================================================
+"""
+
+from __future__ import annotations
+
+class Communicator:
+    @staticmethod
+    def get_instance() -> Communicator: ...
+    def get_number_of_processes(self) -> int: ...
+    def get_process_id(self) -> int: ...
+
+class MPICommunicator(Communicator):
+    @staticmethod
+    def get_instance() -> MPICommunicator: ...
\ No newline at end of file
diff --git a/pythonbindings/pyfluids/__init__.py b/pythonbindings/pyfluids/__init__.py
index 5b4197972c0a8738c551e57e635415e3858f53e6..acd2f2605bbba23b64ecb7882c25e369963c7dc1 100644
--- a/pythonbindings/pyfluids/__init__.py
+++ b/pythonbindings/pyfluids/__init__.py
@@ -31,28 +31,4 @@ r"""
 ! \ingroup pyfluids
 ! \author Henry Korb
 =======================================================================================
-"""
-try:
-    from . import basics
-except ImportError:
-    print("Basics bindings not included")
-try:
-    from . import logger
-except ImportError:
-    print("Logger bindings not included")
-try:
-    from . import lbm
-except ImportError:
-    print("LBM bindings not included")
-try:
-    from . import communicator
-except ImportError:
-    print("communicator bindings not included")
-try:
-    from . import gpu
-except ImportError:
-    print("GPU bindings not included")
-try:
-    from . import cpu
-except ImportError:
-    print("CPU bindings not included")
\ No newline at end of file
+"""
\ No newline at end of file
diff --git a/pythonbindings/src/cpu/submodules/boundaryconditions.cpp b/pythonbindings/src/cpu/submodules/boundaryconditions.cpp
index 8ab64a7a5037d134563eaac4e836f72e89c4ec77..890add492b699dde52a6c98ad52a5b28d632a464 100644
--- a/pythonbindings/src/cpu/submodules/boundaryconditions.cpp
+++ b/pythonbindings/src/cpu/submodules/boundaryconditions.cpp
@@ -33,14 +33,14 @@
 #include "BCStrategy.h"
 #include <pybind11/pybind11.h>
 #include <pybind11/stl.h>
-#include <BoundaryConditions/DensityBC.h>
-#include <BoundaryConditions/NonReflectingOutflowBCStrategy.h>
+#include <BoundaryConditions/PressureNonEquilibrium.h>
+#include <BoundaryConditions/OutflowNonReflecting.h>
 #include <BoundaryConditions/BC.h>
 #include <BoundaryConditions/NoSlipBC.h>
 #include <BoundaryConditions/VelocityBC.h>
-#include <BoundaryConditions/NoSlipBCStrategy.h>
-#include <BoundaryConditions/VelocityBCStrategy.h>
-#include <BoundaryConditions/HighViscosityNoSlipBCStrategy.h>
+#include <BoundaryConditions/PressureBC.h>
+#include <BoundaryConditions/NoSlipInterpolated.h>
+#include <BoundaryConditions/VelocityInterpolated.h>
 
 namespace boundaryconditions
 {
@@ -70,13 +70,10 @@ namespace boundaryconditions
 
         auto _ = py::class_<BC, std::shared_ptr<BC>>(bcModule, "BC");
 
-        bc_class<NoSlipBC, NoSlipBCStrategy>(bcModule, "NoSlipBoundaryCondition")
+        bc_class<NoSlipBC, NoSlipInterpolated>(bcModule, "NoSlipBoundaryCondition")
                 .def(py::init());
 
-        bc_class<NoSlipBC, HighViscosityNoSlipBCStrategy>(bcModule, "HighViscosityNoSlipBoundaryCondition")
-                .def(py::init());
-
-        bc_class<VelocityBC, VelocityBCStrategy>(bcModule, "VelocityBoundaryCondition")
+        bc_class<VelocityBC, VelocityInterpolated>(bcModule, "VelocityBoundaryCondition")
                 .def(py::init())
                 .def(py::init<bool &, bool &, bool &, mu::Parser &, real &, real &>(),
                      "vx1"_a, "vx2"_a, "vx3"_a,
@@ -90,7 +87,7 @@ namespace boundaryconditions
                      "vx2"_a, "vx2_start_time"_a, "vx2_end_time"_a,
                      "vx3"_a, "vx3_start_time"_a, "vx3_end_time"_a);
 
-        bc_class<DensityBC, NonReflectingOutflowBCStrategy>(bcModule, "NonReflectingOutflow")
+        bc_class<PressureBC, OutflowNonReflecting>(bcModule, "NonReflectingOutflow")
                 .def(py::init());
     }
 
diff --git a/pythonbindings/src/gpu/gpu.cpp b/pythonbindings/src/gpu/gpu.cpp
index dcb4ded4b1f0f92748323081b7de9504c2995542..71852487ea3445ee694295dd90c12e3dd2908f3d 100644
--- a/pythonbindings/src/gpu/gpu.cpp
+++ b/pythonbindings/src/gpu/gpu.cpp
@@ -44,6 +44,7 @@
 #include "submodules/transient_bc_setter.cpp"
 #include "submodules/actuator_farm.cpp"
 #include "submodules/grid_scaling_factory.cpp"
+#include "submodules/kernel.cpp"
 
 namespace gpu_bindings
 {
@@ -62,5 +63,6 @@ PYBIND11_MODULE(gpu, m)
     grid_provider::makeModule(m);
     turbulence_model::makeModule(m);
     grid_scaling_factory::makeModule(m);
+    kernel::makeModule(m);
 }
 } // namespace gpu_bindings
diff --git a/pythonbindings/src/gpu/submodules/actuator_farm.cpp b/pythonbindings/src/gpu/submodules/actuator_farm.cpp
index ee5275483f85559a15aefa769ba30a87af993355..69f44e55e7837e28a100a9e4ccfa6752d72d9a24 100644
--- a/pythonbindings/src/gpu/submodules/actuator_farm.cpp
+++ b/pythonbindings/src/gpu/submodules/actuator_farm.cpp
@@ -33,7 +33,8 @@
 
 #include <pybind11/pybind11.h>
 #include <pybind11/numpy.h>
-#include <gpu/core/PreCollisionInteractor/ActuatorFarm.h>
+#include <gpu/core/PreCollisionInteractor/Actuator/ActuatorFarm.h>
+#include <gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmStandalone.h>
 #include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h>
 
 
@@ -41,9 +42,9 @@ class PyActuatorFarm : public ActuatorFarm
 {
 public:
     using ActuatorFarm::ActuatorFarm; // Inherit constructors
-    void calcBladeForces() override 
+    void updateForcesAndCoordinates() override 
     { 
-        PYBIND11_OVERRIDE_NAME(void, ActuatorFarm, "calc_blade_forces", calcBladeForces); 
+        PYBIND11_OVERRIDE_PURE_NAME(void, ActuatorFarm, "update_forces_and_coordinates", updateForcesAndCoordinates); 
     }
 };
 
@@ -62,24 +63,31 @@ namespace actuator_farm
         using arr = py::array_t<real, py::array::c_style>;
         
         py::class_<ActuatorFarm, PreCollisionInteractor, PyActuatorFarm, std::shared_ptr<ActuatorFarm>>(parentModule, "ActuatorFarm", py::dynamic_attr())
-        .def(py::init<  const uint,
+        .def(py::init<  const real,
+                        const std::vector<real>,
+                        const std::vector<real>,
+                        const std::vector<real>,
+                        const std::vector<real>,
                         const real,
-                        const uint,
                         const real,
-                        int,
+                        const int,
                         const real,
                         const real,
                         const bool>(), 
-                        py::arg("number_of_blades_per_turbine"), 
+                        py::arg("diameter"),
+                        py::arg("blade_radii"),
+                        py::arg("turbine_positions_x"),
+                        py::arg("turbine_positions_y"),
+                        py::arg("turbine_positions_z"),
                         py::arg("density"), 
-                        py::arg("number_of_nodes_per_blade"), 
-                        py::arg("epsilon"),
+                        py::arg("smearing_width"),
                         py::arg("level"), 
                         py::arg("delta_t"), 
                         py::arg("delta_x"),
                         py::arg("use_host_arrays"))
-        .def_property_readonly("number_of_turbines", &ActuatorFarm::getNumberOfTurbines)
         .def_property_readonly("number_of_nodes_per_blade", &ActuatorFarm::getNumberOfNodesPerBlade)
+        .def_property_readonly("number_of_turbines", &ActuatorFarm::getNumberOfTurbines)
+        .def_property_readonly("number_of_nodes_per_turbine", &ActuatorFarm::getNumberOfNodesPerTurbine)
         .def_property_readonly("number_of_blades_per_turbine", &ActuatorFarm::getNumberOfBladesPerTurbine)
         .def_property_readonly("number_of_grid_nodes", &ActuatorFarm::getNumberOfGridNodes)
         .def_property_readonly("number_of_indices", &ActuatorFarm::getNumberOfIndices)
@@ -87,22 +95,13 @@ namespace actuator_farm
         .def_property_readonly("delta_t", &ActuatorFarm::getDeltaT)
         .def_property_readonly("delta_x", &ActuatorFarm::getDeltaX)
 
-        .def("add_turbine", &ActuatorFarm::addTurbine, py::arg("posX"), py::arg("posY"), py::arg("posZ"), py::arg("diameter"), py::arg("omega"), py::arg("azimuth"), py::arg("yaw"), py::arg("bladeRadii"))
-
         .def("get_turbine_pos", [](ActuatorFarm& al, uint turbine){ 
             real position[3] = {al.getTurbinePosX(turbine), al.getTurbinePosY(turbine), al.getTurbinePosZ(turbine)}; return arr(3,  position);
             }, py::arg("turbine"))
-        .def("get_turbine_azimuth", &ActuatorFarm::getTurbineAzimuth, py::arg("turbine"))
-        .def("get_turbine_yaw", &ActuatorFarm::getTurbineYaw, py::arg("turbine"))
-        .def("get_turbine_omega", &ActuatorFarm::getTurbineOmega, py::arg("turbine"))
-        .def("get_all_azimuths", [](ActuatorFarm& al){ return arr(al.getNumberOfTurbines(), al.getAllAzimuths()); } )
-        .def("get_all_yaws", [](ActuatorFarm& al){ return arr(al.getNumberOfTurbines(), al.getAllYaws()); } )
-        .def("get_all_omegas", [](ActuatorFarm& al){ return arr(al.getNumberOfTurbines(), al.getAllOmegas()); } )
         .def("get_all_turbine_pos_x", [](ActuatorFarm& al){ return arr(al.getNumberOfTurbines(), al.getAllTurbinePosX()); } )
         .def("get_all_turbine_pos_y", [](ActuatorFarm& al){ return arr(al.getNumberOfTurbines(), al.getAllTurbinePosY()); } )
         .def("get_all_turbine_pos_z", [](ActuatorFarm& al){ return arr(al.getNumberOfTurbines(), al.getAllTurbinePosZ()); } )
     
-        .def("get_all_blade_radii", [](ActuatorFarm& al){ return arr({al.getNumberOfTurbines(), al.getNumberOfNodesPerBlade()}, al.getAllBladeRadii()); } )
         .def("get_all_blade_coords_x", [](ActuatorFarm& al){ return arr({al.getNumberOfTurbines(), al.getNumberOfBladesPerTurbine(), al.getNumberOfNodesPerBlade()}, al.getAllBladeCoordsX()); } )
         .def("get_all_blade_coords_y", [](ActuatorFarm& al){ return arr({al.getNumberOfTurbines(), al.getNumberOfBladesPerTurbine(), al.getNumberOfNodesPerBlade()}, al.getAllBladeCoordsY()); } )
         .def("get_all_blade_coords_z", [](ActuatorFarm& al){ return arr({al.getNumberOfTurbines(), al.getNumberOfBladesPerTurbine(), al.getNumberOfNodesPerBlade()}, al.getAllBladeCoordsZ()); } )        
@@ -113,7 +112,6 @@ namespace actuator_farm
         .def("get_all_blade_forces_y", [](ActuatorFarm& al){ return arr({al.getNumberOfTurbines(), al.getNumberOfBladesPerTurbine(), al.getNumberOfNodesPerBlade()}, al.getAllBladeForcesY()); } )
         .def("get_all_blade_forces_z", [](ActuatorFarm& al){ return arr({al.getNumberOfTurbines(), al.getNumberOfBladesPerTurbine(), al.getNumberOfNodesPerBlade()}, al.getAllBladeForcesZ()); } )
 
-        .def("get_turbine_blade_radii", [](ActuatorFarm& al, uint turbine){ return arr(al.getNumberOfNodesPerBlade(), al.getTurbineBladeRadiiDevice(turbine)); } , py::arg("turbine"))
         .def("get_turbine_blade_coords_x", [](ActuatorFarm& al, uint turbine){ return arr({al.getNumberOfBladesPerTurbine(), al.getNumberOfNodesPerBlade()}, al.getTurbineBladeCoordsXDevice(turbine)); }, py::arg("turbine") )
         .def("get_turbine_blade_coords_y", [](ActuatorFarm& al, uint turbine){ return arr({al.getNumberOfBladesPerTurbine(), al.getNumberOfNodesPerBlade()}, al.getTurbineBladeCoordsYDevice(turbine)); }, py::arg("turbine") )
         .def("get_turbine_blade_coords_z", [](ActuatorFarm& al, uint turbine){ return arr({al.getNumberOfBladesPerTurbine(), al.getNumberOfNodesPerBlade()}, al.getTurbineBladeCoordsZDevice(turbine)); }, py::arg("turbine") )        
@@ -124,7 +122,6 @@ namespace actuator_farm
         .def("get_turbine_blade_forces_y", [](ActuatorFarm& al, uint turbine){ return arr({al.getNumberOfBladesPerTurbine(), al.getNumberOfNodesPerBlade()}, al.getTurbineBladeForcesYDevice(turbine)); }, py::arg("turbine") )
         .def("get_turbine_blade_forces_z", [](ActuatorFarm& al, uint turbine){ return arr({al.getNumberOfBladesPerTurbine(), al.getNumberOfNodesPerBlade()}, al.getTurbineBladeForcesZDevice(turbine)); }, py::arg("turbine") )
 
-        .def("get_all_blade_radii_device", [](ActuatorFarm& al) -> intptr_t { return arr_to_cp(al.getAllBladeRadiiDevice()); } )
         .def("get_all_blade_coords_x_device", [](ActuatorFarm& al) -> intptr_t { return arr_to_cp(al.getAllBladeCoordsXDevice()); } )
         .def("get_all_blade_coords_y_device", [](ActuatorFarm& al) -> intptr_t { return arr_to_cp(al.getAllBladeCoordsYDevice()); } )
         .def("get_all_blade_coords_z_device", [](ActuatorFarm& al) -> intptr_t { return arr_to_cp(al.getAllBladeCoordsZDevice()); } )        
@@ -135,7 +132,6 @@ namespace actuator_farm
         .def("get_all_blade_forces_y_device", [](ActuatorFarm& al) -> intptr_t { return arr_to_cp(al.getAllBladeForcesYDevice()); } )
         .def("get_all_blade_forces_z_device", [](ActuatorFarm& al) -> intptr_t { return arr_to_cp(al.getAllBladeForcesZDevice()); } )
 
-        .def("get_turbine_blade_radii_device", [](ActuatorFarm& al, uint turbine) -> intptr_t { return arr_to_cp(al.getTurbineBladeRadiiDevice(turbine)); }, py::arg("turbine") )
         .def("get_turbine_blade_coords_x_device", [](ActuatorFarm& al, uint turbine) -> intptr_t { return arr_to_cp(al.getTurbineBladeCoordsXDevice(turbine)); }, py::arg("turbine") )
         .def("get_turbine_blade_coords_y_device", [](ActuatorFarm& al, uint turbine) -> intptr_t { return arr_to_cp(al.getTurbineBladeCoordsYDevice(turbine)); }, py::arg("turbine") )
         .def("get_turbine_blade_coords_z_device", [](ActuatorFarm& al, uint turbine) -> intptr_t { return arr_to_cp(al.getTurbineBladeCoordsZDevice(turbine)); }, py::arg("turbine") )        
@@ -146,14 +142,6 @@ namespace actuator_farm
         .def("get_turbine_blade_forces_y_device", [](ActuatorFarm& al, uint turbine) -> intptr_t { return arr_to_cp(al.getTurbineBladeForcesYDevice(turbine)); }, py::arg("turbine") )
         .def("get_turbine_blade_forces_z_device", [](ActuatorFarm& al, uint turbine) -> intptr_t { return arr_to_cp(al.getTurbineBladeForcesZDevice(turbine)); }, py::arg("turbine") )
 
-        .def("set_all_azimuths", [](ActuatorFarm& al, arr azimuths){ al.setAllAzimuths(np_to_arr(azimuths)); }, py::arg("azimuths"))
-        .def("set_all_yaws", [](ActuatorFarm& al, arr yaws){ al.setAllYaws(np_to_arr(yaws)); }, py::arg("yaws"))
-        .def("set_all_omegas", [](ActuatorFarm& al, arr omegas){ al.setAllOmegas(np_to_arr(omegas)); }, py::arg("omegas"))
-
-        .def("set_turbine_azimuth", &ActuatorFarm::setTurbineAzimuth, py::arg("turbine"), py::arg("azimuth"))
-        .def("set_turbine_yaw", &ActuatorFarm::setTurbineYaw, py::arg("turbine"), py::arg("yaw"))
-        .def("set_turbine_omega", &ActuatorFarm::setTurbineOmega, py::arg("turbine"), py::arg("omega"))
-
         .def("set_all_blade_coords", [](ActuatorFarm& al, arr coordsX, arr coordsY, arr coordsZ){ 
             al.setAllBladeCoords(np_to_arr(coordsX), np_to_arr(coordsY), np_to_arr(coordsZ)); 
         }, py::arg("blade_coords_x"), py::arg("blade_coords_y"), py::arg("blade_coords_z") )
@@ -172,6 +160,34 @@ namespace actuator_farm
         .def("set_turbine_blade_forces", [](ActuatorFarm& al, uint turbine, arr forcesX, arr forcesY, arr forcesZ){ 
             al.setTurbineBladeForces(turbine, np_to_arr(forcesX), np_to_arr(forcesY), np_to_arr(forcesZ)); 
         }, py::arg("turbine"), py::arg("blade_forces_x"), py::arg("blade_forces_y"), py::arg("blade_forces_z") )
-        .def("calc_blade_forces", &ActuatorFarm::calcBladeForces);
+        .def("update_forces_and_coordinates", &ActuatorFarm::updateForcesAndCoordinates)
+        .def("enable_output", &ActuatorFarm::enableOutput, py::arg("output_name"), py::arg("t_start_out"), py::arg("t_out"))
+        .def("set_turbine_azimuth", &ActuatorFarm::setTurbineAzimuth, py::arg("turbine"), py::arg("azimuth"));
+
+        py::class_<ActuatorFarmStandalone, ActuatorFarm, std::shared_ptr<ActuatorFarmStandalone>>(parentModule, "ActuatorFarmStandalone")
+        .def(py::init<  const real,
+                        const uint,
+                        const std::vector<real>,
+                        const std::vector<real>,
+                        const std::vector<real>,
+                        const std::vector<real>,
+                        const real,
+                        const real,
+                        const int,
+                        const real,
+                        const real>(), 
+                        py::arg("diameter"),
+                        py::arg("number_of_nodes_per_blade"), 
+                        py::arg("turbine_positions_x"),
+                        py::arg("turbine_positions_y"),
+                        py::arg("turbine_positions_z"),
+                        py::arg("rotor_speeds"),
+                        py::arg("density"), 
+                        py::arg("smearing_width"),
+                        py::arg("level"), 
+                        py::arg("delta_t"), 
+                        py::arg("delta_x"));
     }
+
+
 }
\ No newline at end of file
diff --git a/pythonbindings/src/gpu/submodules/boundary_conditions.cpp b/pythonbindings/src/gpu/submodules/boundary_conditions.cpp
index 26fdd3e712714074928f452c179b977e3769eec3..21e3e85f6aaf3b802dc418161aa4789e2ac304b6 100644
--- a/pythonbindings/src/gpu/submodules/boundary_conditions.cpp
+++ b/pythonbindings/src/gpu/submodules/boundary_conditions.cpp
@@ -32,7 +32,7 @@
 //=======================================================================================
 #include <pybind11/pybind11.h>
 #include <gpu/GridGenerator/grid/BoundaryConditions/Side.h>
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 
 namespace boundary_conditions
 {
diff --git a/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp b/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp
index dddeef34d528206f4c9a573772109f39797658f9..04c5fef2dc9c002e97447d16fc6aa96458bdb54f 100644
--- a/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp
+++ b/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp
@@ -31,7 +31,7 @@
 //! \author Henry Korb
 //=======================================================================================
 #include <pybind11/pybind11.h>
-#include <gpu/core/Factories/GridScalingFactory.h>
+#include <gpu/core/GridScaling/GridScalingFactory.h>
 
 namespace grid_scaling_factory
 {
diff --git a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.h b/pythonbindings/src/gpu/submodules/kernel.cpp
similarity index 62%
rename from src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.h
rename to pythonbindings/src/gpu/submodules/kernel.cpp
index 86ac895486d357e9facc30c210b325af527dfbf2..c0cbee2d05616280fea8d3445095f206b6d40752 100644
--- a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.h
+++ b/pythonbindings/src/gpu/submodules/kernel.cpp
@@ -26,41 +26,31 @@
 //  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 LiggghtsCouplingLBMKernel.h
-//! \ingroup LBM
-//! \author Konstantin Kutscher
+//! \file kernel.cpp
+//! \ingroup submodules
+//! \author Henry Korb
 //=======================================================================================
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+#include <gpu/core/Kernel/KernelTypes.h>
 
-#ifndef LiggghtsCouplingLBMKernel_h
-#define LiggghtsCouplingLBMKernel_h
-
-#include "LBMKernel.h"
-#include "IBdynamicsParticleData.h"
-#include "basics/container/CbArray3D.h"
-#include "basics/container/CbArray4D.h"
-
-class LiggghtsCouplingLBMKernel : public LBMKernel
+namespace kernel
 {
-public:
-    virtual ~LiggghtsCouplingLBMKernel() = default;
+    namespace py = pybind11;
 
-    CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>::CbArray3DPtr getParticleData()
+    void makeModule(py::module_ &parentModule)
     {
-        return particleData;
-    };
-    void setParticleData(CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>::CbArray3DPtr particleData)
-    {
-        this->particleData = particleData;
-    };
-
-    
- protected:
-    //void collisionOperator();
-    CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>::CbArray3DPtr particleData;
+        auto kernel_module = parentModule.def_submodule("Kernel", "Kernel types");
+        auto compressible = kernel_module.def_submodule("compressible", "Compressible Kernel types");
+        auto incompressible = kernel_module.def_submodule("incompressible", "Incompressible Kernel types");
 
-    //CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-    //CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-    //CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr restDistributionsF;
-};
+        compressible.attr("BGK") = vf::collisionKernel::compressible::BGK;
+        compressible.attr("BGKPlus") = vf::collisionKernel::compressible::BGKPlus;
+        compressible.attr("K17CompressibleNavierStokes") = vf::collisionKernel::compressible::K17CompressibleNavierStokes;
+        compressible.attr("K15CompressibleNavierStokes") = vf::collisionKernel::compressible::K15CompressibleNavierStokes;
 
-#endif
\ No newline at end of file
+        incompressible.attr("BGK") = vf::collisionKernel::incompressible::BGK;
+        incompressible.attr("BGKPlus") = vf::collisionKernel::incompressible::BGKPlus;
+        incompressible.attr("CumulantK15") = vf::collisionKernel::incompressible::CumulantK15;
+    }
+}
diff --git a/pythonbindings/src/gpu/submodules/parameter.cpp b/pythonbindings/src/gpu/submodules/parameter.cpp
index 6b9d57a715eb309295f6537daaccf56ff5397384..167ae0a3f2f2e061847d546e506fb3502c44e63e 100644
--- a/pythonbindings/src/gpu/submodules/parameter.cpp
+++ b/pythonbindings/src/gpu/submodules/parameter.cpp
@@ -83,7 +83,7 @@ namespace parameter
         .def("set_max_dev", &Parameter::setMaxDev, py::arg("max_dev"))
         .def("set_is_body_force", &Parameter::setIsBodyForce, py::arg("is_body_force"))
         .def("set_use_streams", &Parameter::setUseStreams, py::arg("use_streams"))
-        .def("set_main_kernel", &Parameter::configureMainKernel, py::arg("kernel"))
+        .def("configure_main_kernel", &Parameter::configureMainKernel, py::arg("kernel"))
         .def("set_AD_kernel", &Parameter::setADKernel, py::arg("ad_kernel"))
         .def("set_has_wall_model_monitor", &Parameter::setHasWallModelMonitor, py::arg("has_wall_monitor"))
         .def("set_outflow_pressure_correction_factor", &Parameter::setOutflowPressureCorrectionFactor, py::arg("correction_factor"))
diff --git a/pythonbindings/src/gpu/submodules/simulation.cpp b/pythonbindings/src/gpu/submodules/simulation.cpp
index 2e45e58915461f3137011a9086eaacf9c6ec87d7..54f64887d678b1712102479a4c09540cdde4e9d5 100644
--- a/pythonbindings/src/gpu/submodules/simulation.cpp
+++ b/pythonbindings/src/gpu/submodules/simulation.cpp
@@ -39,9 +39,9 @@
 #include <gpu/core/GPU/CudaMemoryManager.h>
 #include <gpu/core/DataStructureInitializer/GridProvider.h>
 #include <gpu/core/Output/DataWriter.h>
-#include "gpu/core/Factories/BoundaryConditionFactory.h"
+#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h"
 #include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h"
-#include "gpu/core/Factories/GridScalingFactory.h"
+#include "gpu/core/GridScaling/GridScalingFactory.h"
 #include "parallel/Communicator.h"
 
 namespace simulation
diff --git a/pythonbindings/src/communicator.cpp b/pythonbindings/src/parallel.cpp
similarity index 75%
rename from pythonbindings/src/communicator.cpp
rename to pythonbindings/src/parallel.cpp
index cf5157fe497ac9c08183f4c5092a150f517670b4..9eac1b60b21a8b89522e404858e18379b6045b58 100644
--- a/pythonbindings/src/communicator.cpp
+++ b/pythonbindings/src/parallel.cpp
@@ -33,17 +33,21 @@
 #include <pybind11/cast.h>
 #include <pybind11/pybind11.h>
 
+#include <parallel/Communicator.h>
 #include <parallel/MPICommunicator.h>
 
-namespace communicator_bindings
+namespace parallel
 {
-    namespace py = pybind11;
+namespace py = pybind11;
 
-    PYBIND11_MODULE(communicator, m)
-    {
-        py::class_<vf::parallel::MPICommunicator, std::shared_ptr<vf::parallel::MPICommunicator>>(m, "Communicator")
-            .def_static("get_instance", &vf::parallel::MPICommunicator::getInstance)
-            .def("get_number_of_processes", &vf::parallel::MPICommunicator::getNumberOfProcesses)
-            .def("get_process_id", py::overload_cast<>(&vf::parallel::MPICommunicator::getProcessID, py::const_));
-    }
-} // namespace communicator_bindings
+PYBIND11_MODULE(parallel, m)
+{
+py::class_<vf::parallel::Communicator, std::shared_ptr<vf::parallel::Communicator>>(m, "Communicator")
+        .def_static("get_instance", &vf::parallel::Communicator::getInstance)
+        .def("get_process_id", py::overload_cast<>(&vf::parallel::Communicator::getProcessID, py::const_))
+        .def("get_number_of_processes", &vf::parallel::Communicator::getNumberOfProcesses);
+
+    py::class_<vf::parallel::MPICommunicator, vf::parallel::Communicator, std::shared_ptr<vf::parallel::MPICommunicator>>(m, "MPICommunicator")
+        .def_static("get_instance", &vf::parallel::MPICommunicator::getInstance);
+}
+} // namespace parallel
diff --git a/src/basics/CMakeLists.txt b/src/basics/CMakeLists.txt
index 8ef4841bf640f156f8f2573f286e7613ea3c0941..ee63d2c1d30ae12add577779dcf949956f54a7ac 100644
--- a/src/basics/CMakeLists.txt
+++ b/src/basics/CMakeLists.txt
@@ -1,7 +1,7 @@
 
 include(buildInfo.cmake)
 
-vf_add_library(PUBLIC_LINK logger MPI::MPI_CXX EXCLUDE buildInfo.in.cpp)
+vf_add_library(PUBLIC_LINK logger PRIVATE_LINK EXCLUDE buildInfo.in.cpp)
 
 vf_get_library_name (library_name)
 target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/geometry3d)
diff --git a/src/basics/DataTypes.h b/src/basics/DataTypes.h
index 36fd33aaa0587382ce322c06b46bbb7cd0cdd8d0..266e6d3b420383acdd288429d71f3b1f3e4859db 100644
--- a/src/basics/DataTypes.h
+++ b/src/basics/DataTypes.h
@@ -26,13 +26,12 @@
 //  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 DataTypes.h
-//! \ingroup Core
 //! \author Soeren Peters
 //=======================================================================================
 #ifndef DATATYPES_H
 #define DATATYPES_H
 
+#include <limits>
 #include <string>
 
 #ifdef VF_DOUBLE_ACCURACY
@@ -41,6 +40,8 @@ using real = double;
 using real = float;
 #endif
 
+using realLim = std::numeric_limits<real>;
+
 using uint = unsigned int;
 #define INVALID_INDEX 4294967295 // max uint
 
diff --git a/src/basics/Timer/Timer.cpp b/src/basics/Timer/Timer.cpp
index c8856f72adffe0c407ff29ee74246638ce5c8280..9b10481a55726cdacb00fb6d1c41815865aafa80 100644
--- a/src/basics/Timer/Timer.cpp
+++ b/src/basics/Timer/Timer.cpp
@@ -26,18 +26,36 @@
 //  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 Timer.cpp
-//! \ingroup Timer
-//! \author Stephan Lenz
+//! \author Soeren Peters
 //=======================================================================================
 #include "Timer.h"
-#include "TimerImp.h"
 
-#include <memory>
+namespace vf::basics
+{
+
+void Timer::start()
+{
+    this->startTime = std::chrono::high_resolution_clock::now();
+}
+
+void Timer::end()
+{
+    this->endTime = std::chrono::high_resolution_clock::now();
+}
 
-SPtr<Timer> Timer::makeStart()
+double timeInSeconds(Timer::timePoint end, Timer::timePoint start)
 {
-    SPtr<Timer> t = std::make_shared<TimerImp>();
-    t->start();
-    return t;
+    return std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() / 1000000.0;
 }
+
+double Timer::getTimeInSeconds() const
+{
+    return timeInSeconds(endTime, startTime);
+}
+
+double Timer::getCurrentRuntimeInSeconds() const
+{
+    return timeInSeconds(std::chrono::high_resolution_clock::now(), startTime);
+}
+
+} // namespace vf::basics
diff --git a/src/basics/Timer/Timer.h b/src/basics/Timer/Timer.h
index 6de04b2f3d5573ac6266bd2c35cf18cd232384dd..74a28f2af540302356792d03b2fb0a854c35eeda 100644
--- a/src/basics/Timer/Timer.h
+++ b/src/basics/Timer/Timer.h
@@ -26,29 +26,32 @@
 //  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 Timer.h
-//! \ingroup Timer
-//! \author Stephan Lenz
+//! \author Soeren Peters
 //=======================================================================================
-#ifndef TIMER_H
-#define TIMER_H
+#ifndef BASICS_TIMER_H
+#define BASICS_TIMER_H
 
-#include "basics_export.h"
+#include <chrono>
 
-#include "DataTypes.h"
-#include "PointerDefinitions.h"
+namespace vf::basics
+{
 
-class BASICS_EXPORT Timer
+class Timer
 {
 public:
-    virtual ~Timer() = default;
-    static SPtr<Timer> makeStart();
+    using timePoint = std::chrono::high_resolution_clock::time_point;
+
+    void start();
+    void end();
 
-    virtual void start() = 0;
-    virtual void end()   = 0;
+    double getTimeInSeconds() const;
+    double getCurrentRuntimeInSeconds() const;
 
-    virtual real getTimeInSeconds() const           = 0;
-    virtual real getCurrentRuntimeInSeconds() const = 0;
+private:
+    timePoint startTime;
+    timePoint endTime;
 };
 
+} // namespace vf::basics
+
 #endif
diff --git a/src/basics/Timer/TimerImp.cpp b/src/basics/Timer/TimerImp.cpp
deleted file mode 100644
index 76f9ac36793f2e2543abe9086f2780ee94b50eb7..0000000000000000000000000000000000000000
--- a/src/basics/Timer/TimerImp.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file TimerImp.cpp
-//! \ingroup Timer
-//! \author Stephan Lenz
-//=======================================================================================
-#include "TimerImp.h"
-
-void TimerImp::start() { this->startTime = std::chrono::high_resolution_clock::now(); }
-
-void TimerImp::end() { this->endTime = std::chrono::high_resolution_clock::now(); }
-
-real TimerImp::getTimeInSeconds() const
-{
-    return real(std::chrono::duration_cast<std::chrono::microseconds>(endTime - startTime).count() / 1000000.0);
-}
-
-real TimerImp::getCurrentRuntimeInSeconds() const
-{
-    return real(
-        std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now() - startTime)
-            .count() /
-        1000000.0);
-}
diff --git a/src/basics/Timer/TimerImp.h b/src/basics/Timer/TimerImp.h
deleted file mode 100644
index e180ae084cb19b939f6e7a82cae7a0db3cc1ea15..0000000000000000000000000000000000000000
--- a/src/basics/Timer/TimerImp.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file TimerImp.h
-//! \ingroup Timer
-//! \author Stephan Lenz
-//=======================================================================================
-#ifndef TIMER_IMP_H
-#define TIMER_IMP_H
-
-#include "Timer.h"
-
-#include <chrono>
-
-#include "DataTypes.h"
-
-class BASICS_EXPORT TimerImp : public Timer
-{
-public:
-    using timePoint = std::chrono::high_resolution_clock::time_point;
-
-    void start() override;
-    void end() override;
-
-    real getTimeInSeconds() const override;
-    real getCurrentRuntimeInSeconds() const override;
-
-private:
-    timePoint startTime;
-    timePoint endTime;
-};
-
-#endif
diff --git a/src/basics/geometry3d/Axis.cpp b/src/basics/geometry3d/Axis.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8d83ca8fbeab7994ede3bd9a0032b7e1583fecb9
--- /dev/null
+++ b/src/basics/geometry3d/Axis.cpp
@@ -0,0 +1,14 @@
+#include "Axis.h"
+
+std::string axis::to_string(Axis axis)
+{
+    switch (axis) {
+        case x:
+            return "x";
+        case y:
+            return "y";
+        case z:
+            return "z";
+    }
+    return "Axis not found.";
+}
\ No newline at end of file
diff --git a/src/basics/geometry3d/Axis.h b/src/basics/geometry3d/Axis.h
new file mode 100644
index 0000000000000000000000000000000000000000..4bd924db197f35c73a45420031d490f0be957020
--- /dev/null
+++ b/src/basics/geometry3d/Axis.h
@@ -0,0 +1,23 @@
+#ifndef AXIS
+#define AXIS
+
+#include <array>
+#include <map>
+#include <string>
+
+enum Axis {
+    x = 0,
+    y = 1,
+    z = 2,
+};
+
+const std::map<Axis, std::array<double, 3>> unitVectors{ { x, { 1, 0, 0 } },
+                                                         { y, { 0, 1, 0 } },
+                                                         { z, { 0, 0, 1 } } };
+
+namespace axis
+{
+std::string to_string(Axis axis);
+}
+
+#endif
diff --git a/src/basics/geometry3d/CoordinateTransformation3D.cpp b/src/basics/geometry3d/CoordinateTransformation3D.cpp
index be758ced5561449c447abca8b0affd306077c420..d3a89c6f92ee2f63579d1f8c18cc61e47014a105 100644
--- a/src/basics/geometry3d/CoordinateTransformation3D.cpp
+++ b/src/basics/geometry3d/CoordinateTransformation3D.cpp
@@ -64,9 +64,9 @@ CoordinateTransformation3D::CoordinateTransformation3D(CoordinateTransformation3
 /*======================================================*/
 // void CoordinateTransformation3D::init()
 // {
-//    this->Tx1   = 0.0;      this->Tx2   = 0.0;	this->Tx3   = 0.0;
-//    this->Sx1   = 1.0;      this->Sx2   = 1.0;	this->Sx3   = 1.0;
-//    this->alpha = 0.0;		this->beta = 0.0;		this->gamma = 0.0;
+//    this->Tx1   = 0.0;      this->Tx2   = 0.0;    this->Tx3   = 0.0;
+//    this->Sx1   = 1.0;      this->Sx2   = 1.0;    this->Sx3   = 1.0;
+//    this->alpha = 0.0;        this->beta = 0.0;        this->gamma = 0.0;
 //
 //    this->toX1factorX1   = 1.0; this->toX1factorX2   = 0.0; this->toX1factorX3   = 0.0;
 //    this->toX2factorX1   = 0.0; this->toX2factorX2   = 1.0; this->toX2factorX3   = 0.0;
diff --git a/src/basics/geometry3d/GbGyroidThirdOrder.cpp b/src/basics/geometry3d/GbGyroidThirdOrder.cpp
index d5662a061e7ec1011b8cd931332a2ce8a81aed64..da618ba736787eaddfa1714934cf919449b5a4c6 100644
--- a/src/basics/geometry3d/GbGyroidThirdOrder.cpp
+++ b/src/basics/geometry3d/GbGyroidThirdOrder.cpp
@@ -49,8 +49,8 @@ using boost::math::tools::bisect;
 /*=======================================================*/
 // ObObjectCreator* GbGyroidThirdOrder::getCreator()
 // {
-// 	 GbObject3DCreator instance;
-// 	return &instance;
+//      GbObject3DCreator instance;
+//     return &instance;
 // }
 /*=======================================================*/
 // Konstruktor
@@ -62,19 +62,19 @@ GbGyroidThirdOrder::GbGyroidThirdOrder() //: GbObject3D()
 // Konstruktor
 GbGyroidThirdOrder::GbGyroidThirdOrder(const double& x1a, const double& x2a, const double& x3a, const double& x1b, const double& x2b, const double& x3b, const double& edgeLength, const double& dx, const double& thickness) :GbObject3D()
 {
-	this->p1 = new GbPoint3D(x1a, x2a, x3a);
-	this->p2 = new GbPoint3D(x1b, x2b, x3b);
+    this->p1 = new GbPoint3D(x1a, x2a, x3a);
+    this->p2 = new GbPoint3D(x1b, x2b, x3b);
     this->p1->addObserver(this);
     this->p2->addObserver(this);
 
-	this->p3 = new GbPoint3D(x1a, x2a, x3a);
-	this->p4 = new GbPoint3D(x1b, x2b, x3b);
+    this->p3 = new GbPoint3D(x1a, x2a, x3a);
+    this->p4 = new GbPoint3D(x1b, x2b, x3b);
     this->p3->addObserver(this);
     this->p4->addObserver(this);
 
-	this->edgeLength = edgeLength;
-	this->dx = dx;
-	this->thickness = thickness;
+    this->edgeLength = edgeLength;
+    this->dx = dx;
+    this->thickness = thickness;
 }
 /*=======================================================*/
 // Konstruktor
@@ -82,19 +82,19 @@ GbGyroidThirdOrder::GbGyroidThirdOrder(const double& x1a, const double& x2a, con
 //	const double& x1a, const double& x2a, const double& x3a,
 //	const double& x1b, const double& x2b, const double& x3b,
 //
-//	const double& x1c, const double& x2c, const double& x3c,
-//	const double& x1d, const double& x2d, const double& x3d,
+//    const double& x1c, const double& x2c, const double& x3c,
+//    const double& x1d, const double& x2d, const double& x3d,
 //
-//	const double& edgeLength, const double& dx) :GbObject3D()
+//    const double& edgeLength, const double& dx) :GbObject3D()
 //{
-//	this->p1 = new GbPoint3D(x1a, x2a, x3a);
-//	this->p2 = new GbPoint3D(x1b, x2b, x3b);
+//    this->p1 = new GbPoint3D(x1a, x2a, x3a);
+//    this->p2 = new GbPoint3D(x1b, x2b, x3b);
 //
-//	this->p3 = new GbPoint3D(x1c, x2c, x3c);
-//	this->p4 = new GbPoint3D(x1d, x2d, x3d);
+//    this->p3 = new GbPoint3D(x1c, x2c, x3c);
+//    this->p4 = new GbPoint3D(x1d, x2d, x3d);
 //
-//	this->edgeLength = edgeLength;
-//	this->dx = dx;
+//    this->edgeLength = edgeLength;
+//    this->dx = dx;
 //}
 GbGyroidThirdOrder::GbGyroidThirdOrder(GbGyroidThirdOrder * imp)
 {
@@ -114,17 +114,17 @@ GbGyroidThirdOrder::~GbGyroidThirdOrder()
 }
 /*=======================================================*/
 struct TerminationCondition {
-	bool operator() (double min, double max) {
-		return abs(min - max) <= 10e-10;
-	}
+    bool operator() (double min, double max) {
+        return abs(min - max) <= 10e-10;
+    }
 };
 /*============================================M-===========*/
 struct FunctionToApproximate {
-	double x, y, z;
-	double dir1, dir2, dir3, L;
-	double operator() (double q) {
-		return sin(2.*M_PI / L*(x + q*dir1))*cos(2.*M_PI / L*(y + q*dir2)) + sin(2.*M_PI / L*(y + q*dir2))*cos(2.*M_PI / L*(z + q*dir3)) + sin(2.*M_PI / L*(z + q*dir3))*cos(2.*M_PI / L*(x + q*dir1));
-	}
+    double x, y, z;
+    double dir1, dir2, dir3, L;
+    double operator() (double q) {
+        return sin(2.*M_PI / L*(x + q*dir1))*cos(2.*M_PI / L*(y + q*dir2)) + sin(2.*M_PI / L*(y + q*dir2))*cos(2.*M_PI / L*(z + q*dir3)) + sin(2.*M_PI / L*(z + q*dir3))*cos(2.*M_PI / L*(x + q*dir1));
+    }
 };
 /*=======================================================*/
 struct FunctionGyroidThirdOrder {
@@ -179,26 +179,26 @@ struct FunctionGyroidThirdOrder {
 	 f011 = (-4. * PI_squared*t14) / L_squared;
 	 f002 = (-4. * PI_squared*(t11 + t13)) / L_squared;
 
-	//Gyroid first order derivatives
-	 f100 = (2. * M_PI*(t17 - t3)) / L;
-	 f010 = (2. * M_PI*(-t2 + t20)) / L;
-	 f001 = (2. * M_PI*(t18 - t8)) / L;
+    //Gyroid first order derivatives
+     f100 = (2. * M_PI*(t17 - t3)) / L;
+     f010 = (2. * M_PI*(-t2 + t20)) / L;
+     f001 = (2. * M_PI*(t18 - t8)) / L;
 
-	//Gyroid 
-	 f000 = t11 + t13 + t5;
+    //Gyroid 
+     f000 = t11 + t13 + t5;
 
-	 repeatedTerm = f100*f100 + f010*f010 + f001*f001;
-	 repeatedTermRoot = sqrt(repeatedTerm);
+     repeatedTerm = f100*f100 + f010*f010 + f001*f001;
+     repeatedTermRoot = sqrt(repeatedTerm);
 
-	 T1 = f001*f002 + f010*f011 + f100*f101;
-	 T2 = f001*f011 + f010*f020 + f100*f110;
-	 T3 = f001*f101 + f010*f110 + f100*f200;
-	 T4 = f002*f011 + f001*f012 + f011*f020 + f010*f021 + f101*f110;
-	 T5 = f002*f101 + f001*f102 + f011*f110 + f101*f200 + f100*f201;
-	 T6 = f011*f101 + f020*f110 + f010*f120 + f110*f200 + f100*f210;
-	 T7 = f001*f002*h + f010*f011*h + f100*f101*h;
-	 T8 = f001*f011*h + f010*f020*h + f100*f110*h;
-	 T9 = f001*f101*h + f010*f110*h + f100*f200*h;
+     T1 = f001*f002 + f010*f011 + f100*f101;
+     T2 = f001*f011 + f010*f020 + f100*f110;
+     T3 = f001*f101 + f010*f110 + f100*f200;
+     T4 = f002*f011 + f001*f012 + f011*f020 + f010*f021 + f101*f110;
+     T5 = f002*f101 + f001*f102 + f011*f110 + f101*f200 + f100*f201;
+     T6 = f011*f101 + f020*f110 + f010*f120 + f110*f200 + f100*f210;
+     T7 = f001*f002*h + f010*f011*h + f100*f101*h;
+     T8 = f001*f011*h + f010*f020*h + f100*f110*h;
+     T9 = f001*f101*h + f010*f110*h + f100*f200*h;
 
 	repeatedTermRoot2 = sqrt(pow(f001 - (T1*h) / (3.*repeatedTermRoot), 2) + pow(f010 - (T2*h) / (3.*repeatedTermRoot), 2) + pow(f100 - (T3*h) / (3.*repeatedTermRoot), 2));
 	repeatedTermPowerOneandHalf = pow(repeatedTerm, 1.5);
@@ -229,190 +229,190 @@ struct FunctionGyroidThirdOrder {
 /*==========================================================*/
 bool GbGyroidThirdOrder::isPointInGbObject3D(const double& x1, const double& x2, const double& x3)
 {
-	//double f = sin(2.*M_PI*x1/edgeLength)*cos(2.*M_PI*x2 / edgeLength) + sin(2.*M_PI*x2 / edgeLength)*cos(2.*M_PI*x3 / edgeLength) + sin(2.*M_PI*x3 / edgeLength)*cos(2.*M_PI*x1 / edgeLength);
-	//evaluateImplicitFunction(x1,x2,x3, 0., 0., 0.)
-	double f1 = evaluateImplicitFunction(x1, x2, x3, 1.);
-	double f2 = evaluateImplicitFunction(x1, x2, x3, -1.);
-	// 	if (f < 10.0E-15 && f > -10.0E-15)
-		//if (fabs(f) <= 10e-15)
-	 //if (f <= 0)
-	if (f1 <= 0. && f2 >= 0.)
+    //double f = sin(2.*M_PI*x1/edgeLength)*cos(2.*M_PI*x2 / edgeLength) + sin(2.*M_PI*x2 / edgeLength)*cos(2.*M_PI*x3 / edgeLength) + sin(2.*M_PI*x3 / edgeLength)*cos(2.*M_PI*x1 / edgeLength);
+    //evaluateImplicitFunction(x1,x2,x3, 0., 0., 0.)
+    double f1 = evaluateImplicitFunction(x1, x2, x3, 1.);
+    double f2 = evaluateImplicitFunction(x1, x2, x3, -1.);
+    //     if (f < 10.0E-15 && f > -10.0E-15)
+        //if (fabs(f) <= 10e-15)
+     //if (f <= 0)
+    if (f1 <= 0. && f2 >= 0.)
 {
-	return true;
+    return true;
 }
 else
 {
-	return false;
+    return false;
 }
 }
 
 /*==========================================================*/
 double GbGyroidThirdOrder::getIntersectionRaytraceFactor(const double& x1, const double& x2, const double& x3, const double& rx1, const double& rx2, const double& rx3)
 {
-	double from = 0;  // The solution must lie in the interval [from, to], additionally f(from) <= 0 && f(to) >= 0
-	double to = dx*sqrt(rx1*rx1+ rx2*rx2+ rx3*rx3);
-	FunctionGyroidThirdOrder f;
-	//FunctionToApproximate f;
-	f.x =x1 ;
-	f.y =x2 ;
-	f.z =x3 ;
-	f.dir1 = rx1;
-	f.dir2 = rx2;
-	f.dir3 = rx3;
-	f.L = edgeLength;
-	f.h = thickness;
-	if (f(from)*f(to)<0)
-		{
-		std::pair<double, double> result = bisect(f, from, to, TerminationCondition());
-		double root = (result.first + result.second) / 2;
-		return root;
-		}
-	f.h = -thickness;
-	if (f(from)*f(to) < 0)
-	{
-		std::pair<double, double> result = bisect(f, from, to, TerminationCondition());
-		double root = (result.first + result.second) / 2;
-		return root;
-	}
-	else
-	{
-		return 999;
-	}
-	
+    double from = 0;  // The solution must lie in the interval [from, to], additionally f(from) <= 0 && f(to) >= 0
+    double to = dx*sqrt(rx1*rx1+ rx2*rx2+ rx3*rx3);
+    FunctionGyroidThirdOrder f;
+    //FunctionToApproximate f;
+    f.x =x1 ;
+    f.y =x2 ;
+    f.z =x3 ;
+    f.dir1 = rx1;
+    f.dir2 = rx2;
+    f.dir3 = rx3;
+    f.L = edgeLength;
+    f.h = thickness;
+    if (f(from)*f(to)<0)
+        {
+        std::pair<double, double> result = bisect(f, from, to, TerminationCondition());
+        double root = (result.first + result.second) / 2;
+        return root;
+        }
+    f.h = -thickness;
+    if (f(from)*f(to) < 0)
+    {
+        std::pair<double, double> result = bisect(f, from, to, TerminationCondition());
+        double root = (result.first + result.second) / 2;
+        return root;
+    }
+    else
+    {
+        return 999;
+    }
+    
 }
 /*=======================================================*/
 double GbGyroidThirdOrder::evaluateImplicitFunction(const double& x1, const double& x2, const double& x3, const double& position)
 {
-	double to = 0.;
-	FunctionGyroidThirdOrder f;
-	f.x = x1;
-	f.y = x2;
-	f.z = x3;
-	f.dir1 = 0.;
-	f.dir2 = 0.;
-	f.dir3 = 0.;
-	f.L = edgeLength;
-	f.h = position*thickness;
-	return f(to);
+    double to = 0.;
+    FunctionGyroidThirdOrder f;
+    f.x = x1;
+    f.y = x2;
+    f.z = x3;
+    f.dir1 = 0.;
+    f.dir2 = 0.;
+    f.dir3 = 0.;
+    f.L = edgeLength;
+    f.h = position*thickness;
+    return f(to);
 }
 /*=======================================================*/
 double GbGyroidThirdOrder::getX1Centroid()
 {
-	return (0.5*(p1->x1 + p2->x1));
+    return (0.5*(p1->x1 + p2->x1));
 }
 /*=======================================================*/
 double GbGyroidThirdOrder::getX1Minimum()
 {
-	return (this->p1->x1 < this->p2->x1 ? this->p1->x1 : this->p2->x1);
+    return (this->p1->x1 < this->p2->x1 ? this->p1->x1 : this->p2->x1);
 }
 /*=======================================================*/
 double GbGyroidThirdOrder::getX1Maximum()
 {
-	return (this->p1->x1 > this->p2->x1 ? this->p1->x1 : this->p2->x1);
+    return (this->p1->x1 > this->p2->x1 ? this->p1->x1 : this->p2->x1);
 }
 /*=======================================================*/
 double GbGyroidThirdOrder::getX2Centroid()
 {
-	return (0.5*(p1->x2 + p2->x2));
+    return (0.5*(p1->x2 + p2->x2));
 }
 /*=======================================================*/
 double GbGyroidThirdOrder::getX2Minimum()
 {
-	return (this->p1->x2 < this->p2->x2 ? this->p1->x2 : this->p2->x2);
+    return (this->p1->x2 < this->p2->x2 ? this->p1->x2 : this->p2->x2);
 }
 /*=======================================================*/
 double GbGyroidThirdOrder::getX2Maximum()
 {
-	return (this->p1->x2 > this->p2->x2 ? this->p1->x2 : this->p2->x2);
+    return (this->p1->x2 > this->p2->x2 ? this->p1->x2 : this->p2->x2);
 }
 /*=======================================================*/
 double GbGyroidThirdOrder::getX3Centroid()
 {
-	return (0.5*(p1->x3 + p2->x3));
+    return (0.5*(p1->x3 + p2->x3));
 }
 /*=======================================================*/
 double GbGyroidThirdOrder::getX3Minimum()
 {
-	return (this->p1->x3 < this->p2->x3 ? this->p1->x3 : this->p2->x3);
+    return (this->p1->x3 < this->p2->x3 ? this->p1->x3 : this->p2->x3);
 }
 /*=======================================================*/
 double GbGyroidThirdOrder::getX3Maximum()
 {
-	return (this->p1->x3 > this->p2->x3 ? this->p1->x3 : this->p2->x3);
+    return (this->p1->x3 > this->p2->x3 ? this->p1->x3 : this->p2->x3);
 }
 /*=======================================================*/
 bool GbGyroidThirdOrder::isCellInsideGbObject3D(const double& x1a, const double& x2a, const double& x3a, const double& x1b, const double& x2b, const double& x3b)
 {
-	if (this->isPointInGbObject3D(x1a, x2a, x3a)
-		&& this->isPointInGbObject3D(x1b, x2a, x3a)
-		&& this->isPointInGbObject3D(x1b, x2b, x3a)
-		&& this->isPointInGbObject3D(x1a, x2b, x3a)
-		&& this->isPointInGbObject3D(x1a, x2a, x3b)
-		&& this->isPointInGbObject3D(x1b, x2a, x3b)
-		&& this->isPointInGbObject3D(x1b, x2b, x3b)
-		&& this->isPointInGbObject3D(x1a, x2b, x3b))
-	{
-		return true;
-	}
-	return false;
+    if (this->isPointInGbObject3D(x1a, x2a, x3a)
+        && this->isPointInGbObject3D(x1b, x2a, x3a)
+        && this->isPointInGbObject3D(x1b, x2b, x3a)
+        && this->isPointInGbObject3D(x1a, x2b, x3a)
+        && this->isPointInGbObject3D(x1a, x2a, x3b)
+        && this->isPointInGbObject3D(x1b, x2a, x3b)
+        && this->isPointInGbObject3D(x1b, x2b, x3b)
+        && this->isPointInGbObject3D(x1a, x2b, x3b))
+    {
+        return true;
+    }
+    return false;
 }
 /*=======================================================*/
 bool GbGyroidThirdOrder::isCellInsideOrCuttingGbObject3D(const double& x1a, const double& x2a, const double& x3a, const double& x1b, const double& x2b, const double& x3b)
 {
-	if ((this->isPointInGbObject3D(x1a, x2a, x3a) == false)
-		&& (this->isPointInGbObject3D(x1b, x2a, x3a) == false)
-		&& (this->isPointInGbObject3D(x1b, x2b, x3a) == false)
-		&& (this->isPointInGbObject3D(x1a, x2b, x3a) == false)
-		&& (this->isPointInGbObject3D(x1a, x2a, x3b) == false)
-		&& (this->isPointInGbObject3D(x1b, x2a, x3b) == false)
-		&& (this->isPointInGbObject3D(x1b, x2b, x3b) == false)
-		&& (this->isPointInGbObject3D(x1a, x2b, x3b) == false))
-	{
-		return false;
-	}
-	return true;
+    if ((this->isPointInGbObject3D(x1a, x2a, x3a) == false)
+        && (this->isPointInGbObject3D(x1b, x2a, x3a) == false)
+        && (this->isPointInGbObject3D(x1b, x2b, x3a) == false)
+        && (this->isPointInGbObject3D(x1a, x2b, x3a) == false)
+        && (this->isPointInGbObject3D(x1a, x2a, x3b) == false)
+        && (this->isPointInGbObject3D(x1b, x2a, x3b) == false)
+        && (this->isPointInGbObject3D(x1b, x2b, x3b) == false)
+        && (this->isPointInGbObject3D(x1a, x2b, x3b) == false))
+    {
+        return false;
+    }
+    return true;
 }
 /*=======================================================*/
 bool GbGyroidThirdOrder::isCellCuttingGbObject3D(const double& x1a, const double& x2a, const double& x3a, const double& x1b, const double& x2b, const double& x3b)
 {
-	if (!this->isCellInsideGbObject3D(x1a, x2a, x3a, x1b, x2b, x3b)
-		&& this->isCellInsideOrCuttingGbObject3D(x1a, x2a, x3a, x1b, x2b, x3b))
-	{
-		return true;
-	}
-	return false;
+    if (!this->isCellInsideGbObject3D(x1a, x2a, x3a, x1b, x2b, x3b)
+        && this->isCellInsideOrCuttingGbObject3D(x1a, x2a, x3a, x1b, x2b, x3b))
+    {
+        return true;
+    }
+    return false;
 }
 /*=======================================================*/
 void GbGyroidThirdOrder::addSurfaceTriangleSet(vector<UbTupleFloat3>& nodes, vector<UbTupleInt3>& triangles)
 {
-	/*0*/nodes.push_back(makeUbTuple((float)getX1Minimum(), (float)getX2Minimum(), (float)getX3Minimum()));
-	/*1*/nodes.push_back(makeUbTuple((float)getX1Maximum(), (float)getX2Minimum(), (float)getX3Minimum()));
-	/*2*/nodes.push_back(makeUbTuple((float)getX1Maximum(), (float)getX2Maximum(), (float)getX3Minimum()));
-	/*3.*/nodes.push_back(makeUbTuple((float)getX1Minimum(), (float)getX2Maximum(), (float)getX3Minimum()));
+    /*0*/nodes.push_back(makeUbTuple((float)getX1Minimum(), (float)getX2Minimum(), (float)getX3Minimum()));
+    /*1*/nodes.push_back(makeUbTuple((float)getX1Maximum(), (float)getX2Minimum(), (float)getX3Minimum()));
+    /*2*/nodes.push_back(makeUbTuple((float)getX1Maximum(), (float)getX2Maximum(), (float)getX3Minimum()));
+    /*3.*/nodes.push_back(makeUbTuple((float)getX1Minimum(), (float)getX2Maximum(), (float)getX3Minimum()));
 
-	/*4*/nodes.push_back(makeUbTuple((float)getX1Minimum(), (float)getX2Minimum(), (float)getX3Maximum()));
-	/*5*/nodes.push_back(makeUbTuple((float)getX1Maximum(), (float)getX2Minimum(), (float)getX3Maximum()));
-	/*6*/nodes.push_back(makeUbTuple((float)getX1Maximum(), (float)getX2Maximum(), (float)getX3Maximum()));
-	/*7*/nodes.push_back(makeUbTuple((float)getX1Minimum(), (float)getX2Maximum(), (float)getX3Maximum()));
+    /*4*/nodes.push_back(makeUbTuple((float)getX1Minimum(), (float)getX2Minimum(), (float)getX3Maximum()));
+    /*5*/nodes.push_back(makeUbTuple((float)getX1Maximum(), (float)getX2Minimum(), (float)getX3Maximum()));
+    /*6*/nodes.push_back(makeUbTuple((float)getX1Maximum(), (float)getX2Maximum(), (float)getX3Maximum()));
+    /*7*/nodes.push_back(makeUbTuple((float)getX1Minimum(), (float)getX2Maximum(), (float)getX3Maximum()));
 
-	//"unten"
-	triangles.push_back(makeUbTuple(0, 1, 2));
-	triangles.push_back(makeUbTuple(0, 2, 3));
-	//"oben"
-	triangles.push_back(makeUbTuple(4, 5, 6));
-	triangles.push_back(makeUbTuple(4, 6, 7));
-	//"links"
-	triangles.push_back(makeUbTuple(0, 3, 7));
-	triangles.push_back(makeUbTuple(0, 7, 4));
-	//"rechts"                                                               
-	triangles.push_back(makeUbTuple(1, 2, 6));
-	triangles.push_back(makeUbTuple(1, 6, 5));
-	//"hinten"                                                                       
-	triangles.push_back(makeUbTuple(3, 2, 7));
-	triangles.push_back(makeUbTuple(2, 7, 6));
-	//"vorne"                                                                        
-	triangles.push_back(makeUbTuple(0, 1, 5));
-	triangles.push_back(makeUbTuple(0, 5, 4));
+    //"unten"
+    triangles.push_back(makeUbTuple(0, 1, 2));
+    triangles.push_back(makeUbTuple(0, 2, 3));
+    //"oben"
+    triangles.push_back(makeUbTuple(4, 5, 6));
+    triangles.push_back(makeUbTuple(4, 6, 7));
+    //"links"
+    triangles.push_back(makeUbTuple(0, 3, 7));
+    triangles.push_back(makeUbTuple(0, 7, 4));
+    //"rechts"                                                               
+    triangles.push_back(makeUbTuple(1, 2, 6));
+    triangles.push_back(makeUbTuple(1, 6, 5));
+    //"hinten"                                                                       
+    triangles.push_back(makeUbTuple(3, 2, 7));
+    triangles.push_back(makeUbTuple(2, 7, 6));
+    //"vorne"                                                                        
+    triangles.push_back(makeUbTuple(0, 1, 5));
+    triangles.push_back(makeUbTuple(0, 5, 4));
 }
 /*==========================================================*/
 void GbGyroidThirdOrder::objectChanged(UbObservable *changedObject)
diff --git a/src/basics/geometry3d/GbGyroidThirdOrder.h b/src/basics/geometry3d/GbGyroidThirdOrder.h
index 1deb8ea0b0f5db223ed0924fd91f893016cff333..19beb92cbff8c97a009039c2687cf21ce4f0300f 100644
--- a/src/basics/geometry3d/GbGyroidThirdOrder.h
+++ b/src/basics/geometry3d/GbGyroidThirdOrder.h
@@ -69,27 +69,27 @@ public:
 
 
 
-	double getX1Centroid() override;
-	double getX1Minimum() override;
-	double getX1Maximum() override;
-	double getX2Centroid()override;
-	double getX2Minimum() override;
-	double getX2Maximum() override;
-	double getX3Centroid()override;
-	double getX3Minimum() override;
-	double getX3Maximum() override;
+    double getX1Centroid() override;
+    double getX1Minimum() override;
+    double getX1Maximum() override;
+    double getX2Centroid()override;
+    double getX2Minimum() override;
+    double getX2Maximum() override;
+    double getX3Centroid()override;
+    double getX3Minimum() override;
+    double getX3Maximum() override;
     void setCenterCoordinates(const double &x1, const double &x2, const double &x3) override {throw UbException(UB_EXARGS, "finalize() - not implemented");
     }
 
-	void translate(const double& x1, const double& x2, const double& x3) override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
-	void rotate(const double& rx1, const double& rx2, const double& rx3) override{ throw UbException(UB_EXARGS, "finalize() - not implemented"); }
-	void scale(const double& sx1, const double& sx2, const double& sx3) override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
+    void translate(const double& x1, const double& x2, const double& x3) override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
+    void rotate(const double& rx1, const double& rx2, const double& rx3) override{ throw UbException(UB_EXARGS, "finalize() - not implemented"); }
+    void scale(const double& sx1, const double& sx2, const double& sx3) override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
 
-	double getLengthX1();
-	double getLengthX2();
-	double getLengthX3();
-	
-	bool isPointInGbObject3D(const double &x1p, const double &x2p, const double &x3p, bool &pointinboundary) override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
+    double getLengthX1();
+    double getLengthX2();
+    double getLengthX3();
+    
+    bool isPointInGbObject3D(const double &x1p, const double &x2p, const double &x3p, bool &pointinboundary) override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
     bool isPointInGbObject3D(const double &x1p, const double &x2p, const double &x3p) override;
     bool isCellInsideGbObject3D(const double &x1a, const double &x2a, const double &x3a, const double &x1b,
                                 const double &x2b, const double &x3b) override;
@@ -104,54 +104,54 @@ public:
 	//GbGyroidThirdOrder* createClippedRectangle3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b);
     GbLine3D *createClippedLine3D (GbPoint3D &point1, GbPoint3D &point2) override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
 
-	std::vector<GbTriangle3D *> getSurfaceTriangleSet() override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
+    std::vector<GbTriangle3D *> getSurfaceTriangleSet() override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
 
-	 void addSurfaceTriangleSet(std::vector<UbTupleFloat3> &nodes, std::vector<UbTupleInt3> &triangles) override;
+     void addSurfaceTriangleSet(std::vector<UbTupleFloat3> &nodes, std::vector<UbTupleInt3> &triangles) override;
 
-	bool hasRaytracing() override { return true;  }
+    bool hasRaytracing() override { return true;  }
 
-	/*|r| must be 1! einheitsvector!!*/
-	double getIntersectionRaytraceFactor (const double& x1, const double& x2, const double& x3, const double& rx1, const double& rx2, const double& rx3) override;
+    /*|r| must be 1! einheitsvector!!*/
+    double getIntersectionRaytraceFactor (const double& x1, const double& x2, const double& x3, const double& rx1, const double& rx2, const double& rx3) override;
 
-	double evaluateImplicitFunction(const double & x1, const double & x2, const double & x3, const double & position);
+    double evaluateImplicitFunction(const double & x1, const double & x2, const double & x3, const double & position);
 
-	double getDistance(const double& x1p, const double& x2p, const double& x3p)
-	{
-		throw UbException(UB_EXARGS, "not implemented");
+    double getDistance(const double& x1p, const double& x2p, const double& x3p)
+    {
+        throw UbException(UB_EXARGS, "not implemented");
 
-		// falls punkt innerhalt ist: minimalen abstand ausrechnen
-		if (this->isPointInGbObject3D(x1p, x2p, x3p))
-		{
-			double x1Dist = UbMath::min(std::abs(x1p - this->getX1Minimum()), std::abs(x1p - this->getX1Maximum()));
-			double x2Dist = UbMath::min(std::abs(x2p - this->getX2Minimum()), std::abs(x2p - this->getX2Maximum()));
-			double x3Dist = UbMath::min(std::abs(x3p - this->getX3Minimum()), std::abs(x3p - this->getX3Maximum()));
+        // falls punkt innerhalt ist: minimalen abstand ausrechnen
+        if (this->isPointInGbObject3D(x1p, x2p, x3p))
+        {
+            double x1Dist = UbMath::min(std::abs(x1p - this->getX1Minimum()), std::abs(x1p - this->getX1Maximum()));
+            double x2Dist = UbMath::min(std::abs(x2p - this->getX2Minimum()), std::abs(x2p - this->getX2Maximum()));
+            double x3Dist = UbMath::min(std::abs(x3p - this->getX3Minimum()), std::abs(x3p - this->getX3Maximum()));
 
-			return UbMath::min(x1Dist, x2Dist, x3Dist);
-		}
-		else
-		{
+            return UbMath::min(x1Dist, x2Dist, x3Dist);
+        }
+        else
+        {
 
-		}
-	}
+        }
+    }
 
-	std::string toString() override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
+    std::string toString() override { throw UbException(UB_EXARGS, "finalize() - not implemented"); }
 
 
  // virtuelle Methoden von UbObserver
     void objectChanged(UbObservable *changedObject) override;
     void objectWillBeDeleted(UbObservable *objectForDeletion) override;
 
-	using GbObject3D::isPointInGbObject3D; //Grund: dadurch muss man hier  isPointInGbObject3D(GbPoint3D*) nicht ausprogrammieren, welche sonst hier "ueberdeckt" waere
+    using GbObject3D::isPointInGbObject3D; //Grund: dadurch muss man hier  isPointInGbObject3D(GbPoint3D*) nicht ausprogrammieren, welche sonst hier "ueberdeckt" waere
 
 
 protected:
-	GbPoint3D* p1;
-	GbPoint3D* p2;
-	GbPoint3D* p3;
-	GbPoint3D* p4;
-	double edgeLength;
-	double dx;
-	double thickness;
+    GbPoint3D* p1;
+    GbPoint3D* p2;
+    GbPoint3D* p3;
+    GbPoint3D* p4;
+    double edgeLength;
+    double dx;
+    double thickness;
 private:
 };
 
diff --git a/src/basics/geometry3d/GbMeshTools3D.h b/src/basics/geometry3d/GbMeshTools3D.h
index 2464bcc34788dadfd99e64b9a94878d22df4a54b..17b02cfac9cdc2f64059d550183da9a176747d3c 100644
--- a/src/basics/geometry3d/GbMeshTools3D.h
+++ b/src/basics/geometry3d/GbMeshTools3D.h
@@ -342,27 +342,27 @@ inline int triBoxOverlap(float boxcenter[3], float boxhalfsize[3], float trivert
 //   if(x2<min) min=x2;
 //   if(x2>max) max=x2;
 //
-// int planeBoxOverlap(float normal[3], float vert[3], float maxbox[3])	// -NJMP-
+// int planeBoxOverlap(float normal[3], float vert[3], float maxbox[3])    // -NJMP-
 //{
 //   int q;
 //   float vmin[3],vmax[3],v;
 //
 //   for(q=X;q<=Z;q++)
 //   {
-//      v=vert[q];					// -NJMP-
+//      v=vert[q];                    // -NJMP-
 //      if(normal[q]>0.0f)
 //      {
-//         vmin[q]=-maxbox[q] - v;	// -NJMP-
-//         vmax[q]= maxbox[q] - v;	// -NJMP-
+//         vmin[q]=-maxbox[q] - v;    // -NJMP-
+//         vmax[q]= maxbox[q] - v;    // -NJMP-
 //      }
 //      else
 //      {
-//         vmin[q]= maxbox[q] - v;	// -NJMP-
-//         vmax[q]=-maxbox[q] - v;	// -NJMP-
+//         vmin[q]= maxbox[q] - v;    // -NJMP-
+//         vmax[q]=-maxbox[q] - v;    // -NJMP-
 //      }
 //   }
-//   if(DOT(normal,vmin)>0.0f) return 0;	// -NJMP-
-//   if(DOT(normal,vmax)>=0.0f) return 1;	// -NJMP-
+//   if(DOT(normal,vmin)>0.0f) return 0;    // -NJMP-
+//   if(DOT(normal,vmax)>=0.0f) return 1;    // -NJMP-
 //   return 0;
 //}
 //
@@ -430,7 +430,7 @@ inline int triBoxOverlap(float boxcenter[3], float boxhalfsize[3], float trivert
 //
 //   //   float axis[3];
 //
-//   float min,max,p0,p1,p2,rad,fex,fey,fez;		// -NJMP- "d" local variable removed
+//   float min,max,p0,p1,p2,rad,fex,fey,fez;        // -NJMP- "d" local variable removed
 //   float normal[3],e0[3],e1[3],e2[3];
 //
 //   /* This is the fastest branch on Sun */
@@ -491,6 +491,6 @@ inline int triBoxOverlap(float boxcenter[3], float boxhalfsize[3], float trivert
 //   CROSS(normal,e0,e1);
 //
 //   // -NJMP- (line removed here)
-//   if(!planeBoxOverlap(normal,v0,boxhalfsize)) return 0;	// -NJMP-
+//   if(!planeBoxOverlap(normal,v0,boxhalfsize)) return 0;    // -NJMP-
 //   return 1;   /* box and triangle overlaps */
 //}
diff --git a/src/basics/geometry3d/GbPolygon3D.cpp b/src/basics/geometry3d/GbPolygon3D.cpp
index 7905576ed5dae855350a333275cf5dcd1f6dbd3a..dc7b2fc3e842a1a3ae3d68f0755d43c71d75f4be 100644
--- a/src/basics/geometry3d/GbPolygon3D.cpp
+++ b/src/basics/geometry3d/GbPolygon3D.cpp
@@ -53,7 +53,7 @@ void GbPolygon3D::init()
     x2max = 0.0;
     x3min = 0.0;
     x3max = 0.0;
-    //		points   = NULL;
+    //        points   = NULL;
     consistent = false;
     ps         = NULL;
 }
@@ -99,9 +99,9 @@ GbPolygon3D::~GbPolygon3D()
     // if(points)
     // for(unsigned u=0; u<points->size(); u++)
     //{
-    //	delete (*points)[u];
+    //    delete (*points)[u];
     //}
-    //		delete this->points;
+    //        delete this->points;
     delete this->ps;
 }
 
@@ -331,7 +331,7 @@ void GbPolygon3D::addPoints(vector<GbPoint3D> &points)
  */
 void GbPolygon3D::clear()
 {
-    //		delete this->points;
+    //        delete this->points;
     this->ps->clearAndTrim();
     delete this->ps;
 
diff --git a/src/basics/geometry3d/GbPolygon3D.h b/src/basics/geometry3d/GbPolygon3D.h
index e4f44b5be5d31e3751be584c6623597229df5cd2..f1f584a5de61e59206aba08c61d8c1d4207692be 100644
--- a/src/basics/geometry3d/GbPolygon3D.h
+++ b/src/basics/geometry3d/GbPolygon3D.h
@@ -229,7 +229,7 @@ public:
     // {
     //    try
     //    {
-    //	GbPolygon2D polygon = (GbPolygon2D) object;
+    //    GbPolygon2D polygon = (GbPolygon2D) object;
     // int         n       = this.size();
 
     // if(n != polygon.size()) return(false);
diff --git a/src/basics/geometry3d/GbQuadFaceMesh3D.cpp b/src/basics/geometry3d/GbQuadFaceMesh3D.cpp
index 1b2c2aeaabf1eacd78577cc67b678be895747e05..d7ee29ab00c845f28390cd475aeff58e575d3031 100644
--- a/src/basics/geometry3d/GbQuadFaceMesh3D.cpp
+++ b/src/basics/geometry3d/GbQuadFaceMesh3D.cpp
@@ -64,7 +64,7 @@ GbQuadFaceMesh3D::GbQuadFaceMesh3D(string name, vector<Vertex> *nodes, vector<Qu
 GbQuadFaceMesh3D::~GbQuadFaceMesh3D()
 {
     if (nodes) {
-        //	for(unsigned u=0; u<nodes->size(); u++) delete (*nodes)[u];
+        //    for(unsigned u=0; u<nodes->size(); u++) delete (*nodes)[u];
         delete nodes;
     }
     if (quads) {
diff --git a/src/basics/geometry3d/GbSphere3D.cpp b/src/basics/geometry3d/GbSphere3D.cpp
index 2cb94c462c6e2c1b95e820fab06fe2d37325ecb1..a7d056ee3470d43c2408ef92b2292f797413bb91 100644
--- a/src/basics/geometry3d/GbSphere3D.cpp
+++ b/src/basics/geometry3d/GbSphere3D.cpp
@@ -195,7 +195,7 @@ bool GbSphere3D::isPointInGbObject3D(const double &x1p, const double &x2p, const
 //   if(this->isPointInCrossection(x11, x12) || this->isPointInCrossection(x21, x22) || this->isPointInCrossection(x11,
 //   x22) || this->isPointInCrossection(x21, x12))
 //   {
-//		if(!this->isPointInCrossection(x11, x12) || !this->isPointInCrossection(x21, x22) ||
+//        if(!this->isPointInCrossection(x11, x12) || !this->isPointInCrossection(x21, x22) ||
 //!this->isPointInCrossection(x11, x22) || !this->isPointInCrossection(x21, x12)) return true;
 //   }
 //   return false;
diff --git a/src/basics/geometry3d/GbSystem3D.cpp b/src/basics/geometry3d/GbSystem3D.cpp
index 2a49aff7d55cb3f18ff316eb6310c96b92bbc721..154955394309c6238e71cadb8e211bfec38e769f 100644
--- a/src/basics/geometry3d/GbSystem3D.cpp
+++ b/src/basics/geometry3d/GbSystem3D.cpp
@@ -367,205 +367,205 @@ GbLine3D *GbSystem3D::createClipLine3D(GbPoint3D &pA, GbPoint3D &pB, double x1a,
 //      /*                                                                   */
 //      if(less(ps.getX2Minimum(), x12))
 //      {
-//	 ps.clear();
-//	 last = points[0];
-//	 if(less((*points)[0]->x2, x12)) flag = false;
-//	 else
-//	 {
-//	    ps.add(points[0]);
-//	    flag = true;
-//	 }
-//	 for(i=1; i<n; i++)
-//	 {
-//	    if(less((*points)[i]->x2, x12))
-//	    {
-//	       if(flag)
-//	       {
-//	          f = (x12-(*points)[i]->x2)/((*points)[i]->x2-last->x2);
-//	          ps.add(new GbPoint3D((*points)[i]->x1 + ((*points)[i]->x1-last->x1)*f, x12, (*points)[i]->x3 +
+//     ps.clear();
+//     last = points[0];
+//     if(less((*points)[0]->x2, x12)) flag = false;
+//     else
+//     {
+//        ps.add(points[0]);
+//        flag = true;
+//     }
+//     for(i=1; i<n; i++)
+//     {
+//        if(less((*points)[i]->x2, x12))
+//        {
+//           if(flag)
+//           {
+//              f = (x12-(*points)[i]->x2)/((*points)[i]->x2-last->x2);
+//              ps.add(new GbPoint3D((*points)[i]->x1 + ((*points)[i]->x1-last->x1)*f, x12, (*points)[i]->x3 +
 //((*points)[i]->x3-last->x3)*f));
-//	       }
-//	       flag = false;
-//	    }
-//	    else
-//	    {
-//	       if(!flag)
-//	       {
-//	          f = (x12-(*points)[i]->x2)/((*points)[i]->x2-last->x2);
-//	          ps.add(new GbPoint3D((*points)[i]->x1 + ((*points)[i]->x1-last->x1)*f, x12, (*points)[i]->x3 +
+//           }
+//           flag = false;
+//        }
+//        else
+//        {
+//           if(!flag)
+//           {
+//              f = (x12-(*points)[i]->x2)/((*points)[i]->x2-last->x2);
+//              ps.add(new GbPoint3D((*points)[i]->x1 + ((*points)[i]->x1-last->x1)*f, x12, (*points)[i]->x3 +
 //((*points)[i]->x3-last->x3)*f));
-//	       }
-//	       ps.add((*points)[i]);
-//	       flag = true;
-//	    }
-//	    last = points[i];
-//	 }
-//	 if(!((less(points[0].x2, x12)) ^ flag))
-//	 {
-//	    f = (x12-points[0].x2)/(points[0].x2-last->x2);
-//	    ps.add(new GbPoint3D(points[0].x1 + (points[0].x1-last->x1)*f, x12, points[0].x3 + (points[0].x3-last->x3)*f));
-//	 }
+//           }
+//           ps.add((*points)[i]);
+//           flag = true;
+//        }
+//        last = points[i];
+//     }
+//     if(!((less(points[0].x2, x12)) ^ flag))
+//     {
+//        f = (x12-points[0].x2)/(points[0].x2-last->x2);
+//        ps.add(new GbPoint3D(points[0].x1 + (points[0].x1-last->x1)*f, x12, points[0].x3 + (points[0].x3-last->x3)*f));
+//     }
 //
-//	 points = ps.getPoints();
-//	 n      = points.length;
+//     points = ps.getPoints();
+//     n      = points.length;
 //
-//	 if(n == 0) return(null);
+//     if(n == 0) return(null);
 //      }
 //      /*-------------------------------------------------------------------*/
 //      /*  Schneiden an rechter Kante                                       */
 //      /*                                                                   */
 //      if(greater(ps.getX1Maximum(), x21))
 //      {
-//	 ps.clear();
-//	 last = points[0];
-//	 if(greater(points[0].x1, x21)) flag = false;
-//	 else
-//	 {
-//	    ps.add(points[0]);
-//	    flag = true;
-//	 }
-//	 for(i=1; i<n; i++)
-//	 {
-//	    if(greater((*points)[i]->x1, x21))
-//	    {
-//	       if(flag)
-//	       {
-//	          f = (x21-(*points)[i]->x1)/((*points)[i]->x1-last->x1);
-//	          ps.add(new GbPoint3D(x21, (*points)[i]->x2 + ((*points)[i]->x2-last->x2)*f, (*points)[i]->x3 +
+//     ps.clear();
+//     last = points[0];
+//     if(greater(points[0].x1, x21)) flag = false;
+//     else
+//     {
+//        ps.add(points[0]);
+//        flag = true;
+//     }
+//     for(i=1; i<n; i++)
+//     {
+//        if(greater((*points)[i]->x1, x21))
+//        {
+//           if(flag)
+//           {
+//              f = (x21-(*points)[i]->x1)/((*points)[i]->x1-last->x1);
+//              ps.add(new GbPoint3D(x21, (*points)[i]->x2 + ((*points)[i]->x2-last->x2)*f, (*points)[i]->x3 +
 //((*points)[i]->x3-last->x3)*f));
-//	       }
-//	       flag = false;
-//	    }
-//	    else
-//	    {
-//	       if(!flag)
-//	       {
-//	          f = (x21-(*points)[i]->x1)/((*points)[i]->x1-last->x1);
-//	          ps.add(new GbPoint3D(x21, (*points)[i]->x2 + ((*points)[i]->x2-last->x2)*f, (*points)[i]->x3 +
+//           }
+//           flag = false;
+//        }
+//        else
+//        {
+//           if(!flag)
+//           {
+//              f = (x21-(*points)[i]->x1)/((*points)[i]->x1-last->x1);
+//              ps.add(new GbPoint3D(x21, (*points)[i]->x2 + ((*points)[i]->x2-last->x2)*f, (*points)[i]->x3 +
 //((*points)[i]->x3-last->x3)*f));
-//	       }
-//	       ps.add(points[i]);
-//	       flag = true;
-//	    }
-//	    last = points[i];
-//	 }
-//	 if(!((greater(points[0].x1, x21)) ^ flag))
-//	 {
-//	    f = (x21-points[0].x1)/(points[0].x1-last.x1);
-//	    ps.add(new GbPoint3D(x21, points[0].x2 + (points[0].x2-last.x2)*f, points[0].x3 + (points[0].x3-last.x3)*f));
-//	 }
+//           }
+//           ps.add(points[i]);
+//           flag = true;
+//        }
+//        last = points[i];
+//     }
+//     if(!((greater(points[0].x1, x21)) ^ flag))
+//     {
+//        f = (x21-points[0].x1)/(points[0].x1-last.x1);
+//        ps.add(new GbPoint3D(x21, points[0].x2 + (points[0].x2-last.x2)*f, points[0].x3 + (points[0].x3-last.x3)*f));
+//     }
 //
-//	 points = ps.getPoints();
-//	 n      = points.length;
+//     points = ps.getPoints();
+//     n      = points.length;
 //
-//	 if(n == 0) return(null);
+//     if(n == 0) return(null);
 //      }
 //      /*-------------------------------------------------------------------*/
 //      /*  Schneiden an oberer Kante                                        */
 //      /*                                                                   */
 //      if(greater(ps.getX2Maximum(), x22))
 //      {
-//	 ps.clear();
-//	 last = points[0];
-//	 if(greater(points[0].x2, x22)) flag = false;
-//	 else
-//	 {
-//	    ps.add(points[0]);
-//	    flag = true;
-//	 }
-//	 for(i=1; i<n; i++)
-//	 {
-//	    if(greater((*points)[i]->x2, x22))
-//	    {
-//	       if(flag)
-//	       {
-//	          f = (x22-(*points)[i]->x2)/(points[i].x2-last.x2);
-//	          ps.add(new GbPoint3D(points[i].x1 + (points[i].x1-last.x1)*f, x22, points[i].x3 +
+//     ps.clear();
+//     last = points[0];
+//     if(greater(points[0].x2, x22)) flag = false;
+//     else
+//     {
+//        ps.add(points[0]);
+//        flag = true;
+//     }
+//     for(i=1; i<n; i++)
+//     {
+//        if(greater((*points)[i]->x2, x22))
+//        {
+//           if(flag)
+//           {
+//              f = (x22-(*points)[i]->x2)/(points[i].x2-last.x2);
+//              ps.add(new GbPoint3D(points[i].x1 + (points[i].x1-last.x1)*f, x22, points[i].x3 +
 //(points[i].x3-last.x3)*f));
-//	       }
-//	       flag = false;
-//	    }
-//	    else
-//	    {
-//	       if(!flag)
-//	       {
-//	          f = (x22-points[i].x2)/(points[i].x2-last.x2);
-//	          ps.add(new GbPoint3D(points[i].x1 + (points[i].x1-last.x1)*f, x22, points[i].x3 +
+//           }
+//           flag = false;
+//        }
+//        else
+//        {
+//           if(!flag)
+//           {
+//              f = (x22-points[i].x2)/(points[i].x2-last.x2);
+//              ps.add(new GbPoint3D(points[i].x1 + (points[i].x1-last.x1)*f, x22, points[i].x3 +
 //(points[i].x3-last.x3)*f));
-//	       }
-//	       ps.add(points[i]);
-//	       flag = true;
-//	    }
-//	    last = points[i];
-//	 }
-//	 if(!((greater(points[0].x2, x22)) ^ flag))
-//	 {
-//	    f = (x22-points[0].x2)/(points[0].x2-last.x2);
-//	    ps.add(new GbPoint3D(points[0].x1 + (points[0].x1-last.x1)*f, x22, points[0].x3 + (points[0].x3-last.x3)*f));
-//	 }
+//           }
+//           ps.add(points[i]);
+//           flag = true;
+//        }
+//        last = points[i];
+//     }
+//     if(!((greater(points[0].x2, x22)) ^ flag))
+//     {
+//        f = (x22-points[0].x2)/(points[0].x2-last.x2);
+//        ps.add(new GbPoint3D(points[0].x1 + (points[0].x1-last.x1)*f, x22, points[0].x3 + (points[0].x3-last.x3)*f));
+//     }
 //
-//	 points = ps.getPoints();
-//	 n      = points.length;
+//     points = ps.getPoints();
+//     n      = points.length;
 //
-//	 if(n == 0) return(null);
+//     if(n == 0) return(null);
 //      }
 //      /*-------------------------------------------------------------------*/
 //      /*  Schneiden an linker Kante                                        */
 //      /*                                                                   */
 //      if(less(ps.getX1Minimum(), x11))
 //      {
-//	 ps.clear();
-//	 last = points[0];
-//	 if(less(points[0].x1, x11)) flag = false;
-//	 else
-//	 {
-//	    ps.add(points[0]);
-//	    flag = true;
-//	 }
-//	 for(i=1; i<n; i++)
-//	 {
-//	    if(less(points[i].x1, x11))
-//	    {
-//	       if(flag)
-//	       {
-//	          f = (x11-points[i].x1)/(points[i].x1-last.x1);
-//	          ps.add(new GbPoint3D(x11, points[i].x2 + (points[i].x2-last.x2)*f, points[i].x3 +
+//     ps.clear();
+//     last = points[0];
+//     if(less(points[0].x1, x11)) flag = false;
+//     else
+//     {
+//        ps.add(points[0]);
+//        flag = true;
+//     }
+//     for(i=1; i<n; i++)
+//     {
+//        if(less(points[i].x1, x11))
+//        {
+//           if(flag)
+//           {
+//              f = (x11-points[i].x1)/(points[i].x1-last.x1);
+//              ps.add(new GbPoint3D(x11, points[i].x2 + (points[i].x2-last.x2)*f, points[i].x3 +
 //(points[i].x3-last.x3)*f));
-//	       }
-//	       flag = false;
-//	    }
-//	    else
-//	    {
-//	       if(!flag)
-//	       {
-//	          f = (x11-points[i].x1)/(points[i].x1-last.x1);
-//	          ps.add(new GbPoint3D(x11, points[i].x2 + (points[i].x2-last.x2)*f, points[i].x3 +
+//           }
+//           flag = false;
+//        }
+//        else
+//        {
+//           if(!flag)
+//           {
+//              f = (x11-points[i].x1)/(points[i].x1-last.x1);
+//              ps.add(new GbPoint3D(x11, points[i].x2 + (points[i].x2-last.x2)*f, points[i].x3 +
 //(points[i].x3-last.x3)*f));
-//	       }
-//	       ps.add(points[i]);
-//	       flag = true;
-//	    }
-//	    last = points[i];
-//	 }
-//	 if(!((less(points[0].x1, x11)) ^ flag))
-//	 {
-//	    f = (x11-points[0].x1)/(points[0].x1-last.x1);
-//	    ps.add(new GbPoint3D(x11, points[0].x2 + (points[0].x2-last.x2)*f, points[0].x3 + (points[0].x3-last.x3)*f));
-//	 }
+//           }
+//           ps.add(points[i]);
+//           flag = true;
+//        }
+//        last = points[i];
+//     }
+//     if(!((less(points[0].x1, x11)) ^ flag))
+//     {
+//        f = (x11-points[0].x1)/(points[0].x1-last.x1);
+//        ps.add(new GbPoint3D(x11, points[0].x2 + (points[0].x2-last.x2)*f, points[0].x3 + (points[0].x3-last.x3)*f));
+//     }
 //
-//	 points = ps.getPoints();
-//	 n      = points.length;
+//     points = ps.getPoints();
+//     n      = points.length;
 //
-//	 if(n == 0) return(null);
+//     if(n == 0) return(null);
 //      }
 //      /*-------------------------------------------------------------------*/
 //      GbPolygon3D polygon = new GbPolygon3D(points);
 //
 //      if(n > 2)
 //      {
-//	 for(i=2; i<n; i++) if(zero(i_TA(points[i-2], points[i-1], points[i]))) polygon.deletePoint(points[i-1]);
-//	 if(zero(i_TA(points[n-2], points[n-1], points[0]))) polygon.deletePoint(points[n-1]);
-//	 if(zero(i_TA(points[n-1], points[0],   points[1]))) polygon.deletePoint(points[0]);
+//     for(i=2; i<n; i++) if(zero(i_TA(points[i-2], points[i-1], points[i]))) polygon.deletePoint(points[i-1]);
+//     if(zero(i_TA(points[n-2], points[n-1], points[0]))) polygon.deletePoint(points[n-1]);
+//     if(zero(i_TA(points[n-1], points[0],   points[1]))) polygon.deletePoint(points[0]);
 //      }
 //      return(polygon);
 //   }
@@ -586,98 +586,98 @@ GbLine3D *GbSystem3D::createClipLine3D(GbPoint3D &pA, GbPoint3D &pB, double x1a,
 //      /*                                                                   */
 //      if(less(ps.getX3Minimum(), x13))
 //      {
-//	 ps.clear();
-//	 last = points[0];
-//	 if(less(points[0].x3, x13)) flag = false;
-//	 else
-//	 {
-//	    ps.add(points[0]);
-//	    flag = true;
-//	 }
-//	 for(i=1; i<n; i++)
-//	 {
-//	    if(less(points[i].x3, x13))
-//	    {
-//	       if(flag)
-//	       {
-//	          f = (x13-points[i].x3)/(points[i].x3-last.x3);
-//	          ps.add(new GbPoint3D(points[i].x1 + (points[i].x1-last.x1)*f, points[i].x2 + (points[i].x2-last.x2)*f,
+//     ps.clear();
+//     last = points[0];
+//     if(less(points[0].x3, x13)) flag = false;
+//     else
+//     {
+//        ps.add(points[0]);
+//        flag = true;
+//     }
+//     for(i=1; i<n; i++)
+//     {
+//        if(less(points[i].x3, x13))
+//        {
+//           if(flag)
+//           {
+//              f = (x13-points[i].x3)/(points[i].x3-last.x3);
+//              ps.add(new GbPoint3D(points[i].x1 + (points[i].x1-last.x1)*f, points[i].x2 + (points[i].x2-last.x2)*f,
 //x13));
-//	       }
-//	       flag = false;
-//	    }
-//	    else
-//	    {
-//	       if(!flag)
-//	       {
-//	          f = (x13-points[i].x3)/(points[i].x3-last.x3);
-//	          ps.add(new GbPoint3D(points[i].x1 + (points[i].x1-last.x1)*f, points[i].x2 + (points[i].x2-last.x2)*f,
+//           }
+//           flag = false;
+//        }
+//        else
+//        {
+//           if(!flag)
+//           {
+//              f = (x13-points[i].x3)/(points[i].x3-last.x3);
+//              ps.add(new GbPoint3D(points[i].x1 + (points[i].x1-last.x1)*f, points[i].x2 + (points[i].x2-last.x2)*f,
 //x13));
-//	       }
-//	       ps.add(points[i]);
-//	       flag = true;
-//	    }
-//	    last = points[i];
-//	 }
-//	 if(!((less(points[0].x3, x13)) ^ flag))
-//	 {
-//	    f = (x13-points[0].x3)/(points[0].x3-last.x3);
-//	    ps.add(new GbPoint3D(points[0].x1 + (points[0].x1-last.x1)*f, points[0].x2 + (points[0].x2-last.x2)*f, x13));
-//	 }
+//           }
+//           ps.add(points[i]);
+//           flag = true;
+//        }
+//        last = points[i];
+//     }
+//     if(!((less(points[0].x3, x13)) ^ flag))
+//     {
+//        f = (x13-points[0].x3)/(points[0].x3-last.x3);
+//        ps.add(new GbPoint3D(points[0].x1 + (points[0].x1-last.x1)*f, points[0].x2 + (points[0].x2-last.x2)*f, x13));
+//     }
 //
-//	 points = ps.getPoints();
-//	 n      = points.length;
+//     points = ps.getPoints();
+//     n      = points.length;
 //
-//	 if(n == 0) return(null);
+//     if(n == 0) return(null);
 //      }
 //      /*-------------------------------------------------------------------*/
 //      /*  Schneiden an hinterer Kante                                      */
 //      /*                                                                   */
 //      if(greater(ps.getX3Maximum(), x23))
 //      {
-//	 ps.clear();
-//	 last = points[0];
-//	 if(greater(points[0].x3, x23)) flag = false;
-//	 else
-//	 {
-//	    ps.add(points[0]);
-//	    flag = true;
-//	 }
-//	 for(i=1; i<n; i++)
-//	 {
-//	    if(greater(points[i].x3, x23))
-//	    {
-//	       if(flag)
-//	       {
-//	          f = (x23-points[i].x3)/(points[i].x3-last.x3);
-//	          ps.add(new GbPoint3D(points[i].x1 + (points[i].x1-last.x1)*f, points[i].x2 + (points[i].x2-last.x2)*f,
+//     ps.clear();
+//     last = points[0];
+//     if(greater(points[0].x3, x23)) flag = false;
+//     else
+//     {
+//        ps.add(points[0]);
+//        flag = true;
+//     }
+//     for(i=1; i<n; i++)
+//     {
+//        if(greater(points[i].x3, x23))
+//        {
+//           if(flag)
+//           {
+//              f = (x23-points[i].x3)/(points[i].x3-last.x3);
+//              ps.add(new GbPoint3D(points[i].x1 + (points[i].x1-last.x1)*f, points[i].x2 + (points[i].x2-last.x2)*f,
 //x23));
-//	       }
-//	       flag = false;
-//	    }
-//	    else
-//	    {
-//	       if(!flag)
-//	       {
-//	          f = (x23-points[i].x3)/(points[i].x3-last.x3);
-//	          ps.add(new GbPoint3D(points[i].x1 + ((*points)[i]->x1-last.x1)*f, (*points)[i]->x2 +
+//           }
+//           flag = false;
+//        }
+//        else
+//        {
+//           if(!flag)
+//           {
+//              f = (x23-points[i].x3)/(points[i].x3-last.x3);
+//              ps.add(new GbPoint3D(points[i].x1 + ((*points)[i]->x1-last.x1)*f, (*points)[i]->x2 +
 //((*points)[i]->x2-last.x2)*f, x23));
-//	       }
-//	       ps.add(points[i]);
-//	       flag = true;
-//	    }
-//	    last = points[i];
-//	 }
-//	 if(!((greater(points[0].x3, x23)) ^ flag))
-//	 {
-//	    f = (x23-points[0].x3)/(points[0].x3-last.x3);
-//	    ps.add(new GbPoint3D(points[0].x1 + (points[0].x1-last.x1)*f, points[0].x2 + (points[0].x2-last.x2)*f, x23));
-//	 }
+//           }
+//           ps.add(points[i]);
+//           flag = true;
+//        }
+//        last = points[i];
+//     }
+//     if(!((greater(points[0].x3, x23)) ^ flag))
+//     {
+//        f = (x23-points[0].x3)/(points[0].x3-last.x3);
+//        ps.add(new GbPoint3D(points[0].x1 + (points[0].x1-last.x1)*f, points[0].x2 + (points[0].x2-last.x2)*f, x23));
+//     }
 //
-//	 points = ps.getPoints();
-//	 n      = points.length;
+//     points = ps.getPoints();
+//     n      = points.length;
 //
-//	 if(n == 0) return(null);
+//     if(n == 0) return(null);
 //      }
 //      /*-------------------------------------------------------------------*/
 //      GbPolygon3D polygon = new GbPolygon3D(points);
diff --git a/src/basics/geometry3d/GbSystem3D.h b/src/basics/geometry3d/GbSystem3D.h
index 239a4c30da2c15d3a07355716c1160e79016f128..16e65e6bc76f3a7fcc3eb2623fa04d5bc0900aa4 100644
--- a/src/basics/geometry3d/GbSystem3D.h
+++ b/src/basics/geometry3d/GbSystem3D.h
@@ -244,33 +244,33 @@ public:
             (this->points)[u++] = (p)[b];
         // u = this->sizet;
         // for(int b=0; b<(int)p->size(); b++)
-        //	cout<<(this->points)[u++].toString()<<endl;
+        //    cout<<(this->points)[u++].toString()<<endl;
         this->consistent = false;
         this->sizet += (int)p.size();
     };
-    //		void insert(GbPoint3D *point, int index)
+    //        void insert(GbPoint3D *point, int index)
     //      {
-    //	 if(this.size == this.points.length)
-    //	 {
-    //	    GbPoint3D a[] = new GbPoint3D[1+(this.size<<1)];
-    //	    System.arraycopy(this.points, 0, a, 0, this.size);
-    //	    this.points = a;
-    //	 }
-    //	 System.arraycopy(this.points, index, this.points, index+1, this.size-index);
-    //	 this.points[index] = point;
-    //	 this.consistent    = false;
-    //	 this.size++;
+    //     if(this.size == this.points.length)
+    //     {
+    //        GbPoint3D a[] = new GbPoint3D[1+(this.size<<1)];
+    //        System.arraycopy(this.points, 0, a, 0, this.size);
+    //        this.points = a;
+    //     }
+    //     System.arraycopy(this.points, index, this.points, index+1, this.size-index);
+    //     this.points[index] = point;
+    //     this.consistent    = false;
+    //     this.size++;
     //      }
     //      void delete(GbPoint3D point)
     //      {
-    //	 for(int i=this.size-1; i>=0; i--) if(this.points[i] == point) this.delete(i);
+    //     for(int i=this.size-1; i>=0; i--) if(this.points[i] == point) this.delete(i);
     //      }
     //      void delete(int index)
     //      {
-    //	 int j = this.size - index - 1;
-    //	 if(j > 0) System.arraycopy(this.points, index + 1, this.points, index, j);
-    //	 this.consistent = false;
-    //	 this.size--;
+    //     int j = this.size - index - 1;
+    //     if(j > 0) System.arraycopy(this.points, index + 1, this.points, index, j);
+    //     this.consistent = false;
+    //     this.size--;
     //      }
     void clear()
     {
@@ -397,25 +397,25 @@ public:
     };
     //      boolean containsEqualLine(GbPoint2D point1, GbPoint2D point2)
     //      {
-    //	 for(int i=this.size-1; i>=0; i--) if(this.points[i].equals(point1))
-    //	 {
-    //	    if(i == 0)
-    //	    {
-    //	       if(this.points[i+1].equals(point2))         return(true);
-    //	       if(this.points[this.size-1].equals(point2)) return(true);
-    //	    }
-    //	    else if(i == this.size-1)
-    //	    {
-    //	       if(this.points[0].equals(point2))   return(true);
-    //	       if(this.points[i-1].equals(point2)) return(true);
-    //	    }
-    //	    else
-    //	    {
-    //	       if(this.points[i+1].equals(point2)) return(true);
-    //	       if(this.points[i-1].equals(point2)) return(true);
-    //	    }
-    //	 }
-    //	 return(false);
+    //     for(int i=this.size-1; i>=0; i--) if(this.points[i].equals(point1))
+    //     {
+    //        if(i == 0)
+    //        {
+    //           if(this.points[i+1].equals(point2))         return(true);
+    //           if(this.points[this.size-1].equals(point2)) return(true);
+    //        }
+    //        else if(i == this.size-1)
+    //        {
+    //           if(this.points[0].equals(point2))   return(true);
+    //           if(this.points[i-1].equals(point2)) return(true);
+    //        }
+    //        else
+    //        {
+    //           if(this.points[i+1].equals(point2)) return(true);
+    //           if(this.points[i-1].equals(point2)) return(true);
+    //        }
+    //     }
+    //     return(false);
     //      }
     GbPoint3D *getPoint(int index) { return (&(this->points)[index]); }
     GbPoint3D *getFirstPoint() { return (&(this->points)[0]); }
@@ -430,7 +430,7 @@ public:
 
         // vector<GbPoint3D*> *a = new vector<GbPoint3D*>;
         // a->resize(l, NULL);
-        // for(int u=0; u<l; u++)  { (*a)[u] = &((points)[u]);	}
+        // for(int u=0; u<l; u++)  { (*a)[u] = &((points)[u]);    }
         // return(a);
     }
 };
diff --git a/src/basics/geometry3d/GbTriFaceMesh3D.cpp b/src/basics/geometry3d/GbTriFaceMesh3D.cpp
index 7da89fc9bf0565ec7862939ffa652b3ff1880a4f..b3c263ee7af29c538f4f3c2baa7113a82692c6ec 100644
--- a/src/basics/geometry3d/GbTriFaceMesh3D.cpp
+++ b/src/basics/geometry3d/GbTriFaceMesh3D.cpp
@@ -32,11 +32,12 @@
 //=======================================================================================
 #include <geometry3d/GbTriFaceMesh3D.h>
 
+#include <basics/Timer/Timer.h>
 #include <basics/utilities/UbFileInputASCII.h>
 #include <basics/utilities/UbLogger.h>
 #include <basics/utilities/UbRandom.h>
-#include <basics/utilities/UbTiming.h>
 #include <basics/writer/WbWriter.h>
+
 #include <geometry3d/CoordinateTransformation3D.h>
 #include <geometry3d/GbCuboid3D.h>
 #include <geometry3d/GbHalfSpace3D.h>
@@ -651,7 +652,7 @@ void GbTriFaceMesh3D::addSurfaceTriangleSet(vector<UbTupleFloat3> &pts, vector<U
 //      if( !kdTree)
 //      {
 //         UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree start");
-//         UbTimer timer; timer.start();
+//         vf::basics::Timer timer; timer.start();
 //         if(kdtreeSplitAlg == KDTREE_SAHPLIT     )
 //         {
 //            UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit");
@@ -663,7 +664,7 @@ void GbTriFaceMesh3D::addSurfaceTriangleSet(vector<UbTupleFloat3> &pts, vector<U
 //            this->kdTree = new Kd::Tree<double>( *this, Kd::SpatialMedianSplit<double>() );
 //         }
 //         else throw UbException(UB_EXARGS, "unknown kdtree split option)" );
-//         UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in "<<timer.stop()<<"seconds");
+//         UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in "<<timer.getCurrentRuntimeInSeconds()<<"seconds");
 //      }
 //
 //      //eigentlicher PIO-Test
@@ -738,7 +739,7 @@ bool GbTriFaceMesh3D::isPointInGbObject3D(const double &x1, const double &x2, co
         // Baum erstellen, wen noch keiner vorhanden
         if (!kdTree) {
             UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree start");
-            UbTimer timer;
+            vf::basics::Timer timer;
             timer.start();
             if (kdtreeSplitAlg == KDTREE_SAHPLIT) {
                 UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit");
@@ -748,7 +749,7 @@ bool GbTriFaceMesh3D::isPointInGbObject3D(const double &x1, const double &x2, co
                 this->kdTree = new Kd::Tree<double>(*this, Kd::SpatialMedianSplit<double>());
             } else
                 throw UbException(UB_EXARGS, "unknown kdtree split option)");
-            UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds");
+            UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.getCurrentRuntimeInSeconds() << "seconds");
         }
 
         // eigentlicher PIO-Test
@@ -820,7 +821,7 @@ bool GbTriFaceMesh3D::isPointInGbObject3D(const double &x1, const double &x2, co
         // Baum erstellen, wen noch keiner vorhanden
         if (!kdTree) {
             UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree start");
-            UbTimer timer;
+            vf::basics::Timer timer;
             timer.start();
             if (kdtreeSplitAlg == KDTREE_SAHPLIT) {
                 UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit");
@@ -831,7 +832,7 @@ bool GbTriFaceMesh3D::isPointInGbObject3D(const double &x1, const double &x2, co
                 this->kdTree = new Kd::Tree<double>(*this, Kd::SpatialMedianSplit<double>());
             } else
                 throw UbException(UB_EXARGS, "unknown kdtree split option)");
-            UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds");
+            UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.getCurrentRuntimeInSeconds() << "seconds");
             //cout << "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds" << std::endl;
         }
 
@@ -905,7 +906,7 @@ bool GbTriFaceMesh3D::isPointInGbObject3D(const double &x1, const double &x2, co
         // Baum erstellen, wen noch keiner vorhanden
         if (!kdTree) {
             UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree start");
-            UbTimer timer;
+            vf::basics::Timer timer;
             timer.start();
             if (kdtreeSplitAlg == KDTREE_SAHPLIT) {
                 UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit");
@@ -915,7 +916,7 @@ bool GbTriFaceMesh3D::isPointInGbObject3D(const double &x1, const double &x2, co
                 this->kdTree = new Kd::Tree<double>(*this, Kd::SpatialMedianSplit<double>());
             } else
                 throw UbException(UB_EXARGS, "unknown kdtree split option)");
-            UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds");
+            UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.getCurrentRuntimeInSeconds() << "seconds");
         }
 
         // eigentlicher PIO-Test
@@ -951,7 +952,7 @@ bool GbTriFaceMesh3D::intersectLine(const double &p1_x1, const double &p1_x2, co
     // Baum erstellen, wen noch keiner vorhanden
     if (!kdTree) {
         UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree start");
-        UbTimer timer;
+        vf::basics::Timer timer;
         timer.start();
         if (kdtreeSplitAlg == KDTREE_SAHPLIT) {
             UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit");
@@ -961,7 +962,7 @@ bool GbTriFaceMesh3D::intersectLine(const double &p1_x1, const double &p1_x2, co
             this->kdTree = new Kd::Tree<double>(*this, Kd::SpatialMedianSplit<double>());
         } else
             throw UbException(UB_EXARGS, "unknown kdtree split option)");
-        UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds");
+        UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.getCurrentRuntimeInSeconds() << "seconds");
     }
 
     int iSec = kdTree->intersectLine(UbTupleDouble3(p1_x1, p1_x2, p1_x3), UbTupleDouble3(p2_x1, p2_x2, p2_x3),
diff --git a/src/basics/geometry3d/GbTriangularMesh3D.cpp b/src/basics/geometry3d/GbTriangularMesh3D.cpp
index 3fc0495fad3a1426a9749b43bca7348be4aa6186..8db585a67669c959ec2ac04a0aa23d09ce9ad49b 100644
--- a/src/basics/geometry3d/GbTriangularMesh3D.cpp
+++ b/src/basics/geometry3d/GbTriangularMesh3D.cpp
@@ -655,41 +655,41 @@ double GbTriangularMesh3D::getVolumeForRectangle(const double & /*p1x1*/, const
 
     //    for(int i=0; i<this.triangles.length; i++)
     //    {
-    //	t1min = this.triangles[i].getX1Minimum();
-    //	t1max = this.triangles[i].getX1Maximum();
-    //	if(GbSystem.less2(t1min, t1max, p1x1, p2x1))    continue;
-    //	if(GbSystem.greater2(t1min, t1max, p1x1, p2x1)) continue;
-
-    //	t2min = this.triangles[i].getX2Minimum();
-    //	t2max = this.triangles[i].getX2Maximum();
-    //	if(GbSystem.less2(t2min, t2max, p1x2, p2x2))    continue;
-    //	if(GbSystem.greater2(t2min, t2max, p1x2, p2x2)) continue;
-
-    //	if(GbSystem.inOpenInterval(t1min, p1x1, p2x1) && GbSystem.inOpenInterval(t1max, p1x1, p2x1) &&
-    //		GbSystem.inOpenInterval(t2min, p1x2, p2x2) && GbSystem.inOpenInterval(t2max, p1x2, p2x2))
-    //	{
-    //		volume += this.triangles[i].getVolume();
-    //		area2  += this.triangles[i].getArea();
-    //		f       = true;
-    //	}
-    //	else
-    //	{
-    //		polygon = this.triangles[i].createClippedPolygon3D(p1x1, p1x2, p2x1, p2x2);
-
-    //		if(polygon != null && polygon.size() > 2)
-    //		{
-    //			try
-    //			{
-    //				x1      = polygon.getX1Centroid();
-    //				x2      = polygon.getX2Centroid();
-    //				volume += this.triangles[i].getX3Coordinate(x1, x2) * Math.abs(polygon.getArea());
-    //				area2  += Math.abs(polygon.getArea());
-    //				f       = true;
-    //			}
-    //			catch(Exception e){}
-    //		}
-    //	}
-    //	if(GbSystem.greaterEqual(area2, area1)) break;
+    //    t1min = this.triangles[i].getX1Minimum();
+    //    t1max = this.triangles[i].getX1Maximum();
+    //    if(GbSystem.less2(t1min, t1max, p1x1, p2x1))    continue;
+    //    if(GbSystem.greater2(t1min, t1max, p1x1, p2x1)) continue;
+
+    //    t2min = this.triangles[i].getX2Minimum();
+    //    t2max = this.triangles[i].getX2Maximum();
+    //    if(GbSystem.less2(t2min, t2max, p1x2, p2x2))    continue;
+    //    if(GbSystem.greater2(t2min, t2max, p1x2, p2x2)) continue;
+
+    //    if(GbSystem.inOpenInterval(t1min, p1x1, p2x1) && GbSystem.inOpenInterval(t1max, p1x1, p2x1) &&
+    //        GbSystem.inOpenInterval(t2min, p1x2, p2x2) && GbSystem.inOpenInterval(t2max, p1x2, p2x2))
+    //    {
+    //        volume += this.triangles[i].getVolume();
+    //        area2  += this.triangles[i].getArea();
+    //        f       = true;
+    //    }
+    //    else
+    //    {
+    //        polygon = this.triangles[i].createClippedPolygon3D(p1x1, p1x2, p2x1, p2x2);
+
+    //        if(polygon != null && polygon.size() > 2)
+    //        {
+    //            try
+    //            {
+    //                x1      = polygon.getX1Centroid();
+    //                x2      = polygon.getX2Centroid();
+    //                volume += this.triangles[i].getX3Coordinate(x1, x2) * Math.abs(polygon.getArea());
+    //                area2  += Math.abs(polygon.getArea());
+    //                f       = true;
+    //            }
+    //            catch(Exception e){}
+    //        }
+    //    }
+    //    if(GbSystem.greaterEqual(area2, area1)) break;
     //}
     //    if(f) return(volume);
     //    else  throw new NullPointerException();
@@ -715,32 +715,32 @@ vector<GbTriangle3D *> *GbTriangularMesh3D::getTrianglesForRectangle(const doubl
 
     //    for(int i=0; i<this.triangles.length; i++)
     //    {
-    //	t1min = this.triangles[i].getX1Minimum();
-    //	t1max = this.triangles[i].getX1Maximum();
-    //	if(GbSystem.less2(t1min, t1max, p1x1, p2x1))    continue;
-    //	if(GbSystem.greater2(t1min, t1max, p1x1, p2x1)) continue;
-
-    //	t2min = this.triangles[i].getX2Minimum();
-    //	t2max = this.triangles[i].getX2Maximum();
-    //	if(GbSystem.less2(t2min, t2max, p1x2, p2x2))    continue;
-    //	if(GbSystem.greater2(t2min, t2max, p1x2, p2x2)) continue;
-
-    //	if(GbSystem.inOpenInterval(t1min, p1x1, p2x1) && GbSystem.inOpenInterval(t1max, p1x1, p2x1) &&
-    //		GbSystem.inOpenInterval(t2min, p1x2, p2x2) && GbSystem.inOpenInterval(t2max, p1x2, p2x2))
-    //	{
-    //		try { triangleList.append(this.triangles[i]); } catch(Exception e){}
-    //		area2 += this.triangles[i].getArea();
-    //	}
-    //	else
-    //	{
-    //		polygon = this.triangles[i].createClippedPolygon3D(p1x1, p1x2, p2x1, p2x2);
-    //		if(polygon != null && polygon.size() > 2)
-    //		{
-    //			try { triangleList.append(this.triangles[i]); } catch(Exception e){}
-    //			area2 += Math.abs(polygon.getArea());
-    //		}
-    //	}
-    //	if(GbSystem.greaterEqual(area2, area1)) break;
+    //    t1min = this.triangles[i].getX1Minimum();
+    //    t1max = this.triangles[i].getX1Maximum();
+    //    if(GbSystem.less2(t1min, t1max, p1x1, p2x1))    continue;
+    //    if(GbSystem.greater2(t1min, t1max, p1x1, p2x1)) continue;
+
+    //    t2min = this.triangles[i].getX2Minimum();
+    //    t2max = this.triangles[i].getX2Maximum();
+    //    if(GbSystem.less2(t2min, t2max, p1x2, p2x2))    continue;
+    //    if(GbSystem.greater2(t2min, t2max, p1x2, p2x2)) continue;
+
+    //    if(GbSystem.inOpenInterval(t1min, p1x1, p2x1) && GbSystem.inOpenInterval(t1max, p1x1, p2x1) &&
+    //        GbSystem.inOpenInterval(t2min, p1x2, p2x2) && GbSystem.inOpenInterval(t2max, p1x2, p2x2))
+    //    {
+    //        try { triangleList.append(this.triangles[i]); } catch(Exception e){}
+    //        area2 += this.triangles[i].getArea();
+    //    }
+    //    else
+    //    {
+    //        polygon = this.triangles[i].createClippedPolygon3D(p1x1, p1x2, p2x1, p2x2);
+    //        if(polygon != null && polygon.size() > 2)
+    //        {
+    //            try { triangleList.append(this.triangles[i]); } catch(Exception e){}
+    //            area2 += Math.abs(polygon.getArea());
+    //        }
+    //    }
+    //    if(GbSystem.greaterEqual(area2, area1)) break;
     //}
     //    return((GbTriangle3D[])triangleList.getObjectArray());
 }
@@ -763,7 +763,7 @@ vector<GbPoint3D *> *GbTriangularMesh3D::getNodesForRectangle(const double & /*p
     // if(GbSystem.inClosedInterval(this.nodes[i].getX1Coordinate(), p1x1, p2x1) &&
     // GbSystem.inClosedInterval(this.nodes[i].getX2Coordinate(), p1x2, p2x2))
     //{
-    //	try { nodeList.append(this.nodes[i]); } catch(Exception e){}
+    //    try { nodeList.append(this.nodes[i]); } catch(Exception e){}
     //}
     //   }
     //   return((GbPoint3D[])nodeList.getObjectArray());
diff --git a/src/basics/geometry3d/GbVoxelMatrix3D.cpp b/src/basics/geometry3d/GbVoxelMatrix3D.cpp
index 130eaf655c3fb42544d71508a16b6b9212039df7..7ddba99294f68aa5594ca4dfe035815d947c2eb4 100644
--- a/src/basics/geometry3d/GbVoxelMatrix3D.cpp
+++ b/src/basics/geometry3d/GbVoxelMatrix3D.cpp
@@ -41,10 +41,6 @@
 #include <basics/utilities/UbSystem.h>
 #include "basics/constants/NumericConstants.h"
 
-#ifdef MC_CUBES
-#include <MarchingCubes/MarchingCubes.h>
-#endif // MC_CUBES
-
 using namespace std;
 
 const float GbVoxelMatrix3D::SOLID = 1.0f;
@@ -323,45 +319,9 @@ bool GbVoxelMatrix3D::isCellInsideOrCuttingGbObject3D(const double &x1a, const d
 vector<GbTriangle3D *> GbVoxelMatrix3D::getSurfaceTriangleSet()
 {
     vector<GbTriangle3D *> triangles;
-
-#ifdef MC_CUBES
-    // MC
-    typedef McCubes::Matrix3DWrapper<Matrix3D> McMatrixWrapper;
-    typedef McCubes::MarchingCubes<McMatrixWrapper> McMarchingCubesGenerator;
-    typedef McMarchingCubesGenerator::Vertex McVertex;
-    typedef McMarchingCubesGenerator::Triangle McTriangle;
-
-    McMatrixWrapper wrapper(
-        &voxelMatrix); //,0,0,0,voxelMatrix.getNX1()-1,voxelMatrix.getNX2()-1,voxelMatrix.getNX3()-1);
-    McMarchingCubesGenerator mc(wrapper);
-
-    mc.init_all();
-    mc.run(0.5);
-
-    // const int   nofVertices  = mc.nverts();
-    const int nofTriangles = mc.ntrigs();
-
-    McVertex *mcvertices    = mc.vertices();
-    McTriangle *mctriangles = mc.triangles();
-
-    for (int t = 0; t < nofTriangles; t++) {
-        triangles.push_back(
-            new GbTriangle3D(new GbPoint3D(minX1 + deltaX1 * (mcvertices[mctriangles[t].v1].x /*-1*/),
-                                           minX2 + deltaX2 * (mcvertices[mctriangles[t].v1].y /*-1*/),
-                                           minX3 + deltaX3 * (mcvertices[mctriangles[t].v1].z /*-1*/)),
-                             new GbPoint3D(minX1 + deltaX1 * (mcvertices[mctriangles[t].v2].x /*-1*/),
-                                           minX2 + deltaX2 * (mcvertices[mctriangles[t].v2].y /*-1*/),
-                                           minX3 + deltaX3 * (mcvertices[mctriangles[t].v2].z /*-1*/)),
-                             new GbPoint3D(minX1 + deltaX1 * (mcvertices[mctriangles[t].v3].x /*-1*/),
-                                           minX2 + deltaX2 * (mcvertices[mctriangles[t].v3].y /*-1*/),
-                                           minX3 + deltaX3 * (mcvertices[mctriangles[t].v3].z /*-1*/))));
-    }
-#else
     cerr
         << "vector<GbTriangle3D*> GbVoxelMatrix3D::getSurfaceTriangleSet() - benoetigt MARCHING_CUBE paket aus 3rdParty"
         << endl;
-#endif // MC_CUBES
-
     return triangles;
 }
 /*=======================================================*/
@@ -372,111 +332,8 @@ void GbVoxelMatrix3D::addSurfaceTriangleSet(vector<UbTupleFloat3> & /*nodes*/, v
         UBLOG(logINFO, " GbVoxelMatrix3D addSurfaceTriangleSet end without TriangleSetCreation")
         return;
     }
-#ifdef MC_CUBES
-    UBLOG(logDEBUG1, " GbVoxelMatrix3D addSurfaceTriangleSet MC defined")
-
-    typedef McCubes::Matrix3DWrapper<Matrix3D> McMatrixWrapper;
-    typedef McCubes::MarchingCubes<McMatrixWrapper> McMarchingCubesGenerator;
-    typedef McMarchingCubesGenerator::Vertex McVertex;
-    typedef McMarchingCubesGenerator::Triangle McTriangle;
-
-    // MC
-    { // standard( fuer voxelmatrix)
-        McMatrixWrapper wrapper(&voxelMatrix);
-        McMarchingCubesGenerator mc(wrapper);
-
-        UBLOG(logDEBUG1, " GbVoxelMatrix3D addSurfaceTriangleSet McMarchingCubesGenerator")
-
-        UBLOG(logDEBUG1, " GbVoxelMatrix3D addSurfaceTriangleSet mc.init")
-        mc.init_all();
-        UBLOG(logDEBUG1, " GbVoxelMatrix3D addSurfaceTriangleSet mc.run")
-        mc.run(0.5);
-        UBLOG(logDEBUG1, " GbVoxelMatrix3D addSurfaceTriangleSet mc.run done")
-
-        const int nofVertices  = mc.nverts();
-        const int nofTriangles = mc.ntrigs();
-
-        McVertex *mcvertices    = mc.vertices();
-        McTriangle *mctriangles = mc.triangles();
-
-        UBLOG(logDEBUG1, " GbVoxelMatrix3D node tuple")
-        for (int n = 0; n < nofVertices; n++)
-            nodes.push_back(makeUbTuple(
-                (float)(minX1 + deltaX1 * (mcvertices[n].x /*-1*/)), // Anm: kein -1, da man durch manipulation der
-                                                                     // indices die dreiecke um eins versetzt bekommt
-                (float)(minX2 + deltaX2 * (mcvertices[n].y /*-1*/)),
-                (float)(minX3 + deltaX3 * (mcvertices[n].z /*-1*/))));
-        UBLOG(logDEBUG1, " GbVoxelMatrix3D triangles tuple")
-        for (int t = 0; t < nofTriangles; t++)
-            triangles.push_back(makeUbTuple(mctriangles[t].v1, mctriangles[t].v2, mctriangles[t].v3));
-        UBLOG(logDEBUG1, " GbVoxelMatrix3D triangles tuple done")
-    }
 
-    // false - das scheint probleme bei der asphaltprobe zu machen 1500x600x100
-    // da lief es bis C - evtl. memory voll
-    if (false) // extension... um die raender koerrekt abzubilden muesste man eine dummy FLUID reihe um
-    {          // die matrix legen( lsg1: temp matrix mit 2 reihen pro richtung mehr -> zuviel speicher, 500^3 = 500MB
-      // lsg2: fuer jede flaeche eine dummy matrix -> wie folgt:
-        int nx1 = (int)voxelMatrix.getNX1();
-        int nx2 = (int)voxelMatrix.getNX2();
-        int nx3 = (int)voxelMatrix.getNX3();
-        UBLOG(logINFO, " A ")
-        Matrix3D tmpX1Min(2, nx2 + 2, nx3 + 2, FLUID);
-        Matrix3D tmpX1Max(2, nx2 + 2, nx3 + 2, FLUID);
-        for (int x3 = 0; x3 < nx3; x3++)
-            for (int x2 = 0; x2 < nx2; x2++) {
-                tmpX1Min(1, x2 + 1, x3 + 1) = voxelMatrix(0, x2, x3);
-                tmpX1Max(0, x2 + 1, x3 + 1) = voxelMatrix(nx1 - 1, x2, x3);
-            }
-        UBLOG(logINFO, " B")
-        Matrix3D tmpX2Min(nx1 + 2, 2, nx3 + 2, FLUID);
-        Matrix3D tmpX2Max(nx1 + 2, 2, nx3 + 2, FLUID);
-        for (int x3 = 0; x3 < nx3; x3++)
-            for (int x1 = 0; x1 < nx1; x1++) {
-                tmpX2Min(x1 + 1, 1, x3 + 1) = voxelMatrix(x1, 0, x3);
-                tmpX2Max(x1 + 1, 0, x3 + 1) = voxelMatrix(x1, nx2 - 1, x3);
-            }
-        UBLOG(logINFO, " C ")
-        Matrix3D tmpX3Min(nx1 + 2, nx3 + 2, 2, FLUID);
-        Matrix3D tmpX3Max(nx1 + 2, nx3 + 2, 2, FLUID);
-        for (int x2 = 0; x2 < nx2; x2++)
-            for (int x1 = 0; x1 < nx1; x1++) {
-                tmpX3Min(x1 + 1, x2 + 1, 1) = voxelMatrix(x1, x2, 0);
-                tmpX3Max(x1 + 1, x2 + 1, 0) = voxelMatrix(x1, x2, nx3 - 1);
-            }
-        UBLOG(logINFO, " D")
-        Matrix3D *matrices[] = { &tmpX1Min, &tmpX1Max, &tmpX2Min, &tmpX2Max, &tmpX3Min, &tmpX3Max };
-        int dx1[]            = { -1, nx1 - 1, -1, -1, -1, -1 };
-        int dx2[]            = { -1, -1, -1, nx2 - 1, -1, -1 };
-        int dx3[]            = { -1, -1, -1, -1, -1, nx3 - 1 };
-        UBLOG(logINFO, " E")
-        for (int i = 0; i < 6; i++) {
-            McMatrixWrapper wrapper(matrices[i]);
-            McMarchingCubesGenerator mc(wrapper);
-
-            mc.init_all();
-            mc.run(0.5);
-
-            McVertex *mcvertices    = mc.vertices();
-            McTriangle *mctriangles = mc.triangles();
-
-            int deltaNodeNr = (int)nodes.size();
-            UBLOG(logINFO, " GbVoxelMatrix3D node tuple")
-            for (int n = 0; n < mc.nverts(); n++)
-                nodes.push_back(
-                    makeUbTuple((float)(minX1 + deltaX1 * (mcvertices[n].x +
-                                                           dx1[i])), // Anm: kein -1, da man durch manipulation der
-                                                                     // indices die dreiecke um eins versetzt bekommt
-                                (float)(minX2 + deltaX2 * (mcvertices[n].y + dx2[i])),
-                                (float)(minX3 + deltaX3 * (mcvertices[n].z + dx3[i]))));
-            for (int t = 0; t < mc.ntrigs(); t++)
-                triangles.push_back(makeUbTuple(deltaNodeNr + mctriangles[t].v1, deltaNodeNr + mctriangles[t].v2,
-                                                deltaNodeNr + mctriangles[t].v3));
-        }
-    }
-#else
     cerr << "void GbVoxelMatrix3D.addSurfaceTriangleSet  - benoetigt MARCHING_CUBE paket aus 3rdParty" << endl;
-#endif // MC_CUBES
 
     UBLOG(logINFO, " GbVoxelMatrix3D addSurfaceTriangleSet end")
 }
diff --git a/src/basics/parallel/PbMpi.h b/src/basics/parallel/PbMpi.h
deleted file mode 100644
index 7f73da85b4ee333a3f266ea8fc082fc5d88f1b40..0000000000000000000000000000000000000000
--- a/src/basics/parallel/PbMpi.h
+++ /dev/null
@@ -1,503 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file PbMpi.h
-//! \ingroup parallel
-//! \author Soeren Freudiger, Sebastian Geller
-//=======================================================================================
-#ifndef PbMpi_H
-#define PbMpi_H
-
-#include <sstream>
-#include <vector>
-
-#ifndef VF_MPI
-#error VF_MPI has to be defined
-#endif
-
-// As we doing a lot of const-cast here we define PbMpi.h to system_header to mute clang-tidy
-#ifdef __clang__
-#pragma clang system_header
-#endif
-
-//#undef SEEK_SET
-//#undef SEEK_CUR
-//#undef SEEK_END
-#include <mpi.h>
-
-#include <basics/utilities/UbException.h>
-
-#ifdef USE_MPI_CXX_SYNTAX
-#define PbMpi_COMM_WORLD MPI::COMM_WORLD
-#define PbMpi_INT MPI::INT
-#define PbMpi_CHAR MPI::CHAR
-#define PbMpi_SHORT MPI::SHORT
-#define PbMpi_FLOAT MPI::FLOAT
-#define PbMpi_DOUBLE MPI::DOUBLE
-#define PbMpi_COMM_NULL MPI::COMM_NULL
-
-namespace PbMpi
-{
-typedef MPI::Intracomm Comm;
-typedef MPI::Group Group;
-typedef MPI::Request Request;
-typedef MPI::Status Status;
-
-inline void Init()
-{
-    MPI::Init();
-    MPI::COMM_WORLD.Set_errhandler(MPI::ERRORS_THROW_EXCEPTIONS);
-}
-inline void Init(int &argc, char **argv)
-{
-    MPI::Init(argc, argv);
-    MPI::COMM_WORLD.Set_errhandler(MPI::ERRORS_THROW_EXCEPTIONS);
-}
-inline void Finalize() { MPI::Finalize(); }
-
-inline int GetCommSize(const Comm &comm) { return comm.Get_size(); }
-inline int GetCommRank(const Comm &comm) { return comm.Get_rank(); }
-inline void Barrier(const Comm &comm) { comm.Barrier(); }
-
-inline double Wtime() { return MPI::Wtime(); }
-inline double Wtick() { return MPI::Wtick(); }
-
-inline void Wait(Request &request, Status *outStatus = NULL)
-{
-    if (outStatus)
-        request.Wait(*outStatus);
-    else
-        request.Wait();
-}
-
-inline Group GetCommGroup(Comm &comm) { return comm.Get_group(); }
-inline Group GetGroupIncl(Group &group, const int &n, int *ranks) { return group.Incl(n, ranks); }
-inline Comm CommCreateComm(Comm &comm, Group &group) { return comm.Create(group); }
-
-inline void Alltoall(Comm &comm, void *sendBuffer, const int &sn, const MPI_Datatype &sdatatype, void *recvBuffer,
-                     const int &rn, const MPI_Datatype &rdatatype)
-{
-    comm.Alltoall(sendBuffer, sn, sdatatype, recvBuffer, rn, rdatatype);
-}
-inline void Bcast(Comm &comm, void *data, const int &n, const MPI_Datatype &datatype, const int &srcRank)
-{
-    comm.Bcast(data, n, datatype, srcRank);
-}
-inline void Send(Comm &comm, const void *data, const int &length, const MPI_Datatype &dataType, const int &destRank,
-                 const int &tag)
-{
-    try {
-        comm.Send(data, length, dataType, destRank, tag);
-    } catch (MPI::Exception &e) {
-        std::stringstream ss;
-        ss << "MPI::Exception error_string=" << e.Get_error_string() << std::endl;
-        throw UbException(UB_EXARGS, "MPI:Exception catched\n" + ss.str());
-    } catch (...) {
-        throw UbException(UB_EXARGS, "unknown exception");
-    }
-}
-inline void Recv(Comm &comm, const void *data, const int &length, const MPI_Datatype &dataType, const int &srcRank,
-                 const int &tag)
-{
-    try {
-        comm.Recv(const_cast<void *>(data), length, dataType, srcRank, tag);
-    } catch (MPI::Exception &e) {
-        std::stringstream ss;
-        ss << "MPI::Exception error_string=" << e.Get_error_string() << std::endl;
-        throw UbException(UB_EXARGS, "MPI:Exception catched \n" + ss.str());
-    } catch (...) {
-        throw UbException(UB_EXARGS, "unknown exception");
-    }
-}
-
-inline void Irecv(Comm comm, const void *data, const int &length, const MPI_Datatype &dataType, const int &srcRank,
-                  const int &tag, Request &outRequest)
-{
-    outRequest = comm.Irecv(const_cast<void *>(data), length, dataType, srcRank, tag);
-}
-inline void Ssend(Comm &comm, const void *data, const int &length, const MPI_Datatype &dataType, const int &destRank,
-                  const int &tag)
-{
-    try {
-        comm.Ssend(data, length, dataType, destRank, tag);
-    } catch (MPI::Exception &e) {
-        std::stringstream ss;
-        ss << "MPI::Exception error_string=" << e.Get_error_string() << std::endl;
-        throw UbException(UB_EXARGS, "MPI:Exception catched\n" + ss.str());
-    } catch (...) {
-        throw UbException(UB_EXARGS, "unknown exception");
-    }
-}
-
-} // namespace PbMpi
-#else //////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-// C-Syntax
-//////////////////////////////////////////////////////////////////////////
-namespace PbMpi
-{
-using Comm    = MPI_Comm;
-using Group   = MPI_Group;
-using Request = MPI_Request;
-using Status  = MPI_Status;
-} // namespace PbMpi
-
-#define PbMpi_COMM_WORLD ((PbMpi::Comm)MPI_COMM_WORLD)
-#define PbMpi_INT MPI_INT
-#define PbMpi_CHAR MPI_CHAR
-#define PbMpi_SHORT MPI_SHORT
-#define PbMpi_FLOAT MPI_FLOAT
-#define PbMpi_DOUBLE MPI_DOUBLE
-#define PbMpi_COMM_NULL MPI_COMM_NULL
-
-namespace PbMpi
-{
-inline void Init()
-{
-    int argc    = 1;
-    char **argv = new char *[1];
-    argv[0]     = new char[1];
-    argv[0][0]  = 'n';
-    MPI_Init(&argc, &argv);
-}
-inline void Init(int &argc, char **argv) { MPI_Init(&argc, &argv); }
-inline void Finalize() { MPI_Finalize(); }
-inline int GetCommSize(Comm comm)
-{
-    int tmp;
-    MPI_Comm_size(comm, &tmp);
-    return tmp;
-}
-inline int GetCommRank(Comm comm)
-{
-    int tmp;
-    MPI_Comm_rank(comm, &tmp);
-    return tmp;
-}
-inline void Barrier(Comm comm) { MPI_Barrier(comm); }
-inline double Wtime() { return MPI_Wtime(); }
-inline double Wtick() { return MPI_Wtick(); }
-inline void Wait(Request &request, Status *outStatus = NULL) { MPI_Wait(&request, outStatus); }
-
-inline Group GetCommGroup(Comm comm)
-{
-    Group out;
-    MPI_Comm_group(comm, &out);
-    return out;
-}
-inline Group GetGroupIncl(Group group, const int &n, int *ranks)
-{
-    Group out;
-    MPI_Group_incl(group, n, ranks, &out);
-    return out;
-}
-inline Comm CommCreateComm(Comm comm, Group &group)
-{
-    Comm out;
-    MPI_Comm_create(comm, group, &out);
-    return out;
-}
-
-inline void Alltoall(Comm comm, void *sendBuffer, const int &sn, const MPI_Datatype &sdatatype, void *recvBuffer,
-                     const int &rn, const MPI_Datatype &rdatatype)
-{
-    MPI_Alltoall(sendBuffer, sn, sdatatype, recvBuffer, rn, rdatatype, comm);
-}
-inline void Bcast(Comm comm, void *data, const int &n, const MPI_Datatype &datatype, const int &srcRank)
-{
-    MPI_Bcast(data, n, datatype, srcRank, comm);
-}
-inline void Send(Comm comm, const void *data, const int &length, const MPI_Datatype &dataType, const int &destRank,
-                 const int &tag)
-{
-    MPI_Send(const_cast<void *>(data), length, dataType, destRank, tag, comm);
-}
-inline void Recv(Comm comm, const void *data, const int &length, const MPI_Datatype &dataType, const int &srcRank,
-                 const int &tag)
-{
-    MPI_Recv(const_cast<void *>(data), length, dataType, srcRank, tag, comm, MPI_STATUS_IGNORE);
-}
-inline void Ssend(Comm comm, const void *data, const int &length, const MPI_Datatype &dataType, const int &destRank,
-                  const int &tag)
-{
-    MPI_Ssend(const_cast<void *>(data), length, dataType, destRank, tag, comm);
-}
-inline void Irecv(Comm comm, const void *data, const int &length, const MPI_Datatype &dataType, const int &srcRank,
-                  const int &tag, Request &outRequest)
-{
-    MPI_Irecv(const_cast<void *>(data), length, dataType, srcRank, tag, comm, &outRequest);
-}
-
-} // namespace PbMpi
-#endif
-
-namespace PbMpi
-{
-/*======================================================================*/
-// send a single value "value" of MPI_Datatype
-template <class T>
-inline void sendSingleValue(const T &value, MPI_Datatype datatype, int dest, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// receives a single value "value" of MPI_Datatype
-template <class T>
-inline void receiveSingleValue(T &value, MPI_Datatype datatype, int source, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// receives and returns a single value of MPI_Datatype
-// expample: int value = PbMpi::receiveSingleValue<int>(MPI::INT,0,10,comm);
-template <class T>
-inline T receiveSingleValue(MPI_Datatype datatype, int source, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// sends bool value (doesn't work with template, why ever... stupid MPI)
-inline void sendBoolValue(const bool &value, int dest, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// receives bool value (doesn't work with template, why ever... stupid MPI)
-inline bool receiveBoolValue(int source, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// sends bool value (doesn't work with template, why ever... stupid MPI)
-inline void sendStringValue(const std::string &value, int dest, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// receives bool value (doesn't work with template, why ever... stupid MPI)
-inline std::string receiveStringValue(int source, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// send a vector of MPI_Datatype
-template <class T>
-inline void sendVector(const std::vector<T> &v, MPI_Datatype datatype, int dest, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// receive a std::vector of MPI_Datatype
-template <class T>
-inline void receiveVector(std::vector<T> &v, MPI_Datatype datatype, int source, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// receive a vector of MPI_Datatype and adds this vector to existing vector
-// ans returns number of received elements
-template <class T>
-inline int receiveVectorAndAddToVector(std::vector<T> &v, MPI_Datatype datatype, int source, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// send a std::vector of strings
-inline void sendStringVector(const std::vector<std::string> &v, int dest, int tag, PbMpi::Comm comm);
-
-/*======================================================================*/
-// send a vector of strings
-inline void receiveStringVector(std::vector<std::string> &v, int dest, int tag, PbMpi::Comm comm);
-} // namespace PbMpi
-
-/*======================================================================*/
-// send a single value of MPI_Datatype
-template <class T>
-void PbMpi::sendSingleValue(const T &value, MPI_Datatype datatype, int dest, int tag, PbMpi::Comm comm)
-{
-    PbMpi::Send(comm, &value, 1, datatype, dest, tag);
-    // comm.Send(&value, 1, datatype, dest, tag);
-}
-/*======================================================================*/
-template <class T>
-void PbMpi::receiveSingleValue(T &value, MPI_Datatype datatype, int source, int tag, PbMpi::Comm comm)
-{
-    PbMpi::Recv(comm, &value, 1, datatype, source, tag);
-    // comm.Recv(&value, 1, datatype, source, tag);
-}
-/*======================================================================*/
-template <class T>
-T PbMpi::receiveSingleValue(MPI_Datatype datatype, int source, int tag, PbMpi::Comm comm)
-{
-    T value;
-    PbMpi::Recv(comm, &value, 1, datatype, source, tag);
-    // comm.Recv(&value, 1, datatype, source, tag);
-
-    return value;
-}
-/*======================================================================*/
-// send a bool value (bool doesn't work with template, why ever)
-void PbMpi::sendBoolValue(const bool &value, int dest, int tag, PbMpi::Comm comm)
-{
-    short dummy;
-    if (value)
-        dummy = 1;
-    else
-        dummy = 0;
-
-    PbMpi::Send(comm, &dummy, 1, PbMpi_SHORT, dest, tag);
-    // comm.Send(&dummy, 1, MPI::SHORT, dest, tag);
-}
-/*======================================================================*/
-bool PbMpi::receiveBoolValue(int source, int tag, PbMpi::Comm comm)
-{
-    short dummy{ 0 };
-    PbMpi::Recv(comm, &dummy, 1, PbMpi_SHORT, source, tag);
-    // comm.Recv(&dummy, 1, MPI::SHORT, source, tag);
-
-    return (dummy == 1);
-}
-/*======================================================================*/
-// sends bool value (doesn't work with template, why ever... stupid MPI)
-void PbMpi::sendStringValue(const std::string &value, int dest, int tag, PbMpi::Comm comm)
-{
-    std::vector<char> vec;
-    for (char i : value)
-        vec.push_back(i);
-
-    PbMpi::sendVector(vec, PbMpi_CHAR, dest, tag, comm);
-}
-
-/*======================================================================*/
-// receives bool value (doesn't work with template, why ever... stupid MPI)
-std::string PbMpi::receiveStringValue(int source, int tag, PbMpi::Comm comm)
-{
-    std::vector<char> vec;
-    PbMpi::receiveVector(vec, PbMpi_CHAR, source, tag, comm);
-
-    std::string str;
-    for (char i : vec)
-        str += i;
-
-    return str;
-}
-/*======================================================================*/
-// send a vector of MPI_Datatype
-template <class T>
-void PbMpi::sendVector(const std::vector<T> &v, MPI_Datatype datatype, int dest, int tag, PbMpi::Comm comm)
-{
-    // send size
-    int size = (int)v.size();
-
-    PbMpi::Send(comm, &size, 1, PbMpi_INT, dest, tag);
-    // comm.Send(&size, 1, MPI::INT, dest, tag);
-
-    if (size > 0) {
-        PbMpi::Send(comm, &v[0], size, datatype, dest, tag);
-        // comm.Send(&v[0], size, datatype, dest, tag);
-    }
-}
-/*======================================================================*/
-// receive a vector of MPI_Datatype
-template <class T>
-void PbMpi::receiveVector(std::vector<T> &v, MPI_Datatype datatype, int source, int tag, PbMpi::Comm comm)
-{
-    int size{ 0 };
-
-    PbMpi::Recv(comm, &size, 1, PbMpi_INT, source, tag);
-    // comm.Recv(&size, 1, MPI::INT, source, tag);
-
-    v.resize(size);
-
-    if (size > 0) {
-        PbMpi::Recv(comm, &v[0], size, datatype, source, tag);
-        // comm.Recv(&v[0], size, datatype, source, tag);
-    }
-}
-/*======================================================================*/
-// receive a vector of MPI_Datatype and adds this vector to existing vector
-// return value is size of received elements
-template <class T>
-int PbMpi::receiveVectorAndAddToVector(std::vector<T> &v, MPI_Datatype datatype, int source, int tag, PbMpi::Comm comm)
-{
-    int incommingSize;
-
-    PbMpi::Recv(comm, &incommingSize, 1, PbMpi_INT, source, tag);
-    // comm.Recv(&incommingSize, 1, MPI::INT, source, tag);
-
-    int oldSize = (int)v.size();
-    v.resize(oldSize + incommingSize);
-
-    if (incommingSize > 0) {
-        PbMpi::Recv(comm, &v[oldSize], incommingSize, datatype, source, tag);
-        // comm.Recv(&v[oldSize], incommingSize, datatype, source, tag);
-    }
-
-    return incommingSize;
-}
-/*======================================================================*/
-// send a vector of strings
-void PbMpi::sendStringVector(const std::vector<std::string> &v, int dest, int tag, PbMpi::Comm comm)
-{
-    // send size
-    int stringVectorSize = (int)v.size();
-
-    PbMpi::Send(comm, &stringVectorSize, 1, PbMpi_INT, dest, tag);
-    // comm.Send(&stringVectorSize, 1, MPI::INT, dest, tag);
-
-    if (stringVectorSize > 0) {
-        std::vector<int> singleStringSizes(stringVectorSize + 1);
-        int nofChars = 0;
-        for (int i = 0; i < stringVectorSize; i++)
-            nofChars += singleStringSizes[i] = (int)v[i].length();
-        singleStringSizes[stringVectorSize] = nofChars;
-
-        PbMpi::Send(comm, &singleStringSizes[0], stringVectorSize + 1, PbMpi_INT, dest, tag);
-
-        std::vector<char> charVector(nofChars);
-        int pos = 0;
-        for (int i = 0; i < stringVectorSize; i++)
-            for (int j = 0; j < singleStringSizes[i]; j++)
-                charVector[pos++] = v[i][j];
-
-        PbMpi::Send(comm, &charVector[0], nofChars, PbMpi_CHAR, dest, tag);
-        // comm.Send(&charVector[0], nofChars, MPI::CHAR, dest, tag);
-    }
-}
-/*======================================================================*/
-// send a vector of strings
-void PbMpi::receiveStringVector(std::vector<std::string> &v, int source, int tag, PbMpi::Comm comm)
-{
-    // send size
-    int stringVectorSize{ 0 };
-    PbMpi::Recv(comm, &stringVectorSize, 1, PbMpi_INT, source, tag);
-    // comm.Recv(&stringVectorSize, 1, MPI::INT, source, tag);
-
-    v.clear();
-    v.resize(stringVectorSize);
-
-    if (stringVectorSize > 0) {
-        std::vector<int> singleStringSizes(stringVectorSize + 1);
-
-        PbMpi::Recv(comm, &singleStringSizes[0], stringVectorSize + 1, PbMpi_INT, source, tag);
-        // comm.Recv(&singleStringSizes[0], stringVectorSize+1, MPI::INT, source, tag);
-
-        int nofChars = singleStringSizes[stringVectorSize];
-        std::vector<char> charVector(nofChars);
-
-        PbMpi::Recv(comm, &charVector[0], nofChars, PbMpi_CHAR, source, tag);
-        // comm.Recv(&charVector[0], nofChars, MPI::CHAR, source, tag);
-
-        int pos = 0;
-        for (int i = 0; i < stringVectorSize; i++)
-            for (int j = 0; j < singleStringSizes[i]; j++)
-                v[i].push_back(charVector[pos++]);
-    }
-}
-
-#endif // PbMpi_H
diff --git a/src/basics/utilities/UbNupsTimer.h b/src/basics/utilities/UbNupsTimer.h
deleted file mode 100644
index 1545b5b694a57d112b485cf766ce26e22f30d939..0000000000000000000000000000000000000000
--- a/src/basics/utilities/UbNupsTimer.h
+++ /dev/null
@@ -1,125 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file UbNupsTimer.h
-//! \ingroup utilities
-//! \author Soeren Freudiger, Sebastian Geller
-//=======================================================================================
-#ifndef UBNUPSTIMER_H
-#define UBNUPSTIMER_H
-
-#include <basics/utilities/UbTiming.h>
-#include <sstream>
-#include <vector>
-
-/*=========================================================================*/
-/*  UbNupsTimer                                                             */
-/*                                                                         */
-/**
-This Class provides the base for ...
-<BR><BR>
-@author <A HREF="mailto:muffmolch@gmx.de">S. Freudiger</A>
-@version 1.0 - 01.11.04
-*/
-class UbNupsTimer : public UbTiming
-{
-public:
-    UbNupsTimer() : UbTiming()
-    {
-        mTempNodes = 0.0;
-        mNofNodes.resize(0);
-        mDurations.resize(0);
-    }
-    /*==========================================================*/
-    UbNupsTimer(std::string name) : UbTiming(name)
-    {
-        mNofNodes.resize(0);
-        mDurations.resize(0);
-        mTempNodes = 0.0;
-    }
-    /*==========================================================*/
-    void initTiming() override
-    {
-        UbTiming::initTiming();
-        mNofNodes.resize(0);
-        mDurations.resize(0);
-        mTempNodes = 0.0;
-    }
-    /*==========================================================*/
-    void startNUPSTiming(double nofNodes)
-    {
-        mTempNodes = nofNodes;
-        UbTiming::startTiming();
-    }
-    /*==========================================================*/
-    void endTiming() override
-    {
-        UbTiming::endTiming();
-        // save #node and time informations
-        mNofNodes.push_back(mTempNodes);
-        mDurations.push_back(UbTiming::getDuration());
-        // reset internal timecounter
-        UbTiming::initTiming();
-    }
-    /*==========================================================*/
-    double getAverageNups()
-    {
-        double averageNups = 0.0;
-        for (int i = 0; i < (int)mNofNodes.size(); i++)
-            averageNups += mNofNodes.at(i) / mDurations.at(i);
-
-        return averageNups / (double)mNofNodes.size();
-    }
-    /*==========================================================*/
-    double getSumOfDuration()
-    {
-        double duration = 0.0;
-        for (int i = 0; i < (int)mDurations.size(); i++)
-            duration += mDurations.at(i);
-        return duration;
-    }
-    /*==========================================================*/
-    std::string getNupsString()
-    {
-        std::stringstream ss;
-        ss << "saved nups informations" << std::endl;
-        for (int i = 0; i < (int)mNofNodes.size(); i++)
-            ss << mNofNodes.at(i) << "nodes/" << mDurations.at(i) << "sec=" << mNofNodes.at(i) / mDurations.at(i)
-               << "nups\n";
-        return ss.str();
-    }
-
-protected:
-private:
-    std::vector<double> mNofNodes;
-    std::vector<double> mDurations;
-
-    double mTempNodes;
-};
-
-#endif
diff --git a/src/basics/utilities/UbObservable.h b/src/basics/utilities/UbObservable.h
index 0cbbe5655a47a9f238d038358d1b9855e4e52f80..36e21f3216f2395e1a7d2738ead7364ad6ce5482 100644
--- a/src/basics/utilities/UbObservable.h
+++ b/src/basics/utilities/UbObservable.h
@@ -57,9 +57,9 @@ class UbObserver;
 //!   a copy of an UbservableObject will NOT copy the observerList
 //!  <UL>
 //!    <LI><B>Extending:</B> This UbObservable is the observable object itself. Extending should be used
-//!	where object types can be extended from UbObservable.
+//!    where object types can be extended from UbObservable.
 //!    <LI><B>Associating:</B> Initialization is done via the constructor <tt>UbObservable(ObservableObject)</tt>.
-//!	Associating may be used, where object types to be observed could not be extended from UbObservable.
+//!    Associating may be used, where object types to be observed could not be extended from UbObservable.
 //!  </UL>
 //!
 //! see UbObserver
diff --git a/src/basics/utilities/UbScheduler.h b/src/basics/utilities/UbScheduler.h
index 08bb38ba8ae8755d8ef1e38cd92279e26b994610..6eca946a13f545826f65ff46766b5805f37ab7c4 100644
--- a/src/basics/utilities/UbScheduler.h
+++ b/src/basics/utilities/UbScheduler.h
@@ -328,20 +328,20 @@ using UbSchedule = UbScheduler::UbSchedule;
 
 // int main(int argc, char** argv)
 //{
-//	UbScheduler writeSchedule;
-////	writeSchedule.addSchedule(0,2000,100);
-////	writeSchedule.addSchedule(3005,4500,300);
-////	writeSchedule.addSchedule(0,10,1);
-////	writeSchedule.addSchedule(0,100001,100);
-//	writeSchedule.addSchedule(0,2,1);
-//	writeSchedule.addSchedule(0,100001,200);
+//    UbScheduler writeSchedule;
+////    writeSchedule.addSchedule(0,2000,100);
+////    writeSchedule.addSchedule(3005,4500,300);
+////    writeSchedule.addSchedule(0,10,1);
+////    writeSchedule.addSchedule(0,100001,100);
+//    writeSchedule.addSchedule(0,2,1);
+//    writeSchedule.addSchedule(0,100001,200);
 //
-//	for(int t = 0; t < 1001; t++)
-//	{
-//		if(writeSchedule.isDue(t))
-//		{
-//			cout<<"due@ "<<t<<endl;
-//		}
-//	}
-//	return 0;
+//    for(int t = 0; t < 1001; t++)
+//    {
+//        if(writeSchedule.isDue(t))
+//        {
+//            cout<<"due@ "<<t<<endl;
+//        }
+//    }
+//    return 0;
 //}
diff --git a/src/basics/utilities/UbStringInputASCII.cpp b/src/basics/utilities/UbStringInputASCII.cpp
index 6a04f86aeb8d5b7be9e96ca39d1808b987c1f711..a86465c80e1d2f95d69b68c09769ca262e05474f 100644
--- a/src/basics/utilities/UbStringInputASCII.cpp
+++ b/src/basics/utilities/UbStringInputASCII.cpp
@@ -6,10 +6,10 @@
 //
 // UbStringInputASCII::UbStringInputASCII(string inputString) : UbFileInputASCII("")
 //{
-//	instream.str(inputString);
+//    instream.str(inputString);
 //
 //
-////	this->filename         = filename;
+////    this->filename         = filename;
 ////   this->commentindicator = 'C';
 ////
 ////   infile.open(filename.c_str());
@@ -18,9 +18,9 @@
 ///*==========================================================*/
 // int UbStringInputASCII::readInteger()
 //{
-//	int dummy;
-//	instream>>dummy;
-//	return dummy;
+//    int dummy;
+//    instream>>dummy;
+//    return dummy;
 //}
 ///*==========================================================*/
 // std::size_t UbStringInputASCII::readSize_t()
@@ -32,20 +32,20 @@
 ///*==========================================================*/
 // string UbStringInputASCII::getFileName()
 //{
-//	return this->filename;
+//    return this->filename;
 //}
 //
 ///*==========================================================*/
 // void UbStringInputASCII::skipLine()
 //{
-//	string dummy;
-//	getline(instream, dummy);
+//    string dummy;
+//    getline(instream, dummy);
 //}
 ///*==========================================================*/
 // void UbStringInputASCII::readLine()
 //{
-//	string dummy;
-//	getline(instream, dummy);
+//    string dummy;
+//    getline(instream, dummy);
 //}
 ///*==========================================================*/
 // string UbStringInputASCII::readStringLine()
@@ -57,16 +57,16 @@
 ///*==========================================================*/
 // string UbStringInputASCII::readLineTill(char stop)
 //{
-//	string dummy;
-//	getline(instream, dummy, stop);
-//	return dummy;
+//    string dummy;
+//    getline(instream, dummy, stop);
+//    return dummy;
 //}
 ///*==========================================================*/
 // string UbStringInputASCII::parseString()
 //{
-//	string dummy;
-//	getline(instream, dummy, ' ');
-//	return dummy;
+//    string dummy;
+//    getline(instream, dummy, ' ');
+//    return dummy;
 //}
 ///*==========================================================*/
 // double UbStringInputASCII::readDouble()
@@ -92,9 +92,9 @@
 ///*==========================================================*/
 // string UbStringInputASCII::readString()
 //{
-//	string dummy;
-//	instream>>dummy;
-//	return dummy;
+//    string dummy;
+//    instream>>dummy;
+//    return dummy;
 //}
 ///*==========================================================*/
 // bool UbStringInputASCII::containsString(string var)
@@ -105,7 +105,7 @@
 //   {
 //      instream.getline(line,512);
 //      if(instream.eof()) return false;
-//   }while (strstr(line,var.c_str()) != line);		// Ende Schleife, wenn varname ganz in zeile vorkommt
+//   }while (strstr(line,var.c_str()) != line);        // Ende Schleife, wenn varname ganz in zeile vorkommt
 //
 //   return true;
 //}
@@ -118,7 +118,7 @@
 //   {
 //      instream.getline(line,512);
 //      if(instream.eof()) UB_THROW( UbException(UB_EXARGS,var+" wasn't found in "+this->filename) );
-//   }while (strstr(line,var.c_str()) != line);		// Ende Schleife, wenn varname ganz in zeile vorkommt
+//   }while (strstr(line,var.c_str()) != line);        // Ende Schleife, wenn varname ganz in zeile vorkommt
 //}
 ///*==========================================================*/
 // int UbStringInputASCII::readIntegerAfterString(string var)
@@ -134,12 +134,12 @@
 //   {
 //      instream.getline(line,512);
 //      if(instream.eof()) UB_THROW( UbException(UB_EXARGS,var+" wasn't found in "+this->filename) );
-//   }while (strstr(line,var.c_str()) != line);		// Ende Schleife, wenn varname ganz in zeile vorkommt
+//   }while (strstr(line,var.c_str()) != line);        // Ende Schleife, wenn varname ganz in zeile vorkommt
 //
-//   strcpy (line, (line+strlen(var.c_str())));	    // zeile um "varname" kuerzen
-//   while ((line[0] == ' ') || (line[0] == '\t')) strcpy (line, (line+1));	// Whitespaces entfernen
+//   strcpy (line, (line+strlen(var.c_str())));        // zeile um "varname" kuerzen
+//   while ((line[0] == ' ') || (line[0] == '\t')) strcpy (line, (line+1));    // Whitespaces entfernen
 //
-//   return(atoi(line));						// Umwandlung in int
+//   return(atoi(line));                        // Umwandlung in int
 //}
 ///*==========================================================*/
 //// last change [10.3.2004] at [9:46]
@@ -155,14 +155,14 @@
 //   {
 //      instream.getline(line,512);
 //      if(instream.eof()) UB_THROW( UbException(UB_EXARGS,var+" wasn't found in "+this->filename) );
-//   }while (/*!strncmp(varname,line,sizeof(varname))==0*/strstr(line,var.c_str()) != line);		// Ende Schleife, wenn
+//   }while (/*!strncmp(varname,line,sizeof(varname))==0*/strstr(line,var.c_str()) != line);        // Ende Schleife, wenn
 //   varname ganz in zeile vorkommt
 //
 //
-//   strcpy (line, (line+strlen(var.c_str())));	    // zeile um "varname" kuerzen
-//   while ((line[0] == ' ') || (line[0] == '\t')) strcpy (line, (line+1));	// Whitespaces entfernen
+//   strcpy (line, (line+strlen(var.c_str())));        // zeile um "varname" kuerzen
+//   while ((line[0] == ' ') || (line[0] == '\t')) strcpy (line, (line+1));    // Whitespaces entfernen
 //
-//   return (atof(line));			// Umwandlung in double
+//   return (atof(line));            // Umwandlung in double
 //}
 ///*==========================================================*/
 ////  [9.9.2002]
@@ -178,16 +178,16 @@
 //   do{
 //      instream.getline(line,512);
 //      if(instream.eof()) UB_THROW( UbException(UB_EXARGS,var+" wasn't found in "+this->filename) );
-//   }while (strstr(line,var.c_str()) != line);		// Ende Schleife, wenn varname ganz in zeile vorkommt
+//   }while (strstr(line,var.c_str()) != line);        // Ende Schleife, wenn varname ganz in zeile vorkommt
 //
-//   strcpy (line, (line+strlen(var.c_str())));										// zeile um "varname" kuerzen
-//   while ((line[0] == ' ') || (line[0] == '\t')) strcpy (line, (line+1));	// Whitespaces entfernen
+//   strcpy (line, (line+strlen(var.c_str())));                                        // zeile um "varname" kuerzen
+//   while ((line[0] == ' ') || (line[0] == '\t')) strcpy (line, (line+1));    // Whitespaces entfernen
 //
 //   char *p;
 //   p=strtok(line," "); //schneidet alles "ab und inklusive space " nach namen ab
 //   p=strtok(line,"\t");//schneidet alles "ab und inklusive tab   " nach namen ab
 //
-//   return (string)p;			// Umwandlung in string
+//   return (string)p;            // Umwandlung in string
 //}
 ///*==========================================================*/
 //// last change [10.3.2004] at [9:46]
diff --git a/src/basics/utilities/UbStringInputASCII.h b/src/basics/utilities/UbStringInputASCII.h
index d83adde4dee62f703a6a6070b7a2c0eb6c66360f..177a68b7f13665cddd5b15495f937566be511d38 100644
--- a/src/basics/utilities/UbStringInputASCII.h
+++ b/src/basics/utilities/UbStringInputASCII.h
@@ -19,34 +19,34 @@
 // class UbStringInputASCII : public UbFileInputASCII
 //{
 // public:
-//	UbStringInputASCII(std::string inputString);
+//    UbStringInputASCII(std::string inputString);
 //
-//	std::string getFileName();
-//	void	      skipLine();					   // Springt zur naechsten Zeile
+//    std::string getFileName();
+//    void          skipLine();                       // Springt zur naechsten Zeile
 //
 //   void        readLine();
 //   std::string readStringLine();
 //   std::size_t readSize_t();
-//   int		   readInteger();				   // Liest einen Int-Wert ein
-//   double	   readDouble();				   // Liest einen double-Wert ein
-//	float 	   readFloat();				   // Liest einen float-Wert ein
-//	bool  	   readBool();				      // Liest einen bool-Wert ein
+//   int           readInteger();                   // Liest einen Int-Wert ein
+//   double       readDouble();                   // Liest einen double-Wert ein
+//    float        readFloat();                   // Liest einen float-Wert ein
+//    bool         readBool();                      // Liest einen bool-Wert ein
 //   char        readChar();                // Liest einen char-Wert ein
-//   std::string	readString();				   // Liest ein Wort ein
-//	std::string	readLineTill(char stop);	// Liest gesamte Zeile ein bis zu einem bestimmten Zeichen
-//	std::string	parseString();
+//   std::string    readString();                   // Liest ein Wort ein
+//    std::string    readLineTill(char stop);    // Liest gesamte Zeile ein bis zu einem bestimmten Zeichen
+//    std::string    parseString();
 //
 //   bool        containsString(std::string var);
 //   void        setPosAfterLineWithString(std::string var);
-//   int		   readIntegerAfterString(std::string var);
-//   double	   readDoubleAfterString(std::string var);
+//   int           readIntegerAfterString(std::string var);
+//   double       readDoubleAfterString(std::string var);
 //   bool        readBoolAfterString(std::string var);
 //   std::string readStringAfterString(std::string var);
 //
 //   FILETYPE getFileType() { return ASCII; }
 //
 // private:
-//	std::istringstream instream;
+//    std::istringstream instream;
 //};
 //
 //
diff --git a/src/basics/utilities/UbTiming.h b/src/basics/utilities/UbTiming.h
deleted file mode 100644
index a99c4ec39acfa64c99bb2a61a8ceec4fc8ba604a..0000000000000000000000000000000000000000
--- a/src/basics/utilities/UbTiming.h
+++ /dev/null
@@ -1,385 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file UbTiming.h
-//! \ingroup utilities
-//! \author Soeren Freudiger, Sebastian Geller
-//=======================================================================================
-#ifndef UBTIMING_H
-#define UBTIMING_H
-
-#include <ctime>
-#include <iostream>
-#include <limits>
-#include <sstream>
-#include <string>
-#include <vector>
-
-#ifdef VF_MPI
-#include <basics/parallel/PbMpi.h>
-#include <mpi.h>
-#endif // VF_MPI
-
-class UbTiming
-{
-public:
-    UbTiming()
-    {
-        this->duration  = 0.0;
-        this->deltaT    = 0.0;
-        this->startTime = 0;
-        this->name      = "noname";
-    }
-    /*==========================================================*/
-    UbTiming(const std::string &name)
-    {
-        this->duration  = 0.0;
-        this->deltaT    = 0.0;
-        this->startTime = 0;
-        this->name      = name;
-    }
-    /*==========================================================*/
-    virtual ~UbTiming() = default;
-    /*==========================================================*/
-    virtual void initTiming() { this->duration = 0.0; }
-    /*==========================================================*/
-    virtual void startTiming()
-    {
-#if defined(VF_MPI) && !defined(CAB_RUBY)
-        this->startTime = PbMpi::Wtime();
-#else
-        this->startTime = (double)clock();
-#endif // VF_MPI
-    }
-    /*==========================================================*/
-    virtual void initAndStartTiming()
-    {
-        this->initTiming();
-        this->startTiming();
-    }
-    /*==========================================================*/
-    virtual void endTiming() { this->stopTiming(); }
-    /*==========================================================*/
-    virtual void stopTiming()
-    {
-#if defined(VF_MPI) && !defined(CAB_RUBY)
-        this->deltaT = PbMpi::Wtime() - this->startTime;
-#else
-        this->deltaT    = ((double)clock() - this->startTime) / (double)CLOCKS_PER_SEC;
-#endif // VF_MPI
-
-        this->duration += this->deltaT;
-    }
-    /*==========================================================*/
-    virtual double getDuration() const { return this->duration; }
-    /*==========================================================*/
-    virtual void setName(const std::string &name) { this->name = name; }
-    /*==========================================================*/
-    virtual std::string getName() const { return this->name; }
-    /*==========================================================*/
-    void start()
-    {
-        this->duration = 0.0;
-
-#if defined(VF_MPI) && !defined(CAB_RUBY)
-        this->startTime = PbMpi::Wtime();
-#else
-        this->startTime = (double)clock();
-#endif // VF_MPI
-    }
-    /*==========================================================*/
-    void pause()
-    {
-#if defined(VF_MPI) && !defined(CAB_RUBY)
-        this->duration += PbMpi::Wtime() - this->startTime;
-#else
-        this->duration += ((double)clock() - this->startTime) / (double)CLOCKS_PER_SEC;
-#endif // VF_MPI
-    }
-    /*==========================================================*/
-    void unpause()
-    {
-#if defined(VF_MPI) && !defined(CAB_RUBY)
-        this->startTime = PbMpi::Wtime();
-#else
-        this->startTime = (double)clock();
-#endif // VF_MPI
-    }
-    /*==========================================================*/
-    void stop()
-    {
-#if defined(VF_MPI) && !defined(CAB_RUBY)
-        this->duration += PbMpi::Wtime() - this->startTime;
-#else
-        this->duration += ((double)clock() - this->startTime) / (double)CLOCKS_PER_SEC;
-#endif // VF_MPI
-    }
-    /*==========================================================*/
-    double getTicks() const
-    {
-#if defined(VF_MPI) && !defined(CAB_RUBY)
-        return PbMpi::Wtick();
-#else
-        return double(1.0) / double(CLOCKS_PER_SEC);
-#endif // VF_MPI
-    }
-
-protected:
-    std::string name;
-
-    double startTime;
-    double duration;
-    double deltaT;
-};
-
-#include <basics/utilities/UbSystem.h> //for definitons of system/OS type
-
-#ifdef UBSYSTEM_APPLE // Apple hack
-#include <cstdio>
-#include <ctime>
-#include <mach/mach_time.h>
-inline void mach_absolute_difference(const uint64_t &end, const uint64_t &start, struct timespec *tp)
-{
-    uint64_t difference                   = end - start;
-    static mach_timebase_info_data_t info = { 0, 0 };
-
-    if (info.denom == 0)
-        mach_timebase_info(&info);
-
-    uint64_t elapsednano = difference * (info.numer / info.denom);
-
-    tp->tv_sec  = elapsednano * 1e-9;
-    tp->tv_nsec = elapsednano - (tp->tv_sec * 1e9);
-}
-#elif defined(UBSYSTEM_LINUX) || defined(UBSYSTEM_AIX)
-#include <ctime>
-#include <pthread.h>
-#include <unistd.h> // for sysconf
-#endif
-
-/*=========================================================================*/
-//! \brief Time Measuring
-//! \details
-//! example:
-//! \code
-//! t=0  start
-//! t=1
-//! t=2  stop  -> return 2; getLapTime=2; getTotalTime 2; getLapTimes:  2
-//! t=3
-//! t=4
-//! t=5  stop  -> return 3; getLapTime=3; getTotalTime 5; getLapTimes:  2,3
-//! t=6  stop  -> return 1; getLapTime=1; getTotalTime 6; getLapTimes:  2,3,1
-//! t=7
-//! t=8  start ->no consideration of time 7 and 8
-//! t=9
-//! t=10 stop  -> return 2; getLapTime=2; getTotalTime 8; getLapTimes:  2,3,1,2
-//! t=11 resetAndStart -> Timer is reset and restarted
-//! t=12
-//! t=13
-//! t=14 stop  -> return 3; getLapTime=3; getTotalTime 3; getLapTimes:  3
-//! \endcode
-
-class UbTimer
-{
-public:
-    UbTimer(const bool &storeLapTimes = false) : name("unamed"), storeLapTimes(storeLapTimes) {}
-    /*==========================================================*/
-    UbTimer(const std::string &name, const bool &storeLapTimes = false) : name(name), storeLapTimes(storeLapTimes) {}
-    /*==========================================================*/
-    virtual ~UbTimer() = default;
-    /*==========================================================*/
-    double getLapTime() const { return this->lapTime; }
-    std::vector<double> getLapTimes() const { return this->lapTimes; }
-    void setName(const std::string &name) { this->name = name; }
-    std::string getName() const { return this->name; }
-    bool isRunning() const { return isMeasuring; }
-    bool isStoringLapTimes() const { return storeLapTimes; }
-    /*==========================================================*/
-    void setStoreLapTimes(const bool &storeLapTimes) { this->storeLapTimes = storeLapTimes; }
-    /*==========================================================*/
-    void start()
-    {
-        this->isMeasuring = true;
-
-#if defined(VF_MPI) && !defined(CAB_RUBY)
-        this->startTime = PbMpi::Wtime();
-#elif defined(UBSYSTEM_APPLE)
-        this->startTime = mach_absolute_time();
-#elif defined(UBSYSTEM_LINUX) || defined(UBSYSTEM_AIX)
-        timespec tp;
-        clock_gettime(CLOCK_REALTIME, &tp);
-        this->startTime = (double)(tp.tv_sec) * 1.0e9 + (double)(tp.tv_nsec);
-#else
-        this->startTime = (double)clock();
-#endif // VF_MPI
-    }
-    /*==========================================================*/
-    void resetAndStart()
-    {
-        this->reset();
-        this->start();
-    }
-    /*==========================================================*/
-    // stop: - stops the calculation and returns the time elapsed since last start/stop
-    //      - timing continues
-    double stop()
-    {
-        // if start() was never activated before:
-        if (!isMeasuring)
-            return 0.0;
-
-#if defined(VF_MPI) && !defined(CAB_RUBY)
-        double actTime = PbMpi::Wtime();
-        this->lapTime  = actTime - this->startTime;
-#elif defined(UBSYSTEM_APPLE)
-        double actTime  = mach_absolute_time();
-        timespec tp;
-        mach_absolute_difference(actTime, this->startTime, &tp);
-        this->lapTime = tp.tv_sec + tp.tv_nsec * 1e-9;
-#elif defined(UBSYSTEM_LINUX) || defined(UBSYSTEM_AIX)
-        timespec tp;
-        clock_gettime(CLOCK_REALTIME, &tp);
-        double actTime = (double)(tp.tv_sec) * 1.0e9 + (double)(tp.tv_nsec);
-        this->lapTime  = (actTime - this->startTime) * 1.0e-9;
-#else
-        double actTime  = (double)clock();
-        this->lapTime   = (actTime - this->startTime) / (double)CLOCKS_PER_SEC;
-#endif // VF_MPI
-
-        this->startTime = actTime;
-        this->totalTime += this->lapTime;
-        if (storeLapTimes)
-            lapTimes.push_back(this->lapTime);
-
-        return lapTime;
-    }
-    /*==========================================================*/
-    void reset()
-    {
-        this->isMeasuring = false;
-
-        this->startTime = 0.0;
-        this->totalTime = 0.0;
-        this->lapTime   = 0.0;
-
-        lapTimes.resize(0);
-    }
-    /*==========================================================*/
-    double getCurrentLapTime() const
-    {
-        // if start() was never activated before:
-        if (!isMeasuring)
-            return 0.0;
-
-#if defined(VF_MPI) && !defined(CAB_RUBY)
-        return PbMpi::Wtime() - this->startTime;
-#elif defined(UBSYSTEM_APPLE)
-        timespec tp;
-        mach_absolute_difference(mach_absolute_time(), this->startTime, &tp);
-        return tp.tv_sec + tp.tv_nsec * 1e-9;
-#elif defined(UBSYSTEM_LINUX) || defined(UBSYSTEM_AIX)
-        timespec tp;
-        clock_gettime(CLOCK_REALTIME, &tp);
-        return ((double)(tp.tv_sec) * 1.0e9 + (double)(tp.tv_nsec) - this->startTime) * 1.0e-9;
-#else
-        return ((double)clock() - this->startTime) / (double)CLOCKS_PER_SEC;
-#endif // VF_MPI
-    }
-    /*==========================================================*/
-    double getTotalTime() const { return this->totalTime; }
-    /*==========================================================*/
-    std::string toString()
-    {
-        std::stringstream text;
-        text << *this;
-        return text.str();
-    }
-
-    // ueberladene Operatoren
-    /*==========================================================*/
-    friend inline std::ostream &operator<<(std::ostream &os, const UbTimer &timer)
-    {
-        os << "UbTimer[totalTime=" << timer.totalTime << "sec, lapTimes(";
-        for (std::size_t i = 0; i < timer.lapTimes.size(); i++)
-            os << timer.lapTimes[i] << ",";
-        os << ")]";
-        return os;
-    }
-
-protected:
-    std::string name;
-    bool isMeasuring{ false };
-    bool storeLapTimes;
-
-    double startTime{ 0.0 };
-    double totalTime{ 0.0 };
-    double lapTime{ 0.0 };
-
-    std::vector<double> lapTimes;
-};
-
-/*=========================================================================*/
-//! \brief Time Measuring
-//!
-//! \details UbProressTimer measures the time from its instantiation to destruction and spend the elapsed time on "os"
-//! in [s] example: \code
-//!  {
-//!     UbProgressTimer timer;
-//!     UbSystem::sleepS(10);
-//!  } //--> 10s
-//! \endcode
-
-class UbProgressTimer : public UbTimer
-{
-public:
-    UbProgressTimer(const UbProgressTimer &rhs) = delete;
-
-    explicit UbProgressTimer(std::ostream &os = std::cout) : UbTimer(), os(os) { this->start(); }
-    /*==========================================================*/
-    ~UbProgressTimer() override
-    {
-        //  A) Throwing an exception from a destructor is a Bad Thing.
-        //  B) The progress_timer destructor does output which may throw.
-        //  C) A progress_timer is usually not critical to the application.
-        //  Therefore, wrap the I/O in a try block, catch and ignore all exceptions.
-        try {
-            // use istream instead of ios_base to workaround GNU problem (Greg Chicares)
-            std::istream::fmtflags old_flags = os.setf(std::istream::fixed, std::istream::floatfield);
-            std::streamsize old_prec         = os.precision(2);
-            os << stop() << " s" << std::endl;
-            os.flags(old_flags);
-            os.precision(old_prec);
-        } catch (...) {
-        } // eat any exceptions
-    }
-
-private:
-    std::ostream &os;
-};
-
-#endif // UBTIMING_H
diff --git a/src/basics/writer/WbWriterVtkXmlASCII.cpp b/src/basics/writer/WbWriterVtkXmlASCII.cpp
index e217b5e24c328e32fb2e3110986f3bb895b98485..ac20c5aa0bcc13a21b00922a11bf79c417dacb4c 100644
--- a/src/basics/writer/WbWriterVtkXmlASCII.cpp
+++ b/src/basics/writer/WbWriterVtkXmlASCII.cpp
@@ -180,7 +180,7 @@ std::string WbWriterVtkXmlASCII::writeQuads(const string &filename, vector<UbTup
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofCells << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofCells << "\">   \n";
 
     // POINTS SECTION
     out << "      <Points>\n";
@@ -252,7 +252,7 @@ std::string WbWriterVtkXmlASCII::writeQuadsWithNodeData(const string &filename,
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofCells << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofCells << "\">   \n";
 
     // POINTS SECTION
     out << "         <Points>\n";
@@ -336,7 +336,7 @@ std::string WbWriterVtkXmlASCII::writeQuadsWithCellData(const string &filename,
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofCells << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofCells << "\">   \n";
 
     // POINTS SECTION
     out << "         <Points>\n";
@@ -425,7 +425,7 @@ string WbWriterVtkXmlASCII::writeQuadsWithNodeAndCellData(const string &filename
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofCells << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofCells << "\">   \n";
 
     // POINTS SECTION
     out << "         <Points>\n";
@@ -521,7 +521,7 @@ std::string WbWriterVtkXmlASCII::writeLines(const string &filename, vector<UbTup
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofLines << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofLines << "\">   \n";
 
     // POINTS SECTION
     out << "      <Points>\n";
@@ -586,7 +586,7 @@ std::string WbWriterVtkXmlASCII::writeLines(const string &filename, vector<UbTup
 //   //VTK FILE
 //   out<<"<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" byte_order=\"LittleEndian\" >"<<"\n";
 //   out<<"   <UnstructuredGrid>"<<"\n";
-//   out<<"      <Piece NumberOfPoints=\""<<nofNodes<<"\"	NumberOfCells=\""<<nofLines<<"\">   \n";
+//   out<<"      <Piece NumberOfPoints=\""<<nofNodes<<"\"    NumberOfCells=\""<<nofLines<<"\">   \n";
 //
 //   //POINTS SECTION
 //   out<<"      <Points>\n";
@@ -669,7 +669,7 @@ std::string WbWriterVtkXmlASCII::writeTriangles(const string &filename, vector<U
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofTriangles << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofTriangles << "\">   \n";
 
     // POINTS SECTION
     out << "      <Points>\n";
@@ -742,7 +742,7 @@ std::string WbWriterVtkXmlASCII::writeTrianglesWithNodeData(const std::string &f
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofCells << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofCells << "\">   \n";
 
     // POINTS SECTION
     out << "         <Points>\n";
@@ -826,7 +826,7 @@ std::string WbWriterVtkXmlASCII::writeOctsWithCellData(const string &filename, v
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofCells << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofCells << "\">   \n";
 
     // POINTS SECTION
     out << "         <Points>\n";
@@ -913,7 +913,7 @@ std::string WbWriterVtkXmlASCII::writeOctsWithNodeData(const string &filename, v
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofCells << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofCells << "\">   \n";
 
     // POINTS SECTION
     out << "         <Points>\n";
@@ -1001,7 +1001,7 @@ std::string WbWriterVtkXmlASCII::writeOcts(const string &filename, vector<UbTupl
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofCells << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofCells << "\">   \n";
 
     // POINTS SECTION
     out << "         <Points>\n";
@@ -1070,7 +1070,7 @@ std::string WbWriterVtkXmlASCII::writeNodes(const std::string &filename, std::ve
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofNodes << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofNodes << "\">   \n";
 
     // POINTS SECTION
     out << "      <Points>\n";
@@ -1139,7 +1139,7 @@ std::string WbWriterVtkXmlASCII::writeNodesWithNodeData(const std::string &filen
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofNodes << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofNodes << "\">   \n";
 
     // POINTS SECTION
     out << "         <Points>\n";
@@ -1227,7 +1227,7 @@ std::string WbWriterVtkXmlASCII::writeNodesWithNodeDataDouble(const std::string
         << "\n";
     out << "   <UnstructuredGrid>"
         << "\n";
-    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"	NumberOfCells=\"" << nofNodes << "\">   \n";
+    out << "      <Piece NumberOfPoints=\"" << nofNodes << "\"    NumberOfCells=\"" << nofNodes << "\">   \n";
 
     // POINTS SECTION
     out << "         <Points>\n";
diff --git a/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.cpp b/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.cpp
deleted file mode 100644
index c745e8a67b5a628321e27ea1132b55fba4bebd95..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * This file is part of the LBDEMcoupling software.
- *
- * LBDEMcoupling 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, version 3.
- *
- * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * Copyright 2014 Johannes Kepler University Linz
- *
- * Author: Philippe Seil (philippe.seil@jku.at)
- */
-
-#include "LiggghtsCouplingWrapper.h"
-#include "mpi.h"
-#include <iostream>
-#include <sstream>
-
-LiggghtsCouplingWrapper::LiggghtsCouplingWrapper(char **argv, MPI_Comm communicator)
-  : lmp(0)
-{
-  // todo: get LAMMPS to recognize command line options
-  int argc_lmp = 1;
-  char **argv_lmp = 0;
-  argv_lmp = new char*[1];
-  argv_lmp[0] = argv[0];
-
-  lmp = new LAMMPS_NS::LAMMPS(argc_lmp,argv_lmp,communicator);
-
-  //    delete[] argv_lmp[0];
-  delete[] argv_lmp;
-}
-void LiggghtsCouplingWrapper::execFile(char* const fname)
-{
-  lmp->input->file(fname);
-}
-void LiggghtsCouplingWrapper::execCommand(std::stringstream const &cmd)
-{
-  lmp->input->one(cmd.str().c_str());
-}
-void LiggghtsCouplingWrapper::execCommand(char* const cmd)
-{
-  lmp->input->one(cmd);
-}
-int LiggghtsCouplingWrapper::getNumParticles()
-{
-  return lammps_get_natoms(lmp);  
-}
-void LiggghtsCouplingWrapper::setVariable(char const *name, double value)
-{
-  std::stringstream cmd;
-  cmd << "variable " << name << " equal " << value;
-  std::cout << cmd.str() << std::endl;
-  execCommand(cmd);
-}
-void LiggghtsCouplingWrapper::setVariable(char const *name, std::string &value)
-{
-  std::stringstream cmd;
-  cmd << "variable " << name << " string " << value;
-  std::cout << cmd.str() << std::endl;
-  execCommand(cmd);
-}
-void LiggghtsCouplingWrapper::run(int nSteps)
-{
-  std::stringstream cmd;
-  cmd << "run " << nSteps << " pre no post no";
-  execCommand(cmd);
-}
-void LiggghtsCouplingWrapper::runUpto(int nSteps)
-{
-  std::stringstream cmd;
-  cmd << "run " << nSteps << " upto";
-  execCommand(cmd);
-}
-
-                              
-                           
-                           
diff --git a/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.h b/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.h
deleted file mode 100644
index a745a7e967ee7852a11cd37452012951e421c347..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * This file is part of the LBDEMcoupling software.
- *
- * LBDEMcoupling 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, version 3.
- *
- * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * Copyright 2014 Johannes Kepler University Linz
- *
- * Author: Philippe Seil (philippe.seil@jku.at)
- */
-
-#ifndef LIGGGHTSCOUPLINGWRAPPER_H
-#define LIGGGHTSCOUPLINGWRAPPER_H
-
-// necessary LAMMPS/LIGGGHTS includes
-
-#include "lammps.h"
-#include "input.h"
-#include "library.h"
-#include "library_cfd_coupling.h"
-
-class LiggghtsCouplingWrapper {
-public:
-  LiggghtsCouplingWrapper(char **argv, MPI_Comm communicator);
-  void execFile(char* const fname);
-  void execCommand(std::stringstream const &cmd);
-  void execCommand(char* const cmd);
-  void run(int nSteps);
-  void runUpto(int nSteps);
-  int getNumParticles();
-  void setVariable(char const *name, double value);
-  void setVariable(char const *name, std::string &value);
-
-  //private:
-  LAMMPS_NS::LAMMPS *lmp;
-};
-
-#endif /* LIGGGHTSCOUPLINGWRAPPER_H */
diff --git a/src/cpu/LiggghtsCoupling/CMakeLists.txt b/src/cpu/LiggghtsCoupling/CMakeLists.txt
deleted file mode 100644
index 3aa679efdd83810ec0e55f651589e7b531d3971b..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/CMakeLists.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-
-set(LIGGGHTS_LIBRARIES optimized ${LIGGGHTS_RELEASE_LIBRARY} debug ${LIGGGHTS_DEBUG_LIBRARY})
-
-vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser MPI::MPI_CXX cpu_core ${LIGGGHTS_LIBRARIES})
-
-vf_get_library_name(library_name)
-
-#target_link_directories(${library_name} PUBLIC ${LIGGGHTS_BINARY_DIR})
-target_include_directories(${library_name} PUBLIC ${LIGGGHTS_SOURCE_DIR})
-
diff --git a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp
deleted file mode 100644
index 7c85c77b87f6d0079e5cd82520b932e76433d012..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp
+++ /dev/null
@@ -1,909 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file IBcumulantK17LBMKernel.cpp
-//! \ingroup LiggghtsCoupling
-//! \author Konstantin Kutscher, Martin Geier
-//=======================================================================================
-#include "IBcumulantK17LBMKernel.h"
-#include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <cmath>
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include "Block3D.h"
-#include "BCArray3D.h"
-
-#define PROOF_CORRECTNESS
-
-//using namespace UbMath;
-
-//////////////////////////////////////////////////////////////////////////
-IBcumulantK17LBMKernel::IBcumulantK17LBMKernel()
-{
-    this->compressible = true;
-    forcingX1 = 0.0;
-    forcingX2 = 0.0;
-    forcingX3 = 0.0;
-}
-//////////////////////////////////////////////////////////////////////////
-void IBcumulantK17LBMKernel::initDataSet()
-{
-    SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
-    dataSet->setFdistributions(d);
-
-    particleData = std::make_shared<CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>>(nx[0] + 2, nx[1] + 2, nx[2] + 2);
-
-    int minX1 = 0;
-    int minX2 = 0;
-    int minX3 = 0;
-    int maxX1 = nx[0]+2;
-    int maxX2 = nx[1]+2;
-    int maxX3 = nx[2]+2;
-
-    LBMReal omega = collFactor;
-
-    for (int x3 = minX3; x3 < maxX3; x3++) {
-        for (int x2 = minX2; x2 < maxX2; x2++) {
-            for (int x1 = minX1; x1 < maxX1; x1++) {
-                (*particleData)(x1, x2, x3) = std::make_shared<IBdynamicsParticleData>();
-            }
-        }
-    }
-
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> IBcumulantK17LBMKernel::clone()
-{
-    SPtr<LBMKernel> kernel(new IBcumulantK17LBMKernel());
-    kernel->setNX(nx);
-    std::dynamic_pointer_cast<IBcumulantK17LBMKernel>(kernel)->initDataSet();
-    kernel->setCollisionFactor(this->collFactor);
-    kernel->setBCSet(bcSet->clone(kernel));
-    kernel->setWithForcing(withForcing);
-    kernel->setForcingX1(muForcingX1);
-    kernel->setForcingX2(muForcingX2);
-    kernel->setForcingX3(muForcingX3);
-    kernel->setIndex(ix1, ix2, ix3);
-    kernel->setDeltaT(deltaT);
-    kernel->setBlock(block.lock());
-
-    return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void IBcumulantK17LBMKernel::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;
-    using namespace vf::basics::constant;
-
-    //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);
-    }
-    /////////////////////////////////////
-
-    localDistributionsF = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-    nonLocalDistributionsF = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-    restDistributionsF = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->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)) {
-                    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->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-                    LBMReal mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-                    LBMReal mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-                    LBMReal mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-                    LBMReal mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-                    LBMReal mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-                    LBMReal mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-                    LBMReal mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-                    LBMReal mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-                    LBMReal mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-                    LBMReal mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    LBMReal mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    LBMReal mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    LBMReal mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-                    LBMReal mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-                    LBMReal mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-                    LBMReal mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    LBMReal mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-                    LBMReal mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    LBMReal mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-                    LBMReal mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    LBMReal mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-                    LBMReal mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    LBMReal mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    LBMReal mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    LBMReal mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    LBMReal mfbbb = (*this->restDistributionsF)(x1, x2, x3);
-
-                    LBMReal f[D3Q27System::ENDF + 1];
-                    LBMReal fEq[D3Q27System::ENDF + 1];
-                    LBMReal fEqSolid[D3Q27System::ENDF + 1];
-                    LBMReal fPre[D3Q27System::ENDF + 1];
-
-                    f[vf::lbm::dir::d000] = mfbbb;
-
-                    f[vf::lbm::dir::dP00] = mfcbb;
-                    f[vf::lbm::dir::d0P0] = mfbcb;
-                    f[vf::lbm::dir::d00P] = mfbbc;
-                    f[vf::lbm::dir::dPP0] = mfccb;
-                    f[vf::lbm::dir::dMP0] = mfacb;
-                    f[vf::lbm::dir::dP0P] = mfcbc;
-                    f[vf::lbm::dir::dM0P] = mfabc;
-                    f[vf::lbm::dir::d0PP] = mfbcc;
-                    f[vf::lbm::dir::d0MP] = mfbac;
-                    f[vf::lbm::dir::dPPP] = mfccc;
-                    f[vf::lbm::dir::dMPP] = mfacc;
-                    f[vf::lbm::dir::dPMP] = mfcac;
-                    f[vf::lbm::dir::dMMP] = mfaac;
-
-                    f[vf::lbm::dir::dM00] = mfabb;
-                    f[vf::lbm::dir::d0M0] = mfbab;
-                    f[vf::lbm::dir::d00M] = mfbba;
-                    f[vf::lbm::dir::dMM0] = mfaab;
-                    f[vf::lbm::dir::dPM0] = mfcab;
-                    f[vf::lbm::dir::dM0M] = mfaba;
-                    f[vf::lbm::dir::dP0M] = mfcba;
-                    f[vf::lbm::dir::d0MM] = mfbaa;
-                    f[vf::lbm::dir::d0PM] = mfbca;
-                    f[vf::lbm::dir::dMMM] = mfaaa;
-                    f[vf::lbm::dir::dPMM] = mfcaa;
-                    f[vf::lbm::dir::dMPM] = mfaca;
-                    f[vf::lbm::dir::dPPM] = mfcca;
-
-                    if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MIN) {
-                        fPre[vf::lbm::dir::d000] = mfbbb;
-
-                        fPre[vf::lbm::dir::dP00] = mfcbb;
-                        fPre[vf::lbm::dir::d0P0] = mfbcb;
-                        fPre[vf::lbm::dir::d00P] = mfbbc;
-                        fPre[vf::lbm::dir::dPP0] = mfccb;
-                        fPre[vf::lbm::dir::dMP0] = mfacb;
-                        fPre[vf::lbm::dir::dP0P] = mfcbc;
-                        fPre[vf::lbm::dir::dM0P] = mfabc;
-                        fPre[vf::lbm::dir::d0PP] = mfbcc;
-                        fPre[vf::lbm::dir::d0MP] = mfbac;
-                        fPre[vf::lbm::dir::dPPP] = mfccc;
-                        fPre[vf::lbm::dir::dMPP] = mfacc;
-                        fPre[vf::lbm::dir::dPMP] = mfcac;
-                        fPre[vf::lbm::dir::dMMP] = mfaac;
-                          
-                        fPre[vf::lbm::dir::dM00] = mfabb;
-                        fPre[vf::lbm::dir::d0M0] = mfbab;
-                        fPre[vf::lbm::dir::d00M] = mfbba;
-                        fPre[vf::lbm::dir::dMM0] = mfaab;
-                        fPre[vf::lbm::dir::dPM0] = mfcab;
-                        fPre[vf::lbm::dir::dM0M] = mfaba;
-                        fPre[vf::lbm::dir::dP0M] = mfcba;
-                        fPre[vf::lbm::dir::d0MM] = mfbaa;
-                        fPre[vf::lbm::dir::d0PM] = mfbca;
-                        fPre[vf::lbm::dir::dMMM] = mfaaa;
-                        fPre[vf::lbm::dir::dPMM] = mfcaa;
-                        fPre[vf::lbm::dir::dMPM] = mfaca;
-                        fPre[vf::lbm::dir::dPPM] = mfcca;
-                    }
-
-                    (*particleData)(x1, x2, x3)->hydrodynamicForce.fill(0.0);
-
-                    if ((*particleData)(x1, x2, x3)->solidFraction <= SOLFRAC_MAX) {
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    //! - 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   = c1o1 + drho;
-                    LBMReal OOrho = c1o1 / 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, c36o1, c1o36);
-                    forwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9);
-                    forwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36);
-                    forwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9);
-                    forwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9);
-                    forwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9);
-                    forwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36);
-                    forwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9);
-                    forwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36);
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    // Y - Dir
-                    forwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6);
-                    forwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-                    forwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, 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, c6o1, c1o6);
-                    forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-                    forwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18);
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    // X - Dir
-                    forwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1);
-                    forwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-                    forwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, 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, c3o1, c1o3);
-                    forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-                    forwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, 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 = c1o1;
-                    ////////////////////////////////////////////////////////////
-                    // 3.
-                    LBMReal OxyyPxzz =
-                        c8o1 * (-c2o1 + omega) * (c1o1 + c2o1 * omega) / (-c8o1 - c14o1 * omega + c7o1 * omega * omega);
-                    LBMReal OxyyMxzz =
-                        c8o1 * (-c2o1 + omega) * (-c7o1 + c4o1 * omega) / (c56o1 - c50o1 * omega + c9o1 * omega * omega);
-                    LBMReal Oxyz = c24o1 * (-c2o1 + omega) * (-c2o1 - c7o1 * omega + c3o1 * omega * omega) /
-                                   (c48o1 + c152o1 * omega - c130o1 * omega * omega + c29o1 * omega * omega * omega);
-                    ////////////////////////////////////////////////////////////
-                    // 4.
-                    LBMReal O4 = c1o1;
-                    ////////////////////////////////////////////////////////////
-                    // 5.
-                    LBMReal O5 = c1o1;
-                    ////////////////////////////////////////////////////////////
-                    // 6.
-                    LBMReal O6 = c1o1;
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    //! - 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 = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega);
-                    LBMReal B = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * 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 + c2o1 * mfbba * mfbab) * OOrho;
-                    LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) * OOrho;
-                    LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) * OOrho;
-
-                    LBMReal CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) * OOrho -
-                                              c1o9 * (drho * OOrho));
-                    LBMReal CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) * OOrho -
-                                              c1o9 * (drho * OOrho));
-                    LBMReal CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) * OOrho -
-                                              c1o9 * (drho * OOrho));
-                    ////////////////////////////////////////////////////////////
-                    // 5.
-                    LBMReal CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) +
-                         c1o3 * (mfbca + mfbac)) * OOrho;
-                    LBMReal CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) +
-                         c1o3 * (mfcba + mfabc)) * OOrho;
-                    LBMReal CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) +
-                         c1o3 * (mfacb + mfcab)) * OOrho;
-                    ////////////////////////////////////////////////////////////
-                    // 6.
-                    LBMReal CUMccc =
-                        mfccc + ((-c4o1 * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-                                  c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -
-                                  c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) *
-                                     OOrho +
-                                 (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-                                  c2o1 * (mfcaa * mfaca * mfaac) + c16o1 * mfbba * mfbab * mfabb) *
-                                     OOrho * OOrho -
-                                 c1o3 * (mfacc + mfcac + mfcca) * OOrho - c1o9 * (mfcaa + mfaca + mfaac) * OOrho +
-                                 (c2o1 * (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  = -c3o1 * omega * mfbba;
-                    LBMReal Dxz  = -c3o1 * omega * mfbab;
-                    LBMReal Dyz  = -c3o1 * 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) -
-                                 c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-                    mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy);
-                    mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz);
-
-                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                    ////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 + (c1o1 - Oxyz) * abs(mfbbb) / (abs(mfbbb) + qudricLimitD);
-                    mfbbb += wadjust * (-mfbbb);
-                    wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP);
-                    mxxyPyzz += wadjust * (-mxxyPyzz);
-                    wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM);
-                    mxxyMyzz += wadjust * (-mxxyMyzz);
-                    wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP);
-                    mxxzPyyz += wadjust * (-mxxzPyyz);
-                    wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM);
-                    mxxzMyyz += wadjust * (-mxxzMyyz);
-                    wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP);
-                    mxyyPxzz += wadjust * (-mxyyPxzz);
-                    wadjust = OxyyMxzz + (c1o1 - 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 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz);
-                    mfaac = c1o3 * (mxxMyy - c2o1 * 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 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-                    CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-                    CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-                    CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-                    CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-                    CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * B + (c1o1 - O4) * (CUMcbb);
-
-                    //////////////////////////////////////////////////////////////////////////
-                    // 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 * ((c3o1 * mfcaa + c1o1) * mfabb + c6o1 * mfbba * mfbab) * OOrho;
-                    mfbcb = CUMbcb + c1o3 * ((c3o1 * mfaca + c1o1) * mfbab + c6o1 * mfbba * mfabb) * OOrho;
-                    mfbbc = CUMbbc + c1o3 * ((c3o1 * mfaac + c1o1) * mfbba + c6o1 * mfbab * mfabb) * OOrho;
-
-                    mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) * c9o1 + c3o1 * (mfcaa + mfaca)) * OOrho -
-                                      (drho * OOrho)) *
-                                         c1o9;
-                    mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) * c9o1 + c3o1 * (mfcaa + mfaac)) * OOrho -
-                                      (drho * OOrho)) *
-                                         c1o9;
-                    mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) * c9o1 + c3o1 * (mfaac + mfaca)) * OOrho -
-                                      (drho * OOrho)) *
-                                         c1o9;
-
-                    //////////////////////////////////////////////////////////////////////////
-                    // 5.
-                    mfbcc = CUMbcc + c1o3 *
-                                         (c3o1 * (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb +
-                                                c2o1 * (mfbab * mfacb + mfbba * mfabc)) +
-                                          (mfbca + mfbac)) *
-                                         OOrho;
-                    mfcbc = CUMcbc + c1o3 *
-                                         (c3o1 * (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb +
-                                                c2o1 * (mfabb * mfcab + mfbba * mfbac)) +
-                                          (mfcba + mfabc)) *
-                                         OOrho;
-                    mfccb = CUMccb + c1o3 *
-                                         (c3o1 * (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb +
-                                                c2o1 * (mfbab * mfbca + mfabb * mfcba)) +
-                                          (mfacb + mfcab)) *
-                                         OOrho;
-
-                    //////////////////////////////////////////////////////////////////////////
-                    // 6.
-                    mfccc =
-                        CUMccc - ((-c4o1 * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-                                   c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -
-                                   c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) *
-                                      OOrho +
-                                  (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-                                   c2o1 * (mfcaa * mfaca * mfaac) + c16o1 * mfbba * mfbab * mfabb) *
-                                      OOrho * OOrho -
-                                  c1o3 * (mfacc + mfcac + mfcca) * OOrho - c1o9 * (mfcaa + mfaca + mfaac) * OOrho +
-                                  (c2o1 * (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, c1o1, c1o1);
-                    backwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-                    backwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, 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, c3o1, c1o3);
-                    backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-                    backwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9);
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    // Y - Dir
-                    backwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6);
-                    backwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-                    backwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, 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, c6o1, c1o6);
-                    backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-                    backwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18);
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    // Z - Dir
-                    backwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36);
-                    backwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9);
-                    backwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36);
-                    backwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9);
-                    backwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9);
-                    backwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9);
-                    backwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36);
-                    backwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9);
-                    backwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, 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;
-#ifdef SINGLEPRECISION
-                    if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-                    if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-                    {
-                        UB_THROW(UbException(
-                            UB_EXARGS,
-                            "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(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->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)     = mfabb;
-                    (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)     = mfbab;
-                    (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)     = mfbba;
-                    (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)    = mfaab;
-                    (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)   = mfcab;
-                    (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)    = mfaba;
-                    (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)   = mfcba;
-                    (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)    = mfbaa;
-                    (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)   = mfbca;
-                    (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)   = mfaaa;
-                    (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)  = mfcaa;
-                    (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)  = mfaca;
-                    (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac;
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac;
-
-                    (*this->restDistributionsF)(x1, x2, x3) = mfbbb;
-                    //////////////////////////////////////////////////////////////////////////
-                    f[vf::lbm::dir::d000] = mfbbb;
-                     
-                    f[vf::lbm::dir::dP00]  = mfcbb;
-                    f[vf::lbm::dir::d0P0]  = mfbcb;
-                    f[vf::lbm::dir::d00P]  = mfbbc;
-                    f[vf::lbm::dir::dPP0]  = mfccb;
-                    f[vf::lbm::dir::dMP0]  = mfacb;
-                    f[vf::lbm::dir::dP0P]  = mfcbc;
-                    f[vf::lbm::dir::dM0P]  = mfabc;
-                    f[vf::lbm::dir::d0PP]  = mfbcc;
-                    f[vf::lbm::dir::d0MP]  = mfbac;
-                    f[vf::lbm::dir::dPPP]  = mfccc;
-                    f[vf::lbm::dir::dMPP]  = mfacc;
-                    f[vf::lbm::dir::dPMP]  = mfcac;
-                    f[vf::lbm::dir::dMMP]  = mfaac;
-                                     
-                    f[vf::lbm::dir::dM00]  = mfabb;
-                    f[vf::lbm::dir::d0M0]  = mfbab;
-                    f[vf::lbm::dir::d00M]  = mfbba;
-                    f[vf::lbm::dir::dMM0]  = mfaab;
-                    f[vf::lbm::dir::dPM0]  = mfcab;
-                    f[vf::lbm::dir::dM0M]  = mfaba;
-                    f[vf::lbm::dir::dP0M]  = mfcba;
-                    f[vf::lbm::dir::d0MM]  = mfbaa;
-                    f[vf::lbm::dir::d0PM]  = mfbca;
-                    f[vf::lbm::dir::dMMM]  = mfaaa;
-                    f[vf::lbm::dir::dPMM]  = mfcaa;
-                    f[vf::lbm::dir::dMPM]  = mfaca;
-                    f[vf::lbm::dir::dPPM]  = mfcca;
-                }
-                    if ((*particleData)(x1, x2, x3)->solidFraction >= SOLFRAC_MIN) {
-                    //                    if ((*particleData)(x1, x2, x3)->solidFraction < SOLFRAC_MIN)
-                    //                        continue;
-                    //
-                                        LBMReal vx1, vx2, vx3, drho;
-                                        D3Q27System::calcCompMacroscopicValues(f, drho, vx1, vx2, vx3);
-                                        D3Q27System::calcCompFeq(fEq, drho, vx1, vx2, vx3);
-                    
-                                        std::array<double, 3> uPart;
-                                        uPart[0] = (*particleData)(x1, x2, x3)->uPart[0] * (1. + drho);
-                                        uPart[1] = (*particleData)(x1, x2, x3)->uPart[1] * (1. + drho);
-                                        uPart[2] = (*particleData)(x1, x2, x3)->uPart[2] * (1. + drho);
-                    
-                                        D3Q27System::calcCompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]);
-                    
-                                        if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) {
-                                        double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
-                                        f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0;
-                                            for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
-                                                const int iOpp        = D3Q27System::INVDIR[iPop];
-                                                double const bb       = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop]));
-                                                double const bbOpp    = ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp]));
-                    
-                    
-                                                f[iPop] = fPre[iPop] + bb;
-                                                f[iOpp] = fPre[iOpp] + bbOpp;
-                    
-                                                (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp);
-                                                (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp);
-                                                (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp);
-                                            }
-                                        } else { /* particleData.solidFraction < SOLFRAC_MAX */
-                    //#ifdef LBDEM_USE_WEIGHING
-                                            double const ooo = 1. / omega - 0.5;
-                                            double const B   = (*particleData)(x1, x2, x3)->solidFraction * ooo / ((1. - (*particleData)(x1, x2, x3)->solidFraction) + ooo);
-                    //#else
-                    //                        T const B = particleData.solidFraction;
-                    //#endif
-                                            double const oneMinB = 1. - B;
-                    
-                                            double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
-                                            f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0;
-                    
-                                            for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
-                                                int const iOpp = D3Q27System::INVDIR[iPop];
-                                                double const bb       = B * ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop]));
-                                                double const bbOpp    = B * ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp]));
-                    
-                                                f[iPop] = fPre[iPop] + oneMinB * (f[iPop] - fPre[iPop]) + bb;
-                                                f[iOpp] = fPre[iOpp] + oneMinB * (f[iOpp] - fPre[iOpp]) + bbOpp;
-                    
-                                                (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp);
-                                                (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp);
-                                                (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp);
-                                            }
-                                        } /* if solidFraction > SOLFRAC_MAX */
-
-                    (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000];
-
-                    (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00];
-                    (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0];
-                    (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M];
-                    (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0];
-                    (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0];
-                    (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M];
-                    (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M];
-                    (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM];
-                    (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM];
-                    (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM];
-                    (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM];
-                    (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM];
-                    (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM];
-
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP];
-                    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP];
-                    }
-                }
-            }
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
diff --git a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.h b/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.h
deleted file mode 100644
index d675e72aabd3122a01e092e99fa22eb491270805..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.h
+++ /dev/null
@@ -1,149 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file IBcumulantK17LBMKernel.h
-//! \ingroup LiggghtsCoupling
-//! \author Konstantin Kutscher, Martin Geier
-//=======================================================================================
-
-#ifndef IBcumulantK17LBMKernel_h__
-#define IBcumulantK17LBMKernel_h__
-
-#include "LiggghtsCouplingLBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "UbTiming.h"
-#include "CbArray4D.h"
-#include "CbArray3D.h"
-#include "IBdynamicsParticleData.h"
-
-
-//! \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>
-//!
-class IBcumulantK17LBMKernel : public LiggghtsCouplingLBMKernel
-{
-public:
-    IBcumulantK17LBMKernel();
-    ~IBcumulantK17LBMKernel() = 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);
-
-    virtual void initDataSet();
-
-    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr restDistributionsF;
-
-    mu::value_type muX1, muX2, muX3;
-    mu::value_type muDeltaT;
-    mu::value_type muNu;
-    LBMReal forcingX1;
-    LBMReal forcingX2;
-    LBMReal forcingX3;
-
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//! \brief forward chimera transformation \ref forwardInverseChimeraWithK 
-//! Transformation from distributions to central moments according to 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>
-//! Modified for lower round-off errors.
-////////////////////////////////////////////////////////////////////////////////
-inline void IBcumulantK17LBMKernel::forwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K)
-{
-    using namespace vf::basics::constant;
-    LBMReal m2 = mfa + mfc;
-    LBMReal m1 = mfc - mfa;
-    LBMReal m0 = m2 + mfb;
-    mfa = m0;
-    m0 *= Kinverse;
-    m0 += c1o1;
-    mfb = (m1 * Kinverse - m0 * vv) * K;
-    mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-////////////////////////////////////////////////////////////////////////////////
-//! \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.
-////////////////////////////////////////////////////////////////////////////////
-inline void IBcumulantK17LBMKernel::backwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K)
-{
-    using namespace vf::basics::constant;
-    LBMReal m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + c1o1) * (v2 - vv) * c1o2) * K;
-    LBMReal m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + c1o1) * (-v2)) * K;
-    mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + c1o1) * (v2 + vv) * c1o2) * K;
-    mfa = m0;
-    mfb = m1;
-}
-////////////////////////////////////////////////////////////////////////////////
-//! \brief forward chimera transformation \ref forwardChimera 
-//! Transformation from distributions to central moments according to 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>
-//! for \f$ K_{abc}=0 \f$. This is to avoid unnessary floating point operations.
-//! Modified for lower round-off errors.
-////////////////////////////////////////////////////////////////////////////////
-inline void IBcumulantK17LBMKernel::forwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2)
-{
-    using namespace vf::basics::constant;
-    LBMReal m1 = (mfa + mfc) + mfb;
-    LBMReal m2 = mfc - mfa;
-    mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-    mfb = m2 - vv * m1;
-    mfa = m1;
-}
-////////////////////////////////////////////////////////////////////////////////
-//! \brief backward chimera transformation \ref backwardChimera 
-//! 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>
-//! for \f$ K_{abc}=0 \f$. This is to avoid unnessary floating point operations.
-//! Modified for lower round-off errors.
-////////////////////////////////////////////////////////////////////////////////
-inline void IBcumulantK17LBMKernel::backwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2)
-{
-    using namespace vf::basics::constant;
-    LBMReal ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-    LBMReal mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-    mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-    mfb = mb;
-    mfa = ma;
-}
-
-#endif // IBcumulantK17LBMKernel_h__
\ No newline at end of file
diff --git a/src/cpu/LiggghtsCoupling/LBM/IBdynamicsParticleData.h b/src/cpu/LiggghtsCoupling/LBM/IBdynamicsParticleData.h
deleted file mode 100644
index 6593a96542bb21ba03bbc1f76f731a416f8314a5..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/LBM/IBdynamicsParticleData.h
+++ /dev/null
@@ -1,61 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file DataSet3D.h
-//! \ingroup LiggghtsCoupling
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef IBdynamicsParticleData_h
-#define IBdynamicsParticleData_h
-
-#include<array>
-
-constexpr auto SOLFRAC_MIN = 0.001;
-constexpr auto SOLFRAC_MAX = 0.999;
-
-struct IBdynamicsParticleData {
-public:
-    IBdynamicsParticleData()
-        : partId(0), solidFraction(0.)
-    {
-        uPart[0] = 0.;
-        uPart[1] = 0.;
-        uPart[2] = 0.;
-
-        hydrodynamicForce[0] = 0.;
-        hydrodynamicForce[1] = 0.;
-        hydrodynamicForce[2] = 0.;
-    };
-    int partId;
-    double solidFraction;
-    std::array<double, 3> uPart;
-    std::array<double, 3> hydrodynamicForce;
-};
-
-#endif
diff --git a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp
deleted file mode 100644
index c935693c7157b77df9fe2566363e0a424f0737b3..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp
+++ /dev/null
@@ -1,1795 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file IBsharpInterfaceLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include "IBsharpInterfaceLBMKernel.h"
-#include "NonNewtonianFluids/LBM/Rheology.h"
-#include <cmath>
-#include <iostream>
-#include <string>
-
-#define PROOF_CORRECTNESS
-
-using namespace vf::lbm::dir;
-using namespace vf::basics::constant;
-
-//////////////////////////////////////////////////////////////////////////
-IBsharpInterfaceLBMKernel::IBsharpInterfaceLBMKernel()
-{
-    this->compressible = false;
-}
-//////////////////////////////////////////////////////////////////////////
-void IBsharpInterfaceLBMKernel::initDataSet()
-{
-    SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
-    SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field
-    // SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
-    // SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D(            nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-    // CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new  CbArray3D<real, IndexerX3X2X1>(    nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-    // pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-    // p1Old = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-
-    rhoNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-    vxNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-    vyNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-    vzNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-    dataSet->setFdistributions(f);
-    dataSet->setHdistributions(h); // For phase-field
-    // dataSet->setH2distributions(h2);
-    // dataSet->setPhaseField(divU1);
-    // dataSet->setPressureField(pressure);
-
-    phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0));
-    phaseFieldOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 999.0));
-
-    particleData = std::make_shared<CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>>(nx[0] + 4, nx[1] + 4, nx[2] + 4);
-
-    // divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-    int minX1 = 0;
-    int minX2 = 0;
-    int minX3 = 0;
-    int maxX1 = nx[0] + 4;
-    int maxX2 = nx[1] + 4;
-    int maxX3 = nx[2] + 4;
-
-        for (int x3 = minX3; x3 < maxX3; x3++) {
-        for (int x2 = minX2; x2 < maxX2; x2++) {
-            for (int x1 = minX1; x1 < maxX1; x1++) {
-                (*particleData)(x1, x2, x3) = std::make_shared<IBdynamicsParticleData>();
-            }
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> IBsharpInterfaceLBMKernel::clone()
-{
-    SPtr<LBMKernel> kernel(new IBsharpInterfaceLBMKernel());
-    kernel->setNX(nx);
-    dynamicPointerCast<IBsharpInterfaceLBMKernel>(kernel)->initDataSet();
-    kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-    kernel->setDensityRatio(this->densityRatio);
-    // kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-    kernel->setSigma(this->sigma);
-    kernel->setContactAngle(this->contactAngle);
-    kernel->setPhiL(this->phiL);
-    kernel->setPhiH(this->phiH);
-    kernel->setPhaseFieldRelaxation(this->tauH);
-    kernel->setMobility(this->mob);
-    kernel->setInterfaceWidth(this->interfaceWidth);
-
-    kernel->setBCSet(bcSet->clone(kernel));
-    kernel->setWithForcing(withForcing);
-    kernel->setForcingX1(muForcingX1);
-    kernel->setForcingX2(muForcingX2);
-    kernel->setForcingX3(muForcingX3);
-    kernel->setIndex(ix1, ix2, ix3);
-    kernel->setDeltaT(deltaT);
-    kernel->setGhostLayerWidth(2);
-    dynamicPointerCast<IBsharpInterfaceLBMKernel>(kernel)->initForcing();
-
-    return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void IBsharpInterfaceLBMKernel::forwardInverseChimeraWithKincompressible(real &mfa, real &mfb, real &mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho)
-{
-    // using namespace UbMath;
-    real m2 = mfa + mfc;
-    real m1 = mfc - mfa;
-    real m0 = m2 + mfb;
-    mfa = m0;
-    m0 *= Kinverse;
-    m0 += oneMinusRho;
-    mfb = (m1 * Kinverse - m0 * vv) * K;
-    mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void IBsharpInterfaceLBMKernel::backwardInverseChimeraWithKincompressible(real &mfa, real &mfb, real &mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho)
-{
-    // using namespace UbMath;
-    real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
-    real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
-    mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
-    mfa = m0;
-    mfb = m1;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void IBsharpInterfaceLBMKernel::forwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2)
-{
-    // using namespace UbMath;
-    real m1 = (mfa + mfc) + mfb;
-    real m2 = mfc - mfa;
-    mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-    mfb = m2 - vv * m1;
-    mfa = m1;
-}
-
-void IBsharpInterfaceLBMKernel::backwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2)
-{
-    // using namespace UbMath;
-    real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-    real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-    mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-    mfb = mb;
-    mfa = ma;
-}
-
-void IBsharpInterfaceLBMKernel::calculate(int step)
-{
-    using namespace D3Q27System;
-    // using namespace UbMath;
-
-    forcingX1 = 0.0;
-    forcingX2 = 0.0;
-    forcingX3 = 0.0;
-
-    real oneOverInterfaceScale = c4o1 / interfaceWidth; // 1.0;//1.5;
-                                                        /////////////////////////////////////
-
-    localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-    nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-    restDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-    localDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-    nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-    restDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField();
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-    // real omegaDRho = 1.0;// 1.25;// 1.3;
-    for (int x3 = minX3 - ghostLayerWidth; x3 < maxX3 + ghostLayerWidth; x3++) {
-        for (int x2 = minX2 - ghostLayerWidth; x2 < maxX2 + ghostLayerWidth; x2++) {
-            for (int x1 = minX1 - ghostLayerWidth; x1 < maxX1 + ghostLayerWidth; x1++) {
-                if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                    int x1p = x1 + 1;
-                    int x2p = x2 + 1;
-                    int x3p = x3 + 1;
-
-                    real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                    real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                    real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                    real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                    real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                    real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                    real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                    real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                    real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                    real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                    real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                    real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                    real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                    real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                    real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                    real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                    real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                    real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-                    real mfbbb = (*this->restDistributionsH1)(x1, x2, x3);
-
-                    // omegaDRho = 2.0;// 1.5;
-                    // real phiOld = (*phaseField)(x1, x2, x3);
-
-                    (*phaseField)(x1, x2, x3) =
-                        (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) + (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-
-                    if ((*phaseField)(x1, x2, x3) > 1) {
-                        (*phaseField)(x1, x2, x3) = c1o1;
-                    }
-
-                    if ((*phaseField)(x1, x2, x3) < 0) {
-                        (*phaseField)(x1, x2, x3) = 0;
-                    }
-                }
-            }
-        }
-    }
-
-    this->swapDistributions();
-    for (int x3 = minX3 - ghostLayerWidth + 1; x3 < maxX3 + ghostLayerWidth - 1; x3++) {
-        for (int x2 = minX2 - ghostLayerWidth + 1; x2 < maxX2 + ghostLayerWidth - 1; x2++) {
-            for (int x1 = minX1 - ghostLayerWidth + 1; x1 < maxX1 + ghostLayerWidth - 1; x1++) {
-                if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                    // int x1p = x1 + 1;
-                    // int x2p = x2 + 1;
-                    // int x3p = x3 + 1;
-
-                    SPtr<DistributionArray3D> distributionH = this->getDataSet()->getHdistributions();
-                    real hh[27];
-                    distributionH->getDistributionInv(hh, x1, x2, x3);
-                    real phiD, vxP, vyP, vzP;
-
-                    D3Q27System::calcIncompMacroscopicValues(hh, phiD, vxP, vyP, vzP);
-                    (*phaseFieldOld)(x1, x2, x3) = phiD;
-
-                    SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions();
-                    real ff[27];
-                    distribution->getDistributionInv(ff, x1, x2, x3);
-                    real rhoG, vx, vy, vz;
-
-                    D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-
-                    (*rhoNode)(x1, x2, x3) = rhoG; // *((*phaseField)(x1, x2, x3) > c1o2 ? densityRatio : c1o1);
-                    (*vxNode)(x1, x2, x3) = vx;
-                    (*vyNode)(x1, x2, x3) = vy;
-                    (*vzNode)(x1, x2, x3) = vz;
-                }
-            }
-        }
-    }
-
-    SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions();
-    real ff[27];
-    for (int x3 = minX3 - 1; x3 < maxX3 + 1; x3++) {
-        for (int x2 = minX2 - 1; x2 < maxX2 + 1; x2++) {
-            for (int x1 = minX1 - 1; x1 < maxX1 + 1; x1++) {
-                if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                    // int x1p = x1 + 1;
-                    // int x2p = x2 + 1;
-                    // int x3p = x3 + 1;
-                    findNeighbors(phaseFieldOld, x1, x2, x3);
-                    ////////////////////////////////Momentum conservation experiment 06.03.2023
-                    // surfacetension
-
-                    if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[d000] <= c1o2) &&
-                        ((phi[dP00] > c1o2) || (phi[dM00] > c1o2) || (phi[d00P] > c1o2) || (phi[d00M] > c1o2) || (phi[d0M0] > c1o2) || (phi[d0P0] > c1o2) || (phi[dPP0] > c1o2) || (phi[dPM0] > c1o2) || (phi[dP0P] > c1o2) || (phi[dP0M] > c1o2) || (phi[dMP0] > c1o2) ||
-                         (phi[dMM0] > c1o2) || (phi[dM0P] > c1o2) || (phi[dM0M] > c1o2) || (phi[d0PM] > c1o2) || (phi[d0MM] > c1o2) || (phi[d0PP] > c1o2) || (phi[d0MP] > c1o2) || (phi[dPPP] > c1o2) || (phi[dPMP] > c1o2) || (phi[dMPP] > c1o2) || (phi[dMMP] > c1o2) ||
-                         (phi[dPPM] > c1o2) || (phi[dPMM] > c1o2) || (phi[dMPM] > c1o2) || (phi[dMMM] > c1o2))) {
-                        real vx = (*vxNode)(x1, x2, x3);
-                        real vy = (*vyNode)(x1, x2, x3);
-                        real vz = (*vzNode)(x1, x2, x3);
-                        findNeighbors(phaseField, x1, x2, x3);
-                        real laplacePressure = c12o1 * sigma * computeCurvature_phi();
-                        //                  if (step > 5000)
-                        //                       UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[d000]<< "\n");
-                        findNeighbors(phaseFieldOld, x1, x2, x3);
-
-                        // 16.03.23 c: BB gas side with updated boundary velocity
-
-                        distribution->getDistributionInv(ff, x1, x2, x3);
-                        real rhoG;
-                        if (phi[d000] > c1o2) { // initialization necessary
-                            real sumRho = 0;
-                            real sumWeight = 1.e-100;
-                            for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                if ((phi[fdir] <= c1o2)) {
-                                    sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                    sumWeight += WEIGTH[fdir];
-                                }
-                            }
-                            rhoG = sumRho / sumWeight; // uncheck excpetion: what if there is no adequate neighbor?
-                            for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                if ((phi[fdir] > c1o2)) {
-                                    real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                    real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                    real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                    real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-                                    real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-                                    vBC = (vBC + vDir) / (c2o1 + vBC - vDir);
-                                    real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-
-                                    if ((phi[D3Q27System::INVDIR[fdir]] > c1o2)) {
-                                        /// here we need reconstruction from scrach
-                                        real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                            (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                            (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                            (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-                                        // real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-                                        // real fGEQOld = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-                                        // real fGEQNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-                                        real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; // fL -feqOLD + feqNew;
-                                                                                                                                       // real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC);
-                                        distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                                        ///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!)
-                                        // real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-                                        // real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 ));
-                                        // real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 ));
-                                        // real fBC = fG - feqOLD + feqNew;
-                                        // distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir);
-                                    }
-                                }
-                            }
-                            // distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
-                            {
-                                real fL = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
-                                real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-                                real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz);
-                                distribution->setPostCollisionDistributionForDirection(fL - feqOLD + feqNew, x1, x2, x3, d000);
-                            }
-
-                        } else { // no refill of gas required
-                            rhoG = (*rhoNode)(x1, x2, x3);
-                            if ((*phaseField)(x1, x2, x3) <= c1o2) { // no refill liquid
-                                for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                    if ((phi[fdir] > c1o2)) {
-                                        real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-                                        real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-                                        // real dvDir = vBC - vDir;
-                                        vBC = (vBC + vDir) / (c2o1 + vBC - vDir);
-                                        real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                                        real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-                                        real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC);
-                                        // real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-                                        //  real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-                                        // real fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-
-                                        // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                        // D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real feqNew =
-                                        // D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                        // D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir); real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) /
-                                        // (c1o1 / collFactorL - c1o1) + feqNew;
-
-                                        // if ((*phaseField)(x1, x2, x3) <= c1o2)
-                                        distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                                        if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-                                            // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            // real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            // real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                            // D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); real feqL =
-                                            // D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 +
-                                            // D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) *
-                                            // (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) *
-                                            // (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                            // D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) *
-                                            // (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-                                            // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL  - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1,
-                                            // x2, x3, fdir); distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC *
-                                            // D3Q27System::DX3[fdir]), x1, x2, x3, fdir); real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0
-                                            // - c1o1) * vBC; real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); real number = 666; distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio *
-                                            // 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir);
-                                            ////	real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
-                                            ////	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-                                            //	real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                            //D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); 	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                            //D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-                                            ////real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
-                                            //	distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC, x1, x2, x3,
-                                            //fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-                                            //	//if (vxBC != 0) {
-                                            //	//	int set = 0;
-                                            //	//}
-
-                                            real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]),
-                                                                                              (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]),
-                                                                                              (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-                                            real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]),
-                                                                                              (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]),
-                                                                                              (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-                                            real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
-                                            real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-                                            real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                               (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                              (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-                                            // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
-                                            real laplacePressureBC;
-                                            if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) {
-                                                findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                                laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma;
-                                                findNeighbors(phaseFieldOld, x1, x2, x3);
-                                            } else
-                                                laplacePressureBC = laplacePressure; // curv; // reset to the above
-                                            laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) /
-                                                                    (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) +
-                                                                laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            // laplacePressureBC *= sigma;
-                                            distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1,
-                                                                                      x2, x3, fdir);
-                                        }
-                                    }
-                                }
-                            } else { // refill liquid
-
-                                for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                    if ((phi[fdir] > c1o2)) {
-                                        real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-                                        real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-                                        // real dvDir = vBC - vDir;
-                                        vBC = (vBC + vDir) / (c2o1 + vBC - vDir);
-                                        real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                                        real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-                                        real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC);
-
-                                        // real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-                                        //  real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-                                        // real fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-
-                                        // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                        // D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real feqNew =
-                                        // D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                        // D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir); real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) /
-                                        // (c1o1 / collFactorL - c1o1) + feqNew;
-
-                                        ff[D3Q27System::INVDIR[fdir]] = fBC;
-                                        if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-                                            // real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                            // D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); real feqL =
-                                            // D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 +
-                                            // D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) *
-                                            // (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) *
-                                            // (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                            // D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) *
-                                            // (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-                                            // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir);
-                                            // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC *
-                                            // D3Q27System::DX3[fdir]), x1, x2, x3, fdir); distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir); real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; real flWW = (fBC + fG) / densityRatio * 0
-                                            // - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
-                                            //	real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                            //D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); 	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 +
-                                            //D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            //	//real flNew = (fBC + fG - eqBC - eqG) / densityRatio + eqBC + eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC;
-                                            //	distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG)  - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3,
-                                            //fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-
-                                            ////	real number = 666;
-
-                                            real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]),
-                                                                                              (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]),
-                                                                                              (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-                                            real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]),
-                                                                                              (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]),
-                                                                                              (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-                                            real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
-                                            real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-                                            real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                               (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                              (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-                                            // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
-                                            real laplacePressureBC;
-                                            if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) {
-                                                findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                                laplacePressureBC = c12o1 * computeCurvature_phi() * sigma;
-                                                findNeighbors(phaseFieldOld, x1, x2, x3);
-                                            } else
-                                                laplacePressureBC = laplacePressure; // curv; // reset to the above
-                                            laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) /
-                                                                    (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) +
-                                                                laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            // laplacePressureBC *= sigma;
-                                            distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1,
-                                                                                      x2, x3, fdir);
-                                        }
-
-                                    } else {
-                                        ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                                        ;
-                                    }
-                                }
-
-                                real sum2 = 1e-100;
-                                real sumRho = 0;
-                                real sumVx = 0;
-                                real sumVy = 0;
-                                real sumVz = 0;
-                                for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                    if ((phi[fdir] > c1o2)) {
-
-                                        sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); // * tempRho;
-                                        sumVx += WEIGTH[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                        sumVy += WEIGTH[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                        sumVz += WEIGTH[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                        sum2 += WEIGTH[fdir];
-                                    }
-                                }
-                                real rhoL;
-                                D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-                                rhoL = sumRho / sum2;
-                                // vx = sumVx / sum2;
-                                // vy = sumVy / sum2;
-                                // vz = sumVz / sum2;
-                                // rhoL = (*rhoNode)(x1, x2, x3)/densityRatio;
-
-                                // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                //	ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                                // }
-
-                                for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                    if (((phi[fdir] <= c1o2))) //&& (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2)))
-                                    {
-                                        real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz);
-                                        real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz);
-                                        ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-                                        distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                                    }
-                                }
-
-                                // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                //	if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) {
-                                //		//real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                //		//real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                //		//real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                //		//real vBC = -(D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC);
-                                //		real vDir = -(D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX2[fdir] * vz);
-                                //		//vBC = (vBC + vDir) / (c2o1 -( vBC - vDir));
-                                //		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir;
-                                //		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz *
-                                //D3Q27System::DX3[fdir]); 		real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); 		distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); 		ff[fdir] = fL;
-                                //	}
-                                //	if (!(phi[fdir] > c1o2)) {
-                                //		//std::cout << "Eq at dir=" << fdir << "\n";
-                                //		real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                //		real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                //		real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                //		real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-                                //		distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
-                                //		ff[fdir] = feqL;
-                                //	}
-                                // }
-                                // real sumRho2= 0;
-                                // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                //	sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz);
-                                // }
-                                // ff[d000] = rhoL - sumRho2;
-                                // rhoL = 27.0 / 18.0 * sumRho2;
-                                // std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n";
-                                D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-                                // std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n";
-                                // distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
-                                {
-                                    real fG = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
-                                    real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-                                    real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
-                                    distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000);
-                                }
-                                // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                //	ff[D3Q27System::INVDIR[fdir]]=distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                                // }
-                                // D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-                                // std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n";
-
-                                // real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
-                                // distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000);
-                            }
-                        }
-
-                    } // end Loop
-                }
-            }
-        }
-    }
-
-    this->swapDistributions();
-
-    real collFactorM;
-
-    for (int x3 = minX3; x3 < maxX3; x3++) {
-        for (int x2 = minX2; x2 < maxX2; x2++) {
-            for (int x1 = minX1; x1 < maxX1; x1++) {
-                if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                    int x1p = x1 + 1;
-                    int x2p = x2 + 1;
-                    int x3p = x3 + 1;
-
-                    findNeighbors(phaseField, x1, x2, x3);
-
-                    real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-                    real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-                    real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-                    real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-                    real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-                    real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-                    real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-                    real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-                    real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-                    real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-                    real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                    real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-                    real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-                    real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-                    real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-                    real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-                    real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-                    real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-                    real mfbbb = (*this->restDistributionsF)(x1, x2, x3);
-
-                    real f[D3Q27System::ENDF + 1];
-                    real fEq[D3Q27System::ENDF + 1];
-                    real fEqSolid[D3Q27System::ENDF + 1];
-                    real fPre[D3Q27System::ENDF + 1];
-
-                    f[vf::lbm::dir::d000] = mfbbb;
-
-                    f[vf::lbm::dir::dP00] = mfcbb;
-                    f[vf::lbm::dir::d0P0] = mfbcb;
-                    f[vf::lbm::dir::d00P] = mfbbc;
-                    f[vf::lbm::dir::dPP0] = mfccb;
-                    f[vf::lbm::dir::dMP0] = mfacb;
-                    f[vf::lbm::dir::dP0P] = mfcbc;
-                    f[vf::lbm::dir::dM0P] = mfabc;
-                    f[vf::lbm::dir::d0PP] = mfbcc;
-                    f[vf::lbm::dir::d0MP] = mfbac;
-                    f[vf::lbm::dir::dPPP] = mfccc;
-                    f[vf::lbm::dir::dMPP] = mfacc;
-                    f[vf::lbm::dir::dPMP] = mfcac;
-                    f[vf::lbm::dir::dMMP] = mfaac;
-
-                    f[vf::lbm::dir::dM00] = mfabb;
-                    f[vf::lbm::dir::d0M0] = mfbab;
-                    f[vf::lbm::dir::d00M] = mfbba;
-                    f[vf::lbm::dir::dMM0] = mfaab;
-                    f[vf::lbm::dir::dPM0] = mfcab;
-                    f[vf::lbm::dir::dM0M] = mfaba;
-                    f[vf::lbm::dir::dP0M] = mfcba;
-                    f[vf::lbm::dir::d0MM] = mfbaa;
-                    f[vf::lbm::dir::d0PM] = mfbca;
-                    f[vf::lbm::dir::dMMM] = mfaaa;
-                    f[vf::lbm::dir::dPMM] = mfcaa;
-                    f[vf::lbm::dir::dMPM] = mfaca;
-                    f[vf::lbm::dir::dPPM] = mfcca;
-
-                    if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MIN) {
-                        fPre[vf::lbm::dir::d000] = mfbbb;
-
-                        fPre[vf::lbm::dir::dP00] = mfcbb;
-                        fPre[vf::lbm::dir::d0P0] = mfbcb;
-                        fPre[vf::lbm::dir::d00P] = mfbbc;
-                        fPre[vf::lbm::dir::dPP0] = mfccb;
-                        fPre[vf::lbm::dir::dMP0] = mfacb;
-                        fPre[vf::lbm::dir::dP0P] = mfcbc;
-                        fPre[vf::lbm::dir::dM0P] = mfabc;
-                        fPre[vf::lbm::dir::d0PP] = mfbcc;
-                        fPre[vf::lbm::dir::d0MP] = mfbac;
-                        fPre[vf::lbm::dir::dPPP] = mfccc;
-                        fPre[vf::lbm::dir::dMPP] = mfacc;
-                        fPre[vf::lbm::dir::dPMP] = mfcac;
-                        fPre[vf::lbm::dir::dMMP] = mfaac;
-
-                        fPre[vf::lbm::dir::dM00] = mfabb;
-                        fPre[vf::lbm::dir::d0M0] = mfbab;
-                        fPre[vf::lbm::dir::d00M] = mfbba;
-                        fPre[vf::lbm::dir::dMM0] = mfaab;
-                        fPre[vf::lbm::dir::dPM0] = mfcab;
-                        fPre[vf::lbm::dir::dM0M] = mfaba;
-                        fPre[vf::lbm::dir::dP0M] = mfcba;
-                        fPre[vf::lbm::dir::d0MM] = mfbaa;
-                        fPre[vf::lbm::dir::d0PM] = mfbca;
-                        fPre[vf::lbm::dir::dMMM] = mfaaa;
-                        fPre[vf::lbm::dir::dPMM] = mfcaa;
-                        fPre[vf::lbm::dir::dMPM] = mfaca;
-                        fPre[vf::lbm::dir::dPPM] = mfcca;
-                    }
-
-                    (*particleData)(x1, x2, x3)->hydrodynamicForce.fill(0.0);
-
-  
-
-                        real rhoH = 1.0;
-                        real rhoL = 1.0 / densityRatio;
-
-                        // real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-                        real dX1_phi = gradX1_phi();
-                        real dX2_phi = gradX2_phi();
-                        real dX3_phi = gradX3_phi();
-
-                        real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1.0e-20; //+ 1e-9+1e-3;
-                        // 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase?
-                        real normX1 = dX1_phi / denom;
-                        real normX2 = dX2_phi / denom;
-                        real normX3 = dX3_phi / denom;
-
-                        collFactorM = phi[d000] > c1o2 ? collFactorL : collFactorG;
-                        // real collFactorMInv = phi[d000] > c1o2 ? collFactorG : collFactorL;
-
-                        // real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-                        //----------- Calculating Macroscopic Values -------------
-                        real rho = phi[d000] > c1o2 ? rhoH : rhoL;
-
-                        real m0, m1, m2;
-                        real rhoRef = c1o1;
-
-                        real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + (mfcbb - mfabb)) / rhoRef;
-                        real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + (mfbcb - mfbab)) / rhoRef;
-                        real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + (mfbbc - mfbba)) / rhoRef;
-                        /////////////////////
-
-                        forcingX1 = 0.0;
-                        forcingX2 = 0.0;
-                        forcingX3 = 0.0;
-
-                        if (withForcing) {
-                            muRho = rho;
-                            muPhi = phi[d000];
-                            forcingX1 += muForcingX1.Eval();
-                            forcingX2 += muForcingX2.Eval();
-                            forcingX3 += muForcingX3.Eval();
-
-                            vvx += (forcingX1)*deltaT * c1o2;
-                            vvy += (forcingX2)*deltaT * c1o2;
-                            vvz += (forcingX3)*deltaT * c1o2;
-                        }
-                        if ((*particleData)(x1, x2, x3)->solidFraction <= SOLFRAC_MAX) {
-                        real vx2;
-                        real vy2;
-                        real vz2;
-                        vx2 = vvx * vvx;
-                        vy2 = vvy * vvy;
-                        vz2 = vvz * vvz;
-                        ///////////////////////////////////////////////////////////////////////////////////////////
-                        real 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 = (rhoRef - (oMdrho + m0)) / rhoRef; // 12.03.21 check derivation!!!!
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        real wadjust;
-                        //					real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000]));
-                        // real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[d000] * (c1o1 - phi[d000]):c0o1));
-                        real qudricLimit = 0.01;
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-                        //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-                        //! see also Eq. (6)-(14) in \ref
-                        //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-                        //!
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Z - Dir
-                        forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho);
-                        forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho);
-                        forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho);
-                        forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho);
-                        forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho);
-                        forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho);
-                        forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho);
-                        forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho);
-                        forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Y - Dir
-                        forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho);
-                        forwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-                        forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho);
-                        forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho);
-                        forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2);
-                        forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho);
-                        forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho);
-                        forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-                        forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // X - Dir
-                        forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho);
-                        forwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-                        forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho);
-                        forwardChimera(mfaab, mfbab, mfcab, vvx, vx2);
-                        forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2);
-                        forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2);
-                        forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho);
-                        forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-                        forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c3o1, c1o9, oMdrho);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Cumulants
-                        ////////////////////////////////////////////////////////////////////////////////////
-
-                        // mfaaa = 0.0;
-                        real OxxPyyPzz = 1.0; // omega2 or bulk viscosity
-                                              //   real OxyyPxzz = 1.;//-s9;//2+s9;//
-                                              //   real OxyyMxzz  = 1.;//2+s9;//
-                        real O4 = 1.;
-                        real O5 = 1.;
-                        real O6 = 1.;
-                        /////
-
-                        /////fourth order parameters; here only for test. Move out of loop!
-
-                        real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-                        real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-                        real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) /
-                                    (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-                        real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-                        // FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' )
-                        real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) /
-                                  (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-
-                        // Cum 4.
-                        real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-                        real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-                        real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-                        real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-                        real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-                        real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-
-                        // Cum 5.
-                        real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-                        real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-                        real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-                        // Cum 6.
-                        real CUMccc = mfccc +
-                                      ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-                                       (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-                                       c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) +
-                                      c1o27 * oMdrho;
-
-                        // 2.
-                        //  linear combinations
-                        real mxxPyyPzz = mfcaa + mfaca + mfaac;
-                        mxxPyyPzz -= mfaaa; // 12.03.21 shifted by mfaaa
-                                            // mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
-                        real mxxMyy = mfcaa - mfaca;
-                        real mxxMzz = mfcaa - mfaac;
-
-                        ///
-                        real mmfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-                        real mmfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-                        real mmfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-                        real mmfabb = mfabb;
-                        real mmfbab = mfbab;
-                        real mmfbba = mfbba;
-                        ///
-
-                        real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) * 0;
-                        // real dxux = -c1o2 * (mxxMyy + mxxMzz) * collFactorM - mfaaa * c1o3* omegaDRho;
-                        real dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-                        real dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-                        real Dxy = -c3o1 * collFactorM * mfbba;
-                        real Dxz = -c3o1 * collFactorM * mfbab;
-                        real Dyz = -c3o1 * collFactorM * mfabb;
-
-                        if (phi[d000] > c1o2) {
-                            /// QR eddyviscosity:
-                            real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux) - (Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz;
-                            real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz);
-                            real nuEddy = 5.0e1 * (eddyR / (eddyQ + 1e-100)) * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-                            nuEddy = (nuEddy < c1o1 / collFactorM) ? c1o1 / collFactorM : nuEddy;
-                            collFactorM = c1o1 / nuEddy;
-                            // collFactorM = c1o1 / (c1o1 / collFactorM +1.e2*nuEddy*(dX1_phi*dX1_phi+dX2_phi*dX2_phi+dX3_phi*dX3_phi));
-                            collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
-                            OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-                            OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-                            Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) /
-                                   (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-                            A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-                            BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) /
-                                 (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-                        }
-
-                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                        // non Newtonian fluid collision factor
-                        if (phi[d000] > c1o2) {
-                            real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz);
-                            collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1);
-                            collFactorM = (collFactorM < c1o1) ? c1o1 : collFactorM;
-                        }
-                        // omega = Rheology::getHerschelBulkleyCollFactor(omega, shearRate, drho);
-                        // omega = Rheology::getBinghamCollFactor(omega, shearRate, drho);
-                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-                        /////////
-                        // real mxxMyyh = -c2o1 * (dxux - dyuy) / collFactorMInv * c1o3;
-                        // real mxxMzzh = -c2o1 * (dxux - dzuz) / collFactorMInv * c1o3;
-
-                        // relax
-                        mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-                        mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-                        mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-                        mfabb += collFactorM * (-mfabb);
-                        mfbab += collFactorM * (-mfbab);
-                        mfbba += collFactorM * (-mfbba);
-
-                        // mxxMyyh += collFactorMInv * (-mxxMyyh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vy2 * dyuy);
-                        // mxxMzzh += collFactorMInv * (-mxxMzzh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vz2 * dzuz);
-
-                        mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
-
-                        // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2;
-                        // mfaaa = mfaaaS;
-                        // linear combinations back
-                        mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-                        mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-                        mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-                        // 3.
-                        //  linear combinations
-                        real mxxyPyzz = mfcba + mfabc;
-                        real mxxyMyzz = mfcba - mfabc;
-
-                        real mxxzPyyz = mfcab + mfacb;
-                        real mxxzMyyz = mfcab - mfacb;
-
-                        real mxyyPxzz = mfbca + mfbac;
-                        real mxyyMxzz = mfbca - mfbac;
-
-                        mmfcaa += c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz - mfaaa);
-                        mmfaca += c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz - mfaaa);
-                        mmfaac += c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz - mfaaa);
-                        mmfabb += mfabb;
-                        mmfbab += mfbab;
-                        mmfbba += mfbba;
-
-                        // relax
-                        wadjust = Oxyz + (1. - Oxyz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-                        mfbbb += wadjust * (-mfbbb);
-                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-                        mxxyPyzz += wadjust * (-mxxyPyzz);
-                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-                        mxxyMyzz += wadjust * (-mxxyMyzz);
-                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-                        mxxzPyyz += wadjust * (-mxxzPyyz);
-                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-                        mxxzMyyz += wadjust * (-mxxzMyyz);
-                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-                        mxyyPxzz += wadjust * (-mxyyPxzz);
-                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-                        mxyyMxzz += wadjust * (-mxyyMxzz);
-
-                        // linear combinations back
-                        mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-                        mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-                        mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-                        mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-                        mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-                        mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-                        // 4.
-                        CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-                        CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-                        CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-                        CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc);
-                        CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb);
-                        CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb);
-
-                        // 5.
-                        CUMbcc += O5 * (-CUMbcc);
-                        CUMcbc += O5 * (-CUMcbc);
-                        CUMccb += O5 * (-CUMccb);
-
-                        // 6.
-                        CUMccc += O6 * (-CUMccc);
-
-                        // back cumulants to central moments
-                        // 4.
-                        mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-                        mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-                        mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-                        mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-                        mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-                        mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-
-                        // 5.
-                        mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-                        mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-                        mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-                        // 6.
-                        mfccc = CUMccc -
-                                ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-                                 (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-                                 c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) -
-                                c1o27 * oMdrho;
-
-                        ////////
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // forcing
-                        mfbaa = -mfbaa;
-                        mfaba = -mfaba;
-                        mfaab = -mfaab;
-
-                        backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho);
-                        backwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-                        backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho);
-                        backwardChimera(mfaab, mfbab, mfcab, vvx, vx2);
-                        backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2);
-                        backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2);
-                        backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho);
-                        backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-                        backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9, oMdrho);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Y - Dir
-                        backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho);
-                        backwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-                        backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho);
-                        backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho);
-                        backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2);
-                        backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho);
-                        backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho);
-                        backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-                        backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Z - Dir
-                        backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho);
-                        backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho);
-                        backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho);
-                        backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho);
-                        backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho);
-                        backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho);
-                        backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho);
-                        backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho);
-                        backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho);
-                        //////////////////////////////////////////////////////////////////////////
-                        // proof correctness
-                        //////////////////////////////////////////////////////////////////////////
-                        // #ifdef  PROOF_CORRECTNESS
-                        real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-
-                        if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post)) UB_THROW(UbException(UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-
-                        //////////////////////////////////////////////////////////////////////////
-                        // write distribution
-                        //////////////////////////////////////////////////////////////////////////
-                        //	if (phi[d000] < c1o2) {
-                        (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;         //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;         //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;         //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;        //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;       //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;        //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;       //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;        //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;       //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;       //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;      //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;      //* rho * c1o3;
-                        (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;     //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;     //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;     //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;     //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;   //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;    //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;   //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;    //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;   //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;    //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;  //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;  //* rho * c1o3;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;   //* rho * c1o3;
-
-                        (*this->restDistributionsF)(x1, x2, x3) = mfbbb; // *rho* c1o3;
-
-                        f[vf::lbm::dir::d000] = mfbbb;
-
-                        f[vf::lbm::dir::dP00] = mfcbb;
-                        f[vf::lbm::dir::d0P0] = mfbcb;
-                        f[vf::lbm::dir::d00P] = mfbbc;
-                        f[vf::lbm::dir::dPP0] = mfccb;
-                        f[vf::lbm::dir::dMP0] = mfacb;
-                        f[vf::lbm::dir::dP0P] = mfcbc;
-                        f[vf::lbm::dir::dM0P] = mfabc;
-                        f[vf::lbm::dir::d0PP] = mfbcc;
-                        f[vf::lbm::dir::d0MP] = mfbac;
-                        f[vf::lbm::dir::dPPP] = mfccc;
-                        f[vf::lbm::dir::dMPP] = mfacc;
-                        f[vf::lbm::dir::dPMP] = mfcac;
-                        f[vf::lbm::dir::dMMP] = mfaac;
-
-                        f[vf::lbm::dir::dM00] = mfabb;
-                        f[vf::lbm::dir::d0M0] = mfbab;
-                        f[vf::lbm::dir::d00M] = mfbba;
-                        f[vf::lbm::dir::dMM0] = mfaab;
-                        f[vf::lbm::dir::dPM0] = mfcab;
-                        f[vf::lbm::dir::dM0M] = mfaba;
-                        f[vf::lbm::dir::dP0M] = mfcba;
-                        f[vf::lbm::dir::d0MM] = mfbaa;
-                        f[vf::lbm::dir::d0PM] = mfbca;
-                        f[vf::lbm::dir::dMMM] = mfaaa;
-                        f[vf::lbm::dir::dPMM] = mfcaa;
-                        f[vf::lbm::dir::dMPM] = mfaca;
-                        f[vf::lbm::dir::dPPM] = mfcca;
-                    }
-                    if ((*particleData)(x1, x2, x3)->solidFraction >= SOLFRAC_MIN) {
-                        real vx1, vx2, vx3, drho;
-                        D3Q27System::calcIncompMacroscopicValues(f, drho, vx1, vx2, vx3);
-                        D3Q27System::calcIncompFeq(fEq, drho, vx1, vx2, vx3);
-
-                        std::array<double, 3> uPart;
-                        uPart[0] = (*particleData)(x1, x2, x3)->uPart[0];
-                        uPart[1] = (*particleData)(x1, x2, x3)->uPart[1];
-                        uPart[2] = (*particleData)(x1, x2, x3)->uPart[2];
-
-                        D3Q27System::calcIncompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]);
-                        real rhoPhaseField = (phi[d000] > c1o2) ? c1o1 : c1o1 / densityRatio;
-                        if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) {
-                            double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
-                            f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0;
-                            for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
-                                const int iOpp = D3Q27System::INVDIR[iPop];
-                                double const bb = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop]));
-                                double const bbOpp = ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp]));
-
-                                f[iPop] = fPre[iPop] + bb;
-                                f[iOpp] = fPre[iOpp] + bbOpp;
-
-                                (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp) * rhoPhaseField;
-                                (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp) * rhoPhaseField;
-                                (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp) * rhoPhaseField;
-                            }
-                        } else { /* particleData.solidFraction < SOLFRAC_MAX */
-                                 // #ifdef LBDEM_USE_WEIGHING
-                            double const ooo = 1. / collFactorM - 0.5;
-                            double const B = (*particleData)(x1, x2, x3)->solidFraction * ooo / ((1. - (*particleData)(x1, x2, x3)->solidFraction) + ooo);
-                            // #else
-                            //                         T const B = particleData.solidFraction;
-                            // #endif
-                            double const oneMinB = 1. - B;
-
-                            double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
-                            f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0;
-
-                            for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
-                                int const iOpp = D3Q27System::INVDIR[iPop];
-                                double const bb = B * ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop]));
-                                double const bbOpp = B * ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp]));
-
-                                f[iPop] = fPre[iPop] + oneMinB * (f[iPop] - fPre[iPop]) + bb;
-                                f[iOpp] = fPre[iOpp] + oneMinB * (f[iOpp] - fPre[iOpp]) + bbOpp;
-
-                                (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp) * rhoPhaseField;
-                                (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp) * rhoPhaseField;
-                                (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp) * rhoPhaseField;
-                            }
-                        } /* if solidFraction > SOLFRAC_MAX */
-
-                        (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000];
-
-                        (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00];
-                        (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0];
-                        (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M];
-                        (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0];
-                        (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0];
-                        (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M];
-                        (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M];
-                        (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM];
-                        (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM];
-                        (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM];
-                        (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM];
-                        (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM];
-                        (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM];
-
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP];
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP];                   
-                    }
-
-
-
-                        /////////////////////  P H A S E - F I E L D   S O L V E R
-                     ////////////////////////////////////////////
-                                                                     /////CUMULANT PHASE-FIELD
-                    real omegaD = 1.0 / (3.0 * mob + 0.5);
-                    {
-                        mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                        mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                        mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                        mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                        mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                        mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                        mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                        mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                        mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                        mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                        mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                        mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                        mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                        mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                        mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                        mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                        mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-                        mfbbb = (*this->restDistributionsH1)(x1, x2, x3);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-                        //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-                        //!
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // second component
-                        real concentration =
-                            ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        real oneMinusRho = c1o1 - concentration;
-
-                        real cx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + (mfcbb - mfabb));
-                        real cy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + (mfbcb - mfbab));
-                        real cz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + (mfbbc - mfbba));
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // calculate the square of velocities for this lattice node
-                        real cx2 = cx * cx;
-                        real cy2 = cy * cy;
-                        real cz2 = cz * cz;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-                        //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-                        //! see also Eq. (6)-(14) in \ref
-                        //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-                        //!
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Z - Dir
-                        forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-                        forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-                        forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-                        forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-                        forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-                        forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-                        forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-                        forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-                        forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Y - Dir
-                        forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-                        forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-                        forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-                        forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-                        forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-                        forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-                        forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-                        forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-                        forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // X - Dir
-                        forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-                        forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-                        forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-                        forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-                        forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-                        forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-                        forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-                        forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-                        forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        //! - experimental Cumulant ... to be published ... hopefully
-                        //!
-
-                        // linearized orthogonalization of 3rd order central moments
-                        real Mabc = mfabc - mfaba * c1o3;
-                        real Mbca = mfbca - mfbaa * c1o3;
-                        real Macb = mfacb - mfaab * c1o3;
-                        real Mcba = mfcba - mfaba * c1o3;
-                        real Mcab = mfcab - mfaab * c1o3;
-                        real Mbac = mfbac - mfbaa * c1o3;
-                        // linearized orthogonalization of 5th order central moments
-                        real Mcbc = mfcbc - mfaba * c1o9;
-                        real Mbcc = mfbcc - mfbaa * c1o9;
-                        real Mccb = mfccb - mfaab * c1o9;
-
-                        // 31.05.2022 addaptive mobility
-                        // omegaD = c1o1 + (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) / (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy *
-                        // concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration)) + fabs((1.0 - concentration) * (concentration)) * c1o6 * oneOverInterfaceScale+1.0e-200); omegaD = c2o1 * (concentration * (concentration - c1o1)) / (-c6o1 * (sqrt((cx -
-                        // vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) + (concentration * (concentration - c1o1))+1.0e-200);
-                        //  collision of 1st order moments
-                        cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration)*c1o3 * oneOverInterfaceScale;
-                        cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration)*c1o3 * oneOverInterfaceScale;
-                        cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration)*c1o3 * oneOverInterfaceScale;
-
-                        cx2 = cx * cx;
-                        cy2 = cy * cy;
-                        cz2 = cz * cz;
-
-                        // equilibration of 2nd order moments
-                        mfbba = c0o1;
-                        mfbab = c0o1;
-                        mfabb = c0o1;
-
-                        mfcaa = c1o3 * concentration;
-                        mfaca = c1o3 * concentration;
-                        mfaac = c1o3 * concentration;
-
-                        // equilibration of 3rd order moments
-                        Mabc = c0o1;
-                        Mbca = c0o1;
-                        Macb = c0o1;
-                        Mcba = c0o1;
-                        Mcab = c0o1;
-                        Mbac = c0o1;
-                        mfbbb = c0o1;
-
-                        // from linearized orthogonalization 3rd order central moments to central moments
-                        mfabc = Mabc + mfaba * c1o3;
-                        mfbca = Mbca + mfbaa * c1o3;
-                        mfacb = Macb + mfaab * c1o3;
-                        mfcba = Mcba + mfaba * c1o3;
-                        mfcab = Mcab + mfaab * c1o3;
-                        mfbac = Mbac + mfbaa * c1o3;
-
-                        // equilibration of 4th order moments
-                        mfacc = c1o9 * concentration;
-                        mfcac = c1o9 * concentration;
-                        mfcca = c1o9 * concentration;
-
-                        mfcbb = c0o1;
-                        mfbcb = c0o1;
-                        mfbbc = c0o1;
-
-                        // equilibration of 5th order moments
-                        Mcbc = c0o1;
-                        Mbcc = c0o1;
-                        Mccb = c0o1;
-
-                        // from linearized orthogonalization 5th order central moments to central moments
-                        mfcbc = Mcbc + mfaba * c1o9;
-                        mfbcc = Mbcc + mfbaa * c1o9;
-                        mfccb = Mccb + mfaab * c1o9;
-
-                        // equilibration of 6th order moment
-                        mfccc = c1o27 * concentration;
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-                        //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-                        //! see also Eq. (88)-(96) in
-                        //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-                        //!
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // X - Dir
-                        backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-                        backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-                        backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-                        backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-                        backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-                        backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-                        backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-                        backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-                        backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Y - Dir
-                        backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-                        backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-                        backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-                        backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-                        backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-                        backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-                        backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-                        backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-                        backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Z - Dir
-                        backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-                        backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-                        backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-                        backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-                        backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-                        backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-                        backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-                        backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-                        backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-                        (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-                        (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-                        (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-                        (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-                        (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-                        (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-                        (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-                        (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-                        (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-                        (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-                        (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-                        (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-                        (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-                        (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-                        (*this->restDistributionsH1)(x1, x2, x3) = mfbbb;
-
-                    }
-                }
-            }
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-real IBsharpInterfaceLBMKernel::gradX1_phi()
-{
-    using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) +
-                   WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
-                  +WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
-}
-
-real IBsharpInterfaceLBMKernel::gradX2_phi()
-{
-    using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP]) - (phi[dPMP] - phi[dMPM]))) +
-                   WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0]) - (phi[dPM0] - phi[dMP0])))) +
-                  +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
-}
-
-real IBsharpInterfaceLBMKernel::gradX3_phi()
-{
-    using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) +
-                   WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
-                  +WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
-}
-
-real IBsharpInterfaceLBMKernel::gradX1_rhoInv(real rhoL, real rhoDIV)
-{
-    using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) +
-                   WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) +
-                  +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00])));
-}
-
-real IBsharpInterfaceLBMKernel::gradX2_rhoInv(real rhoL, real rhoDIV)
-{
-    using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])))) +
-                   WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) +
-                  +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0])));
-}
-
-real IBsharpInterfaceLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV)
-{
-    using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) +
-                   WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) +
-                                      ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) +
-                  +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M])));
-}
-
-real IBsharpInterfaceLBMKernel::gradX1_phi2()
-{
-    using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) +
-                   WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
-                  +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
-}
-
-real IBsharpInterfaceLBMKernel::gradX2_phi2()
-{
-    using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) +
-                   WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
-                  +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
-}
-
-real IBsharpInterfaceLBMKernel::gradX3_phi2()
-{
-    using namespace D3Q27System;
-    return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) +
-                   WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
-                  +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
-}
-
-real IBsharpInterfaceLBMKernel::nabla2_phi()
-{
-    using namespace D3Q27System;
-    real sum = 0.0;
-    sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
-    sum += WEIGTH[d0PP] * ((((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) +
-                              (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))));
-    sum += WEIGTH[d00P] * (((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])));
-
-    return 6.0 * sum;
-}
-
-real IBsharpInterfaceLBMKernel::computeCurvature_phi()
-{
-    using namespace D3Q27System;
-    using namespace UbMath;
-
-    real phiX = gradX1_phi();
-    real phiY = gradX2_phi();
-    real phiZ = gradX3_phi();
-    real phiXX =
-        c4o9 * (phi[dP00] - c2o1 * phi[d000] + phi[dM00]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0]) + (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0])) + ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M]))) +
-                                                                      c1o36 * (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM]))));
-    real phiYY =
-        c4o9 * (phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0]) + (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0])) + ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM]))) +
-                                                                      c1o36 * (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM]))));
-    real phiZZ =
-        c4o9 * (phi[d00P] - c2o1 * phi[d000] + phi[d00M]) + (c1o9 * (((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M]) + (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M])) + ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM]))) +
-                                                                      c1o36 * (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM]))));
-    real phiXY = c1o4 * (c2o3 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]) + c1o6 * ((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM])));
-    real phiXZ = c1o4 * (c2o3 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]) + c1o6 * ((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP])));
-    real phiYZ = c1o4 * (c2o3 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]) + c1o6 * ((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM]) + (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM])));
-
-    // non isotropic FD (to be improved):
-    // real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi();
-    // real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi();
-    // real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi();
-
-    // real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00];
-    // real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0];
-    // real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]);
-    // real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]);
-    // real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]);
-    // real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]);
-    // real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2));
-    return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2));
-}
-
-void IBsharpInterfaceLBMKernel::computePhasefield()
-{
-    using namespace D3Q27System;
-    SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-    int minX1 = ghostLayerWidth;
-    int minX2 = ghostLayerWidth;
-    int minX3 = ghostLayerWidth;
-    int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-    int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-    int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-    //------------- Computing the phase-field ------------------
-    for (int x3 = minX3; x3 < maxX3; x3++) {
-        for (int x2 = minX2; x2 < maxX2; x2++) {
-            for (int x1 = minX1; x1 < maxX1; x1++) {
-                // if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-                {
-                    int x1p = x1 + 1;
-                    int x2p = x2 + 1;
-                    int x3p = x3 + 1;
-
-                    h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                    h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                    h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                    h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[d000] = (*this->restDistributionsH1)(x1, x2, x3);
-                }
-            }
-        }
-    }
-}
-
-void IBsharpInterfaceLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3)
-{
-    using namespace D3Q27System;
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-    phi[d000] = (*ph)(x1, x2, x3);
-
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-        if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-            phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-        } else {
-            phi[k] = (*ph)(x1, x2, x3); // neutral wetting
-                                        // phi[k] = 0.0;//unwetting
-        }
-    }
-}
-
-void IBsharpInterfaceLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3)
-{
-    using namespace D3Q27System;
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-    phi2[d000] = (*ph)(x1, x2, x3);
-
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-        if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-            phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-        } else {
-            phi2[k] = 0.05;
-        }
-    }
-}
-
-void IBsharpInterfaceLBMKernel::swapDistributions()
-{
-    LBMKernel::swapDistributions();
-    dataSet->getHdistributions()->swap();
-}
-
-void IBsharpInterfaceLBMKernel::initForcing()
-{
-    muForcingX1.DefineVar("x1", &muX1);
-    muForcingX1.DefineVar("x2", &muX2);
-    muForcingX1.DefineVar("x3", &muX3);
-    muForcingX2.DefineVar("x1", &muX1);
-    muForcingX2.DefineVar("x2", &muX2);
-    muForcingX2.DefineVar("x3", &muX3);
-    muForcingX3.DefineVar("x1", &muX1);
-    muForcingX3.DefineVar("x2", &muX2);
-    muForcingX3.DefineVar("x3", &muX3);
-
-    muDeltaT = deltaT;
-
-    muForcingX1.DefineVar("dt", &muDeltaT);
-    muForcingX2.DefineVar("dt", &muDeltaT);
-    muForcingX3.DefineVar("dt", &muDeltaT);
-
-    muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
-
-    muForcingX1.DefineVar("nu", &muNu);
-    muForcingX2.DefineVar("nu", &muNu);
-    muForcingX3.DefineVar("nu", &muNu);
-
-    muForcingX1.DefineVar("rho", &muRho);
-    muForcingX2.DefineVar("rho", &muRho);
-    muForcingX3.DefineVar("rho", &muRho);
-}
diff --git a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.h b/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.h
deleted file mode 100644
index a24131488a642a0a44712dd73fe4188cfeafaab2..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.h
+++ /dev/null
@@ -1,133 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file IBsharpInterfaceLBMKernel.h
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#ifndef IBsharpInterfaceLBMKernel_H
-#define IBsharpInterfaceLBMKernel_H
-
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "LiggghtsCouplingLBMKernel.h"
-#include "basics/container/CbArray3D.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/utilities/UbTiming.h"
-#include "IBdynamicsParticleData.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel.
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  M. Geier, K. Kutscher, Hesameddin Safari
-class IBsharpInterfaceLBMKernel : public LiggghtsCouplingLBMKernel
-{
-public:
-    IBsharpInterfaceLBMKernel();
-    virtual ~IBsharpInterfaceLBMKernel(void) = default;
-    void calculate(int step) override;
-    SPtr<LBMKernel> clone() override;
-
-    /// refactor
-    // CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure;
-
-    double getCalculationTime() override
-    {
-        return .0;
-    }
-
-protected:
-    virtual void initDataSet();
-    void swapDistributions() override;
-
-    void initForcing();
-
-    void forwardInverseChimeraWithKincompressible(real &mfa, real &mfb, real &mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void backwardInverseChimeraWithKincompressible(real &mfa, real &mfb, real &mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void forwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2);
-    void backwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2);
-
-    real f1[D3Q27System::ENDF + 1];
-
-    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr restDistributionsF;
-
-    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1;
-    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr restDistributionsH1;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr p1Old;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseFieldOld;
-    // CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr rhoNode;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vxNode;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vyNode;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vzNode;
-
-    real h[D3Q27System::ENDF + 1];
-    // real h2[D3Q27System::ENDF + 1];
-    // real g  [D3Q27System::ENDF+1];
-    real phi[D3Q27System::ENDF + 1];
-    real phi2[D3Q27System::ENDF + 1];
-    // real pr1[D3Q27System::ENDF+1];
-    real phi_cutoff[D3Q27System::ENDF + 1];
-
-    real gradX1_phi();
-    real gradX2_phi();
-    real gradX3_phi();
-    real gradX1_rhoInv(real rhoL, real rhoDIV);
-    real gradX2_rhoInv(real rhoL, real rhoDIV);
-    real gradX3_rhoInv(real rhoL, real rhoDIV);
-    real gradX1_phi2();
-    real gradX2_phi2();
-    real gradX3_phi2();
-    void computePhasefield();
-    void findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-    void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3);
-
-    real nabla2_phi();
-
-    real computeCurvature_phi();
-
-    mu::value_type muX1, muX2, muX3;
-    mu::value_type muDeltaT;
-    mu::value_type muNu;
-    mu::value_type muRho;
-    mu::value_type muPhi;
-    real forcingX1;
-    real forcingX2;
-    real forcingX3;
-
-};
-
-#endif
diff --git a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp
deleted file mode 100644
index 44109a14c34745af6a7fbc13ca71fc7cdbb405fb..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-#include "LiggghtsCouplingLBMKernel.h"
-#include "D3Q27System.h"
-
-//void LiggghtsCouplingLBMKernel::collisionOperator(int x1, int x2, int x3, real collFactorM, real fPre[])
-//{
-//    //if ((*particleData)(x1, x2, x3)->solidFraction >= SOLFRAC_MIN) {
-//        LBMReal f[D3Q27System::ENDF + 1];
-//        LBMReal fEq[D3Q27System::ENDF + 1];
-//        LBMReal fEqSolid[D3Q27System::ENDF + 1];
-//        LBMReal vx1, vx2, vx3, drho;
-//        D3Q27System::calcIncompMacroscopicValues(f, drho, vx1, vx2, vx3);
-//        D3Q27System::calcIncompFeq(fEq, drho, vx1, vx2, vx3);
-//
-//        std::array<double, 3> uPart;
-//        uPart[0] = (*particleData)(x1, x2, x3)->uPart[0];
-//        uPart[1] = (*particleData)(x1, x2, x3)->uPart[1];
-//        uPart[2] = (*particleData)(x1, x2, x3)->uPart[2];
-//
-//        D3Q27System::calcIncompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]);
-//        real rhoPhaseField = (phi[d000] > c1o2) ? c1o1 : c1o1 / densityRatio;
-//        if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) {
-//            double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
-//            f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0;
-//            for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
-//                const int iOpp = D3Q27System::INVDIR[iPop];
-//                double const bb = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop]));
-//                double const bbOpp = ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp]));
-//
-//                f[iPop] = fPre[iPop] + bb;
-//                f[iOpp] = fPre[iOpp] + bbOpp;
-//
-//                (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp) * rhoPhaseField;
-//                (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp) * rhoPhaseField;
-//                (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp) * rhoPhaseField;
-//            }
-//        } else { /* particleData.solidFraction < SOLFRAC_MAX */
-//                 // #ifdef LBDEM_USE_WEIGHING
-//            double const ooo = 1. / collFactorM - 0.5;
-//            double const B = (*particleData)(x1, x2, x3)->solidFraction * ooo / ((1. - (*particleData)(x1, x2, x3)->solidFraction) + ooo);
-//            // #else
-//            //                         T const B = particleData.solidFraction;
-//            // #endif
-//            double const oneMinB = 1. - B;
-//
-//            double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000];
-//            f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0;
-//
-//            for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) {
-//                int const iOpp = D3Q27System::INVDIR[iPop];
-//                double const bb = B * ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop]));
-//                double const bbOpp = B * ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp]));
-//
-//                f[iPop] = fPre[iPop] + oneMinB * (f[iPop] - fPre[iPop]) + bb;
-//                f[iOpp] = fPre[iOpp] + oneMinB * (f[iOpp] - fPre[iOpp]) + bbOpp;
-//
-//                (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp) * rhoPhaseField;
-//                (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp) * rhoPhaseField;
-//                (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp) * rhoPhaseField;
-//            }
-//        } /* if solidFraction > SOLFRAC_MAX */
-//
-//    //    (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000];
-//
-//    //    (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM];
-//    //    (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM];
-//
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP];
-//    //    (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP];
-//    //}
-//}
\ No newline at end of file
diff --git a/src/cpu/LiggghtsCoupling/LiggghtsCoupling.h b/src/cpu/LiggghtsCoupling/LiggghtsCoupling.h
deleted file mode 100644
index 42b127f730e1c6ba58d9da93fe7653e5f9f7407c..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/LiggghtsCoupling.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file LiggghtsCoupling.h
-//! \ingroup LiggghtsCoupling
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef LiggghtsCoupling_h
-#define LiggghtsCoupling_h
-
-#include "LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.h"
-#include "LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.h"
-#include "LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.h"
-#include "LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.h"
-#include "LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h"
-
-#endif
\ No newline at end of file
diff --git a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp
deleted file mode 100644
index ad192bf91868a321577f4e79f0729b2947bb0411..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "LiggghtsPartitioningGridVisitor.h"
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  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 LiggghtsPartitioningGridVisitor.cpp
-//! \ingroup LiggghtsCoupling
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include <comm.h>
-#include "LiggghtsPartitioningGridVisitor.h"
-#include "cpu/core/Simulation/Grid3D.h"
-#include "cpu/core/Simulation/Block3D.h"
-
-LiggghtsPartitioningGridVisitor::LiggghtsPartitioningGridVisitor(int nx, int ny, int nz, LAMMPS_NS::LAMMPS *lmp) : nx(nx), ny(ny), nz(nz), lmp(*lmp)
-{
- 
-}
-
-LiggghtsPartitioningGridVisitor::~LiggghtsPartitioningGridVisitor()
-{
-
-}
-
-void LiggghtsPartitioningGridVisitor::visit(SPtr<Grid3D> grid)
-{
-    npx = lmp.comm->procgrid[0];
-    npy = lmp.comm->procgrid[1];
-    npz = lmp.comm->procgrid[2];
-
-    for (int i = 0; i <= npx; i++)
-        xVal.push_back(round(lmp.comm->xsplit[i] * (double)nx));
-    for (int i = 0; i <= npy; i++)
-        yVal.push_back(round(lmp.comm->ysplit[i] * (double)ny));
-    for (int i = 0; i <= npz; i++)
-        zVal.push_back(round(lmp.comm->zsplit[i] * (double)nz));
-
-    UbTupleInt3 blockNX = grid->getBlockNX();
-
-    for (int iX = 0; iX < xVal.size() - 1; ++iX) {
-        for (int iY = 0; iY < yVal.size() - 1; ++iY) {
-            for (int iZ = 0; iZ < zVal.size() - 1; ++iZ) {
-
-                int rank = (int)lmp.comm->grid2proc[iX][iY][iZ];
-                int blockX1 = xVal[iX] / val<1>(blockNX);
-                int blockX2 = yVal[iY] / val<2>(blockNX);
-                int blockX3 = zVal[iZ] / val<3>(blockNX);
-                SPtr<Block3D> block = grid->getBlock(blockX1, blockX2, blockX3, 0);
-                block->setRank(rank);
-            }
-        }
-    }
-
-    xVal.clear();
-    yVal.clear();
-    zVal.clear();
-}
diff --git a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h
deleted file mode 100644
index 02a44807604cb7b122ec0a00a54dd90bc56b9ae6..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file LiggghtsPartitioningGridVisitor.h
-//! \ingroup LiggghtsCoupling
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef LiggghtsPartitioningGridVisitor_h
-#define LiggghtsPartitioningGridVisitor_h
-
-#include <lammps.h>
-#include <vector>
-#include "basics/PointerDefinitions.h"
-#include "cpu/core/Visitors/Grid3DVisitor.h"
-
-class LiggghtsCouplingWrapper;
-class Grid3D;
-
-class LiggghtsPartitioningGridVisitor : public Grid3DVisitor
-{
-public:
-    LiggghtsPartitioningGridVisitor(int nx, int ny, int nz, LAMMPS_NS::LAMMPS *lmp);
-
-    ~LiggghtsPartitioningGridVisitor() override;
-
-    void visit(SPtr<Grid3D> grid) override;
-
-private:
-    int nx, ny, nz;
-    LAMMPS_NS::LAMMPS &lmp;
-    int npx{ 0 }, npy{ 0 }, npz{ 0 };
-    std::vector<int> xVal, yVal, zVal;
-};
-#endif
\ No newline at end of file
diff --git a/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.cpp b/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.cpp
deleted file mode 100644
index 8d4c069c7d3f93ace398acc60b07a018577a3ec9..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.cpp
+++ /dev/null
@@ -1,445 +0,0 @@
-#include "LiggghtsCouplingSimulationObserver.h"
-#include "GbSphere3D.h"
-#include "parallel/MPICommunicator.h"
-#include "SimulationObserver.h"
-#include "LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.h"
-#include "Grid3D.h"
-#include "Block3D.h"
-#include "LBMKernel.h"
-#include "DistributionArray3D.h"
-#include "DataSet3D.h"
-#include "LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.h"
-#include "LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.h"
-#include "LBMUnitConverter.h"
-#include "fix_lb_coupling_onetoone.h"
-
-LiggghtsCouplingSimulationObserver::LiggghtsCouplingSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s,
-                                                         SPtr<vf::parallel::Communicator> comm,
-                                                         LiggghtsCouplingWrapper &wrapper, int demSteps,
-                                                         SPtr<LBMUnitConverter> units)
-    : SimulationObserver(grid, s), comm(comm), wrapper(wrapper), demSteps(demSteps), units(units)
-{
-
-}
-
-LiggghtsCouplingSimulationObserver::~LiggghtsCouplingSimulationObserver()
-{
-}
-
-void LiggghtsCouplingSimulationObserver::update(double actualTimeStep)
-{ 
-    //if (comm->getProcessID() == 0)
-    //    std::cout << "LiggghtsCouplingSimulationObserver step: " << actualTimeStep << "\n";
-    
-    //comm->barrier();
-
-    getForcesFromLattice();
-
-    //comm->barrier();
-    
-    wrapper.run(demSteps);
-
-    //comm->barrier();
-    
-    setSpheresOnLattice();
-
-    //comm->barrier();
-}
-
-void LiggghtsCouplingSimulationObserver::setSpheresOnLattice()
-{
-    std::vector<int> excludeType;
-
-    int nPart = wrapper.lmp->atom->nlocal + wrapper.lmp->atom->nghost;
-
-    for (int iS = 0; iS < nPart; iS++) 
-    {
-        int type = (int)wrapper.lmp->atom->type[iS];
-        bool excludeFlag(false);
-        for (int iT = 0; iT < excludeType.size(); iT++) {
-            //std::cout << iS << " " << type << " " << excludeType[iT] << std::endl;
-            if (type == excludeType[iT]) {
-                excludeFlag = true;
-                break;
-            }
-        }
-
-        if (excludeFlag)
-            continue;
-
-        double x[3] = { 0, 0, 0 }, v[3] = { 0, 0, 0 }, omega[3] = { 0, 0, 0 };
-        double r;
-        int id = wrapper.lmp->atom->tag[iS];
-
-        for (int i = 0; i < 3; i++) 
-        {
-            x[i]     = wrapper.lmp->atom->x[iS][i]; // * units->getFactorLentghWToLb(); // - 0.5; ????
-            v[i]     = wrapper.lmp->atom->v[iS][i] * units->getFactorVelocityWToLb();
-            omega[i] = wrapper.lmp->atom->omega[iS][i] / units->getFactorTimeWToLb();
-        }
-        
-        r = wrapper.lmp->atom->radius[iS]; // * units->getFactorLentghWToLb();
-
-        //std::cout << "x[0] = " << x[0] << ", x[1] = " << x[1] << ", x[2] = " << x[2] << std::endl;
-        //std::cout << "v[0] = " << v[0] << ", v[1] = " << v[1] << ", v[2] = " << v[2] << std::endl;
-        //std::cout << "omega[0] = " << omega[0] << ", omega[1] = " << omega[1] << ", omega[2] = " << omega[2] << std::endl;
-        //std::cout << "r = " << r << std::endl;
-        
-        setSingleSphere3D(x, v, omega, r, id);
-    }
-}
-
-void LiggghtsCouplingSimulationObserver::setSingleSphere3D(double *x, double *v, double *omega, /* double *com,*/ double r,
-                                                    int id /*, bool initVelFlag*/)
-{
-    int level = 0;
-    //UbTupleInt3 bi = grid->getBlockIndexes(x[0], x[1], x[2], level);
-    //SPtr<Block3D> block = grid->getBlock(val<1>(bi), val<2>(bi), val<3>(bi), level);
-    
-    std::vector<SPtr<Block3D>> blocks;
-    grid->getBlocksByCuboid(level, x[0] - r, x[1] - r, x[2] - r, x[0] + r, x[1] + r, x[2] + r, blocks);
-
-    //DEBUG
-    ///////////////////////
-    if (blocks.size() == 2) 
-        int test = 0;
-
-    ///////////////////////
-
-    for (SPtr<Block3D> block : blocks) {
-        if (block) {
-            SPtr<ILBMKernel> kernel = block->getKernel();
-            SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions();
-
-            CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>::CbArray3DPtr particleData =
-                dynamicPointerCast<LiggghtsCouplingLBMKernel>(kernel)->getParticleData();
-
-            if (!particleData)
-                continue;
-
-            int minX1b = 1;
-            int minX2b = 1;
-            int minX3b = 1;
-
-            int maxX1b = (int)(distributions->getNX1()) - 2;
-            int maxX2b = (int)(distributions->getNX2()) - 2;
-            int maxX3b = (int)(distributions->getNX3()) - 2;
-
-            real deltax = grid->getDeltaX(block);
-
-            UbTupleInt3 nodesMin = grid->getNodeIndexes(block, x[0] - r - deltax, x[1] - r - deltax, x[2] - r - deltax);
-            UbTupleInt3 nodesMax = grid->getNodeIndexes(block, x[0] + r + deltax, x[1] + r + deltax, x[2] + r + deltax);
-
-            int minX1 = (val<1>(nodesMin) < minX1b) ? minX1b : val<1>(nodesMin);
-            int minX2 = (val<2>(nodesMin) < minX2b) ? minX2b : val<2>(nodesMin);
-            int minX3 = (val<3>(nodesMin) < minX3b) ? minX3b : val<3>(nodesMin);
-
-            int maxX1 = (val<1>(nodesMax) > maxX1b) ? maxX1b : val<1>(nodesMax);
-            int maxX2 = (val<2>(nodesMax) > maxX2b) ? maxX2b : val<2>(nodesMax);
-            int maxX3 = (val<3>(nodesMax) > maxX3b) ? maxX3b : val<3>(nodesMax);
-
-            //int minX1 =  minX1b;
-            //int minX2 =  minX2b;
-            //int minX3 =  minX3b;
-
-            //int maxX1 =  maxX1b;
-            //int maxX2 =  maxX2b;
-            //int maxX3 =  maxX3b;
-
-
-            for (int ix3 = minX3; ix3 <= maxX3; ix3++) {
-                for (int ix2 = minX2; ix2 <= maxX2; ix2++) {
-                    for (int ix1 = minX1; ix1 <= maxX1; ix1++) {
-
-                        //UbTupleInt3 blockNX = grid->getBlockNX();
-
-                        //double const dx = val<1>(blockNX) * block->getX1() + ix1 - x[0];
-                        //double const dy = val<2>(blockNX) * block->getX2() + ix2 - x[1];
-                        //double const dz = val<3>(blockNX) * block->getX3() + ix3 - x[2];
-
-                        Vector3D worldCoordinates = grid->getNodeCoordinates(block, ix1, ix2, ix3);
-
-                        double const dx = (worldCoordinates[0] - x[0]) * units->getFactorLentghWToLb();
-                        double const dy = (worldCoordinates[1] - x[1]) * units->getFactorLentghWToLb();
-                        double const dz = (worldCoordinates[2] - x[2]) * units->getFactorLentghWToLb();
-
-                        double const sf = calcSolidFraction(dx, dy, dz, r * units->getFactorLentghWToLb());
-
-                        double const sf_old = (*particleData)(ix1,ix2,ix3)->solidFraction;
-                        int const id_old = (int)(*particleData)(ix1,ix2,ix3)->partId;
-
-                        int const decFlag = (sf > SOLFRAC_MIN) + 2 * (sf_old > SOLFRAC_MIN);
-
-                        switch (decFlag) {
-                            case 0: // sf == 0 && sf_old == 0
-                                setToZero(*(*particleData)(ix1, ix2, ix3).get());
-                                break; // do nothing
-                            case 1:    // sf > 0 && sf_old == 0
-                                setValues(*(*particleData)(ix1, ix2, ix3).get(), id, sf, v, dx, dy, dz, omega);
-                                break;
-                            case 2:               // sf == 0 && sf_old > 0
-                                if (id_old == id) // then particle has left this cell
-                                    setToZero(*(*particleData)(ix1, ix2, ix3).get());
-                                break; // else do nothing
-                            case 3:    // sf > 0 && sf_old > 0
-                                if (sf > sf_old || id_old == id)
-                                    setValues(*(*particleData)(ix1, ix2, ix3).get(), id, sf, v, dx, dy, dz, omega);
-                                break; // else do nothing
-                        }
-                        // if desired, initialize interior of sphere with sphere velocity
-                       // if (initVelFlag && sf > SOLFRAC_MAX)
-                       //     cell.defineVelocity(particleData->uPart);
-
-                        //if (sf > 0) {
-                        //    std::cout << "sf = " << sf << std::endl;
-                        //    std::cout << "ix1 = " << ix1 << ", ix2 = " << ix2 << ", ix3 = " << ix3 << std::endl;
-                        //}
-                    }
-                }
-            }
-        }
-    }
-
-}
-
-double LiggghtsCouplingSimulationObserver::calcSolidFraction(double const dx_, double const dy_, double const dz_,
-                                                      double const r_)
-{
-    static int const slicesPerDim = 5;
-    static double const sliceWidth       = 1. / ((double)slicesPerDim);
-    static double const fraction         = 1. / ((double)(slicesPerDim * slicesPerDim * slicesPerDim));
-
-    // should be sqrt(3.)/2.
-    // add a little to avoid roundoff errors
-    static const double sqrt3half = (double)sqrt(3.1) / 2.;
-
-    double const dist = dx_ * dx_ + dy_ * dy_ + dz_ * dz_;
-
-    double const r_p = r_ + sqrt3half;
-    if (dist > r_p * r_p)
-        return 0;
-
-    double const r_m = r_ - sqrt3half;
-    if (dist < r_m * r_m)
-        return 1;
-
-    double const r_sq = r_ * r_;
-    double dx_sq[slicesPerDim] = { 0, 0, 0, 0, 0 }, dy_sq[slicesPerDim] = { 0, 0, 0, 0, 0 }, dz_sq[slicesPerDim] = { 0, 0, 0, 0, 0 };
-
-    // pre-calculate d[xyz]_sq for efficiency
-    for (int i = 0; i < slicesPerDim; i++) {
-        double const delta = -0.5 + ((double)i + 0.5) * sliceWidth;
-        double const dx    = dx_ + delta;
-        dx_sq[i]      = dx * dx;
-        double const dy    = dy_ + delta;
-        dy_sq[i]      = dy * dy;
-        double const dz    = dz_ + delta;
-        dz_sq[i]      = dz * dz;
-    }
-
-    unsigned int n(0);
-    for (int i = 0; i < slicesPerDim; i++) {
-        for (int j = 0; j < slicesPerDim; j++) {
-            for (int k = 0; k < slicesPerDim; k++) {
-                n += (dx_sq[i] + dy_sq[j] + dz_sq[k] < r_sq);
-            }
-        }
-    }
-
-    return fraction * ((double)n);
-}
-
-  void LiggghtsCouplingSimulationObserver::setValues(IBdynamicsParticleData &p, int const id, double const sf, double const *v, double const dx, double const dy, double const dz, double const *omega)
-{
-    p.uPart[0] = v[0];
-    p.uPart[1] = v[1];
-    p.uPart[2] = v[2];
-
-    if (omega != 0) {
-        p.uPart[0] += omega[1] * dz - omega[2] * dy;
-        p.uPart[1] += -omega[0] * dz + omega[2] * dx;
-        p.uPart[2] += omega[0] * dy - omega[1] * dx;
-    }
-    p.solidFraction = sf;
-    p.partId        = id;
-}
-
-
-void LiggghtsCouplingSimulationObserver::setToZero(IBdynamicsParticleData &p)
-{
-    p.uPart[0]      = 0;
-    p.uPart[1]      = 0;
-    p.uPart[2]      = 0;
-    p.solidFraction = 0;
-    p.partId        = 0;
-}
-
-void LiggghtsCouplingSimulationObserver::getForcesFromLattice()
-{
-    static std::vector<double> force, torque;
-    static typename ParticleData::ParticleDataArrayVector x_lb;
-
-    int const nPart   = wrapper.lmp->atom->nlocal + wrapper.lmp->atom->nghost;
-    int const n_force = nPart * 3;
-
-    if (nPart == 0)
-        return; // no particles - no work
-
-    if (nPart > (int)x_lb.size()) {
-        for (int iPart = 0; iPart < (int)x_lb.size(); iPart++) {
-            x_lb[iPart][0] = wrapper.lmp->atom->x[iPart][0];
-            x_lb[iPart][1] = wrapper.lmp->atom->x[iPart][1];
-            x_lb[iPart][2] = wrapper.lmp->atom->x[iPart][2];
-        }
-        for (int iPart = (int)x_lb.size(); iPart < nPart; iPart++) {
-            std::array<double, 3> ar = {wrapper.lmp->atom->x[iPart][0],
-                                        wrapper.lmp->atom->x[iPart][1],
-                                        wrapper.lmp->atom->x[iPart][2]};
-            x_lb.push_back(ar);
-        }
-            
-
-    } else {
-        for (int iPart = 0; iPart < nPart; iPart++) {
-            x_lb[iPart][0] = wrapper.lmp->atom->x[iPart][0];
-            x_lb[iPart][1] = wrapper.lmp->atom->x[iPart][1];
-            x_lb[iPart][2] = wrapper.lmp->atom->x[iPart][2];
-        }
-    }
-
-    if (n_force > (int)force.size()) {
-        for (int i = 0; i < (int)force.size(); i++) {
-            force[i]  = 0;
-            torque[i] = 0;
-        }
-        for (int i = (int)force.size(); i < n_force; i++) {
-            force.push_back(0.);
-            torque.push_back(0.);
-        }
-    } else {
-        for (int i = 0; i < n_force; i++) {
-            force[i]  = 0;
-            torque[i] = 0;
-        }
-    }
-
-    SumForceTorque3D(x_lb, &force.front(), &torque.front());
-
-    LAMMPS_NS::FixLbCouplingOnetoone *couplingFix =
-        dynamic_cast<LAMMPS_NS::FixLbCouplingOnetoone *>(wrapper.lmp->modify->find_fix_style("couple/lb/onetoone", 0));
-
-    double **f_liggghts = couplingFix->get_force_ptr();
-    double **t_liggghts = couplingFix->get_torque_ptr();
-
-    for (int iPart = 0; iPart < nPart; iPart++)
-        for (int j = 0; j < 3; j++) {
-            f_liggghts[iPart][j] = 0;
-            t_liggghts[iPart][j] = 0;
-        }
-
-    for (int iPart = 0; iPart < nPart; iPart++) {
-        int tag          = wrapper.lmp->atom->tag[iPart];
-        int liggghts_ind = wrapper.lmp->atom->map(tag);
-
-        for (int j = 0; j < 3; j++) {
-            f_liggghts[liggghts_ind][j] += force[3 * iPart + j] * units->getFactorForceLbToW();
-            t_liggghts[liggghts_ind][j] += torque[3 * iPart + j] * units->getFactorTorqueLbToW();
-        }
-    }
-    couplingFix->comm_force_torque();
-}
-
-void LiggghtsCouplingSimulationObserver::SumForceTorque3D(ParticleData::ParticleDataArrayVector &x, double *force, double *torque)
-{
-    int nx = grid->getNX1(), ny = grid->getNX2(), nz = grid->getNX3();
-
-    std::vector < SPtr < Block3D > > blocks;
-    int level = 0;
-    grid->getBlocks(level, grid->getRank(), true, blocks);
-
-        
-    for (SPtr<Block3D> block : blocks) {
-        if (block) {
-            SPtr<ILBMKernel> kernel                 = block->getKernel();
-            SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions();
-
-            CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>::CbArray3DPtr particleData =
-                dynamicPointerCast<LiggghtsCouplingLBMKernel>(kernel)->getParticleData();
-
-            if (!particleData)
-                continue;
-
-            int minX1 = 1;
-            int minX2 = 1;
-            int minX3 = 1;
-
-            int maxX1 = (int)(distributions->getNX1()) - 1;
-            int maxX2 = (int)(distributions->getNX2()) - 1;
-            int maxX3 = (int)(distributions->getNX3()) - 1;
-
-            for (int ix3 = minX3; ix3 < maxX3; ix3++) {
-                for (int ix2 = minX2; ix2 < maxX2; ix2++) {
-                    for (int ix1 = minX1; ix1 < maxX1; ix1++) {
-
-                        // LIGGGHTS indices start at 1
-                        int const id = (*particleData)(ix1, ix2, ix3)->partId;
-                        if (id < 1)
-                            continue; // no particle here
-
-                        int const ind = wrapper.lmp->atom->map(id);
-
-                        if (ind < 0) continue; // no particle here
-
-                        Vector3D worldCoordinates = grid->getNodeCoordinates(block, ix1, ix2, ix3);
-
-                        double dx = (worldCoordinates[0] - x[ind][0]) * units->getFactorLentghWToLb();
-                        double dy = (worldCoordinates[1] - x[ind][1]) * units->getFactorLentghWToLb();
-                        double dz = (worldCoordinates[2] - x[ind][2]) * units->getFactorLentghWToLb();
-
-                        // minimum image convention, needed if
-                        // (1) PBC are used and
-                        // (2) both ends of PBC lie on the same processor
-                        if ((int)dx > nx / 2)
-                            dx -= nx;
-                        else if ((int)dx < -nx / 2)
-                            dx += nx;
-                        if ((int)dy > ny / 2)
-                            dy -= ny;
-                        else if ((int)dy < -ny / 2)
-                            dy += ny;
-                        if ((int)dz > nz / 2)
-                            dz -= nz;
-                        else if ((int)dz < -nz / 2)
-                            dz += nz;
-
-                        double const forceX = (*particleData)(ix1, ix2, ix3)->hydrodynamicForce[0];
-                        double const forceY = (*particleData)(ix1, ix2, ix3)->hydrodynamicForce[1];
-                        double const forceZ = (*particleData)(ix1, ix2, ix3)->hydrodynamicForce[2];
-
-                        double const torqueX = dy * forceZ - dz * forceY;
-                        double const torqueY = -dx * forceZ + dz * forceX;
-                        double const torqueZ = dx * forceY - dy * forceX;
-
-                        addForce(ind, 0, forceX, force);
-                        addForce(ind, 1, forceY, force);
-                        addForce(ind, 2, forceZ, force);
-
-                        addTorque(ind, 0, torqueX, torque);
-                        addTorque(ind, 1, torqueY, torque);
-                        addTorque(ind, 2, torqueZ, torque);
-                    }
-                }
-            }
-        }
-    }
- }
-
-void LiggghtsCouplingSimulationObserver::addForce(int const partId, int const coord, double const value, double *force)
-{
-    force[3 * partId + coord] += value;
-}
-
-void LiggghtsCouplingSimulationObserver::addTorque(int const partId, int const coord, double const value, double *torque)
-{
-    torque[3 * partId + coord] += value;
-}
\ No newline at end of file
diff --git a/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.h b/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.h
deleted file mode 100644
index fb4938328b9d18e8cef614a09cbad8894c5aa497..0000000000000000000000000000000000000000
--- a/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.h
+++ /dev/null
@@ -1,104 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file LiggghtsCouplingSimulationObserver.h
-//! \ingroup LiggghtsCoupling
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef LiggghtsCouplingSimulationObserver_h
-#define LiggghtsCouplingSimulationObserver_h
-
-#include "SimulationObserver.h"
-
-#include "lammps.h"
-#include "input.h"
-#include "atom.h"
-#include "modify.h"
-
-#include <memory>
-#include <vector>
-
-
-class SimulationObserver;
-namespace vf::parallel {class Communicator;}
-class LiggghtsCouplingWrapper;
-class Grid3D;
-class Block3D;
-struct IBdynamicsParticleData;
-class LBMUnitConverter;
-
-struct ParticleData {
-    typedef typename std::vector<std::array<double, 3>> ParticleDataArrayVector;
-    typedef typename std::vector<double> ParticleDataScalarVector;
-};
-
-class LiggghtsCouplingSimulationObserver : public SimulationObserver
-{
-public:
-    LiggghtsCouplingSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, SPtr<vf::parallel::Communicator> comm,
-                                LiggghtsCouplingWrapper &wrapper, int demSteps, SPtr<LBMUnitConverter> units);
-    virtual ~LiggghtsCouplingSimulationObserver();
-
-    void update(double actualTimeStep) override;
-
-    
-protected:
-    void setSpheresOnLattice();
-    
-    void setSingleSphere3D(double *x, double *v, double *omega, double r, int id /*, bool initVelFlag*/);
-    
-    double calcSolidFraction(double const dx_, double const dy_, double const dz_, double const r_);
-    
-    void setValues(IBdynamicsParticleData &p, int const id, double const sf, double const *v, double const dx, double const dy, double const dz, double const *omega);
-    
-    void setToZero(IBdynamicsParticleData &p);
-    
-    void getForcesFromLattice();
-    
-    void SumForceTorque3D(ParticleData::ParticleDataArrayVector &x, double *force, double *torque);
-
-    void addForce(int const partId, int const coord, double const value, double *force);
-
-    void addTorque(int const partId, int const coord, double const value, double *torque);
-
-private:
-    SPtr<vf::parallel::Communicator> comm;
-    LiggghtsCouplingWrapper &wrapper;
-    SPtr<LBMUnitConverter> units;
-    int demSteps;
-    //std::vector<std::vector<SPtr<Block3D>>> blockVector;
-    //int minInitLevel;
-    //int maxInitLevel;
-    //int gridRank;
-
-    double *force, *torque;
-};
-
-#endif
-
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp
deleted file mode 100644
index b9651628513343198190e3632c07a3f14e74d867..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseNoSlipBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseNoSlipBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BoundaryConditions.h"
-
-MultiphaseNoSlipBCStrategy::MultiphaseNoSlipBCStrategy()
-{
-   BCStrategy::type = BCStrategy::MultiphaseNoSlipBCStrategy;
-   BCStrategy::preCollision = false;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseNoSlipBCStrategy::~MultiphaseNoSlipBCStrategy()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> MultiphaseNoSlipBCStrategy::clone()
-{
-   SPtr<BCStrategy> bc(new MultiphaseNoSlipBCStrategy());
-   return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseNoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-   this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseNoSlipBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH)
-{
-	this->distributionsH = distributionsH;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseNoSlipBCStrategy::applyBC()
-{
-   real f[D3Q27System::ENDF+1];
-   real h[D3Q27System::ENDF+1];
-   real h2[D3Q27System::ENDF + 1];
-   //LBMReal feq[D3Q27System::ENDF+1];
-   //LBMReal heq[D3Q27System::ENDF+1];
-   distributions ->getPostCollisionDistribution(f, x1, x2, x3);
-   if (distributionsH2)
-       distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3);
-   distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
-  // LBMReal phi, vx1, vx2, vx3, p1;
-   
- //  D3Q27System::calcDensity(h, phi);
-   
- //  calcMacrosFct(f, p1, vx1, vx2, vx3);
- //  D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3);
- //  D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); 
-
-   for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
-   {
-      if (bcPtr->hasNoSlipBoundaryFlag(fdir))
-      {
-         //quadratic bounce back
-         const int invDir = D3Q27System::INVDIR[fdir];
-		 real fReturn = f[invDir];
-         //distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-         distributions->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB 
-         real hReturn = h[invDir];
-		// distributionsH->setPostCollisionDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-         distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB  
-         if (distributionsH2)
-         {
-             real h2Return = h2[invDir];
-             distributionsH2->setPostCollisionDistributionForDirection(h2Return, x1, x2, x3, invDir);//delay BB
-            // distributionsH2->setPostCollisionDistributionForDirection(h2Return, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
-
-         }
-      }
-   }
-}
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h
deleted file mode 100644
index 390c2952e43398e7437ea61d1bc11890d454b9bc..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseNoSlipBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseNoSlipBCStrategy_h__
-#define MultiphaseNoSlipBCStrategy_h__
-
-#include "BCStrategy.h"
-
-//! A class implements no-slip boundary condition for multiphase simulations
-class MultiphaseNoSlipBCStrategy : public BCStrategy
-{
-public:
-   MultiphaseNoSlipBCStrategy();
-   virtual ~MultiphaseNoSlipBCStrategy();
-   SPtr<BCStrategy> clone() override;
-   void addDistributions(SPtr<DistributionArray3D> distributions) override;
-   void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override;
-   void applyBC() override;
-};
-#endif // MultiphaseNoSlipBCStrategy_h__
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp
deleted file mode 100644
index 6f858e837e1d8eeea6c10927338c9a7a64890d32..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp
+++ /dev/null
@@ -1,499 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseNonReflectingOutflowBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseNonReflectingOutflowBCStrategy.h"
-#include "BoundaryConditions.h"
-#include "D3Q27System.h"
-#include "DistributionArray3D.h"
-
-MultiphaseNonReflectingOutflowBCStrategy::MultiphaseNonReflectingOutflowBCStrategy()
-{
-    BCStrategy::type = BCStrategy::NonReflectingOutflowBCStrategy;
-    BCStrategy::preCollision = true;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseNonReflectingOutflowBCStrategy::~MultiphaseNonReflectingOutflowBCStrategy()
-{
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> MultiphaseNonReflectingOutflowBCStrategy::clone()
-{
-    SPtr<BCStrategy> bc(new MultiphaseNonReflectingOutflowBCStrategy());
-    return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseNonReflectingOutflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-    this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseNonReflectingOutflowBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH)
-{
-    this->distributionsH = distributionsH;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseNonReflectingOutflowBCStrategy::addDistributionsH2(SPtr<DistributionArray3D> distributionsH2)
-{
-    this->distributionsH2 = distributionsH2;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseNonReflectingOutflowBCStrategy::applyBC()
-{
-    using namespace D3Q27System;
-//    using namespace UbMath;
-    using namespace vf::lbm::dir;
-    using namespace vf::basics::constant;
-
-    real f[ENDF + 1];
-    real ftemp[ENDF + 1];
-    real h[D3Q27System::ENDF + 1];
-    real htemp[ENDF + 1];
-    real h2[D3Q27System::ENDF + 1];
-    real h2temp[ENDF + 1];
-
-    int nx1 = x1;
-    int nx2 = x2;
-    int nx3 = x3;
-    int direction = -1;
-
-    // flag points in direction of fluid
-    if (bcPtr->hasDensityBoundaryFlag(dP00)) {
-        nx1 += 1;
-        direction = dP00;
-    } else if (bcPtr->hasDensityBoundaryFlag(dM00)) {
-        nx1 -= 1;
-        direction = dM00;
-    } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) {
-        nx2 += 1;
-        direction = d0P0;
-    } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) {
-        nx2 -= 1;
-        direction = d0M0;
-    } else if (bcPtr->hasDensityBoundaryFlag(d00P)) {
-        nx3 += 1;
-        direction = d00P;
-    } else if (bcPtr->hasDensityBoundaryFlag(d00M)) {
-        nx3 -= 1;
-        direction = d00M;
-    } else
-        UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
-
-    distributions->getPreCollisionDistribution(f, x1, x2, x3);
-    distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3);
-    distributionsH->getPreCollisionDistribution(h, x1, x2, x3);
-    distributionsH->getPreCollisionDistribution(htemp, nx1, nx2, nx3);
-    distributionsH2->getPreCollisionDistribution(h2, x1, x2, x3);
-    distributionsH2->getPreCollisionDistribution(h2temp, nx1, nx2, nx3);
-
-    real /* phi,*/ p1, vx1, vx2, vx3;
-
-    // D3Q27System::calcDensity(h, phi);
-
-    calcMacrosFct(f, p1, vx1, vx2, vx3);
-
-    switch (direction) {
-        case dP00:
-            f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00];
-            f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0];
-            f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0];
-            f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P];
-            f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M];
-            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP];
-            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP];
-            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM];
-            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM];
-
-            distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
-            distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
-            distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
-            distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
-            distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
-            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-
-            h[dP00] = htemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP00];
-            h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPP0];
-            h[dPM0] = htemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPM0];
-            h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0P];
-            h[dP0M] = htemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0M];
-            h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPP];
-            h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMP];
-            h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPM];
-            h[dPMM] = htemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMM];
-
-            distributionsH->setPreCollisionDistributionForDirection(h[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
-            distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
-            distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-
-            h2[dP00] = c1o2 * (h2temp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP00]);
-            h2[dPP0] = c1o2 * (h2temp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPP0]);
-            h2[dPM0] = c1o2 * (h2temp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPM0]);
-            h2[dP0P] = c1o2 * (h2temp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP0P]);
-            h2[dP0M] = c1o2 * (h2temp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP0M]);
-            h2[dPPP] = c1o2 * (h2temp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPPP]);
-            h2[dPMP] = c1o2 * (h2temp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPMP]);
-            h2[dPPM] = c1o2 * (h2temp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPPM]);
-            h2[dPMM] = c1o2 * (h2temp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPMM]);
-
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-
-            break;
-        case dM00:
-            f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00];
-            f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0];
-            f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0];
-            f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P];
-            f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M];
-            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP];
-            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP];
-            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM];
-            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM];
-
-            distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
-            distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
-            distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
-            distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
-            distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
-            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-
-            h[dM00] = htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM00];
-            h[dMP0] = htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMP0];
-            h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMM0];
-            h[dM0P] = htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0P];
-            h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0M];
-            h[dMPP] = htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPP];
-            h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMP];
-            h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPM];
-            h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMM];
-
-            distributionsH->setPreCollisionDistributionForDirection(h[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
-            distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
-            distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-
-            h2[dM00] = c1o2 * (htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM00]);
-            h2[dMP0] = c1o2 * (htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMP0]);
-            h2[dMM0] = c1o2 * (htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMM0]);
-            h2[dM0P] = c1o2 * (htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM0P]);
-            h2[dM0M] = c1o2 * (htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM0M]);
-            h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMPP]);
-            h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMMP]);
-            h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMPM]);
-            h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMMM]);
-
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-            break;
-        case d0P0:
-            f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0];
-            f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0];
-            f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0];
-            f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP];
-            f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM];
-            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP];
-            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP];
-            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM];
-            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM];
-
-            distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
-            distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
-            distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
-            distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
-            distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
-            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-
-            h[d0P0] = htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0P0];
-            h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPP0];
-            h[dMP0] = htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMP0];
-            h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PP];
-            h[d0PM] = htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PM];
-            h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPP];
-            h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPP];
-            h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPM];
-            h[dMPM] = htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPM];
-
-            distributionsH->setPreCollisionDistributionForDirection(h[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
-            distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
-            distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-
-            h2[d0P0] = c1o2 * (htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0P0]);
-            h2[dPP0] = c1o2 * (htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPP0]);
-            h2[dMP0] = c1o2 * (htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMP0]);
-            h2[d0PP] = c1o2 * (htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0PP]);
-            h2[d0PM] = c1o2 * (htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0PM]);
-            h2[dPPP] = c1o2 * (htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPPP]);
-            h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMPP]);
-            h2[dPPM] = c1o2 * (htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPPM]);
-            h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMPM]);
-
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-
-            break;
-        case d0M0:
-            f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0];
-            f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0];
-            f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0];
-            f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP];
-            f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM];
-            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP];
-            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP];
-            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM];
-            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM];
-
-            distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
-            distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
-            distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
-            distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
-            distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
-            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-
-            h[d0M0] = htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0M0];
-            h[dPM0] = htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPM0];
-            h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMM0];
-            h[d0MP] = htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MP];
-            h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MM];
-            h[dPMP] = htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMP];
-            h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMP];
-            h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMM];
-            h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMM];
-
-            distributionsH->setPreCollisionDistributionForDirection(h[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
-            distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
-            distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-
-            h2[d0M0] = c1o2 * (htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0M0]);
-            h2[dPM0] = c1o2 * (htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPM0]);
-            h2[dMM0] = c1o2 * (htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMM0]);
-            h2[d0MP] = c1o2 * (htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0MP]);
-            h2[d0MM] = c1o2 * (htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0MM]);
-            h2[dPMP] = c1o2 * (htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPMP]);
-            h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMMP]);
-            h2[dPMM] = c1o2 * (htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPMM]);
-            h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMMM]);
-
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-
-            break;
-        case d00P:
-            f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P];
-            f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P];
-            f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P];
-            f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP];
-            f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP];
-            f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP];
-            f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP];
-            f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP];
-            f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP];
-
-            distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
-            distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
-            distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
-            distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
-            distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
-            distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-            distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-            distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-            distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-
-            h[d00P] = htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d00P];
-            h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dP0P];
-            h[dM0P] = htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dM0P];
-            h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0PP];
-            h[d0MP] = htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0MP];
-            h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPPP];
-            h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMPP];
-            h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPMP];
-            h[dMMP] = htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMMP];
-
-            distributionsH->setPreCollisionDistributionForDirection(h[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
-            distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
-            distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
-            distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
-            distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-
-            h2[d00P] = c1o2 * (htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d00P]);
-            h2[dP0P] = c1o2 * (htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dP0P]);
-            h2[dM0P] = c1o2 * (htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dM0P]);
-            h2[d0PP] = c1o2 * (htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d0PP]);
-            h2[d0MP] = c1o2 * (htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d0MP]);
-            h2[dPPP] = c1o2 * (htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dPPP]);
-            h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dMPP]);
-            h2[dPMP] = c1o2 * (htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dPMP]);
-            h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dMMP]);
-
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-
-            break;
-        case d00M:
-            f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M];
-            f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M];
-            f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M];
-            f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM];
-            f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM];
-            f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM];
-            f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM];
-            f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM];
-            f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM];
-
-            distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
-            distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
-            distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
-            distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
-            distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
-            distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-            distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-            distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-            distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-
-            h[d00M] = htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d00M];
-            h[dP0M] = htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dP0M];
-            h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dM0M];
-            h[d0PM] = htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0PM];
-            h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0MM];
-            h[dPPM] = htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPPM];
-            h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMPM];
-            h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPMM];
-            h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMMM];
-
-            distributionsH->setPreCollisionDistributionForDirection(h[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
-            distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
-            distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
-            distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
-            distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-            distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-            distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-
-            h2[d00M] = c1o2 * (htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d00M]);
-            h2[dP0M] = c1o2 * (htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dP0M]);
-            h2[dM0M] = c1o2 * (htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dM0M]);
-            h2[d0PM] = c1o2 * (htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d0PM]);
-            h2[d0MM] = c1o2 * (htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d0MM]);
-            h2[dPPM] = c1o2 * (htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dPPM]);
-            h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dMPM]);
-            h2[dPMM] = c1o2 * (htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dPMM]);
-            h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dMMM]);
-
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-            distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-
-            break;
-        default:
-            UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
-    }
-}
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h
deleted file mode 100644
index 3aae2ce0384e67cd0024106fb7de3d9b1b1dd7a8..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseNonReflectingOutflowBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseNonReflectingOutflowBCStrategy_h__
-#define MultiphaseNonReflectingOutflowBCStrategy_h__
-
-#include "BCStrategy.h"
-//! A class implements non reflecting outflow boundary condition for multiphase simulations
-class MultiphaseNonReflectingOutflowBCStrategy : public BCStrategy
-{
-public:
-    MultiphaseNonReflectingOutflowBCStrategy();
-    ~MultiphaseNonReflectingOutflowBCStrategy();
-    SPtr<BCStrategy> clone();
-    void addDistributions(SPtr<DistributionArray3D> distributions);
-    void addDistributionsH(SPtr<DistributionArray3D> distributionsH);
-    void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2);
-    void applyBC();
-};
-#endif // MultiphaseNonReflectingOutflowBCStrategy_h__
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp
deleted file mode 100644
index adf21a72e9c3f4b58487af125e661ea787694a16..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphasePressureBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphasePressureBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BoundaryConditions.h"
-
-MultiphasePressureBCStrategy::MultiphasePressureBCStrategy()
-{
-   BCStrategy::type = BCStrategy::MultiphasePressureBCStrategy;
-   BCStrategy::preCollision = false;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphasePressureBCStrategy::~MultiphasePressureBCStrategy()
-{
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> MultiphasePressureBCStrategy::clone()
-{
-   SPtr<BCStrategy> bc(new MultiphasePressureBCStrategy());
-   return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphasePressureBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-   this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphasePressureBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH)
-{
-	this->distributionsH = distributionsH;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphasePressureBCStrategy::addDistributionsH2(SPtr<DistributionArray3D> distributionsH)
-{
-    this->distributionsH2 = distributionsH;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphasePressureBCStrategy::applyBC()
-{
-   using namespace vf::lbm::dir;
-
-   LBMReal f[D3Q27System::ENDF+1];
-   LBMReal h[D3Q27System::ENDF+1];
-   LBMReal h2[D3Q27System::ENDF + 1];
-   LBMReal feq[D3Q27System::ENDF+1];
-   //LBMReal heq[D3Q27System::ENDF+1];
-   LBMReal htemp[D3Q27System::ENDF+1];
-   
-   distributions->getPostCollisionDistribution(f, x1, x2, x3);
-   distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
-   if (distributionsH2)
-       distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3);
-   LBMReal phi, vx1, vx2, vx3, p1, phiBC;
-   
-   D3Q27System::calcDensity(h, phi);
-
-   calcMacrosFct(f, p1, vx1, vx2, vx3);
-   p1 = 0.0;
-
-   phiBC = bcPtr->getBoundaryPhaseField();
-   LBMReal rhoBC = bcPtr->getBoundaryDensity();
-   D3Q27System::calcIncompFeq(feq, rhoBC, vx1, vx2, vx3);
-
-   D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3);
-
-   for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {
-       if (bcPtr->hasDensityBoundaryFlag(fdir)) {
-           LBMReal ftemp = -f[D3Q27System::INVDIR[fdir]] + feq[fdir] + feq[D3Q27System::INVDIR[fdir]];
-           distributions->setPostCollisionDistributionForDirection(ftemp, x1, x2, x3, D3Q27System::INVDIR[fdir]);
-
-           LBMReal hReturn = -h[D3Q27System::INVDIR[fdir]] + htemp[fdir] + htemp[D3Q27System::INVDIR[fdir]];
-           distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, D3Q27System::INVDIR[fdir]);
-       }
-   }
-}
-
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h
deleted file mode 100644
index cb6c6cf5e8570b40800a7d2bf1c076307d441738..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h
+++ /dev/null
@@ -1,52 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphasePressureBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphasePressureBCStrategy_h__
-#define MultiphasePressureBCStrategy_h__
-
-#include "BCStrategy.h"
-//! A class implements velocity boundary condition for multiphase simulations
-class MultiphasePressureBCStrategy : public BCStrategy
-{
-public:
-   MultiphasePressureBCStrategy();
-   ~MultiphasePressureBCStrategy();
-   SPtr<BCStrategy> clone() override;
-   void addDistributions(SPtr<DistributionArray3D> distributions) override;
-   void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override;
-   void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) override;
-   void applyBC() override;
-};
-
-#endif // MultiphasePressureBCStrategy_h__
-
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp
deleted file mode 100644
index a7d9d1c10a0495b7c33c3ded481e4c27c10262bd..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseSlipBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseSlipBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BoundaryConditions.h"
-
-MultiphaseSlipBCStrategy::MultiphaseSlipBCStrategy()
-{
-   BCStrategy::type = BCStrategy::SlipBCStrategy;
-   BCStrategy::preCollision = false;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseSlipBCStrategy::~MultiphaseSlipBCStrategy()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> MultiphaseSlipBCStrategy::clone()
-{
-   SPtr<BCStrategy> bc(new MultiphaseSlipBCStrategy());
-   return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-   this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseSlipBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH)
-{
-	this->distributionsH = distributionsH;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseSlipBCStrategy::applyBC()
-{
-    using namespace vf::lbm::dir;
-
-   real f[D3Q27System::ENDF+1];
-   real h[D3Q27System::ENDF+1];
-   real feq[D3Q27System::ENDF+1];
-   real heq[D3Q27System::ENDF+1];
-   distributions->getPostCollisionDistribution(f, x1, x2, x3);
-   distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
-
-   real p1, vx1, vx2, vx3, phi, rho;
-
-   D3Q27System::calcDensity(h, phi);
-   //real collFactorM = collFactorL + (collFactorL - collFactorG)*(phi - phiH)/(phiH - phiL);
-
-
-   calcMacrosFct(f, p1, vx1, vx2, vx3);
-   D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3);
-   D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); 
-
-   UbTupleFloat3 normale = bcPtr->getNormalVector();
-   real amp = vx1*val<1>(normale)+vx2*val<2>(normale)+vx3*val<3>(normale);
-
-   vx1 = vx1 - amp * val<1>(normale); //normale zeigt von struktur weg!
-   vx2 = vx2 - amp * val<2>(normale); //normale zeigt von struktur weg!
-   vx3 = vx3 - amp * val<3>(normale); //normale zeigt von struktur weg!
-
-   //rho = 1.0+drho*compressibleFactor;
-   rho = 1.0; // In multiphase model set to 1.0!
-
-   for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
-   {
-      if (bcPtr->hasSlipBoundaryFlag(fdir))
-      {
-         //quadratic bounce back
-         const int invDir = D3Q27System::INVDIR[fdir];
-         real q = bcPtr->getQ(invDir);// m+m q=0 stabiler
-         //vx3=0;
-         real velocity = vf::basics::constant::c0o1;
-         switch (invDir)
-         {
-         case dP00: velocity = (vf::basics::constant::c4o9*(+vx1)); break;      //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3)
-         case dM00: velocity = (vf::basics::constant::c4o9*(-vx1)); break;      //z.B. aus paper manfred MRT LB models in three dimensions (2002)   
-         case d0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break;
-         case d0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break;
-         case d00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break;
-         case d00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break;
-         case dPP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break;
-         case dMM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break;
-         case dPM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break;
-         case dMP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break;
-         case dP0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break;
-         case dM0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break;
-         case dP0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break;
-         case dM0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break;
-         case d0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break;
-         case d0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break;
-         case d0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break;
-         case d0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break;
-         case dPPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break;
-         case dMMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break;
-         case dPPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break;
-         case dMMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break;
-         case dPMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break;
-         case dMPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break;
-         case dPMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break;
-         case dMPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break;
-         default: throw UbException(UB_EXARGS, "unknown error");
-         }
-         real fReturn = ((vf::basics::constant::c1o1-q)/(vf::basics::constant::c1o1+q))*((f[invDir]-feq[invDir])/(vf::basics::constant::c1o1-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho)/(vf::basics::constant::c1o1+q));
-         distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-
-		 //real hReturn = ((1.0-q)/(1.0+q))*((h[invDir]-heq[invDir])/(1.0-collFactorPh)+heq[invDir])+((q/(1.0+q))*(h[invDir]+h[fdir]));
-		 real hReturn = h[invDir];
-		 distributionsH->setPostCollisionDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-      }
-   }
-}
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h
deleted file mode 100644
index 1eb25a958505eb2fca2509763acf2f14bdf93414..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseSlipBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseSlipBCStrategy_h__
-#define MultiphaseSlipBCStrategy_h__
-
-#include "BCStrategy.h"
-
-//! A class implements slip boundary condition for multiphase simulation
-class MultiphaseSlipBCStrategy : public BCStrategy
-{
-public:
-   MultiphaseSlipBCStrategy();
-   virtual ~MultiphaseSlipBCStrategy();
-   SPtr<BCStrategy> clone() override;
-   void addDistributions(SPtr<DistributionArray3D> distributions) override;
-   void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override;
-   void applyBC() override;
-
-};
-#endif // SlipBCStrategy_h__
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp
deleted file mode 100644
index 80e2922bad07885266f504115fd6c3e0a9b2232b..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp
+++ /dev/null
@@ -1,345 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseVelocityBC.cpp
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseVelocityBC.h"
-#include "basics/utilities/UbLogger.h"
-#include "basics/utilities/UbMath.h"
-#include "basics/utilities/UbTuple.h"
-
-using namespace std;
-
-
-MultiphaseVelocityBC::MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const BCFunction& velVxBC)
-{
-   if(vx1) this->vx1BCs.push_back(velVxBC);
-   if(vx2) this->vx2BCs.push_back(velVxBC);
-   if(vx3) this->vx3BCs.push_back(velVxBC);
-   this->init();
-}
-/*==========================================================*/
-MultiphaseVelocityBC::MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function, const real& phiBC, const real& startTime, const real& endTime )
-{
-   if(vx1) this->vx1BCs.push_back(BCFunction(function,startTime,endTime));
-   if(vx2) this->vx2BCs.push_back(BCFunction(function,startTime,endTime));
-   if(vx3) this->vx3BCs.push_back(BCFunction(function,startTime,endTime));
-   this->phiBC = phiBC;
-   this->init();
-   //this->init(vx3BCs);
-
-}
-/*==========================================================*/
-MultiphaseVelocityBC::MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function1, const mu::Parser& function2, const mu::Parser& function3, const real& phiBC, const real& startTime, const real& endTime )
-{
-   if(vx1) this->vx1BCs.push_back(BCFunction(function1,startTime,endTime));
-   if(vx2) this->vx2BCs.push_back(BCFunction(function2,startTime,endTime));
-   if(vx3) this->vx3BCs.push_back(BCFunction(function3,startTime,endTime));
-   this->phiBC = phiBC;
-   this->init();
-}
-/*==========================================================*/
-MultiphaseVelocityBC::MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const string& functionstring, const real& startTime, const real& endTime )
-{
-   if(vx1) this->vx1BCs.push_back(BCFunction(functionstring,startTime,endTime));
-   if(vx2) this->vx2BCs.push_back(BCFunction(functionstring,startTime,endTime));
-   if(vx3) this->vx3BCs.push_back(BCFunction(functionstring,startTime,endTime));
-   this->init();
-}
-/*==========================================================*/
-MultiphaseVelocityBC::MultiphaseVelocityBC(const BCFunction& velBC, bool x1Dir, bool x2Dir, bool x3Dir)
-{
-   if(x1Dir) this->vx1BCs.push_back(velBC);
-   if(x2Dir) this->vx2BCs.push_back(velBC);
-   if(x3Dir) this->vx3BCs.push_back(velBC);
-   this->init();
-}
-/*==========================================================*/
-MultiphaseVelocityBC::MultiphaseVelocityBC(const BCFunction& velVx1BC, const BCFunction& velVx2BC, const BCFunction& velVx3BC)
-{
-   if( velVx1BC.getEndTime()!=-Ub::inf ) this->vx1BCs.push_back(velVx1BC);
-   if( velVx2BC.getEndTime()!=-Ub::inf ) this->vx2BCs.push_back(velVx2BC);
-   if( velVx3BC.getEndTime()!=-Ub::inf ) this->vx3BCs.push_back(velVx3BC);
-   this->init();
-}
-/*==========================================================*/
-MultiphaseVelocityBC::MultiphaseVelocityBC(const vector< BCFunction >& velVx1BCs, const vector< BCFunction >& velVx2BCs, const vector< BCFunction >& velVx3BCs)
-{
-   this->vx1BCs = velVx1BCs;
-   this->vx2BCs = velVx2BCs;
-   this->vx3BCs = velVx3BCs;
-   this->init();
-}
-/*==========================================================*/
-MultiphaseVelocityBC::MultiphaseVelocityBC(const real& vx1, const real& vx1StartTime, const real& vx1EndTime,
-                                               const real& vx2, const real& vx2StartTime, const real& vx2EndTime,
-                                               const real& vx3, const real& vx3StartTime, const real& vx3EndTime )
-{
-   this->vx1BCs.push_back(BCFunction(vx1,vx1StartTime,vx1EndTime));
-   this->vx2BCs.push_back(BCFunction(vx2,vx2StartTime,vx2EndTime));
-   this->vx3BCs.push_back(BCFunction(vx3,vx3StartTime,vx3EndTime));
-   this->init();
-}
-/*==========================================================*/
-MultiphaseVelocityBC::MultiphaseVelocityBC(const string& vx1Function, const real& vx1StartTime, const real& vx1EndTime,
-                                               const string& vx2Function, const real& vx2StartTime, const real& vx2EndTime,
-                                               const string& vx3Function, const real& vx3StartTime, const real& vx3EndTime ) 
-{
-   if(vx1Function.size()) this->vx1BCs.push_back(BCFunction(vx1Function,vx1StartTime,vx1EndTime));
-   if(vx2Function.size()) this->vx2BCs.push_back(BCFunction(vx2Function,vx2StartTime,vx2EndTime));
-   if(vx3Function.size()) this->vx3BCs.push_back(BCFunction(vx3Function,vx3StartTime,vx3EndTime));
-   this->init();
-}
-/*==========================================================*/
-void MultiphaseVelocityBC::setNewVelocities(const real& vx1, const real& vx1StartTime, const real& vx1EndTime,
-                                              const real& vx2, const real& vx2StartTime, const real& vx2EndTime,
-                                              const real& vx3, const real& vx3StartTime, const real& vx3EndTime )
-{
-   this->clear();
-   this->vx1BCs.push_back(BCFunction(vx1,vx1StartTime,vx1EndTime));
-   this->vx2BCs.push_back(BCFunction(vx2,vx2StartTime,vx2EndTime));
-   this->vx3BCs.push_back(BCFunction(vx3,vx3StartTime,vx3EndTime));
-   this->init();
-}
-/*==========================================================*/
-void MultiphaseVelocityBC::init()
-{
-   this->unsetTimeDependent();
-   
-   this->timeStep = 0.0;
-
-   this->x1 = 0.0;
-   this->x2 = 0.0;
-   this->x3 = 0.0;
-
-   this->tmpVx1Function = NULL;
-   this->tmpVx2Function = NULL;
-   this->tmpVx3Function = NULL;
-
-   try //initilialization and validation of functions
-   {
-      this->init(vx1BCs);
-      this->init(vx2BCs);
-      this->init(vx3BCs);
-   }
-   catch(mu::Parser::exception_type& e){ stringstream error; error<<"mu::parser exception occurs, message("<<e.GetMsg()<<"), formula("<<e.GetExpr()+"), token("+e.GetToken()<<")"
-                                          <<", pos("<<e.GetPos()<<"), error code("<<e.GetCode(); throw UbException(error.str()); }
-   catch(...)                          { throw UbException(UB_EXARGS,"unknown exception" ); }
-}
-/*==========================================================*/
-void MultiphaseVelocityBC::init(std::vector<BCFunction>& vxBCs)
-{
-   for(size_t pos=0; pos<vxBCs.size(); ++pos)
-   {
-      if( !(    UbMath::equal( BCFunction::INFCONST, vxBCs[pos].getEndTime() )
-             && UbMath::greaterEqual( this->timeStep,  vxBCs[pos].getStartTime()  ) ) )
-      {
-         this->setTimeDependent();
-      }
-	  
-      vxBCs[pos].getFunction().DefineVar("t" , &this->timeStep);
-      vxBCs[pos].getFunction().DefineVar("x1", &this->x1      );
-      vxBCs[pos].getFunction().DefineVar("x2", &this->x2      );
-      vxBCs[pos].getFunction().DefineVar("x3", &this->x3      );
-
-      vxBCs[pos].getFunction().Eval(); //<-- validation
-   }
-}
-/*==========================================================*/
-void MultiphaseVelocityBC::init(const D3Q27Interactor* const& interactor, const real& time)
-{
-   this->timeStep       = time;
-   this->tmpVx1Function = this->tmpVx2Function = this->tmpVx3Function = NULL;
-
-   //aktuelle velocityfunction bestimmen
-   real maxEndtime = -Ub::inf;
-   
-   for(size_t pos=0; pos<vx1BCs.size(); ++pos)
-   {
-      if( UbMath::equal(vx1BCs[pos].getEndTime(),BCFunction::INFTIMEDEPENDENT) ) maxEndtime=Ub::inf;
-      maxEndtime = UbMath::max(maxEndtime,vx1BCs[pos].getStartTime(),vx1BCs[pos].getEndTime()); //startTime abfragen, da  INFCONST=-10
-      
-      if( UbMath::greaterEqual(this->timeStep,vx1BCs[pos].getStartTime()) ) 
-      {
-          if(   UbMath::lessEqual( this->timeStep     , vx1BCs[pos].getEndTime()     )
-             || UbMath::equal(     vx1BCs[pos].getEndTime(), (real)BCFunction::INFCONST        )
-             || UbMath::equal(     vx1BCs[pos].getEndTime(), (real)BCFunction::INFTIMEDEPENDENT)  )
-         {
-            tmpVx1Function = &vx1BCs[pos].getFunction();
-            break;
-         }
-      }
-   }
-   for(size_t pos=0; pos<vx2BCs.size(); ++pos)
-   {
-      if( UbMath::equal(vx2BCs[pos].getEndTime(),BCFunction::INFTIMEDEPENDENT)) maxEndtime=Ub::inf;
-      maxEndtime = UbMath::max(maxEndtime,vx2BCs[pos].getStartTime(),vx2BCs[pos].getEndTime()); //startTime abfragen, da  INFCONST=-10
-
-      if( UbMath::greaterEqual(this->timeStep,vx2BCs[pos].getStartTime()) ) 
-      {
-         if(   UbMath::lessEqual( this->timeStep     , vx2BCs[pos].getEndTime()      )
-            || UbMath::equal(     vx2BCs[pos].getEndTime(), (real)BCFunction::INFCONST         )
-            || UbMath::equal(     vx2BCs[pos].getEndTime(), (real)BCFunction::INFTIMEDEPENDENT )  )
-         {
-            tmpVx2Function = &vx2BCs[pos].getFunction();
-            break;
-         }
-      }
-   }
-   for(size_t pos=0; pos<vx3BCs.size(); ++pos)
-   {
-      if( UbMath::equal(vx3BCs[pos].getEndTime(),BCFunction::INFTIMEDEPENDENT)) maxEndtime=Ub::inf;
-      maxEndtime = UbMath::max(maxEndtime,vx3BCs[pos].getStartTime(),vx3BCs[pos].getEndTime()); //startTime abfragen, da  INFCONST=-10
-
-      if( UbMath::greaterEqual(this->timeStep,vx3BCs[pos].getStartTime()) ) 
-      {
-         if(   UbMath::lessEqual( this->timeStep     , vx3BCs[pos].getEndTime()      )
-            || UbMath::equal(     vx3BCs[pos].getEndTime(), (real)BCFunction::INFCONST         )
-            || UbMath::equal(     vx3BCs[pos].getEndTime(), (real)BCFunction::INFTIMEDEPENDENT )  )
-         {
-            tmpVx3Function = &vx3BCs[pos].getFunction();
-            break;
-         }
-      }
-   }
-
-   if( UbMath::greaterEqual(time,maxEndtime) ) 
-   {
-      if( !this->isTimePeriodic() ) this->unsetTimeDependent();
-      else //bei peridoic die interavalle neu setzen:
-      {
-         if( UbMath::equal(maxEndtime,BCFunction::INFCONST) )  {
-              for (size_t pos = 0; pos < vx1BCs.size(); ++pos) {
-                  vx1BCs[pos].setStartTime(vx1BCs[pos].getStartTime() + timeStep);
-                  vx1BCs[pos].setEndTime(vx1BCs[pos].getEndTime() + timeStep);
-              }
-         }
-         if( UbMath::equal(maxEndtime,BCFunction::INFCONST) ) {
-             for (size_t pos = 0; pos < vx2BCs.size(); ++pos) {
-                 vx2BCs[pos].setStartTime(vx2BCs[pos].getStartTime() + timeStep);
-                 vx2BCs[pos].setEndTime(vx2BCs[pos].getEndTime() + timeStep);
-             }
-         }
-
-         if( UbMath::equal(maxEndtime,BCFunction::INFCONST) ) {
-             for (size_t pos = 0; pos < vx3BCs.size(); ++pos) {
-                 vx3BCs[pos].setStartTime(vx3BCs[pos].getStartTime() + timeStep);
-                 vx3BCs[pos].setEndTime(vx3BCs[pos].getEndTime() + timeStep);
-             }         
-         }
-        this->init(interactor,time);
-      }
-   }
-
-   UBLOG(logDEBUG4,"D3Q27VelocityBC::init(time="<<time<<") "
-                   <<", vx1= \""<<(tmpVx1Function ? tmpVx1Function->GetExpr() : "-")<<"\""
-                   <<", vx2= \""<<(tmpVx2Function ? tmpVx2Function->GetExpr() : "-")<<"\""
-                   <<", vx3= \""<<(tmpVx3Function ? tmpVx3Function->GetExpr() : "-")<<"\""
-                   <<", timedependent="<<boolalpha<<this->isTimeDependent()   );
-}
-/*==========================================================*/
-void MultiphaseVelocityBC::update( const D3Q27Interactor* const& interactor, const real& time ) 
-{
-   this->init(interactor,time);
-}
-/*==========================================================*/
-void MultiphaseVelocityBC::adaptBCForDirection( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const real& worldX1, const real& worldX2, const real& worldX3, const real& q, const int& fdirection, const real& time )
-{
-   bc->setVelocityBoundaryFlag(D3Q27System::INVDIR[fdirection],secondaryBcOption);
-   bc->setQ((real)q,fdirection);
-}
-/*==========================================================*/
-void MultiphaseVelocityBC::adaptBC( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const real& worldX1, const real& worldX2, const real& worldX3, const real& time ) 
-{
-   this->setNodeVelocity(interactor,bc,worldX1,worldX2,worldX3,time);
-   bc->setBCStrategyType(algorithmType);
-}
-/*==========================================================*/
-void MultiphaseVelocityBC::setNodeVelocity( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const real& worldX1, const real& worldX2, const real& worldX3, const real& timestep) 
-{
-   //Geschwindigkeiten setzen
-   try
-   {
-      //PunktKoordinaten bestimmen
-      this->x1 = worldX1;
-      this->x2 = worldX2;
-      this->x3 = worldX3;
-      this->timeStep = timestep;
-
-      if(tmpVx1Function) bc->setBoundaryVelocityX1((real)tmpVx1Function->Eval());  
-      if(tmpVx2Function) bc->setBoundaryVelocityX2((real)tmpVx2Function->Eval());
-      if(tmpVx3Function) bc->setBoundaryVelocityX3((real)tmpVx3Function->Eval());
-	  bc->setBoundaryPhaseField(this->phiBC);
-   }
-   catch(mu::Parser::exception_type& e){ stringstream error; error<<"mu::parser exception occurs, message("<<e.GetMsg()<<"), formula("<<e.GetExpr()+"), token("+e.GetToken()<<")"
-                                         <<", pos("<<e.GetPos()<<"), error code("<<e.GetCode(); throw UbException(error.str()); }
-   catch(...)                          { throw UbException(UB_EXARGS,"unknown exception" ); }
-}
-/*==========================================================*/
-UbTupleDouble3 MultiphaseVelocityBC::getVelocity(const real& x1, const real& x2, const real& x3, const real& timeStep) const
-{
-   real vx1 = vf::basics::constant::c0o1;
-   real vx2 = vf::basics::constant::c0o1;
-   real vx3 = vf::basics::constant::c0o1;
-   this->x1 = x1;
-   this->x2 = x2;
-   this->x3 = x3;
-   this->timeStep = timeStep;
-	
-   if(tmpVx1Function) vx1 = tmpVx1Function->Eval();  
-   if(tmpVx2Function) vx2 = tmpVx2Function->Eval();
-   if(tmpVx3Function) vx3 = tmpVx3Function->Eval();
-    
-   return UbTupleDouble3(vx1,vx2,vx3);
-}
-/*==========================================================*/
-string MultiphaseVelocityBC::toString()
-{
-   stringstream info;
-   info<<"D3Q27VelocityBC:\n";
-   info<<" #vx1-functions = "<<(int)vx1BCs.size()<<endl;
-   info<<" #vx2-functions = "<<(int)vx2BCs.size()<<endl;
-   info<<" #vx3-functions = "<<(int)vx3BCs.size()<<endl;
-   info<<" protected variables: x1, x2, x3, t"<<endl;
-   
-   const vector<BCFunction>* bcvecs[3] = { &vx1BCs, &vx2BCs, &vx3BCs };
-   for(int i=0; i<3; i++)
-   {
-      for(size_t pos=0; pos<bcvecs[i]->size(); ++pos)
-      {
-         info<<"\n   vx"<<(i+1)<<"-function nr."<<pos<<":"<<endl;
-         info<<(*bcvecs[i])[pos]<<endl;
-      }
-   }
-   return info.str();
-}
-
-
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.h
deleted file mode 100644
index 8618d797245a641b8c6ce7fc30fee46a3bfeed22..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.h
+++ /dev/null
@@ -1,169 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseVelocityBC.h
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-#ifndef MultiphaseVelocityBC_H
-#define MultiphaseVelocityBC_H
-
-#include <iostream>
-#include <string>
-#include <sstream>
-#include <vector>
-
-#include <basics/utilities/UbInfinity.h>
-#include <basics/utilities/UbFileOutput.h>
-#include <basics/utilities/UbFileInput.h>
-
-class UbFileOutput;
-class UbFileInput;
-
-#include <BC.h>
-#include <BCFunction.h>
-
-//! \brief A class provides an interface for velocity boundary condition for multiphase simulation in grid generator.
-
-//! \details
-//! Example:
-//! \code{.cpp}  vector<BCFunction> vx1BCs,vx2BCs,vx3BCs;
-//!        vx1BCs.push_back(BCFunction(0.01 , 0  , 100) );   //t=[0  ..100[ -> vx1 = 0.01
-//!        vx1BCs.push_back(BCFunction(0.004, 100, 200) );   //t=[100..200[ -> vx1 = 0.004
-//!        vx1BCs.push_back(BCFunction(0.03 , 200, 400) );   //t=[200..400] -> vx1 = 0.03
-//!
-//!        vx2BCs.push_back(BCFunction(0.02 , 0  , 200) );   //t=[0  ..200[ -> vx2 = 0.02
-//!        vx2BCs.push_back(BCFunction(0.002, 200, 300) );   //t=[200..300[ -> vx2 = 0.002
-//!        vx2BCs.push_back(BCFunction(0.043, 300, 600) );   //t=[300..600] -> vx2 = 0.043
-//!
-//!        VelocityBC BC(vx1BCs,vx2BCs,vx3BCs);
-//!        BC.setTimePeriodic(); //->  t=[0  ..100[ -> vx1 = 0.01
-//!                                     //    t=[100..200[ -> vx1 = 0.004
-//!                                     //    t=[200..400[ -> vx1 = 0.03
-//!                                     //    t=[400..500[ -> vx1 = 0.01
-//!                                     //    t=[500..600[ -> vx1 = 0.004
-//!                                     //    t=[600..800[ -> vx1 = 0.03  ...
-//!                                     //    t=[0  ..200[ -> vx2 = 0.02
-//!                                     //    t=[200..300[ -> vx2 = 0.002
-//!                                     //    t=[300..600] -> vx2 = 0.043
-//!                                     //    t=[600..800[ -> vx2 = 0.02
-//!                                     //    t=[800..900[ -> vx2 = 0.002
-//!                                     //    t=[900..1200]-> vx2 = 0.043  ...
-//! \endcode
-//! Example of parabolic inflow:
-//! \code{.cpp}
-//!    mu::Parser fct;
-//!    fct.SetExpr("max(vmax*(1.0-4.0*((x2-x2_vmax)^2+(x3-x3_vmax)^2)/H^2),0.0)"); //paraboloid (with vmax for
-//!    (0/x2_vmax/x3_vmax) fct.DefineConst("x2Vmax", 0.0            ); //x2-Pos for vmax fct.DefineConst("x3Vmax", 0.0
-//!    ); //x3-Pos for vmax fct.DefineConst("H"     , diameterOfPipe); fct.DefineConst("vmax"  , vmax           );
-//!    VelocityBC velBC(true, false ,false ,fct, 0, BCFunction::INFCONST);
-//! \endcode 
-
-class MultiphaseVelocityBC : public BC
-{
-public:
-   //constructors
-   MultiphaseVelocityBC() { this->init(); }
-   
-   MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const BCFunction& velVxBC );
-
-   MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function, const real& phiBC, const real& startTime, const real& endTime  );
-
-   MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function1, const mu::Parser& function2, const mu::Parser& function3, const real& phiBC, const real& startTime, const real& endTime );
-   
-   MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const std::string& functionstring, const real& startTime, const real& endTime );
-
-   MultiphaseVelocityBC(const BCFunction& velBC, bool x1Dir, bool x2Dir, bool x3Dir);
-
-   MultiphaseVelocityBC(const BCFunction& velVx1BC, const BCFunction& velVx2BC, const BCFunction& velVx3BC);
-
-   MultiphaseVelocityBC(const std::vector< BCFunction >& velVx1BCs, const std::vector< BCFunction >& velVx2BCs, const std::vector< BCFunction >& velVx3BCs);
-
-   MultiphaseVelocityBC(const real& vx1, const real& vx1StartTime, const real& vx1EndTime,
-                          const real& vx2, const real& vx2StartTime, const real& vx2EndTime,
-                          const real& vx3, const real& vx3StartTime, const real& vx3EndTime);
-
-   MultiphaseVelocityBC(const std::string& vx1Function, const real& vx1StartTime, const real& vx1EndTime,
-                          const std::string& vx2Function, const real& vx2StartTime, const real& vx2EndTime,
-                          const std::string& vx3Function, const real& vx3StartTime, const real& vx3EndTime ); 
-
-   //methods
-   void setTimePeriodic()    { (this->type |=   TIMEPERIODIC); }
-   void unsetTimePeriodic()  { (this->type &=  ~TIMEPERIODIC); }
-   bool isTimePeriodic()     { return ((this->type & TIMEPERIODIC) ==  TIMEPERIODIC); }
-
-   //folgendes ist fuer moving objects gedadacht... 
-   void setNewVelocities(const real& vx1, const real& vx1StartTime, const real& vx1EndTime,
-                         const real& vx2, const real& vx2StartTime, const real& vx2EndTime,
-                         const real& vx3, const real& vx3StartTime, const real& vx3EndTime);
-
-      
-   //------------- implements D3Q27BoundaryConditionAdapter ----- start
-   std::string toString();
-   
-   void init(const D3Q27Interactor* const& interactor, const real& time=0);
-   void update(const D3Q27Interactor* const& interactor, const real& time=0);
-
-   void adaptBCForDirection(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> bc, const real &worldX1,
-                            const real &worldX2, const real &worldX3, const real &q, const int &fdirection,
-                            const real &time = 0);
-   void adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> bc, const real &worldX1,
-                const real &worldX2, const real &worldX3, const real &time = 0);
-
-   //------------- implements D3Q27BoundaryConditionAdapter ----- end
-
-   UbTupleDouble3 getVelocity(const real& x1, const real& x2, const real& x3, const real& timeStep) const;
-
-
-protected:
-   void init();
-   void init(std::vector<BCFunction>& vxBCs);
-
-   //time dependency wird automatisch ueber D3Q27BCFunction Intervalle ermittelt!
-   void setTimeDependent()   { (this->type |=   TIMEDEPENDENT); }
-   void unsetTimeDependent() { (this->type &=  ~TIMEDEPENDENT); }
-
-   void clear() { vx1BCs.clear(); vx2BCs.clear();  vx3BCs.clear(); this->init(); }
-   void setNodeVelocity(const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const real& worldX1, const real& worldX2, const real& worldX3, const real& timestep);
-
-private:
-   mutable mu::value_type x1, x2, x3;
-   mutable mu::value_type timeStep;
-
-   mu::Parser* tmpVx1Function;
-   mu::Parser* tmpVx2Function;
-   mu::Parser* tmpVx3Function;
-
-   std::vector<BCFunction> vx1BCs;
-   std::vector<BCFunction> vx2BCs;
-   std::vector<BCFunction> vx3BCs;
-
-   real phiBC;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp
deleted file mode 100644
index d1037fa27a950dca373b13762849a2e040ccc03c..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseVelocityBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseVelocityBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BoundaryConditions.h"
-
-MultiphaseVelocityBCStrategy::MultiphaseVelocityBCStrategy()
-{
-   BCStrategy::type = BCStrategy::MultiphaseVelocityBCStrategy;
-   BCStrategy::preCollision = false;
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseVelocityBCStrategy::~MultiphaseVelocityBCStrategy()
-{
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> MultiphaseVelocityBCStrategy::clone()
-{
-   SPtr<BCStrategy> bc(new MultiphaseVelocityBCStrategy());
-   return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-   this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH)
-{
-	this->distributionsH = distributionsH;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityBCStrategy::addDistributionsH2(SPtr<DistributionArray3D> distributionsH)
-{
-    this->distributionsH2 = distributionsH;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityBCStrategy::applyBC()
-{
-    using namespace vf::lbm::dir;
-
-   real f[D3Q27System::ENDF+1];
-   real h[D3Q27System::ENDF+1];
-   real h2[D3Q27System::ENDF + 1];
-   real feq[D3Q27System::ENDF+1];
-   real heq[D3Q27System::ENDF+1];
-   real htemp[D3Q27System::ENDF+1];
-   
-   distributions->getPostCollisionDistribution(f, x1, x2, x3);
-   distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
-   if (distributionsH2)
-       distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3);
-   real phi, vx1, vx2, vx3, p1, phiBC;
-   
-   D3Q27System::calcDensity(h, phi);
-
-   calcMacrosFct(f, p1, vx1, vx2, vx3);
-   vx1=bcPtr->getBoundaryVelocityX1();
-   vx2 = bcPtr->getBoundaryVelocityX2();
-   vx3 = bcPtr->getBoundaryVelocityX3();
-   p1 = vf::basics::constant::c0o1;
-   D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3);
-   D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3);
-
-   ///// added for phase field //////
-
-   phiBC = bcPtr->getBoundaryPhaseField();
-   
-   D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3);
-   //D3Q27System::calcMultiphaseHeq(htemp, phiBC, bcPtr->getBoundaryVelocityX1(), bcPtr->getBoundaryVelocityX2(), bcPtr->getBoundaryVelocityX2());//30.03.2021 EQ phase field BC!
-   //for (int fdir = D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++)
-   //{
-	  // if (bcPtr->hasVelocityBoundaryFlag(fdir))
-	  // {
-		 //  LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir];
-   //        //17.03.2021 Let us just set the plain eq
-   //        //LBMReal hReturn = htemp[fdir];
-		 //  distributionsH->setPostCollisionDistributionForDirection(hReturn, nx1, nx2, nx3, fdir);
-   //      //  if (distributionsH2)
-   //      //      distributionsH2->setPostCollisionDistributionForDirection(0, nx1, nx2, nx3, fdir);
-	  // }
-   //}
-   
-   for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
-   {
-      if (bcPtr->hasVelocityBoundaryFlag(fdir))
-      {
-         const int invDir = D3Q27System::INVDIR[fdir];
-         //LBMReal q = bcPtr->getQ(invDir);// m+m q=0 stabiler
-         real velocity = bcPtr->getBoundaryVelocity(invDir);
-		 //16.03.2021 quick fix for velocity BC
-         real fReturn = f[invDir] - velocity;
-         //LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity)/(1.0+q));
-        // distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);//no delay BB
-         distributions->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB  
-
-         real hReturn = htemp[invDir] + h[invDir] - heq[invDir] - velocity*phi;
-         distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB  
-         if (distributionsH2) {
-             fReturn = h2[invDir] ;
-            // distributionsH2->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
-             distributionsH2->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB 
-         }
-
-      }
-   }
-
-}
-
diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h
deleted file mode 100644
index 4e99c876aca206eae0cae3bcf8c643d9ce930b87..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h
+++ /dev/null
@@ -1,52 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseVelocityBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseVelocityBCStrategy_h__
-#define MultiphaseVelocityBCStrategy_h__
-
-#include "BCStrategy.h"
-//! A class implements velocity boundary condition for multiphase simulations
-class MultiphaseVelocityBCStrategy : public BCStrategy
-{
-public:
-   MultiphaseVelocityBCStrategy();
-   ~MultiphaseVelocityBCStrategy();
-   SPtr<BCStrategy> clone() override;
-   void addDistributions(SPtr<DistributionArray3D> distributions) override;
-   void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override;
-   void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) override;
-   void applyBC() override;
-};
-
-#endif // MultiphaseVelocityBCStrategy_h__
-
diff --git a/src/cpu/MultiphaseFlow/CMakeLists.txt b/src/cpu/MultiphaseFlow/CMakeLists.txt
deleted file mode 100644
index 261919282ce830bfcf1e364443c439338b642d88..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/CMakeLists.txt
+++ /dev/null
@@ -1 +0,0 @@
-vf_add_library(PUBLIC_LINK cpu_core)
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp
deleted file mode 100644
index f98663a3a2b7cb32e4b62c98abb354dc55b82564..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp
+++ /dev/null
@@ -1,1312 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseCumulantLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseCumulantLBMKernel.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include <cmath>
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::initDataSet()
-{
-    SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
-    SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); // For phase-field
-    SPtr<PhaseFieldArray3D> divU(new PhaseFieldArray3D(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0));
-    dataSet->setFdistributions(f);
-    dataSet->setHdistributions(h); // For phase-field
-    dataSet->setPhaseField(divU);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> MultiphaseCumulantLBMKernel::clone()
-{
-    SPtr<LBMKernel> kernel(new MultiphaseCumulantLBMKernel());
-    kernel->setNX(nx);
-    dynamicPointerCast<MultiphaseCumulantLBMKernel>(kernel)->initDataSet();
-    kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-    kernel->setDensityRatio(this->densityRatio);
-    kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-    kernel->setContactAngle(this->contactAngle);
-    kernel->setPhiL(this->phiL);
-    kernel->setPhiH(this->phiH);
-    kernel->setPhaseFieldRelaxation(this->tauH);
-    kernel->setMobility(this->mob);
-
-    kernel->setBCSet(bcSet->clone(kernel));
-    kernel->setWithForcing(withForcing);
-    kernel->setForcingX1(muForcingX1);
-    kernel->setForcingX2(muForcingX2);
-    kernel->setForcingX3(muForcingX3);
-    kernel->setIndex(ix1, ix2, ix3);
-    kernel->setDeltaT(deltaT);
-
-    return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseCumulantLBMKernel::calculate(int step)
-{
-    using namespace D3Q27System;
-//    using namespace UbMath;
-    using namespace vf::lbm::dir;
-    using namespace vf::basics::constant;
-
-    forcingX1 = 0.0;
-    forcingX2 = 0.0;
-    forcingX3 = 0.0;
-    /////////////////////////////////////
-
-    localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-    nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-    zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-    localDistributionsH    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-    nonLocalDistributionsH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-    zeroDistributionsH     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-        CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField(
-            new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-        CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU(
-            new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
-
-
-        for (int x3 = 0; x3 <= maxX3; x3++) {
-            for (int x2 = 0; x2 <= maxX2; x2++) {
-                for (int x1 = 0; x1 <= maxX1; x1++) {
-                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                        int x1p = x1 + 1;
-                        int x2p = x2 + 1;
-                        int x3p = x3 + 1;
-
-                        real mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                        real mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                        real mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                        real mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                        real mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                        real mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                        real mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                        real mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                        real mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                        real mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                        real mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        real mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        real mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        real mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                        real mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                        real mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                        real mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        real mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                        real mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        real mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                        real mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        real mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                        real mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        real mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        real mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        real mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        real mfbbb = (*this->zeroDistributionsH)(x1, x2, x3);
-                        (*phaseField)(x1, x2, x3) = (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;
-                    }
-                }
-            }
-        }
-
-        real collFactorM;
-        real forcingTerm[D3Q27System::ENDF + 1];
-
-        for (int x3 = minX3; x3 < maxX3; x3++) {
-            for (int x2 = minX2; x2 < maxX2; x2++) {
-                for (int x1 = minX1; x1 < maxX1; x1++) {
-                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                        int x1p = x1 + 1;
-                        int x2p = x2 + 1;
-                        int x3p = x3 + 1;
-
-                        //////////////////////////////////////////////////////////////////////////
-                        // Read distributions and phase field
-                        ////////////////////////////////////////////////////////////////////////////
-                        //////////////////////////////////////////////////////////////////////////
-
-                        // E   N  T
-                        // c   c  c
-                        //////////
-                        // W   S  B
-                        // a   a  a
-
-                        // Rest ist b
-
-                        // mfxyz
-                        // a - negative
-                        // b - null
-                        // c - positive
-
-                        // a b c
-                        //-1 0 1
-
-                        findNeighbors(phaseField, x1, x2, x3);
-
-                        real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-                        real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-                        real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-                        real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-                        real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-                        real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-                        real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-                        real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-                        real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-                        real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-                        real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-                        real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-                        real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-                        real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-                        real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-                        real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-                        real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-                        real rhoH = 1.0;
-                        real rhoL = 1.0 / densityRatio;
-
-                        real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-                        real dX1_phi = gradX1_phi();
-                        real dX2_phi = gradX2_phi();
-                        real dX3_phi = gradX3_phi();
-
-                        real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9;
-                        collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
-
-
-                        real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-                        //----------- Calculating Macroscopic Values -------------
-                        real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
-
-                        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);
-
-                            muForcingX1.DefineVar("rho",&muRho); 
-				            muForcingX2.DefineVar("rho",&muRho); 
-				            muForcingX3.DefineVar("rho",&muRho); 
-
-				            muRho = rho;
-
-                            forcingX1 = muForcingX1.Eval();
-                            forcingX2 = muForcingX2.Eval();
-                            forcingX3 = muForcingX3.Eval();
-
-                            real rho_m = 1.0 / densityRatio;
-                            forcingX1     = forcingX1 * (rho - rho_m);
-                            forcingX2     = forcingX2 * (rho - rho_m);
-                            forcingX3     = forcingX3 * (rho - rho_m);
-
-                            // ux += forcingX1*deltaT*0.5; // X
-                            // uy += forcingX2*deltaT*0.5; // Y
-                            // uz += forcingX3*deltaT*0.5; // Z
-                        }
-
-                        real ux = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-                                      (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-                                      (mfcbb - mfabb)) /
-                                         (rho * c1o3) +
-                                     (mu * dX1_phi + forcingX1) / (2 * rho);
-
-                        real uy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-                                      (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-                                      (mfbcb - mfbab)) /
-                                         (rho * c1o3) +
-                                     (mu * dX2_phi + forcingX2) / (2 * rho);
-
-                        real uz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-                                      (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-                                      (mfbbc - mfbba)) /
-                                         (rho * c1o3) +
-                                     (mu * dX3_phi + forcingX3) / (2 * rho);
-
-                        //--------------------------------------------------------
-
-                        real ux2 = ux * ux;
-                        real uy2 = uy * uy;
-                        real uz2 = uz * uz;
-
-                        //----------- Calculating Forcing Terms * -------------
-                        for (int dir = FSTARTDIR; dir <= FENDDIR; dir++) {
-                            real velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
-                            real velSq1  = velProd * velProd;
-                            real gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2));
-
-                            real fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
-
-                            forcingTerm[dir] = ((-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-                                                (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-                                                (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3))) +
-                                               (DX1[dir]) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-                                               (DX2[dir]) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-                                               (DX3[dir]) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
-                        }
-
-                        real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-                        real fac1      = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi;
-                        forcingTerm[d000] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-                                            (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-                                            (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
-
-                        //--------------------------------------------------------
-
-                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[d0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[d00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[dPP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-                        mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[dMP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-                        mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[dP0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-                        mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[dM0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-                        mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[d0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-                        mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[d0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-                        mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[dPPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-                        mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[dMPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-                        mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[dPMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-                        mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[dMMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-                        mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[dM00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-                        mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[d0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-                        mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[d00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-                        mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[dMM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-                        mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[dPM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-                        mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[dM0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-                        mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[dP0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-                        mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[d0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-                        mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[d0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-                        mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[dMMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-                        mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[dPMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-                        mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[dMPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-                        mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[dPPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-                        mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST];
-
-                        real rho1 = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
-                                       (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
-                                       (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) +
-                                       (mfbba + mfbbc) + mfbbb;
-
-
-                        real oMdrho, m0, m1, m2;
-
-                        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 = rho - (oMdrho + m0);
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        real wadjust;
-                        real qudricLimit = 0.01;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Hin
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Z - Dir
-                        m2    = mfaaa + mfaac;
-                        m1    = mfaac - mfaaa;
-                        m0    = m2 + mfaab;
-                        mfaaa = m0;
-                        m0 += c1o36 * oMdrho;
-                        mfaab = m1 - m0 * uz;
-                        mfaac = m2 - 2. * m1 * uz + uz2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfaba + mfabc;
-                        m1    = mfabc - mfaba;
-                        m0    = m2 + mfabb;
-                        mfaba = m0;
-                        m0 += c1o9 * oMdrho;
-                        mfabb = m1 - m0 * uz;
-                        mfabc = m2 - 2. * m1 * uz + uz2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfaca + mfacc;
-                        m1    = mfacc - mfaca;
-                        m0    = m2 + mfacb;
-                        mfaca = m0;
-                        m0 += c1o36 * oMdrho;
-                        mfacb = m1 - m0 * uz;
-                        mfacc = m2 - 2. * m1 * uz + uz2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfbaa + mfbac;
-                        m1    = mfbac - mfbaa;
-                        m0    = m2 + mfbab;
-                        mfbaa = m0;
-                        m0 += c1o9 * oMdrho;
-                        mfbab = m1 - m0 * uz;
-                        mfbac = m2 - 2. * m1 * uz + uz2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfbba + mfbbc;
-                        m1    = mfbbc - mfbba;
-                        m0    = m2 + mfbbb;
-                        mfbba = m0;
-                        m0 += c4o9 * oMdrho;
-                        mfbbb = m1 - m0 * uz;
-                        mfbbc = m2 - 2. * m1 * uz + uz2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfbca + mfbcc;
-                        m1    = mfbcc - mfbca;
-                        m0    = m2 + mfbcb;
-                        mfbca = m0;
-                        m0 += c1o9 * oMdrho;
-                        mfbcb = m1 - m0 * uz;
-                        mfbcc = m2 - 2. * m1 * uz + uz2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfcaa + mfcac;
-                        m1    = mfcac - mfcaa;
-                        m0    = m2 + mfcab;
-                        mfcaa = m0;
-                        m0 += c1o36 * oMdrho;
-                        mfcab = m1 - m0 * uz;
-                        mfcac = m2 - 2. * m1 * uz + uz2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfcba + mfcbc;
-                        m1    = mfcbc - mfcba;
-                        m0    = m2 + mfcbb;
-                        mfcba = m0;
-                        m0 += c1o9 * oMdrho;
-                        mfcbb = m1 - m0 * uz;
-                        mfcbc = m2 - 2. * m1 * uz + uz2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfcca + mfccc;
-                        m1    = mfccc - mfcca;
-                        m0    = m2 + mfccb;
-                        mfcca = m0;
-                        m0 += c1o36 * oMdrho;
-                        mfccb = m1 - m0 * uz;
-                        mfccc = m2 - 2. * m1 * uz + uz2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Y - Dir
-                        m2    = mfaaa + mfaca;
-                        m1    = mfaca - mfaaa;
-                        m0    = m2 + mfaba;
-                        mfaaa = m0;
-                        m0 += c1o6 * oMdrho;
-                        mfaba = m1 - m0 * uy;
-                        mfaca = m2 - 2. * m1 * uy + uy2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfaab + mfacb;
-                        m1    = mfacb - mfaab;
-                        m0    = m2 + mfabb;
-                        mfaab = m0;
-                        mfabb = m1 - m0 * uy;
-                        mfacb = m2 - 2. * m1 * uy + uy2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfaac + mfacc;
-                        m1    = mfacc - mfaac;
-                        m0    = m2 + mfabc;
-                        mfaac = m0;
-                        m0 += c1o18 * oMdrho;
-                        mfabc = m1 - m0 * uy;
-                        mfacc = m2 - 2. * m1 * uy + uy2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfbaa + mfbca;
-                        m1    = mfbca - mfbaa;
-                        m0    = m2 + mfbba;
-                        mfbaa = m0;
-                        m0 += c2o3 * oMdrho;
-                        mfbba = m1 - m0 * uy;
-                        mfbca = m2 - 2. * m1 * uy + uy2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfbab + mfbcb;
-                        m1    = mfbcb - mfbab;
-                        m0    = m2 + mfbbb;
-                        mfbab = m0;
-                        mfbbb = m1 - m0 * uy;
-                        mfbcb = m2 - 2. * m1 * uy + uy2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfbac + mfbcc;
-                        m1    = mfbcc - mfbac;
-                        m0    = m2 + mfbbc;
-                        mfbac = m0;
-                        m0 += c2o9 * oMdrho;
-                        mfbbc = m1 - m0 * uy;
-                        mfbcc = m2 - 2. * m1 * uy + uy2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfcaa + mfcca;
-                        m1    = mfcca - mfcaa;
-                        m0    = m2 + mfcba;
-                        mfcaa = m0;
-                        m0 += c1o6 * oMdrho;
-                        mfcba = m1 - m0 * uy;
-                        mfcca = m2 - 2. * m1 * uy + uy2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfcab + mfccb;
-                        m1    = mfccb - mfcab;
-                        m0    = m2 + mfcbb;
-                        mfcab = m0;
-                        mfcbb = m1 - m0 * uy;
-                        mfccb = m2 - 2. * m1 * uy + uy2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfcac + mfccc;
-                        m1    = mfccc - mfcac;
-                        m0    = m2 + mfcbc;
-                        mfcac = m0;
-                        m0 += c1o18 * oMdrho;
-                        mfcbc = m1 - m0 * uy;
-                        mfccc = m2 - 2. * m1 * uy + uy2 * 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 * ux;
-                        mfcaa = m2 - 2. * m1 * ux + ux2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfaba + mfcba;
-                        m1    = mfcba - mfaba;
-                        m0    = m2 + mfbba;
-                        mfaba = m0;
-                        mfbba = m1 - m0 * ux;
-                        mfcba = m2 - 2. * m1 * ux + ux2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfaca + mfcca;
-                        m1    = mfcca - mfaca;
-                        m0    = m2 + mfbca;
-                        mfaca = m0;
-                        m0 += c1o3 * oMdrho;
-                        mfbca = m1 - m0 * ux;
-                        mfcca = m2 - 2. * m1 * ux + ux2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfaab + mfcab;
-                        m1    = mfcab - mfaab;
-                        m0    = m2 + mfbab;
-                        mfaab = m0;
-                        mfbab = m1 - m0 * ux;
-                        mfcab = m2 - 2. * m1 * ux + ux2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfabb + mfcbb;
-                        m1    = mfcbb - mfabb;
-                        m0    = m2 + mfbbb;
-                        mfabb = m0;
-                        mfbbb = m1 - m0 * ux;
-                        mfcbb = m2 - 2. * m1 * ux + ux2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfacb + mfccb;
-                        m1    = mfccb - mfacb;
-                        m0    = m2 + mfbcb;
-                        mfacb = m0;
-                        mfbcb = m1 - m0 * ux;
-                        mfccb = m2 - 2. * m1 * ux + ux2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfaac + mfcac;
-                        m1    = mfcac - mfaac;
-                        m0    = m2 + mfbac;
-                        mfaac = m0;
-                        m0 += c1o3 * oMdrho;
-                        mfbac = m1 - m0 * ux;
-                        mfcac = m2 - 2. * m1 * ux + ux2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfabc + mfcbc;
-                        m1    = mfcbc - mfabc;
-                        m0    = m2 + mfbbc;
-                        mfabc = m0;
-                        mfbbc = m1 - m0 * ux;
-                        mfcbc = m2 - 2. * m1 * ux + ux2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m2    = mfacc + mfccc;
-                        m1    = mfccc - mfacc;
-                        m0    = m2 + mfbcc;
-                        mfacc = m0;
-                        m0 += c1o9 * oMdrho;
-                        mfbcc = m1 - m0 * ux;
-                        mfccc = m2 - 2. * m1 * ux + ux2 * m0;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Cumulants
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        real OxxPyyPzz = 1.; // omega2 or bulk viscosity
-                        real OxyyPxzz  = 1.; //-s9;//2+s9;//
-                        real OxyyMxzz  = 1.; // 2+s9;//
-                        real O4        = 1.;
-                        real O5        = 1.;
-                        real O6        = 1.;
-
-                        // Cum 4.
-                        real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-                        real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-                        real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-                        real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) +
-                                                  c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-                        real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) +
-                                                  c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-                        real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) +
-                                                  c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-
-                        // Cum 5.
-                        real CUMbcc = mfbcc -
-                                         (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
-                                          2. * (mfbab * mfacb + mfbba * mfabc)) -
-                                         c1o3 * (mfbca + mfbac) * oMdrho;
-                        real CUMcbc = mfcbc -
-                                         (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
-                                          2. * (mfabb * mfcab + mfbba * mfbac)) -
-                                         c1o3 * (mfcba + mfabc) * oMdrho;
-                        real CUMccb = mfccb -
-                                         (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
-                                          2. * (mfbab * mfbca + mfabb * mfcba)) -
-                                         c1o3 * (mfacb + mfcab) * oMdrho;
-
-                        // Cum 6.
-                        real CUMccc =
-                            mfccc +
-                            ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-                              4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -
-                              2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-                             (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-                              2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
-                             c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-                             c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
-                             c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
-                             (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
-                              (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
-                                 c2o3 * oMdrho) +
-                            c1o27 * oMdrho;
-
-                        // 2.
-                        // linear combinations
-                        real mxxPyyPzz = mfcaa + mfaca + mfaac;
-                        real mxxMyy    = mfcaa - mfaca;
-                        real mxxMzz    = mfcaa - mfaac;
-
-                        real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-                        real dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-                        real dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-
-                        (*divU)(x1, x2, x3) = dxux + dyuy + dzuz;
-
-                        // relax
-                        mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) -
-                                     3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz);
-                        mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy);
-                        mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz);
-
-                        mfabb += collFactorM * (-mfabb);
-                        mfbab += collFactorM * (-mfbab);
-                        mfbba += collFactorM * (-mfbba);
-
-                        // linear combinations back
-                        mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-                        mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-                        mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-                        // 3.
-                        // linear combinations
-                        real mxxyPyzz = mfcba + mfabc;
-                        real mxxyMyzz = mfcba - mfabc;
-
-                        real mxxzPyyz = mfcab + mfacb;
-                        real mxxzMyyz = mfcab - mfacb;
-
-                        real mxyyPxzz = mfbca + mfbac;
-                        real mxyyMxzz = mfbca - mfbac;
-
-                        // relax
-                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-                        mfbbb += wadjust * (-mfbbb);
-                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-                        mxxyPyzz += wadjust * (-mxxyPyzz);
-                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-                        mxxyMyzz += wadjust * (-mxxyMyzz);
-                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-                        mxxzPyyz += wadjust * (-mxxzPyyz);
-                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-                        mxxzMyyz += wadjust * (-mxxzMyyz);
-                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-                        mxyyPxzz += wadjust * (-mxyyPxzz);
-                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-                        mxyyMxzz += wadjust * (-mxyyMxzz);
-
-                        // linear combinations back
-                        mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-                        mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-                        mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-                        mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-                        mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-                        mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-                        // 4.
-                        CUMacc += O4 * (-CUMacc);
-                        CUMcac += O4 * (-CUMcac);
-                        CUMcca += O4 * (-CUMcca);
-
-                        CUMbbc += O4 * (-CUMbbc);
-                        CUMbcb += O4 * (-CUMbcb);
-                        CUMcbb += O4 * (-CUMcbb);
-
-                        // 5.
-                        CUMbcc += O5 * (-CUMbcc);
-                        CUMcbc += O5 * (-CUMcbc);
-                        CUMccb += O5 * (-CUMccb);
-
-                        // 6.
-                        CUMccc += O6 * (-CUMccc);
-
-                        // back cumulants to central moments
-                        // 4.
-                        mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-                        mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-                        mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-                        mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho +
-                                c1o9 * (oMdrho - 1) * oMdrho;
-                        mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho +
-                                c1o9 * (oMdrho - 1) * oMdrho;
-                        mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho +
-                                c1o9 * (oMdrho - 1) * oMdrho;
-
-                        // 5.
-                        mfbcc = CUMbcc +
-                                (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
-                                 2. * (mfbab * mfacb + mfbba * mfabc)) +
-                                c1o3 * (mfbca + mfbac) * oMdrho;
-                        mfcbc = CUMcbc +
-                                (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
-                                 2. * (mfabb * mfcab + mfbba * mfbac)) +
-                                c1o3 * (mfcba + mfabc) * oMdrho;
-                        mfccb = CUMccb +
-                                (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
-                                 2. * (mfbab * mfbca + mfabb * mfcba)) +
-                                c1o3 * (mfacb + mfcab) * oMdrho;
-
-                        // 6.
-                        mfccc = CUMccc -
-                                ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-                                  4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) -
-                                  2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-                                 (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-                                  2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
-                                 c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-                                 c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
-                                 c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
-                                 (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
-                                  (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
-                                     c2o3 * oMdrho) -
-                                c1o27 * oMdrho;
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // forcing
-                        mfbaa = -mfbaa;
-                        mfaba = -mfaba;
-                        mfaab = -mfaab;
-                        //////////////////////////////////////////////////////////////////////////////////////
-
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // back
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Z - Dir
-                        m0    = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * (uz2 - uz) * c1o2;
-                        m1    = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2;
-                        m2    = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * (uz2 + uz) * c1o2;
-                        mfaaa = m0;
-                        mfaab = m1;
-                        mfaac = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2;
-                        m1    = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2);
-                        m2    = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2;
-                        mfaba = m0;
-                        mfabb = m1;
-                        mfabc = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-                        m1    = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2;
-                        m2    = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-                        mfaca = m0;
-                        mfacb = m1;
-                        mfacc = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2;
-                        m1    = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2);
-                        m2    = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2;
-                        mfbaa = m0;
-                        mfbab = m1;
-                        mfbac = m2;
-                        /////////b//////////////////////////////////////////////////////////////////////////
-                        m0    = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2;
-                        m1    = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2);
-                        m2    = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2;
-                        mfbba = m0;
-                        mfbbb = m1;
-                        mfbbc = m2;
-                        /////////b//////////////////////////////////////////////////////////////////////////
-                        m0    = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2;
-                        m1    = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2);
-                        m2    = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2;
-                        mfbca = m0;
-                        mfbcb = m1;
-                        mfbcc = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-                        m1    = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2;
-                        m2    = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-                        mfcaa = m0;
-                        mfcab = m1;
-                        mfcac = m2;
-                        /////////c//////////////////////////////////////////////////////////////////////////
-                        m0    = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2;
-                        m1    = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2);
-                        m2    = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2;
-                        mfcba = m0;
-                        mfcbb = m1;
-                        mfcbc = m2;
-                        /////////c//////////////////////////////////////////////////////////////////////////
-                        m0    = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2;
-                        m1    = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2;
-                        m2    = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2;
-                        mfcca = m0;
-                        mfccb = m1;
-                        mfccc = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // Y - Dir
-                        m0    = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-                        m1    = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2;
-                        m2    = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-                        mfaaa = m0;
-                        mfaba = m1;
-                        mfaca = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2;
-                        m1    = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2;
-                        m2    = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2;
-                        mfaab = m0;
-                        mfabb = m1;
-                        mfacb = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-                        m1    = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2;
-                        m2    = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-                        mfaac = m0;
-                        mfabc = m1;
-                        mfacc = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2;
-                        m1    = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2);
-                        m2    = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2;
-                        mfbaa = m0;
-                        mfbba = m1;
-                        mfbca = m2;
-                        /////////b//////////////////////////////////////////////////////////////////////////
-                        m0    = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2;
-                        m1    = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2);
-                        m2    = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2;
-                        mfbab = m0;
-                        mfbbb = m1;
-                        mfbcb = m2;
-                        /////////b//////////////////////////////////////////////////////////////////////////
-                        m0    = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2;
-                        m1    = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2);
-                        m2    = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2;
-                        mfbac = m0;
-                        mfbbc = m1;
-                        mfbcc = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-                        m1    = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2;
-                        m2    = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-                        mfcaa = m0;
-                        mfcba = m1;
-                        mfcca = m2;
-                        /////////c//////////////////////////////////////////////////////////////////////////
-                        m0    = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2;
-                        m1    = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2;
-                        m2    = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2;
-                        mfcab = m0;
-                        mfcbb = m1;
-                        mfccb = m2;
-                        /////////c//////////////////////////////////////////////////////////////////////////
-                        m0    = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-                        m1    = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2;
-                        m2    = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-                        mfcac = m0;
-                        mfcbc = m1;
-                        mfccc = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        // X - Dir
-                        m0    = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-                        m1    = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2;
-                        m2    = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-                        mfaaa = m0;
-                        mfbaa = m1;
-                        mfcaa = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-                        m1    = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2;
-                        m2    = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-                        mfaba = m0;
-                        mfbba = m1;
-                        mfcba = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-                        m1    = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2;
-                        m2    = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-                        mfaca = m0;
-                        mfbca = m1;
-                        mfcca = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-                        m1    = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2;
-                        m2    = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-                        mfaab = m0;
-                        mfbab = m1;
-                        mfcab = m2;
-                        ///////////b////////////////////////////////////////////////////////////////////////
-                        m0    = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2;
-                        m1    = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2;
-                        m2    = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2;
-                        mfabb = m0;
-                        mfbbb = m1;
-                        mfcbb = m2;
-                        ///////////b////////////////////////////////////////////////////////////////////////
-                        m0    = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-                        m1    = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2;
-                        m2    = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-                        mfacb = m0;
-                        mfbcb = m1;
-                        mfccb = m2;
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        ////////////////////////////////////////////////////////////////////////////////////
-                        m0    = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-                        m1    = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2;
-                        m2    = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-                        mfaac = m0;
-                        mfbac = m1;
-                        mfcac = m2;
-                        ///////////c////////////////////////////////////////////////////////////////////////
-                        m0    = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-                        m1    = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2;
-                        m2    = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-                        mfabc = m0;
-                        mfbbc = m1;
-                        mfcbc = m2;
-                        ///////////c////////////////////////////////////////////////////////////////////////
-                        m0    = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-                        m1    = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2;
-                        m2    = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-                        mfacc = m0;
-                        mfbcc = m1;
-                        mfccc = m2;
-
-                        ///////////////////////////////////////////////////////////////////////////
-
-                        //////////////////////////////////////////////////////////////////////////
-                        // proof correctness
-                        //////////////////////////////////////////////////////////////////////////
-#ifdef PROOF_CORRECTNESS
-                        real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
-                                           (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
-                                           (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) +
-                                           (mfbba + mfbbc) + mfbbb;
-
-                        real dif = rho1 - rho_post;
-#ifdef SINGLEPRECISION
-                        if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-                        if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-                        {
-                            UB_THROW(UbException(UB_EXARGS,
-                                                 "rho=" + UbSystem::toString(rho) + ", rho_post=" +
-                                                     UbSystem::toString(rho_post) + " dif=" + UbSystem::toString(dif) +
-                                                     " rho is not correct for node " + UbSystem::toString(x1) + "," +
-                                                     UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-                        }
-#endif
-
-                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00];
-                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[d0P0];
-                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[d00P];
-                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[dPP0];
-                        mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[dMP0];
-                        mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[dP0P];
-                        mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[dM0P];
-                        mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[d0PP];
-                        mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[d0MP];
-                        mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[dPPP];
-                        mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[dMPP];
-                        mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[dPMP];
-                        mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[dMMP];
-                        mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[dM00];
-                        mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[d0M0];
-                        mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[d00M];
-                        mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[dMM0];
-                        mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[dPM0];
-                        mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[dM0M];
-                        mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[dP0M];
-                        mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[d0MM];
-                        mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[d0PM];
-                        mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[dMMM];
-                        mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[dPMM];
-                        mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[dMPM];
-                        mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[dPPM];
-                        mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[d000];
-
-                        //////////////////////////////////////////////////////////////////////////
-                        // write distribution for F
-                        //////////////////////////////////////////////////////////////////////////
-
-                        (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)     = mfabb;
-                        (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)     = mfbab;
-                        (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)     = mfbba;
-                        (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)    = mfaab;
-                        (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)   = mfcab;
-                        (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)    = mfaba;
-                        (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)   = mfcba;
-                        (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)    = mfbaa;
-                        (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)   = mfbca;
-                        (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)   = mfaaa;
-                        (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)  = mfcaa;
-                        (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)  = mfaca;
-                        (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac;
-                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac;
-
-                        (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
-
-                        /////////////////////  P H A S E - F I E L D   S O L V E R
-                        ////////////////////////////////////////////
-
-                        /////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
-
-                        h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                        h[d0P0]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                        h[d00P]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                        h[dPP0]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                        h[dMP0]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                        h[dP0P]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                        h[dM0P]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                        h[d0PP]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                        h[d0MP]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                        h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                        h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                        h[dM00]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                        h[d0M0]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                        h[d00M]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                        h[dMM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        h[dPM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                        h[dM0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        h[dP0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                        h[d0MM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        h[d0PM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                        h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        h[d000] = (*this->zeroDistributionsH)(x1, x2, x3);
-
-                        for (int dir = STARTF; dir < (ENDF + 1); dir++) {
-                            real velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
-                            real velSq1  = velProd * velProd;
-                            real hEq; //, gEq;
-
-                            if (dir != d000) {
-                                real dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0;
-                                real hSource     = (tauH - 0.5) * (1.0 - phi[d000]) * (phi[d000]) * (dirGrad_phi) / denom; 
-                                hEq = phi[d000] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) +                                 hSource * WEIGTH[dir];
-
-                                // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5).
-                                h[dir] = h[dir] - (h[dir] - hEq) / (tauH); 
-
-                            } else {
-                                hEq = phi[d000] * WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-                                h[d000] = h[d000] - (h[d000] - hEq) / (tauH); 
-                            }
-                        }
-
-                        (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3)     = h[iP00];
-                        (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3)     = h[i0P0];
-                        (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3)     = h[i00P];
-                        (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3)    = h[iPP0];
-                        (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3)   = h[iMP0];
-                        (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3)    = h[iP0P];
-                        (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3)   = h[iM0P];
-                        (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3)    = h[i0PP];
-                        (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3)   = h[i0MP];
-                        (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3)   = h[iPPP];
-                        (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3)  = h[iMPP];
-                        (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3)  = h[iPMP];
-                        (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[iMMP];
-
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3)     = h[iM00];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3)     = h[i0M0];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p)     = h[i00M];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3)   = h[iMM0];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3)    = h[iPM0];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p)   = h[iM0M];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p)    = h[iP0M];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p)   = h[i0MM];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p)    = h[i0PM];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[iMMM];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p)  = h[iPMM];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p)  = h[iMPM];
-                        (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p)   = h[iPPM];
-
-                        (*this->zeroDistributionsH)(x1, x2, x3) = h[d000];
-
-                        /////////////////////   END OF OLD BGK SOLVER ///////////////////////////////
-                    }
-                }
-            }
-        }
-        dataSet->setPhaseField(divU);
-    }
-
-//////////////////////////////////////////////////////////////////////////
-
-real MultiphaseCumulantLBMKernel::gradX1_phi()
-{
-    using namespace D3Q27System;
-    real sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX1[k] * phi[k];
-    }
-    return 3.0 * sum;
-}
-
-real MultiphaseCumulantLBMKernel::gradX2_phi()
-{
-    using namespace D3Q27System;
-    real sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX2[k] * phi[k];
-    }
-    return 3.0 * sum;
-}
-
-real MultiphaseCumulantLBMKernel::gradX3_phi()
-{
-    using namespace D3Q27System;
-    real sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX3[k] * phi[k];
-    }
-    return 3.0 * sum;
-}
-
-real MultiphaseCumulantLBMKernel::nabla2_phi()
-{
-    using namespace D3Q27System;
-    using namespace vf::lbm::dir;
-
-    real sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * (phi[k] - phi[d000]);
-    }
-    return 6.0 * sum;
-}
-
-void MultiphaseCumulantLBMKernel::computePhasefield()
-{
-    using namespace D3Q27System;
-    using namespace vf::lbm::dir;
-
-    SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-    int minX1 = ghostLayerWidth;
-    int minX2 = ghostLayerWidth;
-    int minX3 = ghostLayerWidth;
-    int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-    int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-    int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-    //------------- Computing the phase-field ------------------
-    for (int x3 = minX3; x3 < maxX3; x3++) {
-        for (int x2 = minX2; x2 < maxX2; x2++) {
-            for (int x1 = minX1; x1 < maxX1; x1++) {
-                // if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-                {
-                    int x1p = x1 + 1;
-                    int x2p = x2 + 1;
-                    int x3p = x3 + 1;
-
-                    h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                    h[d0P0]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                    h[d00P]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                    h[dPP0]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[dMP0]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[dP0P]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[dM0P]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[d0PP]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[d0MP]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[dM00]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[d0M0]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[d00M]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[dMM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[dPM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[dM0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[dP0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[d0MM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[d0PM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[d000] = (*this->zeroDistributionsH)(x1, x2, x3);
-                }
-            }
-        }
-    }
-}
-
-void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-                                                int x3)
-{
-    using namespace D3Q27System;
-    using namespace vf::lbm::dir;
-
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-    phi[d000] = (*ph)(x1, x2, x3);
-
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-        if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-            phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-        } else {
-
-            phi[k] = 0.;//16.03.2021 quick fix for uninitialized variables, might influence contact angle!
-         }
-    }
-}
-
-void MultiphaseCumulantLBMKernel::swapDistributions()
-{
-    LBMKernel::swapDistributions();
-    dataSet->getHdistributions()->swap();
-}
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.h
deleted file mode 100644
index a42f6d5eaf907cd3706546c7afcd67d93e9985f2..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.h
+++ /dev/null
@@ -1,100 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseCumulantLBMKernel.h
-//! \ingroup LBMKernel
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseCumulantLBMKernel_H
-#define MultiphaseCumulantLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  H. Safari, K. Kutscher, M. Geier
-class MultiphaseCumulantLBMKernel : public LBMKernel
-{
-public:
-   MultiphaseCumulantLBMKernel();
-   virtual ~MultiphaseCumulantLBMKernel(void) = default;
-   void calculate(int step) override;
-   SPtr<LBMKernel> clone() override;
-   real getCalculationTime() override { return .0; }
-protected:
-   virtual void initDataSet();
-   void swapDistributions() override;
-   real f1[D3Q27System::ENDF+1];
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH;
-
-   //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr   phaseField;
-
-   real h  [D3Q27System::ENDF+1];
-   real g  [D3Q27System::ENDF+1];
-   real phi[D3Q27System::ENDF+1];
-   real pr1[D3Q27System::ENDF+1];
-   real phi_cutoff[D3Q27System::ENDF+1];
-
-   real gradX1_phi();
-   real gradX2_phi();
-   real gradX3_phi();
-   //LBMReal gradX1_pr1();
-   //LBMReal gradX2_pr1();
-   //LBMReal gradX3_pr1();
-   //LBMReal dirgradC_phi(int n, int k);
-   void computePhasefield();
-   void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-   //void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, int x1, int x2, int x3);
-   //void pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/);
-
-   real nabla2_phi();
-
-
-   mu::value_type muX1,muX2,muX3;
-   mu::value_type muDeltaT;
-   mu::value_type muNu;
-   mu::value_type muRho;
-   real forcingX1;
-   real forcingX2;
-   real forcingX3;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp
deleted file mode 100644
index e8776121b19b3d2a8e3b8f315a18433092c8559a..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp
+++ /dev/null
@@ -1,1698 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphasePressureFilterCompressibleAirLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphasePressureFilterCompressibleAirLBMKernel.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include <cmath>
-#include "UbMath.h"
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphasePressureFilterCompressibleAirLBMKernel::MultiphasePressureFilterCompressibleAirLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-void MultiphasePressureFilterCompressibleAirLBMKernel::initDataSet()
-{
-	SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
-	SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field
-
-	SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D(            nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new  CbArray3D<real, IndexerX3X2X1>(    nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	dataSet->setFdistributions(f);
-	dataSet->setHdistributions(h); // For phase-field
-	dataSet->setPhaseField(divU1);
-	dataSet->setPressureField(pressure);
-
-	phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0));
-
-	divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> MultiphasePressureFilterCompressibleAirLBMKernel::clone()
-{
-	SPtr<LBMKernel> kernel(new MultiphasePressureFilterCompressibleAirLBMKernel());
-	kernel->setNX(nx);
-	dynamicPointerCast<MultiphasePressureFilterCompressibleAirLBMKernel>(kernel)->initDataSet();
-	kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-	kernel->setDensityRatio(this->densityRatio);
-	kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-	kernel->setContactAngle(this->contactAngle);
-	kernel->setPhiL(this->phiL);
-	kernel->setPhiH(this->phiH);
-	kernel->setPhaseFieldRelaxation(this->tauH);
-	kernel->setMobility(this->mob);
-	kernel->setInterfaceWidth(this->interfaceWidth);
-
-	kernel->setBCSet(bcSet->clone(kernel));
-	kernel->setWithForcing(withForcing);
-	kernel->setForcingX1(muForcingX1);
-	kernel->setForcingX2(muForcingX2);
-	kernel->setForcingX3(muForcingX3);
-	kernel->setIndex(ix1, ix2, ix3);
-	kernel->setDeltaT(deltaT);
-	kernel->setGhostLayerWidth(2);
-	dynamicPointerCast<MultiphasePressureFilterCompressibleAirLBMKernel>(kernel)->initForcing();
-
-	return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void  MultiphasePressureFilterCompressibleAirLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real m2 = mfa + mfc;
-	real m1 = mfc - mfa;
-	real m0 = m2 + mfb;
-	mfa = m0;
-	m0 *= Kinverse;
-	m0 += oneMinusRho;
-	mfb = (m1 * Kinverse - m0 * vv) * K;
-	mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void  MultiphasePressureFilterCompressibleAirLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
-	real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
-	mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
-	mfa = m0;
-	mfb = m1;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-void  MultiphasePressureFilterCompressibleAirLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real m1 = (mfa + mfc) + mfb;
-	real m2 = mfc - mfa;
-	mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-	mfb = m2 - vv * m1;
-	mfa = m1;
-}
-
-
-void  MultiphasePressureFilterCompressibleAirLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-	real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-	mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-	mfb = mb;
-	mfa = ma;
-}
-
-
-void MultiphasePressureFilterCompressibleAirLBMKernel::calculate(int step)
-{
-	using namespace D3Q27System;
-//	using namespace UbMath;
-	using namespace vf::lbm::dir;
-	using namespace vf::basics::constant;
-
-	forcingX1 = 0.0;
-	forcingX2 = 0.0;
-	forcingX3 = 0.0;
-
-	real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5;
-														 /////////////////////////////////////
-
-	localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-	zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-	localDistributionsH1    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-	nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-	zeroDistributionsH1     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField();
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-	for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) {
-		for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) {
-			for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-					(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
-						(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-							((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-								(mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-
-					////// read F-distributions for velocity formalism
-
-					mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-					mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-					mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-					mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-					mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-					mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-					mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-					mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-					mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-					mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-					mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-					mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-					mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-					mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-					mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-					mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-					mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-					mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-					mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-					mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-					mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-					mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-					real rhoH = 1.0;
-					real rhoL = 1.0 / densityRatio;
-
-					real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-					real drho = (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;
-					
-					real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH); //Incompressible
-					//LBMReal rho = rhoH + rhoToPhi * ((*pressure)(x1, x2, x3) - phiH); //wrong?
-					//! variable density -> TRANSFER!
-					//LBMReal rho = rhoH * ((*phaseField)(x1, x2, x3)) + rhoL * ((*phaseField2)(x1, x2, x3));
-
-					(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + rho * c1o3 * drho;
-
-					//(*pressure)(x1, x2, x3) = (((*phaseField)(x1, x2, x3)) + ((*phaseField2)(x1, x2, x3)) - c1) * c1o3;
-					////!!!!!! relplace by pointer swap!
-					//(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3);
-				}
-			}
-		}
-	}
-
-	real collFactorM;
-
-	////Periodic Filter
-	for (int x3 = minX3-1; x3 <= maxX3; x3++) {
-		for (int x2 = minX2-1; x2 <= maxX2; x2++) {
-			for (int x1 = minX1-1; x1 <= maxX1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-
-					real sum = 0.;
-
-					///Version for boundaries
-					for (int xx = -1; xx <= 1; xx++) {
-						//int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0;
-						int xxx = xx + x1;
-
-						for (int yy = -1; yy <= 1; yy++) {
-							//int yyy = (yy+x2 <= maxX2) ?( (yy + x2 > 0) ? yy + x2 : maxX2) : 0;
-							int yyy = yy + x2;
-
-							for (int zz = -1; zz <= 1; zz++) {
-								//int zzz = (zz+x3 <= maxX3) ? zzz = ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0;
-								int zzz = zz + x3;
-
-								if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) {
-									sum+= 64.0/(216.0*(c1o1+c3o1*abs(xx))* (c1o1 + c3o1 * abs(yy))* (c1o1 + c3o1 * abs(zz)))*(*pressureOld)(xxx, yyy, zzz);
-								}
-								else{ sum+= 64.0 / (216.0 * (c1o1 + c3o1 * abs(xx)) * (c1o1 + c3o1 * abs(yy)) * (c1o1 + c3o1 * abs(zz))) * (*pressureOld)(x1, x2, x3);
-								}
-
-
-							}
-						}
-					}
-					(*pressure)(x1, x2, x3) = sum;
-				}
-			}
-		}
-	}
-
-	////!filter
-
-	for (int x3 = minX3; x3 < maxX3; x3++) {
-		for (int x2 = minX2; x2 < maxX2; x2++) {
-			for (int x1 = minX1; x1 < maxX1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					//////////////////////////////////////////////////////////////////////////
-					// Read distributions and phase field
-					////////////////////////////////////////////////////////////////////////////
-					//////////////////////////////////////////////////////////////////////////
-
-					// E   N  T
-					// c   c  c
-					//////////
-					// W   S  B
-					// a   a  a
-
-					// Rest ist b
-
-					// mfxyz
-					// a - negative
-					// b - null
-					// c - positive
-
-					// a b c
-					//-1 0 1
-
-					findNeighbors(phaseField, x1, x2, x3);
-
-					real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-					real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-					real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-					real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-					real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-					real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-					real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-					real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-					real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-					real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-					real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-					real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-					real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-					real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-					real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-					real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-					real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-					real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-					real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-					real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-					real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-					real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-					real rhoH = 1.0;
-					real rhoL = 1.0 / densityRatio;
-
-					real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-					real dX1_phi = gradX1_phi();
-					real dX2_phi = gradX2_phi();
-					real dX3_phi = gradX3_phi();
-
-					real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9;
-					real normX1 = dX1_phi / denom;
-					real normX2 = dX2_phi / denom;
-					real normX3 = dX3_phi / denom;
-
-
-
-					collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
-
-
-					real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-					//----------- Calculating Macroscopic Values -------------
-					real rho = rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible
-					//LBMReal rho = rhoL + (rhoH - rhoL) * phi[REST] + (one - phi[REST]) * (*pressure)(x1, x2, x3) * three; //compressible
-
-					real m0, m1, m2;
-					real rhoRef=c1o1;
-
-					real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-						(mfcbb - mfabb))/rhoRef;
-					real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-						(mfbcb - mfbab))/rhoRef;
-					real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-						(mfbbc - mfbba))/rhoRef;
-
-					real gradPx = 0.0;
-					real gradPy = 0.0;
-					real gradPz = 0.0;
-					for (int dir1 = -1; dir1 <= 1; dir1++) {
-						for (int dir2 = -1; dir2 <= 1; dir2++) {
-							int yyy = x2 + dir1;
-							int zzz = x3 + dir2;
-							if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) {
-								gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) {
-								gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-
-							int xxx = x1 + dir1;
-							if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) {
-								gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) {
-								gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-
-							yyy = x2 + dir2;
-							if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) {
-								gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) {
-								gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-
-						}
-					}
-
-					//Viscosity increase by pressure gradient
-					real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom);
-					//LBMReal limVis = 0.0000001*10;//0.01;
-					// collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM);
-					// collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
-					errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi;
-					//collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis);
-
-					//3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) - (phi2[BNE] - phi2[TSW])))
-					//+WEIGTH[NE] * (((phi2[TE] - phi2[BW]) - (phi2[BE] - phi2[TW])) + ((phi2[TS] - phi2[BN]) + (phi2[TN] - phi2[BS])))) +
-					//+WEIGTH[N] * (phi2[T] - phi2[B]));
-
-					muRho = rho;
-
-					forcingX1 = muForcingX1.Eval()/rho - gradPx/rho;
-					forcingX2 = muForcingX2.Eval()/rho - gradPy/rho;
-					forcingX3 = muForcingX3.Eval()/rho - gradPz/rho;
-
-					vvx += forcingX1 * deltaT * 0.5; // X
-					vvy += forcingX2 * deltaT * 0.5; // Y
-					vvz += forcingX3 * deltaT * 0.5; // Z
-
-                    ///surface tension force
-					vvx += mu * dX1_phi * c1o2 / rho;
-					vvy += mu * dX2_phi * c1o2 / rho ;
-					vvz += mu * dX3_phi * c1o2 / rho;
-
-					real vx2;
-					real vy2;
-					real vz2;
-					vx2 = vvx * vvx;
-					vy2 = vvy * vvy;
-					vz2 = vvz * vvz;
-					///////////////////////////////////////////////////////////////////////////////////////////               
-					real 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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
-
-															 ////////////////////////////////////////////////////////////////////////////////////
-					real wadjust;
-					real qudricLimit = 0.01;
-					////////////////////////////////////////////////////////////////////////////////////
-					//Hin
-					////////////////////////////////////////////////////////////////////////////////////
-					// mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Z - Dir
-					m2 = mfaaa + mfaac;
-					m1 = mfaac - mfaaa;
-					m0 = m2 + mfaab;
-					mfaaa = m0;
-					m0 += c1o36 * oMdrho;
-					mfaab = m1 - m0 * vvz;
-					mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaba + mfabc;
-					m1 = mfabc - mfaba;
-					m0 = m2 + mfabb;
-					mfaba = m0;
-					m0 += c1o9 * oMdrho;
-					mfabb = m1 - m0 * vvz;
-					mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaca + mfacc;
-					m1 = mfacc - mfaca;
-					m0 = m2 + mfacb;
-					mfaca = m0;
-					m0 += c1o36 * oMdrho;
-					mfacb = m1 - m0 * vvz;
-					mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbaa + mfbac;
-					m1 = mfbac - mfbaa;
-					m0 = m2 + mfbab;
-					mfbaa = m0;
-					m0 += c1o9 * oMdrho;
-					mfbab = m1 - m0 * vvz;
-					mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbba + mfbbc;
-					m1 = mfbbc - mfbba;
-					m0 = m2 + mfbbb;
-					mfbba = m0;
-					m0 += c4o9 * oMdrho;
-					mfbbb = m1 - m0 * vvz;
-					mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbca + mfbcc;
-					m1 = mfbcc - mfbca;
-					m0 = m2 + mfbcb;
-					mfbca = m0;
-					m0 += c1o9 * oMdrho;
-					mfbcb = m1 - m0 * vvz;
-					mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcaa + mfcac;
-					m1 = mfcac - mfcaa;
-					m0 = m2 + mfcab;
-					mfcaa = m0;
-					m0 += c1o36 * oMdrho;
-					mfcab = m1 - m0 * vvz;
-					mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcba + mfcbc;
-					m1 = mfcbc - mfcba;
-					m0 = m2 + mfcbb;
-					mfcba = m0;
-					m0 += c1o9 * oMdrho;
-					mfcbb = m1 - m0 * vvz;
-					mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcca + mfccc;
-					m1 = mfccc - mfcca;
-					m0 = m2 + mfccb;
-					mfcca = m0;
-					m0 += c1o36 * oMdrho;
-					mfccb = m1 - m0 * vvz;
-					mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					// mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Y - Dir
-					m2 = mfaaa + mfaca;
-					m1 = mfaca - mfaaa;
-					m0 = m2 + mfaba;
-					mfaaa = m0;
-					m0 += c1o6 * oMdrho;
-					mfaba = m1 - m0 * vvy;
-					mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaab + mfacb;
-					m1 = mfacb - mfaab;
-					m0 = m2 + mfabb;
-					mfaab = m0;
-					mfabb = m1 - m0 * vvy;
-					mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaac + mfacc;
-					m1 = mfacc - mfaac;
-					m0 = m2 + mfabc;
-					mfaac = m0;
-					m0 += c1o18 * oMdrho;
-					mfabc = m1 - m0 * vvy;
-					mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbaa + mfbca;
-					m1 = mfbca - mfbaa;
-					m0 = m2 + mfbba;
-					mfbaa = m0;
-					m0 += c2o3 * oMdrho;
-					mfbba = m1 - m0 * vvy;
-					mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbab + mfbcb;
-					m1 = mfbcb - mfbab;
-					m0 = m2 + mfbbb;
-					mfbab = m0;
-					mfbbb = m1 - m0 * vvy;
-					mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbac + mfbcc;
-					m1 = mfbcc - mfbac;
-					m0 = m2 + mfbbc;
-					mfbac = m0;
-					m0 += c2o9 * oMdrho;
-					mfbbc = m1 - m0 * vvy;
-					mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcaa + mfcca;
-					m1 = mfcca - mfcaa;
-					m0 = m2 + mfcba;
-					mfcaa = m0;
-					m0 += c1o6 * oMdrho;
-					mfcba = m1 - m0 * vvy;
-					mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcab + mfccb;
-					m1 = mfccb - mfcab;
-					m0 = m2 + mfcbb;
-					mfcab = m0;
-					mfcbb = m1 - m0 * vvy;
-					mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcac + mfccc;
-					m1 = mfccc - mfcac;
-					m0 = m2 + mfcbc;
-					mfcac = m0;
-					m0 += c1o18 * oMdrho;
-					mfcbc = m1 - m0 * vvy;
-					mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					// mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// X - Dir
-					m2 = mfaaa + mfcaa;
-					m1 = mfcaa - mfaaa;
-					m0 = m2 + mfbaa;
-					mfaaa = m0;
-					m0 += 1. * oMdrho;
-					mfbaa = m1 - m0 * vvx;
-					mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaba + mfcba;
-					m1 = mfcba - mfaba;
-					m0 = m2 + mfbba;
-					mfaba = m0;
-					mfbba = m1 - m0 * vvx;
-					mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaca + mfcca;
-					m1 = mfcca - mfaca;
-					m0 = m2 + mfbca;
-					mfaca = m0;
-					m0 += c1o3 * oMdrho;
-					mfbca = m1 - m0 * vvx;
-					mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaab + mfcab;
-					m1 = mfcab - mfaab;
-					m0 = m2 + mfbab;
-					mfaab = m0;
-					mfbab = m1 - m0 * vvx;
-					mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfabb + mfcbb;
-					m1 = mfcbb - mfabb;
-					m0 = m2 + mfbbb;
-					mfabb = m0;
-					mfbbb = m1 - m0 * vvx;
-					mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfacb + mfccb;
-					m1 = mfccb - mfacb;
-					m0 = m2 + mfbcb;
-					mfacb = m0;
-					mfbcb = m1 - m0 * vvx;
-					mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaac + mfcac;
-					m1 = mfcac - mfaac;
-					m0 = m2 + mfbac;
-					mfaac = m0;
-					m0 += c1o3 * oMdrho;
-					mfbac = m1 - m0 * vvx;
-					mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfabc + mfcbc;
-					m1 = mfcbc - mfabc;
-					m0 = m2 + mfbbc;
-					mfabc = m0;
-					mfbbc = m1 - m0 * vvx;
-					mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfacc + mfccc;
-					m1 = mfccc - mfacc;
-					m0 = m2 + mfbcc;
-					mfacc = m0;
-					m0 += c1o9 * oMdrho;
-					mfbcc = m1 - m0 * vvx;
-					mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					// Cumulants
-					////////////////////////////////////////////////////////////////////////////////////
-
-					// mfaaa = 0.0;
-					real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-											//  LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
-											//  LBMReal OxyyMxzz  = 1.;//2+s9;//
-					real O4 = 1.;
-					real O5 = 1.;
-					real O6 = 1.;
-
-					/////fourth order parameters; here only for test. Move out of loop!
-
-					real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-					real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-					//    LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-					real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
-					real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-
-
-					//Cum 4.
-					//LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-					//LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-					//LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-					real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-					real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-					real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-					real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-					real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-					real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-
-					//Cum 5.
-					real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-					real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-					real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-					//Cum 6.
-					real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-						- 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-							+ 2. * (mfcaa * mfaca * mfaac)
-							+ 16. * mfbba * mfbab * mfabb)
-						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-					//2.
-					// linear combinations
-					real mxxPyyPzz = mfcaa + mfaca + mfaac;
-
-					//  LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho));
-					mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa
-										//mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
-					real mxxMyy = mfcaa - mfaca;
-					real mxxMzz = mfcaa - mfaac;
-
-					real dxux =  -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
-					real dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
-					real dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
-
-					real Dxy = -c3o1 * collFactorM * mfbba;
-					real Dxz = -c3o1 * collFactorM * mfbab;
-					real Dyz = -c3o1 * collFactorM * mfabb;
-
-					//relax
-					mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-					mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-					mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-					mfabb += collFactorM * (-mfabb);
-					mfbab += collFactorM * (-mfbab);
-					mfbba += collFactorM * (-mfbba);
-
-					////updated pressure
-					//mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling;
-					mfaaa = 0.0; // Pressure elimination as in standard velocity model
-								 //  mfaaa += (rho - c1) * (dxux + dyuy + dzuz);
-
-					mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
-
-										// mxxPyyPzz += (mfaaa + mfaaaS) * c1o2;
-										//mfaaa = mfaaaS;
-										// linear combinations back
-					mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-					mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-					mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-					//3.
-					// linear combinations
-					real mxxyPyzz = mfcba + mfabc;
-					real mxxyMyzz = mfcba - mfabc;
-
-					real mxxzPyyz = mfcab + mfacb;
-					real mxxzMyyz = mfcab - mfacb;
-
-					real mxyyPxzz = mfbca + mfbac;
-					real mxyyMxzz = mfbca - mfbac;
-
-					//relax
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-					mfbbb += wadjust * (-mfbbb);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-					mxxyPyzz += wadjust * (-mxxyPyzz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-					mxxyMyzz += wadjust * (-mxxyMyzz);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-					mxxzPyyz += wadjust * (-mxxzPyyz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-					mxxzMyyz += wadjust * (-mxxzMyyz);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-					mxyyPxzz += wadjust * (-mxyyPxzz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-					mxyyMxzz += wadjust * (-mxyyMxzz);
-
-					// linear combinations back
-					mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-					mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-					mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-					mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-					mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-					mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-					//4.
-					CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-					CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-					CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-					CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc);
-					CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb);
-					CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb);
-
-					//5.
-					CUMbcc += O5 * (-CUMbcc);
-					CUMcbc += O5 * (-CUMcbc);
-					CUMccb += O5 * (-CUMccb);
-
-					//6.
-					CUMccc += O6 * (-CUMccc);
-
-					//back cumulants to central moments
-					//4.
-					//mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-					//mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-					//mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-					mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-					mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-					mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-					mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-					mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-					mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-
-					//5.
-					mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-					mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-					mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-					//6.
-					mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-						- 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-							+ 2. * (mfcaa * mfaca * mfaac)
-							+ 16. * mfbba * mfbab * mfabb)
-						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-
-					////////
-
-
-					////////////////////////////////////////////////////////////////////////////////////
-					//forcing
-					mfbaa = -mfbaa;
-					mfaba = -mfaba;
-					mfaab = -mfaab;
-					//////////////////////////////////////////////////////////////////////////////////////
-					mfbaa += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (2 * dxux * dX1_phi + Dxy * dX2_phi + Dxz * dX3_phi) / (rho);
-					mfaba += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (Dxy * dX1_phi + 2 * dyuy * dX2_phi + Dyz * dX3_phi) / (rho);
-					mfaab += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (Dxz * dX1_phi + Dyz * dX2_phi + 2 * dyuy * dX3_phi) / (rho);
-					////////////////////////////////////////////////////////////////////////////////////
-					//back
-					////////////////////////////////////////////////////////////////////////////////////
-					//mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Z - Dir
-					m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
-					m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-					mfaaa = m0;
-					mfaab = m1;
-					mfaac = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-					m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
-					m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-					mfaba = m0;
-					mfabb = m1;
-					mfabc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2;
-					m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-					mfaca = m0;
-					mfacb = m1;
-					mfacc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-					m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
-					m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-					mfbaa = m0;
-					mfbab = m1;
-					mfbac = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-					m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
-					m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-					mfbba = m0;
-					mfbbb = m1;
-					mfbbc = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-					m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
-					m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-					mfbca = m0;
-					mfbcb = m1;
-					mfbcc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2;
-					m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-					mfcaa = m0;
-					mfcab = m1;
-					mfcac = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-					m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
-					m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-					mfcba = m0;
-					mfcbb = m1;
-					mfcbc = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
-					m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-					mfcca = m0;
-					mfccb = m1;
-					mfccc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					//mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Y - Dir
-					m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
-					m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfaaa = m0;
-					mfaba = m1;
-					mfaca = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
-					m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfaab = m0;
-					mfabb = m1;
-					mfacb = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
-					m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfaac = m0;
-					mfabc = m1;
-					mfacc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-					m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
-					m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-					mfbaa = m0;
-					mfbba = m1;
-					mfbca = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-					m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
-					m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-					mfbab = m0;
-					mfbbb = m1;
-					mfbcb = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-					m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
-					m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-					mfbac = m0;
-					mfbbc = m1;
-					mfbcc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
-					m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfcaa = m0;
-					mfcba = m1;
-					mfcca = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
-					m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfcab = m0;
-					mfcbb = m1;
-					mfccb = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
-					m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfcac = m0;
-					mfcbc = m1;
-					mfccc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					//mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// X - Dir
-					m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaaa = m0;
-					mfbaa = m1;
-					mfcaa = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaba = m0;
-					mfbba = m1;
-					mfcba = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaca = m0;
-					mfbca = m1;
-					mfcca = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaab = m0;
-					mfbab = m1;
-					mfcab = m2;
-					///////////b////////////////////////////////////////////////////////////////////////
-					m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
-					m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfabb = m0;
-					mfbbb = m1;
-					mfcbb = m2;
-					///////////b////////////////////////////////////////////////////////////////////////
-					m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfacb = m0;
-					mfbcb = m1;
-					mfccb = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaac = m0;
-					mfbac = m1;
-					mfcac = m2;
-					///////////c////////////////////////////////////////////////////////////////////////
-					m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfabc = m0;
-					mfbbc = m1;
-					mfcbc = m2;
-					///////////c////////////////////////////////////////////////////////////////////////
-					m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfacc = m0;
-					mfbcc = m1;
-					mfccc = m2;
-
-					//////////////////////////////////////////////////////////////////////////
-					//proof correctness
-					//////////////////////////////////////////////////////////////////////////
-					//#ifdef  PROOF_CORRECTNESS
-					real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-						+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-						+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-					//			   //LBMReal dif = fabs(drho - rho_post);
-					//               LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post;
-					//#ifdef SINGLEPRECISION
-					//			   if (dif > 10.0E-7 || dif < -10.0E-7)
-					//#else
-					//			   if (dif > 10.0E-15 || dif < -10.0E-15)
-					//#endif
-					//			   {
-					//				   UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post)
-					//					   + " dif=" + UbSystem::toString(dif)
-					//					   + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-					//				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-					//				   //exit(EXIT_FAILURE);
-					//			   }
-					//#endif
-
-					if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post))
-						UB_THROW(UbException(
-							UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," +
-							UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-
-					//////////////////////////////////////////////////////////////////////////
-					//write distribution
-					//////////////////////////////////////////////////////////////////////////
-					(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb         ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab         ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba         ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab        ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba        ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa        ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa      ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca      ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb   ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb    ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc   ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc    ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc   ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac    ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc  ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac  ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac   ;//* rho * c1o3;
-
-					(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3;
-																																		// !Old Kernel
-/////////////////////  P H A S E - F I E L D   S O L V E R
-////////////////////////////////////////////
-/////CUMULANT PHASE-FIELD
-					real omegaD =1.0/( 3.0 * mob + 0.5);
-					{
-						mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-						mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-						mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-						mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-						mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-						mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-						mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-						mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-						mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-						mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-						mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-						mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-						mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-						mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-						mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-						mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-						mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-						mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-						mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-						mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-						mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-						mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-						mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-						mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// second component
-						real concentration =
-							((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-								(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-								((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-						////////////////////////////////////////////////////////////////////////////////////
-						real oneMinusRho = c1o1 - concentration;
-
-						real cx =
-							((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-								(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-								(mfcbb - mfabb));
-						real cy =
-							((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-								(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-								(mfbcb - mfbab));
-						real cz =
-							((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-								(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-								(mfbbc - mfbba));
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// calculate the square of velocities for this lattice node
-						real cx2 = cx * cx;
-						real cy2 = cy * cy;
-						real cz2 = cz * cz;
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (6)-(14) in \ref
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-						forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-						forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-						forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-						forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-						forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-						forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - experimental Cumulant ... to be published ... hopefully
-						//!
-
-						// linearized orthogonalization of 3rd order central moments
-						real Mabc = mfabc - mfaba * c1o3;
-						real Mbca = mfbca - mfbaa * c1o3;
-						real Macb = mfacb - mfaab * c1o3;
-						real Mcba = mfcba - mfaba * c1o3;
-						real Mcab = mfcab - mfaab * c1o3;
-						real Mbac = mfbac - mfbaa * c1o3;
-						// linearized orthogonalization of 5th order central moments
-						real Mcbc = mfcbc - mfaba * c1o9;
-						real Mbcc = mfbcc - mfbaa * c1o9;
-						real Mccb = mfccb - mfaab * c1o9;
-
-						// collision of 1st order moments
-						cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-							normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-						cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-							normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-						cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-							normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-
-						cx2 = cx * cx;
-						cy2 = cy * cy;
-						cz2 = cz * cz;
-
-						// equilibration of 2nd order moments
-						mfbba = c0o1;
-						mfbab = c0o1;
-						mfabb = c0o1;
-
-						mfcaa = c1o3 * concentration;
-						mfaca = c1o3 * concentration;
-						mfaac = c1o3 * concentration;
-
-						// equilibration of 3rd order moments
-						Mabc = c0o1;
-						Mbca = c0o1;
-						Macb = c0o1;
-						Mcba = c0o1;
-						Mcab = c0o1;
-						Mbac = c0o1;
-						mfbbb = c0o1;
-
-						// from linearized orthogonalization 3rd order central moments to central moments
-						mfabc = Mabc + mfaba * c1o3;
-						mfbca = Mbca + mfbaa * c1o3;
-						mfacb = Macb + mfaab * c1o3;
-						mfcba = Mcba + mfaba * c1o3;
-						mfcab = Mcab + mfaab * c1o3;
-						mfbac = Mbac + mfbaa * c1o3;
-
-						// equilibration of 4th order moments
-						mfacc = c1o9 * concentration;
-						mfcac = c1o9 * concentration;
-						mfcca = c1o9 * concentration;
-
-						mfcbb = c0o1;
-						mfbcb = c0o1;
-						mfbbc = c0o1;
-
-						// equilibration of 5th order moments
-						Mcbc = c0o1;
-						Mbcc = c0o1;
-						Mccb = c0o1;
-
-						// from linearized orthogonalization 5th order central moments to central moments
-						mfcbc = Mcbc + mfaba * c1o9;
-						mfbcc = Mbcc + mfbaa * c1o9;
-						mfccb = Mccb + mfaab * c1o9;
-
-						// equilibration of 6th order moment
-						mfccc = c1o27 * concentration;
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (88)-(96) in
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-						backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-						backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-						backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-						backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-						backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-						backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-						(*this->localDistributionsH1)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-						(*this->localDistributionsH1)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-						(*this->localDistributionsH1)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-						(*this->localDistributionsH1)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-						(*this->localDistributionsH1)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-						(*this->localDistributionsH1)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-						(*this->localDistributionsH1)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-						(*this->localDistributionsH1)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-						(*this->localDistributionsH1)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-						(*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-						(*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb;
-					}
-				}
-			}
-		}
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-
-real MultiphasePressureFilterCompressibleAirLBMKernel::gradX1_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
-		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
-}
-
-real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
-		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
-		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
-}
-
-real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
-		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
-}
-
-real MultiphasePressureFilterCompressibleAirLBMKernel::gradX1_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
-		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
-}
-
-real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
-		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
-		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
-}
-
-real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
-		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
-}
-
-real MultiphasePressureFilterCompressibleAirLBMKernel::nabla2_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	real sum = 0.0;
-	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
-		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
-	sum += WEIGTH[d0PP] * (
-		(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
-		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
-		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
-		);
-	sum += WEIGTH[d00P] * (
-		((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
-		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
-		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
-		);
-
-	return 6.0 * sum;
-}
-
-void MultiphasePressureFilterCompressibleAirLBMKernel::computePhasefield()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-	int minX1 = ghostLayerWidth;
-	int minX2 = ghostLayerWidth;
-	int minX3 = ghostLayerWidth;
-	int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-	int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-	int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-	//------------- Computing the phase-field ------------------
-	for (int x3 = minX3; x3 < maxX3; x3++) {
-		for (int x2 = minX2; x2 < maxX2; x2++) {
-			for (int x1 = minX1; x1 < maxX1; x1++) {
-				// if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-				{
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-					h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
-				}
-			}
-		}
-	}
-}
-
-void MultiphasePressureFilterCompressibleAirLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		} else {
-			phi[k] = 0.0;
-		}
-	}
-}
-
-void MultiphasePressureFilterCompressibleAirLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi2[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		}
-		else {
-			phi2[k] = 0.0;
-		}
-	}
-}
-
-void MultiphasePressureFilterCompressibleAirLBMKernel::swapDistributions()
-{
-	LBMKernel::swapDistributions();
-	dataSet->getHdistributions()->swap();
-}
-
-void MultiphasePressureFilterCompressibleAirLBMKernel::initForcing()
-{
-	muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3);
-	muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3);
-	muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3);
-
-	muDeltaT = deltaT;
-
-	muForcingX1.DefineVar("dt", &muDeltaT);
-	muForcingX2.DefineVar("dt", &muDeltaT);
-	muForcingX3.DefineVar("dt", &muDeltaT);
-
-	muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
-
-	muForcingX1.DefineVar("nu", &muNu);
-	muForcingX2.DefineVar("nu", &muNu);
-	muForcingX3.DefineVar("nu", &muNu);
-
-	muForcingX1.DefineVar("rho",&muRho); 
-	muForcingX2.DefineVar("rho",&muRho); 
-	muForcingX3.DefineVar("rho",&muRho); 
-
-}
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.h
deleted file mode 100644
index 56d31b53c8ed42358e898869e8193bcf7779743a..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.h
+++ /dev/null
@@ -1,116 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphasePressureFilterCompressibleAirLBMKernel.h
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphasePressureFilterCompressibleAirLBMKernel_H
-#define MultiphasePressureFilterCompressibleAirLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  M. Geier, K. Kutscher, Hesameddin Safari
-class MultiphasePressureFilterCompressibleAirLBMKernel : public LBMKernel
-{
-public:
-    MultiphasePressureFilterCompressibleAirLBMKernel();
-    virtual ~MultiphasePressureFilterCompressibleAirLBMKernel(void) = default;
-    void calculate(int step) override;
-    SPtr<LBMKernel> clone() override;
-
-
-    ///refactor
-    //CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure;
-
-
-    real getCalculationTime() override { return .0; }
-protected:
-    virtual void initDataSet();
-    void swapDistributions() override;
-
-    void initForcing();
-
-    void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-    void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-
-    real f1[D3Q27System::ENDF+1];
-
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-    CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1;
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1;
-    CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH1;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; 
-
-    real h  [D3Q27System::ENDF+1];
-    real h2[D3Q27System::ENDF + 1];
-    real g  [D3Q27System::ENDF+1];
-    real phi[D3Q27System::ENDF+1];
-    real phi2[D3Q27System::ENDF + 1];
-    real pr1[D3Q27System::ENDF+1];
-    real phi_cutoff[D3Q27System::ENDF+1];
-
-    real gradX1_phi();
-    real gradX2_phi();
-    real gradX3_phi();
-    real gradX1_phi2();
-    real gradX2_phi2();
-    real gradX3_phi2();
-    void computePhasefield();
-    void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-    void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3);
-
-    real nabla2_phi();
-
-    mu::value_type muX1,muX2,muX3;
-    mu::value_type muDeltaT;
-    mu::value_type muNu;
-    mu::value_type muRho;
-    real forcingX1;
-    real forcingX2;
-    real forcingX3;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp
deleted file mode 100644
index 48c2039cc710ac92ce5d2f4d0aa704f1a46bdb8a..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp
+++ /dev/null
@@ -1,1794 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphasePressureFilterLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphasePressureFilterLBMKernel.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include <cmath>
-#include "UbMath.h"
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphasePressureFilterLBMKernel::MultiphasePressureFilterLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-void MultiphasePressureFilterLBMKernel::initDataSet()
-{
-	SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); // For phase-field
-
-	//SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D(            nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new  CbArray3D<real, IndexerX3X2X1>(    nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	dataSet->setFdistributions(f);
-	dataSet->setHdistributions(h); // For phase-field
-	//dataSet->setPhaseField(divU1);
-	dataSet->setPressureField(pressure);
-
-	phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-
-	divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> MultiphasePressureFilterLBMKernel::clone()
-{
-	SPtr<LBMKernel> kernel(new MultiphasePressureFilterLBMKernel());
-	kernel->setNX(nx);
-	dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->initDataSet();
-	kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-	kernel->setDensityRatio(this->densityRatio);
-	kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-	kernel->setContactAngle(this->contactAngle);
-	kernel->setPhiL(this->phiL);
-	kernel->setPhiH(this->phiH);
-	kernel->setPhaseFieldRelaxation(this->tauH);
-	kernel->setMobility(this->mob);
-	kernel->setInterfaceWidth(this->interfaceWidth);
-
-	kernel->setBCSet(bcSet->clone(kernel));
-	kernel->setWithForcing(withForcing);
-	kernel->setForcingX1(muForcingX1);
-	kernel->setForcingX2(muForcingX2);
-	kernel->setForcingX3(muForcingX3);
-	kernel->setIndex(ix1, ix2, ix3);
-	kernel->setDeltaT(deltaT);
-	kernel->setGhostLayerWidth(2);
-	dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->initForcing();
-    dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(this->phaseFieldBC);
-
-	return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void  MultiphasePressureFilterLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	real m2 = mfa + mfc;
-	real m1 = mfc - mfa;
-	real m0 = m2 + mfb;
-	mfa = m0;
-	m0 *= Kinverse;
-	m0 += oneMinusRho;
-	mfb = (m1 * Kinverse - m0 * vv) * K;
-	mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void  MultiphasePressureFilterLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
-	real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
-	mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
-	mfa = m0;
-	mfb = m1;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-void  MultiphasePressureFilterLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real m1 = (mfa + mfc) + mfb;
-	real m2 = mfc - mfa;
-	mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-	mfb = m2 - vv * m1;
-	mfa = m1;
-}
-
-
-void  MultiphasePressureFilterLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-	real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-	mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-	mfb = mb;
-	mfa = ma;
-}
-
-
-void MultiphasePressureFilterLBMKernel::calculate(int step)
-{
-	using namespace D3Q27System;
-//	using namespace UbMath;
-	using namespace vf::lbm::dir;
-	using namespace vf::basics::constant;
-
-	forcingX1 = 0.0;
-	forcingX2 = 0.0;
-	forcingX3 = 0.0;
-
-	real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5;
-														 /////////////////////////////////////
-
-	localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-	zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-	localDistributionsH1    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-	nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-	zeroDistributionsH1     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField();
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-	for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) {
-		for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) {
-			for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-					(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
-						(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-							((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-								(mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-
-					////// read F-distributions for velocity formalism
-
-					mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-					mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-					mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-					mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-					mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-					mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-					mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-					mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-					mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-					mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-					mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-					mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-					mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-					mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-					mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-					mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-					mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-					mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-					mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-					mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-					mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-					mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-					real rhoH = 1.0;
-					real rhoL = 1.0 / densityRatio;
-
-					real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-					real drho = (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;
-
-					real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH);
-
-					(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + rho * c1o3 * drho;
-				}
-			}
-		}
-	}
-
-	real collFactorM;
-
-	////Periodic Filter
-	for (int x3 = minX3-1; x3 <= maxX3; x3++) {
-		for (int x2 = minX2-1; x2 <= maxX2; x2++) {
-			for (int x1 = minX1-1; x1 <= maxX1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-
-					real sum = 0.;
-
-					///Version for boundaries
-					for (int xx = -1; xx <= 1; xx++) {
-						//int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0;
-						int xxx = xx + x1;
-
-						for (int yy = -1; yy <= 1; yy++) {
-							//int yyy = (yy+x2 <= maxX2) ?( (yy + x2 > 0) ? yy + x2 : maxX2) : 0;
-							int yyy = yy + x2;
-
-							for (int zz = -1; zz <= 1; zz++) {
-								//int zzz = (zz+x3 <= maxX3) ? zzz = ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0;
-								int zzz = zz + x3;
-
-								if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) {
-									sum+= 64.0/(216.0*(c1o1+c3o1 *abs(xx))* (c1o1 + c3o1 * abs(yy))* (c1o1 + c3o1 * abs(zz)))*(*pressureOld)(xxx, yyy, zzz);
-								}
-								else{ sum+= 64.0 / (216.0 * (c1o1 + c3o1 * abs(xx)) * (c1o1 + c3o1 * abs(yy)) * (c1o1 + c3o1 * abs(zz))) * (*pressureOld)(x1, x2, x3);
-								}
-
-
-							}
-						}
-					}
-					(*pressure)(x1, x2, x3) = sum;
-				}
-			}
-		}
-	}
-
-	////!filter
-
-	for (int x3 = minX3; x3 < maxX3; x3++) {
-		for (int x2 = minX2; x2 < maxX2; x2++) {
-			for (int x1 = minX1; x1 < maxX1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					//////////////////////////////////////////////////////////////////////////
-					// Read distributions and phase field
-					////////////////////////////////////////////////////////////////////////////
-					//////////////////////////////////////////////////////////////////////////
-
-					// E   N  T
-					// c   c  c
-					//////////
-					// W   S  B
-					// a   a  a
-
-					// Rest ist b
-
-					// mfxyz
-					// a - negative
-					// b - null
-					// c - positive
-
-					// a b c
-					//-1 0 1
-
-					findNeighbors(phaseField, x1, x2, x3);
-
-					real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-					real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-					real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-					real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-					real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-					real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-					real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-					real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-					real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-					real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-					real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-					real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-					real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-					real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-					real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-					real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-					real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-					real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-					real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-					real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-					real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-					real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-					real rhoH = 1.0;
-					real rhoL = 1.0 / densityRatio;
-
-					real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-					real dX1_phi = gradX1_phi();
-					real dX2_phi = gradX2_phi();
-					real dX3_phi = gradX3_phi();
-
-					real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9;
-					real normX1 = dX1_phi / denom;
-					real normX2 = dX2_phi / denom;
-					real normX3 = dX3_phi / denom;
-
-					dX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-                    dX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-                    dX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-
-					collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
-
-
-					real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-					//----------- Calculating Macroscopic Values -------------
-					real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
-
-					real m0, m1, m2;
-					real rhoRef=c1o1;
-
-					real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-						(mfcbb - mfabb))/rhoRef;
-					real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-						(mfbcb - mfbab))/rhoRef;
-					real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-						(mfbbc - mfbba))/rhoRef;
-
-					real gradPx = 0.0;
-					real gradPy = 0.0;
-					real gradPz = 0.0;
-					for (int dir1 = -1; dir1 <= 1; dir1++) {
-						for (int dir2 = -1; dir2 <= 1; dir2++) {
-							int yyy = x2 + dir1;
-							int zzz = x3 + dir2;
-							if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) {
-								gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) {
-								gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-
-							int xxx = x1 + dir1;
-							if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) {
-								gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) {
-								gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-
-							yyy = x2 + dir2;
-							if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) {
-								gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) {
-								gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-							else {
-								gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-							}
-
-						}
-					}
-
-					//Viscosity increase by pressure gradient
-					real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom);
-					//LBMReal limVis = 0.0000001*10;//0.01;
-					// collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM);
-					// collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
-					errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi;
-					//collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis);
-
-					//3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) - (phi2[BNE] - phi2[TSW])))
-					//+WEIGTH[NE] * (((phi2[TE] - phi2[BW]) - (phi2[BE] - phi2[TW])) + ((phi2[TS] - phi2[BN]) + (phi2[TN] - phi2[BS])))) +
-					//+WEIGTH[N] * (phi2[T] - phi2[B]));
-
-					muRho = rho;
-
-					forcingX1 = muForcingX1.Eval()/rho - gradPx/rho;
-					forcingX2 = muForcingX2.Eval()/rho - gradPy/rho;
-					forcingX3 = muForcingX3.Eval()/rho - gradPz/rho;
-
-					forcingX1 += mu * dX1_phi / rho;
-                    forcingX2 += mu * dX2_phi / rho;
-                    forcingX3 += mu * dX3_phi / rho;
-
-					vvx += forcingX1 * deltaT * 0.5; // X
-					vvy += forcingX2 * deltaT * 0.5; // Y
-					vvz += forcingX3 * deltaT * 0.5; // Z
-
-                    ///surface tension force
-					//vvx += mu * dX1_phi * c1o2 / rho;
-					//vvy += mu * dX2_phi * c1o2 / rho ;
-					//vvz += mu * dX3_phi * c1o2 / rho;
-
-					//Abbas
-					real pStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
-
-					real M200 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba))))
-						+ ((mfabb + mfcbb))));
-					real M020 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-						+ ((mfbab + mfbcb))));
-					real M002 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-						+ (+((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-						+ ((mfbba + mfbbc))));
-
-					real M110 = ((((((mfaaa + mfccc) + (-mfcac - mfaca)) + ((mfaac + mfcca) + (-mfcaa - mfacc)))
-						+ (((mfaab + mfccb) + (-mfacb - mfcab))))
-						));
-					real M101 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ((mfcac + mfaca) - (mfcaa + mfacc)))
-						+ (((mfaba + mfcbc) + (-mfabc - mfcba))))
-						));
-					real M011 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ((mfcaa + mfacc) - (mfcac + mfaca)))
-						+ (((mfbaa + mfbcc) + (-mfbac - mfbca))))
-						));
-					real vvxI = vvx;
-					real vvyI = vvy;
-					real vvzI = vvz;
-
-					//LBMReal collFactorStore = collFactorM;
-					//LBMReal stress;
-					for (int iter = 0; iter < 1; iter++) {
-						real OxxPyyPzz = 1.0;
-						real mxxPyyPzz = (M200 - vvxI * vvxI) + (M020 - vvyI * vvyI) + (M002 - vvzI * vvzI);
-						mxxPyyPzz -= c3o1 * pStar;
-
-						real mxxMyy = (M200 - vvxI * vvxI) - (M020 - vvyI * vvyI);
-						real mxxMzz = (M200 - vvxI * vvxI) - (M002 - vvzI * vvzI);
-						real mxy = M110 - vvxI * vvyI;
-						real mxz = M101 - vvxI * vvzI;
-						real myz = M011 - vvyI * vvzI;
-
-						///////Bingham
-						//LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
-						//LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-						//LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-						//LBMReal Dxy = -three * collFactorM * mxy;
-						//LBMReal Dxz = -three * collFactorM * mxz;
-						//LBMReal Dyz = -three * collFactorM * myz;
-
-						//LBMReal tau0 = phi[REST] * 1.0e-7;//(phi[REST]>0.01)?1.0e-6: 0;
-						//LBMReal shearRate =fabs(pStar)*0.0e-2+ sqrt(c2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho);
-						//collFactorM = collFactorM * (UbMath::one - (collFactorM * tau0) / (shearRate * c1o3 /* *rho*/ + 1.0e-15));
-						//collFactorM = (collFactorM < -1000000) ? -1000000 : collFactorM;
-						////if(collFactorM < 0.1) {
-						////	int test = 1;
-						////}
-						//////!Bingham
-
-
-						mxxMyy *= c1o1 - collFactorM * c1o2;
-						mxxMzz *= c1o1 - collFactorM * c1o2;
-						mxy *= c1o1 - collFactorM * c1o2;
-						mxz *= c1o1 - collFactorM * c1o2;
-						myz *= c1o1 - collFactorM * c1o2;
-						mxxPyyPzz *= c1o1 - OxxPyyPzz * c1o2;
-						//mxxPyyPzz += c3o2 * pStar;
-						real mxx = (mxxMyy + mxxMzz + mxxPyyPzz) * c1o3;
-						real myy = (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz) * c1o3;
-						real mzz = (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz) * c1o3;
-						vvxI = vvx - (mxx * dX1_phi + mxy * dX2_phi + mxz * dX3_phi) * rhoToPhi / (rho);
-						vvyI = vvy - (mxy * dX1_phi + myy * dX2_phi + myz * dX3_phi) * rhoToPhi / (rho);
-						vvzI = vvz - (mxz * dX1_phi + myz * dX2_phi + mzz * dX3_phi) * rhoToPhi / (rho);
-
-
-
-					}
-
-
-					forcingX1 += c2o1 * (vvxI - vvx);
-					forcingX2 += c2o1 * (vvyI - vvy);
-					forcingX3 += c2o1 * (vvzI - vvz);
-
-					mfabb += c1o2 * (-forcingX1) * c2o9;
-					mfbab += c1o2 * (-forcingX2) * c2o9;
-					mfbba += c1o2 * (-forcingX3) * c2o9;
-					mfaab += c1o2 * (-forcingX1 - forcingX2) * c1o18;
-					mfcab += c1o2 * (forcingX1 - forcingX2) * c1o18;
-					mfaba += c1o2 * (-forcingX1 - forcingX3) * c1o18;
-					mfcba += c1o2 * (forcingX1 - forcingX3) * c1o18;
-					mfbaa += c1o2 * (-forcingX2 - forcingX3) * c1o18;
-					mfbca += c1o2 * (forcingX2 - forcingX3) * c1o18;
-					mfaaa += c1o2 * (-forcingX1 - forcingX2 - forcingX3) * c1o72;
-					mfcaa += c1o2 * (forcingX1 - forcingX2 - forcingX3) * c1o72;
-					mfaca += c1o2 * (-forcingX1 + forcingX2 - forcingX3) * c1o72;
-					mfcca += c1o2 * (forcingX1 + forcingX2 - forcingX3) * c1o72;
-					mfcbb += c1o2 * (forcingX1)*c2o9;
-					mfbcb += c1o2 * (forcingX2)*c2o9;
-					mfbbc += c1o2 * (forcingX3)*c2o9;
-					mfccb += c1o2 * (forcingX1 + forcingX2) * c1o18;
-					mfacb += c1o2 * (-forcingX1 + forcingX2) * c1o18;
-					mfcbc += c1o2 * (forcingX1 + forcingX3) * c1o18;
-					mfabc += c1o2 * (-forcingX1 + forcingX3) * c1o18;
-					mfbcc += c1o2 * (forcingX2 + forcingX3) * c1o18;
-					mfbac += c1o2 * (-forcingX2 + forcingX3) * c1o18;
-					mfccc += c1o2 * (forcingX1 + forcingX2 + forcingX3) * c1o72;
-					mfacc += c1o2 * (-forcingX1 + forcingX2 + forcingX3) * c1o72;
-					mfcac += c1o2 * (forcingX1 - forcingX2 + forcingX3) * c1o72;
-					mfaac += c1o2 * (-forcingX1 - forcingX2 + forcingX3) * c1o72;
-
-
-
-					vvx = vvxI;
-					vvy = vvyI;
-					vvz = vvzI;
-
-					//!Abbas
-
-
-					real vx2;
-					real vy2;
-					real vz2;
-					vx2 = vvx * vvx;
-					vy2 = vvy * vvy;
-					vz2 = vvz * vvz;
-					///////////////////////////////////////////////////////////////////////////////////////////               
-					real 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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
-
-															 ////////////////////////////////////////////////////////////////////////////////////
-					real wadjust;
-					real qudricLimit = 0.01;
-					////////////////////////////////////////////////////////////////////////////////////
-					//Hin
-					////////////////////////////////////////////////////////////////////////////////////
-					// mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Z - Dir
-					m2 = mfaaa + mfaac;
-					m1 = mfaac - mfaaa;
-					m0 = m2 + mfaab;
-					mfaaa = m0;
-					m0 += c1o36 * oMdrho;
-					mfaab = m1 - m0 * vvz;
-					mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaba + mfabc;
-					m1 = mfabc - mfaba;
-					m0 = m2 + mfabb;
-					mfaba = m0;
-					m0 += c1o9 * oMdrho;
-					mfabb = m1 - m0 * vvz;
-					mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaca + mfacc;
-					m1 = mfacc - mfaca;
-					m0 = m2 + mfacb;
-					mfaca = m0;
-					m0 += c1o36 * oMdrho;
-					mfacb = m1 - m0 * vvz;
-					mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbaa + mfbac;
-					m1 = mfbac - mfbaa;
-					m0 = m2 + mfbab;
-					mfbaa = m0;
-					m0 += c1o9 * oMdrho;
-					mfbab = m1 - m0 * vvz;
-					mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbba + mfbbc;
-					m1 = mfbbc - mfbba;
-					m0 = m2 + mfbbb;
-					mfbba = m0;
-					m0 += c4o9 * oMdrho;
-					mfbbb = m1 - m0 * vvz;
-					mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbca + mfbcc;
-					m1 = mfbcc - mfbca;
-					m0 = m2 + mfbcb;
-					mfbca = m0;
-					m0 += c1o9 * oMdrho;
-					mfbcb = m1 - m0 * vvz;
-					mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcaa + mfcac;
-					m1 = mfcac - mfcaa;
-					m0 = m2 + mfcab;
-					mfcaa = m0;
-					m0 += c1o36 * oMdrho;
-					mfcab = m1 - m0 * vvz;
-					mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcba + mfcbc;
-					m1 = mfcbc - mfcba;
-					m0 = m2 + mfcbb;
-					mfcba = m0;
-					m0 += c1o9 * oMdrho;
-					mfcbb = m1 - m0 * vvz;
-					mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcca + mfccc;
-					m1 = mfccc - mfcca;
-					m0 = m2 + mfccb;
-					mfcca = m0;
-					m0 += c1o36 * oMdrho;
-					mfccb = m1 - m0 * vvz;
-					mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					// mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Y - Dir
-					m2 = mfaaa + mfaca;
-					m1 = mfaca - mfaaa;
-					m0 = m2 + mfaba;
-					mfaaa = m0;
-					m0 += c1o6 * oMdrho;
-					mfaba = m1 - m0 * vvy;
-					mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaab + mfacb;
-					m1 = mfacb - mfaab;
-					m0 = m2 + mfabb;
-					mfaab = m0;
-					mfabb = m1 - m0 * vvy;
-					mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaac + mfacc;
-					m1 = mfacc - mfaac;
-					m0 = m2 + mfabc;
-					mfaac = m0;
-					m0 += c1o18 * oMdrho;
-					mfabc = m1 - m0 * vvy;
-					mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbaa + mfbca;
-					m1 = mfbca - mfbaa;
-					m0 = m2 + mfbba;
-					mfbaa = m0;
-					m0 += c2o3 * oMdrho;
-					mfbba = m1 - m0 * vvy;
-					mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbab + mfbcb;
-					m1 = mfbcb - mfbab;
-					m0 = m2 + mfbbb;
-					mfbab = m0;
-					mfbbb = m1 - m0 * vvy;
-					mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbac + mfbcc;
-					m1 = mfbcc - mfbac;
-					m0 = m2 + mfbbc;
-					mfbac = m0;
-					m0 += c2o9 * oMdrho;
-					mfbbc = m1 - m0 * vvy;
-					mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcaa + mfcca;
-					m1 = mfcca - mfcaa;
-					m0 = m2 + mfcba;
-					mfcaa = m0;
-					m0 += c1o6 * oMdrho;
-					mfcba = m1 - m0 * vvy;
-					mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcab + mfccb;
-					m1 = mfccb - mfcab;
-					m0 = m2 + mfcbb;
-					mfcab = m0;
-					mfcbb = m1 - m0 * vvy;
-					mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcac + mfccc;
-					m1 = mfccc - mfcac;
-					m0 = m2 + mfcbc;
-					mfcac = m0;
-					m0 += c1o18 * oMdrho;
-					mfcbc = m1 - m0 * vvy;
-					mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					// mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// X - Dir
-					m2 = mfaaa + mfcaa;
-					m1 = mfcaa - mfaaa;
-					m0 = m2 + mfbaa;
-					mfaaa = m0;
-					m0 += 1. * oMdrho;
-					mfbaa = m1 - m0 * vvx;
-					mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaba + mfcba;
-					m1 = mfcba - mfaba;
-					m0 = m2 + mfbba;
-					mfaba = m0;
-					mfbba = m1 - m0 * vvx;
-					mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaca + mfcca;
-					m1 = mfcca - mfaca;
-					m0 = m2 + mfbca;
-					mfaca = m0;
-					m0 += c1o3 * oMdrho;
-					mfbca = m1 - m0 * vvx;
-					mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaab + mfcab;
-					m1 = mfcab - mfaab;
-					m0 = m2 + mfbab;
-					mfaab = m0;
-					mfbab = m1 - m0 * vvx;
-					mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfabb + mfcbb;
-					m1 = mfcbb - mfabb;
-					m0 = m2 + mfbbb;
-					mfabb = m0;
-					mfbbb = m1 - m0 * vvx;
-					mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfacb + mfccb;
-					m1 = mfccb - mfacb;
-					m0 = m2 + mfbcb;
-					mfacb = m0;
-					mfbcb = m1 - m0 * vvx;
-					mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaac + mfcac;
-					m1 = mfcac - mfaac;
-					m0 = m2 + mfbac;
-					mfaac = m0;
-					m0 += c1o3 * oMdrho;
-					mfbac = m1 - m0 * vvx;
-					mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfabc + mfcbc;
-					m1 = mfcbc - mfabc;
-					m0 = m2 + mfbbc;
-					mfabc = m0;
-					mfbbc = m1 - m0 * vvx;
-					mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfacc + mfccc;
-					m1 = mfccc - mfacc;
-					m0 = m2 + mfbcc;
-					mfacc = m0;
-					m0 += c1o9 * oMdrho;
-					mfbcc = m1 - m0 * vvx;
-					mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					// Cumulants
-					////////////////////////////////////////////////////////////////////////////////////
-
-					// mfaaa = 0.0;
-					real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-											//  LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
-											//  LBMReal OxyyMxzz  = 1.;//2+s9;//
-					real O4 = 1.;
-					real O5 = 1.;
-					real O6 = 1.;
-
-					/////fourth order parameters; here only for test. Move out of loop!
-
-					real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-					real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-					real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-					real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
-					real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-
-
-					//Cum 4.
-					//LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-					//LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-					//LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-					real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-					real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-					real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-					real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-					real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-					real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-
-					//Cum 5.
-					real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-					real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-					real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-					//Cum 6.
-					real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-						- 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-							+ 2. * (mfcaa * mfaca * mfaac)
-							+ 16. * mfbba * mfbab * mfabb)
-						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-					//2.
-					// linear combinations
-					real mxxPyyPzz = mfcaa + mfaca + mfaac;
-
-					//  LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho));
-					mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa
-										//mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
-					real mxxMyy = mfcaa - mfaca;
-					real mxxMzz = mfcaa - mfaac;
-
-					real dxux =  -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
-					real dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
-					real dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
-
-					real Dxy = -c3o1 * collFactorM * mfbba;
-					real Dxz = -c3o1 * collFactorM * mfbab;
-					real Dyz = -c3o1 * collFactorM * mfabb;
-
-					//relax
-					mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-					mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-					mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-					mfabb += collFactorM * (-mfabb);
-					mfbab += collFactorM * (-mfbab);
-					mfbba += collFactorM * (-mfbba);
-
-					////updated pressure
-					//mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling;
-					mfaaa = 0.0; // Pressure elimination as in standard velocity model
-								 //  mfaaa += (rho - c1) * (dxux + dyuy + dzuz);
-
-					mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
-
-										// mxxPyyPzz += (mfaaa + mfaaaS) * c1o2;
-										//mfaaa = mfaaaS;
-										// linear combinations back
-					mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-					mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-					mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-					//3.
-					// linear combinations
-					real mxxyPyzz = mfcba + mfabc;
-					real mxxyMyzz = mfcba - mfabc;
-
-					real mxxzPyyz = mfcab + mfacb;
-					real mxxzMyyz = mfcab - mfacb;
-
-					real mxyyPxzz = mfbca + mfbac;
-					real mxyyMxzz = mfbca - mfbac;
-
-					//relax
-					wadjust = Oxyz + (1. - Oxyz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-					mfbbb += wadjust * (-mfbbb);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-					mxxyPyzz += wadjust * (-mxxyPyzz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-					mxxyMyzz += wadjust * (-mxxyMyzz);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-					mxxzPyyz += wadjust * (-mxxzPyyz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-					mxxzMyyz += wadjust * (-mxxzMyyz);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-					mxyyPxzz += wadjust * (-mxyyPxzz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-					mxyyMxzz += wadjust * (-mxyyMxzz);
-
-					// linear combinations back
-					mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-					mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-					mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-					mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-					mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-					mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-					//4.
-					CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-					CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-					CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-					CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc);
-					CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb);
-					CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb);
-
-					//5.
-					CUMbcc += O5 * (-CUMbcc);
-					CUMcbc += O5 * (-CUMcbc);
-					CUMccb += O5 * (-CUMccb);
-
-					//6.
-					CUMccc += O6 * (-CUMccc);
-
-					//back cumulants to central moments
-					//4.
-					//mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-					//mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-					//mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-					mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-					mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-					mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-					mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-					mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-					mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-
-					//5.
-					mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-					mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-					mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-					//6.
-					mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-						- 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-							+ 2. * (mfcaa * mfaca * mfaac)
-							+ 16. * mfbba * mfbab * mfabb)
-						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-
-					////////
-
-
-					////////////////////////////////////////////////////////////////////////////////////
-					//forcing
-					//mfbaa = -mfbaa;
-					//mfaba = -mfaba;
-					//mfaab = -mfaab;
-					//////////////////////////////////////////////////////////////////////////////////////
-					//mfbaa += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (2 * dxux * dX1_phi + Dxy * dX2_phi + Dxz * dX3_phi) / (rho);
-					//mfaba += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxy * dX1_phi + 2 * dyuy * dX2_phi + Dyz * dX3_phi) / (rho);
-					//mfaab += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxz * dX1_phi + Dyz * dX2_phi + 2 * dyuy * dX3_phi) / (rho);
-					////////////////////////////////////////////////////////////////////////////////////
-					//back
-					////////////////////////////////////////////////////////////////////////////////////
-					//mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Z - Dir
-					m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
-					m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-					mfaaa = m0;
-					mfaab = m1;
-					mfaac = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-					m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
-					m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-					mfaba = m0;
-					mfabb = m1;
-					mfabc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2;
-					m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-					mfaca = m0;
-					mfacb = m1;
-					mfacc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-					m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
-					m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-					mfbaa = m0;
-					mfbab = m1;
-					mfbac = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-					m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
-					m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-					mfbba = m0;
-					mfbbb = m1;
-					mfbbc = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-					m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
-					m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-					mfbca = m0;
-					mfbcb = m1;
-					mfbcc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2;
-					m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-					mfcaa = m0;
-					mfcab = m1;
-					mfcac = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-					m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
-					m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-					mfcba = m0;
-					mfcbb = m1;
-					mfcbc = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
-					m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-					mfcca = m0;
-					mfccb = m1;
-					mfccc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					//mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Y - Dir
-					m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
-					m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfaaa = m0;
-					mfaba = m1;
-					mfaca = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
-					m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfaab = m0;
-					mfabb = m1;
-					mfacb = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
-					m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfaac = m0;
-					mfabc = m1;
-					mfacc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-					m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
-					m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-					mfbaa = m0;
-					mfbba = m1;
-					mfbca = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-					m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
-					m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-					mfbab = m0;
-					mfbbb = m1;
-					mfbcb = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-					m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
-					m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-					mfbac = m0;
-					mfbbc = m1;
-					mfbcc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
-					m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfcaa = m0;
-					mfcba = m1;
-					mfcca = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
-					m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfcab = m0;
-					mfcbb = m1;
-					mfccb = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
-					m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfcac = m0;
-					mfcbc = m1;
-					mfccc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					//mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// X - Dir
-					m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaaa = m0;
-					mfbaa = m1;
-					mfcaa = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaba = m0;
-					mfbba = m1;
-					mfcba = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaca = m0;
-					mfbca = m1;
-					mfcca = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaab = m0;
-					mfbab = m1;
-					mfcab = m2;
-					///////////b////////////////////////////////////////////////////////////////////////
-					m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
-					m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfabb = m0;
-					mfbbb = m1;
-					mfcbb = m2;
-					///////////b////////////////////////////////////////////////////////////////////////
-					m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfacb = m0;
-					mfbcb = m1;
-					mfccb = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaac = m0;
-					mfbac = m1;
-					mfcac = m2;
-					///////////c////////////////////////////////////////////////////////////////////////
-					m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfabc = m0;
-					mfbbc = m1;
-					mfcbc = m2;
-					///////////c////////////////////////////////////////////////////////////////////////
-					m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfacc = m0;
-					mfbcc = m1;
-					mfccc = m2;
-
-					////forcing
-
-					mfabb += c1o2 * (-forcingX1) * c2o9;
-					mfbab += c1o2 * (-forcingX2) * c2o9;
-					mfbba += c1o2 * (-forcingX3) * c2o9;
-					mfaab += c1o2 * (-forcingX1 - forcingX2) * c1o18;
-					mfcab += c1o2 * (forcingX1 - forcingX2) * c1o18;
-					mfaba += c1o2 * (-forcingX1 - forcingX3) * c1o18;
-					mfcba += c1o2 * (forcingX1 - forcingX3) * c1o18;
-					mfbaa += c1o2 * (-forcingX2 - forcingX3) * c1o18;
-					mfbca += c1o2 * (forcingX2 - forcingX3) * c1o18;
-					mfaaa += c1o2 * (-forcingX1 - forcingX2 - forcingX3) * c1o72;
-					mfcaa += c1o2 * (forcingX1 - forcingX2 - forcingX3) * c1o72;
-					mfaca += c1o2 * (-forcingX1 + forcingX2 - forcingX3) * c1o72;
-					mfcca += c1o2 * (forcingX1 + forcingX2 - forcingX3) * c1o72;
-					mfcbb += c1o2 * (forcingX1)*c2o9;
-					mfbcb += c1o2 * (forcingX2)*c2o9;
-					mfbbc += c1o2 * (forcingX3)*c2o9;
-					mfccb += c1o2 * (forcingX1 + forcingX2) * c1o18;
-					mfacb += c1o2 * (-forcingX1 + forcingX2) * c1o18;
-					mfcbc += c1o2 * (forcingX1 + forcingX3) * c1o18;
-					mfabc += c1o2 * (-forcingX1 + forcingX3) * c1o18;
-					mfbcc += c1o2 * (forcingX2 + forcingX3) * c1o18;
-					mfbac += c1o2 * (-forcingX2 + forcingX3) * c1o18;
-					mfccc += c1o2 * (forcingX1 + forcingX2 + forcingX3) * c1o72;
-					mfacc += c1o2 * (-forcingX1 + forcingX2 + forcingX3) * c1o72;
-					mfcac += c1o2 * (forcingX1 - forcingX2 + forcingX3) * c1o72;
-					mfaac += c1o2 * (-forcingX1 - forcingX2 + forcingX3) * c1o72;
-
-
-
-
-					//////////////////////////////////////////////////////////////////////////
-					//proof correctness
-					//////////////////////////////////////////////////////////////////////////
-					//#ifdef  PROOF_CORRECTNESS
-					real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-						+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-						+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-					//			   //LBMReal dif = fabs(drho - rho_post);
-					//               LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post;
-					//#ifdef SINGLEPRECISION
-					//			   if (dif > 10.0E-7 || dif < -10.0E-7)
-					//#else
-					//			   if (dif > 10.0E-15 || dif < -10.0E-15)
-					//#endif
-					//			   {
-					//				   UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post)
-					//					   + " dif=" + UbSystem::toString(dif)
-					//					   + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-					//				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-					//				   //exit(EXIT_FAILURE);
-					//			   }
-					//#endif
-
-					if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post))
-						UB_THROW(UbException(
-							UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," +
-							UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-
-					//////////////////////////////////////////////////////////////////////////
-					//write distribution
-					//////////////////////////////////////////////////////////////////////////
-					(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb         ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab         ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba         ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab        ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba        ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa        ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa      ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca      ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb   ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb    ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc   ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc    ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc   ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac    ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc  ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac  ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac   ;//* rho * c1o3;
-
-					(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3;
-																																		// !Old Kernel
-/////////////////////  P H A S E - F I E L D   S O L V E R
-////////////////////////////////////////////
-/////CUMULANT PHASE-FIELD
-					real omegaD =1.0/( 3.0 * mob + 0.5);
-					{
-						mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-						mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-						mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-						mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-						mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-						mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-						mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-						mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-						mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-						mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-						mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-						mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-						mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-						mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-						mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-						mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-						mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-						mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-						mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-						mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-						mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-						mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-						mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-						mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// second component
-						real concentration =
-							((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-								(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-								((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-						////////////////////////////////////////////////////////////////////////////////////
-						real oneMinusRho = c1o1 - concentration;
-
-						real cx =
-							((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-								(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-								(mfcbb - mfabb));
-						real cy =
-							((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-								(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-								(mfbcb - mfbab));
-						real cz =
-							((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-								(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-								(mfbbc - mfbba));
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// calculate the square of velocities for this lattice node
-						real cx2 = cx * cx;
-						real cy2 = cy * cy;
-						real cz2 = cz * cz;
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (6)-(14) in \ref
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-						forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-						forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-						forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-						forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-						forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-						forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - experimental Cumulant ... to be published ... hopefully
-						//!
-
-						// linearized orthogonalization of 3rd order central moments
-						real Mabc = mfabc - mfaba * c1o3;
-						real Mbca = mfbca - mfbaa * c1o3;
-						real Macb = mfacb - mfaab * c1o3;
-						real Mcba = mfcba - mfaba * c1o3;
-						real Mcab = mfcab - mfaab * c1o3;
-						real Mbac = mfbac - mfbaa * c1o3;
-						// linearized orthogonalization of 5th order central moments
-						real Mcbc = mfcbc - mfaba * c1o9;
-						real Mbcc = mfbcc - mfbaa * c1o9;
-						real Mccb = mfccb - mfaab * c1o9;
-
-						// collision of 1st order moments
-						cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-							normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-						cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-							normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-						cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-							normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-
-						cx2 = cx * cx;
-						cy2 = cy * cy;
-						cz2 = cz * cz;
-
-						// equilibration of 2nd order moments
-						mfbba = c0o1;
-						mfbab = c0o1;
-						mfabb = c0o1;
-
-						mfcaa = c1o3 * concentration;
-						mfaca = c1o3 * concentration;
-						mfaac = c1o3 * concentration;
-
-						// equilibration of 3rd order moments
-						Mabc = c0o1;
-						Mbca = c0o1;
-						Macb = c0o1;
-						Mcba = c0o1;
-						Mcab = c0o1;
-						Mbac = c0o1;
-						mfbbb = c0o1;
-
-						// from linearized orthogonalization 3rd order central moments to central moments
-						mfabc = Mabc + mfaba * c1o3;
-						mfbca = Mbca + mfbaa * c1o3;
-						mfacb = Macb + mfaab * c1o3;
-						mfcba = Mcba + mfaba * c1o3;
-						mfcab = Mcab + mfaab * c1o3;
-						mfbac = Mbac + mfbaa * c1o3;
-
-						// equilibration of 4th order moments
-						mfacc = c1o9 * concentration;
-						mfcac = c1o9 * concentration;
-						mfcca = c1o9 * concentration;
-
-						mfcbb = c0o1;
-						mfbcb = c0o1;
-						mfbbc = c0o1;
-
-						// equilibration of 5th order moments
-						Mcbc = c0o1;
-						Mbcc = c0o1;
-						Mccb = c0o1;
-
-						// from linearized orthogonalization 5th order central moments to central moments
-						mfcbc = Mcbc + mfaba * c1o9;
-						mfbcc = Mbcc + mfbaa * c1o9;
-						mfccb = Mccb + mfaab * c1o9;
-
-						// equilibration of 6th order moment
-						mfccc = c1o27 * concentration;
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (88)-(96) in
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-						backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-						backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-						backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-						backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-						backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-						backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-						(*this->localDistributionsH1)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-						(*this->localDistributionsH1)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-						(*this->localDistributionsH1)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-						(*this->localDistributionsH1)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-						(*this->localDistributionsH1)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-						(*this->localDistributionsH1)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-						(*this->localDistributionsH1)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-						(*this->localDistributionsH1)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-						(*this->localDistributionsH1)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-						(*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-						(*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb;
-					}
-				}
-			}
-		}
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-
-real MultiphasePressureFilterLBMKernel::gradX1_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
-		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
-}
-
-real MultiphasePressureFilterLBMKernel::gradX2_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
-		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
-		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
-}
-
-real MultiphasePressureFilterLBMKernel::gradX3_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
-		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
-}
-
-real MultiphasePressureFilterLBMKernel::nabla2_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	real sum = 0.0;
-	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
-		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
-	sum += WEIGTH[d0PP] * (
-		(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
-		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
-		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
-		);
-	sum += WEIGTH[d00P] * (
-		((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
-		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
-		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
-		);
-
-	return 6.0 * sum;
-}
-
-void MultiphasePressureFilterLBMKernel::computePhasefield()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-	int minX1 = ghostLayerWidth;
-	int minX2 = ghostLayerWidth;
-	int minX3 = ghostLayerWidth;
-	int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-	int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-	int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-	//------------- Computing the phase-field ------------------
-	for (int x3 = minX3; x3 < maxX3; x3++) {
-		for (int x2 = minX2; x2 < maxX2; x2++) {
-			for (int x1 = minX1; x1 < maxX1; x1++) {
-				// if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-				{
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-					h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
-				}
-			}
-		}
-	}
-}
-
-void MultiphasePressureFilterLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		} else {
-            phi[k] = phaseFieldBC;
-		}
-	}
-}
-
-void MultiphasePressureFilterLBMKernel::swapDistributions()
-{
-	LBMKernel::swapDistributions();
-	dataSet->getHdistributions()->swap();
-}
-
-void MultiphasePressureFilterLBMKernel::initForcing()
-{
-	muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3);
-	muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3);
-	muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3);
-
-	muDeltaT = deltaT;
-
-	muForcingX1.DefineVar("dt", &muDeltaT);
-	muForcingX2.DefineVar("dt", &muDeltaT);
-	muForcingX3.DefineVar("dt", &muDeltaT);
-
-	muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
-
-	muForcingX1.DefineVar("nu", &muNu);
-	muForcingX2.DefineVar("nu", &muNu);
-	muForcingX3.DefineVar("nu", &muNu);
-
-	muForcingX1.DefineVar("rho",&muRho); 
-	muForcingX2.DefineVar("rho",&muRho); 
-	muForcingX3.DefineVar("rho",&muRho); 
-
-}
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.h
deleted file mode 100644
index fc2783b4f844a0acb00386c64ff034bfa900928b..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.h
+++ /dev/null
@@ -1,111 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphasePressureFilterLBMKernel.h
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphasePressureFilterLBMKernel_H
-#define MultiphasePressureFilterLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  M. Geier, K. Kutscher, Hesameddin Safari
-class MultiphasePressureFilterLBMKernel : public LBMKernel
-{
-public:
-    MultiphasePressureFilterLBMKernel();
-    virtual ~MultiphasePressureFilterLBMKernel(void) = default;
-    void calculate(int step) override;
-    SPtr<LBMKernel> clone() override;
-    real getCalculationTime() override { return .0; }
-
-    void setPhaseFieldBC(real bc)
-    {
-        phaseFieldBC = bc;
-    }
-    real getPhaseFieldBC()
-    {
-        return phaseFieldBC;
-    }
-
-protected:
-    virtual void initDataSet();
-    void swapDistributions() override;
-
-    void initForcing();
-
-    void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-    void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-    CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1;
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1;
-    CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH1;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; 
-
-    real h  [D3Q27System::ENDF+1];
-    real phi[D3Q27System::ENDF+1];
-
-    real gradX1_phi();
-    real gradX2_phi();
-    real gradX3_phi();
-    void computePhasefield();
-    void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-
-    real nabla2_phi();
-
-    mu::value_type muX1,muX2,muX3;
-    mu::value_type muDeltaT;
-    mu::value_type muNu;
-    mu::value_type muRho;
-    real forcingX1;
-    real forcingX2;
-    real forcingX3;
-
-    real phaseFieldBC { 0.0 }; // if 0.0 then light fluid on the wall, else if 1.0 havy fluid
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp
deleted file mode 100644
index 092a8d9b8cd53efe6ae1d54187024402910df75b..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp
+++ /dev/null
@@ -1,5292 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseScaleDistributionLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseScaleDistributionLBMKernel.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include <cmath>
-#include <iostream>
-#include <string>
-#include "NonNewtonianFluids/LBM/Rheology.h"
-
-using namespace vf::lbm::dir;
-using namespace vf::basics::constant;
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseScaleDistributionLBMKernel::MultiphaseScaleDistributionLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseScaleDistributionLBMKernel::initDataSet()
-{
-	SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
-	SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field
-	SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
-	SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D(            nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new  CbArray3D<real, IndexerX3X2X1>(    nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	p1Old = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-
-	rhoNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	vxNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	vyNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	vzNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	dataSet->setFdistributions(f);
-	dataSet->setHdistributions(h); // For phase-field
-	dataSet->setH2distributions(h2);
-	dataSet->setPhaseField(divU1);
-	dataSet->setPressureField(pressure);
-
-	phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0));
-	phaseFieldOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 999.0));
-
-	divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> MultiphaseScaleDistributionLBMKernel::clone()
-{
-	SPtr<LBMKernel> kernel(new MultiphaseScaleDistributionLBMKernel());
-	kernel->setNX(nx);
-	dynamicPointerCast<MultiphaseScaleDistributionLBMKernel>(kernel)->initDataSet();
-	kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-	kernel->setDensityRatio(this->densityRatio);
-	kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-	kernel->setContactAngle(this->contactAngle);
-	kernel->setPhiL(this->phiL);
-	kernel->setPhiH(this->phiH);
-	kernel->setPhaseFieldRelaxation(this->tauH);
-	kernel->setMobility(this->mob);
-	kernel->setInterfaceWidth(this->interfaceWidth);
-    kernel->setSigma(this->sigma);
-
-	kernel->setBCSet(bcSet->clone(kernel));
-	kernel->setWithForcing(withForcing);
-	kernel->setForcingX1(muForcingX1);
-	kernel->setForcingX2(muForcingX2);
-	kernel->setForcingX3(muForcingX3);
-	kernel->setIndex(ix1, ix2, ix3);
-	kernel->setDeltaT(deltaT);
-	kernel->setGhostLayerWidth(2);
-	dynamicPointerCast<MultiphaseScaleDistributionLBMKernel>(kernel)->initForcing();
-
-	return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void  MultiphaseScaleDistributionLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-	//using namespace UbMath;
-	real m2 = mfa + mfc;
-	real m1 = mfc - mfa;
-	real m0 = m2 + mfb;
-	mfa = m0;
-	m0 *= Kinverse;
-	m0 += oneMinusRho;
-	mfb = (m1 * Kinverse - m0 * vv) * K;
-	mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void  MultiphaseScaleDistributionLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-	//using namespace UbMath;
-	real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
-	real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
-	mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
-	mfa = m0;
-	mfb = m1;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-void  MultiphaseScaleDistributionLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-	//using namespace UbMath;
-	real m1 = (mfa + mfc) + mfb;
-	real m2 = mfc - mfa;
-	mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-	mfb = m2 - vv * m1;
-	mfa = m1;
-}
-
-
-void  MultiphaseScaleDistributionLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-	//using namespace UbMath;
-	real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-	real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-	mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-	mfb = mb;
-	mfa = ma;
-}
-
-
-void MultiphaseScaleDistributionLBMKernel::calculate(int step)
-{
-	using namespace D3Q27System;
-	//using namespace UbMath;
-
-	forcingX1 = 0.0;
-	forcingX2 = 0.0;
-	forcingX3 = 0.0;
-    real phiLim = 0.5;
-
-	real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5;
-														 /////////////////////////////////////
-
-	localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-	zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-	localDistributionsH1    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-	nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-	zeroDistributionsH1     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-	localDistributionsH2    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions();
-	nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions();
-	zeroDistributionsH2     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions();
-
-
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField();
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-	//real omegaDRho = 1.0;// 1.25;// 1.3;
-	for (int x3 = minX3 - ghostLayerWidth; x3 < maxX3 + ghostLayerWidth; x3++) {
-		for (int x2 = minX2 - ghostLayerWidth; x2 < maxX2 + ghostLayerWidth; x2++) {
-			for (int x1 = minX1 - ghostLayerWidth; x1 < maxX1 + ghostLayerWidth; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-
-
-					real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-					real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-					//omegaDRho = 2.0;// 1.5;
-					//real phiOld = (*phaseField)(x1, x2, x3);
-
-					(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) +
-						(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-							((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-								(mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-
-
-					if ((*phaseField)(x1, x2, x3) > 1) {
-						(*phaseField)(x1, x2, x3) = c1o1;
-					}
-
-					if ((*phaseField)(x1, x2, x3) < 0) {
-						(*phaseField)(x1, x2, x3) = 0;
-
-					
-				}
-			}
-		}
-	}
-	}
-
-	this->swapDistributions();
-	for (int x3 = minX3 - ghostLayerWidth+1; x3 < maxX3 + ghostLayerWidth-1; x3++) {
-		for (int x2 = minX2 - ghostLayerWidth+1; x2 < maxX2 + ghostLayerWidth-1; x2++) {
-			for (int x1 = minX1 - ghostLayerWidth+1; x1 < maxX1 + ghostLayerWidth-1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					//int x1p = x1 + 1;
-					//int x2p = x2 + 1;
-					//int x3p = x3 + 1;
-
-					//real mfabb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);//* rho * c1o3;
-     //               real mfbab = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);//* rho * c1o3;
-     //               real mfbba = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);//* rho * c1o3;
-     //               real mfaab = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);//* rho * c1o3;
-     //               real mfcab = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);//* rho * c1o3;
-     //               real mfaba = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);//* rho * c1o3;
-     //               real mfcba = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);//* rho * c1o3;
-     //               real mfbaa = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);//* rho * c1o3;
-     //               real mfbca = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);//* rho * c1o3;
-     //               real mfaaa = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);//* rho * c1o3;
-     //               real mfcaa = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);//* rho * c1o3;
-     //               real mfaca = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);//* rho * c1o3;
-     //               real mfcca = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);//* rho * c1o3;
-     //               real mfcbb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);//* rho * c1o3;
-     //               real mfbcb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);//* rho * c1o3;
-     //               real mfbbc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);//* rho * c1o3;
-     //               real mfccb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);//* rho * c1o3;
-     //               real mfacb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);//* rho * c1o3;
-     //               real mfcbc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);//* rho * c1o3;
-     //               real mfabc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);//* rho * c1o3;
-     //               real mfbcc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);//* rho * c1o3;
-     //               real mfbac = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);//* rho * c1o3;
-     //               real mfccc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);//* rho * c1o3;
-     //               real mfacc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);//* rho * c1o3;
-     //               real mfcac = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);//* rho * c1o3;
-     //               real mfaac = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);//* rho * c1o3;
-     //               real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-					
-					SPtr<DistributionArray3D> distributionH = this->getDataSet()->getHdistributions();
-					real hh[27];
-					distributionH->getPostCollisionDistribution(hh, x1, x2, x3);
-					real phiD, vxP, vyP, vzP;
-
-					D3Q27System::calcIncompMacroscopicValues(hh, phiD, vxP, vyP, vzP);
-					(*phaseFieldOld)(x1, x2, x3) = phiD;
-					
-					//real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					//real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					//real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					//real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					//real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					//real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					//real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					//real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					//real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					//real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					//real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					//real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					//real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					//real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					//real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					//real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					//real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					//real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					//real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					//real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					//real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					//real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					//real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					//real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					//real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					//real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					//real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-					//(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) +
-					//	(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-					//		((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-					//			(mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-					//if ((*phaseField)(x1, x2, x3) > 1) {
-					//	(*phaseField)(x1, x2, x3) = c1o1;
-					//}
-
-					//if ((*phaseField)(x1, x2, x3) < 0) {
-					//	(*phaseField)(x1, x2, x3) = 0;
-					//}
-					////// read F-distributions for velocity formalism
-						 //mfabb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);//* rho * c1o3;
-						 //mfbab = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);//* rho * c1o3;
-						 //mfbba = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);//* rho * c1o3;
-						 //mfaab = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);//* rho * c1o3;
-						 //mfcab = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);//* rho * c1o3;
-						 //mfaba = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);//* rho * c1o3;
-						 //mfcba = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);//* rho * c1o3;
-						 //mfbaa = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);//* rho * c1o3;
-						 //mfbca = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);//* rho * c1o3;
-						 //mfaaa = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);//* rho * c1o3;
-						 //mfcaa = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);//* rho * c1o3;
-						 //mfaca = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);//* rho * c1o3;
-						 //mfcca = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);//* rho * c1o3;
-						 //mfcbb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);//* rho * c1o3;
-						 //mfbcb = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);//* rho * c1o3;
-						 //mfbbc = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);//* rho * c1o3;
-						 //mfccb = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);//* rho * c1o3;
-						 //mfacb = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);//* rho * c1o3;
-						 //mfcbc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);//* rho * c1o3;
-						 //mfabc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);//* rho * c1o3;
-						 //mfbcc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);//* rho * c1o3;
-						 //mfbac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);//* rho * c1o3;
-						 //mfccc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);//* rho * c1o3;
-						 //mfacc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);//* rho * c1o3;
-						 //mfcac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);//* rho * c1o3;
-						 //mfaac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);//* rho * c1o3;
-						 //mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-					//mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-					//mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-					//mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-					//mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-					//mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-					//mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-					//mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-					//mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-					//mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-					//mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-					//mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-					//mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-					//mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					//mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-					//mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-					//mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-					//mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-					//mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-					//mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-					//mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-					//mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-					//mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-					//mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					//mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					//mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					//mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					//mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-
-					//real drho = (((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-
-					//(*rhoNode)(x1, x2, x3) = drho;
-					//(*vxNode)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-					//	(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-					//	(mfcbb - mfabb));
-					//(*vyNode)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-					//	(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-					//	(mfbcb - mfbab));
-					//(*vzNode)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-					//	(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-					//	(mfbbc - mfbba));
-
-					SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions();
-					real ff[27];
-					distribution->getPostCollisionDistribution(ff, x1, x2, x3);
-					real rhoG,vx,vy,vz;
-					//real rhoGG = (((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-					//				+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-					//				+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-
-
-					//vx= ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-					//	(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-					//	(mfcbb - mfabb));
-					//vy	 = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-					//		(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-					//		(mfbcb - mfbab));
-					//vz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-					//		(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-					//		(mfbbc - mfbba));
-					D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-                    //if (withForcing) {
-
-                    //    real forcingX1 = muForcingX1.Eval();
-                    //    real forcingX2 = muForcingX2.Eval();
-                    //    real forcingX3 = muForcingX3.Eval();
-
-                    //    vx += (forcingX1)*deltaT * c1o2;
-                    //    vy += (forcingX2)*deltaT * c1o2;
-                    //    vz += (forcingX3)*deltaT * c1o2;
-                    //}
-
-					//if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {  }
-					//else { rhoG = 0.0; vx = 0.0; vy = 0.0; vz = 0.0; }
-					//// very bad save the world procedure!!!!
-					//vx = (vx > 1 || vx < -1) ? 0 : vx;
-					//vy = (vy > 1 || vy < -1) ? 0 : vy;
-					//vz = (vz > 1 || vz < -1) ? 0 : vz;
-					//rhoG = (rhoG > 10 || rhoG < -10) ? 0 : rhoG;
-					(*rhoNode)(x1, x2, x3) = rhoG;// *((*phaseField)(x1, x2, x3) > c1o2 ? densityRatio : c1o1);
-					(*vxNode)(x1, x2, x3) = vx;
-					(*vyNode)(x1, x2, x3) = vy;
-					(*vzNode)(x1, x2, x3) = vz;
-					//if (fabsf(vx) > 0 && fabsf(vx) < 0.01) {
-					//	int test = 0;
-					//}
-
-
-
-					//if ((*vzNode)(x1, x2, x3) != 0) {
-					//	real vvvv = (*vzNode)(x1, x2, x3);
-					//	real pppp = vvvv / (*phaseField)(x1, x2, x3);
-					//	int ii = 1;
-					//}
-
-				}
-			}
-		}
-	}
-
-	SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions();
-	real ff[27];
-	for (int x3 = minX3 - 1; x3 < maxX3 + 1; x3++) {
-		for (int x2 = minX2 - 1; x2 < maxX2 + 1; x2++) {
-			for (int x1 = minX1 - 1; x1 < maxX1 + 1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					//int x1p = x1 + 1;
-					//int x2p = x2 + 1;
-					//int x3p = x3 + 1;
-					findNeighbors(phaseFieldOld, x1, x2, x3);
-                    findNeighbors2(phaseField, x1, x2, x3);
-					////////////////////////////////Momentum conservation experiment 06.03.2023
-					//surfacetension
- 
-
-					if (this->isGas(phiLim, phi, phi2)) {
-						real vx = (*vxNode)(x1, x2, x3);
-						real vy = (*vyNode)(x1, x2, x3);
-						real vz = (*vzNode)(x1, x2, x3);
-                        //real rho = (*rhoNode)(x1, x2, x3);
-						findNeighbors(phaseField, x1, x2, x3);
-                        //real dX1_phi = gradX1_phi();
-                        //real dX2_phi = gradX2_phi();
-                        //real dX3_phi = gradX3_phi();
-						//real curv = computeCurvature_phi();
-                        real laplacePressure = c12o1 * sigma * computeCurvature_phi();
-						findNeighbors(phaseFieldOld, x1, x2, x3);
-
-
-						//real sigma = c3o1*c2o1*1e-3;
-
-                        //real flowDirection = vx * dX1_phi + vy * dX2_phi + vy * dX3_phi;
-
-
-//16.03.23 c: BB gas side with updated boundary velocity
-
-						distribution->getPostCollisionDistribution(ff, x1, x2, x3);
-						real rhoG;
-                        if (phi[d000] > phiLim) { // initialization necessary
-							real sumRho = 0;
-							real sumWeight = 1.e-100;
-							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                if ((phi[fdir] <= phiLim)) {
-									sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-									sumWeight += WEIGTH[fdir];
-								}
-
-							}
-
-							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                            }
-							rhoG = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neighbor?
-							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                if ((phi[fdir] > phiLim)) {
-									// real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									// real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									// real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                    //vx = vxBC;
-                                    //vy = vyBC;
-                                    //vz = vzBC;
-									//real fPEQNeighbor = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir],c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									//real fPEQNeighborInv = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                    //real vBC = (fPEQNeighborInv - fPEQNeighbor) / WEIGTH[fdir] * c1o6;
-									//real fPEQHere = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , vx,vy,vz);
-                                    //real vBC = (fPEQHere - fPEQNeighbor) / WEIGTH[fdir] * c1o6;
-									//real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-									//real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-									//vBC = (vBC + vDir) / (c2o1 + vBC - vDir);
-                                   // real dvDir = vBC - vDir;
-                                    // 27.04.23
-                                    //real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                    //real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                    //real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                    //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI);
-                                   // real dvDir = (vBC - vIDir) * c1o2;
-                                    //real dvDir = (vBC - vDir) ;
-
-									//// 3.7.23
-                                   // vIDir = (vIDir + vDir) * c1o2;
-                                   // real qq = (c1o2 - (*phaseField)(x1, x2, x3)) / ((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) - (*phaseField)(x1, x2, x3));
-                                    //vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-
-         //                           // vBC = (qq > c1o2) ? vIDir + (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)) * c3o2
-         //                           //                                                : vBC + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * -c1o2 * (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq));
-
-                                    //dvDir = (vBC - vIDir) /(c1o2+qq);
-                                    //real fGEQInv = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vxI, vyI, vzI); 
-
-         //                           ///!03.07.2023
-
-
-									real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-									
-									//if ((phi[D3Q27System::INVDIR[fdir]] > phiLim))
-									{
-										///here we need reconstruction from scrach
-									real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-										//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-										//real fGEQOld = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-										//real fGEQNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-                                    //real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); 
-									//real fBC = ( fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-									//3.7.23
-                                    //real fBC = ((fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - qq)) - c6o1 * WEIGTH[fdir] * (vBC))*c1o2 / (qq + c1o2) + ((fGEQInv - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o2)))*qq/(qq+c1o2);
-                                    //qq = 0;   
-									//real fBC = ((distribution->getDistributionInvForDirection(x1, x2, x3, fdir) - collFactorG * fGEQ) / (c1o1 - collFactorG) * (1-qq)+qq*distribution->getDistributionInvForDirection(x1, x2, x3, fdir) - c6o1 * WEIGTH[fdir]*vBC) / (qq + c1o1) +
-                                    //           (distribution->getDistributionInvForDirection(x1 , x2 , x3, D3Q27System::INVDIR[fdir])) * qq / (qq + c1o1);
-								//real fBC = (fGEQ - c3o1*WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-								//13.07.2023
-                                real fBC = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1);
-                                    //real fBC = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG )) - c6o1 * WEIGTH[fdir] * (vDir);
-                                    //real vNG = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-									//real fBC = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG)) - c6o1 * WEIGTH[fdir] * (vDir)/(c1o1-vDir+vNG);
-                                    // 15.5.23
-                                    //real fBC = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG)) - c6o1 * WEIGTH[fdir] * (vDir);
-                                    //real fBC = (c2o1 * (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG;
-                                    //real fBC = (distribution->getDistributionInvForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) ;
-                                    //real fBC = (fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (collFactorG )/(c3o1-collFactorG)) - c6o1 * WEIGTH[fdir] * (vBC);
-										//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;// fL -feqOLD + feqNew;
-										//real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC);
-									distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                                    ff[D3Q27System::INVDIR[fdir]] = fBC;
-									///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!)
-									//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-									//real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 ));
-									//real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 ));
-									//real fBC = fG - feqOLD + feqNew;
-									//distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir);
-
-
-									}
-								}
-							}
-							//distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
-							{
-								real fL = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
-								real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx,vy,vz);
-								real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG,vx,vy,vz);
-								distribution->setPostCollisionDistributionForDirection(fL-feqOLD+feqNew, x1, x2, x3, d000);
-							}
-                            D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-                            ff[d000] = vx * vx + vy * vy + vz * vz +
-                                          (((ff[dMM0] + ff[dPP0]) + (ff[dMP0] + ff[dPM0])) + ((ff[d0MM] + ff[d0PP]) + (ff[d0MP] + ff[d0PM])) + ((ff[dM0M] + ff[dP0P]) + (ff[dM0P] + ff[dP0M])) +
-                                           c2o1 * ((((ff[dMMM] + ff[dPPP]) + (ff[dMMP] + ff[dPPM]))) + (((ff[dMPM] + ff[dPMP]) + (ff[dMPP] + ff[dPMM])))));
-                            distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
-
-						}
-						else {//no refill of gas required
-							rhoG = (*rhoNode)(x1, x2, x3);
-                            if (phi2[d000] <= phiLim) { // no refill liquid
-								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                    if ((phi[fdir] > phiLim)) {
-										// real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										// real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										// real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        //vx = vxBC;
-                                        //vy = vyBC;
-                                        //vz = vzBC;
-										//real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-									//real fPEQNeighbor = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir],c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									//real fPEQNeighborInv = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                    //real vBC = (fPEQNeighborInv - fPEQNeighbor) / WEIGTH[fdir] * c1o6;
-                                    //									real fPEQHere = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , vx,vy,vz);
-//                                  real vBC = (fPEQHere - fPEQNeighbor) / WEIGTH[fdir] * c1o6;
-										//real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-										//real dvDir = vBC - vDir;
-                                        // real dvDir = vBC - vDir;
-                                        // 27.04.23
-                                        //real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                        //real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                        //real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                        //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI);
-                                       // real dvDir = (vBC - vIDir) * c1o2;
-                                       // real dvDir = (vBC - vDir) ;
-
-										//vBC = (vBC + vDir) / (c2o1 + vBC - vDir);
-										real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-										real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-										//real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC);
-										//real fGInv = distribution->getDistributionInvForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]);
-										//real fGInvEQ = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz);
-										//real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-										//real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) )- c6o1 * WEIGTH[fdir] * (vBC);
-										//// 3.7.23
-                                      //  vIDir = (vIDir + vDir) * c1o2;
-                                      //  real qq = (c1o2 - (*phaseField)(x1, x2, x3)) / ((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) - (*phaseField)(x1, x2, x3));
-                                      //  vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-
-										//
-										////vBC = (qq > c1o2) ? vIDir + (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)) * c3o2
-          ////                                                : vBC + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * -c1o2 * (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq));
-
-										//dvDir = (vBC - vIDir)*c2o3;
-                                       // dvDir = (vBC - vIDir) / (c1o2 + qq);
-                                       // real fGEQInv = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vxI, vyI, vzI); 
-
-										///!03.07.2023
-                                        // 3.7.23
-                                        //real fBC = ((fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - qq)) - c6o1 * WEIGTH[fdir] * (vBC))*c1o2 / (qq + c1o2) + ((fGEQInv - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o2))) * qq / (qq + c1o2);
-                                        //qq = 0;
-                                        //real fBC = ((distribution->getDistributionInvForDirection(x1, x2, x3, fdir) - collFactorG * fGEQ) / (c1o1 - collFactorG) * (1 - qq) + qq * distribution->getDistributionInvForDirection(x1, x2, x3, fdir) - c6o1 * WEIGTH[fdir] * vBC) / (qq + c1o1) +
-                                        //       (distribution->getDistributionInvForDirection(x1 , x2 , x3, D3Q27System::INVDIR[fdir])) * qq / (qq + c1o1);
-
-										//real fBC = ( fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-                                        // 13.07.2023
-                                        real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                            (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                            (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                            (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-                                        real fBC = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1);
-
-										//real fBC = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-                                        
-										//real qq = c1o1 - ((c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) /
-                                        //                  (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])));
-                                        //real vNG = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-                                        //real fBC = fGEQ + (-WEIGTH[fdir] * dvDir * ((c1o1 + qq) / collFactorG - c2o1 * qq) - c6o1 * WEIGTH[fdir] * (vDir + qq * vNG)) / (c1o1 + qq);
-                                        //real fBC = fGEQ + (-WEIGTH[fdir] * dvDir * ((c1o1 + qq) / collFactorG - c2o1 * qq) - c6o1 * WEIGTH[fdir] * (vDir + qq * (vDir + qq * (vNG - vDir))) / (c1o1 - vDir + vNG)) / (c1o1 + qq);
-										
-										//real fBC = (c2o1*(fGEQ -   WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG;
-                                        //real fBC = (c2o1*(fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG;
-										//real fBC = (fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (collFactorG) / (c3o1 - collFactorG)) - c6o1 * WEIGTH[fdir] * (vBC);
-										//26.04.23 flux BC:
-                                        //real fBC = (c2o1*(fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG;
-                                        //if (flowDirection > 0) fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-										//if (fabsf(-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) - fGEQ) >1000* (fabsf(fG - fGEQ))) fBC = fG - c6o1 * WEIGTH[fdir] * (vBC);
-										//if (fGEQ > 1.0e-8&& step>30&& vyBC!=0) {
-										//	std::cout << D3Q27System::DX1[fdir] <<","<< D3Q27System::DX2[fdir] << "," << D3Q27System::DX3[fdir] <<" " << -fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) - fGEQ << " fg:" << fG - fGEQ << " ratio=" << (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) - fGEQ) / (fG - fGEQ) << " feq" << fGEQ << " vy =" << vy << "vyBC=" << vyBC << "\n";
-										//}
-
-										//real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-										//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-										//if ((*phaseField)(x1, x2, x3) <= c1o2) 
-										distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-                                        //if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > phiLim)
-                                        if (phi2[fdir] > phiLim)
-										{
-											//real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-											//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL  - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-											//real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC;
-											//real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC;
-											//real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
-											//real number = 666;
-											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir);
-											//real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
-											//real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-											real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-										//real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
-										
-
-
-											
-                                            // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
-                                            real laplacePressureBC;
-                                            if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1) &&
-                                                phi2[d000] != phi2[fdir]) {
-                                                findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                                laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma;
-                                                findNeighbors(phaseFieldOld, x1, x2, x3);
-                                            } else
-                                                laplacePressureBC = laplacePressure; 
-												//if (UbMath::isNaN(laplacePressureBC) || UbMath::isInfinity(laplacePressureBC)) {
-            //                                    laplacePressureBC = laplacePressure;
-            //                                }
-											// curv; // reset to the above
-                                            if (phi2[d000] != phi2[fdir])
-                                                {
-
-                                                    laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) /
-                                                                            (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) +
-                                                                        laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                                }
-                                            else
-                                                laplacePressureBC = laplacePressure;
-                                            // laplacePressureBC *= sigma;
-                                            // eqBCN = eqBC;
-                                            // distribution->setPostCollisionDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2,
-                                            // x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-                                            distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - fL, x1, x2, x3, fdir);
-
-
-
-
-										//real laplacePressureBC;
-          //                                  if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) {
-          //                                      findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-          //                                      laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma;
-          //                                      findNeighbors(phaseFieldOld, x1, x2, x3);
-          //                                  } else
-          //                                      laplacePressureBC = laplacePressure; // curv; // reset to the above
-          //                                  laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) /
-          //                                                          (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) +
-          //                                                      laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-          //                                  // laplacePressureBC *= sigma;
-          //                                 
-          //                              }
-
-										//	
-										//	//real curvBC;
-										//	//if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) {
-										//	//	findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-										//	//		 curvBC = computeCurvature_phi();
-										//	//		findNeighbors(phaseFieldOld, x1, x2, x3);
-										//	//}
-										//	//else curvBC = curv;//reset to the above
-										//	//real LaplacePressure = curv *(c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + curvBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//	////16.04.23
-										//	//real eqLL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//	////fL = fL*0.99 +0.01*(eqLL - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1));
-										//	//LaplacePressure *= sigma;
-										//	//eqBCN = eqBC;
-										//	//distribution->setPostCollisionDistributionForDirection(LaplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1-c1o1 / densityRatio*0 ) - fL -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-										//	distribution->setPostCollisionDistributionForDirection(laplacePressureBC* WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio ) - fL, x1, x2, x3, fdir);
-											//if (vxBC != 0) {
-											//	int set = 0;
-											//}
-
-										}
-
-									}
-
-
-								}
-							}
-							else {//refill liquid
-
-								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                    if ((phi[fdir] > phiLim)) {
-										// real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										// real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										// real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-									//real fPEQNeighbor = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir],c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									//real fPEQNeighborInv = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                    //real vBC = (fPEQNeighborInv - fPEQNeighbor) / WEIGTH[fdir] * c1o6;
-									//real fPEQHere = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , vx,vy,vz);
-                                    //real vBC = (fPEQHere - fPEQNeighbor) / WEIGTH[fdir] * c1o6;
-										//real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-										//real dvDir = vBC - vDir;
-										//27.04.23
-                                        // real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                        // real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                        // real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                        //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI);
-                                      //  real dvDir = (vBC - vIDir)*c1o2;
-                                        //real dvDir = (vBC - vDir) ;
-
-										//// 3.7.23
-                                       // vIDir = (vIDir + vDir) * c1o2;
-                                       // real qq = (c1o2 - (*phaseField)(x1, x2, x3)) / ((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) - (*phaseField)(x1, x2, x3));
-                                       // vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-
-          //                              //vBC = (qq > c1o2) ? vIDir + (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)) * c3o2
-          //                              //                  : vBC + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * -c1o2 * (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq));
-
-          //                          
-										//dvDir = (vBC - vIDir) * c2o3;
-                                        //dvDir = (vBC - vIDir) / (c1o2 + qq);
-                                        //real fGEQInv = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vxI, vyI, vzI); 
-          //                              ///!03.07.2023
-
-										//vBC = (vBC + vDir) / (c2o1 + vBC - vDir);
-										real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-										real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-										//real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC);
-										//alternative way to bounce back by recovering fG from the opiste direction
-										//real fGInv= distribution->getDistributionInvForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]);
-										//real fGInvEQ = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz);
-										//real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-										//real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-                                        // 3.7.23
-                                        //real fBC = ((fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - qq)) - c6o1 * WEIGTH[fdir] * (vBC))*c1o2 / (qq + c1o2) + ((fGEQInv - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o2))) * qq / (qq + c1o2);
-                                        //qq = 0;
-                                        //real fBC = ((distribution->getDistributionInvForDirection(x1, x2, x3, fdir) - collFactorG * fGEQ) / (c1o1 - collFactorG) * (1 - qq) + qq * distribution->getDistributionInvForDirection(x1, x2, x3, fdir) - c6o1 * WEIGTH[fdir] * vBC) / (qq + c1o1) +
-                                        //       (distribution->getDistributionInvForDirection(x1 , x2 , x3, D3Q27System::INVDIR[fdir])) * qq / (qq + c1o1);
-
-										//real fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-                                        //  13.07.2023
-                                        real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                            (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                            (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                            (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-                                        real fBC = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1);
-
-										//real fBC = (fGEQ -  WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-
-										//real qq = c1o1-((c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) /
-                                         //         (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])));
-                                        //real vNG = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-                                        //real fBC = fGEQ + (-WEIGTH[fdir] * dvDir * ((c1o1 + qq) / collFactorG - c2o1 * qq) - c6o1 * WEIGTH[fdir] * (vDir + qq * vNG))/(c1o1+qq);
-                                        //real fBC = fGEQ + (-WEIGTH[fdir] * dvDir * ((c1o1 + qq) / collFactorG - c2o1 * qq) - c6o1 * WEIGTH[fdir] * (vDir + qq *( vDir+qq*( vNG-vDir)))/(c1o1-vDir+vNG)) / (c1o1 + qq);
-										//real fBC = (c2o1 * (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG;
-										//real fBC = (distribution->getDistributionInvForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) ;
-                                        //real fBC = (fGEQ - c6o1 * WEIGTH[fdir] * dvDir * ( collFactorG )/(c3o1-collFactorG)) - c6o1 * WEIGTH[fdir] * (vBC);
-                                        // 26.04.23 flux BC:
-                                        //real fBC = (c2o1 * (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG;
-                                        //if (flowDirection > 0) fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-										//if (fabsf(-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) - fGEQ) > 1000*(fabsf(fG - fGEQ))) fBC = fG - c6o1 * WEIGTH[fdir] * (vBC);
-										//real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-										//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-										ff[D3Q27System::INVDIR[fdir]] = fBC;
-                                        if (phi2[fdir] > phiLim) {
-											//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-											//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir);
-											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-											//distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir);
-											//real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC;
-											//real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC;
-											//real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
-											real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
-											//real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-											////real flNew = (fBC + fG - eqBC - eqG) / densityRatio + eqBC + eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC;
-											//real curvBC;
-											//if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) {
-											//	findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-											//	curvBC = computeCurvature_phi();
-											//	findNeighbors(phaseFieldOld, x1, x2, x3);
-											//}
-											//else curvBC = curv;//reset to the above
-											////16.04.23
-											//real eqLL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											////fL = fL * 0.99 + 0.01 * (eqLL -  c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1));
-											//real LaplacePressure = curv *(c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + curvBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//LaplacePressure *= sigma;
-											
-											
-											real laplacePressureBC;
-                                            if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1) ) {
-                                                findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                                laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma;
-                                                findNeighbors(phaseFieldOld, x1, x2, x3);
-                                            } else
-                                                laplacePressureBC = laplacePressure; // curv; // reset to the above
-
-											//if (UbMath::isNaN(laplacePressureBC) || UbMath::isInfinity(laplacePressureBC)) {
-           //                                     laplacePressureBC = laplacePressure;
-           //                                 }
-                                            if (phi2[d000] != phi2[fdir])
-                                            {
-
-                                                laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) /
-                                                                        (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) +
-                                                                    laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            }
-                                            else laplacePressureBC = laplacePressure;
-
-											                                 //               real pp1 = (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                            //real pp2 = (*phaseField)(x1, x2, x3);
-
-											//eqBCN = eqBC;
-											//distribution->setPostCollisionDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-                                           // fBC = (fG) / (densityRatio - c1o1) +
-                                           //       ((densityRatio) / (densityRatio - c1o1)) * ((eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - c2o1 * fL + (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) + laplacePressureBC * WEIGTH[fdir]);
-                                            // 13.07.2023
-                                            real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                                (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                                (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-                                                                                                (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-                                            real fBC = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1);
-
-											
-											distribution->setPostCollisionDistributionForDirection(laplacePressureBC* WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio)  - fL , x1, x2, x3, fdir);
-										//	real number = 666;
-
-
-
-										}
-
-									}
-									else {
-										ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);;
-									}
-
-
-								}
-
-								real sum2 = 1e-100;
-								real sumRho = 0;
-								// real sumVx = 0;
-								// real sumVy = 0;
-								// real sumVz = 0;
-								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-                                    if ((phi[fdir] > phiLim)) {
-
-										sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);// * tempRho;
-										// sumVx += WEIGTH[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-										// sumVy += WEIGTH[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-										// sumVz += WEIGTH[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-										sum2 += WEIGTH[fdir];
-									}
-								}
-								real rhoL;
-								D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-								rhoL = sumRho / sum2;
-								//vx = sumVx / sum2;
-								//vy = sumVy / sum2;
-								//vz = sumVz / sum2;
-								//rhoL = (*rhoNode)(x1, x2, x3)/densityRatio;
-
-								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-									ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-								}
-
-								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-									//if (!((phi[fdir] > c1o2) && (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2))) {
-                                    if (!((phi[fdir] > phiLim))) {
-											real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-									//real fPEQNeighbor = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir],c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									//real fPEQNeighborInv = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                    //real vBC = (fPEQNeighborInv - fPEQNeighbor) / WEIGTH[fdir] * c1o6;
-									//real fPEQHere = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , vx,vy,vz);
-                                    //real vBC = (fPEQHere - fPEQNeighbor) / WEIGTH[fdir] * c1o6;
-											real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-											//real dvDir = vBC - vDir;
-                                            // 27.04.23
-                                            //real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                            //real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                            //real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-                                            //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI);
-                                            //real dvDir = (vBC - vIDir) * c1o2;
-                                            //real dvDir = (vBC - vDir) ;
-
-
-											vBC = (vBC + vDir) / (c2o1 + vBC - vDir);
-
-											//// 3.7.23
-           //                                 real qq = (c1o2 - (*phaseField)(x1, x2, x3)) / ((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) - (*phaseField)(x1, x2, x3));
-           //                                 vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-
-           //                                 //vBC = (qq > c1o2) ? vIDir + (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)) * c3o2
-           //                                 //                  : vBC + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * -c1o2 * (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq));
-
-                                            //dvDir = (vBC - vIDir) * c2o3;
-                                            ///!03.07.2023
-
-
-										//real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz);
-										//real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz);
-										//ff[D3Q27System::INVDIR[fdir]]=(feqNew - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1));
-                                        //ff[D3Q27System::INVDIR[fdir]] = (feqNew - WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1));
-                                        //real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-                                        //ff[D3Q27System::INVDIR[fdir]] = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-                                        //real vNG = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-                                        //ff[D3Q27System::INVDIR[fdir]] = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorL)) - c6o1 * WEIGTH[fdir] * (vDir) / (c1o1 - vDir + vNG);
-          //                              real fG, fBCPseudo;
-          //                              if (phi2[fdir] <= phiLim)
-          //                                  {
-
-          //                                  fG = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-          //                                  fBCPseudo = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-          //                              }
-										//else {
-          //                                  // 13.07.2023
-          // //                                 real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-										//	//real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-          // //                                                                                     (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-          // //                                                                                     (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-          // //                                 real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-          // //                                                                                     (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-          // //                                 fBCPseudo = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1);
-
-
-          //                                  //unfortunately we have to reconstruct our own populations because they are overwritten by our neighbor. This is realy ugly but doing it the right way would require a completly other code structure.
-										//	//fBCPseudo = -c1o3*WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) + D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-          // //                                                                                                                                         (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-          // //                                                                                                                                         (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-          // //                                                                                                                                         (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-          // //                                 fG = -c1o3*WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) +
-          // //                                      D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-          // //                                                                            (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-          //                              // 16.07.23 attempt to make it at least momentum conserving
-          //                                  fG = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-          //                                  fBCPseudo = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 , x2 , x3 ),
-          //                                                                                    (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ),
-          //                                                                                    (*vzNode)(x1 , x2 , x3 )) + fG - D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-          //                                                                                    (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//}
-
-										//real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-          //                                                                                 (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-          //                              real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]),
-          //                                                                                (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-										//ff[D3Q27System::INVDIR[fdir]] = (laplacePressure * WEIGTH[fdir] + (fBCPseudo + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio))*c1o2 +(fG-fBCPseudo)*c1o2;
-										//16.07.2023: alternative: In attempt to balance the momentum loss in the generation of new gas nodes the inverse operation is performed here with the liquid phase:
-                                        real fG = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-										real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                        real fBC = feqNew + (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1);
-										//not adding laplace pressure as it should be included in rhoL;
-                                        ff[D3Q27System::INVDIR[fdir]] = fBC;
-										//15.5.23
-										//ff[D3Q27System::INVDIR[fdir]] = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorL)) - c6o1 * WEIGTH[fdir] * (vDir);
-										//real fBC = (distribution->getDistributionInvForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)) ;
-                                        //ff[D3Q27System::INVDIR[fdir]] = (feqNew - c6o1 * WEIGTH[fdir] * dvDir * (collFactorL)/(c3o1-collFactorL));
-										//ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-										distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-									}
-								}
-                                real eqRest = D3Q27System::getIncompFeqForDirection(d000, 0, (*vxNode)(x1, x2 , x3 ),
-                                                                                   (*vyNode)(x1, x2 , x3 ), (*vzNode)(x1 , x2 , x3 ));
-                                real fRest = distribution->getDistributionInvForDirection(x1 , x2 , x3 , d000);
-                                distribution->setPostCollisionDistributionForDirection((laplacePressure * WEIGTH[d000] + c2o1*(fRest) / densityRatio + (eqRest) * (c1o1 - c1o1 / densityRatio))  , x1, x2, x3, d000);
-
-                                //03.04.2023 alternative initialization of liquid nodes based on FD
-								//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-								//	//if (!((phi[fdir] > c1o2) && (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2))) {
-								//	if (!((phi[fdir] > c1o2))) {
-								//		real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		real vBC = (-D3Q27System::DX1[fdir] * vxBC - D3Q27System::DX2[fdir] * vyBC - D3Q27System::DX3[fdir] * vzBC);
-								//		real vDir = (-D3Q27System::DX1[fdir] * vx - D3Q27System::DX2[fdir] * vy - D3Q27System::DX3[fdir] * vz);
-								//		real dvDir = vBC - vDir;
-
-								//		//real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz);
-								//		real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz);
-								//		ff[D3Q27System::INVDIR[fdir]] =  feqNew - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1);
-								//		distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-								//	}
-								//}
-
-								//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-								//	if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) {
-								//		//real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		//real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		//real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		//real vBC = -(D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC);
-								//		real vDir = -(D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX2[fdir] * vz);
-								//		//vBC = (vBC + vDir) / (c2o1 -( vBC - vDir));
-								//		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir;
-								//		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);
-								//		real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-								//		distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
-								//		ff[fdir] = fL;
-								//	}
-								//	if (!(phi[fdir] > c1o2)) {
-								//		//std::cout << "Eq at dir=" << fdir << "\n";
-								//		real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-								//		distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
-								//		ff[fdir] = feqL;
-								//	}
-								//}
-						//real sumRho2= 0;
-						//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//	sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz);
-						//}
-						//ff[d000] = rhoL - sumRho2;
-						//rhoL = 27.0 / 18.0 * sumRho2;
-						//std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n";
-						//D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-						//std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n";
-//						distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
-						//{
-						//	real fG = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
-						//	real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-						//	real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
-						//	distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000);
-						//}
-                        //ff[d000] = vx * vx + vy * vy + vz * vz +
-                        //              (((ff[dMM0] + ff[dPP0]) + (ff[dMP0] + ff[dPM0])) + ((ff[d0MM] + ff[d0PP]) + (ff[d0MP] + ff[d0PM])) + ((ff[dM0M] + ff[dP0P]) + (ff[dM0P] + ff[dP0M])) +
-                        //               c2o1 * ((((ff[dMMM] + ff[dPPP]) + (ff[dMMP] + ff[dPPM]))) + (((ff[dMPM] + ff[dPMP]) + (ff[dMPP] + ff[dPMM])))));
-                        //distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
-
-                        //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//	ff[D3Q27System::INVDIR[fdir]]=distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//}
-						//D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-						//std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n";
-
-								//real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
-								//distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000);
-
-
-
-							}
-
-
-
-						}
-
-
-						//if ((*phaseField)(x1, x2, x3) <= c1o2) {
-						//	for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//		
-						//		real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, 0, 0.0001, 0);
-						//		ff[D3Q27System::INVDIR[fdir]] = feqNew;
-						//		distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//	}
-						//}
-						//16.03.23 B: Bounce Back gas side
-						//distribution->getDistributionInv(ff, x1, x2, x3);
-						//real rhoG;
-						//if (phi[d000] > c1o2) { //initialization necessary
-						//	real sumRho = 0;
-						//	real sumWeight = 0;
-						//	for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//		if ((phi[fdir] <= c1o2)) {
-						//			sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-						//			sumWeight += WEIGTH[fdir];
-						//		}
-
-						//	}
-						//	rhoG = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neigbor?
-						//	for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//		if ((phi[fdir] > c1o2)) {
-						//			real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//			real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//			real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//			real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//			real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-						//			real fBC = fG - c6o1 * WEIGTH[fdir] * (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC);
-
-						//			distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-
-						//		}
-						//	}
-						//	distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
-
-
-
-						//}
-						//else {//no refill of gas required
-						//	rhoG = (*rhoNode)(x1, x2, x3);
-						//	if ((*phaseField)(x1, x2, x3) <= c1o2) {//no refill liquid
-						//		for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//			if ((phi[fdir] > c1o2)) {
-						//				real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//				real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//				real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//				real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//				real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-						//				real fBC = fG - c6o1 * WEIGTH[fdir] * (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC);
-
-						//				//if ((*phaseField)(x1, x2, x3) <= c1o2) 
-						//				distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//				if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-						//					//real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					//real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					//real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-						//					real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-						//					real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-						//					distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-						//				}
-
-						//			}
-
-
-						//		}
-						//	}
-						//	else {//refill liquid
-
-						//		for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//			if ((phi[fdir] > c1o2)) {
-						//				real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//				real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//				real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//				real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//				real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-						//				real fBC = fG-c6o1*WEIGTH[fdir]*(D3Q27System::DX1[fdir]*vxBC+ D3Q27System::DX2[fdir] * vyBC+ D3Q27System::DX2[fdir] * vzBC);
-
-						//				ff[D3Q27System::INVDIR[fdir]] = fBC;
-						//				if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-						//					//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-						//					real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-						//					real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-						//					distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-						//				}
-
-						//			}
-						//			else {
-						//				ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);;
-						//			}
-
-
-						//		}
-
-						//		real sum2 = 1e-100;
-						//		real sumRho = 0;
-						//		for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//			if ((phi[fdir] > c1o2)) {
-
-						//				sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);// * tempRho;
-						//				sum2 += WEIGTH[fdir];
-						//			}
-						//		}
-						//		real rhoL;
-						//		D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-						//		rhoL = sumRho / sum2;
-
-
-						//		for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//			if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) {
-						//				real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);;
-						//				distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
-						//			}
-						//			if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] <= c1o2)) {
-						//				real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-						//				distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
-						//			}
-						//		}
-
-						//		real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
-						//		distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000);
-
-
-
-						//	}
-
-
-
-						//}
-
-
-
-
-						//16.03.23 A: scaled pressure
-						//distribution->getDistributionInv(ff, x1, x2, x3);
-						//real rhoG;
-						//if (phi[d000] > c1o2) { //initialization necessary
-						//	real sumRho = 0;
-						//	real sumWeight = 0;
-						//	for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//		if ((phi[fdir] <= c1o2)) {
-						//			sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-						//			sumWeight += WEIGTH[fdir];
-						//		}
-
-						//	}
-						//	rhoG = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neigbor?
-						//	for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//		if ((phi[fdir] > c1o2)) {
-						//			real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//			real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//			real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//			real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-						//			distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-
-						//		}
-						//	}
-						//	distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
-
-
-
-						//}
-						//else {//no refill of gas required
-						//	rhoG = (*rhoNode)(x1, x2, x3);
-						//	if ((*phaseField)(x1, x2, x3) <= c1o2) {//no refill liquid
-						//		for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//			if ((phi[fdir] > c1o2)) {
-						//				real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//				real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//				real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//				real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-						//				real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-						//				//if ((*phaseField)(x1, x2, x3) <= c1o2) 
-						//					distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//				if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-						//					real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-						//					real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-						//					real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-						//					distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-						//				}
-
-						//			}
-
-
-						//		}
-						//	}
-						//	else {//refill liquid
-
-						//		for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//			if ((phi[fdir] > c1o2)) {
-						//				real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//				real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//				real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//				real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-						//				real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-						//				ff[D3Q27System::INVDIR[fdir]] = fBC;
-						//				if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-						//					real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-						//					real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-						//					real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-						//					//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-						//					distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-						//				}
-
-						//			}
-						//			else {
-						//				ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);;
-						//			}
-
-
-						//		}
-
-						//		real sum2 = 1e-100;
-						//		real sumRho = 0;
-						//		for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//			if ((phi[fdir] > c1o2)) {
-						//				
-						//					sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);// * tempRho;
-						//					sum2 += WEIGTH[fdir];									
-						//			}
-						//		}
-						//		real rhoL;
-						//		D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-						//		rhoL=sumRho/sum2;
-
-
-						//		for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//			if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) {
-						//				real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);;
-						//				distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
-						//			}
-						//			if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] <= c1o2)) {
-						//				real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-						//				distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
-						//			}
-						//		}
-
-						//		real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
-						//		distribution->setPostCollisionDistributionForDirection(feqL, x1 , x2, x3 , d000);
-
-
-
-						//	}
-
-
-
-						//}
-
-
-
-
-
-
-
-
-
-
-					
-}//end Loop
-					
-
-
-
-
-	//for (int x3 = minX3-1; x3 < maxX3+1; x3++) {
-	//	for (int x2 = minX2-1; x2 < maxX2+1; x2++) {
-	//		for (int x1 = minX1-1; x1 < maxX1+1; x1++) {
-	//			if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-	//				int x1p = x1 + 1;
-	//				int x2p = x2 + 1;
-	//				int x3p = x3 + 1;
-	//				findNeighbors(phaseFieldOld, x1, x2, x3);
-	//				////////////////////////////////Momentum conservation experiment 06.03.2023
-	//				//surfacetension
-	//				real  kapkap = 0*1.0e-5;
-	//				//real scalRefill = 0.0;
-	//				real slowerFactor = 1.0e6;
-	//				if (((*phaseField)(x1, x2, x3) <= c1o2) && (
-	//					(phi[dP00] > c1o2) ||
-	//					(phi[dM00] > c1o2) ||
-	//					(phi[d00P] > c1o2) ||
-	//					(phi[d00M] > c1o2) ||
-	//					(phi[d0M0] > c1o2) ||
-	//					(phi[d0P0] > c1o2) ||
-	//					(phi[dPP0] > c1o2) ||
-	//					(phi[dPM0] > c1o2) ||
-	//					(phi[dP0P] > c1o2) ||
-	//					(phi[dP0M] > c1o2) ||
-	//					(phi[dMP0] > c1o2) ||
-	//					(phi[dMM0] > c1o2) ||
-	//					(phi[dM0P] > c1o2) ||
-	//					(phi[dM0M] > c1o2) ||
-	//					(phi[d0PM] > c1o2) ||
-	//					(phi[d0MM] > c1o2) ||
-	//					(phi[d0PP] > c1o2) ||
-	//					(phi[d0MP] > c1o2) ||
-	//					(phi[dPPP] > c1o2) ||
-	//					(phi[dPMP] > c1o2) ||
-	//					(phi[dMPP] > c1o2) ||
-	//					(phi[dMMP] > c1o2) ||
-	//					(phi[dPPM] > c1o2) ||
-	//					(phi[dPMM] > c1o2) ||
-	//					(phi[dMPM] > c1o2) ||
-	//					(phi[dMMM] > c1o2)
-	//					)) {
-	//						real vx = (*vxNode)(x1, x2, x3);
-	//						real vy =  (*vyNode)(x1, x2, x3);
-	//						real vz = (*vzNode)(x1, x2, x3);
-
-
-	//						distribution->getDistributionInv(ff, x1, x2, x3);
-	//						real rhoG;
-	//						if (phi[d000] > c1o2) { //initialization necessary
-	//							real sumRho = 0;
-	//							real sumWeight = 0;
-	//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-	//								if ((phi[fdir] <= c1o2)) {
-	//									sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-	//									sumWeight += WEIGTH[fdir];
-	//								}
-
-	//							}
-	//							rhoG = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neigbor?
-	//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-	//								if ((phi[fdir] > c1o2)) {
-	//									real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-	//									real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//									real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//									real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-	//									distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-
-	//								}
-	//							}
-	//							distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
-
-
-
-	//						}
-	//						else {//no refill required
-
-	//							rhoG = (*rhoNode)(x1, x2, x3);
-	//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-	//								if ((phi[fdir] > c1o2)) {
-	//									real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-	//									real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//									real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//									real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-	//									real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-	//									distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-	//									if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-	//										real vxBC =c1o2*(vx+ (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//										real vyBC =c1o2*(vy+ (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//										real vzBC =c1o2*(vz+ (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//										//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//										//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-	//										real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])*(D3Q27System::DX1[fdir])* (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-	//										real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-	//										//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-	//										distribution->setPostCollisionDistributionForDirection((fBC+fG) / densityRatio-fL+kapkap* WEIGTH[fdir]* computeCurvature_phi() -(feqG-feqL)*(c1o1/densityRatio-c1o1)*(vxBC* D3Q27System::DX1[fdir]+vyBC* D3Q27System::DX2[fdir]+vzBC* D3Q27System::DX3[fdir]), x1 , x2 , x3 , fdir);
-	//									}
-
-	//									}
-	//								else {
-	//									if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-
-	//										real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-	//										real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy,vz);
-	//										real slower = c1o1/(c1o1+slowerFactor * (vx * vx + vy * vy + vz * vz));
-	//										real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, slower * vx, slower * vy, slower * vz);
-	//										real fBC = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-
-	//										distribution->setPostCollisionDistributionForDirection(fBC, x1, x2 , x3 , fdir);
-
-	//										////inverse refill from here
-	//										//int xn1 = x1 + D3Q27System::DX1[fdir];
-	//										//int xn2 = x2 + D3Q27System::DX2[fdir];
-	//										//int xn3 = x3 + D3Q27System::DX3[fdir];
-	//										//real sumRho = 0;
-	//										//real sumWeight = 0;
-	//										//for (int nfdir = D3Q27System::STARTF; nfdir < D3Q27System::ENDF; nfdir++) {
-	//										//	if ((phi[nfdir] > c1o2)) {
-	//										//		sumRho += WEIGTH[nfdir] * (*rhoNode)(xn1 + D3Q27System::DX1[nfdir], xn2 + D3Q27System::DX2[nfdir], xn3 + D3Q27System::DX3[nfdir]);
-	//										//		sumWeight += WEIGTH[nfdir];
-	//										//	}
-	//										//}
-	//										////real rhoL = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neigbor?
-	//										//real rhoL = c1o2*(sumRho / sumWeight * scalRefill + (c1o1 - scalRefill) * rhoG / densityRatio);//
-
-	//										//// what comes next is the inversion of BC for the gas phase which is only used to derive the liquid BC
-	//										//real fBC = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-	//										////real feqOld = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//										////Dirty
-	//										//real feqOld = D3Q27System::getIncompFeqForDirection(fdir, rhoL, -(*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), -(*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), -(*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-	//										//real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//										//real fL = (fBC - feqNew) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqOld;
-
-
-	//										//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-	//										//real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//										//real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//										//real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//										////real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//										////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-	//										//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-	//										//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-	//										////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-	//										//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-	//										////distribution->setPostCollisionDistributionForDirection(( fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-	//									
-	//									
-	//									}
-	//								}
-	//								
-	//							}
-
-	//						}
-
-
-
-
-
-
-	//						
-
-	//				
-	//				
-	//				}
-	//				if (((*phaseField)(x1, x2, x3) > c1o2) && ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) {
-	//					real vx = (*vxNode)(x1, x2, x3);
-	//					real vy = (*vyNode)(x1, x2, x3);
-	//					real vz = (*vzNode)(x1, x2, x3);
-	//					for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-	//						if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-	//							real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-	//							real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//							real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//							real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//							//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//							//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-	//							real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-	//							real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-	//							if (((*phaseFieldOld)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) <= c1o2) {
-	//								real rhoG = (*rhoNode)(x1, x2, x3);
-	//								real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-	//								real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-	//								real slower = c1o1 / (c1o1 + slowerFactor * (vx * vx + vy * vy + vz * vz));
-	//								real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, slower*vx, slower*vy, slower*vz);
-	//								real fBC = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-
-	//								distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir);
-
-	//								/////reverse liquid
-	//								//int xn1 = x1 + D3Q27System::DX1[fdir];
-	//								//int xn2 = x2 + D3Q27System::DX2[fdir];
-	//								//int xn3 = x3 + D3Q27System::DX3[fdir];
-	//								//real sumRho = 0;
-	//								//real sumWeight = 0;
-	//								//for (int nfdir = D3Q27System::STARTF; nfdir < D3Q27System::ENDF; nfdir++) {
-	//								//	if ((phi[nfdir] > c1o2)) {
-	//								//		sumRho += WEIGTH[nfdir] * (*rhoNode)(xn1 + D3Q27System::DX1[nfdir], xn2 + D3Q27System::DX2[nfdir], xn3 + D3Q27System::DX3[nfdir]);
-	//								//		sumWeight += WEIGTH[nfdir];
-	//								//	}
-	//								//}
-	//								////real rhoL = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neigbor?
-	//								//real rhoL = (sumRho / sumWeight*scalRefill+(c1o1-scalRefill)*(*rhoNode)(x1, x2, x3) / densityRatio);//
-	//								//// what comes next is the inversion of BC for the gas phase which is only used to derive the liquid BC
-	//								//real fBC = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-	//								////real feqOld = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//								////Dirty
-	//								//real feqOld = D3Q27System::getIncompFeqForDirection(fdir, rhoL, -(*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), -(*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), -(*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-	//								//real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1, x2, x3), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//								//real fL = (fBC - feqNew) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqOld;
-
-
-	//								//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-	//								//real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//								//real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//								//real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//								////real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//								////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-	//								//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-	//								//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-	//								////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-	//								//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-
-	//								/////!reverse liquid
-	//								//
-	//								////distribution->setPostCollisionDistributionForDirection((fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-	//							}
-	//							else {
-	//								real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-	//								real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//								real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1, x2, x3), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-	//								real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-	//								real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-	//								distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-	//							}
-	//						}
-	//					
-	//					}
-
-
-
-	//				}
-
-
-
-
-
-					//////////////////////////////////////
-
-//					//if ((phi[d000] > c1o2) && (
-//					//	(phi[dP00] <= c1o2) ||
-//					//	(phi[dM00] <= c1o2) ||
-//					//	(phi[d00P] <= c1o2) ||
-//					//	(phi[d00M] <= c1o2) ||
-//					//	(phi[d0M0] <= c1o2) ||
-//					//	(phi[d0P0] <= c1o2) ||
-//					//	(phi[dPP0] <= c1o2) ||
-//					//	(phi[dPM0] <= c1o2) ||
-//					//	(phi[dP0P] <= c1o2) ||
-//					//	(phi[dP0M] <= c1o2) ||
-//					//	(phi[dMP0] <= c1o2) ||
-//					//	(phi[dMM0] <= c1o2) ||
-//					//	(phi[dM0P] <= c1o2) ||
-//					//	(phi[dM0M] <= c1o2) ||
-//					//	(phi[d0PM] <= c1o2) ||
-//					//	(phi[d0MM] <= c1o2) ||
-//					//	(phi[d0PP] <= c1o2) ||
-//					//	(phi[d0MP] <= c1o2) ||
-//					//	(phi[dPPP] <= c1o2) ||
-//					//	(phi[dPMP] <= c1o2) ||
-//					//	(phi[dMPP] <= c1o2) ||
-//					//	(phi[dMMP] <= c1o2) ||
-//					//	(phi[dPPM] <= c1o2) ||
-//					//	(phi[dPMM] <= c1o2) ||
-//					//	(phi[dMPM] <= c1o2) ||
-//					//	(phi[dMMM] <= c1o2)
-//					//	)) {
-//
-//					//	real vx = (*vxNode)(x1, x2, x3);
-//					//	real vy =  (*vyNode)(x1, x2, x3);
-//					//	real vz = (*vzNode)(x1, x2, x3);
-//
-//
-//					//	distribution->getDistributionInv(ff, x1, x2, x3);
-//					//	real rhoG;
-//					//	//D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-//					//	real sumRhoG = 0.0;
-//					//	int countRhoG = 0;
-//					//	for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {
-//					//		if ((phi[fdir] <= c1o2)) {
-//					//			//BC version
-//					//			// rhoG =  (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-//					//			//real ftemp = D3Q27System::getCompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz) + D3Q27System::getCompFeqForDirection(fdir, rhoG, vx, vy, vz);
-//					//			//
-//					//			//real fBB;
-//					//			//fBB = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//					//			//distribution->setPostCollisionDistributionForDirection((ftemp - ff[fdir]), x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//					//			//distribution->setPostCollisionDistributionForDirection(fBB - c6o1 * D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-//					//		//scaled Version
-//
-//					//			real fG;
-//					//			fG = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//
-//					//			//Liquid
-//					//			real ssrho = 1;
-//					//			real rhoLL = (*rhoNode)(x1, x2, x3);
-//
-//					//			//real rhoFilter = (*rhoNode)(x1, x2, x3)*c8o27
-//					//			//	+ c2o27*(((*rhoNode)(x1 + 1, x2, x3) + (*rhoNode)(x1 - 1, x2, x3)) + ((*rhoNode)(x1, x2 + 1, x3) + (*rhoNode)(x1, x2 - 1, x3)) + ((*rhoNode)(x1, x2, x3 + 1) + (*rhoNode)(x1, x2, x3 - 1)))
-//					//			//	+ c1o54*((((*rhoNode)(x1 + 1, x2 + 1, x3) + (*rhoNode)(x1 - 1, x2 - 1, x3)) + ((*rhoNode)(x1 - 1, x2 + 1, x3) + (*rhoNode)(x1 + 1, x2 - 1, x3)))
-//					//			//		+ (((*rhoNode)(x1 + 1, x2, x3 + 1) + (*rhoNode)(x1 - 1, x2, x3 - 1)) + ((*rhoNode)(x1 - 1, x2, x3 + 1) + (*rhoNode)(x1 + 1, x2, x3 - 1)))
-//					//			//		+ (((*rhoNode)(x1, x2 + 1, x3 + 1) + (*rhoNode)(x1, x2 - 1, x3 - 1)) + ((*rhoNode)(x1, x2 - 1, x3 + 1) + (*rhoNode)(x1, x2 + 1, x3 - 1)))
-//					//			//		)
-//					//			//	+ c1o216*(
-//					//			//		(((*rhoNode)(x1 + 1, x2 + 1, x3 + 1) + (*rhoNode)(x1 - 1, x2 - 1, x3 - 1)) + ((*rhoNode)(x1 + 1, x2 - 1, x3 + 1) + (*rhoNode)(x1 - 1, x2 + 1, x3 - 1)))
-//					//			//		+ (((*rhoNode)(x1 + 1, x2 + 1, x3 - 1) + (*rhoNode)(x1 - 1, x2 - 1, x3 + 1)) + ((*rhoNode)(x1 + 1, x2 - 1, x3 - 1) + (*rhoNode)(x1 - 1, x2 + 1, x3 + 1)))
-//					//			//		);
-//					//			real rhoGG = (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-//					//			real feqOLD = (D3Q27System::getIncompFeqForDirection(fdir, rhoLL/densityRatio, vx, vy, vz));
-//					//			real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, rhoLL*(c1o1-ssrho)+ssrho*rhoGG, vx, vy, vz));
-//					//			//real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, rhoFilter, vx, vy, vz));
-//					//			distribution->setPostCollisionDistributionForDirection( (ff[fdir] - feqOLD)*(c1o1/collFactorG-c1o1)/(c1o1/collFactorL-c1o1) + feqNew, x1, x2, x3, fdir);
-//
-//					//			feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//					//			feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//					//			distribution->setPostCollisionDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//					//			sumRhoG += (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-//					//			countRhoG++;
-//
-//
-//					//		}
-//					//	}
-//					//	(*rhoNode)(x1, x2, x3) = sumRhoG / countRhoG;
-//
-//					if ((phi[d000] > c1o2) && (
-//						(phi[dP00] <= c1o2) ||
-//						(phi[dM00] <= c1o2) ||
-//						(phi[d00P] <= c1o2) ||
-//						(phi[d00M] <= c1o2) ||
-//						(phi[d0M0] <= c1o2) ||
-//						(phi[d0P0] <= c1o2) ||
-//						(phi[dPP0] <= c1o2) ||
-//						(phi[dPM0] <= c1o2) ||
-//						(phi[dP0P] <= c1o2) ||
-//						(phi[dP0M] <= c1o2) ||
-//						(phi[dMP0] <= c1o2) ||
-//						(phi[dMM0] <= c1o2) ||
-//						(phi[dM0P] <= c1o2) ||
-//						(phi[dM0M] <= c1o2) ||
-//						(phi[d0PM] <= c1o2) ||
-//						(phi[d0MM] <= c1o2) ||
-//						(phi[d0PP] <= c1o2) ||
-//						(phi[d0MP] <= c1o2) ||
-//						(phi[dPPP] <= c1o2) ||
-//						(phi[dPMP] <= c1o2) ||
-//						(phi[dMPP] <= c1o2) ||
-//						(phi[dMMP] <= c1o2) ||
-//						(phi[dPPM] <= c1o2) ||
-//						(phi[dPMM] <= c1o2) ||
-//						(phi[dMPM] <= c1o2) ||
-//						(phi[dMMM] <= c1o2)
-//						)) {
-//							real vx = (*vxNode)(x1, x2, x3);
-//							real vy =  (*vyNode)(x1, x2, x3);
-//							real vz = (*vzNode)(x1, x2, x3);
-//
-//
-//						//distribution->getDistributionInv(ff, x1, x2, x3);
-//
-//						if ((*phaseField)(x1, x2, x3) > c1o2) {
-//						
-//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {// populations without d000
-//								if ((phi[fdir] <= c1o2)) {
-//										real fG = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//										real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//										real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//										distribution->setPostCollisionDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//
-//								}
-//							}
-//
-//
-//						}
-//						else {
-//						//refill necessary
-//							real sumRho = 0;
-//							real sumWeight = 0;
-//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//								if ((phi[fdir] > c1o2)) {
-//									sumRho += WEIGTH[fdir]*(*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-//									sumWeight += WEIGTH[fdir];
-//									}
-//							}
-//							sumRho /= sumWeight;
-//
-//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//								if ((phi[fdir] > c1o2)) {
-//									real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//									real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//									real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], sumRho, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//									ff[D3Q27System::INVDIR[fdir]] = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-//								}
-//								else { ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//								}
-//							}
-//
-//							real rhoG;
-//							D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-//							sumRho = 0;
-//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//								sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-//							}
-//							rhoG = 27.0 / 19.0 * sumRho;
-//							distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1 , x2 , x3 , d000);
-//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//								//if ((phi[fdir] > c1o2)) {
-//									distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//								//}
-//							}
-//
-//
-//						}
-//
-//
-//					}
-//					else if ((phi[d000] <= c1o2) && (
-//						(phi[dP00] > c1o2) ||
-//						(phi[dM00] > c1o2) ||
-//						(phi[d00P] > c1o2) ||
-//						(phi[d00M] > c1o2) ||
-//						(phi[d0M0] > c1o2) ||
-//						(phi[d0P0] > c1o2) ||
-//						(phi[dPP0] > c1o2) ||
-//						(phi[dPM0] > c1o2) ||
-//						(phi[dP0P] > c1o2) ||
-//						(phi[dP0M] > c1o2) ||
-//						(phi[dMP0] > c1o2) ||
-//						(phi[dMM0] > c1o2) ||
-//						(phi[dM0P] > c1o2) ||
-//						(phi[dM0M] > c1o2) ||
-//						(phi[d0PM] > c1o2) ||
-//						(phi[d0MM] > c1o2) ||
-//						(phi[d0PP] > c1o2) ||
-//						(phi[d0MP] > c1o2) ||
-//						(phi[dPPP] > c1o2) ||
-//						(phi[dPMP] > c1o2) ||
-//						(phi[dMPP] > c1o2) ||
-//						(phi[dMMP] > c1o2) ||
-//						(phi[dPPM] > c1o2) ||
-//						(phi[dPMM] > c1o2) ||
-//						(phi[dMPM] > c1o2) ||
-//						(phi[dMMM] > c1o2)
-//						)) {
-//						real vx = (*vxNode)(x1, x2, x3);
-//						real vy = (*vyNode)(x1, x2, x3);
-//						real vz = (*vzNode)(x1, x2, x3);
-//
-//
-//						//distribution->getDistributionInv(ff, x1, x2, x3);
-//						if ((*phaseField)(x1, x2, x3) <= c1o2) {
-//						////explicit way:
-//						////real ppph = (*phaseField)(x1, x2, x3);
-//						//	for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//						//		if ((phi[fdir] > c1o2)) {
-//						//			//vx = (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-//						//			//vy = (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-//						//			//vz = (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-//						//			//real rhorho = (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-//						//			//int xx1 = x1 + D3Q27System::DX1[fdir];
-//						//			//int xx2 = x2 + D3Q27System::DX2[fdir];
-//						//			//int xx3 = x3 + D3Q27System::DX3[fdir];
-//
-//						//			real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//						//			real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//						//			real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//						//			distribution->setPostCollisionDistributionForDirection((fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//						//		}
-//						//	}
-///////iterative way:
-//							real rhoG = (*rhoNode)(x1, x2, x3);
-//							//real sumWeight=0;
-//							//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//							//	if ((phi[fdir] > c1o2)) {
-//							//		rhoG += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-//							//		sumWeight += WEIGTH[fdir];
-//							//	}
-//							//}
-//							//rhoG = rhoG/sumWeight*densityRatio;
-//
-//							for (int itter = 0; itter < 5; itter++) {
-//								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//									if ((phi[fdir] > c1o2)) {
-//										real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//										real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//										real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//										ff[D3Q27System::INVDIR[fdir]] = ((fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew);
-//									}
-//									else { ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); }
-//								}
-//								ff[d000]= distribution->getDistributionInvForDirection(x1, x2, x3, d000);
-//								D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-//								//real sumRho = 0;
-//								//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//								//	sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-//								//}
-//								//rhoG = 27.0 / 19.0 * sumRho;
-//							}
-//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//								
-//								distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//								
-//							}
-//							//distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
-//
-//
-//
-//
-//						}
-//						else {
-//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//								if ((phi[fdir] <= c1o2)) {
-//									real fG = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//									real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//									real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-//									ff[D3Q27System::INVDIR[fdir]] = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-//									distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-//								}
-//								else { ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);}
-//							}
-//							real rhoG;
-//							D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-//							real sumRho = 0;
-//							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//								sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-//							}
-//							rhoG = 27.0 / 19.0 * sumRho;
-//							distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
-//
-//
-//
-//						}
-//
-//					}
-//
-//
-					}
-				}
-			}
-		}
-	
-
-
-	this->swapDistributions();
-
-// 	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;
-// 				findNeighbors(phaseFieldOld, x1, x2, x3);
-
-// 				//if (((*phaseField)(x1, x2, x3) > c1o2) && (((*phaseFieldOld)(x1, x2, x3) <= c1o2)))
-// 				{//Refill liquid
-// 					real vx;
-// 					real vy;
-// 					real vz;
-
-
-// 					distribution->getDistribution(ff, x1, x2, x3);
-// 					real rhoL;
-// 					D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-// 					//if (vz != 0) {
-
-// 					//	std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << " vz=" << vz << "ffRest=" << ff[d000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n";
-// 					//}
-// 				}
-			
-// 		}
-// 	}
-// }
-
-
-
-	////////momentum balance 06.03.2023
-	//for (int x3 = minX3 - ghostLayerWidth; x3 < maxX3 + ghostLayerWidth; x3++) {
-	//	for (int x2 = minX2 - ghostLayerWidth; x2 < maxX2 + ghostLayerWidth; x2++) {
-	//		for (int x1 = minX1 - ghostLayerWidth; x1 < maxX1 + ghostLayerWidth; x1++) {
-	//			if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-	//				int x1p = x1 + 1;
-	//				int x2p = x2 + 1;
-	//				int x3p = x3 + 1;
-	//				if (((*phaseField)(x1, x2, x3) > c1o2) && (((*phaseFieldOld)(x1, x2, x3) <= c1o2)))
-	//				{//Refill liquid
-	//					real vx;
-	//					real vy;
-	//					real vz;
-
-
-	//					distribution->getDistribution(ff, x1, x2, x3);
-	//					real rhoL;
-	//					D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-	//					std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n";
-	//				}
-	//			}
-	//		}
-	//	}
-	//}
-
-
-	//						real sumRho = 0;
-	//						for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-	//							sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-	//						}
-	//						rhoL = 27.0 / 19.0 * sumRho;
-	//						distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz), x1, x2, x3, d000);
-
-
-	//				}
-	//			}
-	//		}
-	//	}
-	//}
-
-
-	//////rescaling new liquid nodes 10.03.2023
-//	for (int x3 = minX3 ; x3 < maxX3 ; x3++) {
-//		for (int x2 = minX2 ; x2 < maxX2; x2++) {
-//			for (int x1 = minX1 ; x1 < maxX1 ; x1++) {
-//				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-//					int x1p = x1 + 1;
-//					int x2p = x2 + 1;
-//					int x3p = x3 + 1;
-//					if (((*phaseField)(x1, x2, x3) > c1o2) && (((*phaseFieldOld)(x1, x2, x3) <= c1o2)))
-//					{//Refill liquid
-//						real vx;
-//						real vy;
-//						real vz;
-//
-//						findNeighbors(phaseFieldOld, x1, x2, x3);
-//
-//						//real rhoG;
-//						//D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-//
-//						//vx = (*vxNode)(x1, x2, x3);
-//						//vy = (*vyNode)(x1, x2, x3);
-//						//vz = (*vzNode)(x1, x2, x3);
-//
-//
-//						//for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {// loop includes d000 position, different from all the others
-//						//	real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, rhoG,vx,vy,vz);
-//						//	real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG/densityRatio,vx,vy,vz);
-//						//	real fBC = (ff[fdir] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-//
-//						//	distribution->setPreCollisionDistributionForDirection(fBC, x1 , x2 , x3 ,fdir);
-//
-//
-//
-//						//}
-////15.03.2023
-//						real sumVx=0, sumVy=0, sumVz=0;
-//						real tempRho, tempVx, tempVy, tempVz;
-//						real sumRho = 0;
-//						real sum = 1e-100;
-//						real sum2 = 1e-100;
-//						for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//							if (!(((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) > c1o2) && (((*phaseFieldOld)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) <= c1o2)))&& !bcArray->isSolid(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) && !bcArray->isUndefined(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) {
-//								//distribution->getDistribution(ff, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-//								//D3Q27System::calcIncompMacroscopicValues(ff, tempRho, tempVx, tempVy, tempVz);
-//								sum += WEIGTH[fdir];
-//								sumVx += WEIGTH[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);//*tempVx;
-//								sumVy += WEIGTH[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);//*tempVy;
-//								sumVz += WEIGTH[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);//*tempVz;
-//								if ((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) > c1o2) {
-//									sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);// * tempRho;
-//									sum2 += WEIGTH[fdir];
-//								}
-//								if (tempVz != 0) {
-//									std::cout << "vz=" << tempVz << " " << "x=" << x1 << " " << "y=" << x2 << " " << "z=" << x3 << " fdir=" << fdir << " " << "xn=" << x1 + D3Q27System::DX1[fdir] << " " << "yn=" << x2 + D3Q27System::DX2[fdir] << " " << "zn=" << x3 + D3Q27System::DX3[fdir]<<"vzold="<< (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) << "\n";
-//								}
-//							}
-//						}
-//						sumRho/=sum2 ;
-//						sumVx /= sum;
-//						sumVy /= sum;
-//						sumVz /= sum;
-//						distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, sumRho, sumVx, sumVy, sumVz), x1, x2, x3, d000);
-//
-//						std::cout << "x=" << x1 << " " << "y=" << x2 << " " << "z=" << x3 <<" sumVx="<<sumVx<< " sumVy=" << sumVy << " sumVz=" << sumVz << " sumRho=" << sumRho << "\n";
-//
-////14.03.2023 
-//						distribution->getDistribution(ff, x1, x2, x3);
-//						real rhoG= (*rhoNode)(x1, x2, x3);
-//
-//						vx = (*vxNode)(x1, x2, x3);
-//						vy = (*vyNode)(x1, x2, x3);
-//						vz = (*vzNode)(x1, x2, x3);
-//						std::cout << " Vx=" << vx << " Vy=" << vy << " Vz=" << vz << " rhoL=" << (*rhoNode)(x1, x2, x3) / densityRatio << "\n";
-//
-//						for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//							if (phi[D3Q27System::INVDIR[fdir]] <= c1o2 && phi[fdir] > c1o2) {
-//								//ff[fdir] = ff[D3Q27System::INVDIR[fdir]] + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);
-//								ff[fdir] = ff[D3Q27System::INVDIR[fdir]] + c6o1 * WEIGTH[fdir] * (sumVx * D3Q27System::DX1[fdir] + sumVy * D3Q27System::DX2[fdir] + sumVz * D3Q27System::DX3[fdir]);
-//								//ff[fdir] = D3Q27System::getIncompFeqForDirection(fdir, sumRho, sumVx, sumVy, sumVz);
-//								distribution->setPreCollisionDistributionForDirection(ff[fdir], x1, x2, x3, fdir);
-//							}
-//							if (phi[fdir] <= c1o2 && phi[D3Q27System::INVDIR[fdir]] <= c1o2) {
-//								//ff[fdir] = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, vx, vy, vz);
-//								ff[fdir]= D3Q27System::getIncompFeqForDirection(fdir, sumRho, sumVx, sumVy, sumVz);
-//								distribution->setPreCollisionDistributionForDirection(ff[fdir], x1, x2, x3, fdir);
-//							}
-//						}
-//					real rhoL;
-//					//D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-//
-//
-//					//real sumRho;
-//					real sumRho2= 0;
-//						for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-//							sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz);
-//						}
-//						rhoL = 27.0 / 19.0 * sumRho;
-//						//distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz), x1, x2, x3, d000);
-//						//distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, sumVx, sumVy, sumVz), x1, x2, x3, d000);
-//						ff[d000] = sumRho - sumRho2;
-//						distribution->setPreCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
-//						D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-//						std::cout << " calcVx=" << vx << " calcVy=" << vy << " calcVz=" << vz << " rhoG=" << rhoG << "\n";
-//
-//
-//
-//					}
-//				}
-//			}
-//		}
-//	}
-
-
-	//for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) {
-	//	for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) {
-	//		for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; x1++) {
-	//			if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-	//				int x1p = x1 + 1;
-	//				int x2p = x2 + 1;
-	//				int x3p = x3 + 1;
-
-
-
-	//				real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-	//				real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-	//				real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-	//				real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-	//				real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-	//				real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-	//				real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-	//				real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-	//				real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-	//				real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-	//				real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-	//				real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-	//				real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-	//				real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-	//				real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-	//				real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-	//				real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-	//				real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-	//				real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-	//				real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-	//				real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-	//				real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-	//				real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-	//				real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-	//				real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-	//				real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-	//				real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-	//				omegaDRho = 2.0;// 1.5;
-	//				real phiOld = (*phaseField)(x1, x2, x3);
-
-	//				(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
-	//					(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-	//						((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-	//							(mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-	//				//if (phiOld > 0.49 && phiOld < 0.501) {
-	//				//	real ppppppppp = (*phaseField)(x1, x2, x3);
-	//				//	int ist = 1;
-	//				//}
-	//				//if (phiOld > 0.5 && (*phaseField)(x1, x2, x3) <= 0.5) {
-	//				//	real ppppppppp = (*phaseField)(x1, x2, x3);
-	//				//	int ist = 1;
-	//				//}
-
-
-	//				if ((*phaseField)(x1, x2, x3) > 1 ) {
-	//					(*phaseField)(x1, x2, x3) = c1o1;
-	//				}
-
-	//				if ((*phaseField)(x1, x2, x3) < 0) {
-	//					(*phaseField)(x1, x2, x3) = 0;
-	//				}
-	//				////// read F-distributions for velocity formalism
-	//				if (((phiOld <= 0.5) && ((*phaseField)(x1, x2, x3) <= 0.5)) || ((phiOld > 0.5) && ((*phaseField)(x1, x2, x3) > 0.5))) {}
-	//				else {
-	//					real scaleDistribution = densityRatio;// gas turn liquid
-	//					real scaleStress = (c1o1/collFactorG)/(c1o1/collFactorL);
-	//					if ((phiOld > 0.5) && ((*phaseField)(x1, x2, x3) <= 0.5)) {
-	//						scaleDistribution = 1.0 / densityRatio;
-	//						scaleStress = (c1o1 / collFactorL) / (c1o1 / collFactorG);
-	//						//liquid turned gas
-	//					}
-
-	//					mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-	//					mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-	//					mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-	//					mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-	//					mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-	//					mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-	//					mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-	//					mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-	//					mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-	//					mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-	//					mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-	//					mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-	//					mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-	//					mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-	//					mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-	//					mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-	//					mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-	//					mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-	//					mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-	//					mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-	//					mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-	//					mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-	//					mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-	//					mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-	//					mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-	//					mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-	//					mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-	//					distribution->getDistribution(ff, x1, x2, x3);
-	//					real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-	//						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-	//						(mfcbb - mfabb));
-	//					real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-	//						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-	//						(mfbcb - mfbab)) ;
-	//					real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-	//						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-	//						(mfbbc - mfbba)) ;
-	//					real drho = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) +
-	//						(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-	//							((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-	//								(mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-	//					//real mp= c3o1*(((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) +
-	//					//	c2o1*(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-	//					//		((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-	//					//			(mfbab + mfbcb) + (mfbba + mfbbc));
-	//					//mp -= vvx * vvx - vvy * vvy - vvz * vvz;
-	//					real drhoScaled = drho / scaleDistribution;
-	//					if (((*phaseField)(x1, x2, x3) <= 0.5)) { drhoScaled = (*rhoNode)(x1, x2, x3); }
-
-	//					//mp = 2 * drho - mp;
-	//					for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {
-	//						real feqOLD = (D3Q27System::getIncompFeqForDirection(fdir, drho, vvx, vvy, vvz));
-	//						real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, drhoScaled, vvx, vvy, vvz));
-	//						distribution->setPreCollisionDistributionForDirection((ff[fdir]-feqOLD)* scaleStress +feqNew,x1,x2,x3,fdir);
-	//					}
-
-
-
-
-
-	//				}
-	//			}
-	//		}
-	//	}
-	//}
-
-	real collFactorM;
-
-
-
-
-
-
-	for (int x3 = minX3; x3 < maxX3; x3++) {
-		for (int x2 = minX2; x2 < maxX2; x2++) {
-			for (int x1 = minX1; x1 < maxX1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-
-
-//					real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-//					real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-//					real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-//					real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-//					real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-//					real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-//					real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-//					real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-//					real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-//					real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-//					real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-//					real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-//					real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-//
-//					real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-//					real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-//					real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-//					real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-//					real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-//					real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-//					real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-//					real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-//					real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-//					real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-//					real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-//					real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-//					real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-//
-//					real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-//
-//					real m0, m1, m2;
-//
-//					real 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;
-//
-//					real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-//						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-//						(mfcbb - mfabb));
-//					real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-//						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-//						(mfbcb - mfbab));
-//					real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-//						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-//						(mfbbc - mfbba));
-//
-//					//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();
-//
-//						vvx += forcingX1 * deltaT * 0.5; // X
-//						vvy += forcingX2 * deltaT * 0.5; // Y
-//						vvz += forcingX3 * deltaT * 0.5; // Z
-//					}
-//					///////////////////////////////////////////////////////////////////////////////////////////               
-//					real 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);
-//
-//					real vx2;
-//					real vy2;
-//					real vz2;
-//					vx2 = vvx * vvx;
-//					vy2 = vvy * vvy;
-//					vz2 = vvz * vvz;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					real wadjust;
-//					real qudricLimit = 0.01;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					//Hin
-//					////////////////////////////////////////////////////////////////////////////////////
-//					// mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-//					////////////////////////////////////////////////////////////////////////////////////
-//					// Z - Dir
-//					m2 = mfaaa + mfaac;
-//					m1 = mfaac - mfaaa;
-//					m0 = m2 + mfaab;
-//					mfaaa = m0;
-//					m0 += c1o36 * oMdrho;
-//					mfaab = m1 - m0 * vvz;
-//					mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfaba + mfabc;
-//					m1 = mfabc - mfaba;
-//					m0 = m2 + mfabb;
-//					mfaba = m0;
-//					m0 += c1o9 * oMdrho;
-//					mfabb = m1 - m0 * vvz;
-//					mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfaca + mfacc;
-//					m1 = mfacc - mfaca;
-//					m0 = m2 + mfacb;
-//					mfaca = m0;
-//					m0 += c1o36 * oMdrho;
-//					mfacb = m1 - m0 * vvz;
-//					mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfbaa + mfbac;
-//					m1 = mfbac - mfbaa;
-//					m0 = m2 + mfbab;
-//					mfbaa = m0;
-//					m0 += c1o9 * oMdrho;
-//					mfbab = m1 - m0 * vvz;
-//					mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfbba + mfbbc;
-//					m1 = mfbbc - mfbba;
-//					m0 = m2 + mfbbb;
-//					mfbba = m0;
-//					m0 += c4o9 * oMdrho;
-//					mfbbb = m1 - m0 * vvz;
-//					mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfbca + mfbcc;
-//					m1 = mfbcc - mfbca;
-//					m0 = m2 + mfbcb;
-//					mfbca = m0;
-//					m0 += c1o9 * oMdrho;
-//					mfbcb = m1 - m0 * vvz;
-//					mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfcaa + mfcac;
-//					m1 = mfcac - mfcaa;
-//					m0 = m2 + mfcab;
-//					mfcaa = m0;
-//					m0 += c1o36 * oMdrho;
-//					mfcab = m1 - m0 * vvz;
-//					mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfcba + mfcbc;
-//					m1 = mfcbc - mfcba;
-//					m0 = m2 + mfcbb;
-//					mfcba = m0;
-//					m0 += c1o9 * oMdrho;
-//					mfcbb = m1 - m0 * vvz;
-//					mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfcca + mfccc;
-//					m1 = mfccc - mfcca;
-//					m0 = m2 + mfccb;
-//					mfcca = m0;
-//					m0 += c1o36 * oMdrho;
-//					mfccb = m1 - m0 * vvz;
-//					mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					// mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-//					////////////////////////////////////////////////////////////////////////////////////
-//					// Y - Dir
-//					m2 = mfaaa + mfaca;
-//					m1 = mfaca - mfaaa;
-//					m0 = m2 + mfaba;
-//					mfaaa = m0;
-//					m0 += c1o6 * oMdrho;
-//					mfaba = m1 - m0 * vvy;
-//					mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfaab + mfacb;
-//					m1 = mfacb - mfaab;
-//					m0 = m2 + mfabb;
-//					mfaab = m0;
-//					mfabb = m1 - m0 * vvy;
-//					mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfaac + mfacc;
-//					m1 = mfacc - mfaac;
-//					m0 = m2 + mfabc;
-//					mfaac = m0;
-//					m0 += c1o18 * oMdrho;
-//					mfabc = m1 - m0 * vvy;
-//					mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfbaa + mfbca;
-//					m1 = mfbca - mfbaa;
-//					m0 = m2 + mfbba;
-//					mfbaa = m0;
-//					m0 += c2o3 * oMdrho;
-//					mfbba = m1 - m0 * vvy;
-//					mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfbab + mfbcb;
-//					m1 = mfbcb - mfbab;
-//					m0 = m2 + mfbbb;
-//					mfbab = m0;
-//					mfbbb = m1 - m0 * vvy;
-//					mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfbac + mfbcc;
-//					m1 = mfbcc - mfbac;
-//					m0 = m2 + mfbbc;
-//					mfbac = m0;
-//					m0 += c2o9 * oMdrho;
-//					mfbbc = m1 - m0 * vvy;
-//					mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfcaa + mfcca;
-//					m1 = mfcca - mfcaa;
-//					m0 = m2 + mfcba;
-//					mfcaa = m0;
-//					m0 += c1o6 * oMdrho;
-//					mfcba = m1 - m0 * vvy;
-//					mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfcab + mfccb;
-//					m1 = mfccb - mfcab;
-//					m0 = m2 + mfcbb;
-//					mfcab = m0;
-//					mfcbb = m1 - m0 * vvy;
-//					mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfcac + mfccc;
-//					m1 = mfccc - mfcac;
-//					m0 = m2 + mfcbc;
-//					mfcac = m0;
-//					m0 += c1o18 * oMdrho;
-//					mfcbc = m1 - m0 * vvy;
-//					mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					// mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-//					////////////////////////////////////////////////////////////////////////////////////
-//					// X - Dir
-//					m2 = mfaaa + mfcaa;
-//					m1 = mfcaa - mfaaa;
-//					m0 = m2 + mfbaa;
-//					mfaaa = m0;
-//					m0 += 1. * oMdrho;
-//					mfbaa = m1 - m0 * vvx;
-//					mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfaba + mfcba;
-//					m1 = mfcba - mfaba;
-//					m0 = m2 + mfbba;
-//					mfaba = m0;
-//					mfbba = m1 - m0 * vvx;
-//					mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfaca + mfcca;
-//					m1 = mfcca - mfaca;
-//					m0 = m2 + mfbca;
-//					mfaca = m0;
-//					m0 += c1o3 * oMdrho;
-//					mfbca = m1 - m0 * vvx;
-//					mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfaab + mfcab;
-//					m1 = mfcab - mfaab;
-//					m0 = m2 + mfbab;
-//					mfaab = m0;
-//					mfbab = m1 - m0 * vvx;
-//					mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfabb + mfcbb;
-//					m1 = mfcbb - mfabb;
-//					m0 = m2 + mfbbb;
-//					mfabb = m0;
-//					mfbbb = m1 - m0 * vvx;
-//					mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfacb + mfccb;
-//					m1 = mfccb - mfacb;
-//					m0 = m2 + mfbcb;
-//					mfacb = m0;
-//					mfbcb = m1 - m0 * vvx;
-//					mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfaac + mfcac;
-//					m1 = mfcac - mfaac;
-//					m0 = m2 + mfbac;
-//					mfaac = m0;
-//					m0 += c1o3 * oMdrho;
-//					mfbac = m1 - m0 * vvx;
-//					mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfabc + mfcbc;
-//					m1 = mfcbc - mfabc;
-//					m0 = m2 + mfbbc;
-//					mfabc = m0;
-//					mfbbc = m1 - m0 * vvx;
-//					mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m2 = mfacc + mfccc;
-//					m1 = mfccc - mfacc;
-//					m0 = m2 + mfbcc;
-//					mfacc = m0;
-//					m0 += c1o9 * oMdrho;
-//					mfbcc = m1 - m0 * vvx;
-//					mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					// Cumulants
-//					////////////////////////////////////////////////////////////////////////////////////
-//					real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-//					real OxyyPxzz = 1.;//-s9;//2+s9;//
-//					//real OxyyMxzz  = 1.;//2+s9;//
-//					real O4 = 1.;
-//					real O5 = 1.;
-//					real O6 = 1.;
-//					real OxyyMxzz = 1.;
-//					//real OxyyPxzz = 1.;
-//
-//					//Cum 4.
-//					//real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-//					//real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-//					//real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-//
-//					real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-//					real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-//					real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-//
-//					real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1.) * oMdrho);
-//					real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1.) * oMdrho);
-//					real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1.) * oMdrho);
-//
-//					//Cum 5.
-//					real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-//					real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-//					real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-//
-//					//Cum 6.
-//					real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-//						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-//						- 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-//						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-//						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-//							+ 2. * (mfcaa * mfaca * mfaac)
-//							+ 16. * mfbba * mfbab * mfabb)
-//						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-//						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-//						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-//							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-//
-//					//2.
-//					// linear combinations
-//					real mxxPyyPzz = mfcaa + mfaca + mfaac;
-//					real mxxMyy = mfcaa - mfaca;
-//					real mxxMzz = mfcaa - mfaac;
-//
-//					real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-//					real dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-//					real dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-//
-//					//relax
-//					mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-//					mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactor) * (vx2 * dxux - vy2 * dyuy);
-//					mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactor) * (vx2 * dxux - vz2 * dzuz);
-//
-//					mfabb += collFactorM * (-mfabb);
-//					mfbab += collFactorM * (-mfbab);
-//					mfbba += collFactorM * (-mfbba);
-//
-//					// linear combinations back
-//					mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-//					mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-//					mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-//
-//					//3.
-//					// linear combinations
-//					real mxxyPyzz = mfcba + mfabc;
-//					real mxxyMyzz = mfcba - mfabc;
-//
-//					real mxxzPyyz = mfcab + mfacb;
-//					real mxxzMyyz = mfcab - mfacb;
-//
-//					real mxyyPxzz = mfbca + mfbac;
-//					real mxyyMxzz = mfbca - mfbac;
-//
-//					//relax
-//					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-//					mfbbb += wadjust * (-mfbbb);
-//					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-//					mxxyPyzz += wadjust * (-mxxyPyzz);
-//					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-//					mxxyMyzz += wadjust * (-mxxyMyzz);
-//					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-//					mxxzPyyz += wadjust * (-mxxzPyyz);
-//					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-//					mxxzMyyz += wadjust * (-mxxzMyyz);
-//					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-//					mxyyPxzz += wadjust * (-mxyyPxzz);
-//					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-//					mxyyMxzz += wadjust * (-mxyyMxzz);
-//
-//					// linear combinations back
-//					mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-//					mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-//					mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-//					mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-//					mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-//					mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-//
-//					//4.
-//					CUMacc += O4 * (-CUMacc);
-//					CUMcac += O4 * (-CUMcac);
-//					CUMcca += O4 * (-CUMcca);
-//
-//					CUMbbc += O4 * (-CUMbbc);
-//					CUMbcb += O4 * (-CUMbcb);
-//					CUMcbb += O4 * (-CUMcbb);
-//
-//					//5.
-//					CUMbcc += O5 * (-CUMbcc);
-//					CUMcbc += O5 * (-CUMcbc);
-//					CUMccb += O5 * (-CUMccb);
-//
-//					//6.
-//					CUMccc += O6 * (-CUMccc);
-//
-//					//back cumulants to central moments
-//					//4.
-//					//mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-//					//mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-//					//mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-//
-//					mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-//					mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-//					mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-//
-//					mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
-//					mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
-//					mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
-//
-//					//5.
-//					mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-//					mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-//					mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-//
-//					//6.
-//					mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-//						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-//						- 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-//						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-//						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-//							+ 2. * (mfcaa * mfaca * mfaac)
-//							+ 16. * mfbba * mfbab * mfabb)
-//						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-//						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-//						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-//							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-//
-//					////////////////////////////////////////////////////////////////////////////////////
-//					//forcing
-//					mfbaa = -mfbaa;
-//					mfaba = -mfaba;
-//					mfaab = -mfaab;
-//					//////////////////////////////////////////////////////////////////////////////////////
-//
-//					////////////////////////////////////////////////////////////////////////////////////
-//					//back
-//					////////////////////////////////////////////////////////////////////////////////////
-//					//mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-//					////////////////////////////////////////////////////////////////////////////////////
-//					// Z - Dir
-//					m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-//					m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
-//					m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-//					mfaaa = m0;
-//					mfaab = m1;
-//					mfaac = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-//					m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
-//					m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-//					mfaba = m0;
-//					mfabb = m1;
-//					mfabc = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-//					m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2;
-//					m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-//					mfaca = m0;
-//					mfacb = m1;
-//					mfacc = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-//					m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
-//					m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-//					mfbaa = m0;
-//					mfbab = m1;
-//					mfbac = m2;
-//					/////////b//////////////////////////////////////////////////////////////////////////
-//					m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-//					m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
-//					m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-//					mfbba = m0;
-//					mfbbb = m1;
-//					mfbbc = m2;
-//					/////////b//////////////////////////////////////////////////////////////////////////
-//					m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-//					m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
-//					m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-//					mfbca = m0;
-//					mfbcb = m1;
-//					mfbcc = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-//					m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2;
-//					m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-//					mfcaa = m0;
-//					mfcab = m1;
-//					mfcac = m2;
-//					/////////c//////////////////////////////////////////////////////////////////////////
-//					m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-//					m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
-//					m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-//					mfcba = m0;
-//					mfcbb = m1;
-//					mfcbc = m2;
-//					/////////c//////////////////////////////////////////////////////////////////////////
-//					m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-//					m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
-//					m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-//					mfcca = m0;
-//					mfccb = m1;
-//					mfccc = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					//mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-//					////////////////////////////////////////////////////////////////////////////////////
-//					// Y - Dir
-//					m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-//					m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
-//					m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-//					mfaaa = m0;
-//					mfaba = m1;
-//					mfaca = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-//					m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
-//					m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-//					mfaab = m0;
-//					mfabb = m1;
-//					mfacb = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-//					m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
-//					m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-//					mfaac = m0;
-//					mfabc = m1;
-//					mfacc = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-//					m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
-//					m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-//					mfbaa = m0;
-//					mfbba = m1;
-//					mfbca = m2;
-//					/////////b//////////////////////////////////////////////////////////////////////////
-//					m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-//					m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
-//					m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-//					mfbab = m0;
-//					mfbbb = m1;
-//					mfbcb = m2;
-//					/////////b//////////////////////////////////////////////////////////////////////////
-//					m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-//					m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
-//					m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-//					mfbac = m0;
-//					mfbbc = m1;
-//					mfbcc = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-//					m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
-//					m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-//					mfcaa = m0;
-//					mfcba = m1;
-//					mfcca = m2;
-//					/////////c//////////////////////////////////////////////////////////////////////////
-//					m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-//					m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
-//					m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-//					mfcab = m0;
-//					mfcbb = m1;
-//					mfccb = m2;
-//					/////////c//////////////////////////////////////////////////////////////////////////
-//					m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-//					m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
-//					m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-//					mfcac = m0;
-//					mfcbc = m1;
-//					mfccc = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					//mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-//					////////////////////////////////////////////////////////////////////////////////////
-//					// X - Dir
-//					m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-//					m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
-//					m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-//					mfaaa = m0;
-//					mfbaa = m1;
-//					mfcaa = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-//					m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
-//					m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-//					mfaba = m0;
-//					mfbba = m1;
-//					mfcba = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-//					m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
-//					m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-//					mfaca = m0;
-//					mfbca = m1;
-//					mfcca = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-//					m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
-//					m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-//					mfaab = m0;
-//					mfbab = m1;
-//					mfcab = m2;
-//					///////////b////////////////////////////////////////////////////////////////////////
-//					m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-//					m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
-//					m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-//					mfabb = m0;
-//					mfbbb = m1;
-//					mfcbb = m2;
-//					///////////b////////////////////////////////////////////////////////////////////////
-//					m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-//					m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
-//					m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-//					mfacb = m0;
-//					mfbcb = m1;
-//					mfccb = m2;
-//					////////////////////////////////////////////////////////////////////////////////////
-//					////////////////////////////////////////////////////////////////////////////////////
-//					m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-//					m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
-//					m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-//					mfaac = m0;
-//					mfbac = m1;
-//					mfcac = m2;
-//					///////////c////////////////////////////////////////////////////////////////////////
-//					m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-//					m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
-//					m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-//					mfabc = m0;
-//					mfbbc = m1;
-//					mfcbc = m2;
-//					///////////c////////////////////////////////////////////////////////////////////////
-//					m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-//					m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
-//					m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-//					mfacc = m0;
-//					mfbcc = m1;
-//					mfccc = m2;
-//
-//					//////////////////////////////////////////////////////////////////////////
-//					//proof correctness
-//					//////////////////////////////////////////////////////////////////////////
-//#ifdef  PROOF_CORRECTNESS
-//					real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-//						+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-//						+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-//					//real dif = fabs(rho - rho_post);
-//					real dif = rho - rho_post;
-//#ifdef SINGLEPRECISION
-//					if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//					if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//					{
-//						UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post)
-//							+ " dif=" + UbSystem::toString(dif)
-//							+ " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)
-//							+ " in " + block.lock()->toString() + " step = " + UbSystem::toString(step)));
-//					}
-//#endif
-//					//////////////////////////////////////////////////////////////////////////
-//					//write distribution
-//					//////////////////////////////////////////////////////////////////////////
-//					(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-//					(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-//					(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-//					(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-//					(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-//					(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-//					(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-//					(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-//					(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-//					(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-//					(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-//					(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-//					(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-//
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-//
-//					(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
-//
-//					findNeighbors(phaseField, x1, x2, x3);
-//					real dX1_phi = gradX1_phi();
-//					real dX2_phi = gradX2_phi();
-//					real dX3_phi = gradX3_phi();
-//
-//					real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi)+ 1.0e-20;//+ 1e-9+1e-3;
-//
-//					real normX1 = dX1_phi / denom;
-//					real normX2 = dX2_phi / denom;
-//					real normX3 = dX3_phi / denom;
-					//////////////////////////////////////////////////////////////////////////
-
-//					////////////////old kernel
-//					//////////////////////////////////////////////////////////////////////////
-//					// Read distributions and phase field
-//					////////////////////////////////////////////////////////////////////////////
-//					//////////////////////////////////////////////////////////////////////////
-//
-//					// E   N  T
-//					// c   c  c
-//					//////////
-//					// W   S  B
-//					// a   a  a
-//
-//					// Rest ist b
-//
-//					// mfxyz
-//					// a - negative
-//					// b - null
-//					// c - positive
-//
-//					// a b c
-//					//-1 0 1
-
-					findNeighbors(phaseField, x1, x2, x3);
-
-					real mfcbb ;//= (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-					real mfbcb ;//= (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-					real mfbbc ;//= (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-					real mfccb ;//= (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-					real mfacb ;//= (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-					real mfcbc ;//= (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-					real mfabc ;//= (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-					real mfbcc ;//= (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-					real mfbac ;//= (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-					real mfccc ;//= (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-					real mfacc ;//= (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-					real mfcac ;//= (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-					real mfaac ;//= (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					real mfabb ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-					real mfbab ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-					real mfbba ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-					real mfaab ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-					real mfcab ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-					real mfaba ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-					real mfcba ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-					real mfbaa ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-					real mfbca ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-					real mfaaa ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					real mfcaa ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					real mfaca ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					real mfcca ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-					real mfbbb ;//= (*this->zeroDistributionsF)(x1, x2, x3);
-
-
-					//real mfhcbb ;//= (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
-					//real mfhbcb ;//= (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
-					//real mfhbbc ;//= (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
-					//real mfhccb ;//= (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
-					//real mfhacb ;//= (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
-					//real mfhcbc ;//= (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
-					//real mfhabc ;//= (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
-					//real mfhbcc ;//= (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
-					//real mfhbac ;//= (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
-					//real mfhccc ;//= (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
-					//real mfhacc ;//= (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
-					//real mfhcac ;//= (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
-					//real mfhaac ;//= (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					//real mfhabb ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
-					//real mfhbab ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
-					//real mfhbba ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
-					//real mfhaab ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
-					//real mfhcab ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
-					//real mfhaba ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
-					//real mfhcba ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
-					//real mfhbaa ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
-					//real mfhbca ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
-					//real mfhaaa ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					//real mfhcaa ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					//real mfhaca ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					//real mfhcca ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
-					//real mfhbbb ;//= (*this->zeroDistributionsH2)(x1, x2, x3);
-
-
-					//if (phi[d000] < c1o2)
-					//{
-						 mfcbb= (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-						 mfbcb= (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-						 mfbbc= (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-						 mfccb= (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-						 mfacb= (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-						 mfcbc= (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-						 mfabc= (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-						 mfbcc= (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-						 mfbac= (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-						 mfccc= (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-						 mfacc= (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-						 mfcac= (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-						 mfaac= (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-						 mfabb= (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-						 mfbab= (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-						 mfbba= (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-						 mfaab= (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-						 mfcab= (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-						 mfaba= (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-						 mfcba= (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-						 mfbaa= (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-						 mfbca= (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-						 mfaaa= (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						 mfcaa= (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						 mfaca= (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						 mfcca= (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-						 mfbbb= (*this->zeroDistributionsF)(x1, x2, x3);
-
-
-					//	 mfhcbb= (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
-					//	 mfhbcb= (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
-					//	 mfhbbc= (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
-					//	 mfhccb= (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
-					//	 mfhacb= (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
-					//	 mfhcbc= (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
-					//	 mfhabc= (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
-					//	 mfhbcc= (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
-					//	 mfhbac= (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
-					//	 mfhccc= (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
-					//	 mfhacc= (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
-					//	 mfhcac= (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
-					//	 mfhaac= (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					//	 mfhabb= (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
-					//	 mfhbab= (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
-					//	 mfhbba= (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
-					//	 mfhaab= (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
-					//	 mfhcab= (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
-					//	 mfhaba= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
-					//	 mfhcba= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
-					//	 mfhbaa= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
-					//	 mfhbca= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
-					//	 mfhaaa= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					//	 mfhcaa= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					//	 mfhaca= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					//	 mfhcca= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
-					//	 mfhbbb= (*this->zeroDistributionsH2)(x1, x2, x3);
-
-					//}
-					//else
-					//{
-					//	mfhcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-					//	mfhbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-					//	mfhbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-					//	mfhccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-					//	mfhacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-					//	mfhcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-					//	mfhabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-					//	mfhbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-					//	mfhbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-					//	mfhccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-					//	mfhacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-					//	mfhcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-					//	mfhaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					//	mfhabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-					//	mfhbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-					//	mfhbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-					//	mfhaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-					//	mfhcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-					//	mfhaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-					//	mfhcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-					//	mfhbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-					//	mfhbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-					//	mfhaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					//	mfhcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					//	mfhaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					//	mfhcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-					//	mfhbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-
-					//	mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
-					//	mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
-					//	mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
-					//	mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
-					//	mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
-					//	mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
-					//	mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
-					//	mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
-					//	mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
-					//	mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
-					//	mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
-					//	mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
-					//	mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					//	mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
-					//	mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
-					//	mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
-					//	mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
-					//	mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
-					//	mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
-					//	mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
-					//	mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
-					//	mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
-					//	mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					//	mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					//	mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					//	mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
-					//	mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3);
-
-					//}
-
-					//real rhoH = 1.0;
-					//real rhoL = 1.0 / densityRatio;
-
-					real rhoH = 1.0;
-					real rhoL = 1.0/ densityRatio;
-
-					//real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-					real dX1_phi = gradX1_phi();
-					real dX2_phi = gradX2_phi();
-					real dX3_phi = gradX3_phi();
-
-					real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi)+ 1.0e-20;//+ 1e-9+1e-3;
-					// 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase?
-					real normX1 = dX1_phi / denom;
-					real normX2 = dX2_phi / denom;
-					real normX3 = dX3_phi / denom;
-
-
-					//real pushInterface = 2.0;
-					//collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
-					//collFactorM = collFactorL + (collFactorL - collFactorG) * (tanh(pushInterface * (c2o1 * phi[d000] - c1o1)) / tanh(pushInterface) * c1o2 + c1o2 - phiH) / (phiH - phiL);
-					collFactorM = phi[d000] > phiLim ? collFactorL : collFactorG;
-					//collFactorM=(((*phaseField)(x1, x2, x3) > c1o2) && ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) ? 1.8 : collFactorM;
-					real collFactorMInv = phi[d000] > phiLim ? collFactorG : collFactorL;
-
-					//real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-					//----------- Calculating Macroscopic Values -------------
-					real rho = phi[d000] > phiLim ? rhoH : rhoL;//rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible
-
-					//real rho = rhoH + rhoToPhi * (tanh(pushInterface*(c2o1*phi[d000]-c1o1))/tanh(pushInterface)*c1o2 +c1o2 - phiH); //Incompressible
-																		///scaled phase field
-					//real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) / ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) + (c1o1 - (*phaseField)(x1, x2, x3)) * (c1o1 - (*phaseField)(x1, x2, x3))) - phiH);
-					///!scaled phase field
-					
-					//real rho = rhoH + rhoToPhi * (phi[d000] - phiH)+(c1o1-phi[d000])* (*pressure)(x1, x2, x3)*c3o1; //compressible
-					//real rho = rhoL + (rhoH - rhoL) * phi[d000] + (c1o1 - phi[d000]) * (*pressure)(x1, x2, x3) * c3o1; //compressible
-
-					real m0, m1, m2;
-					real rhoRef=c1o1;
-
-					real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-						(mfcbb - mfabb))/rhoRef;
-					real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-						(mfbcb - mfbab))/rhoRef;
-					real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-						(mfbbc - mfbba))/rhoRef;
-					////Filter&Gradient merged
-					//real pressureHere = (*pressureOld)(x1, x2, x3);
-					//real pressureHere = (*pressure)(x1, x2, x3);
-
-					//real arrayP[3][3][3] = { {{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}},
-					//							{{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}},
-					//							{ {pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}} };
-					//real LaplaceP = 0.0;
-					//LaplaceP += WEIGTH[dPPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere)))
-					//	+ ((((*pressureOld)(x1 + 1, x2 - 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 + 1) - pressureHere))));
-					//LaplaceP += WEIGTH[d0PP] * (
-					//	((((*pressureOld)(x1 + 1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3) - pressureHere)))
-					//	+ ((((*pressureOld)(x1 + 1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 -1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 + 1) - pressureHere)))
-					//	+ ((((*pressureOld)(x1, x2 + 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 + 1) - pressureHere)))
-					//	);
-					//LaplaceP += WEIGTH[d00P] * (
-					//	(((*pressureOld)(x1 + 1, x2, x3) - pressureHere) + ((*pressureOld)(x1, x2-1, x3) - pressureHere))
-					//	+ (((*pressureOld)(x1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3) - pressureHere))
-					//	+ (((*pressureOld)(x1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2, x3 - 1) - pressureHere))
-					//	);
-
-					//LaplaceP= 6.0 * LaplaceP;
-					
-					//real sum = 0.0;
-
-//					for (int dir1 = -1; dir1 <= 1; dir1++) {
-//						for (int dir2 = -1; dir2 <= 1; dir2++) {
-//							for (int dir3 = -1; dir3 <= 1; dir3++){
-//								int xxx = x1 + dir1;
-//								int yyy = x2 + dir2;
-//								int zzz = x3 + dir3;
-//								if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressureOld)(xxx, yyy, zzz);
-//								//if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressure)(xxx, yyy, zzz);
-//							//	sum += 64.0 / (216.0 * (c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)) * (c1o1 + c3o1 * abs(dir3))) * arrayP[dir1 + 1][dir2 + 1][dir3 + 1];
-//							}
-//						}
-//					}
-////					(*pressure)(x1, x2, x3) = sum;// *0.1 + (1.0 - 0.1) * (*pressureOld)(x1, x2, x3);
-//
-//
-//					(*pressure)(x1, x2, x3) = (((((arrayP[0][0][0] + arrayP[2][2][2]) + (arrayP[0][2][0] + arrayP[2][0][2])) + ((arrayP[2][0][0] + arrayP[0][2][2]) + (arrayP[2][2][0] + arrayP[0][0][2]))) * c1o216
-//						+ (((arrayP[0][0][1] + arrayP[2][2][1]) + (arrayP[0][1][0] + arrayP[2][1][2])) + ((arrayP[1][0][0] + arrayP[1][2][2]) + (arrayP[0][1][2] + arrayP[2][1][0])) + ((arrayP[1][0][2] + arrayP[1][2][0]) + (arrayP[0][2][1] + arrayP[2][0][1]))) * c1o54)
-//						+ ((arrayP[0][1][1] + arrayP[2][1][1]) + (arrayP[1][0][1] + arrayP[1][2][1]) + (arrayP[1][1][0] + arrayP[1][1][2])) * c2o27)
-//						+ arrayP[1][1][1] * c8o27;
-					//real gradPx = 0.0;
-					//real gradPy = 0.0;
-					//real gradPz = 0.0;
-					//for (int dir1 = -1; dir1 <= 1; dir1++) {
-					//	for (int dir2 = -1; dir2 <= 1; dir2++) {
-					//		gradPx -= arrayP[0][dir1+1][dir2+1] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		gradPx += arrayP[2][dir1+1][dir2+1] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-
-
-
-					//		gradPy -= arrayP[dir1+1][0][dir2+1] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		gradPy += arrayP[dir1+1][2][dir2+1] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		
-
-					//		gradPz -= arrayP[dir1+1][dir2+1][0] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		gradPz += arrayP[dir1+1][dir2+1][2] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//	}
-					//}
-
-					//real gradPx = ((((arrayP[2][0][0] - arrayP[0][2][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72
-					//	+ (((arrayP[2][1][0] - arrayP[0][1][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[2][0][1] - arrayP[0][2][1]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18)
-					//	+ (arrayP[2][1][1] - arrayP[0][1][1]) * c2o9;
-					//real gradPy = ((((arrayP[0][2][0] - arrayP[2][0][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[0][2][2] - arrayP[2][0][0]))) * c1o72
-					//	+ (((arrayP[1][2][0] - arrayP[1][0][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[0][2][1] - arrayP[2][0][1]) + (arrayP[1][2][2] - arrayP[1][0][0]))) * c1o18)
-					//	+ (arrayP[1][2][1] - arrayP[1][0][1]) * c2o9;
-					//real gradPz = ((((arrayP[0][0][2] - arrayP[2][2][0]) + (arrayP[0][2][2] - arrayP[2][0][0])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72
-					//	+ (((arrayP[0][1][2] - arrayP[2][1][0]) + (arrayP[1][2][2] - arrayP[1][0][0])) + ((arrayP[1][0][2] - arrayP[1][2][0]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18)
-					//	+ (arrayP[1][1][2] - arrayP[1][1][0]) * c2o9;
-
-					//gradPx *=c1o1 - (*pressure)(x1, x2, x3)+pressureHere;
-					//gradPy *=c1o1 - (*pressure)(x1, x2, x3) + pressureHere;
-					//gradPz *=c1o1 - (*pressure)(x1, x2, x3) + pressureHere;
-
-					////!Filter&Gradient merged
-					//real gradPx = 0.0;
-					//real gradPy = 0.0;
-					//real gradPz = 0.0;
-					//for (int dir1 = -1; dir1 <= 1; dir1++) {
-					//	for (int dir2 = -1; dir2 <= 1; dir2++) {
-					//		int yyy = x2 + dir1;
-					//		int zzz = x3 + dir2;
-					//		if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) {
-					//			gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-					//		if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) {
-					//			gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-
-					//		int xxx = x1 + dir1;
-					//		if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) {
-					//			gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-					//		if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) {
-					//			gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-
-					//		yyy = x2 + dir2;
-					//		if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) {
-					//			gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-					//		if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) {
-					//			gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					//		}
-
-					//	}
-					//}
-
-					//Viscosity increase by phase field residuum
-					//real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom);
-					//real limVis = 0.01;// 0.0000001 * 10;//0.01;
-					// collFactorM =collFactorM/(c1o1+limVis*(errPhi*errPhi)*collFactorM);
-					// collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
-					//errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi;
-					//collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis);
-
-					//3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
-					//+WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
-					//+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
-
-
-
-					////external pressure
-					//forcingX1 =/* muForcingX1.Eval()/rho */- gradPx/rho;
-					//forcingX2 =/* muForcingX2.Eval()/rho */- gradPy/rho;
-					//forcingX3 =/* muForcingX3.Eval()/rho */- gradPz/rho;
-
-					///////////////////////////////////////////////
-
-					//real pBefore = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
-					//pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) );
-					////if (vvx * vvx + vvy * vvy + vvz * vvz > 1.0e-100) {
-					//	mfabb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP00] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbab -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0P0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbba -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPP0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMP0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbaa -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbca -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcbb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM00] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbcb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0M0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbbc -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfccb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMM0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfacb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPM0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcbc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfabc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbcc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbac -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfccc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfacc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbbb -= pBefore * 8.0 / 9.0;
-					//}
-
-					///////////////////////////////////////////////
-
-					//real pStarStart = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
-
-					//rho = rhoH + rhoToPhi * ((phi[d000] - phiH)+fabs(pStarStart)*0); //Incompressible
-
-					muRho = rho;
-
-
-					/////////////////////
-
-					 vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-						(mfcbb - mfabb)) / rhoRef;
-					 vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-						(mfbcb - mfbab)) / rhoRef;
-					 vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-						(mfbbc - mfbba)) / rhoRef;
-
-
-					 //real dRhoInvX = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhcaa - mfhacc) + (mfhcca - mfhaac))) +
-						// (((mfhcba - mfhabc) + (mfhcbc - mfhaba)) + ((mfhcab - mfhacb) + (mfhccb - mfhaab))) +
-						// (mfhcbb - mfhabb)));
-					 //real dRhoInvY = -(((((mfhccc - mfhaaa) + (mfhaca - mfhcac)) + ((mfhacc - mfhcaa) + (mfhcca - mfhaac))) +
-						// (((mfhbca - mfhbac) + (mfhbcc - mfhbaa)) + ((mfhacb - mfhcab) + (mfhccb - mfhaab))) +
-						// (mfhbcb - mfhbab)));
-					 //real dRhoInvZ = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhacc - mfhcaa) + (mfhaac - mfhcca))) +
-						// (((mfhbac - mfhbca) + (mfhbcc - mfhbaa)) + ((mfhabc - mfhcba) + (mfhcbc - mfhaba))) +
-						// (mfhbbc - mfhbba)));
-
-
-					 forcingX1 = 0.0;
-					 forcingX2 = 0.0;
-					 forcingX3 = 0.0;
-					//!Abbas
-					//real dX1_rhoInv = gradX1_rhoInv(rhoL, rhoH - rhoL);
-					//real dX2_rhoInv = gradX2_rhoInv(rhoL, rhoH - rhoL);
-					//real dX3_rhoInv = gradX3_rhoInv(rhoL, rhoH - rhoL);
-					//forcingX1 =/* muForcingX1.Eval() / rho*/ +pStar * dX1_rhoInv * rho;
-					//forcingX2 =/* muForcingX2.Eval() / rho*/ +pStar * dX2_rhoInv * rho;
-					//forcingX3 =/* muForcingX3.Eval() / rho*/ +pStar * dX3_rhoInv * rho;
-
-					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho + pStar * dX1_rhoInv * rho) *c1o2;
-					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho + pStar * dX2_rhoInv * rho) *c1o2;
-					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho + pStar * dX3_rhoInv * rho) *c1o2;
-					 //real FdX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-					 //real FdX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-					 //real FdX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-
-
-					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho ) ;
-					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho ) ;
-					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho ) ;
-
-					//forcingX1 = (pStar * dRhoInvX* rho *c3o1) ;
-					//forcingX2 = (pStar * dRhoInvY* rho *c3o1) ;
-					//forcingX3 = (pStar * dRhoInvZ* rho *c3o1) ;
-					//if (phi[d000] > 0.1 && phi[d000] < 0.9) std::cout << phi[d000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl;
-					//real forcingX1ALTERNAT = ( pStar * dX1_rhoInv * rho) ;
-					//real forcingX2ALTERNAT = ( pStar * dX2_rhoInv * rho) ;
-					//real forcingX3ALTERNAT = ( pStar * dX3_rhoInv * rho) ;
-
-					//forcingX1 = (fabs(vvx + c1o2 * forcingX1) < fabs(vvx + c1o2 * forcingX1ALTERNAT)) ? forcingX1 : forcingX1ALTERNAT;
-					//forcingX2 = (fabs(vvy + c1o2 * forcingX2) < fabs(vvy + c1o2 * forcingX2ALTERNAT)) ? forcingX2 : forcingX2ALTERNAT;
-					//forcingX3 = (fabs(vvz + c1o2 * forcingX3) < fabs(vvz + c1o2 * forcingX3ALTERNAT)) ? forcingX3 : forcingX3ALTERNAT;
-
-					//	 forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-					//	 forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-					//	 forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-
-					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX1_rhoInv * rho*(phi[d000]));
-					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX2_rhoInv * rho*(phi[d000]));
-					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX3_rhoInv * rho*(phi[d000]));
-						 //if (phi[d000] > 0.3 && phi[d000] < 0.7)
-						 //{
-							// int test = 1;
-							// std::cout << phi[d000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale/ dX1_phi<< std::endl;
-						 //}
-
-
-
-					 //real scaleGrad = c2o1 * phi[d000] * (1.0 - phi[d000]) / ((phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])) * (phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])));
-					 //dX1_phi *= scaleGrad;
-					 //dX2_phi *= scaleGrad;
-					 //dX3_phi *= scaleGrad;
-
-					 ///Experimental interface sharpening force 20.06.2022
-
-					 //real scaleSharpener = 1.0;
-					 //forcingX1 += scaleSharpener * (FdX1_phi - dX1_phi) * fabsf(FdX1_phi - dX1_phi)  / rho;
-					 //forcingX2 += scaleSharpener * (FdX2_phi - dX2_phi) * fabsf(FdX2_phi - dX2_phi)  / rho;
-					 //forcingX3 += scaleSharpener * (FdX3_phi - dX3_phi) * fabsf(FdX3_phi - dX3_phi)  / rho;
-					///surface tension force
-					//forcingX1 += mu * dX1_phi/rho;
-					//forcingX2 += mu * dX2_phi/rho;
-					//forcingX3 += mu * dX3_phi/rho;
-
-					//real forcingBIAS = 0.5;
-				//	forcingX1 += muForcingX1.Eval() / rho;//*phi[d000];
-                //     forcingX2 += -5.0e-7;//  *phi[d000];                         // muForcingX2.Eval() / rho - 5.0e-7 * phi[d000] * 0;// * phi[d000];
-				//	forcingX3 += muForcingX3.Eval() / rho;// * phi[d000];
-
-				//	//19.08.2022
-					//vvx += vvxh / rho * c1o2;
-					//vvy += vvyh / rho * c1o2;
-					//vvz += vvzh / rho * c1o2;
-				//	//
-
-
-				//	vvx += (forcingX1) * deltaT * c1o2;
-				//	vvy += (forcingX2) * deltaT * c1o2;
-				//	vvz += (forcingX3) * deltaT * c1o2;
-
-					    if (withForcing) {
-
-                        forcingX1 += muForcingX1.Eval();
-                        forcingX2 += muForcingX2.Eval();
-                        forcingX3 += muForcingX3.Eval();
-
-                        vvx += (forcingX1)*deltaT * c1o2;
-                        vvy += (forcingX2)*deltaT * c1o2;
-                        vvz += (forcingX3)*deltaT * c1o2;
-                    }
-
-					//vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT *  c1o2; // X
-					//vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT *  c1o2; // Y
-					//vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT *  c1o2; // Z
-
-
-
-				//	vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT * forcingBIAS; // X
-				//	vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT * forcingBIAS; // Y
-				//	vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT * forcingBIAS; // Z
-
-
-
-					real vx2;
-					real vy2;
-					real vz2;
-					vx2 = vvx * vvx;
-					vy2 = vvy * vvy;
-					vz2 = vvz * vvz;
-					//pStar =ppStar- (vx2 + vy2 + vz2)*pStar;
-				//	pStar = (pStar + ppStar)*c1o2;
-					///////////////////////////////////////////////////////////////////////////////////////////               
-					real 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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
-
-															 ////////////////////////////////////////////////////////////////////////////////////
-					real wadjust;
-					//real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])); //real qudricLimit = 0.01;
-					//real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) && (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01;
-					//real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2)&& (normX1*vvx+normX2*vvy+normX3*vvz<0) ) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01 ;
-                    real qudricLimit = 0.0001;
-                    /// (c1o1 + 1.0e3 * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi));
-					//real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) ;
-					//real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) ) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01 ;
-					//qudricLimit = (((*phaseField)(x1, x2, x3)-c1o2 ) * (normX1 * vvx + normX2 * vvy + normX3 * vvz) < 0) ? 0.01 / (c1o1 + 1.0e8 * phi[d000] * (c1o1 - phi[d000])) : 0.01;
-				//	if (phi[d000] > c1o2 && (*phaseFieldOld)(x1, x2, x3) <= c1o2) collFactorM = 1.8;
-					
-																													////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (6)-(14) in \ref
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-					forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho);
-
-					////////////////////////////////////////////////////////////////////////////////////
-					// Y - Dir
-					forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho);
-					forwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-					forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho);
-					forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2);
-					forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho);
-					forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-					forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho);
-
-					////////////////////////////////////////////////////////////////////////////////////
-					// X - Dir
-					forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho);
-					forwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-					forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho);
-					forwardChimera(mfaab, mfbab, mfcab, vvx, vx2);
-					forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2);
-					forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2);
-					forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho);
-					forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-					forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c3o1, c1o9, oMdrho);
-
-																							  
-																							  ////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					// Cumulants
-					////////////////////////////////////////////////////////////////////////////////////
-
-					// mfaaa = 0.0;
-					real OxxPyyPzz = 1.0; //omega2 or bulk viscosity
-											//  real OxyyPxzz = 1.;//-s9;//2+s9;//
-											//  real OxyyMxzz  = 1.;//2+s9;//
-					real O4 = 1.;
-					real O5 = 1.;
-					real O6 = 1.;
-
-					//collFactorM+= (1.7 - collFactorM) * fabs(mfaaa) / (fabs(mfaaa) + 0.001f);
-					//////
-					//M110 -= vvx * vvy - mfbba;
-					//M101 -= vvx * vvz - mfbab;
-					//M011 -= vvy * vvz - mfabb;
-
-
-
-					//M200 -= vx2;
-					//M020 -= vy2;
-					//M002 -= vz2;
-					//real Mp = (M200 + M020 + M002);
-
-
-
-					//M200 -= c1o3 * Mp;
-					//M020 -= c1o3 * Mp;
-					//M002 -= c1o3 * Mp;
-
-					//M200 -= -mfcaa + (mfcaa + mfaca + mfaac) * c1o3;
-					//M020 -= -mfaca + (mfcaa + mfaca + mfaac) * c1o3;
-					//M002 -= -mfaac + (mfcaa + mfaca + mfaac) * c1o3;
-
-					/////
-
-					/////fourth order parameters; here only for test. Move out of loop!
-
-					real OxyyPxzz =  8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-					real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-				    real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-					real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' )
-					real BB =  (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//real stress = 1.0;// stress / (stress + 1.0e-10);
-					//stress = 1.0;
-					//OxyyPxzz += stress*(1.0-OxyyPxzz);
-					//OxyyPxzz = c3o1 * (collFactorM - c2o1) / (collFactorM - c3o1);
-					//OxyyMxzz += stress*(1.0-OxyyMxzz);
-					//Oxyz +=  stress*(1.0-Oxyz);
-					//A *= 1.0-stress;
-					//BB *= 1.0-stress;
-
-					//Cum 4.
-					//real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-					//real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-					//real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-					real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-					real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-					real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-					real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-					real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-					real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-
-					//Cum 5.
-					real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-					real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-					real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-					//Cum 6.
-					real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-						- 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-							+ 2. * (mfcaa * mfaca * mfaac)
-							+ 16. * mfbba * mfbab * mfabb)
-						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-					//2.
-					// linear combinations
-					real mxxPyyPzz = mfcaa + mfaca + mfaac;
-					//pStar = (mxxPyyPzz+vx2+vy2+vz2) * c1o3;//does not work
-					//pStar = (mxxPyyPzz) * c1o3;
-					//pStar = pStar + 1.5 * (mxxPyyPzz * c1o3 - pStar);
-					//mfaaa = mxxPyyPzz;
-					//  real mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho));
-					mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa
-										//mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
-					//dirty (04.04.2023)
-					//if (phi[d000] > c1o2  &&(dX1_phi*vvx+dX2_phi*vvy+dX3_phi*vvz)<0) {
-					//	//collFactorM = c1o1 / (c1o1 / collFactorM +1e10* fabsf(mxxPyyPzz)*(c1o1-fabsf(phi[d000])));
-					//	collFactorM = c1o1 / (c1o1 / collFactorM - 1e15*(dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz)* fabsf(mxxPyyPzz) );
-					//	collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
-					//	 OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-					//	 OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-					//	 Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-					//	 A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//	 BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-
-					//}
-					real mxxMyy = mfcaa - mfaca;
-					real mxxMzz = mfcaa - mfaac;
-
-					///
-					// real mmfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-					// real mmfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-					// real mmfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-					// real mmfabb = mfabb;
-					// real mmfbab = mfbab;
-					// real mmfbba = mfbba;
-					///
-
-					real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);// *0;
-					//real dxux = -c1o2 * (mxxMyy + mxxMzz) * collFactorM - mfaaa * c1o3* omegaDRho;
-					real dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
-					real dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
-					real Dxy = -c3o1 * collFactorM * mfbba;
-					real Dxz = -c3o1 * collFactorM * mfbab;
-					real Dyz = -c3o1 * collFactorM * mfabb;
-                    // if (phi[d000] > phiLim) 
-						if ((phi[d000] > phiLim) && ((phi[dP00] <= phiLim) || (phi[dM00] <= phiLim) || (phi[d00P] <= phiLim) || (phi[d00M] <= phiLim) || (phi[d0M0] <= phiLim) || (phi[d0P0] <= phiLim) || (phi[dPP0] <= phiLim) || (phi[dPM0] <= phiLim) || (phi[dP0P] <= phiLim) ||
-                                                  (phi[dP0M] <= phiLim) || (phi[dMP0] <= phiLim) || (phi[dMM0] <= phiLim) || (phi[dM0P] <= phiLim) || (phi[dM0M] <= phiLim) || (phi[d0PM] <= phiLim) || (phi[d0MM] <= phiLim) || (phi[d0PP] <= phiLim) || (phi[d0MP] <= phiLim) ||
-                                                  (phi[dPPP] <= phiLim) || (phi[dPMP] <= phiLim) || (phi[dMPP] <= phiLim) || (phi[dMMP] <= phiLim) ||
-                         (phi[dPPM] <= phiLim) || (phi[dPMM] <= phiLim) || (phi[dMPM] <= phiLim) || (phi[dMMM] <= phiLim))) {
-
-					// {
-                        /// QR eddyviscosity:
-                        real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux) - (Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz;
-                        real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz);
-                        //real nuEddy = 5.0e5 * (eddyR / (eddyQ + 1e-100)) * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-                        real nuEddy = 5.0e3 * (eddyR / (eddyQ + 1e-100));
-                        nuEddy = (nuEddy < c1o1 / collFactorM) ? c1o1 / collFactorM : nuEddy;
-                        collFactorM = c1o1 / nuEddy;
-                        // collFactorM = c1o1 / (c1o1 / collFactorM +1.e2*nuEddy*(dX1_phi*dX1_phi+dX2_phi*dX2_phi+dX3_phi*dX3_phi));
-                        collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
-                        OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-                        OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-                        Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 *
-                        collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM
-                        - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM
-                        - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-                    }
-
-					//if ((phi[d000] > c1o2)&& (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)){//&& ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) {
-     //               if ((phi[d000] > 0.01) && (phi[d000]<0.99)){
-					//	//std::cout << "new node\n";
-					//	///QR eddyviscosity:
-					//	real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux)-(Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz;
-					//	real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz);
-					//	real nuEddy = 10.0e4*(eddyR / (eddyQ + 1e-100)) * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-     //                   nuEddy = 1000*(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-					//	//nuEddy=10.0e4*fabsf(dxux+dyuy+dzuz) * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-					//	//if (nuEddy > c1o1 / collFactorM) std::cout << nuEddy <<" "<< fabsf(dxux + dyuy + dzuz)<< "\n";
-					//	nuEddy = (nuEddy < c1o1 / collFactorM) ? c1o1 / collFactorM : nuEddy;
-					//	collFactorM = c1o1 / nuEddy;
-					//	//collFactorM = 1.8;
-					//	//collFactorM = c1o1 / (c1o1 / collFactorM +1.e2*nuEddy*(dX1_phi*dX1_phi+dX2_phi*dX2_phi+dX3_phi*dX3_phi));
-					//	collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
-					//	OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-					//	OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-					//	Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-					//	A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//	BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-
-					//}
-					///////
-
-                    // non Newtonian fluid collision factor
-                    //if (phi[d000] > phiLim) {
-                    //    real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz);
-                    //    collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1);
-                    //    collFactorM = (collFactorM < c1o1) ? c1o1 : collFactorM;
-                    //}
-
-				//low viscouse non Newtonian fluid
-                if (phi[d000] > phiLim) {
-                        real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz);
-                        collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1);
-                        collFactorM = (collFactorM < c1o12) ? c1o12 : collFactorM;
-                        if (collFactorM < c1o1) {
-                            OxyyPxzz = c1o1;
-                            OxyyMxzz = c1o1;
-                            Oxyz = c1o1;
-                            A = 0.0;
-                            BB = 0.0;
-                        }
-                    }
-
-
-					real mxxMyyh = -c2o1 * (dxux - dyuy) / collFactorMInv * c1o3;
-					real mxxMzzh = -c2o1 * (dxux - dzuz) / collFactorMInv * c1o3;
-//					mfhbba = -Dxy / collFactorMInv*c1o3;
-//					mfhbab = -Dxz / collFactorMInv * c1o3;
-//					mfhabb = -Dyz / collFactorMInv * c1o3;
-
-//					// attempt to improve implicit  stress computation by fixed iteration
-//					real dX2_rho = (rhoToPhi)*dX2_phi;
-//					real dX1_rho = (rhoToPhi)*dX1_phi;
-//					real dX3_rho = (rhoToPhi)*dX3_phi;
-//
-//						real dfx= c1o3 * (c1o1 / collFactorM - c1o2) *(2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
-//						real dfy = c1o3 * (c1o1 / collFactorM - c1o2) *(Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
-//						real dfz = c1o3 * (c1o1 / collFactorM - c1o2) *(Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
-//
-//						for (int iteration = 0; iteration < 5; iteration++) {
-//							mxxMyy = (mfcaa - dfx * dfx * c1o2) - (mfaca - dfy * dfy * c1o2);
-//							mxxMzz = (mfcaa - dfx * dfx * c1o2) - (mfaac - dfz * dfz * c1o2);
-//						}
-/////end fixed iteration
-//
-
-
-					//relax
-					mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-					mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-					mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-					mfabb += collFactorM * (-mfabb);
-					mfbab += collFactorM * (-mfbab);
-					mfbba += collFactorM * (-mfbba);
-
-//					mfhaaa = (phi[d000] < c1o2) ? mfaaa * rhoL / rhoH : mfaaa * rhoL / rhoH;
-					mxxMyyh += collFactorMInv * (-mxxMyyh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vy2 * dyuy);
-					mxxMzzh += collFactorMInv * (-mxxMzzh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vz2 * dzuz);
-
-					//mfhabb += collFactorMInv * (-mfhabb);
-					//mfhbab += collFactorMInv * (-mfhbab);
-					//mfhbba += collFactorMInv * (-mfhbba);
-
-					//mfhcaa = c1o3 * (mxxMyyh + mxxMzzh + mfhaaa);
-					//mfhaca = c1o3 * (-2. * mxxMyyh + mxxMzzh + mfhaaa);
-					//mfhaac = c1o3 * (mxxMyyh - 2. * mxxMzzh + mfhaaa);
-
-
-					//if (fabsf(mfaaa + (dxux + dyuy + dzuz) > 1e-9)){
-					//	std::cout << mfaaa <<" "<< (dxux + dyuy + dzuz)<< std::endl;
-					//}
-
-
-					////updated pressure
-					//mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling;
-					//mfaaa *= (c1o1-omegaDRho);// (mfaaa + (dxux + dyuy + dzuz)) * .5; // Pressure elimination as in standard velocity model
-								 //  mfaaa += (rho - c1o1) * (dxux + dyuy + dzuz);
-				
-					mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
-
-										// mxxPyyPzz += (mfaaa + mfaaaS) * c1o2;
-										//mfaaa = mfaaaS;
-										// linear combinations back
-					mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-					mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-					mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-					//3.
-					// linear combinations
-					real mxxyPyzz = mfcba + mfabc;
-					real mxxyMyzz = mfcba - mfabc;
-
-					real mxxzPyyz = mfcab + mfacb;
-					real mxxzMyyz = mfcab - mfacb;
-
-					real mxyyPxzz = mfbca + mfbac;
-					real mxyyMxzz = mfbca - mfbac;
-
-					//  mmfcaa += c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz- mfaaa);
-					//  mmfaca += c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz- mfaaa);
-					//  mmfaac += c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz- mfaaa);
-					//  mmfabb += mfabb;
-					//  mmfbab += mfbab;
-					//  mmfbba += mfbba;
-
-					//relax
-					wadjust = Oxyz + (1. - Oxyz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-					mfbbb += wadjust * (-mfbbb);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-					mxxyPyzz += wadjust * (-mxxyPyzz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-					mxxyMyzz += wadjust * (-mxxyMyzz);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-					mxxzPyyz += wadjust * (-mxxzPyyz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-					mxxzMyyz += wadjust * (-mxxzMyyz);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-					mxyyPxzz += wadjust * (-mxyyPxzz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-					mxyyMxzz += wadjust * (-mxyyMxzz);
-
-					// linear combinations back
-					mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-					mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-					mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-					mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-					mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-					mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-					//4.
-					CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-					CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-					CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-					CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc);
-					CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb);
-					CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb);
-
-					//5.
-					CUMbcc += O5 * (-CUMbcc);
-					CUMcbc += O5 * (-CUMcbc);
-					CUMccb += O5 * (-CUMccb);
-
-					//6.
-					CUMccc += O6 * (-CUMccc);
-
-					//back cumulants to central moments
-					//4.
-					//mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-					//mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-					//mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-					mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-					mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-					mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-					mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-					mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-					mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-
-					//5.
-					mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-					mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-					mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-					//6.
-					mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-						- 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-							+ 2. * (mfcaa * mfaca * mfaac)
-							+ 16. * mfbba * mfbab * mfabb)
-						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-
-					////////save central moments for the phase field
-					//real MMxx = mfcaa - c1o3 * mfaaa;
-					//real MMyy = mfaca - c1o3 * mfaaa;
-					//real MMzz = mfaac - c1o3 * mfaaa;
-					//real MMxy = mfbba;
-					//real MMxz = mfbab;
-					//real MMyz = mfabb;
-
-
-					////////////////////////////////////////////////////////////////////////////////////
-					//forcing
-					mfbaa = -mfbaa;// *(c1o1 - forcingBIAS) / forcingBIAS;
-					mfaba = -mfaba;// *(c1o1 - forcingBIAS) / forcingBIAS;
-					mfaab = -mfaab;// *(c1o1 - forcingBIAS) / forcingBIAS;
-
-
-					//mfhbaa = mfbaa;
-					//mfhaba = mfaba;
-					//mfhaab = mfaab;
-
-					//mfhcba = 0.;
-					//mfhabc = 0.;
-					//mfhcab = 0.;
-					//mfhacb = 0.;
-					//mfhbca = 0.;
-					//mfhbac = 0.;
-					//mfhbbb = 0.;
-
-					//real oMdrhoInv = (rhoRef - (mfhaaa )) / rhoRef;
-					//mfhcbb =/* CUMcbb + */((mfhcaa + c1o3) * mfhabb + 2. * mfhbba * mfhbab);
-					//mfhbcb =/* CUMbcb + */((mfhaca + c1o3) * mfhbab + 2. * mfhbba * mfhabb);
-					//mfhbbc =/* CUMbbc + */((mfhaac + c1o3) * mfhbba + 2. * mfhbab * mfhabb);
-
-					//mfhcca = /*CUMcca + */(mfhcaa * mfhaca + 2. * mfhbba * mfhbba) + c1o3 * (mfhcaa + mfhaca) * oMdrhoInv + c1o9 * (oMdrhoInv - c1o1) * oMdrhoInv;
-					//mfhcac = /*CUMcac + */(mfhcaa * mfhaac + 2. * mfhbab * mfhbab) + c1o3 * (mfhcaa + mfhaac) * oMdrhoInv + c1o9 * (oMdrhoInv - c1o1) * oMdrhoInv;
-					//mfhacc = /*CUMacc + */(mfhaac * mfhaca + 2. * mfhabb * mfhabb) + c1o3 * (mfhaac + mfhaca) * oMdrhoInv + c1o9 * (oMdrhoInv - c1o1) * oMdrhoInv;
-
-					////5.
-					//mfhbcc = /*CUMbcc +*/ (mfhaac * mfhbca + mfhaca * mfhbac + 4. * mfhabb * mfhbbb + 2. * (mfhbab * mfhacb + mfhbba * mfhabc)) + c1o3 * (mfhbca + mfhbac) * oMdrhoInv;
-					//mfhcbc = /*CUMcbc +*/ (mfhaac * mfhcba + mfhcaa * mfhabc + 4. * mfhbab * mfhbbb + 2. * (mfhabb * mfhcab + mfhbba * mfhbac)) + c1o3 * (mfhcba + mfhabc) * oMdrhoInv;
-					//mfhccb = /*CUMccb +*/ (mfhcaa * mfhacb + mfhaca * mfhcab + 4. * mfhbba * mfhbbb + 2. * (mfhbab * mfhbca + mfhabb * mfhcba)) + c1o3 * (mfhacb + mfhcab) * oMdrhoInv;
-
-					////6.
-					//mfhccc = /*CUMccc */- ((-4. * mfhbbb * mfhbbb
-					//	- (mfhcaa * mfhacc + mfhaca * mfhcac + mfhaac * mfhcca)
-					//	- 4. * (mfhabb * mfhcbb + mfhbac * mfhbca + mfhbba * mfhbbc)
-					//	- 2. * (mfhbca * mfhbac + mfhcba * mfhabc + mfhcab * mfhacb))
-					//	+ (4. * (mfhbab * mfhbab * mfhaca + mfhabb * mfhabb * mfhcaa + mfhbba * mfhbba * mfhaac)
-					//		+ 2. * (mfhcaa * mfhaca * mfhaac)
-					//		+ 16. * mfhbba * mfhbab * mfhabb)
-					//	- c1o3 * (mfhacc + mfhcac + mfhcca) * oMdrhoInv - c1o9 * oMdrhoInv * oMdrhoInv
-					//	- c1o9 * (mfhcaa + mfhaca + mfhaac) * oMdrhoInv * (1. - 2. * oMdrhoInv) - c1o27 * oMdrhoInv * oMdrhoInv * (-2. * oMdrhoInv)
-					//	+ (2. * (mfhbab * mfhbab + mfhabb * mfhabb + mfhbba * mfhbba)
-					//		+ (mfhaac * mfhaca + mfhaac * mfhcaa + mfhaca * mfhcaa)) * c2o3 * oMdrhoInv) - c1o27 * oMdrhoInv;
-
-
-
-
-
-					backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho);
-					backwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-					backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho);
-					backwardChimera(mfaab, mfbab, mfcab, vvx, vx2);
-					backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2);
-					backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2);
-					backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho);
-					backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-					backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9, oMdrho);
-
-					////////////////////////////////////////////////////////////////////////////////////
-					// Y - Dir
-					backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho);
-					backwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-					backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho);
-					backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2);
-					backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho);
-					backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-					backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho);
-
-					////////////////////////////////////////////////////////////////////////////////////
-					// Z - Dir
-					backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho);
-
-
-
-
-
-					//backwardInverseChimeraWithKincompressible(mfhaaa, mfhbaa, mfhcaa, vvx, vx2, c1o1, c1o1, oMdrhoInv);
-					//backwardChimera(mfhaba, mfhbba, mfhcba, vvx, vx2);
-					//backwardInverseChimeraWithKincompressible(mfhaca, mfhbca, mfhcca, vvx, vx2, c3o1, c1o3, oMdrhoInv);
-					//backwardChimera(mfhaab, mfhbab, mfhcab, vvx, vx2);
-					//backwardChimera(mfhabb, mfhbbb, mfhcbb, vvx, vx2);
-					//backwardChimera(mfhacb, mfhbcb, mfhccb, vvx, vx2);
-					//backwardInverseChimeraWithKincompressible(mfhaac, mfhbac, mfhcac, vvx, vx2, c3o1, c1o3, oMdrhoInv);
-					//backwardChimera(mfhabc, mfhbbc, mfhcbc, vvx, vx2);
-					//backwardInverseChimeraWithKincompressible(mfhacc, mfhbcc, mfhccc, vvx, vx2, c9o1, c1o9, oMdrhoInv);
-
-					//////////////////////////////////////////////////////////////////////////////////////
-					//// Y - Dir
-					//backwardInverseChimeraWithKincompressible(mfhaaa, mfhaba, mfhaca, vvy, vy2, c6o1, c1o6, oMdrhoInv);
-					//backwardChimera(mfhaab, mfhabb, mfhacb, vvy, vy2);
-					//backwardInverseChimeraWithKincompressible(mfhaac, mfhabc, mfhacc, vvy, vy2, c18o1, c1o18, oMdrhoInv);
-					//backwardInverseChimeraWithKincompressible(mfhbaa, mfhbba, mfhbca, vvy, vy2, c3o2, c2o3, oMdrhoInv);
-					//backwardChimera(mfhbab, mfhbbb, mfhbcb, vvy, vy2);
-					//backwardInverseChimeraWithKincompressible(mfhbac, mfhbbc, mfhbcc, vvy, vy2, c9o2, c2o9, oMdrhoInv);
-					//backwardInverseChimeraWithKincompressible(mfhcaa, mfhcba, mfhcca, vvy, vy2, c6o1, c1o6, oMdrhoInv);
-					//backwardChimera(mfhcab, mfhcbb, mfhccb, vvy, vy2);
-					//backwardInverseChimeraWithKincompressible(mfhcac, mfhcbc, mfhccc, vvy, vy2, c18o1, c1o18, oMdrhoInv);
-
-					//////////////////////////////////////////////////////////////////////////////////////
-					//// Z - Dir
-					//backwardInverseChimeraWithKincompressible(mfhaaa, mfhaab, mfhaac, vvz, vz2, c36o1, c1o36, oMdrhoInv);
-					//backwardInverseChimeraWithKincompressible(mfhaba, mfhabb, mfhabc, vvz, vz2, c9o1, c1o9, oMdrhoInv);
-					//backwardInverseChimeraWithKincompressible(mfhaca, mfhacb, mfhacc, vvz, vz2, c36o1, c1o36, oMdrhoInv);
-					//backwardInverseChimeraWithKincompressible(mfhbaa, mfhbab, mfhbac, vvz, vz2, c9o1, c1o9, oMdrhoInv);
-					//backwardInverseChimeraWithKincompressible(mfhbba, mfhbbb, mfhbbc, vvz, vz2, c9o4, c4o9, oMdrhoInv);
-					//backwardInverseChimeraWithKincompressible(mfhbca, mfhbcb, mfhbcc, vvz, vz2, c9o1, c1o9, oMdrhoInv);
-					//backwardInverseChimeraWithKincompressible(mfhcaa, mfhcab, mfhcac, vvz, vz2, c36o1, c1o36, oMdrhoInv);
-					//backwardInverseChimeraWithKincompressible(mfhcba, mfhcbb, mfhcbc, vvz, vz2, c9o1, c1o9, oMdrhoInv);
-					//backwardInverseChimeraWithKincompressible(mfhcca, mfhccb, mfhccc, vvz, vz2, c36o1, c1o36, oMdrhoInv);
-
-					/////////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//proof correctness
-					//////////////////////////////////////////////////////////////////////////
-					//#ifdef  PROOF_CORRECTNESS
-					real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-						+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-						+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-					//			   //real dif = fabs(drho - rho_post);
-					//               real dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post;
-					//#ifdef SINGLEPRECISION
-					//			   if (dif > 10.0E-7 || dif < -10.0E-7)
-					//#else
-					//			   if (dif > 10.0E-15 || dif < -10.0E-15)
-					//#endif
-					//			   {
-					//				   UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post)
-					//					   + " dif=" + UbSystem::toString(dif)
-					//					   + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-					//				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-					//				   //exit(EXIT_FAILURE);
-					//			   }
-					//#endif
-
-					if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post))
-						UB_THROW(UbException(UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) + ",phi=" + UbSystem::toString(phi[d000])));
-
-					//////////////////////////////////////////////////////////////////////////
-					//write distribution
-					//////////////////////////////////////////////////////////////////////////
-				//	if (phi[d000] < c1o2) {
-						(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;//* rho * c1o3;
-
-						(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3;
-
-
-						//(*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3) = mfhabb;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3) = mfhbab;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3) = mfhbba;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3) = mfhaab;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3) = mfhcab;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3) = mfhaba;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3) = mfhcba;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3) = mfhbaa;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3) = mfhbca;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3) = mfhaaa;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3) = mfhcaa;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3) = mfhaca;//* rho * c1o3;
-						//(*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfhcca;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3) = mfhcbb;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3) = mfhbcb;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p) = mfhbbc;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3) = mfhccb;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3) = mfhacb;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p) = mfhcbc;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p) = mfhabc;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p) = mfhbcc;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p) = mfhbac;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfhccc;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfhacc;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfhcac;//* rho * c1o3;
-						//(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p) = mfhaac;//* rho * c1o3;
-
-						//(*this->zeroDistributionsH2)(x1, x2, x3) = mfhbbb;// *rho* c1o3;
-				//	}
-
-
-				//	else {
-					//	(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)         = mfhabb;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)         = mfhbab;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)         = mfhbba;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)        = mfhaab;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)       = mfhcab;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)        = mfhaba;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)       = mfhcba;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)        = mfhbaa;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)       = mfhbca;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)       = mfhaaa;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)      = mfhcaa;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)      = mfhaca;//* rho * c1o3;
-					//	(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3)     = mfhcca;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfhcbb;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfhbcb;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfhbbc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfhccb;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfhacb;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfhcbc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfhabc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfhbcc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfhbac;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfhccc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfhacc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfhcac;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfhaac;//* rho * c1o3;
-
-					//	(*this->zeroDistributionsF)(x1, x2, x3) = mfhbbb;// *rho* c1o3;
-
-
-					//	(*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3)         = mfabb;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3)         = mfbab;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3)         = mfbba;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3)        = mfaab;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3)       = mfcab;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3)        = mfaba;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3)       = mfcba;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3)        = mfbaa;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3)       = mfbca;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3)       = mfaaa;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3)      = mfcaa;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3)      = mfaca;//* rho * c1o3;
-					//	(*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3)     = mfcca;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac;//* rho * c1o3;
-					//	(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac;//* rho * c1o3;
-
-					//	(*this->zeroDistributionsH2)(x1, x2, x3) = mfbbb;// *rho* c1o3;
-					//}
-																	// !Old Kernel
-/////////////////////  P H A S E - F I E L D   S O L V E R
-////////////////////////////////////////////
-/////CUMULANT PHASE-FIELD
-					real omegaD =1.0/( 3.0 * mob + 0.5);
-					{
-						mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-						mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-						mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-						mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-						mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-						mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-						mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-						mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-						mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-						mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-						mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-						mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-						mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-						mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-						mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-						mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-						mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-						mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-						mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-						mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-						mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-						mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-						mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-						mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// second component
-						real concentration =
-							((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-								(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-								((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-						////////////////////////////////////////////////////////////////////////////////////
-						real oneMinusRho = c1o1- concentration;
-
-						real cx =
-							((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-								(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-								(mfcbb - mfabb));
-						real cy =
-							((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-								(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-								(mfbcb - mfbab));
-						real cz =
-							((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-								(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-								(mfbbc - mfbba));
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// calculate the square of velocities for this lattice node
-						real cx2 = cx * cx;
-						real cy2 = cy * cy;
-						real cz2 = cz * cz;
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (6)-(14) in \ref
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-						forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-						forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-						forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-						forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-						forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-						forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - experimental Cumulant ... to be published ... hopefully
-						//!
-
-						// linearized orthogonalization of 3rd order central moments
-						real Mabc = mfabc - mfaba * c1o3;
-						real Mbca = mfbca - mfbaa * c1o3;
-						real Macb = mfacb - mfaab * c1o3;
-						real Mcba = mfcba - mfaba * c1o3;
-						real Mcab = mfcab - mfaab * c1o3;
-						real Mbac = mfbac - mfbaa * c1o3;
-						// linearized orthogonalization of 5th order central moments
-						real Mcbc = mfcbc - mfaba * c1o9;
-						real Mbcc = mfbcc - mfbaa * c1o9;
-						real Mccb = mfccb - mfaab * c1o9;
-
-						//25.03.2023 mixed normals
-						real MomX1 = vvx * concentration - cx;
-						real MomX2 = vvy * concentration - cy;
-						real MomX3 = vvz * concentration - cz;
-						real mixNormal = 0.5;
-
-						real MomXDenom = sqrt(MomX1 * MomX1 + MomX2 * MomX2 + MomX3 * MomX3)+1.0e-100;
-						real scaleNorm = (normX1 * MomX1 + normX2 * MomX2 + normX3 * MomX3) / MomXDenom;
-						scaleNorm = scaleNorm * scaleNorm;// *scaleNorm* scaleNorm;
-
-						normX1 = (normX1 * (c1o1 - mixNormal) + mixNormal * MomX1 / MomXDenom )* scaleNorm;
-						normX2 = (normX2 * (c1o1 - mixNormal) + mixNormal * MomX2 / MomXDenom )* scaleNorm;
-						normX3 = (normX3 * (c1o1 - mixNormal) + mixNormal * MomX3 / MomXDenom )* scaleNorm;
-
-						//31.05.2022 addaptive mobility
-						//omegaD = c1o1 + (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) / (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration)) + fabs((1.0 - concentration) * (concentration)) * c1o6 * oneOverInterfaceScale+1.0e-200);
-						//omegaD = c2o1 * (concentration * (concentration - c1o1)) / (-c6o1 * (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) + (concentration * (concentration - c1o1))+1.0e-200);
-						// collision of 1st order moments
-						cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-							normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
-						cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-							normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
-						cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-							normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
-
-						cx2 = cx * cx;
-						cy2 = cy * cy;
-						cz2 = cz * cz;
-
-						//// equilibration of 2nd order moments
-						mfbba = c0o1;
-						mfbab = c0o1;
-						mfabb = c0o1;
-
-						mfcaa = c1o3 * concentration;
-						mfaca = c1o3 * concentration;
-						mfaac = c1o3 * concentration;
-
-						//take second moment from fluid
-						//mfbba = concentration*MMxy;
-						//mfbab = concentration*MMxz;
-						//mfabb = concentration*MMyz;
-
-						//mfcaa = (c1o3+MMxx) * concentration;
-						//mfaca = (c1o3+MMyy) * concentration;
-						//mfaac = (c1o3+MMzz) * concentration;
-
-
-
-						// equilibration of 3rd order moments
-						Mabc = c0o1;
-						Mbca = c0o1;
-						Macb = c0o1;
-						Mcba = c0o1;
-						Mcab = c0o1;
-						Mbac = c0o1;
-						mfbbb = c0o1;
-
-						// from linearized orthogonalization 3rd order central moments to central moments
-						mfabc = Mabc + mfaba * c1o3;
-						mfbca = Mbca + mfbaa * c1o3;
-						mfacb = Macb + mfaab * c1o3;
-						mfcba = Mcba + mfaba * c1o3;
-						mfcab = Mcab + mfaab * c1o3;
-						mfbac = Mbac + mfbaa * c1o3;
-
-						// equilibration of 4th order moments
-						mfacc = c1o9 * concentration;
-						mfcac = c1o9 * concentration;
-						mfcca = c1o9 * concentration;
-
-						mfcbb = c0o1;
-						mfbcb = c0o1;
-						mfbbc = c0o1;
-
-						// equilibration of 5th order moments
-						Mcbc = c0o1;
-						Mbcc = c0o1;
-						Mccb = c0o1;
-
-						// from linearized orthogonalization 5th order central moments to central moments
-						mfcbc = Mcbc + mfaba * c1o9;
-						mfbcc = Mbcc + mfbaa * c1o9;
-						mfccb = Mccb + mfaab * c1o9;
-
-						// equilibration of 6th order moment
-						mfccc = c1o27 * concentration;
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (88)-(96) in
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-						backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-						backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-						backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-						backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-						backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-						backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-						(*this->localDistributionsH1)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-						(*this->localDistributionsH1)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-						(*this->localDistributionsH1)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-						(*this->localDistributionsH1)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-						(*this->localDistributionsH1)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-						(*this->localDistributionsH1)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-						(*this->localDistributionsH1)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-						(*this->localDistributionsH1)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-						(*this->localDistributionsH1)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-						(*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-						(*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb;
-
-
-
-
-					}
-				}
-			}
-		}
-	}
-	//Set multiphase BCs
-	//for (int x3 = minX3; x3 < maxX3; x3++) {
-	//	for (int x2 = minX2; x2 < maxX2; x2++) {
-	//		for (int x1 = minX1; x1 < maxX1; x1++) {
-	//			if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-	//				int x1p = x1 + 1;
-	//				int x2p = x2 + 1;
-	//				int x3p = x3 + 1;
-	//				findNeighbors(phaseField, x1, x2, x3);
-	//				if ((phi[d000] > c1o2) && (
-	//					(phi[dP00] <= c1o2) ||
-	//					(phi[dM00] <= c1o2) ||
-	//					(phi[d00P] <= c1o2) ||
-	//					(phi[d00M] <= c1o2) ||
-	//					(phi[d0M0] <= c1o2) ||
-	//					(phi[d0P0] <= c1o2) ||
-	//					(phi[dPP0] <= c1o2) ||
-	//					(phi[dPM0] <= c1o2) ||
-	//					(phi[dP0P] <= c1o2) ||
-	//					(phi[dP0M] <= c1o2) ||
-	//					(phi[dMP0] <= c1o2) ||
-	//					(phi[dMM0] <= c1o2) ||
-	//					(phi[dM0P] <= c1o2) ||
-	//					(phi[dM0M] <= c1o2) ||
-	//					(phi[d0PM] <= c1o2) ||
-	//					(phi[d0MM] <= c1o2) ||
-	//					(phi[d0PP] <= c1o2) ||
-	//					(phi[d0MP] <= c1o2) ||
-	//					(phi[dPPP] <= c1o2) ||
-	//					(phi[dPMP] <= c1o2) ||
-	//					(phi[dMPP] <= c1o2) ||
-	//					(phi[dMMP] <= c1o2) ||
-	//					(phi[dPPM] <= c1o2) ||
-	//					(phi[dPMM] <= c1o2) ||
-	//					(phi[dMPM] <= c1o2) ||
-	//					(phi[dMMM] <= c1o2)
-	//					)) {
-	//					//real mfabb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);//* rho * c1o3;
-	//					//real mfbab = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);//* rho * c1o3;
-	//					//real mfbba = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);//* rho * c1o3;
-	//					//real mfaab = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);//* rho * c1o3;
-	//					//real mfcab = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);//* rho * c1o3;
-	//					//real mfaba = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);//* rho * c1o3;
-	//					//real mfcba = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);//* rho * c1o3;
-	//					//real mfbaa = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);//* rho * c1o3;
-	//					//real mfbca = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);//* rho * c1o3;
-	//					//real mfaaa = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);//* rho * c1o3;
-	//					//real mfcaa = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);//* rho * c1o3;
-	//					//real mfaca = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);//* rho * c1o3;
-	//					//real mfcca = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);//* rho * c1o3;
-	//					//real mfcbb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);//* rho * c1o3;
-	//					//real mfbcb = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);//* rho * c1o3;
-	//					//real mfbbc = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);//* rho * c1o3;
-	//					//real mfccb = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);//* rho * c1o3;
-	//					//real mfacb = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);//* rho * c1o3;
-	//					//real mfcbc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);//* rho * c1o3;
-	//					//real mfabc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);//* rho * c1o3;
-	//					//real mfbcc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);//* rho * c1o3;
-	//					//real mfbac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);//* rho * c1o3;
-	//					//real mfccc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);//* rho * c1o3;
-	//					//real mfacc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);//* rho * c1o3;
-	//					//real mfcac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);//* rho * c1o3;
-	//					//real mfaac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);//* rho * c1o3;
-	//					//real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-	//					
-	//					real vx = (*vxNode)(x1, x2, x3);
-	//					real vy = (*vyNode)(x1, x2, x3);
-	//					real vz = (*vzNode)(x1, x2, x3);
-	//					SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions();
-	//					real ff[27];
-	//					distribution->getDistributionInv(ff, x1, x2 , x3 );
-
-	//					for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {
-	//						if ((phi[fdir] <= c1o2)) {
-	//							real rhoG = (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-	//							real ftemp= D3Q27System::getCompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz) + D3Q27System::getCompFeqForDirection(fdir, rhoG, vx, vy, vz);
-	//							real fBB;
-	//							fBB=distribution->getDistributionInvForDirection( x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir],fdir);
-	//							distribution->setPreCollisionDistributionForDirection(ftemp - ff[fdir], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
-	//							distribution->setPostCollisionDistributionForDirection(fBB-c6o1*D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-	//						}
-	//					}
-
-	//					//if ((phi[dP00] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 + 1, x2, x3);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(W, rhoG, vx,vy,vz )+ D3Q27System::getCompFeqForDirection(E, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_E, x1 + 1, x2, x3);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_E, x1+1, x2, x3)=ftemp-mfcbb;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)=fBB-c6o1*c2o27*(-vx);
-	//					//}
-	//					//if ((phi[dM00] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 - 1, x2, x3);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(E, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(W, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p-1, x2, x3);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p - 1, x2, x3) = ftemp - mfabb;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vx);
-	//					//}
-	//					//if ((phi[d0P0] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1, x2+1, x3);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(S, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(N, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2+1, x3);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2+1, x3) = ftemp - mfbcb;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = fBB - c6o1 * c2o27 * (-vy);
-	//					//}
-	//					//if ((phi[d0M0] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1, x2 - 1, x3);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(N, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(S, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p-1, x3);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p - 1, x3) = ftemp - mfbab;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vy);
-	//					//}
-	//					//if ((phi[d00P] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1, x2 , x3+1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(B, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(T, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3+1);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3+1) = ftemp - mfbbc;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = fBB - c6o1 * c2o27 * (-vz);
-	//					//}
-	//					//if ((phi[d00M] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1, x2, x3 - 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(T, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(B, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p-1);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p-1) = ftemp - mfbba;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vz);
-	//					//}
-	//					//
-	//					//if ((phi[dPP0] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 + 1, x2+1, x3);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(SW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(NE, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_NE, x1+1, x2+1, x3);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_NE, x1 + 1, x2 + 1, x3) = ftemp - mfccb;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = fBB - c6o1 * c1o54 * (-vx-vy);
-	//					//}
-	//					//if ((phi[dMM0] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(NE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(SW, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p-1, x2p-1, x3);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p - 1, x2p - 1, x3) = ftemp - mfaab;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = fBB - c6o1 * c1o54 * ( vx + vy);
-	//					//}
-	//					//if ((phi[dMP0] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(SE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(NW, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p-1, x2+1, x3);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_NW, x1p - 1, x2 + 1, x3) = ftemp - mfacb;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = fBB - c6o1 * c1o54 * ( vx - vy);
-	//					//}
-	//					//if ((phi[dPM0] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(NW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(SE, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1+1, x2p-1, x3);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1 + 1, x2p - 1, x3) = ftemp - mfcab;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = fBB - c6o1 * c1o54 * (-vx + vy);
-	//					//}
-	//					//if ((phi[dP0P] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 + 1, x2 , x3+1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TE, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TE, x1+1, x2, x3+1);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TE, x1 + 1, x2, x3 + 1) = ftemp - mfcbc;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = fBB - c6o1 * c1o54 * (-vx - vz);
-	//					//}
-	//					//if ((phi[dM0P] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 - 1, x2, x3 + 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TW, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p-1, x2, x3+1);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TW, x1p - 1, x2, x3 + 1) = ftemp - mfabc;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = fBB - c6o1 * c1o54 * ( vx - vz);
-	//					//}
-	//					//if ((phi[dP0M] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 + 1, x2, x3 - 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BE, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1+1, x2, x3p-1);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1 + 1, x2, x3p - 1) = ftemp - mfcba;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = fBB - c6o1 * c1o54 * (-vx + vz);
-	//					//}
-	//					//if ((phi[dM0M] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 - 1, x2, x3 - 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BW, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p-1, x2, x3p-1);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p - 1, x2, x3p - 1) = ftemp - mfaba;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = fBB - c6o1 * c1o54 * ( vx + vz);
-	//					//}
-	//					//if ((phi[d0PP] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1, x2+1, x3 + 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BS, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TN, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2+1, x3+1);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2 + 1, x3 + 1) = ftemp - mfbcc;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = fBB - c6o1 * c1o54 * (-vy - vz);
-	//					//}
-	//					//if ((phi[d0MP] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1, x2 - 1, x3 + 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BN, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TS, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p-1, x3+1);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p - 1, x3 + 1) = ftemp - mfbac;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = fBB - c6o1 * c1o54 * ( vy - vz);
-	//					//}
-	//					//if ((phi[d0PM] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1, x2 + 1, x3 - 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TS, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BN, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2+1, x3p-1);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2 + 1, x3p - 1) = ftemp - mfbca;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = fBB - c6o1 * c1o54 * (-vy + vz);
-	//					//}
-	//					//if ((phi[d0MM] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1, x2 - 1, x3 - 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TN, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BS, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p-1, x3p-1);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p - 1, x3p - 1) = ftemp - mfbaa;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = fBB - c6o1 * c1o54 * (-vy - vz);
-	//					//}
-
-	//					//if ((phi[dPPP] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1+1, x2 + 1, x3 + 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BSW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TNE, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1+1, x2+1, x3+1);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TNE, x1 + 1, x2 + 1, x3 + 1) = ftemp - mfccc;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = fBB - c6o1 * c1o216 * (-vx -vy - vz);
-	//					//}
-	//					//if ((phi[dMPP] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3 + 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BSE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TNW, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p-1, x2+1, x3+1);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p - 1, x2 + 1, x3 + 1) = ftemp - mfacc;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = fBB - c6o1 * c1o216 * ( vx - vy - vz);
-	//					//}
-	//					//if ((phi[dMMP] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3 + 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BNE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TSW, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p-1, x2p-1, x3+1);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p - 1, x2p - 1, x3 + 1) = ftemp - mfaac;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = fBB - c6o1 * c1o216 * (vx + vy - vz);
-	//					//}
-	//					//if ((phi[dPMP] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3 + 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(BNW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TSE, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1+1, x2p-1, x3+1);
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TSE, x1 + 1, x2p - 1, x3 + 1) = ftemp - mfcac;
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = fBB - c6o1 * c1o216 * (-vx + vy - vz);
-	//					//}
-	//					//if ((phi[dPMM] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3 - 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TNW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BSE, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1+1, x2p-1, x3p-1);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1+1, x2p-1, x3p-1) = ftemp - mfcaa;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = fBB - c6o1 * c1o216 * (-vx + vy + vz);
-	//					//}
-	//					//if ((phi[dMMM] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3 - 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TNE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BSW, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p-1, x2p-1, x3p-1);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p - 1, x2p - 1, x3p - 1) = ftemp - mfaaa;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = fBB - c6o1 * c1o216 * ( vx + vy + vz);
-	//					//}
-	//					//if ((phi[dMPM] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3 - 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TSE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BNW, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p-1, x2+1, x3p-1);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p - 1, x2 + 1, x3p - 1) = ftemp - mfaca;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = fBB - c6o1 * c1o216 * (vx - vy + vz);
-	//					//}
-	//					//if ((phi[dPPM] <= c1o2)) {
-	//					//	real rhoG = (*rhoNode)(x1 + 1, x2 + 1, x3 - 1);
-	//					//	real ftemp = D3Q27System::getCompFeqForDirection(TSW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BNE, rhoG, vx, vy, vz);
-	//					//	real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1+1, x2+1, x3p-1);
-	//					//	(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1 + 1, x2 + 1, x3p - 1) = ftemp - mfcca;
-	//					//	(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = fBB - c6o1 * c1o216 * (-vx - vy + vz);
-	//					//}
-
-
-
-
-	//				}
-	//			}
-	//		}
-	//	}
-	//}
-}
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////
-
-real MultiphaseScaleDistributionLBMKernel::gradX1_phi()
-{
-	using namespace D3Q27System;
-	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
-		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
-}
-
-real MultiphaseScaleDistributionLBMKernel::gradX2_phi()
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
-		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
-		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
-}
-
-real MultiphaseScaleDistributionLBMKernel::gradX3_phi()
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
-		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
-}
-
-real MultiphaseScaleDistributionLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV)
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
-		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) +
-		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00])));
-}
-
-real MultiphaseScaleDistributionLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV)
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM]))))
-		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) +
-		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0])));
-}
-
-real MultiphaseScaleDistributionLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV)
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
-		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) +
-		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M])));
-}
-
-real MultiphaseScaleDistributionLBMKernel::gradX1_phi2()
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
-		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
-}
-
-real MultiphaseScaleDistributionLBMKernel::gradX2_phi2()
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
-		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
-		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
-}
-
-real MultiphaseScaleDistributionLBMKernel::gradX3_phi2()
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
-		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
-}
-
-real MultiphaseScaleDistributionLBMKernel::nabla2_phi()
-{
-	using namespace D3Q27System;
-	real sum = 0.0;
-	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
-		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
-	sum += WEIGTH[d0PP] * (
-		(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
-		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
-		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
-		);
-	sum += WEIGTH[d00P] * (
-		((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
-		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
-		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
-		);
-
-	return 6.0 * sum;
-}
-
-real MultiphaseScaleDistributionLBMKernel::computeCurvature_phi()
-{
-    using namespace D3Q27System;
-    using namespace UbMath;
-
-    real phiX = gradX1_phi();
-    real phiY = gradX2_phi();
-    real phiZ = gradX3_phi();
-    real phiXX =
-        c4o9 * (phi[dP00] - c2o1 * phi[d000] + phi[dM00]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0]) + (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0])) + ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M]))) +
-                                                                      c1o36 * (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM]))));
-    real phiYY =
-        c4o9 * (phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0]) + (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0])) + ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM]))) +
-                                                                      c1o36 * (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM]))));
-    real phiZZ =
-        c4o9 * (phi[d00P] - c2o1 * phi[d000] + phi[d00M]) + (c1o9 * (((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M]) + (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M])) + ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM]))) +
-                                                                      c1o36 * (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM]))));
-    real phiXY = c1o4 * (c2o3 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]) + c1o6 * ((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM])));
-    real phiXZ = c1o4 * (c2o3 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]) + c1o6 * ((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP])));
-    real phiYZ = c1o4 * (c2o3 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]) + c1o6 * ((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM]) + (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM])));
-
-    // non isotropic FD (to be improved):
-    // real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi();
-    // real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi();
-    // real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi();
-
-    // real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00];
-    // real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0];
-    // real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]);
-    // real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]);
-    // real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]);
-    // real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]);
-    // real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2));
-
-	return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)+1e-200);
-}
-void MultiphaseScaleDistributionLBMKernel::computePhasefield()
-{
-	using namespace D3Q27System;
-	SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-	int minX1 = ghostLayerWidth;
-	int minX2 = ghostLayerWidth;
-	int minX3 = ghostLayerWidth;
-	int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-	int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-	int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-	//------------- Computing the phase-field ------------------
-	for (int x3 = minX3; x3 < maxX3; x3++) {
-		for (int x2 = minX2; x2 < maxX2; x2++) {
-			for (int x1 = minX1; x1 < maxX1; x1++) {
-				// if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-				{
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-					h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
-				}
-			}
-		}
-	}
-}
-
-void MultiphaseScaleDistributionLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		} else {
-            //if (bcArray->getBC(x1, x2, x3)->hasVelocityBoundaryFlag(D3Q27System::INVDIR[k]))
-            //    phi[k] = (*ph)(x1, x2, x3); // neutral wetting
-            //else
-                phi[k] = 0.0; // unwetting
-            //phi[k] = (*ph)(x1, x2, x3) * 0.7;
-		}
-	}
-}
-
-void MultiphaseScaleDistributionLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi2[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		}
-		else {
-            //if (bcArray->getBC(x1, x2, x3)->hasVelocityBoundaryFlag(D3Q27System::INVDIR[k]))
-            //    phi2[k] = (*ph)(x1, x2, x3); // neutral wetting
-            //else
-                phi2[k] = 0.0; // unwetting
-           // phi2[k] = (*ph)(x1, x2, x3) * 0.7;
-		}
-	}
-}
-
-void MultiphaseScaleDistributionLBMKernel::swapDistributions()
-{
-	LBMKernel::swapDistributions();
-	dataSet->getHdistributions()->swap();
-	dataSet->getH2distributions()->swap();
-}
-
-void MultiphaseScaleDistributionLBMKernel::initForcing()
-{
-	muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3);
-	muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3);
-	muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3);
-
-	muDeltaT = deltaT;
-
-	muForcingX1.DefineVar("dt", &muDeltaT);
-	muForcingX2.DefineVar("dt", &muDeltaT);
-	muForcingX3.DefineVar("dt", &muDeltaT);
-
-	muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
-
-	muForcingX1.DefineVar("nu", &muNu);
-	muForcingX2.DefineVar("nu", &muNu);
-	muForcingX3.DefineVar("nu", &muNu);
-
-	muForcingX1.DefineVar("rho",&muRho); 
-	muForcingX2.DefineVar("rho",&muRho); 
-	muForcingX3.DefineVar("rho",&muRho); 
-
-}
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h
deleted file mode 100644
index b5cdb07c446f9efbb0eefdd7994a418747fdef03..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h
+++ /dev/null
@@ -1,172 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseScaleDistributionLBMKernel.h
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseScaleDistributionLBMKernel_H
-#define MultiphaseScaleDistributionLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  M. Geier, K. Kutscher, Hesameddin Safari
-class MultiphaseScaleDistributionLBMKernel : public LBMKernel
-{
-public:
-    MultiphaseScaleDistributionLBMKernel();
-    virtual ~MultiphaseScaleDistributionLBMKernel(void) = default;
-    void calculate(int step) override;
-    SPtr<LBMKernel> clone() override;
-
-
-    ///refactor
-    //CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure;
-
-
-    double getCalculationTime() override { return .0; }
-protected:
-    virtual void initDataSet();
-    void swapDistributions() override;
-
-    void initForcing();
-
-    void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-    void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-
-    real f1[D3Q27System::ENDF+1];
-
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-    CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1;
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1;
-    CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH1;
-
-    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2;
-    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH2;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr p1Old;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseFieldOld;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; 
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr rhoNode;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vxNode;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vyNode;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vzNode;
-
-    real h  [D3Q27System::ENDF+1];
-    real h2[D3Q27System::ENDF + 1];
-    real g  [D3Q27System::ENDF+1];
-    real phi[D3Q27System::ENDF+1];
-    real phi2[D3Q27System::ENDF + 1];
-    real pr1[D3Q27System::ENDF+1];
-    real phi_cutoff[D3Q27System::ENDF+1];
-
-    real gradX1_phi();
-    real gradX2_phi();
-    real gradX3_phi();
-	real gradX1_rhoInv(real rhoL, real rhoDIV);
-	real gradX2_rhoInv(real rhoL, real rhoDIV);
-	real gradX3_rhoInv(real rhoL, real rhoDIV);
-    real gradX1_phi2();
-    real gradX2_phi2();
-    real gradX3_phi2();
-    void computePhasefield();
-    void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-    void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3);
-    bool isGas(real phiLim, real* phi, real* phi2);
-
-    real nabla2_phi();
-
-    real computeCurvature_phi();
-
-    mu::value_type muX1,muX2,muX3;
-    mu::value_type muDeltaT;
-    mu::value_type muNu;
-    mu::value_type muRho;
-    real forcingX1;
-    real forcingX2;
-    real forcingX3;
-};
-
-/// @brief The function computes a fancy expression
-/// @param phiLim 
-/// @param phi 
-/// @param phi2 
-/// @return 
-inline bool MultiphaseScaleDistributionLBMKernel::isGas(real phiLim, real* phi, real* phi2)
-{
-    using namespace vf::lbm::dir;
-    return (phi2[d000] <= phiLim) || ((phi[d000] <= phiLim) &&
-                        (
-						(phi[dP00] > phiLim) ||
-						(phi[dM00] > phiLim) ||
-						(phi[d00P] > phiLim) ||
-						(phi[d00M] > phiLim) ||
-						(phi[d0M0] > phiLim) ||
-						(phi[d0P0] > phiLim) ||
-						(phi[dPP0] > phiLim) ||
-						(phi[dPM0] > phiLim) ||
-						(phi[dP0P] > phiLim) ||
-						(phi[dP0M] > phiLim) ||
-						(phi[dMP0] > phiLim) ||
-						(phi[dMM0] > phiLim) ||
-						(phi[dM0P] > phiLim) ||
-						(phi[dM0M] > phiLim) ||
-						(phi[d0PM] > phiLim) ||
-						(phi[d0MM] > phiLim) ||
-						(phi[d0PP] > phiLim) ||
-						(phi[d0MP] > phiLim) ||
-						(phi[dPPP] > phiLim) ||
-						(phi[dPMP] > phiLim) ||
-						(phi[dMPP] > phiLim) ||
-						(phi[dMMP] > phiLim) ||
-						(phi[dPPM] > phiLim) ||
-						(phi[dPMM] > phiLim) ||
-						(phi[dMPM] > phiLim) ||
-						(phi[dMMM] > phiLim)
-						));
-}
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp
deleted file mode 100644
index 1f1bb536a19251ac1cabb2696035e6645cede09c..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp
+++ /dev/null
@@ -1,3083 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseScratchCumulantLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseScratchCumulantLBMKernel.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include <cmath>
-#include <iostream>
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseScratchCumulantLBMKernel::MultiphaseScratchCumulantLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseScratchCumulantLBMKernel::initDataSet()
-{
-    SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
-    SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); // For phase-field
-    SPtr<PhaseFieldArray3D> divU(new PhaseFieldArray3D(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0));
-    dataSet->setFdistributions(f);
-    dataSet->setHdistributions(h); // For phase-field
-    dataSet->setPhaseField(divU);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> MultiphaseScratchCumulantLBMKernel::clone()
-{
-    SPtr<LBMKernel> kernel(new MultiphaseScratchCumulantLBMKernel());
-    kernel->setNX(nx);
-    dynamicPointerCast<MultiphaseScratchCumulantLBMKernel>(kernel)->initDataSet();
-    kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-    kernel->setDensityRatio(this->densityRatio);
-    kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-    kernel->setContactAngle(this->contactAngle);
-    kernel->setPhiL(this->phiL);
-    kernel->setPhiH(this->phiH);
-    kernel->setPhaseFieldRelaxation(this->tauH);
-    kernel->setMobility(this->mob);
-
-    kernel->setBCSet(bcSet->clone(kernel));
-    kernel->setWithForcing(withForcing);
-    kernel->setForcingX1(muForcingX1);
-    kernel->setForcingX2(muForcingX2);
-    kernel->setForcingX3(muForcingX3);
-    kernel->setIndex(ix1, ix2, ix3);
-    kernel->setDeltaT(deltaT);
-
-    return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
- void  MultiphaseScratchCumulantLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	
-	real m2 = mfa + mfc;
-	real m1 = mfc - mfa;
-	real m0 = m2 + mfb;
-	mfa = m0;
-	m0 *= Kinverse;
-	m0 += oneMinusRho;
-	mfb = (m1 * Kinverse - m0 * vv) * K;
-	mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-
-////////////////////////////////////////////////////////////////////////////////
- void  MultiphaseScratchCumulantLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
-	real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
-	mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
-	mfa = m0;
-	mfb = m1;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
- void  MultiphaseScratchCumulantLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real m1 = (mfa + mfc) + mfb;
-	real m2 = mfc - mfa;
-	mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-	mfb = m2 - vv * m1;
-	mfa = m1;
-}
-
-
- void  MultiphaseScratchCumulantLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-    using namespace vf::basics::constant;
-
-	real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-	real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-	mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-	mfb = mb;
-	mfa = ma;
-}
-
-
-void MultiphaseScratchCumulantLBMKernel::calculate(int step)
-{
-    using namespace D3Q27System;
- //   using namespace UbMath;
-	using namespace vf::lbm::dir;
-	using namespace vf::basics::constant;
-
-    forcingX1 = 0.0;
-    forcingX2 = 0.0;
-    forcingX3 = 0.0;
-
-	real oneOverInterfaceScale = 1.0;// 1.0 / 3.0;
-    /////////////////////////////////////
-
-    localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-    nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-    zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-    localDistributionsH    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-    nonLocalDistributionsH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-    zeroDistributionsH     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-        CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField(
-            new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-        CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU(
-            new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
-
-
-		/////For velocity filter
-
-		//CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr velocityX(
-		//	new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
-		//CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr velocityY(
-		//	new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
-		//CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr velocityZ(
-		//	new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
-
-
-        for (int x3 = 0; x3 <= maxX3; x3++) {
-            for (int x2 = 0; x2 <= maxX2; x2++) {
-                for (int x1 = 0; x1 <= maxX1; x1++) {
-                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                        int x1p = x1 + 1;
-                        int x2p = x2 + 1;
-                        int x3p = x3 + 1;
-
-                        real mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                        real mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                        real mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                        real mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                        real mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                        real mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                        real mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                        real mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                        real mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                        real mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                        real mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        real mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        real mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        real mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                        real mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                        real mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                        real mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        real mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                        real mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        real mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                        real mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        real mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                        real mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        real mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        real mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        real mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        real mfbbb = (*this->zeroDistributionsH)(x1, x2, x3);
-                        (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
-                                                    (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-                                                    ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-                                                    (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-						//(*phaseField)(x1, x2, x3) = (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;
-
-						///Velocity filter
-
-
-						real rhoH = 1.0;
-						real rhoL = 1.0 / densityRatio;
-
-						real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-
-						real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH);
-
-						mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) / rho * c3o1;
-						mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) / rho * c3o1;
-						mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) / rho * c3o1;
-						mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) / rho * c3o1;
-						mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) / rho * c3o1;
-						mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) / rho * c3o1;
-						mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) / rho * c3o1;
-						mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) / rho * c3o1;
-						mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) / rho * c3o1;
-						mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) / rho * c3o1;
-						mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) / rho * c3o1;
-						mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) / rho * c3o1;
-						mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) / rho * c3o1;
-
-						mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) / rho * c3o1;
-						mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) / rho * c3o1;
-						mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) / rho * c3o1;
-						mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) / rho * c3o1;
-						mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) / rho * c3o1;
-						mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) / rho * c3o1;
-						mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) / rho * c3o1;
-						mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) / rho * c3o1;
-						mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) / rho * c3o1;
-						mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) / rho * c3o1;
-						mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) / rho * c3o1;
-						mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) / rho * c3o1;
-						mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) / rho * c3o1;
-
-						mfbbb = (*this->zeroDistributionsF)(x1, x2, x3) / rho * c3o1;
-
-						//(*velocityX)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-						//	(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-						//	(mfcbb - mfabb)) ;
-						//(*velocityY)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-						//	(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-						//	(mfbcb - mfbab)) ;
-						//(*velocityZ)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-						//	(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-						//	(mfbbc - mfbba)) ;
-
-
-
-
-                    }
-					else { (*phaseField)(x1, x2, x3) = 0; }
-                }
-            }
-        }
-
-        real collFactorM;
-        //LBMReal forcingTerm[D3Q27System::ENDF + 1];
-
-        for (int x3 = minX3; x3 < maxX3; x3++) {
-            for (int x2 = minX2; x2 < maxX2; x2++) {
-                for (int x1 = minX1; x1 < maxX1; x1++) {
-
-					//for (int x3 = minX3+1; x3 < maxX3-1; x3++) {
-					//	for (int x2 = minX2+1; x2 < maxX2-1; x2++) {
-					//		for (int x1 = minX1+1; x1 < maxX1-1; x1++) {
-                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                        int x1p = x1 + 1;
-                        int x2p = x2 + 1;
-                        int x3p = x3 + 1;
-
-                        //////////////////////////////////////////////////////////////////////////
-                        // Read distributions and phase field
-                        ////////////////////////////////////////////////////////////////////////////
-                        //////////////////////////////////////////////////////////////////////////
-
-                        // E   N  T
-                        // c   c  c
-                        //////////
-                        // W   S  B
-                        // a   a  a
-
-                        // Rest ist b
-
-                        // mfxyz
-                        // a - negative
-                        // b - null
-                        // c - positive
-
-                        // a b c
-                        //-1 0 1
-
-                        findNeighbors(phaseField, x1, x2, x3);
-						//// reading distributions here appears to be unnecessary!
-                        real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-                        real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-                        real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-                        real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-                        real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-                        real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-                        real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-                        real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-                        real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-                        real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-                        real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-                        real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-                        real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-                        real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-                        real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-                        real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-                        real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-                        real rhoH = 1.0;
-                        real rhoL = 1.0 / densityRatio;
-
-                        real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-                        real dX1_phi = gradX1_phi();
-                        real dX2_phi = gradX2_phi();
-                        real dX3_phi = gradX3_phi();
-
-						//LBMReal dX1_phi = 3.0*((
-						//	WEIGTH[TNE]*((((*phaseField)(x1 + 1, x2+1, x3+1)- (*phaseField)(x1 - 1, x2 - 1, x3 - 1))+ ((*phaseField)(x1 + 1, x2 - 1, x3 + 1) - (*phaseField)(x1 - 1, x2 + 1, x3 - 1)))
-						//	+ (((*phaseField)(x1 + 1, x2 - 1, x3 - 1) - (*phaseField)(x1 - 1, x2 + 1, x3 + 1)) + ((*phaseField)(x1 + 1, x2 + 1, x3 - 1) - (*phaseField)(x1 - 1, x2 - 1, x3 + 1))))
-						//	+WEIGTH[NE]* ((((*phaseField)(x1 + 1, x2 + 1, x3) - (*phaseField)(x1 - 1, x2 - 1, x3)) + ((*phaseField)(x1 + 1, x2 - 1, x3) - (*phaseField)(x1 - 1, x2 + 1, x3 )))
-						//	+ (((*phaseField)(x1 + 1, x2, x3 - 1) - (*phaseField)(x1 - 1, x2, x3 + 1)) + ((*phaseField)(x1 + 1, x2, x3 + 1) - (*phaseField)(x1 - 1, x2, x3 - 1)))))
-						//	+WEIGTH[N]*((*phaseField)(x1 + 1, x2, x3 ) - (*phaseField)(x1 - 1, x2, x3))
-						//	); 
-						////if (dX1_phi != NdX1_phi) {std::cout<<dX1_phi<<" "<< NdX1_phi<<std::endl;}
-
-						//LBMReal dX2_phi = 3.0 * ((
-						//	WEIGTH[TNE] * ((((*phaseField)(x1 + 1, x2 + 1, x3 + 1) - (*phaseField)(x1 - 1, x2 - 1, x3 - 1)) + ((*phaseField)(x1 -1, x2 + 1, x3 + 1) - (*phaseField)(x1 + 1, x2 - 1, x3 - 1)))
-						//	+ (((*phaseField)(x1 - 1, x2 + 1, x3 - 1) - (*phaseField)(x1 + 1, x2 - 1, x3 + 1)) + ((*phaseField)(x1 + 1, x2 + 1, x3 - 1) - (*phaseField)(x1 - 1, x2 - 1, x3 + 1))))
-						//	+ WEIGTH[NE] * ((((*phaseField)(x1 + 1, x2 + 1, x3) - (*phaseField)(x1 - 1, x2 - 1, x3)) + ((*phaseField)(x1 - 1, x2 + 1, x3) - (*phaseField)(x1 + 1, x2 - 1, x3)))
-						//		+ (((*phaseField)(x1, x2+1, x3 - 1) - (*phaseField)(x1 , x2-1, x3 + 1)) + ((*phaseField)(x1 , x2+1, x3 + 1) - (*phaseField)(x1 , x2-1, x3 - 1)))))
-						//	+ WEIGTH[N] * ((*phaseField)(x1 , x2+1, x3) - (*phaseField)(x1 , x2-1, x3))
-						//	);
-
-						//LBMReal dX3_phi = 3.0 * ((
-						//	WEIGTH[TNE] * ((((*phaseField)(x1 + 1, x2 + 1, x3 + 1) - (*phaseField)(x1 - 1, x2 - 1, x3 - 1)) + ((*phaseField)(x1 - 1, x2 + 1, x3 + 1) - (*phaseField)(x1 + 1, x2 - 1, x3 - 1)))
-						//	+ (((*phaseField)(x1 - 1, x2 - 1, x3 + 1) - (*phaseField)(x1 + 1, x2 + 1, x3 - 1)) + ((*phaseField)(x1 + 1, x2 - 1, x3 + 1) - (*phaseField)(x1 - 1, x2 + 1, x3 - 1))))
-						//	+ WEIGTH[NE] * ((((*phaseField)(x1 + 1, x2, x3+1) - (*phaseField)(x1 - 1, x2, x3-1)) + ((*phaseField)(x1 - 1, x2, x3+1) - (*phaseField)(x1 + 1, x2, x3-1)))
-						//		+ (((*phaseField)(x1, x2 - 1, x3 + 1) - (*phaseField)(x1, x2 + 1, x3 - 1)) + ((*phaseField)(x1, x2 + 1, x3 + 1) - (*phaseField)(x1, x2 - 1, x3 - 1)))))
-						//	+ WEIGTH[N] * ((*phaseField)(x1, x2, x3+1) - (*phaseField)(x1, x2, x3-1))
-						//	);
-
-						///////////////////////////////////////
-
-						//LBMReal dX1_phi2 = 1.5 * ((
-						//	WEIGTH[TNE] * ((((*phaseField)(x1 + 2, x2 + 2, x3 + 2) - (*phaseField)(x1 - 2, x2 - 2, x3 - 2)) + ((*phaseField)(x1 + 2, x2 - 2, x3 + 2) - (*phaseField)(x1 - 2, x2 + 2, x3 - 2)))
-						//		+ (((*phaseField)(x1 + 2, x2 - 2, x3 - 2) - (*phaseField)(x1 - 2, x2 + 2, x3 + 2)) + ((*phaseField)(x1 + 2, x2 + 2, x3 - 2) - (*phaseField)(x1 - 2, x2 - 2, x3 + 2))))
-						//	+ WEIGTH[NE] * ((((*phaseField)(x1 + 2, x2 + 2, x3) - (*phaseField)(x1 - 2, x2 - 2, x3)) + ((*phaseField)(x1 + 2, x2 - 2, x3) - (*phaseField)(x1 - 2, x2 + 2, x3)))
-						//		+ (((*phaseField)(x1 + 2, x2, x3 - 2) - (*phaseField)(x1 - 2, x2, x3 + 2)) + ((*phaseField)(x1 + 2, x2, x3 + 2) - (*phaseField)(x1 - 2, x2, x3 - 2)))))
-						//	+ WEIGTH[N] * ((*phaseField)(x1 + 2, x2, x3) - (*phaseField)(x1 - 2, x2, x3))
-						//	);
-						////if (dX1_phi != NdX1_phi) {std::cout<<dX1_phi<<" "<< NdX1_phi<<std::endl;}
-
-						//LBMReal dX2_phi2 = 1.5 * ((
-						//	WEIGTH[TNE] * ((((*phaseField)(x1 + 2, x2 + 2, x3 + 2) - (*phaseField)(x1 - 2, x2 - 2, x3 - 2)) + ((*phaseField)(x1 - 2, x2 + 2, x3 + 2) - (*phaseField)(x1 + 2, x2 - 2, x3 - 2)))
-						//		+ (((*phaseField)(x1 - 2, x2 + 2, x3 - 2) - (*phaseField)(x1 + 2, x2 - 2, x3 + 2)) + ((*phaseField)(x1 + 2, x2 + 2, x3 - 2) - (*phaseField)(x1 - 2, x2 - 2, x3 + 2))))
-						//	+ WEIGTH[NE] * ((((*phaseField)(x1 + 2, x2 + 2, x3) - (*phaseField)(x1 - 2, x2 - 2, x3)) + ((*phaseField)(x1 - 2, x2 + 2, x3) - (*phaseField)(x1 + 2, x2 - 2, x3)))
-						//		+ (((*phaseField)(x1, x2 + 2, x3 - 2) - (*phaseField)(x1, x2 - 2, x3 + 2)) + ((*phaseField)(x1, x2 + 2, x3 + 2) - (*phaseField)(x1, x2 - 2, x3 - 2)))))
-						//	+ WEIGTH[N] * ((*phaseField)(x1, x2 + 2, x3) - (*phaseField)(x1, x2 - 2, x3))
-						//	);
-
-						//LBMReal dX3_phi2 = 1.5 * ((
-						//	WEIGTH[TNE] * ((((*phaseField)(x1 + 2, x2 + 2, x3 + 2) - (*phaseField)(x1 - 2, x2 - 2, x3 - 2)) + ((*phaseField)(x1 - 2, x2 + 2, x3 + 2) - (*phaseField)(x1 + 2, x2 - 2, x3 - 2)))
-						//		+ (((*phaseField)(x1 - 2, x2 - 2, x3 + 2) - (*phaseField)(x1 + 2, x2 + 2, x3 - 2)) + ((*phaseField)(x1 + 2, x2 - 2, x3 + 2) - (*phaseField)(x1 - 2, x2 + 2, x3 - 2))))
-						//	+ WEIGTH[NE] * ((((*phaseField)(x1 + 2, x2, x3 + 2) - (*phaseField)(x1 - 2, x2, x3 - 2)) + ((*phaseField)(x1 - 2, x2, x3 + 2) - (*phaseField)(x1 + 2, x2, x3 - 2)))
-						//		+ (((*phaseField)(x1, x2 - 2, x3 + 2) - (*phaseField)(x1, x2 + 2, x3 - 2)) + ((*phaseField)(x1, x2 + 2, x3 + 2) - (*phaseField)(x1, x2 - 2, x3 - 2)))))
-						//	+ WEIGTH[N] * ((*phaseField)(x1, x2, x3 + 2) - (*phaseField)(x1, x2, x3 - 2))
-						//	);
-
-						//dX1_phi = (2*dX1_phi -1*dX1_phi2);// 2 * dX1_phi - dX1_phi2;
-						//dX2_phi = (2*dX2_phi -1*dX2_phi2);// 2 * dX2_phi - dX2_phi2;
-						//dX3_phi = (2*dX3_phi -1*dX3_phi2);// 2 * dX3_phi - dX3_phi2;
-
-
-                        real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9;
-                        real normX1 = dX1_phi/denom;
-						real normX2 = dX2_phi/denom;
-						real normX3 = dX3_phi/denom; 
-
-
-						///test for magnitude of gradient from phase indicator directly
-						//if (fabs((1.0 - phi[REST]) * (phi[REST]) */* c4*/ - (denom- 1e-9)) / denom > 1e-3 &&phi[REST]>0.4 &&phi[REST]<0.6) {
-						//	std::cout << (1.0 - phi[REST]) * (phi[REST])  // *c4 
-						//		<< " " << denom <<" "<< ((1.0 - phi[REST]) * (phi[REST]) * c4 ) / denom << std::endl;
-						//}
-						//dX1_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX1;
-						//dX2_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX2;
-						//dX3_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX3;
-
-						//denom = 1.0;
-
-						///!test
-
-						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
-						//collFactorM = phi[REST] - phiL < (phiH - phiL) * 0.05 ? collFactorG : collFactorL;
-
-                        real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-                        //----------- Calculating Macroscopic Values -------------
-                        real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
-
-						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();
-
-							real rho_m = 1.0 / densityRatio;
-							forcingX1 = forcingX1 * (rho - rho_m);
-							forcingX2 = forcingX2 * (rho - rho_m);
-							forcingX3 = forcingX3 * (rho - rho_m);
-						}
-                            			   ////Incompressible Kernal
-
-			    mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)/rho*c3o1;
-			    mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) / rho * c3o1;
-			    mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) / rho * c3o1;
-			    mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) / rho * c3o1;
-			    mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) / rho * c3o1;
-			    mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) / rho * c3o1;
-			    mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) / rho * c3o1;
-			    mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) / rho * c3o1;
-			    mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) / rho * c3o1;
-			    mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) / rho * c3o1;
-			    mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) / rho * c3o1;
-			    mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) / rho * c3o1;
-			    mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) / rho * c3o1;
-
-			    mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) / rho * c3o1;
-			    mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) / rho * c3o1;
-			    mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) / rho * c3o1;
-			    mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) / rho * c3o1;
-			    mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) / rho * c3o1;
-			    mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) / rho * c3o1;
-			    mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) / rho * c3o1;
-			    mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) / rho * c3o1;
-			    mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) / rho * c3o1;
-			    mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) / rho * c3o1;
-			    mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) / rho * c3o1;
-			    mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) / rho * c3o1;
-			    mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) / rho * c3o1;
-
-			    mfbbb = (*this->zeroDistributionsF)(x1, x2, x3) / rho * c3o1;
-
-
-
-
-
-			   real m0, m1, m2;
-			   real rhoRef=c1o1;
-
-			  //LBMReal
-			  // FIXME: warning: unused variable 'drho'
-//			   LBMReal drho = (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;
-
-			   real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-				   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-				   (mfcbb - mfabb))/rhoRef;
-			   real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-				   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-				   (mfbcb - mfbab))/rhoRef;
-			   real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-				   (mfbbc - mfbba))/rhoRef;
-
-			   ///surface tension force
-			   vvx += mu * dX1_phi*c1o2;
-			   vvy += mu * dX2_phi * c1o2;
-			   vvz += mu * dX3_phi * c1o2;
-			  
-
-
-			   ////Velocity filter 14.04.2021
-			  // LBMReal lap_vx, lap_vy,lap_vz;
-			  // {
-				 //  LBMReal sum = 0.0;
-				 //  sum += WEIGTH[TNE] * (((((*velocityX)(x1+1, x2+1, x3+1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2 - 1, x3 - 1) - (*velocityX)(x1, x2, x3))) + (((*velocityX)(x1 + 1, x2 + 1, x3 - 1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 + 1, x2 - 1, x3 + 1) - (*velocityX)(x1, x2, x3))))
-					//   + ((((*velocityX)(x1 + 1, x2 - 1, x3 + 1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2 + 1, x3 - 1) - (*velocityX)(x1, x2, x3))) + (((*velocityX)(x1 - 1, x2 + 1, x3 + 1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 + 1, x2 - 1, x3 - 1) - (*velocityX)(x1, x2, x3)))));
-				 //  sum += WEIGTH[TN] * (
-					//   ((((*velocityX)(x1 + 1, x2 + 1, x3 ) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2 - 1, x3) - (*velocityX)(x1, x2, x3))) + (((*velocityX)(x1 + 1, x2 - 1, x3) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2 + 1, x3) - (*velocityX)(x1, x2, x3))))
-					//   + ((((*velocityX)(x1 + 1, x2 , x3+1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2 , x3-1) - (*velocityX)(x1, x2, x3))) + (((*velocityX)(x1 +1 , x2 , x3-1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2, x3 + 1) - (*velocityX)(x1, x2, x3))))
-					//   + ((((*velocityX)(x1 , x2+1, x3 + 1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1, x2 - 1, x3 - 1) - (*velocityX)(x1, x2, x3))) + (((*velocityX)(x1, x2 + 1, x3 - 1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1, x2 - 1, x3 + 1) - (*velocityX)(x1, x2, x3))))
-					//   );
-				 //  sum += WEIGTH[T] * (
-					//   (((*velocityX)(x1-1, x2 , x3 ) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 + 1, x2, x3) - (*velocityX)(x1, x2, x3)))
-					//   + (((*velocityX)(x1 , x2-1, x3) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1, x2 + 1, x3) - (*velocityX)(x1, x2, x3)))
-					//   + (((*velocityX)(x1, x2, x3-1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1, x2, x3+1) - (*velocityX)(x1, x2, x3)))
-					//   );
-				 //  //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-				 //  //    sum += WEIGTH[k] * (phi[k] - phi[REST]);
-				 //  //}
-				 //   lap_vx=6.0 * sum;
-
-					//sum = 0.0;
-					//sum += WEIGTH[TNE] * (((((*velocityY)(x1 + 1, x2 + 1, x3 + 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2 - 1, x3 - 1) - (*velocityY)(x1, x2, x3))) + (((*velocityY)(x1 + 1, x2 + 1, x3 - 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 + 1, x2 - 1, x3 + 1) - (*velocityY)(x1, x2, x3))))
-					//	+ ((((*velocityY)(x1 + 1, x2 - 1, x3 + 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2 + 1, x3 - 1) - (*velocityY)(x1, x2, x3))) + (((*velocityY)(x1 - 1, x2 + 1, x3 + 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 + 1, x2 - 1, x3 - 1) - (*velocityY)(x1, x2, x3)))));
-					//sum += WEIGTH[TN] * (
-					//	((((*velocityY)(x1 + 1, x2 + 1, x3) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2 - 1, x3) - (*velocityY)(x1, x2, x3))) + (((*velocityY)(x1 + 1, x2 - 1, x3) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2 + 1, x3) - (*velocityY)(x1, x2, x3))))
-					//	+ ((((*velocityY)(x1 + 1, x2, x3 + 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2, x3 - 1) - (*velocityY)(x1, x2, x3))) + (((*velocityY)(x1 + 1, x2, x3 - 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2, x3 + 1) - (*velocityY)(x1, x2, x3))))
-					//	+ ((((*velocityY)(x1, x2 + 1, x3 + 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1, x2 - 1, x3 - 1) - (*velocityY)(x1, x2, x3))) + (((*velocityY)(x1, x2 + 1, x3 - 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1, x2 - 1, x3 + 1) - (*velocityY)(x1, x2, x3))))
-					//	);
-					//sum += WEIGTH[T] * (
-					//	(((*velocityY)(x1 - 1, x2, x3) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 + 1, x2, x3) - (*velocityY)(x1, x2, x3)))
-					//	+ (((*velocityY)(x1, x2 - 1, x3) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1, x2 + 1, x3) - (*velocityY)(x1, x2, x3)))
-					//	+ (((*velocityY)(x1, x2, x3 - 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1, x2, x3 + 1) - (*velocityY)(x1, x2, x3)))
-					//	);
-
-					//lap_vy = 6.0 * sum;
-
-					//sum = 0.0;
-					//sum += WEIGTH[TNE] * (((((*velocityZ)(x1 + 1, x2 + 1, x3 + 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2 - 1, x3 - 1) - (*velocityZ)(x1, x2, x3))) + (((*velocityZ)(x1 + 1, x2 + 1, x3 - 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 + 1, x2 - 1, x3 + 1) - (*velocityZ)(x1, x2, x3))))
-					//	+ ((((*velocityZ)(x1 + 1, x2 - 1, x3 + 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2 + 1, x3 - 1) - (*velocityZ)(x1, x2, x3))) + (((*velocityZ)(x1 - 1, x2 + 1, x3 + 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 + 1, x2 - 1, x3 - 1) - (*velocityZ)(x1, x2, x3)))));
-					//sum += WEIGTH[TN] * (
-					//	((((*velocityZ)(x1 + 1, x2 + 1, x3) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2 - 1, x3) - (*velocityZ)(x1, x2, x3))) + (((*velocityZ)(x1 + 1, x2 - 1, x3) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2 + 1, x3) - (*velocityZ)(x1, x2, x3))))
-					//	+ ((((*velocityZ)(x1 + 1, x2, x3 + 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2, x3 - 1) - (*velocityZ)(x1, x2, x3))) + (((*velocityZ)(x1 + 1, x2, x3 - 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2, x3 + 1) - (*velocityZ)(x1, x2, x3))))
-					//	+ ((((*velocityZ)(x1, x2 + 1, x3 + 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1, x2 - 1, x3 - 1) - (*velocityZ)(x1, x2, x3))) + (((*velocityZ)(x1, x2 + 1, x3 - 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1, x2 - 1, x3 + 1) - (*velocityZ)(x1, x2, x3))))
-					//	);
-					//sum += WEIGTH[T] * (
-					//	(((*velocityZ)(x1 - 1, x2, x3) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 + 1, x2, x3) - (*velocityZ)(x1, x2, x3)))
-					//	+ (((*velocityZ)(x1, x2 - 1, x3) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1, x2 + 1, x3) - (*velocityZ)(x1, x2, x3)))
-					//	+ (((*velocityZ)(x1, x2, x3 - 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1, x2, x3 + 1) - (*velocityZ)(x1, x2, x3)))
-					//	);
-
-					//lap_vz = 6.0 * sum;
-
-			  // }
-
-			  // if (lap_vx != 0.0) {
-				 //  lap_vx = lap_vx;
-			  // }
-
-			   ///----Classic source term 8.4.2021
-
-			   real vvxF, vvyF, vvzF;
-			   vvxF = vvx;//-2*c1o24 * lap_vx;// 
-			   vvyF = vvy;//-2*c1o24 * lap_vy;// 
-			   vvzF = vvz;//-2*c1o24 * lap_vz;// 
-
-//			   vvxF = 1.2* vvx- 0.2*0.5 * ((*velocityX)(x1 - 1, x2, x3) + (*velocityX)(x1 + 1, x2, x3));
-//			   vvyF = 1.2 *vvy- 0.2*0.5* ((*velocityY)(x1 , x2-1, x3) + (*velocityY)(x1 , x2+1, x3));
-//			   vvzF = 1.2 *vvz-0.2*0.5* ((*velocityZ)(x1 , x2, x3-1) + (*velocityZ)(x1 , x2, x3+1));
-			   //if (vvxF != vvx) {
-				  // vvxF = vvxF;
-			   //}
-			   real weightGrad =  1.0-denom*denom/(denom*denom+0.0001*0.001);
-			   real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX1;
-			   real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX2;
-			   real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX3;
-
-			   //dX1_phiF *= 1.2;
-			   //dX2_phiF *= 1.2;
-			   //dX3_phiF *= 1.2;
-
-			   //LBMReal gradFD = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-			   //LBMReal gradPhi = (1.0 - phi[REST]) * (phi[REST]);
-			   //gradPhi = (gradPhi > gradFD) ? gradPhi : gradFD;
-			   //dX1_phiF = gradPhi * normX1;
-				  // dX2_phiF = gradPhi * normX2;
-				  // dX3_phiF = gradPhi * normX3;
-
-			   real ux2;
-			   real uy2;
-			   real uz2;
-			   ux2 = vvxF * vvxF;
-			   uy2 = vvyF * vvyF;
-			   uz2 = vvzF * vvzF;
-			   real forcingTerm[D3Q27System::ENDF + 1];
-			   for (int dir = FSTARTDIR; dir <= FENDDIR; dir++) {
-				   real velProd = DX1[dir] * vvxF + DX2[dir] * vvyF + DX3[dir] * vvzF;
-				   real velSq1 = velProd * velProd;
-				   real gamma = WEIGTH[dir] * (1.0 + 3 * velProd + (4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)));
-
-				   real fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
-
-				   forcingTerm[dir] = 
-					   (-vvxF) * (fac1 * dX1_phiF ) +
-					   (-vvyF) * (fac1 * dX2_phiF ) +
-					   (-vvzF) * (fac1 * dX3_phiF ) +
-					   (DX1[dir]) * (fac1 * dX1_phiF ) +
-					   (DX2[dir]) * (fac1 * dX2_phiF ) +
-					   (DX3[dir]) * (fac1 * dX3_phiF );
-
-				   //LBMReal biDif= (-((*phaseField)(x1 + 2 * DX1[dir], x2 + 2 * DX2[dir], x3 + 2 * DX3[dir])) + 4 * ((*phaseField)(x1 + DX1[dir], x2 + DX2[dir], x3 + DX3[dir]))
-					  // - 3*((*phaseField)(x1 , x2 , x3 )) )*0.5;
-				   //LBMReal ceDif = (((*phaseField)(x1 + DX1[dir], x2 + DX2[dir], x3 + DX3[dir])) - ((*phaseField)(x1 - DX1[dir], x2 - DX2[dir], x3 - DX3[dir]))) * 0.5;
-
-				   ////ceDif = ((((*phaseField)(x1 + 2*DX1[dir], x2 + 2*DX2[dir], x3 + 2*DX3[dir])) - ((*phaseField)(x1 , x2 , x3 ))) * biDif < 0) ?
-					  //// (!bcArray->isSolid(x1+2*DX1[dir], x2+2*DX2[dir], x3+2*DX3[dir]) && !bcArray->isUndefined(x1 + 2 * DX1[dir], x2 + 2 * DX2[dir], x3 + 2 * DX3[dir]) && !bcArray->isSolid(x1 + DX1[dir], x2 +  DX2[dir], x3 +  DX3[dir]) && !bcArray->isUndefined(x1 +  DX1[dir], x2 + DX2[dir], x3 + DX3[dir]) && !bcArray->isSolid(x1 - DX1[dir], x2 - DX2[dir], x3 - DX3[dir]) && !bcArray->isUndefined(x1 - DX1[dir], x2 - DX2[dir], x3 - DX3[dir])) ?
-					  //// (biDif+ceDif)*0.5 : ceDif: ceDif;
-
-				   //ceDif = ((((*phaseField)(x1 + 2 * DX1[dir], x2 + 2 * DX2[dir], x3 + 2 * DX3[dir])) - ((*phaseField)(x1, x2, x3))) * biDif < 0) ? biDif : ceDif;
-
-				   //forcingTerm[dir] =
-					  // (-vvxF) * (fac1 * dX1_phiF) +
-					  // (-vvyF) * (fac1 * dX2_phiF) +
-					  // (-vvzF) * (fac1 * dX3_phiF) +
-					  // fac1 * ceDif;//(((*phaseField)(x1 + DX1[dir], x2 + DX2[dir], x3 + DX3[dir])) -  ((*phaseField)(x1 - DX1[dir], x2 - DX2[dir], x3 - DX3[dir]))) * 0.5;
-					  // //( -((*phaseField)(x1 +2* DX1[dir], x2 + 2 * DX2[dir], x3 + 2 * DX3[dir])) + 5*((*phaseField)(x1 + DX1[dir], x2 +  DX2[dir], x3 +  DX3[dir])) 
-						 //  //- 3*((*phaseField)(x1 , x2 , x3 )) - ((*phaseField)(x1 - DX1[dir], x2 - DX2[dir], x3 - DX3[dir])) )*0.25;
-
-
-			   }
-
-			   real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-			   real fac1 = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi;
-			   forcingTerm[d000] = (-vvxF) * (fac1 * dX1_phiF ) +
-				   (-vvyF) * (fac1 * dX2_phiF ) +
-				   (-vvzF) * (fac1 * dX3_phiF );
-
-			   ////////
-			  // LBMReal divAfterSource=
-			  //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
-			  //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfacb + 3.0 * (0.5 * forcingTerm[NW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfcbc + 3.0 * (0.5 * forcingTerm[TE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfabc + 3.0 * (0.5 * forcingTerm[TW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfbcc + 3.0 * (0.5 * forcingTerm[TN]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfbac + 3.0 * (0.5 * forcingTerm[TS]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfccc + 3.0 * (0.5 * forcingTerm[TNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfacc + 3.0 * (0.5 * forcingTerm[TNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfcac + 3.0 * (0.5 * forcingTerm[TSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfaac + 3.0 * (0.5 * forcingTerm[TSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfabb + 3.0 * (0.5 * forcingTerm[W]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
-			  //( mfbab + 3.0 * (0.5 * forcingTerm[S]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfbba + 3.0 * (0.5 * forcingTerm[B]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaab + 3.0 * (0.5 * forcingTerm[SW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfcab + 3.0 * (0.5 * forcingTerm[SE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfaba + 3.0 * (0.5 * forcingTerm[BW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcba + 3.0 * (0.5 * forcingTerm[BE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbaa + 3.0 * (0.5 * forcingTerm[BS]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbca + 3.0 * (0.5 * forcingTerm[BN]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaaa + 3.0 * (0.5 * forcingTerm[BSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcaa + 3.0 * (0.5 * forcingTerm[BSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaca + 3.0 * (0.5 * forcingTerm[BNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcca + 3.0 * (0.5 * forcingTerm[BNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbbb + 3.0 * (0.5 * forcingTerm[REST]) / rho)*((vvxF)*(vvxF)+(vvyF)*(vvyF)+(vvzF)*(vvzF)-1);
-
-			  // LBMReal divBeforeSource =
-				 //  (mfcbb)    * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) +
-				 //  (mfbcb)    * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfbbc)    * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfccb)   * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfacb)   * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfcbc)   * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfabc)   * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfbcc)   * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfbac)   * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfccc)  * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfacc)  * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfcac)  * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfaac)  * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfabb)    * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) +
-				 //  (mfbab)    * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfbba)    * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaab)   * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfcab)   * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfaba)   * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcba)   * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbaa)   * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbca)   * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaaa)  * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcaa)  * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaca)  * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcca)  * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbbb) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF) * (vvzF)-1);
-			   //if (divAfterSource - divBeforeSource != 0 && phi[REST]>0.0001 && phi[REST]<0.999) {
-				  // std::cout << phi[REST]<<" "<< divAfterSource << " " << divBeforeSource <<" "<< divAfterSource/ divBeforeSource << std::endl;
-			   //}
-
-			   //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) {
-				  // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource);
-
-				  // forcingTerm[dP00]	 *=scaleDiv;
-				  // forcingTerm[N]	 *=scaleDiv;
-				  // forcingTerm[T]	 *=scaleDiv;
-				  // forcingTerm[NE]	 *=scaleDiv;
-				  // forcingTerm[NW]	 *=scaleDiv;
-				  // forcingTerm[TE]	 *=scaleDiv;
-				  // forcingTerm[TW]	 *=scaleDiv;
-				  // forcingTerm[TN]	 *=scaleDiv;
-				  // forcingTerm[TS]	 *=scaleDiv;
-				  // forcingTerm[TNE]	 *=scaleDiv;
-				  // forcingTerm[TNW]	 *=scaleDiv;
-				  // forcingTerm[TSE]	 *=scaleDiv;
-				  // forcingTerm[TSW]	 *=scaleDiv;
-				  // forcingTerm[W]	 *=scaleDiv;
-				  // forcingTerm[S]	 *=scaleDiv;
-				  // forcingTerm[B]	 *=scaleDiv;
-				  // forcingTerm[SW]	 *=scaleDiv;
-				  // forcingTerm[SE]	 *=scaleDiv;
-				  // forcingTerm[BW]	 *=scaleDiv;
-				  // forcingTerm[BE]	 *=scaleDiv;
-				  // forcingTerm[BS]	 *=scaleDiv;
-				  // forcingTerm[BN]	 *=scaleDiv;
-				  // forcingTerm[BSW]	 *=scaleDiv;
-				  // forcingTerm[BSE]	 *=scaleDiv;
-				  // forcingTerm[BNW]	 *=scaleDiv;
-				  // forcingTerm[BNE]	 *=scaleDiv;
-				  // forcingTerm[REST] *=scaleDiv;
-			   //}
-			   ////////
-
-
-			   mfcbb +=3.0 * ( 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   mfbcb +=3.0 * ( 0.5 * forcingTerm[d0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   mfbbc +=3.0 * ( 0.5 * forcingTerm[d00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   mfccb +=3.0 * ( 0.5 * forcingTerm[dPP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   mfacb +=3.0 * ( 0.5 * forcingTerm[dMP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   mfcbc +=3.0 * ( 0.5 * forcingTerm[dP0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   mfabc +=3.0 * ( 0.5 * forcingTerm[dM0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   mfbcc +=3.0 * ( 0.5 * forcingTerm[d0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   mfbac +=3.0 * ( 0.5 * forcingTerm[d0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   mfccc +=3.0 * ( 0.5 * forcingTerm[dPPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   mfacc +=3.0 * ( 0.5 * forcingTerm[dMPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   mfcac +=3.0 * ( 0.5 * forcingTerm[dPMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   mfaac +=3.0 * ( 0.5 * forcingTerm[dMMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   mfabb +=3.0 * ( 0.5 * forcingTerm[dM00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   mfbab +=3.0 * ( 0.5 * forcingTerm[d0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   mfbba +=3.0 * ( 0.5 * forcingTerm[d00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   mfaab +=3.0 * ( 0.5 * forcingTerm[dMM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   mfcab +=3.0 * ( 0.5 * forcingTerm[dPM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   mfaba +=3.0 * ( 0.5 * forcingTerm[dM0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   mfcba +=3.0 * ( 0.5 * forcingTerm[dP0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   mfbaa +=3.0 * ( 0.5 * forcingTerm[d0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   mfbca +=3.0 * ( 0.5 * forcingTerm[d0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   mfaaa +=3.0 * ( 0.5 * forcingTerm[dMMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   mfcaa +=3.0 * ( 0.5 * forcingTerm[dPMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   mfaca +=3.0 * ( 0.5 * forcingTerm[dMPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   mfcca +=3.0 * ( 0.5 * forcingTerm[dPPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   mfbbb +=3.0 * ( 0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
-
-			   //--------------------------------------------------------
-
-
-			   //////////End classic source term
-			   //forcing 
-			   ///////////////////////////////////////////////////////////////////////////////////////////
-			   if (withForcing)
-			   {
-				   muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1);
-				   muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2);
-				   muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3);
-
-				   forcingX1 = muForcingX1.Eval();
-				   forcingX2 = muForcingX2.Eval();
-				   forcingX3 = muForcingX3.Eval();
-
-				   vvx += forcingX1 * deltaT * 0.5; // X
-				   vvy += forcingX2 * deltaT * 0.5; // Y
-				   vvz += forcingX3 * deltaT * 0.5; // Z
-			   }
-
-			   real vx2;
-			   real vy2;
-			   real vz2;
-			   vx2 = vvx * vvx;
-			   vy2 = vvy * vvy;
-			   vz2 = vvz * vvz;
-
-			   ///////
-
-
-
-			   ///////////////////////////////////////////////////////////////////////////////////////////               
-			   real 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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
-
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   real wadjust;
-			   real qudricLimit = 0.01;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //Hin
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   m2 = mfaaa + mfaac;
-			   m1 = mfaac - mfaaa;
-			   m0 = m2 + mfaab;
-			   mfaaa = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfaab = m1 - m0 * vvz;
-			   mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaba + mfabc;
-			   m1 = mfabc - mfaba;
-			   m0 = m2 + mfabb;
-			   mfaba = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfabb = m1 - m0 * vvz;
-			   mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaca + mfacc;
-			   m1 = mfacc - mfaca;
-			   m0 = m2 + mfacb;
-			   mfaca = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfacb = m1 - m0 * vvz;
-			   mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbaa + mfbac;
-			   m1 = mfbac - mfbaa;
-			   m0 = m2 + mfbab;
-			   mfbaa = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbab = m1 - m0 * vvz;
-			   mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbba + mfbbc;
-			   m1 = mfbbc - mfbba;
-			   m0 = m2 + mfbbb;
-			   mfbba = m0;
-			   m0 += c4o9 * oMdrho;
-			   mfbbb = m1 - m0 * vvz;
-			   mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbca + mfbcc;
-			   m1 = mfbcc - mfbca;
-			   m0 = m2 + mfbcb;
-			   mfbca = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbcb = m1 - m0 * vvz;
-			   mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcaa + mfcac;
-			   m1 = mfcac - mfcaa;
-			   m0 = m2 + mfcab;
-			   mfcaa = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfcab = m1 - m0 * vvz;
-			   mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcba + mfcbc;
-			   m1 = mfcbc - mfcba;
-			   m0 = m2 + mfcbb;
-			   mfcba = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfcbb = m1 - m0 * vvz;
-			   mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcca + mfccc;
-			   m1 = mfccc - mfcca;
-			   m0 = m2 + mfccb;
-			   mfcca = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfccb = m1 - m0 * vvz;
-			   mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   m2 = mfaaa + mfaca;
-			   m1 = mfaca - mfaaa;
-			   m0 = m2 + mfaba;
-			   mfaaa = m0;
-			   m0 += c1o6 * oMdrho;
-			   mfaba = m1 - m0 * vvy;
-			   mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaab + mfacb;
-			   m1 = mfacb - mfaab;
-			   m0 = m2 + mfabb;
-			   mfaab = m0;
-			   mfabb = m1 - m0 * vvy;
-			   mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaac + mfacc;
-			   m1 = mfacc - mfaac;
-			   m0 = m2 + mfabc;
-			   mfaac = m0;
-			   m0 += c1o18 * oMdrho;
-			   mfabc = m1 - m0 * vvy;
-			   mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbaa + mfbca;
-			   m1 = mfbca - mfbaa;
-			   m0 = m2 + mfbba;
-			   mfbaa = m0;
-			   m0 += c2o3 * oMdrho;
-			   mfbba = m1 - m0 * vvy;
-			   mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbab + mfbcb;
-			   m1 = mfbcb - mfbab;
-			   m0 = m2 + mfbbb;
-			   mfbab = m0;
-			   mfbbb = m1 - m0 * vvy;
-			   mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbac + mfbcc;
-			   m1 = mfbcc - mfbac;
-			   m0 = m2 + mfbbc;
-			   mfbac = m0;
-			   m0 += c2o9 * oMdrho;
-			   mfbbc = m1 - m0 * vvy;
-			   mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcaa + mfcca;
-			   m1 = mfcca - mfcaa;
-			   m0 = m2 + mfcba;
-			   mfcaa = m0;
-			   m0 += c1o6 * oMdrho;
-			   mfcba = m1 - m0 * vvy;
-			   mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcab + mfccb;
-			   m1 = mfccb - mfcab;
-			   m0 = m2 + mfcbb;
-			   mfcab = m0;
-			   mfcbb = m1 - m0 * vvy;
-			   mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcac + mfccc;
-			   m1 = mfccc - mfcac;
-			   m0 = m2 + mfcbc;
-			   mfcac = m0;
-			   m0 += c1o18 * oMdrho;
-			   mfcbc = m1 - m0 * vvy;
-			   mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   m2 = mfaaa + mfcaa;
-			   m1 = mfcaa - mfaaa;
-			   m0 = m2 + mfbaa;
-			   mfaaa = m0;
-			   m0 += 1. * oMdrho;
-			   mfbaa = m1 - m0 * vvx;
-			   mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaba + mfcba;
-			   m1 = mfcba - mfaba;
-			   m0 = m2 + mfbba;
-			   mfaba = m0;
-			   mfbba = m1 - m0 * vvx;
-			   mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaca + mfcca;
-			   m1 = mfcca - mfaca;
-			   m0 = m2 + mfbca;
-			   mfaca = m0;
-			   m0 += c1o3 * oMdrho;
-			   mfbca = m1 - m0 * vvx;
-			   mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaab + mfcab;
-			   m1 = mfcab - mfaab;
-			   m0 = m2 + mfbab;
-			   mfaab = m0;
-			   mfbab = m1 - m0 * vvx;
-			   mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfabb + mfcbb;
-			   m1 = mfcbb - mfabb;
-			   m0 = m2 + mfbbb;
-			   mfabb = m0;
-			   mfbbb = m1 - m0 * vvx;
-			   mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfacb + mfccb;
-			   m1 = mfccb - mfacb;
-			   m0 = m2 + mfbcb;
-			   mfacb = m0;
-			   mfbcb = m1 - m0 * vvx;
-			   mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaac + mfcac;
-			   m1 = mfcac - mfaac;
-			   m0 = m2 + mfbac;
-			   mfaac = m0;
-			   m0 += c1o3 * oMdrho;
-			   mfbac = m1 - m0 * vvx;
-			   mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfabc + mfcbc;
-			   m1 = mfcbc - mfabc;
-			   m0 = m2 + mfbbc;
-			   mfabc = m0;
-			   mfbbc = m1 - m0 * vvx;
-			   mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfacc + mfccc;
-			   m1 = mfccc - mfacc;
-			   m0 = m2 + mfbcc;
-			   mfacc = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbcc = m1 - m0 * vvx;
-			   mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Cumulants
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-			   //LBMReal OxyyPxzz = 2.0 - collFactorM;// 1.;//-s9;//2+s9;//
-			   //LBMReal OxyyMxzz  = 2.0 - collFactorM;// 1.;//2+s9;//
-			   real O4 = 1.0;//collFactorM;// 1.;
-			   real O5 = 1.;
-			   real O6 = 1.;
-
-
-			   /////fourth order parameters; here only for test. Move out of loop!
-
-			   real OxyyPxzz =  8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-			   real OxyyMxzz =  8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-			   real Oxyz =  24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-			   real A =  (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
-			   real BB =   (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-
-
-			   //Cum 4.
-			   //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-			   //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-			   //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-			   real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-			   real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-			   real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-			   real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-			   real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-			   real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-
-			   //Cum 5.
-			   real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-			   real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-			   real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-			   //Cum 6.
-			   real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-				   - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-				   - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-				   - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-				   + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-					   + 2. * (mfcaa * mfaca * mfaac)
-					   + 16. * mfbba * mfbab * mfabb)
-				   - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-				   - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-				   + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-					   + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-			   //2.
-			   // linear combinations
-			   real mxxPyyPzz = mfcaa + mfaca + mfaac;
-				mxxPyyPzz-=mfaaa;//12.03.21 shifted by mfaaa
-			   real mxxMyy = mfcaa - mfaca;
-			   real mxxMzz = mfcaa - mfaac;
-
-			   //applying phase field gradients first part:
-			  // mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz);
-
-			   //17.03.2021 attempt for statililization by assymptotically vanishing bias
-			   //LBMReal correctionScaling = rhoToPhi /rho;// +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000;
-			   //mxxPyyPzz += (1.0/3.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz)* correctionScaling; // As in Hesam's code
-			   //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy)* correctionScaling;
-			   //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling;
-			   //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling;
-			   //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling;
-			   //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling;
-
-
-			   //14.04.2021 filtered velocity
-
-			   //LBMReal correctionScaling =  rhoToPhi / rho;// +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000;
-			   //mxxPyyPzz += (1.0 / 3.0) * (dX1_phi * vvxF + dX2_phi * vvyF + dX3_phi * vvzF) * correctionScaling; // As in Hesam's code
-			   //mxxMyy += c1o3 * (dX1_phi * vvxF - dX2_phi * vvyF) * correctionScaling;
-			   //mxxMzz += c1o3 * (dX1_phi * vvxF - dX3_phi * vvzF) * correctionScaling;
-			   //mfabb += c1o6 * (dX2_phi * vvzF + dX3_phi * vvyF) * correctionScaling;
-			   //mfbab += c1o6 * (dX1_phi * vvzF + dX3_phi * vvxF) * correctionScaling;
-			   //mfbba += c1o6 * (dX1_phi * vvyF + dX2_phi * vvxF) * correctionScaling;
-
-
-			   real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
-			   real dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
-			   real dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
-
-			   real Dxy = -c3o1 * collFactorM * mfbba;
-			   real Dxz = -c3o1 * collFactorM * mfbab;
-			   real Dyz = -c3o1 * collFactorM * mfabb;
-
-			   ////relax unfiltered
-			   //! divergenceFilter 10.05.2021
-			   real divMag= (1.0 - phi[d000]) * (phi[d000])*10*5*sqrt(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))));
-			  // LBMReal divMag = 500 *500* 50*(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))))* (fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))));
-			   //LBMReal divMag = (dX1_phi * dxux) > 0 ? (dX1_phi * dxux) : 0;
-			   //divMag += (dX2_phi * dyuy) > 0 ? (dX2_phi * dyuy) : 0;
-			   //divMag += (dX3_phi * dzuz) > 0 ? (dX3_phi * dzuz) : 0;
-			   //divMag *= 5000;
-			   //divMag+= denom * 10 * 5 * sqrt(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))));
-			   //LBMReal divMag = 5000 * (fabs(dX1_phi * dxux)+fabs(dX2_phi * dyuy)+fabs(dX3_phi * dzuz));
-			   collFactorM = collFactorM / (1.0 + 3.0 * divMag);
-
-			   collFactorM = (collFactorM > 1.0) ? collFactorM : 1.0;
-
-
-			   mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-			   mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-			   mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-			   mfabb += collFactorM * (-mfabb);
-			   mfbab += collFactorM * (-mfbab);
-			   mfbba += collFactorM * (-mfbba);
-
-
-			   //relax filtered
-			   //LBMReal interfaceFilter=0.001;
-			   //LBMReal interfaceFactor = c1;// (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-
-			   //mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-			   //
-			   //wadjust = collFactorM + (1. - collFactorM) * fabs(mxxMyy) / (fabs(mxxMyy) * interfaceFactor + interfaceFilter)* interfaceFactor;
-			   //mxxMyy += wadjust * (-mxxMyy);// -3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-			   //wadjust = collFactorM + (1. - collFactorM) * fabs(mxxMzz) / (fabs(mxxMzz) * interfaceFactor + interfaceFilter) * interfaceFactor;
-			   //mxxMzz += wadjust * (-mxxMzz);// -3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-			   //wadjust = collFactorM + (1. - collFactorM) * fabs(mfabb) / (fabs(mfabb) * interfaceFactor + interfaceFilter) * interfaceFactor;
-			   //mfabb += wadjust * (-mfabb);
-			   //wadjust = collFactorM + (1. - collFactorM) * fabs(mfbab) / (fabs(mfbab) * interfaceFactor + interfaceFilter) * interfaceFactor;
-			   //mfbab += wadjust * (-mfbab);
-			   //wadjust = collFactorM + (1. - collFactorM) * fabs(mfbba) / (fabs(mfbba) * interfaceFactor + interfaceFilter) * interfaceFactor;
-			   //mfbba += wadjust * (-mfbba);
-
-			   //applying phase field gradients second part:
-			   //mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz);
-			   //mxxPyyPzz += (1.0 / 3.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; // As in Hesam's code
-			   //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling;
-			   //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling;
-			   //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling;
-			   //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling;
-			   //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling;
-
-
-			   //////updated pressure
-			   //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling;
-
-
-			   //mxxPyyPzz += (1.0 / 3.0) * (dX1_phi * vvxF + dX2_phi * vvyF + dX3_phi * vvzF) * correctionScaling; // As in Hesam's code
-			   //mxxMyy += c1o3 * (dX1_phi * vvxF - dX2_phi * vvyF) * correctionScaling;
-			   //mxxMzz += c1o3 * (dX1_phi * vvxF - dX3_phi * vvzF) * correctionScaling;
-			   //mfabb += c1o6 * (dX2_phi * vvzF + dX3_phi * vvyF) * correctionScaling;
-			   //mfbab += c1o6 * (dX1_phi * vvzF + dX3_phi * vvxF) * correctionScaling;
-			   //mfbba += c1o6 * (dX1_phi * vvyF + dX2_phi * vvxF) * correctionScaling;
-
-
-			   //////updated pressure
-			   //mfaaa += (dX1_phi * vvxF + dX2_phi * vvyF + dX3_phi * vvzF) * correctionScaling;
-
-
-			   mxxPyyPzz += mfaaa;//12.03.21 shifted by mfaaa
-			 //  mxxPyyPzz = mfaaa; //12.03.21 reguarized pressure !?
-			   // linear combinations back
-			   mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-			   mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-			   mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-			   //3.
-			   // linear combinations
-			   real mxxyPyzz = mfcba + mfabc;
-			   real mxxyMyzz = mfcba - mfabc;
-
-			   real mxxzPyyz = mfcab + mfacb;
-			   real mxxzMyyz = mfcab - mfacb;
-
-			   real mxyyPxzz = mfbca + mfbac;
-			   real mxyyMxzz = mfbca - mfbac;
-
-			   //relax
-			   wadjust = Oxyz + (1. - Oxyz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-			   mfbbb += wadjust * (-mfbbb);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-			   mxxyPyzz += wadjust * (-mxxyPyzz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-			   mxxyMyzz += wadjust * (-mxxyMyzz);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-			   mxxzPyyz += wadjust * (-mxxzPyyz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-			   mxxzMyyz += wadjust * (-mxxzMyyz);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-			   mxyyPxzz += wadjust * (-mxyyPxzz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-			   mxyyMxzz += wadjust * (-mxyyMxzz);
-
-			   // linear combinations back
-			   mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-			   mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-			   mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-			   mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-			   mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-			   mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-			   //4.
-			   //CUMacc += O4 * (-CUMacc);
-			   //CUMcac += O4 * (-CUMcac);
-			   //CUMcca += O4 * (-CUMcca);
-
-			   //CUMbbc += O4 * (-CUMbbc);
-			   //CUMbcb += O4 * (-CUMbcb);
-			   //CUMcbb += O4 * (-CUMcbb);
-
-
-			   CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-			   CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-			   CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-			   CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc);
-			   CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb);
-			   CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb);
-
-
-
-
-			   //CUMacc -= (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A ;
-			   //CUMcac -= (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A ;
-			   //CUMcca -= (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A ;
-			   //CUMbbc -= (one / collFactorM - c1o2) * Dxy * c1o3 * B ;
-			   //CUMbcb -= (one / collFactorM - c1o2) * Dxz * c1o3 * B ;
-			   //CUMcbb -= (one / collFactorM - c1o2) * Dyz * c1o3 * B ;
-
-			   //wadjust = O4 + (1. - O4) * fabs(CUMacc) / (fabs(CUMacc) + qudricLimit);
-			   //CUMacc += wadjust * (-CUMacc);
-			   //wadjust = O4 + (1. - O4) * fabs(CUMcac) / (fabs(CUMcac) + qudricLimit);
-			   //CUMcac += wadjust * (-CUMcac);
-			   //wadjust = O4 + (1. - O4) * fabs(CUMcca) / (fabs(CUMcca) + qudricLimit);
-			   //CUMcca += wadjust * (-CUMcca);
-			   //wadjust = O4 + (1. - O4) * fabs(CUMbbc) / (fabs(CUMbbc) + qudricLimit);
-			   //CUMbbc += wadjust * (-CUMbbc);
-			   //wadjust = O4 + (1. - O4) * fabs(CUMbcb) / (fabs(CUMbcb) + qudricLimit);
-			   //CUMbcb += wadjust * (-CUMbcb);
-			   //wadjust = O4 + (1. - O4) * fabs(CUMcbb) / (fabs(CUMcbb) + qudricLimit);
-			   //CUMcbb += wadjust * (-CUMcbb);
-
-
-
-
-
-
-			   //CUMacc += (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A;
-			   //CUMcac += (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A;
-			   //CUMcca += (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A;
-			   //CUMbbc += (one / collFactorM - c1o2) * Dxy * c1o3 * B;
-			   //CUMbcb += (one / collFactorM - c1o2) * Dxz * c1o3 * B;
-			   //CUMcbb += (one / collFactorM - c1o2) * Dyz * c1o3 * B;
-
-			   //5.
-			   CUMbcc += O5 * (-CUMbcc);
-			   CUMcbc += O5 * (-CUMcbc);
-			   CUMccb += O5 * (-CUMccb);
-
-
-			   //wadjust = O5 + (1. - O5) * fabs(CUMbcc) / (fabs(CUMbcc) + qudricLimit);
-			   //CUMbcc += wadjust * (-CUMbcc);
-			   //wadjust = O5 + (1. - O5) * fabs(CUMcbc) / (fabs(CUMcbc) + qudricLimit);
-			   //CUMbcc += wadjust * (-CUMcbc);
-			   //wadjust = O5 + (1. - O5) * fabs(CUMccb) / (fabs(CUMccb) + qudricLimit);
-			   //CUMbcc += wadjust * (-CUMccb);
-
-
-			   //6.
-			   CUMccc += O6 * (-CUMccc);
-
-			   //back cumulants to central moments
-			   //4.
-			   //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-			   //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-			   //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-			   mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-			   mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-			   mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-			   mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-			   mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-			   mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-
-			   //5.
-			   mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-			   mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-			   mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-			   //6.
-			   mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-				   - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-				   - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-				   - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-				   + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-					   + 2. * (mfcaa * mfaca * mfaac)
-					   + 16. * mfbba * mfbab * mfabb)
-				   - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-				   - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-				   + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-					   + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-
-			   ////////
-
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //forcing
-			   mfbaa = -mfbaa;
-			   mfaba = -mfaba;
-			   mfaab = -mfaab;
-			   //////////////////////////////////////////////////////////////////////////////////////
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //back
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
-			   m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfaaa = m0;
-			   mfaab = m1;
-			   mfaac = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-			   m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
-			   m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-			   mfaba = m0;
-			   mfabb = m1;
-			   mfabc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2;
-			   m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfaca = m0;
-			   mfacb = m1;
-			   mfacc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-			   m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
-			   m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-			   mfbaa = m0;
-			   mfbab = m1;
-			   mfbac = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-			   m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
-			   m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-			   mfbba = m0;
-			   mfbbb = m1;
-			   mfbbc = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-			   m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
-			   m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-			   mfbca = m0;
-			   mfbcb = m1;
-			   mfbcc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2;
-			   m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfcaa = m0;
-			   mfcab = m1;
-			   mfcac = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-			   m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
-			   m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-			   mfcba = m0;
-			   mfcbb = m1;
-			   mfcbc = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
-			   m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfcca = m0;
-			   mfccb = m1;
-			   mfccc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
-			   m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaaa = m0;
-			   mfaba = m1;
-			   mfaca = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
-			   m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaab = m0;
-			   mfabb = m1;
-			   mfacb = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
-			   m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaac = m0;
-			   mfabc = m1;
-			   mfacc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-			   m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
-			   m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-			   mfbaa = m0;
-			   mfbba = m1;
-			   mfbca = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-			   m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
-			   m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-			   mfbab = m0;
-			   mfbbb = m1;
-			   mfbcb = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-			   m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
-			   m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-			   mfbac = m0;
-			   mfbbc = m1;
-			   mfbcc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
-			   m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcaa = m0;
-			   mfcba = m1;
-			   mfcca = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
-			   m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcab = m0;
-			   mfcbb = m1;
-			   mfccb = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
-			   m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcac = m0;
-			   mfcbc = m1;
-			   mfccc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaaa = m0;
-			   mfbaa = m1;
-			   mfcaa = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaba = m0;
-			   mfbba = m1;
-			   mfcba = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaca = m0;
-			   mfbca = m1;
-			   mfcca = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaab = m0;
-			   mfbab = m1;
-			   mfcab = m2;
-			   ///////////b////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
-			   m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfabb = m0;
-			   mfbbb = m1;
-			   mfcbb = m2;
-			   ///////////b////////////////////////////////////////////////////////////////////////
-			   m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfacb = m0;
-			   mfbcb = m1;
-			   mfccb = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaac = m0;
-			   mfbac = m1;
-			   mfcac = m2;
-			   ///////////c////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfabc = m0;
-			   mfbbc = m1;
-			   mfcbc = m2;
-			   ///////////c////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfacc = m0;
-			   mfbcc = m1;
-			   mfccc = m2;
-
-			   //////////////////////////////////////////////////////////////////////////
-			   //proof correctness
-			   //////////////////////////////////////////////////////////////////////////
-//#ifdef  PROOF_CORRECTNESS
-//			   LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-//				   + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-//				   + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-//			   //LBMReal dif = fabs(drho - rho_post);
-//			   LBMReal dif = drho+  (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) *correctionScaling - rho_post;
-//#ifdef SINGLEPRECISION
-//			   if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//			   if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//			   {
-//				   UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post)
-//					   + " dif=" + UbSystem::toString(dif)
-//					   + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-//				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-//				   //exit(EXIT_FAILURE);
-//			   }
-//#endif
-			   //////////////////////////////////////////////////////////////////////////
-			   //write distribution
-			   //////////////////////////////////////////////////////////////////////////
-
-			   /////classical source term 8.4.2021
-
-			   mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
-
-
-
-			   ////////////////////
-
-
-			   (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb * rho*c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca * rho * c1o3;
-
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac * rho * c1o3;
-
-			   (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb * rho * c1o3;
-			   //////////////////////////////////////////////////////////////////////////
-
-			   ////!Incompressible Kernal
-
-                            
-//                            ///////Old Kernel \|/
-//                            // ux += forcingX1*deltaT*0.5; // X
-//                            // uy += forcingX2*deltaT*0.5; // Y
-//                            // uz += forcingX3*deltaT*0.5; // Z
-//                        }
-//
-//                        LBMReal ux = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-//                                      (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-//                                      (mfcbb - mfabb)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX1_phi + forcingX1) / (2 * rho);
-//
-//                        LBMReal uy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-//                                      (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-//                                      (mfbcb - mfbab)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX2_phi + forcingX2) / (2 * rho);
-//
-//                        LBMReal uz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-//                                      (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-//                                      (mfbbc - mfbba)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX3_phi + forcingX3) / (2 * rho);
-//
-//                        //--------------------------------------------------------
-//
-//                        LBMReal ux2 = ux * ux;
-//                        LBMReal uy2 = uy * uy;
-//                        LBMReal uz2 = uz * uz;
-//
-//                        //----------- Calculating Forcing Terms * -------------
-//                        for (int dir = STARTF; dir <= (FENDDIR); dir++) {
-//                            LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
-//                            LBMReal velSq1  = velProd * velProd;
-//                            LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2));
-//
-//                            LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
-//
-//                            forcingTerm[dir] = ((-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                                (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                                (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3))) +
-//                                               (DX1[dir]) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                               (DX2[dir]) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                               (DX3[dir]) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
-//                        }
-//
-//                        LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-//                        LBMReal fac1      = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi;
-//                        forcingTerm[REST] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                            (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                            (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
-//
-//                        //--------------------------------------------------------
-//
-//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-//                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-//                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-//                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-//                        mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-//                        mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-//                        mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-//                        mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-//                        mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-//                        mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-//                        mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-//                        mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-//                        mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-//                        mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-//                        mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-//                        mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-//                        mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-//                        mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-//                        mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-//                        mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-//                        mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-//                        mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-//                        mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-//                        mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-//                        mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-//                        mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-//                        mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST];
-//
-//                        LBMReal rho1 = (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 oMdrho, m0, m1, m2;
-//
-//                        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 = rho - (oMdrho + m0);
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        LBMReal wadjust;
-//                        LBMReal qudricLimit = 0.01;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Hin
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Z - Dir
-//                        m2    = mfaaa + mfaac;
-//                        m1    = mfaac - mfaaa;
-//                        m0    = m2 + mfaab;
-//                        mfaaa = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfaab = m1 - m0 * uz;
-//                        mfaac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaba + mfabc;
-//                        m1    = mfabc - mfaba;
-//                        m0    = m2 + mfabb;
-//                        mfaba = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfabb = m1 - m0 * uz;
-//                        mfabc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaca + mfacc;
-//                        m1    = mfacc - mfaca;
-//                        m0    = m2 + mfacb;
-//                        mfaca = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfacb = m1 - m0 * uz;
-//                        mfacc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbaa + mfbac;
-//                        m1    = mfbac - mfbaa;
-//                        m0    = m2 + mfbab;
-//                        mfbaa = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbab = m1 - m0 * uz;
-//                        mfbac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbba + mfbbc;
-//                        m1    = mfbbc - mfbba;
-//                        m0    = m2 + mfbbb;
-//                        mfbba = m0;
-//                        m0 += c4o9 * oMdrho;
-//                        mfbbb = m1 - m0 * uz;
-//                        mfbbc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbca + mfbcc;
-//                        m1    = mfbcc - mfbca;
-//                        m0    = m2 + mfbcb;
-//                        mfbca = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbcb = m1 - m0 * uz;
-//                        mfbcc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcaa + mfcac;
-//                        m1    = mfcac - mfcaa;
-//                        m0    = m2 + mfcab;
-//                        mfcaa = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfcab = m1 - m0 * uz;
-//                        mfcac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcba + mfcbc;
-//                        m1    = mfcbc - mfcba;
-//                        m0    = m2 + mfcbb;
-//                        mfcba = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfcbb = m1 - m0 * uz;
-//                        mfcbc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcca + mfccc;
-//                        m1    = mfccc - mfcca;
-//                        m0    = m2 + mfccb;
-//                        mfcca = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfccb = m1 - m0 * uz;
-//                        mfccc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Y - Dir
-//                        m2    = mfaaa + mfaca;
-//                        m1    = mfaca - mfaaa;
-//                        m0    = m2 + mfaba;
-//                        mfaaa = m0;
-//                        m0 += c1o6 * oMdrho;
-//                        mfaba = m1 - m0 * uy;
-//                        mfaca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaab + mfacb;
-//                        m1    = mfacb - mfaab;
-//                        m0    = m2 + mfabb;
-//                        mfaab = m0;
-//                        mfabb = m1 - m0 * uy;
-//                        mfacb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaac + mfacc;
-//                        m1    = mfacc - mfaac;
-//                        m0    = m2 + mfabc;
-//                        mfaac = m0;
-//                        m0 += c1o18 * oMdrho;
-//                        mfabc = m1 - m0 * uy;
-//                        mfacc = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbaa + mfbca;
-//                        m1    = mfbca - mfbaa;
-//                        m0    = m2 + mfbba;
-//                        mfbaa = m0;
-//                        m0 += c2o3 * oMdrho;
-//                        mfbba = m1 - m0 * uy;
-//                        mfbca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbab + mfbcb;
-//                        m1    = mfbcb - mfbab;
-//                        m0    = m2 + mfbbb;
-//                        mfbab = m0;
-//                        mfbbb = m1 - m0 * uy;
-//                        mfbcb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbac + mfbcc;
-//                        m1    = mfbcc - mfbac;
-//                        m0    = m2 + mfbbc;
-//                        mfbac = m0;
-//                        m0 += c2o9 * oMdrho;
-//                        mfbbc = m1 - m0 * uy;
-//                        mfbcc = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcaa + mfcca;
-//                        m1    = mfcca - mfcaa;
-//                        m0    = m2 + mfcba;
-//                        mfcaa = m0;
-//                        m0 += c1o6 * oMdrho;
-//                        mfcba = m1 - m0 * uy;
-//                        mfcca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcab + mfccb;
-//                        m1    = mfccb - mfcab;
-//                        m0    = m2 + mfcbb;
-//                        mfcab = m0;
-//                        mfcbb = m1 - m0 * uy;
-//                        mfccb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcac + mfccc;
-//                        m1    = mfccc - mfcac;
-//                        m0    = m2 + mfcbc;
-//                        mfcac = m0;
-//                        m0 += c1o18 * oMdrho;
-//                        mfcbc = m1 - m0 * uy;
-//                        mfccc = m2 - 2. * m1 * uy + uy2 * 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 * ux;
-//                        mfcaa = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaba + mfcba;
-//                        m1    = mfcba - mfaba;
-//                        m0    = m2 + mfbba;
-//                        mfaba = m0;
-//                        mfbba = m1 - m0 * ux;
-//                        mfcba = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaca + mfcca;
-//                        m1    = mfcca - mfaca;
-//                        m0    = m2 + mfbca;
-//                        mfaca = m0;
-//                        m0 += c1o3 * oMdrho;
-//                        mfbca = m1 - m0 * ux;
-//                        mfcca = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaab + mfcab;
-//                        m1    = mfcab - mfaab;
-//                        m0    = m2 + mfbab;
-//                        mfaab = m0;
-//                        mfbab = m1 - m0 * ux;
-//                        mfcab = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfabb + mfcbb;
-//                        m1    = mfcbb - mfabb;
-//                        m0    = m2 + mfbbb;
-//                        mfabb = m0;
-//                        mfbbb = m1 - m0 * ux;
-//                        mfcbb = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfacb + mfccb;
-//                        m1    = mfccb - mfacb;
-//                        m0    = m2 + mfbcb;
-//                        mfacb = m0;
-//                        mfbcb = m1 - m0 * ux;
-//                        mfccb = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaac + mfcac;
-//                        m1    = mfcac - mfaac;
-//                        m0    = m2 + mfbac;
-//                        mfaac = m0;
-//                        m0 += c1o3 * oMdrho;
-//                        mfbac = m1 - m0 * ux;
-//                        mfcac = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfabc + mfcbc;
-//                        m1    = mfcbc - mfabc;
-//                        m0    = m2 + mfbbc;
-//                        mfabc = m0;
-//                        mfbbc = m1 - m0 * ux;
-//                        mfcbc = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfacc + mfccc;
-//                        m1    = mfccc - mfacc;
-//                        m0    = m2 + mfbcc;
-//                        mfacc = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbcc = m1 - m0 * ux;
-//                        mfccc = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Cumulants
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        LBMReal OxxPyyPzz = 1.; // omega2 or bulk viscosity
-//                        LBMReal OxyyPxzz  = 1.; //-s9;//2+s9;//
-//                        LBMReal OxyyMxzz  = 1.; // 2+s9;//
-//                        LBMReal O4        = 1.;
-//                        LBMReal O5        = 1.;
-//                        LBMReal O6        = 1.;
-//
-//                        // Cum 4.
-//                        LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-//                        LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-//                        LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-//
-//                        LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) +
-//                                                  c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//                        LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) +
-//                                                  c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//                        LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) +
-//                                                  c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//
-//                        // Cum 5.
-//                        LBMReal CUMbcc = mfbcc -
-//                                         (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
-//                                          2. * (mfbab * mfacb + mfbba * mfabc)) -
-//                                         c1o3 * (mfbca + mfbac) * oMdrho;
-//                        LBMReal CUMcbc = mfcbc -
-//                                         (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
-//                                          2. * (mfabb * mfcab + mfbba * mfbac)) -
-//                                         c1o3 * (mfcba + mfabc) * oMdrho;
-//                        LBMReal CUMccb = mfccb -
-//                                         (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
-//                                          2. * (mfbab * mfbca + mfabb * mfcba)) -
-//                                         c1o3 * (mfacb + mfcab) * oMdrho;
-//
-//                        // Cum 6.
-//                        LBMReal CUMccc =
-//                            mfccc +
-//                            ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-//                              4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -
-//                              2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-//                             (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-//                              2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
-//                             c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-//                             c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
-//                             c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
-//                             (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
-//                              (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
-//                                 c2o3 * oMdrho) +
-//                            c1o27 * oMdrho;
-//
-//                        // 2.
-//                        // linear combinations
-//                        LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
-//                        LBMReal mxxMyy    = mfcaa - mfaca;
-//                        LBMReal mxxMzz    = mfcaa - mfaac;
-//
-//                        LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-//                        LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-//                        LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-//
-//                        (*divU)(x1, x2, x3) = dxux + dyuy + dzuz;
-//
-//                        // relax
-//                        mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) -
-//                                     3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz);
-//                        mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy);
-//                        mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz);
-//
-//                        mfabb += collFactorM * (-mfabb);
-//                        mfbab += collFactorM * (-mfbab);
-//                        mfbba += collFactorM * (-mfbba);
-//
-//                        // linear combinations back
-//                        mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-//                        mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-//                        mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-//
-//                        // 3.
-//                        // linear combinations
-//                        LBMReal mxxyPyzz = mfcba + mfabc;
-//                        LBMReal mxxyMyzz = mfcba - mfabc;
-//
-//                        LBMReal mxxzPyyz = mfcab + mfacb;
-//                        LBMReal mxxzMyyz = mfcab - mfacb;
-//
-//                        LBMReal mxyyPxzz = mfbca + mfbac;
-//                        LBMReal mxyyMxzz = mfbca - mfbac;
-//
-//                        // relax
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-//                        mfbbb += wadjust * (-mfbbb);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-//                        mxxyPyzz += wadjust * (-mxxyPyzz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-//                        mxxyMyzz += wadjust * (-mxxyMyzz);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-//                        mxxzPyyz += wadjust * (-mxxzPyyz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-//                        mxxzMyyz += wadjust * (-mxxzMyyz);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-//                        mxyyPxzz += wadjust * (-mxyyPxzz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-//                        mxyyMxzz += wadjust * (-mxyyMxzz);
-//
-//                        // linear combinations back
-//                        mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-//                        mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-//                        mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-//                        mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-//                        mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-//                        mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-//
-//                        // 4.
-//                        CUMacc += O4 * (-CUMacc);
-//                        CUMcac += O4 * (-CUMcac);
-//                        CUMcca += O4 * (-CUMcca);
-//
-//                        CUMbbc += O4 * (-CUMbbc);
-//                        CUMbcb += O4 * (-CUMbcb);
-//                        CUMcbb += O4 * (-CUMcbb);
-//
-//                        // 5.
-//                        CUMbcc += O5 * (-CUMbcc);
-//                        CUMcbc += O5 * (-CUMcbc);
-//                        CUMccb += O5 * (-CUMccb);
-//
-//                        // 6.
-//                        CUMccc += O6 * (-CUMccc);
-//
-//                        // back cumulants to central moments
-//                        // 4.
-//                        mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-//                        mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-//                        mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-//
-//                        mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//                        mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//                        mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//
-//                        // 5.
-//                        mfbcc = CUMbcc +
-//                                (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
-//                                 2. * (mfbab * mfacb + mfbba * mfabc)) +
-//                                c1o3 * (mfbca + mfbac) * oMdrho;
-//                        mfcbc = CUMcbc +
-//                                (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
-//                                 2. * (mfabb * mfcab + mfbba * mfbac)) +
-//                                c1o3 * (mfcba + mfabc) * oMdrho;
-//                        mfccb = CUMccb +
-//                                (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
-//                                 2. * (mfbab * mfbca + mfabb * mfcba)) +
-//                                c1o3 * (mfacb + mfcab) * oMdrho;
-//
-//                        // 6.
-//                        mfccc = CUMccc -
-//                                ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-//                                  4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) -
-//                                  2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-//                                 (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-//                                  2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
-//                                 c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-//                                 c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
-//                                 c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
-//                                 (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
-//                                  (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
-//                                     c2o3 * oMdrho) -
-//                                c1o27 * oMdrho;
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // forcing
-//                        mfbaa = -mfbaa;
-//                        mfaba = -mfaba;
-//                        mfaab = -mfaab;
-//                        //////////////////////////////////////////////////////////////////////////////////////
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // back
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Z - Dir
-//                        m0    = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2;
-//                        m2    = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfaaa = m0;
-//                        mfaab = m1;
-//                        mfaac = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2;
-//                        m1    = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2);
-//                        m2    = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2;
-//                        mfaba = m0;
-//                        mfabb = m1;
-//                        mfabc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2;
-//                        m2    = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfaca = m0;
-//                        mfacb = m1;
-//                        mfacc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2;
-//                        m1    = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2);
-//                        m2    = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2;
-//                        mfbaa = m0;
-//                        mfbab = m1;
-//                        mfbac = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2;
-//                        m1    = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2);
-//                        m2    = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2;
-//                        mfbba = m0;
-//                        mfbbb = m1;
-//                        mfbbc = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2;
-//                        m1    = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2);
-//                        m2    = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2;
-//                        mfbca = m0;
-//                        mfbcb = m1;
-//                        mfbcc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2;
-//                        m2    = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfcaa = m0;
-//                        mfcab = m1;
-//                        mfcac = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2;
-//                        m1    = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2);
-//                        m2    = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2;
-//                        mfcba = m0;
-//                        mfcbb = m1;
-//                        mfcbc = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2;
-//                        m2    = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfcca = m0;
-//                        mfccb = m1;
-//                        mfccc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Y - Dir
-//                        m0    = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2;
-//                        m2    = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaaa = m0;
-//                        mfaba = m1;
-//                        mfaca = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2;
-//                        m2    = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaab = m0;
-//                        mfabb = m1;
-//                        mfacb = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2;
-//                        m2    = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaac = m0;
-//                        mfabc = m1;
-//                        mfacc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2;
-//                        m1    = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2);
-//                        m2    = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2;
-//                        mfbaa = m0;
-//                        mfbba = m1;
-//                        mfbca = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2;
-//                        m1    = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2);
-//                        m2    = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2;
-//                        mfbab = m0;
-//                        mfbbb = m1;
-//                        mfbcb = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2;
-//                        m1    = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2);
-//                        m2    = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2;
-//                        mfbac = m0;
-//                        mfbbc = m1;
-//                        mfbcc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2;
-//                        m2    = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcaa = m0;
-//                        mfcba = m1;
-//                        mfcca = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2;
-//                        m2    = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcab = m0;
-//                        mfcbb = m1;
-//                        mfccb = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2;
-//                        m2    = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcac = m0;
-//                        mfcbc = m1;
-//                        mfccc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // X - Dir
-//                        m0    = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaaa = m0;
-//                        mfbaa = m1;
-//                        mfcaa = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaba = m0;
-//                        mfbba = m1;
-//                        mfcba = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaca = m0;
-//                        mfbca = m1;
-//                        mfcca = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaab = m0;
-//                        mfbab = m1;
-//                        mfcab = m2;
-//                        ///////////b////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2;
-//                        m2    = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfabb = m0;
-//                        mfbbb = m1;
-//                        mfcbb = m2;
-//                        ///////////b////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfacb = m0;
-//                        mfbcb = m1;
-//                        mfccb = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaac = m0;
-//                        mfbac = m1;
-//                        mfcac = m2;
-//                        ///////////c////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfabc = m0;
-//                        mfbbc = m1;
-//                        mfcbc = m2;
-//                        ///////////c////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfacc = m0;
-//                        mfbcc = m1;
-//                        mfccc = m2;
-//
-//                        ///////////////////////////////////////////////////////////////////////////
-//
-//                        //////////////////////////////////////////////////////////////////////////
-//                        // proof correctness
-//                        //////////////////////////////////////////////////////////////////////////
-//#ifdef PROOF_CORRECTNESS
-//                        LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
-//                                           (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
-//                                           (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) +
-//                                           (mfbba + mfbbc) + mfbbb;
-//
-//                        LBMReal dif = rho1 - rho_post;
-//#ifdef SINGLEPRECISION
-//                        if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//                        if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//                        {
-//                            UB_THROW(UbException(UB_EXARGS,
-//                                                 "rho=" + UbSystem::toString(rho) + ", rho_post=" +
-//                                                     UbSystem::toString(rho_post) + " dif=" + UbSystem::toString(dif) +
-//                                                     " rho is not correct for node " + UbSystem::toString(x1) + "," +
-//                                                     UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-//                        }
-//#endif
-//
-//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00];
-//                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N];
-//                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T];
-//                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE];
-//                        mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[NW];
-//                        mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[TE];
-//                        mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[TW];
-//                        mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[TN];
-//                        mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[TS];
-//                        mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[TNE];
-//                        mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[TNW];
-//                        mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[TSE];
-//                        mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[TSW];
-//                        mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[W];
-//                        mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[S];
-//                        mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[B];
-//                        mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[SW];
-//                        mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[SE];
-//                        mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[BW];
-//                        mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[BE];
-//                        mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[BS];
-//                        mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[BN];
-//                        mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[BSW];
-//                        mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[BSE];
-//                        mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[BNW];
-//                        mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[BNE];
-//                        mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[REST];
-//
-//                        //////////////////////////////////////////////////////////////////////////
-//                        // write distribution for F
-//                        //////////////////////////////////////////////////////////////////////////
-//
-//                        (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)     = mfabb;
-//                        (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)     = mfbab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)     = mfbba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)    = mfaab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)   = mfcab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)    = mfaba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)   = mfcba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)    = mfbaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)   = mfbca;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)   = mfaaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)  = mfcaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)  = mfaca;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-//
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac;
-//
-//                        (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
-// !Old Kernel
-                        /////////////////////  P H A S E - F I E L D   S O L V E R
-                        ////////////////////////////////////////////
-		/////CUMULANT PHASE-FIELD
-				real omegaD =1.0/( 3.0 * mob + 0.5);
-
-			   mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-			   mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-			   mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-			   mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-			   mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-			   mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-			   mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-			   mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-			   mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-			   mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-			   mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-			   mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-			   mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-			   mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-			   mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-			   mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-			   mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-			   mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-			   mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-			   mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-			   mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-			   mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-			   mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-			   mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-			   mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-			   mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-			   mfbbb = (*this->zeroDistributionsH)(x1, x2, x3);
-
-
-					////////////////////////////////////////////////////////////////////////////////////
-		//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-		//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-		//!
-		////////////////////////////////////////////////////////////////////////////////////
-		// fluid component
-			   //LBMReal drhoFluid =
-				  // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) +
-				  // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) +
-					 //  ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb;
-
-			   //LBMReal rhoFluid = c1 + drhoFluid;
-			   //LBMReal OOrhoFluid = c1 / rhoFluid;
-
-
-			   //LBMReal vvx =
-				  // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) +
-				  // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) +
-					 //  (fcbb - fabb)) * OOrhoFluid;
-			   //LBMReal vvy =
-				  // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) +
-				  // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) +
-					 //  (fbcb - fbab)) * OOrhoFluid;
-			   //LBMReal vvz =
-				  // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) +
-				  // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) +
-					 //  (fbbc - fbba)) * OOrhoFluid;
-
-			 //  LBMReal vvx = ux;
-			 //  LBMReal vvy = uy;
-			 //  LBMReal vvz = uz;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // second component
-			   real concentration =
-				   ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-				   (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-					   ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //!
-			  // LBMReal fx = forces[0];
-			  // LBMReal fy = forces[1];
-			  // LBMReal fz = -concentration * forces[2];
-			  // vvx += fx * c1o2;
-			  // vvy += fy * c1o2;
-			  // vvz += fz * c1o2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   real oneMinusRho = c1o1 - concentration;
-
-			   real cx =
-				   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-				   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-					   (mfcbb - mfabb));
-			   real cy =
-				   ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-				   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-					   (mfbcb - mfbab));
-			   real cz =
-				   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-					   (mfbbc - mfbba));
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // calculate the square of velocities for this lattice node
-			   real cx2 = cx * cx;
-			   real cy2 = cy * cy;
-			   real cz2 = cz * cz;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //! see also Eq. (6)-(14) in \ref
-			   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-			   //!
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-			   forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-			   forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-			   forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-			   forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - experimental Cumulant ... to be published ... hopefully
-			   //!
-
-			   // linearized orthogonalization of 3rd order central moments
-			   real Mabc = mfabc - mfaba * c1o3;
-			   real Mbca = mfbca - mfbaa * c1o3;
-			   real Macb = mfacb - mfaab * c1o3;
-			   real Mcba = mfcba - mfaba * c1o3;
-			   real Mcab = mfcab - mfaab * c1o3;
-			   real Mbac = mfbac - mfbaa * c1o3;
-			   // linearized orthogonalization of 5th order central moments
-			   real Mcbc = mfcbc - mfaba * c1o9;
-			   real Mbcc = mfbcc - mfbaa * c1o9;
-			   real Mccb = mfccb - mfaab * c1o9;
-
-			   // collision of 1st order moments
-			   cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-			   cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-			   cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-
-			   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
-			   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
-			//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz;
-
-
-			   cx2 = cx * cx;
-			   cy2 = cy * cy;
-			   cz2 = cz * cz;
-
-			   // equilibration of 2nd order moments
-			   mfbba = c0o1;
-			   mfbab = c0o1;
-			   mfabb = c0o1;
-
-			   mfcaa = c1o3 * concentration;
-			   mfaca = c1o3 * concentration;
-			   mfaac = c1o3 * concentration;
-
-
-			   //LBMReal omega2 = 1.0f;// omegaD;
-			   //mfbba *= (c1 - omega2);
-			   //mfbab *= (c1 - omega2);
-			   //mfabb *= (c1 - omega2);
-
-			   //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration;
-			   //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration;
-			   //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration;
-
-			   // equilibration of 3rd order moments
-			   Mabc = c0o1;
-			   Mbca = c0o1;
-			   Macb = c0o1;
-			   Mcba = c0o1;
-			   Mcab = c0o1;
-			   Mbac = c0o1;
-			   mfbbb = c0o1;
-
-			   // from linearized orthogonalization 3rd order central moments to central moments
-			   mfabc = Mabc + mfaba * c1o3;
-			   mfbca = Mbca + mfbaa * c1o3;
-			   mfacb = Macb + mfaab * c1o3;
-			   mfcba = Mcba + mfaba * c1o3;
-			   mfcab = Mcab + mfaab * c1o3;
-			   mfbac = Mbac + mfbaa * c1o3;
-
-			   // equilibration of 4th order moments
-			   mfacc = c1o9 * concentration;
-			   mfcac = c1o9 * concentration;
-			   mfcca = c1o9 * concentration;
-
-			   mfcbb = c0o1;
-			   mfbcb = c0o1;
-			   mfbbc = c0o1;
-
-			   // equilibration of 5th order moments
-			   Mcbc = c0o1;
-			   Mbcc = c0o1;
-			   Mccb = c0o1;
-
-			   // from linearized orthogonalization 5th order central moments to central moments
-			   mfcbc = Mcbc + mfaba * c1o9;
-			   mfbcc = Mbcc + mfbaa * c1o9;
-			   mfccb = Mccb + mfaab * c1o9;
-
-			   // equilibration of 6th order moment
-			   mfccc = c1o27 * concentration;
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //! see also Eq. (88)-(96) in
-			   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-			   //!
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-			   backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-			   backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-			   backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-			   backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-			   (*this->localDistributionsH)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-   (*this->localDistributionsH)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-   (*this->localDistributionsH)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-   (*this->localDistributionsH)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-   (*this->localDistributionsH)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-   (*this->localDistributionsH)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-   (*this->localDistributionsH)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-   (*this->localDistributionsH)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-   (*this->localDistributionsH)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-   (*this->localDistributionsH)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-   (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-   (*this->localDistributionsH)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-   (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-   (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-   (*this->zeroDistributionsH)(x1,x2,x3) = mfbbb;
-
-		/////!CUMULANT PHASE-FIELD
-
-
-
-                        ///////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
-//using namespace D3Q27System;
-
-      //                  h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-      //                  h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-      //                  h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-      //                  h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-      //                  h[NW]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-      //                  h[TE]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-      //                  h[TW]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-      //                  h[TN]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-      //                  h[TS]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-      //                  h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-      //                  h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-      //                  h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-      //                  h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-      //                  h[W]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-      //                  h[S]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-      //                  h[B]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-      //                  h[SW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-      //                  h[SE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-      //                  h[BW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-      //                  h[BE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-      //                  h[BS]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-      //                  h[BN]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-      //                  h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-      //                  h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-      //                  h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-      //                  h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-      //                  h[REST] = (*this->zeroDistributionsH)(x1, x2, x3);
-						////vvx *= 3;
-						////vvy *= 3;
-						////vvz *= 3;
-						////vx2 = vvx * vvx;
-						////vy2 = vvy * vvy;
-						////vz2 = vvz * vvz;
-
-      //                  for (int dir = STARTF; dir < (ENDF + 1); dir++) {
-      //                      LBMReal velProd = DX1[dir] * vvx + DX2[dir] * vvy + DX3[dir] * vvz;
-      //                      LBMReal velSq1  = velProd * velProd;
-      //                      LBMReal hEq; //, gEq;
-
-      //                      if (dir != REST) {
-      //                          LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0;
-      //                          LBMReal hSource     = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; 
-      //                          hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (vx2 + vy2 + vz2)) +                                 hSource * WEIGTH[dir];
-
-      //                          // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5).
-      //                          h[dir] = h[dir] - (h[dir] - hEq) / (tauH); 
-
-      //                      } else {
-      //                          hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (vx2 + vy2 + vz2));
-      //                          h[REST] = h[REST] - (h[REST] - hEq) / (tauH); 
-      //                      }
-      //                  }
-
-      //                  (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3)     = h[D3Q27System::INV_E];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3)     = h[D3Q27System::INV_N];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3)     = h[D3Q27System::INV_T];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3)    = h[D3Q27System::INV_NE];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3)   = h[D3Q27System::INV_NW];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3)    = h[D3Q27System::INV_TE];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3)   = h[D3Q27System::INV_TW];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3)    = h[D3Q27System::INV_TN];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3)   = h[D3Q27System::INV_TS];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3)   = h[D3Q27System::INV_TNE];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3)  = h[D3Q27System::INV_TNW];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3)  = h[D3Q27System::INV_TSE];
-      //                  (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW];
-
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3)     = h[D3Q27System::INV_W];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3)     = h[D3Q27System::INV_S];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p)     = h[D3Q27System::INV_B];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3)   = h[D3Q27System::INV_SW];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3)    = h[D3Q27System::INV_SE];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p)   = h[D3Q27System::INV_BW];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p)    = h[D3Q27System::INV_BE];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p)   = h[D3Q27System::INV_BS];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p)    = h[D3Q27System::INV_BN];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p)  = h[D3Q27System::INV_BSE];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p)  = h[D3Q27System::INV_BNW];
-      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p)   = h[D3Q27System::INV_BNE];
-
-      //                  (*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST];
-
-                        ///////////////////   END OF OLD BGK SOLVER ///////////////////////////////
-                    }
-                }
-            }
-        
-        dataSet->setPhaseField(divU);
-		}
-}
-//////////////////////////////////////////////////////////////////////////
-
-real MultiphaseScratchCumulantLBMKernel::gradX1_phi()
-{
-	using namespace vf::lbm::dir;
-    using namespace D3Q27System;
-
-	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
-		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX1[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseScratchCumulantLBMKernel::gradX2_phi()
-{
-	using namespace vf::lbm::dir;
-    using namespace D3Q27System;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
-		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
-		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX2[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseScratchCumulantLBMKernel::gradX3_phi()
-{
-	using namespace vf::lbm::dir;
-	using namespace D3Q27System;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
-		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX3[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseScratchCumulantLBMKernel::nabla2_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    real sum = 0.0;
-	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
-		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
-	sum += WEIGTH[d0PP] * (
-			(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
-		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
-		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
-		);
-	sum += WEIGTH[d00P] * (
-			((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
-		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
-		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
-		);
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * (phi[k] - phi[REST]);
-    //}
-    return 6.0 * sum;
-}
-
-void MultiphaseScratchCumulantLBMKernel::computePhasefield()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-    int minX1 = ghostLayerWidth;
-    int minX2 = ghostLayerWidth;
-    int minX3 = ghostLayerWidth;
-    int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-    int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-    int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-    //------------- Computing the phase-field ------------------
-    for (int x3 = minX3; x3 < maxX3; x3++) {
-        for (int x2 = minX2; x2 < maxX2; x2++) {
-            for (int x1 = minX1; x1 < maxX1; x1++) {
-                // if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-                {
-                    int x1p = x1 + 1;
-                    int x2p = x2 + 1;
-                    int x3p = x3 + 1;
-
-                    h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                    h[d0P0]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                    h[d00P]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                    h[dPP0]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[dMP0]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[dP0P]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[dM0P]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[d0PP]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[d0MP]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[dM00]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[d0M0]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[d00M]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[dMM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[dPM0]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[dM0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[dP0M]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[d0MM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[d0PM]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[d000] = (*this->zeroDistributionsH)(x1, x2, x3);
-                }
-            }
-        }
-    }
-}
-
-void MultiphaseScratchCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-                                                int x3)
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-    phi[d000] = (*ph)(x1, x2, x3);
-
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-        if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-            phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-        } else {
-			phi[k] = 0.0;
-         }
-    }
-}
-
-void MultiphaseScratchCumulantLBMKernel::swapDistributions()
-{
-    LBMKernel::swapDistributions();
-    dataSet->getHdistributions()->swap();
-}
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.h
deleted file mode 100644
index db4e547a2054f1a37468bb726f4f3fc20c33bd53..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.h
+++ /dev/null
@@ -1,104 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseScratchCumulantLBMKernel.h
-//! \ingroup LBMKernel
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseScratchCumulantLBMKernel_H
-#define MultiphaseScratchCumulantLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  H. Safari, K. Kutscher, M. Geier
-class MultiphaseScratchCumulantLBMKernel : public LBMKernel
-{
-public:
-   MultiphaseScratchCumulantLBMKernel();
-   virtual ~MultiphaseScratchCumulantLBMKernel(void) = default;
-   void calculate(int step) override;
-   SPtr<LBMKernel> clone() override;
-   void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-   void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-   void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-   void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-
-   real getCalculationTime() override { return .0; }
-protected:
-   virtual void initDataSet();
-   void swapDistributions() override;
-   real f1[D3Q27System::ENDF+1];
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH;
-
-   //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr   phaseField;
-
-   real h  [D3Q27System::ENDF+1];
-   real g  [D3Q27System::ENDF+1];
-   real phi[D3Q27System::ENDF+1];
-   real pr1[D3Q27System::ENDF+1];
-   real phi_cutoff[D3Q27System::ENDF+1];
-
-   real gradX1_phi();
-   real gradX2_phi();
-   real gradX3_phi();
-   //LBMReal gradX1_pr1();
-   //LBMReal gradX2_pr1();
-   //LBMReal gradX3_pr1();
-   //LBMReal dirgradC_phi(int n, int k);
-   void computePhasefield();
-   void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-   //void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, int x1, int x2, int x3);
-   //void pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/);
-
-   real nabla2_phi();
-
-
-   mu::value_type muX1,muX2,muX3;
-   mu::value_type muDeltaT;
-   mu::value_type muNu;
-   real forcingX1;
-   real forcingX2;
-   real forcingX3;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp
deleted file mode 100644
index d3f3ed1000fd4bc48ab11623294e2b7e7f27b62d..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp
+++ /dev/null
@@ -1,1716 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseSharpInterfaceLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseSharpInterfaceLBMKernel.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include <cmath>
-#include <iostream>
-#include <string>
-#include "NonNewtonianFluids/LBM/Rheology.h"
-
-#define PROOF_CORRECTNESS
-
-using namespace vf::lbm::dir;
-using namespace vf::basics::constant;
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseSharpInterfaceLBMKernel::MultiphaseSharpInterfaceLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseSharpInterfaceLBMKernel::initDataSet()
-{
-	SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
-	SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field
-	//SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
-	//SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D(            nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	//CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new  CbArray3D<real, IndexerX3X2X1>(    nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	//pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	//p1Old = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-
-	rhoNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	vxNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	vyNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	vzNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	dataSet->setFdistributions(f);
-	dataSet->setHdistributions(h); // For phase-field
-	//dataSet->setH2distributions(h2);
-	//dataSet->setPhaseField(divU1);
-	//dataSet->setPressureField(pressure);
-
-	phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0));
-	phaseFieldOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 999.0));
-
-	//divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> MultiphaseSharpInterfaceLBMKernel::clone()
-{
-	SPtr<LBMKernel> kernel(new MultiphaseSharpInterfaceLBMKernel());
-	kernel->setNX(nx);
-	dynamicPointerCast<MultiphaseSharpInterfaceLBMKernel>(kernel)->initDataSet();
-	kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-	kernel->setDensityRatio(this->densityRatio);
-	//kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-    kernel->setSigma(this->sigma);
-	kernel->setContactAngle(this->contactAngle);
-	kernel->setPhiL(this->phiL);
-	kernel->setPhiH(this->phiH);
-	kernel->setPhaseFieldRelaxation(this->tauH);
-	kernel->setMobility(this->mob);
-	kernel->setInterfaceWidth(this->interfaceWidth);
-
-	kernel->setBCSet(bcSet->clone(kernel));
-	kernel->setWithForcing(withForcing);
-	kernel->setForcingX1(muForcingX1);
-	kernel->setForcingX2(muForcingX2);
-	kernel->setForcingX3(muForcingX3);
-	kernel->setIndex(ix1, ix2, ix3);
-	kernel->setDeltaT(deltaT);
-	kernel->setGhostLayerWidth(2);
-	dynamicPointerCast<MultiphaseSharpInterfaceLBMKernel>(kernel)->initForcing();
-
-	return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void  MultiphaseSharpInterfaceLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-	//using namespace UbMath;
-	real m2 = mfa + mfc;
-	real m1 = mfc - mfa;
-	real m0 = m2 + mfb;
-	mfa = m0;
-	m0 *= Kinverse;
-	m0 += oneMinusRho;
-	mfb = (m1 * Kinverse - m0 * vv) * K;
-	mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void  MultiphaseSharpInterfaceLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-	//using namespace UbMath;
-	real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
-	real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
-	mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
-	mfa = m0;
-	mfb = m1;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-void  MultiphaseSharpInterfaceLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-	//using namespace UbMath;
-	real m1 = (mfa + mfc) + mfb;
-	real m2 = mfc - mfa;
-	mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-	mfb = m2 - vv * m1;
-	mfa = m1;
-}
-
-
-void  MultiphaseSharpInterfaceLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-	//using namespace UbMath;
-	real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-	real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-	mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-	mfb = mb;
-	mfa = ma;
-}
-
-
-void MultiphaseSharpInterfaceLBMKernel::calculate(int step)
-{
-	using namespace D3Q27System;
-	//using namespace UbMath;
-
-	forcingX1 = 0.0;
-	forcingX2 = 0.0;
-	forcingX3 = 0.0;
-
-	real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5;
-														 /////////////////////////////////////
-
-	localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-	zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-	localDistributionsH1    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-	nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-	zeroDistributionsH1     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField();
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-	//real omegaDRho = 1.0;// 1.25;// 1.3;
-	for (int x3 = minX3 - ghostLayerWidth; x3 < maxX3 + ghostLayerWidth; x3++) {
-		for (int x2 = minX2 - ghostLayerWidth; x2 < maxX2 + ghostLayerWidth; x2++) {
-			for (int x1 = minX1 - ghostLayerWidth; x1 < maxX1 + ghostLayerWidth; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-
-
-					real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-					real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-					//omegaDRho = 2.0;// 1.5;
-					//real phiOld = (*phaseField)(x1, x2, x3);
-
-					(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) +
-						(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-							((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-								(mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-
-
-					if ((*phaseField)(x1, x2, x3) > 1) {
-						(*phaseField)(x1, x2, x3) = c1o1;
-					}
-
-					if ((*phaseField)(x1, x2, x3) < 0) {
-						(*phaseField)(x1, x2, x3) = 0;
-
-					
-				}
-			}
-		}
-	}
-	}
-
-	this->swapDistributions();
-	for (int x3 = minX3 - ghostLayerWidth+1; x3 < maxX3 + ghostLayerWidth-1; x3++) {
-		for (int x2 = minX2 - ghostLayerWidth+1; x2 < maxX2 + ghostLayerWidth-1; x2++) {
-			for (int x1 = minX1 - ghostLayerWidth+1; x1 < maxX1 + ghostLayerWidth-1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					//int x1p = x1 + 1;
-					//int x2p = x2 + 1;
-					//int x3p = x3 + 1;
-
-					
-					SPtr<DistributionArray3D> distributionH = this->getDataSet()->getHdistributions();
-					real hh[27];
-					distributionH->getPostCollisionDistribution(hh, x1, x2, x3);
-					real phiD, vxP, vyP, vzP;
-
-					D3Q27System::calcIncompMacroscopicValues(hh, phiD, vxP, vyP, vzP);
-					(*phaseFieldOld)(x1, x2, x3) = phiD;
-					
-
-					SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions();
-					real ff[27];
-					distribution->getPostCollisionDistribution(ff, x1, x2, x3);
-					real rhoG,vx,vy,vz;
-
-					D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-
-					(*rhoNode)(x1, x2, x3) = rhoG;// *((*phaseField)(x1, x2, x3) > c1o2 ? densityRatio : c1o1);
-					(*vxNode)(x1, x2, x3) = vx;
-					(*vyNode)(x1, x2, x3) = vy;
-					(*vzNode)(x1, x2, x3) = vz;
-
-
-				}
-			}
-		}
-	}
-
-	SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions();
-	real ff[27];
-	for (int x3 = minX3 - 1; x3 < maxX3 + 1; x3++) {
-		for (int x2 = minX2 - 1; x2 < maxX2 + 1; x2++) {
-			for (int x1 = minX1 - 1; x1 < maxX1 + 1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					//int x1p = x1 + 1;
-					//int x2p = x2 + 1;
-					//int x3p = x3 + 1;
-					findNeighbors(phaseFieldOld, x1, x2, x3);
-					////////////////////////////////Momentum conservation experiment 06.03.2023
-					//surfacetension
-
-					if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[d000]<=c1o2)&& (
-						(phi[dP00] > c1o2) ||
-						(phi[dM00] > c1o2) ||
-						(phi[d00P] > c1o2) ||
-						(phi[d00M] > c1o2) ||
-						(phi[d0M0] > c1o2) ||
-						(phi[d0P0] > c1o2) ||
-						(phi[dPP0] > c1o2) ||
-						(phi[dPM0] > c1o2) ||
-						(phi[dP0P] > c1o2) ||
-						(phi[dP0M] > c1o2) ||
-						(phi[dMP0] > c1o2) ||
-						(phi[dMM0] > c1o2) ||
-						(phi[dM0P] > c1o2) ||
-						(phi[dM0M] > c1o2) ||
-						(phi[d0PM] > c1o2) ||
-						(phi[d0MM] > c1o2) ||
-						(phi[d0PP] > c1o2) ||
-						(phi[d0MP] > c1o2) ||
-						(phi[dPPP] > c1o2) ||
-						(phi[dPMP] > c1o2) ||
-						(phi[dMPP] > c1o2) ||
-						(phi[dMMP] > c1o2) ||
-						(phi[dPPM] > c1o2) ||
-						(phi[dPMM] > c1o2) ||
-						(phi[dMPM] > c1o2) ||
-						(phi[dMMM] > c1o2)
-						)) {
-						real vx = (*vxNode)(x1, x2, x3);
-						real vy = (*vyNode)(x1, x2, x3);
-						real vz = (*vzNode)(x1, x2, x3);
-						findNeighbors(phaseField, x1, x2, x3);
-						real laplacePressure = c12o1 * sigma * computeCurvature_phi();
-      //                  if (step > 5000)
-      //                       UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[d000]<< "\n");
-						findNeighbors(phaseFieldOld, x1, x2, x3);
-
-//16.03.23 c: BB gas side with updated boundary velocity
-
-						distribution->getPostCollisionDistribution(ff, x1, x2, x3);
-						real rhoG;
-						if (phi[d000] > c1o2) { //initialization necessary
-							real sumRho = 0;
-							real sumWeight = 1.e-100;
-							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-								if ((phi[fdir] <= c1o2)) {
-									sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-									sumWeight += WEIGTH[fdir];
-								}
-
-							}
-							rhoG = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neighbor?
-							for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-								if ((phi[fdir] > c1o2) ) {
-									// real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-
-									if ((phi[D3Q27System::INVDIR[fdir]] > c1o2)) {
-									real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-									real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-									real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-									vBC = (vBC + vDir) / (c2o1 + vBC - vDir);	
-
-									//27.04.23
-									// real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-									// real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-									// real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-									//real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI);
-									//real dvDir = (vBC - vIDir)*c1o2;
-									real dvDir = (vBC - vDir);
-
-									LBMReal fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-									LBMReal fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-									//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-										//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-										//real fGEQOld = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-										//real fGEQNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-									//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;// fL -feqOLD + feqNew;
-										//real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC);
-									distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-									///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!)
-									//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-									//real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 ));
-									//real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 ));
-									//real fBC = fG - feqOLD + feqNew;
-									//distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir);
-
-
-									}
-								}
-							}
-							//distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000);
-							{
-								real fL = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
-								real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx,vy,vz);
-								real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG,vx,vy,vz);
-								distribution->setPostCollisionDistributionForDirection(fL-feqOLD+feqNew, x1, x2, x3, d000);
-							}
-
-						}
-						else {//no refill of gas required
-							rhoG = (*rhoNode)(x1, x2, x3);
-							if ((*phaseField)(x1, x2, x3) <= c1o2) {//no refill liquid
-								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-									if ((phi[fdir] > c1o2)) {
-										real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-										real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-                                        //real dvDir = vBC - vDir;
-										//27.04.23
-										// real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-										// real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-										// real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-										//real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI);
-                                        //real dvDir = (vBC - vIDir)*c1o2;
-										real dvDir = (vBC - vDir);
-																				
-										vBC = (vBC + vDir) / (c2o1 + vBC - vDir);
-										real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-										real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-										//real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC);
-                                        real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-                                        // real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-                                        real fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-
-										//real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-										//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-										//if ((*phaseField)(x1, x2, x3) <= c1o2) 
-										distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-										if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-											//real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-											//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL  - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-											//real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC;
-											//real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC;
-											//real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
-											//real number = 666;
-											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir);
-										////	real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
-										////	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-										//	real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-										////real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
-										//	distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-										//	//if (vxBC != 0) {
-										//	//	int set = 0;
-										//	//}
-
-
-											real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-                                            real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-											real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
-                                            real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-                                            real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-                                            // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
-                                            real laplacePressureBC;
-                                            if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) {
-                                                findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                                laplacePressureBC =c6o1*c2o1* computeCurvature_phi() * sigma;
-                                                findNeighbors(phaseFieldOld, x1, x2, x3);
-                                            } else
-                                                laplacePressureBC = laplacePressure; // curv; // reset to the above
-                                            laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            //laplacePressureBC *= sigma;
-                                            distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);
-
-										}
-
-									}
-
-
-								}
-							}
-							else {//refill liquid
-
-								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-									if ((phi[fdir] > c1o2)) {
-										real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-										real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-                                        //real dvDir = vBC - vDir;
-										//27.04.23
-										// real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-										// real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-										// real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-										//real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI);
-                                        //real dvDir = (vBC - vIDir)*c1o2;
-										real dvDir = (vBC - vDir);
-
-										vBC = (vBC + vDir) / (c2o1 + vBC - vDir);
-										real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-										real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-										//real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC);
-
-										real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-                                        // real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-                                        real fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);
-
-										//real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir);
-										//real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;
-
-										ff[D3Q27System::INVDIR[fdir]] = fBC;
-										if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) {
-											//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-											//real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-											//real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir);
-											//distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-											//distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir);
-											//real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC;
-											//real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC;
-											//real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir);
-										//	real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//	real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										//	//real flNew = (fBC + fG - eqBC - eqG) / densityRatio + eqBC + eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC;
-										//	distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG)  - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir);
-
-										////	real number = 666;
-
-											real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-                                            real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]));
-
-                                            real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz);
-                                            real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz);
-                                            real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-
-                                            // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio  - c1o1) * vBC;
-                                            real laplacePressureBC;
-                                            if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) {
-                                                findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-                                                laplacePressureBC = c12o1 * computeCurvature_phi() * sigma;
-                                                findNeighbors(phaseFieldOld, x1, x2, x3);
-                                            } else
-                                                laplacePressureBC = laplacePressure; // curv; // reset to the above
-                                            laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-                                            // laplacePressureBC *= sigma;
-                                            distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);
-
-										}
-
-									}
-									else {
-										ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);;
-									}
-
-
-								}
-
-								real sum2 = 1e-100;
-								real sumRho = 0;
-								// real sumVx = 0;
-								// real sumVy = 0;
-								// real sumVz = 0;
-								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-									if ((phi[fdir] > c1o2)) {
-
-										sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);// * tempRho;
-										// sumVx += WEIGTH[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-										// sumVy += WEIGTH[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-										// sumVz += WEIGTH[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);
-										sum2 += WEIGTH[fdir];
-									}
-								}
-								real rhoL;
-								D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz);
-								rhoL = sumRho / sum2;
-								//vx = sumVx / sum2;
-								//vy = sumVy / sum2;
-								//vz = sumVz / sum2;
-								//rhoL = (*rhoNode)(x1, x2, x3)/densityRatio;
-
-								//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-								//	ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-								//}
-
-								for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-									if (((phi[fdir] <= c1o2) ))//&& (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2))) 
-									{
-										real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]));
-										real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC);
-										real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz);
-										vBC = (vBC + vDir) / (c2o1 + vBC - vDir);
-
-										//27.04.23
-										// real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-										// real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-										// real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-										//real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI);
-										//real dvDir = (vBC - vIDir)*c1o2;
-										real dvDir = (vBC - vDir);
-		
-
-										real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz);
-										ff[D3Q27System::INVDIR[fdir]] = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC);										
-										// real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz);
-										// real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz);
-										// ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew;
-										distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-									}
-								}
-
-
-								//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-								//	if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) {
-								//		//real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		//real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		//real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		//real vBC = -(D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC);
-								//		real vDir = -(D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX2[fdir] * vz);
-								//		//vBC = (vBC + vDir) / (c2o1 -( vBC - vDir));
-								//		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir;
-								//		//real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);
-								//		real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-								//		distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
-								//		ff[fdir] = fL;
-								//	}
-								//	if (!(phi[fdir] > c1o2)) {
-								//		//std::cout << "Eq at dir=" << fdir << "\n";
-								//		real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir]));
-								//		real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz);
-								//		distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir);
-								//		ff[fdir] = feqL;
-								//	}
-								//}
-						//real sumRho2= 0;
-						//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//	sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz);
-						//}
-						//ff[d000] = rhoL - sumRho2;
-						//rhoL = 27.0 / 18.0 * sumRho2;
-						//std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n";
-						D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-						//std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n";
-						//distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000);
-						{
-							real fG = distribution->getDistributionInvForDirection(x1, x2, x3, d000);
-							real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz);
-							real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
-							distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000);
-						}
-						//for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
-						//	ff[D3Q27System::INVDIR[fdir]]=distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);
-						//}
-						//D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz);
-						//std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n";
-
-								//real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz);
-								//distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000);
-
-
-
-							}
-
-
-
-						}
-					
-}//end Loop
-					
-
-
-
-
-					}
-				}
-			}
-		}
-	
-
-
-	this->swapDistributions();
-
-	real collFactorM;
-
-	for (int x3 = minX3; x3 < maxX3; x3++) {
-		for (int x2 = minX2; x2 < maxX2; x2++) {
-			for (int x1 = minX1; x1 < maxX1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					findNeighbors(phaseField, x1, x2, x3);
-
-
-
-					real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-                    real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-                    real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-                    real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-                    real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-                    real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-                    real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-                    real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-                    real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-                    real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-                    real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                    real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-                    real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-                    real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-                    real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-                    real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-                    real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-                    real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-                    real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-
-
-
-					real rhoH = 1.0;
-					real rhoL = 1.0/ densityRatio;
-
-					//real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-					real dX1_phi = gradX1_phi();
-					real dX2_phi = gradX2_phi();
-					real dX3_phi = gradX3_phi();
-
-					real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi)+ 1.0e-20;//+ 1e-9+1e-3;
-					// 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase?
-					real normX1 = dX1_phi / denom;
-					real normX2 = dX2_phi / denom;
-					real normX3 = dX3_phi / denom;
-
-
-
-					collFactorM = phi[d000] > c1o2 ? collFactorL : collFactorG;
-					//real collFactorMInv = phi[d000] > c1o2 ? collFactorG : collFactorL;
-
-					//real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-					//----------- Calculating Macroscopic Values -------------
-					real rho = phi[d000] > c1o2 ? rhoH : rhoL;
-
-
-
-					real m0, m1, m2;
-					real rhoRef=c1o1;
-
-					real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-						(mfcbb - mfabb))/rhoRef;
-					real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-						(mfbcb - mfbab))/rhoRef;
-					real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-						(mfbbc - mfbba))/rhoRef;
-					/////////////////////
-
-					 forcingX1 = 0.0;
-					 forcingX2 = 0.0;
-					 forcingX3 = 0.0;
-
-                     if (withForcing) {
-                        muRho = rho;
-						muPhi = phi[d000];
-                        forcingX1 += muForcingX1.Eval();
-                        forcingX2 += muForcingX2.Eval();
-                        forcingX3 += muForcingX3.Eval();
-
-                        vvx += (forcingX1)*deltaT * c1o2;
-                        vvy += (forcingX2)*deltaT * c1o2;
-                        vvz += (forcingX3)*deltaT * c1o2;
-                     }
-					real vx2;
-					real vy2;
-					real vz2;
-					vx2 = vvx * vvx;
-					vy2 = vvy * vvy;
-					vz2 = vvz * vvz;
-					///////////////////////////////////////////////////////////////////////////////////////////               
-					real 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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-					real wadjust;
-//					real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000]));
-					//real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[d000] * (c1o1 - phi[d000]):c0o1)); 
-					real qudricLimit = 0.01;
-					
-																													                    ////////////////////////////////////////////////////////////////////////////////////
-					//! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-					//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-					//! see also Eq. (6)-(14) in \ref
-					//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-					//!
-					////////////////////////////////////////////////////////////////////////////////////
-					// Z - Dir
-					forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho);
-
-					////////////////////////////////////////////////////////////////////////////////////
-					// Y - Dir
-					forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho);
-					forwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-					forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho);
-					forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2);
-					forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho);
-					forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho);
-					forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-					forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho);
-
-					////////////////////////////////////////////////////////////////////////////////////
-					// X - Dir
-					forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho);
-					forwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-					forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho);
-					forwardChimera(mfaab, mfbab, mfcab, vvx, vx2);
-					forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2);
-					forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2);
-					forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho);
-					forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-					forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c3o1, c1o9, oMdrho);
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					// Cumulants
-					////////////////////////////////////////////////////////////////////////////////////
-
-					// mfaaa = 0.0;
-					real OxxPyyPzz = 1.0; //omega2 or bulk viscosity
-											//  real OxyyPxzz = 1.;//-s9;//2+s9;//
-											//  real OxyyMxzz  = 1.;//2+s9;//
-					real O4 = 1.;
-					real O5 = 1.;
-					real O6 = 1.;
-					/////
-
-					/////fourth order parameters; here only for test. Move out of loop!
-
-					real OxyyPxzz =  8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-					real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-				    real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-					real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' )
-					real BB =  (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-
-
-					//Cum 4.
-					real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-					real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-					real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-					real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-					real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-					real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-
-					//Cum 5.
-					real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-					real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-					real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-					//Cum 6.
-					real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-						- 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-							+ 2. * (mfcaa * mfaca * mfaac)
-							+ 16. * mfbba * mfbab * mfabb)
-						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-					//2.
-					// linear combinations
-					real mxxPyyPzz = mfcaa + mfaca + mfaac;
-					mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa
-										//mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
-					real mxxMyy = mfcaa - mfaca;
-					real mxxMzz = mfcaa - mfaac;
-
-					///
-					// real mmfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-					// real mmfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-					// real mmfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-					// real mmfabb = mfabb;
-					// real mmfbab = mfbab;
-					// real mmfbba = mfbba;
-					///
-
-					real dxux =  -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz)*0;
-					//real dxux = -c1o2 * (mxxMyy + mxxMzz) * collFactorM - mfaaa * c1o3* omegaDRho;
-					real dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
-					real dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
-					real Dxy = -c3o1 * collFactorM * mfbba;
-					real Dxz = -c3o1 * collFactorM * mfbab;
-					real Dyz = -c3o1 * collFactorM * mfabb;
-
-                    // if (phi[d000] > c1o2) {
-                    //     /// QR eddyviscosity:
-                    //     real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux) - (Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz;
-                    //     real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz);
-                    //     real nuEddy = 5.0e1 * (eddyR / (eddyQ + 1e-100)) * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-                    //     nuEddy = (nuEddy < c1o1 / collFactorM) ? c1o1 / collFactorM : nuEddy;
-                    //     collFactorM = c1o1 / nuEddy;
-                    //     // collFactorM = c1o1 / (c1o1 / collFactorM +1.e2*nuEddy*(dX1_phi*dX1_phi+dX2_phi*dX2_phi+dX3_phi*dX3_phi));
-                    //     collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
-                    //     OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-                    //     OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-                    //     Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-                    //     A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-                    //     BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-                    // }
-
-                    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                    // non Newtonian fluid collision factor
-                    if (phi[d000] > c1o2) 
-					{
-                        real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz);
-                        collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1);
-                        collFactorM = (collFactorM < c1o1) ? c1o1 : collFactorM;
-                    }
-                    // omega = Rheology::getHerschelBulkleyCollFactor(omega, shearRate, drho);
-                    // omega = Rheology::getBinghamCollFactor(omega, shearRate, drho);
-                    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-					/////////
-					//real mxxMyyh = -c2o1 * (dxux - dyuy) / collFactorMInv * c1o3;
-					//real mxxMzzh = -c2o1 * (dxux - dzuz) / collFactorMInv * c1o3;
-
-					//relax
-					mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-					mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-					mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-					mfabb += collFactorM * (-mfabb);
-					mfbab += collFactorM * (-mfbab);
-					mfbba += collFactorM * (-mfbba);
-
-					//mxxMyyh += collFactorMInv * (-mxxMyyh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vy2 * dyuy);
-					//mxxMzzh += collFactorMInv * (-mxxMzzh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vz2 * dzuz);
-
-					mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
-
-										// mxxPyyPzz += (mfaaa + mfaaaS) * c1o2;
-										//mfaaa = mfaaaS;
-										// linear combinations back
-					mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-					mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-					mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-					//3.
-					// linear combinations
-					real mxxyPyzz = mfcba + mfabc;
-					real mxxyMyzz = mfcba - mfabc;
-
-					real mxxzPyyz = mfcab + mfacb;
-					real mxxzMyyz = mfcab - mfacb;
-
-					real mxyyPxzz = mfbca + mfbac;
-					real mxyyMxzz = mfbca - mfbac;
-
-					//  mmfcaa += c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz- mfaaa);
-					//  mmfaca += c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz- mfaaa);
-					//  mmfaac += c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz- mfaaa);
-					//  mmfabb += mfabb;
-					//  mmfbab += mfbab;
-					//  mmfbba += mfbba;
-
-					//relax
-					wadjust = Oxyz + (1. - Oxyz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-					mfbbb += wadjust * (-mfbbb);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-					mxxyPyzz += wadjust * (-mxxyPyzz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-					mxxyMyzz += wadjust * (-mxxyMyzz);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-					mxxzPyyz += wadjust * (-mxxzPyyz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-					mxxzMyyz += wadjust * (-mxxzMyyz);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-					mxyyPxzz += wadjust * (-mxyyPxzz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-					mxyyMxzz += wadjust * (-mxyyMxzz);
-
-					// linear combinations back
-					mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-					mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-					mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-					mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-					mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-					mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-					//4.
-					CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-					CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-					CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-					CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc);
-					CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb);
-					CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb);
-
-					//5.
-					CUMbcc += O5 * (-CUMbcc);
-					CUMcbc += O5 * (-CUMcbc);
-					CUMccb += O5 * (-CUMccb);
-
-					//6.
-					CUMccc += O6 * (-CUMccc);
-
-					//back cumulants to central moments
-					//4.
-					mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-					mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-					mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-					mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-					mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-					mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-
-					//5.
-					mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-					mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-					mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-					//6.
-					mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-						- 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-							+ 2. * (mfcaa * mfaca * mfaac)
-							+ 16. * mfbba * mfbab * mfabb)
-						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-
-					////////
-
-					////////////////////////////////////////////////////////////////////////////////////
-					//forcing
-					mfbaa = -mfbaa;
-					mfaba = -mfaba;
-					mfaab = -mfaab;
-
-					backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho);
-					backwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-					backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho);
-					backwardChimera(mfaab, mfbab, mfcab, vvx, vx2);
-					backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2);
-					backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2);
-					backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho);
-					backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-					backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9, oMdrho);
-
-					////////////////////////////////////////////////////////////////////////////////////
-					// Y - Dir
-					backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho);
-					backwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-					backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho);
-					backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2);
-					backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho);
-					backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-					backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho);
-
-					////////////////////////////////////////////////////////////////////////////////////
-					// Z - Dir
-					backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho);
-					backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho);
-					//////////////////////////////////////////////////////////////////////////
-					//proof correctness
-					//////////////////////////////////////////////////////////////////////////
-					//#ifdef  PROOF_CORRECTNESS
-					real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-						+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-						+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-
-					if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post))
-						UB_THROW(UbException(
-							UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," +
-							UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-
-					//////////////////////////////////////////////////////////////////////////
-					//write distribution
-					//////////////////////////////////////////////////////////////////////////
-				//	if (phi[d000] < c1o2) {
-						(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;//* rho * c1o3;
-						(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;//* rho * c1o3;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;//* rho * c1o3;
-
-						(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3;
-/////////////////////  P H A S E - F I E L D   S O L V E R
-////////////////////////////////////////////
-/////CUMULANT PHASE-FIELD
-					real omegaD =1.0/( 3.0 * mob + 0.5);
-					{
-						mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-						mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-						mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-						mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-						mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-						mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-						mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-						mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-						mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-						mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-						mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-						mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-						mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-						mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-						mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-						mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-						mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-						mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-						mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-						mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-						mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-						mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-						mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-						mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// second component
-						real concentration =
-							((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-								(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-								((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-						////////////////////////////////////////////////////////////////////////////////////
-						real oneMinusRho = c1o1- concentration;
-
-						real cx =
-							((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-								(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-								(mfcbb - mfabb));
-						real cy =
-							((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-								(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-								(mfbcb - mfbab));
-						real cz =
-							((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-								(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-								(mfbbc - mfbba));
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// calculate the square of velocities for this lattice node
-						real cx2 = cx * cx;
-						real cy2 = cy * cy;
-						real cz2 = cz * cz;
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (6)-(14) in \ref
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-						forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-						forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-						forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-						forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-						forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-						forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - experimental Cumulant ... to be published ... hopefully
-						//!
-
-						// linearized orthogonalization of 3rd order central moments
-						real Mabc = mfabc - mfaba * c1o3;
-						real Mbca = mfbca - mfbaa * c1o3;
-						real Macb = mfacb - mfaab * c1o3;
-						real Mcba = mfcba - mfaba * c1o3;
-						real Mcab = mfcab - mfaab * c1o3;
-						real Mbac = mfbac - mfbaa * c1o3;
-						// linearized orthogonalization of 5th order central moments
-						real Mcbc = mfcbc - mfaba * c1o9;
-						real Mbcc = mfbcc - mfbaa * c1o9;
-						real Mccb = mfccb - mfaab * c1o9;
-
-						//31.05.2022 addaptive mobility
-						//omegaD = c1o1 + (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) / (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration)) + fabs((1.0 - concentration) * (concentration)) * c1o6 * oneOverInterfaceScale+1.0e-200);
-						//omegaD = c2o1 * (concentration * (concentration - c1o1)) / (-c6o1 * (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) + (concentration * (concentration - c1o1))+1.0e-200);
-						// collision of 1st order moments
-						cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-							normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
-						cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-							normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
-						cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-							normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
-
-						cx2 = cx * cx;
-						cy2 = cy * cy;
-						cz2 = cz * cz;
-
-						// equilibration of 2nd order moments
-						mfbba = c0o1;
-						mfbab = c0o1;
-						mfabb = c0o1;
-
-						mfcaa = c1o3 * concentration;
-						mfaca = c1o3 * concentration;
-						mfaac = c1o3 * concentration;
-
-						// equilibration of 3rd order moments
-						Mabc = c0o1;
-						Mbca = c0o1;
-						Macb = c0o1;
-						Mcba = c0o1;
-						Mcab = c0o1;
-						Mbac = c0o1;
-						mfbbb = c0o1;
-
-						// from linearized orthogonalization 3rd order central moments to central moments
-						mfabc = Mabc + mfaba * c1o3;
-						mfbca = Mbca + mfbaa * c1o3;
-						mfacb = Macb + mfaab * c1o3;
-						mfcba = Mcba + mfaba * c1o3;
-						mfcab = Mcab + mfaab * c1o3;
-						mfbac = Mbac + mfbaa * c1o3;
-
-						// equilibration of 4th order moments
-						mfacc = c1o9 * concentration;
-						mfcac = c1o9 * concentration;
-						mfcca = c1o9 * concentration;
-
-						mfcbb = c0o1;
-						mfbcb = c0o1;
-						mfbbc = c0o1;
-
-						// equilibration of 5th order moments
-						Mcbc = c0o1;
-						Mbcc = c0o1;
-						Mccb = c0o1;
-
-						// from linearized orthogonalization 5th order central moments to central moments
-						mfcbc = Mcbc + mfaba * c1o9;
-						mfbcc = Mbcc + mfbaa * c1o9;
-						mfccb = Mccb + mfaab * c1o9;
-
-						// equilibration of 6th order moment
-						mfccc = c1o27 * concentration;
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (88)-(96) in
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-						backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-						backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-						backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-						backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-						backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-						backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-						(*this->localDistributionsH1)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-						(*this->localDistributionsH1)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-						(*this->localDistributionsH1)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-						(*this->localDistributionsH1)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-						(*this->localDistributionsH1)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-						(*this->localDistributionsH1)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-						(*this->localDistributionsH1)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-						(*this->localDistributionsH1)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-						(*this->localDistributionsH1)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-						(*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-						(*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb;
-
-
-
-
-					}
-				}
-			}
-		}
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-
-real MultiphaseSharpInterfaceLBMKernel::gradX1_phi()
-{
-	using namespace D3Q27System;
-	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
-		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
-}
-
-real MultiphaseSharpInterfaceLBMKernel::gradX2_phi()
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
-		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
-		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
-}
-
-real MultiphaseSharpInterfaceLBMKernel::gradX3_phi()
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
-		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
-}
-
-real MultiphaseSharpInterfaceLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV)
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
-		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) +
-		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00])));
-}
-
-real MultiphaseSharpInterfaceLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV)
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM]))))
-		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) +
-		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0])));
-}
-
-real MultiphaseSharpInterfaceLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV)
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
-		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) +
-		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M])));
-}
-
-real MultiphaseSharpInterfaceLBMKernel::gradX1_phi2()
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
-		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
-}
-
-real MultiphaseSharpInterfaceLBMKernel::gradX2_phi2()
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
-		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
-		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
-}
-
-real MultiphaseSharpInterfaceLBMKernel::gradX3_phi2()
-{
-	using namespace D3Q27System;
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
-		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
-}
-
-real MultiphaseSharpInterfaceLBMKernel::nabla2_phi()
-{
-	using namespace D3Q27System;
-	real sum = 0.0;
-	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
-		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
-	sum += WEIGTH[d0PP] * (
-		(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
-		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
-		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
-		);
-	sum += WEIGTH[d00P] * (
-		((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
-		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
-		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
-		);
-
-	return 6.0 * sum;
-}
-
-real MultiphaseSharpInterfaceLBMKernel::computeCurvature_phi()
-{
-	using namespace D3Q27System;
-	using namespace UbMath;
-
-	real phiX = gradX1_phi();
-	real phiY = gradX2_phi();
-	real phiZ = gradX3_phi();
-	real phiXX = c4o9*(phi[dP00] - c2o1 * phi[d000] + phi[dM00])
-					+(c1o9*(((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0])+ (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0]))+ ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M])))
-					+c1o36* (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM]))));
-	real phiYY = c4o9*(phi[d0P0] - c2o1 * phi[d000] + phi[d0M0])
-					+(c1o9*(((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0])+ (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0]))+ ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM])))
-					+c1o36* (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM]))));
-	real phiZZ = c4o9*(phi[d00P] - c2o1 * phi[d000] + phi[d00M])
-					+(c1o9*(((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M])+ (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M]))+ ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM])))
-					+c1o36* (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM]))));
-	real phiXY = c1o4 *(c2o3* (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0])+c1o6*((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP])+ (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM])));
-	real phiXZ = c1o4 *(c2o3* (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P])+c1o6*((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP])+ (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP])));
-	real phiYZ = c1o4 *(c2o3* (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM])+c1o6*((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM])+ (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM])));
-
-	//non isotropic FD (to be improved):
-	//real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi();
-	//real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi();
-	//real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi();
-
-	//real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00];
-	//real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0];
-	//real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]);
-	//real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]);
-	//real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]);
-	//real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]);
-	//real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2));
-	return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1*pow(phiX*phiX+phiY*phiY+phiZ*phiZ,c3o2));
-	
-}
-
-void MultiphaseSharpInterfaceLBMKernel::computePhasefield()
-{
-	using namespace D3Q27System;
-	SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-	int minX1 = ghostLayerWidth;
-	int minX2 = ghostLayerWidth;
-	int minX3 = ghostLayerWidth;
-	int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-	int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-	int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-	//------------- Computing the phase-field ------------------
-	for (int x3 = minX3; x3 < maxX3; x3++) {
-		for (int x2 = minX2; x2 < maxX2; x2++) {
-			for (int x1 = minX1; x1 < maxX1; x1++) {
-				// if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-				{
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-					h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
-				}
-			}
-		}
-	}
-}
-
-void MultiphaseSharpInterfaceLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		} else {
-			//phi[k] = (*ph)(x1 , x2, x3 );// neutral wetting
-			phi[k] = 0.0;//unwetting
-		}
-	}
-}
-
-void MultiphaseSharpInterfaceLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi2[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		}
-		else {
-			phi2[k] = 0.05;
-		}
-	}
-}
-
-void MultiphaseSharpInterfaceLBMKernel::swapDistributions()
-{
-	LBMKernel::swapDistributions();
-	dataSet->getHdistributions()->swap();
-}
-
-void MultiphaseSharpInterfaceLBMKernel::initForcing()
-{
-	muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3);
-	muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3);
-	muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3);
-
-	muDeltaT = deltaT;
-
-	muForcingX1.DefineVar("dt", &muDeltaT);
-	muForcingX2.DefineVar("dt", &muDeltaT);
-	muForcingX3.DefineVar("dt", &muDeltaT);
-
-	muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
-
-	muForcingX1.DefineVar("nu", &muNu);
-	muForcingX2.DefineVar("nu", &muNu);
-	muForcingX3.DefineVar("nu", &muNu);
-
-	muForcingX1.DefineVar("rho",&muRho); 
-	muForcingX2.DefineVar("rho",&muRho); 
-	muForcingX3.DefineVar("rho",&muRho); 
-
-}
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.h
deleted file mode 100644
index fd4b2d88ad4f195683fa2cf17990380a581221dd..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.h
+++ /dev/null
@@ -1,129 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseSharpInterfaceLBMKernel.h
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseSharpInterfaceLBMKernel_H
-#define MultiphaseSharpInterfaceLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  M. Geier, K. Kutscher, Hesameddin Safari
-class MultiphaseSharpInterfaceLBMKernel : public LBMKernel
-{
-public:
-    MultiphaseSharpInterfaceLBMKernel();
-    virtual ~MultiphaseSharpInterfaceLBMKernel(void) = default;
-    void calculate(int step) override;
-    SPtr<LBMKernel> clone() override;
-
-
-    ///refactor
-    //CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure;
-
-
-    double getCalculationTime() override { return .0; }
-protected:
-    virtual void initDataSet();
-    void swapDistributions() override;
-
-    void initForcing();
-
-    void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-    void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-
-    real f1[D3Q27System::ENDF+1];
-
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-    CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1;
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1;
-    CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH1;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr p1Old;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseFieldOld;
-    //CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; 
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr rhoNode;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vxNode;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vyNode;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vzNode;
-
-    real h  [D3Q27System::ENDF+1];
-    //real h2[D3Q27System::ENDF + 1];
-    //real g  [D3Q27System::ENDF+1];
-    real phi[D3Q27System::ENDF+1];
-    real phi2[D3Q27System::ENDF + 1];
-    //real pr1[D3Q27System::ENDF+1];
-    real phi_cutoff[D3Q27System::ENDF+1];
-
-    real gradX1_phi();
-    real gradX2_phi();
-    real gradX3_phi();
-	real gradX1_rhoInv(real rhoL, real rhoDIV);
-	real gradX2_rhoInv(real rhoL, real rhoDIV);
-	real gradX3_rhoInv(real rhoL, real rhoDIV);
-    real gradX1_phi2();
-    real gradX2_phi2();
-    real gradX3_phi2();
-    void computePhasefield();
-    void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-    void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3);
-
-    real nabla2_phi();
-
-    real computeCurvature_phi();
-
-    mu::value_type muX1,muX2,muX3;
-    mu::value_type muDeltaT;
-    mu::value_type muNu;
-    mu::value_type muRho;
-    mu::value_type muPhi;
-    real forcingX1;
-    real forcingX2;
-    real forcingX3;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
deleted file mode 100644
index a01c86ff8a63c89cde6405d32b590dd3fefb9825..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
+++ /dev/null
@@ -1,3055 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include <cmath>
-#include <iostream>
-#include <string>
-#include "basics/constants/NumericConstants.h"
-//#include <basics/utilities/UbMath.h>
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::MultiphaseSimpleVelocityBaseExternalPressureLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::initDataSet()
-{
-	SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
-	SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field
-	SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
-	SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D(            nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new  CbArray3D<real, IndexerX3X2X1>(    nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	p1Old = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	dataSet->setFdistributions(f);
-	dataSet->setHdistributions(h); // For phase-field
-	dataSet->setH2distributions(h2);
-	dataSet->setPhaseField(divU1);
-	dataSet->setPressureField(pressure);
-
-	phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0));
-	phaseFieldOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 999.0));
-
-	divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::clone()
-{
-	SPtr<LBMKernel> kernel(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel());
-	kernel->setNX(nx);
-	dynamicPointerCast<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(kernel)->initDataSet();
-	kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-	kernel->setDensityRatio(this->densityRatio);
-	kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-	kernel->setContactAngle(this->contactAngle);
-	kernel->setPhiL(this->phiL);
-	kernel->setPhiH(this->phiH);
-	kernel->setPhaseFieldRelaxation(this->tauH);
-	kernel->setMobility(this->mob);
-	kernel->setInterfaceWidth(this->interfaceWidth);
-
-	kernel->setBCSet(bcSet->clone(kernel));
-	kernel->setWithForcing(withForcing);
-	kernel->setForcingX1(muForcingX1);
-	kernel->setForcingX2(muForcingX2);
-	kernel->setForcingX3(muForcingX3);
-	kernel->setIndex(ix1, ix2, ix3);
-	kernel->setDeltaT(deltaT);
-	kernel->setGhostLayerWidth(2);
-	dynamicPointerCast<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(kernel)->initForcing();
-
-	return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-	using namespace vf::basics::constant;
-	real m2 = mfa + mfc;
-	real m1 = mfc - mfa;
-	real m0 = m2 + mfb;
-	mfa = m0;
-	m0 *= Kinverse;
-	m0 += oneMinusRho;
-	mfb = (m1 * Kinverse - m0 * vv) * K;
-	mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-	using namespace vf::basics::constant;
-	real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
-	real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
-	mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
-	mfa = m0;
-	mfb = m1;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-void  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-	using namespace vf::basics::constant;
-	real m1 = (mfa + mfc) + mfb;
-	real m2 = mfc - mfa;
-	mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-	mfb = m2 - vv * m1;
-	mfa = m1;
-}
-
-
-void  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-	using namespace vf::basics::constant;
-	real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-	real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-	mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-	mfb = mb;
-	mfa = ma;
-}
-
-
-void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
-{
-	using namespace D3Q27System;
-	using namespace vf::basics::constant;
-	using namespace vf::lbm::dir;
-
-	forcingX1 = 0.0;
-	forcingX2 = 0.0;
-	forcingX3 = 0.0;
-
-	real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5;
-														 /////////////////////////////////////
-
-	localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-	zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-	localDistributionsH1    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-	nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-	zeroDistributionsH1     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-	localDistributionsH2    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions();
-	nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions();
-	zeroDistributionsH2     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions();
-
-
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField();
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-	real omegaDRho = 1.0;// 1.25;// 1.3;
-
-	for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) {
-		for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) {
-			for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-					(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
-						(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-							((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-								(mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-					if ((*phaseField)(x1, x2, x3) > 1 ) {
-						(*phaseField)(x1, x2, x3) = c1o1;
-					}
-
-					if ((*phaseField)(x1, x2, x3) < 0) {
-						(*phaseField)(x1, x2, x3) = 0;
-					}
-					////// read F-distributions for velocity formalism
-
-					mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-					mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-					mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-					mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-					mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-					mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-					mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-					mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-					mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-					mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-					mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-					mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-					mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-					mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-					mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-					mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-					mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-					mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-					mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-					mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-					mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-					mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-					//LBMReal rhoH = 1.0;
-					//LBMReal rhoL = 1.0 / densityRatio;
-
-					real rhoH = 1.0*densityRatio;
-					real rhoL = 1.0;
-
-					real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-					real drho = (((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))   )
-						+ (((mfaab + mfccb) + (mfacb + mfcab) ) + ((mfaba + mfcbc) + (mfabc + mfcba) ) + ((mfbaa + mfbcc) + (mfbac + mfbca) )))
-						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-				
-					omegaDRho = 2.0;// 1.5;
-					drho *= omegaDRho;
-					real keepDrho = drho;
-					drho = ((*p1Old)(x1, x2, x3) + drho) * c1o2;
-				//	drho = ((*p1Old)(x1, x2, x3)*c2o3 + drho*c1o3) ;
-					(*p1Old)(x1, x2, x3) = keepDrho;
-					
-					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH); //Incompressible
-///Density correction
-					//LBMReal dX1_phi = gradX1_phi();
-					//LBMReal dX2_phi = gradX2_phi();
-					//LBMReal dX3_phi = gradX3_phi();
-					//LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-					//	(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-					//	(mfcbb - mfabb)) ;
-					//LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-					//	(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-					//	(mfbcb - mfbab)) ;
-					//LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-					//	(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-					//	(mfbbc - mfbba)) ;
-					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressure)(x1, x2, x3); //explicit Compressible
-					//(*pressureOld)(x1, x2, x3) = (((*pressure)(x1, x2, x3) + rho * c1o3 * drho-(rhoH-rhoL)*(vvx*dX1_phi+vvy*dX2_phi+vvz*dX3_phi)*c1o3)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho);
-					
-					//(*pressureOld)(x1, x2, x3) = ((*pressure)(x1, x2, x3) - c1o3 * drho * ((*phaseField)(x1, x2, x3) * (rhoH - rhoL) + rhoL)) / (c1 - ((*phaseField)(x1, x2, x3) - c1) * drho);
-					//LBMReal rho=rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressureOld)(x1, x2, x3);
-					//LBMReal tempDrho = drho;
-					//drho = (drho*0.9 + (*pressureOld)(x1, x2, x3)*0.1) ;
-					//(*pressureOld)(x1, x2, x3) = tempDrho;
-
-					//Mathematica
-
-					//LBMReal rho = ((*pressure)(x1, x2, x3) - (*phaseField)(x1, x2, x3) * (*pressure)(x1, x2, x3) + c1o3 * (rhoH + ((*phaseField)(x1, x2, x3) - phiH) * rhoToPhi)) / (c1o3 + c1o3 * drho * (-1 + (*phaseField)(x1, x2, x3)));
-					(*pressureOld)(x1, x2, x3) = ((*pressure)(x1, x2, x3) + c1o3 * drho * (rhoH + ((*phaseField)(x1, x2, x3) - phiH) * rhoToPhi)) / (1 + drho * (-1 + (*phaseField)(x1, x2, x3)));
-/////Full Filter
-					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH)+(one- (*phaseField)(x1, x2, x3))*three* (*pressure)(x1, x2, x3); //explicit Compressible
-					//(*pressureOld)(x1, x2, x3) = (((*pressure)(x1, x2, x3) + rho * c1o3 * drho)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho);
-//// reduced Filter
-					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressureOld)(x1, x2, x3); //explicit Compressible
-					//(*pressure)(x1, x2, x3) = (((*pressureOld)(x1, x2, x3) + rho * c1o3 * drho)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho);
-
-					//rho = (rho)/(one- (one - (*phaseField)(x1, x2, x3)) * drho); // now implicit Compressible
-					
-					//(*pressure)(x1, x2, x3) = (((*phaseField)(x1, x2, x3)) + ((*phaseField2)(x1, x2, x3)) - c1) * c1o3;
-					////!!!!!! relplace by pointer swap!
-					//(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3);
-				}
-			}
-		}
-	}
-
-	real collFactorM;
-
-	////Periodic Filter
-	//for (int x3 = minX3-1; x3 <= maxX3; x3++) {
-	//	for (int x2 = minX2-1; x2 <= maxX2; x2++) {
-	//		for (int x1 = minX1-1; x1 <= maxX1; x1++) {
-	//			if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-
-	//				LBMReal sum = 0.;
-
-	//				///Version for boundaries
-	//				for (int xx = -1; xx <= 1; xx++) {
-	//					//int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0;
-	//					int xxx = xx + x1;
-
-	//					for (int yy = -1; yy <= 1; yy++) {
-	//						//int yyy = (yy+x2 <= maxX2) ?( (yy + x2 > 0) ? yy + x2 : maxX2) : 0;
-	//						int yyy = yy + x2;
-
-	//						for (int zz = -1; zz <= 1; zz++) {
-	//							//int zzz = (zz+x3 <= maxX3) ? zzz = ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0;
-	//							int zzz = zz + x3;
-
-	//							if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) {
-	//								sum+= 64.0/(216.0*(c1+c3*abs(xx))* (c1 + c3 * abs(yy))* (c1 + c3 * abs(zz)))*(*pressureOld)(xxx, yyy, zzz);
-	//							}
-	//							else{ sum+= 64.0 / (216.0 * (c1 + c3 * abs(xx)) * (c1 + c3 * abs(yy)) * (c1 + c3 * abs(zz))) * (*pressureOld)(x1, x2, x3);
-	//							}
-
-
-	//						}
-	//					}
-	//				}
-	//				(*pressure)(x1, x2, x3) = sum;
-	//			}
-	//		}
-	//	}
-	//}
-
-	////!filter
-
-	for (int x3 = minX3; x3 < maxX3; x3++) {
-		for (int x2 = minX2; x2 < maxX2; x2++) {
-			for (int x1 = minX1; x1 < maxX1; x1++) {
-				if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					//////////////////////////////////////////////////////////////////////////
-					// Read distributions and phase field
-					////////////////////////////////////////////////////////////////////////////
-					//////////////////////////////////////////////////////////////////////////
-
-					// E   N  T
-					// c   c  c
-					//////////
-					// W   S  B
-					// a   a  a
-
-					// Rest ist b
-
-					// mfxyz
-					// a - negative
-					// b - null
-					// c - positive
-
-					// a b c
-					//-1 0 1
-
-					findNeighbors(phaseField, x1, x2, x3);
-
-					real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-					real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-					real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-					real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-					real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-					real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-					real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-					real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-					real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-					real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-					real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-					real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-					real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-					real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-					real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-					real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-					real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-					real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-					real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-					real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-					real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-					real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-
-					real mfhcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
-					real mfhbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
-					real mfhbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
-					real mfhccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
-					real mfhacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
-					real mfhcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
-					real mfhabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
-					real mfhbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
-					real mfhbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
-					real mfhccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
-					real mfhacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
-					real mfhcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
-					real mfhaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
-					real mfhabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
-					real mfhbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
-					real mfhbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
-					real mfhaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
-					real mfhcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
-					real mfhaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
-					real mfhcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
-					real mfhbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
-					real mfhbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
-					real mfhaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					real mfhcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					real mfhaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					real mfhcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					real mfhbbb = (*this->zeroDistributionsH2)(x1, x2, x3);
-
-					//LBMReal rhoH = 1.0;
-					//LBMReal rhoL = 1.0 / densityRatio;
-
-					real rhoH = 1.0;
-					real rhoL = 1.0/ densityRatio;
-
-					real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-					real dX1_phi = gradX1_phi();
-					real dX2_phi = gradX2_phi();
-					real dX3_phi = gradX3_phi();
-
-					real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9+1e-3;
-					// 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase?
-					real normX1 = dX1_phi / denom;
-					real normX2 = dX2_phi / denom;
-					real normX3 = dX3_phi / denom;
-
-
-
-					collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
-
-
-					real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-					//----------- Calculating Macroscopic Values -------------
-					real rho = rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible
-
-																		///scaled phase field
-					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) / ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) + (c1 - (*phaseField)(x1, x2, x3)) * (c1 - (*phaseField)(x1, x2, x3))) - phiH);
-					///!scaled phase field
-					
-					//LBMReal rho = rhoH + rhoToPhi * (phi[d000] - phiH)+(one-phi[d000])* (*pressure)(x1, x2, x3)*three; //compressible
-					//LBMReal rho = rhoL + (rhoH - rhoL) * phi[d000] + (one - phi[d000]) * (*pressure)(x1, x2, x3) * three; //compressible
-
-					real m0, m1, m2;
-					real rhoRef= c1o1;
-
-					real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-						(mfcbb - mfabb))/rhoRef;
-					real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-						(mfbcb - mfbab))/rhoRef;
-					real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-						(mfbbc - mfbba))/rhoRef;
-					////Filter&Gradient merged
-					real pressureHere = (*pressureOld)(x1, x2, x3);
-					//LBMReal pressureHere = (*pressure)(x1, x2, x3);
-
-					real arrayP[3][3][3] = { {{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}},
-												{{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}},
-												{ {pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}} };
-					//LBMReal LaplaceP = 0.0;
-					//LaplaceP += WEIGTH[dPPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere)))
-					//	+ ((((*pressureOld)(x1 + 1, x2 - 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 + 1) - pressureHere))));
-					//LaplaceP += WEIGTH[d0PP] * (
-					//	((((*pressureOld)(x1 + 1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3) - pressureHere)))
-					//	+ ((((*pressureOld)(x1 + 1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 -1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 + 1) - pressureHere)))
-					//	+ ((((*pressureOld)(x1, x2 + 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 + 1) - pressureHere)))
-					//	);
-					//LaplaceP += WEIGTH[d00P] * (
-					//	(((*pressureOld)(x1 + 1, x2, x3) - pressureHere) + ((*pressureOld)(x1, x2-1, x3) - pressureHere))
-					//	+ (((*pressureOld)(x1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3) - pressureHere))
-					//	+ (((*pressureOld)(x1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2, x3 - 1) - pressureHere))
-					//	);
-
-					//LaplaceP= 6.0 * LaplaceP;
-					
-					//LBMReal sum = 0.0;
-
-					for (int dir1 = -1; dir1 <= 1; dir1++) {
-						for (int dir2 = -1; dir2 <= 1; dir2++) {
-							for (int dir3 = -1; dir3 <= 1; dir3++){
-								int xxx = x1 + dir1;
-								int yyy = x2 + dir2;
-								int zzz = x3 + dir3;
-								if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressureOld)(xxx, yyy, zzz);
-								//if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressure)(xxx, yyy, zzz);
-							//	sum += 64.0 / (216.0 * (c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)) * (c1 + c3 * abs(dir3))) * arrayP[dir1 + 1][dir2 + 1][dir3 + 1];
-							}
-						}
-					}
-//					(*pressure)(x1, x2, x3) = sum;// *0.1 + (1.0 - 0.1) * (*pressureOld)(x1, x2, x3);
-
-
-					(*pressure)(x1, x2, x3) = (((((arrayP[0][0][0] + arrayP[2][2][2]) + (arrayP[0][2][0] + arrayP[2][0][2])) + ((arrayP[2][0][0] + arrayP[0][2][2]) + (arrayP[2][2][0] + arrayP[0][0][2]))) * c1o216
-						+ (((arrayP[0][0][1] + arrayP[2][2][1]) + (arrayP[0][1][0] + arrayP[2][1][2])) + ((arrayP[1][0][0] + arrayP[1][2][2]) + (arrayP[0][1][2] + arrayP[2][1][0])) + ((arrayP[1][0][2] + arrayP[1][2][0]) + (arrayP[0][2][1] + arrayP[2][0][1]))) * c1o54)
-						+ ((arrayP[0][1][1] + arrayP[2][1][1]) + (arrayP[1][0][1] + arrayP[1][2][1]) + (arrayP[1][1][0] + arrayP[1][1][2])) * c2o27)
-						+ arrayP[1][1][1] * c8o27;
-					//LBMReal gradPx = 0.0;
-					//LBMReal gradPy = 0.0;
-					//LBMReal gradPz = 0.0;
-					//for (int dir1 = -1; dir1 <= 1; dir1++) {
-					//	for (int dir2 = -1; dir2 <= 1; dir2++) {
-					//		gradPx -= arrayP[0][dir1+1][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		gradPx += arrayP[2][dir1+1][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-
-
-
-					//		gradPy -= arrayP[dir1+1][0][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		gradPy += arrayP[dir1+1][2][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		
-
-					//		gradPz -= arrayP[dir1+1][dir2+1][0] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		gradPz += arrayP[dir1+1][dir2+1][2] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//	}
-					//}
-
-					//LBMReal gradPx = ((((arrayP[2][0][0] - arrayP[0][2][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72
-					//	+ (((arrayP[2][1][0] - arrayP[0][1][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[2][0][1] - arrayP[0][2][1]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18)
-					//	+ (arrayP[2][1][1] - arrayP[0][1][1]) * c2o9;
-					//LBMReal gradPy = ((((arrayP[0][2][0] - arrayP[2][0][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[0][2][2] - arrayP[2][0][0]))) * c1o72
-					//	+ (((arrayP[1][2][0] - arrayP[1][0][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[0][2][1] - arrayP[2][0][1]) + (arrayP[1][2][2] - arrayP[1][0][0]))) * c1o18)
-					//	+ (arrayP[1][2][1] - arrayP[1][0][1]) * c2o9;
-					//LBMReal gradPz = ((((arrayP[0][0][2] - arrayP[2][2][0]) + (arrayP[0][2][2] - arrayP[2][0][0])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72
-					//	+ (((arrayP[0][1][2] - arrayP[2][1][0]) + (arrayP[1][2][2] - arrayP[1][0][0])) + ((arrayP[1][0][2] - arrayP[1][2][0]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18)
-					//	+ (arrayP[1][1][2] - arrayP[1][1][0]) * c2o9;
-
-					//gradPx *=c1 - (*pressure)(x1, x2, x3)+pressureHere;
-					//gradPy *=c1 - (*pressure)(x1, x2, x3) + pressureHere;
-					//gradPz *=c1 - (*pressure)(x1, x2, x3) + pressureHere;
-
-					////!Filter&Gradient merged
-					//LBMReal gradPx = 0.0;
-					//LBMReal gradPy = 0.0;
-					//LBMReal gradPz = 0.0;
-					//for (int dir1 = -1; dir1 <= 1; dir1++) {
-					//	for (int dir2 = -1; dir2 <= 1; dir2++) {
-					//		int yyy = x2 + dir1;
-					//		int zzz = x3 + dir2;
-					//		if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) {
-					//			gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-					//		if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) {
-					//			gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-
-					//		int xxx = x1 + dir1;
-					//		if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) {
-					//			gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-					//		if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) {
-					//			gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-
-					//		yyy = x2 + dir2;
-					//		if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) {
-					//			gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-					//		if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) {
-					//			gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-					//		else {
-					//			gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
-					//		}
-
-					//	}
-					//}
-
-					//Viscosity increase by phase field residuum
-					//LBMReal errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom);
-					//LBMReal limVis = 0.01;// 0.0000001 * 10;//0.01;
-					// collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM);
-					// collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
-					//errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi;
-					//collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis);
-
-					//3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
-					//+WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
-					//+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
-
-					muRho = rho;
-
-					////external pressure
-					//forcingX1 =/* muForcingX1.Eval()/rho */- gradPx/rho;
-					//forcingX2 =/* muForcingX2.Eval()/rho */- gradPy/rho;
-					//forcingX3 =/* muForcingX3.Eval()/rho */- gradPz/rho;
-
-					///////////////////////////////////////////////
-
-					//LBMReal pBefore = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
-					//pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) );
-					////if (vvx * vvx + vvy * vvy + vvz * vvz > 1.0e-100) {
-					//	mfabb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP00] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbab -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0P0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbba -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPP0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMP0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0P] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbaa -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbca -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMP] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcbb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM00] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbcb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0M0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbbc -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfccb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMM0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfacb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPM0] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcbc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfabc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0M] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbcc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbac -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfccc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfacc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfcac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfaac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPM] * (rhoH - rhoL) / (phiH - phiL)));
-					//	mfbbb -= pBefore * 8.0 / 9.0;
-					//}
-
-					///////////////////////////////////////////////
-
-					real pStarStart = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
-
-					/////////////////////
-					//LBMReal vvxh = ((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhcaa - mfhacc) + (mfhcca - mfhaac))) +
-					//	(((mfhcba - mfhabc) + (mfhcbc - mfhaba)) + ((mfhcab - mfhacb) + (mfhccb - mfhaab))) +
-					//	(mfhcbb - mfhabb)) / rhoRef;
-					//LBMReal vvyh = ((((mfhccc - mfhaaa) + (mfhaca - mfhcac)) + ((mfhacc - mfhcaa) + (mfhcca - mfhaac))) +
-					//	(((mfhbca - mfhbac) + (mfhbcc - mfhbaa)) + ((mfhacb - mfhcab) + (mfhccb - mfhaab))) +
-					//	(mfhbcb - mfhbab)) / rhoRef;
-					//LBMReal vvzh = ((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhacc - mfhcaa) + (mfhaac - mfhcca))) +
-					//	(((mfhbac - mfhbca) + (mfhbcc - mfhbaa)) + ((mfhabc - mfhcba) + (mfhcbc - mfhaba))) +
-					//	(mfhbbc - mfhbba)) / rhoRef;
-
-					//LBMReal deltaPP = 0*(vvxh * dX1_phi + vvyh * dX2_phi + vvzh * dX3_phi) * rhoToPhi / (rho);
-					//mfhbcb += c1o6* c2o9  * deltaPP;
-					//mfhbbc += c1o6* c2o9  * deltaPP;
-					//mfhcbb += c1o6* c2o9  * deltaPP;
-					//mfhccb += c1o6* c1o18 * deltaPP;
-					//mfhacb += c1o6* c1o18 * deltaPP;
-					//mfhcbc += c1o6* c1o18 * deltaPP;
-					//mfhabc += c1o6* c1o18 * deltaPP;
-					//mfhbcc += c1o6* c1o18 * deltaPP;
-					//mfhbac += c1o6* c1o18 * deltaPP;
-					//mfhccc += c1o6* c1o72 * deltaPP;
-					//mfhacc += c1o6* c1o72 * deltaPP;
-					//mfhcac += c1o6* c1o72 * deltaPP;
-					//mfhaac += c1o6* c1o72 * deltaPP;
-					//mfhabb += c1o6* c2o9  * deltaPP;
-					//mfhbab += c1o6* c2o9  * deltaPP;
-					//mfhbba += c1o6* c2o9  * deltaPP;
-					//mfhaab += c1o6* c1o18 * deltaPP;
-					//mfhcab += c1o6* c1o18 * deltaPP;
-					//mfhaba += c1o6* c1o18 * deltaPP;
-					//mfhcba += c1o6* c1o18 * deltaPP;
-					//mfhbaa += c1o6* c1o18 * deltaPP;
-					//mfhbca += c1o6* c1o18 * deltaPP;
-					//mfhaaa += c1o6* c1o72 * deltaPP;
-					//mfhcaa += c1o6* c1o72 * deltaPP;
-					//mfhaca += c1o6* c1o72 * deltaPP;
-					//mfhcca += c1o6* c1o72 * deltaPP;
-					//mfhbbb += c1o6* c4 * c2o9 * deltaPP;
-
-					//////////////////////
-
-					/////Recovering the origin distributions
-					//LBMReal mfStartcbb = mfcbb ;
-					//LBMReal mfStartbcb = mfbcb ;
-					//LBMReal mfStartbbc = mfbbc ;
-					//LBMReal mfStartccb = mfccb ;
-					//LBMReal mfStartacb = mfacb ;
-					//LBMReal mfStartcbc = mfcbc ;
-					//LBMReal mfStartabc = mfabc ;
-					//LBMReal mfStartbcc = mfbcc ;
-					//LBMReal mfStartbac = mfbac ;
-					//LBMReal mfStartccc = mfccc ;
-					//LBMReal mfStartacc = mfacc ;
-					//LBMReal mfStartcac = mfcac ;
-					//LBMReal mfStartaac = mfaac ;
-					//LBMReal mfStartabb = mfabb ;
-					//LBMReal mfStartbab = mfbab ;
-					//LBMReal mfStartbba = mfbba ;
-					//LBMReal mfStartaab = mfaab ;
-					//LBMReal mfStartcab = mfcab ;
-					//LBMReal mfStartaba = mfaba ;
-					//LBMReal mfStartcba = mfcba ;
-					//LBMReal mfStartbaa = mfbaa ;
-					//LBMReal mfStartbca = mfbca ;
-					//LBMReal mfStartaaa = mfaaa ;
-					//LBMReal mfStartcaa = mfcaa ;
-					//LBMReal mfStartaca = mfaca ;
-					//LBMReal mfStartcca = mfcca ;
-					//LBMReal mfStartbbb = mfbbb ;
-
-
-						mfcbb += mfhcbb /rho;
-						mfbcb += mfhbcb /rho;
-						mfbbc += mfhbbc /rho;
-						mfccb += mfhccb /rho;
-						mfacb += mfhacb /rho;
-						mfcbc += mfhcbc /rho;
-						mfabc += mfhabc /rho;
-						mfbcc += mfhbcc /rho;
-						mfbac += mfhbac /rho;
-						mfccc += mfhccc /rho;
-						mfacc += mfhacc /rho;
-						mfcac += mfhcac /rho;
-						mfaac += mfhaac /rho;
-						mfabb += mfhabb /rho;
-						mfbab += mfhbab /rho;
-						mfbba += mfhbba /rho;
-						mfaab += mfhaab /rho;
-						mfcab += mfhcab /rho;
-						mfaba += mfhaba /rho;
-						mfcba += mfhcba /rho;
-						mfbaa += mfhbaa /rho;
-						mfbca += mfhbca /rho;
-						mfaaa += mfhaaa /rho;
-						mfcaa += mfhcaa /rho;
-						mfaca += mfhaca /rho;
-						mfcca += mfhcca /rho;
-						mfbbb += mfhbbb /rho;
-
-
-
-					//Abbas
-					real pStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
-					//22.09.22 not yet in balance, repaire here
-					//LBMReal ppStar = ((((((mfhaaa + mfhccc) + (mfhaac + mfhcca)) + ((mfhcac + mfhaca) + (mfhcaa + mfhacc)))*c3
-					//	+ (((mfhaab + mfhccb) + (mfhacb + mfhcab)) + ((mfhaba + mfhcbc) + (mfhabc + mfhcba)) + ((mfhbaa + mfhbcc) + (mfhbac + mfhbca))))*c2
-					//	+ ((mfhabb + mfhcbb) + (mfhbab + mfhbcb) + (mfhbba + mfhbbc))) ) * c1o3/rho;
-	
-					//ppStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) * c3
-					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) * c2
-					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)))) * c1o3 ;
-
-					//(*phaseFieldOld)(x1, x2, x3) = ((*phaseFieldOld)(x1, x2, x3) > 99.0) ? phi[d000] : (*phaseFieldOld)(x1, x2, x3);
-					//LBMReal dtPhi = phi[d000] - (*phaseFieldOld)(x1, x2, x3);
-					//LBMReal deltaP = -pStar * (c1 - rho / (rho + c1o2 * rhoToPhi * dtPhi));// -pStar * pStar * pStar * 1.0e-4 * rho * rho * rho;
-					//LBMReal deltaP = pStar * (c1 - mfhbbb*rho) * c1o2;//Explicit
-					//LBMReal deltaP = pStar * (c1 - mfhbbb * rho) / (c1 + mfhbbb * rho);//Semi-Implicit
-					//(*phaseFieldOld)(x1, x2, x3) = phi[d000];
-
-					//mfabb += c2o9 *deltaP;
-					//mfbab += c2o9 *deltaP;
-					//mfbba += c2o9 *deltaP;
-					//mfaab += c1o18*deltaP;
-					//mfcab += c1o18*deltaP;
-					//mfaba += c1o18*deltaP;
-					//mfcba += c1o18*deltaP;
-					//mfbaa += c1o18*deltaP;
-					//mfbca += c1o18*deltaP;
-					//mfaaa += c1o72*deltaP;
-					//mfcaa += c1o72*deltaP;
-					//mfaca += c1o72*deltaP;
-					//mfcca += c1o72*deltaP;
-					//mfcbb += c2o9 *deltaP;
-					//mfbcb += c2o9 *deltaP;
-					//mfbbc += c2o9 *deltaP;
-					//mfccb += c1o18*deltaP;
-					//mfacb += c1o18*deltaP;
-					//mfcbc += c1o18*deltaP;
-					//mfabc += c1o18*deltaP;
-					//mfbcc += c1o18*deltaP;
-					//mfbac += c1o18*deltaP;
-					//mfccc += c1o72*deltaP;
-					//mfacc += c1o72*deltaP;
-					//mfcac += c1o72*deltaP;
-					//mfaac += c1o72*deltaP;
-
-					//pStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
-
-
-
-
-					//mfabb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[dP00])*rhoToPhi/rho;
-					//mfbab -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d0P0])*rhoToPhi/rho;
-					//mfbba -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d00P])*rhoToPhi/rho;
-					//mfaab -= c1o2 * c1o18*pStar*(phi[d000]-phi[dPP0])*rhoToPhi/rho;
-					//mfcab -= c1o2 * c1o18*pStar*(phi[d000]-phi[dMP0])*rhoToPhi/rho;
-					//mfaba -= c1o2 * c1o18*pStar*(phi[d000]-phi[dP0P])*rhoToPhi/rho;
-					//mfcba -= c1o2 * c1o18*pStar*(phi[d000]-phi[dM0P])*rhoToPhi/rho;
-					//mfbaa -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0PP])*rhoToPhi/rho;
-					//mfbca -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0MP])*rhoToPhi/rho;
-					//mfaaa -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPPP])*rhoToPhi/rho;
-					//mfcaa -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMPP])*rhoToPhi/rho;
-					//mfaca -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPMP])*rhoToPhi/rho;
-					//mfcca -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMMP])*rhoToPhi/rho;
-					//mfcbb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[dM00])*rhoToPhi/rho;
-					//mfbcb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d0M0])*rhoToPhi/rho;
-					//mfbbc -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d00M])*rhoToPhi/rho;
-					//mfccb -= c1o2 * c1o18*pStar*(phi[d000]-phi[dMM0])*rhoToPhi/rho;
-					//mfacb -= c1o2 * c1o18*pStar*(phi[d000]-phi[dPM0])*rhoToPhi/rho;
-					//mfcbc -= c1o2 * c1o18*pStar*(phi[d000]-phi[dM0M])*rhoToPhi/rho;
-					//mfabc -= c1o2 * c1o18*pStar*(phi[d000]-phi[dP0M])*rhoToPhi/rho;
-					//mfbcc -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0MM])*rhoToPhi/rho;
-					//mfbac -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0PM])*rhoToPhi/rho;
-					//mfccc -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMMM])*rhoToPhi/rho;
-					//mfacc -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPMM])*rhoToPhi/rho;
-					//mfcac -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMPM])*rhoToPhi/rho;
-					//mfaac -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPPM])*rhoToPhi/rho;
-
-
-					//forcingX1 =/* muForcingX1.Eval() / rho*/ - pStar * dX1_phi * rhoToPhi / rho;
-					//forcingX2 =/* muForcingX2.Eval() / rho*/ - pStar * dX2_phi * rhoToPhi / rho;
-					//forcingX3 =/* muForcingX3.Eval() / rho*/ - pStar * dX3_phi * rhoToPhi / rho;
-
-
-					//mfabb += (-forcingX1) * c2o9;
-					//mfbab += (-forcingX2) * c2o9;
-					//mfbba += (-forcingX3) * c2o9;
-					//mfaab += (-forcingX1 - forcingX2) * c1o16;
-					//mfcab += (forcingX1 - forcingX2) * c1o16;
-					//mfaba += (-forcingX1 - forcingX3) * c1o16;
-					//mfcba += (forcingX1 - forcingX3) * c1o16;
-					//mfbaa += (-forcingX2 - forcingX3) * c1o16;
-					//mfbca += (forcingX2 - forcingX3) * c1o16;
-					//mfaaa += (-forcingX1 - forcingX2 - forcingX3) * c1o72;
-					//mfcaa += (forcingX1 - forcingX2 - forcingX3) * c1o72;
-					//mfaca += (-forcingX1 + forcingX2 - forcingX3) * c1o72;
-					//mfcca += (forcingX1 + forcingX2 - forcingX3) * c1o72;
-					//mfcbb += (forcingX1)*c2o9;
-					//mfbcb += (forcingX2)*c2o9;
-					//mfbbc += (forcingX3)*c2o9;
-					//mfccb += (forcingX1 + forcingX2) * c1o16;
-					//mfacb += (-forcingX1 + forcingX2) * c1o16;
-					//mfcbc += (forcingX1 + forcingX3) * c1o16;
-					//mfabc += (-forcingX1 + forcingX3) * c1o16;
-					//mfbcc += (forcingX2 + forcingX3) * c1o16;
-					//mfbac += (-forcingX2 + forcingX3) * c1o16;
-					//mfccc += (forcingX1 + forcingX2 + forcingX3) * c1o72;
-					//mfacc += (-forcingX1 + forcingX2 + forcingX3) * c1o72;
-					//mfcac += (forcingX1 - forcingX2 + forcingX3) * c1o72;
-					//mfaac += (-forcingX1 - forcingX2 + forcingX3) * c1o72;
-
-					//LBMReal saveForceX1 = forcingX1;
-					//LBMReal saveForceX2 = forcingX2;
-					//LBMReal saveForceX3 = forcingX3;
-
-					 vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-						(mfcbb - mfabb)) / rhoRef;
-					 vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-						(mfbcb - mfbab)) / rhoRef;
-					 vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-						(mfbbc - mfbba)) / rhoRef;
-
-
-					 //LBMReal dRhoInvX = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhcaa - mfhacc) + (mfhcca - mfhaac))) +
-						// (((mfhcba - mfhabc) + (mfhcbc - mfhaba)) + ((mfhcab - mfhacb) + (mfhccb - mfhaab))) +
-						// (mfhcbb - mfhabb)));
-					 //LBMReal dRhoInvY = -(((((mfhccc - mfhaaa) + (mfhaca - mfhcac)) + ((mfhacc - mfhcaa) + (mfhcca - mfhaac))) +
-						// (((mfhbca - mfhbac) + (mfhbcc - mfhbaa)) + ((mfhacb - mfhcab) + (mfhccb - mfhaab))) +
-						// (mfhbcb - mfhbab)));
-					 //LBMReal dRhoInvZ = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhacc - mfhcaa) + (mfhaac - mfhcca))) +
-						// (((mfhbac - mfhbca) + (mfhbcc - mfhbaa)) + ((mfhabc - mfhcba) + (mfhcbc - mfhaba))) +
-						// (mfhbbc - mfhbba)));
-
-
-					 forcingX1 = 0.0;
-					 forcingX2 = 0.0;
-					 forcingX3 = 0.0;
-					//!Abbas
-					//LBMReal dX1_rhoInv = gradX1_rhoInv(rhoL, rhoH - rhoL);
-					//LBMReal dX2_rhoInv = gradX2_rhoInv(rhoL, rhoH - rhoL);
-					//LBMReal dX3_rhoInv = gradX3_rhoInv(rhoL, rhoH - rhoL);
-					//forcingX1 =/* muForcingX1.Eval() / rho*/ +pStar * dX1_rhoInv * rho;
-					//forcingX2 =/* muForcingX2.Eval() / rho*/ +pStar * dX2_rhoInv * rho;
-					//forcingX3 =/* muForcingX3.Eval() / rho*/ +pStar * dX3_rhoInv * rho;
-
-					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho + pStar * dX1_rhoInv * rho) *c1o2;
-					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho + pStar * dX2_rhoInv * rho) *c1o2;
-					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho + pStar * dX3_rhoInv * rho) *c1o2;
-					 //LBMReal FdX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-					 //LBMReal FdX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-					 //LBMReal FdX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-
-
-					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho ) ;
-					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho ) ;
-					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho ) ;
-
-					//forcingX1 = (pStar * dRhoInvX* rho *c3) ;
-					//forcingX2 = (pStar * dRhoInvY* rho *c3) ;
-					//forcingX3 = (pStar * dRhoInvZ* rho *c3) ;
-					//if (phi[d000] > 0.1 && phi[d000] < 0.9) std::cout << phi[d000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl;
-					//LBMReal forcingX1ALTERNAT = ( pStar * dX1_rhoInv * rho) ;
-					//LBMReal forcingX2ALTERNAT = ( pStar * dX2_rhoInv * rho) ;
-					//LBMReal forcingX3ALTERNAT = ( pStar * dX3_rhoInv * rho) ;
-
-					//forcingX1 = (fabs(vvx + c1o2 * forcingX1) < fabs(vvx + c1o2 * forcingX1ALTERNAT)) ? forcingX1 : forcingX1ALTERNAT;
-					//forcingX2 = (fabs(vvy + c1o2 * forcingX2) < fabs(vvy + c1o2 * forcingX2ALTERNAT)) ? forcingX2 : forcingX2ALTERNAT;
-					//forcingX3 = (fabs(vvz + c1o2 * forcingX3) < fabs(vvz + c1o2 * forcingX3ALTERNAT)) ? forcingX3 : forcingX3ALTERNAT;
-
-					//	 forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-					//	 forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-					//	 forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale;
-
-					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX1_rhoInv * rho*(phi[d000]));
-					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX2_rhoInv * rho*(phi[d000]));
-					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX3_rhoInv * rho*(phi[d000]));
-						 //if (phi[d000] > 0.3 && phi[d000] < 0.7)
-						 //{
-							// int test = 1;
-							// std::cout << phi[d000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale/ dX1_phi<< std::endl;
-						 //}
-
-
-
-					 //LBMReal scaleGrad = c2 * phi[d000] * (1.0 - phi[d000]) / ((phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])) * (phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])));
-					 //dX1_phi *= scaleGrad;
-					 //dX2_phi *= scaleGrad;
-					 //dX3_phi *= scaleGrad;
-
-					 ///Experimental interface sharpening force 20.06.2022
-
-					 //LBMReal scaleSharpener = 1.0;
-					 //forcingX1 += scaleSharpener * (FdX1_phi - dX1_phi) * fabsf(FdX1_phi - dX1_phi)  / rho;
-					 //forcingX2 += scaleSharpener * (FdX2_phi - dX2_phi) * fabsf(FdX2_phi - dX2_phi)  / rho;
-					 //forcingX3 += scaleSharpener * (FdX3_phi - dX3_phi) * fabsf(FdX3_phi - dX3_phi)  / rho;
-					///surface tension force
-					forcingX1 += mu * dX1_phi/rho;
-					forcingX2 += mu * dX2_phi/rho;
-					forcingX3 += mu * dX3_phi/rho;
-
-					//LBMReal forcingBIAS = 0.5;
-					forcingX1 += muForcingX1.Eval() / rho;//*phi[d000];
-					forcingX2 += muForcingX2.Eval() / rho;// * phi[d000];
-					forcingX3 += muForcingX3.Eval() / rho;// * phi[d000];
-
-				//	//19.08.2022
-					//vvx += vvxh / rho * c1o2;
-					//vvy += vvyh / rho * c1o2;
-					//vvz += vvzh / rho * c1o2;
-				//	//
-
-
-					vvx += (forcingX1) * deltaT * c1o2;
-					vvy += (forcingX2) * deltaT * c1o2;
-					vvz += (forcingX3) * deltaT * c1o2;
-
-					//vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT *  c1o2; // X
-					//vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT *  c1o2; // Y
-					//vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT *  c1o2; // Z
-
-
-
-				//	vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT * forcingBIAS; // X
-				//	vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT * forcingBIAS; // Y
-				//	vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT * forcingBIAS; // Z
-
-
-
-					//Abbas
-					//LBMReal M200 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) ))
-					//	+ ((mfabb + mfcbb))) );
-					//LBMReal M020 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-					//	+ (((mfaab + mfccb) + (mfacb + mfcab))  + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-					//	+ ( (mfbab + mfbcb) )) );
-					//LBMReal M002 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
-					//	+ ( + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
-					//	+ ( (mfbba + mfbbc))));
-
-					//LBMReal M110 = ((((((mfaaa + mfccc) + (-mfcac - mfaca)) + ((mfaac + mfcca) + (-mfcaa -mfacc)))
-					//	+ (((mfaab + mfccb) + (-mfacb - mfcab))   ))
-					//	) );
-					//LBMReal M101 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ((mfcac + mfaca) - (mfcaa + mfacc)))
-					//	+ (((mfaba + mfcbc) + (-mfabc - mfcba))))
-					//	));
-					//LBMReal M011 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ( (mfcaa + mfacc)- (mfcac + mfaca)))
-					//	+ (((mfbaa + mfbcc) + (-mfbac - mfbca))))
-					//	));
-					real vvxI = vvx;
-					real vvyI = vvy;
-					real vvzI = vvz;
-
-					//LBMReal collFactorStore=collFactorM;
-					//LBMReal stress;
-					//for(int iter=0;iter<5;iter++)
-				 //{
-					//	LBMReal OxxPyyPzz = 1.0;
-					//	LBMReal mxxPyyPzz = (M200-vvxI*vvxI) + (M020-vvyI*vvyI) + (M002-vvzI*vvzI);
-					//	//pStar = mxxPyyPzz * c1o3;
-					//mxxPyyPzz -= c3 *pStar;
-
-					//LBMReal mxxMyy = (M200-vvxI*vvxI) - (M020-vvyI*vvyI);
-					//LBMReal mxxMzz = (M200-vvxI*vvxI) - (M002-vvzI*vvzI);
-					//LBMReal mxy = M110 - vvxI * vvyI;
-					//LBMReal mxz = M101 - vvxI * vvzI;
-					//LBMReal myz = M011 - vvyI * vvzI;
-
-
-					//mxxMyy *= c1 - collFactorM * c1o2;
-					//mxxMzz *= c1 - collFactorM * c1o2;
-					//mxy *= c1 - collFactorM * c1o2;
-					//mxz *= c1 - collFactorM * c1o2;
-					//myz *= c1 - collFactorM * c1o2;
-					//mxxPyyPzz *= c1 - OxxPyyPzz * c1o2;
-					////mxxPyyPzz = mxxPyyPzz*fabs(mxxPyyPzz)/(1.0e-6+fabs(mxxPyyPzz));
-					////mxxPyyPzz += c3 * pStar;
-					//LBMReal mxx = (mxxMyy + mxxMzz + mxxPyyPzz)*c1o3;
-					//LBMReal myy = (-c2*mxxMyy + mxxMzz + mxxPyyPzz)*c1o3;
-					//LBMReal mzz = (mxxMyy -c2* mxxMzz + mxxPyyPzz) * c1o3;
-					//vvxI = vvx - (mxx * dX1_phi + mxy * dX2_phi + mxz * dX3_phi) * rhoToPhi / (rho);
-					//vvyI = vvy - (mxy * dX1_phi + myy * dX2_phi + myz * dX3_phi) * rhoToPhi / (rho);
-					//vvzI = vvz - (mxz * dX1_phi + myz * dX2_phi + mzz * dX3_phi) * rhoToPhi / (rho);
-
-
-				////	vvzI = vvz + (mxz * dRhoInvX + myz * dRhoInvY + mzz * dRhoInvZ) *  (rho)*c3;
-				////	vvxI = vvx + (mxx * dRhoInvX + mxy * dRhoInvY + mxz * dRhoInvZ) *  (rho)*c3;
-				////	vvyI = vvy + (mxy * dRhoInvX + myy * dRhoInvY + myz * dRhoInvZ) *  (rho)*c3;
-
-
-				//	//LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
-				//	//
-				//	//LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-				//	//LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-				//	//LBMReal Dxy = -three * collFactorM * mxy;
-				//	//LBMReal Dxz = -three * collFactorM * mxz;
-				//	//LBMReal Dyz = -three * collFactorM * myz;
-				//	////LBMReal stress = sqrt(sqrt((dyuy+dxux+dzuz)* (dyuy + dxux + dzuz))) * sqrt(forcingX1 * forcingX1 + forcingX2 * forcingX2 + forcingX3 * forcingX3);
-				//	// stress = sqrt(dyuy * dyuy + dxux * dxux + dzuz*dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz)*sqrt(forcingX1*forcingX1+forcingX2*forcingX2+forcingX3*forcingX3);
-				//	////collFactorM = collFactorStore + (1.75 - collFactorStore) * stress / (stress + 1.0e-8);
-				//	//
-				//	//LBMReal dX2_rho = (rhoToPhi)*dX2_phi;
-				//	//LBMReal dX1_rho = (rhoToPhi)*dX1_phi;
-				//	//LBMReal dX3_rho = (rhoToPhi)*dX3_phi;
-				//	////vvxI= vvx+ c1o6 * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
-				//	////vvyI= vvy+ c1o6 * (c1 / collFactorM - c1o2) * (Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
-				//	////vvzI= vvz+ c1o6 * (c1 / collFactorM - c1o2) * (Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
-
-				//	//vvxI = vvx + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
-				//	//vvyI = vvy + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
-				//	//vvzI = vvz + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
-
-				//	////vvxI = vvx - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rhoInv + Dxy * dX2_rhoInv + Dxz * dX3_rhoInv);
-				//	////vvyI = vvy - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (Dxy * dX1_rhoInv + 2 * dyuy * dX2_rhoInv + Dyz * dX3_rhoInv);
-				//	////vvzI = vvz - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (Dxz * dX1_rhoInv + Dyz * dX2_rhoInv + 2 * dyuy * dX3_rhoInv);
-
-
-					//}
-				//	//forcingX1+=(vvxI-vvx)/(deltaT* forcingBIAS) + muForcingX1.Eval() / rho;
-				//	//forcingX2 += (vvyI - vvy) / (deltaT * forcingBIAS) + muForcingX2.Eval() / rho;
-				//	//forcingX3 += (vvzI - vvz) / (deltaT * forcingBIAS) + muForcingX3.Eval() / rho;
-
-
-				////	forcingX1 += c2 * (vvxI - vvx);
-				////	forcingX2 += c2 * (vvyI - vvy);
-				////	forcingX3 += c2 * (vvzI - vvz);
-
-
-					//mfabb += c1o2*(-forcingX1) * c2o9;
-					//mfbab += c1o2*(-forcingX2) * c2o9;
-					//mfbba += c1o2*(-forcingX3) * c2o9;
-					//mfaab += c1o2*(-forcingX1 - forcingX2) * c1o18;
-					//mfcab += c1o2*( forcingX1 - forcingX2) * c1o18;
-					//mfaba += c1o2*(-forcingX1 - forcingX3) * c1o18;
-					//mfcba += c1o2*( forcingX1 - forcingX3) * c1o18;
-					//mfbaa += c1o2*(-forcingX2 - forcingX3) * c1o18;
-					//mfbca += c1o2*( forcingX2 - forcingX3) * c1o18;
-					//mfaaa += c1o2*(-forcingX1 - forcingX2 - forcingX3) * c1o72;
-					//mfcaa += c1o2*(forcingX1 - forcingX2 - forcingX3) * c1o72;
-					//mfaca += c1o2*(-forcingX1 + forcingX2 - forcingX3) * c1o72;
-					//mfcca += c1o2*(forcingX1 + forcingX2 - forcingX3) * c1o72;
-					//mfcbb += c1o2*(forcingX1)*c2o9;
-					//mfbcb += c1o2*(forcingX2)*c2o9;
-					//mfbbc += c1o2*(forcingX3)*c2o9;
-					//mfccb += c1o2*( forcingX1 + forcingX2) * c1o18;
-					//mfacb += c1o2*(-forcingX1 + forcingX2) * c1o18;
-					//mfcbc += c1o2*( forcingX1 + forcingX3) * c1o18;
-					//mfabc += c1o2*(-forcingX1 + forcingX3) * c1o18;
-					//mfbcc += c1o2*( forcingX2 + forcingX3) * c1o18;
-					//mfbac += c1o2*(-forcingX2 + forcingX3) * c1o18;
-					//mfccc += c1o2*(forcingX1 + forcingX2 + forcingX3) * c1o72;
-					//mfacc += c1o2*(-forcingX1 + forcingX2 + forcingX3) * c1o72;
-					//mfcac += c1o2*(forcingX1 - forcingX2 + forcingX3) * c1o72;
-					//mfaac += c1o2*(-forcingX1 - forcingX2 + forcingX3) * c1o72;
-
-
-					//forcingX1 = saveForceX1;
-					//forcingX2 = saveForceX2;
-					//forcingX3 = saveForceX3;
-					vvx = vvxI;
-					vvy = vvyI;
-					vvz = vvzI;
-
-
-
-					//!Abbas
-
-					real vx2;
-					real vy2;
-					real vz2;
-					vx2 = vvx * vvx;
-					vy2 = vvy * vvy;
-					vz2 = vvz * vvz;
-					//pStar =ppStar- (vx2 + vy2 + vz2)*pStar;
-				//	pStar = (pStar + ppStar)*c1o2;
-					///////////////////////////////////////////////////////////////////////////////////////////               
-					real oMdrho;
-					///////////////
-						//mfabb -= pStar * c2o9;
-						//mfbab -= pStar * c2o9;
-						//mfbba -= pStar * c2o9;
-						//mfaab -= pStar * c1o16;
-						//mfcab -= pStar * c1o16;
-						//mfaba -= pStar * c1o16;
-						//mfcba -= pStar * c1o16;
-						//mfbaa -= pStar * c1o16;
-						//mfbca -= pStar * c1o16;
-						//mfaaa -= pStar * c1o72;
-						//mfcaa -= pStar * c1o72;
-						//mfaca -= pStar * c1o72;
-						//mfcca -= pStar * c1o72;
-						//mfcbb -= pStar * c2o9;
-						//mfbcb -= pStar * c2o9;
-						//mfbbc -= pStar * c2o9;
-						//mfccb -= pStar * c1o16;
-						//mfacb -= pStar * c1o16;
-						//mfcbc -= pStar * c1o16;
-						//mfabc -= pStar * c1o16;
-						//mfbcc -= pStar * c1o16;
-						//mfbac -= pStar * c1o16;
-						//mfccc -= pStar * c1o72;
-						//mfacc -= pStar * c1o72;
-						//mfcac -= pStar * c1o72;
-						//mfaac -= pStar * c1o72;
-						//mfbbb -= pStar * 8.0/9.0;
-					///////////////////
-
-					oMdrho = mfccc + mfaaa;
-					m0 = mfaca + mfcac;
-					m1 = mfacc + mfcaa;
-					m2 = mfaac + mfcca;
-					oMdrho += m0;
-					m1 += m2;
-					oMdrho += m1;
-					m0 = mfbac + mfbca;
-					m1 = mfbaa + mfbcc;
-					m0 += m1;
-					m1 = mfabc + mfcba;
-					m2 = mfaba + mfcbc;
-					m1 += m2;
-					m0 += m1;
-					m1 = mfacb + mfcab;
-					m2 = mfaab + mfccb;
-					m1 += m2;
-					m0 += m1;
-					oMdrho += m0;
-					m0 = mfabb + mfcbb;
-					m1 = mfbab + mfbcb;
-					m2 = mfbba + mfbbc;
-					m0 += m1 + m2;
-					m0 += mfbbb; //hat gefehlt
-					oMdrho = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
-
-															 ////////////////////////////////////////////////////////////////////////////////////
-					real wadjust;
-					real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000])); //real qudricLimit = 0.01;
-					////////////////////////////////////////////////////////////////////////////////////
-					//Hin
-					////////////////////////////////////////////////////////////////////////////////////
-					// mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Z - Dir
-					m2 = mfaaa + mfaac;
-					m1 = mfaac - mfaaa;
-					m0 = m2 + mfaab;
-					mfaaa = m0;
-					m0 += c1o36 * oMdrho;
-					mfaab = m1 - m0 * vvz;
-					mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaba + mfabc;
-					m1 = mfabc - mfaba;
-					m0 = m2 + mfabb;
-					mfaba = m0;
-					m0 += c1o9 * oMdrho;
-					mfabb = m1 - m0 * vvz;
-					mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaca + mfacc;
-					m1 = mfacc - mfaca;
-					m0 = m2 + mfacb;
-					mfaca = m0;
-					m0 += c1o36 * oMdrho;
-					mfacb = m1 - m0 * vvz;
-					mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbaa + mfbac;
-					m1 = mfbac - mfbaa;
-					m0 = m2 + mfbab;
-					mfbaa = m0;
-					m0 += c1o9 * oMdrho;
-					mfbab = m1 - m0 * vvz;
-					mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbba + mfbbc;
-					m1 = mfbbc - mfbba;
-					m0 = m2 + mfbbb;
-					mfbba = m0;
-					m0 += c4o9 * oMdrho;
-					mfbbb = m1 - m0 * vvz;
-					mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbca + mfbcc;
-					m1 = mfbcc - mfbca;
-					m0 = m2 + mfbcb;
-					mfbca = m0;
-					m0 += c1o9 * oMdrho;
-					mfbcb = m1 - m0 * vvz;
-					mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcaa + mfcac;
-					m1 = mfcac - mfcaa;
-					m0 = m2 + mfcab;
-					mfcaa = m0;
-					m0 += c1o36 * oMdrho;
-					mfcab = m1 - m0 * vvz;
-					mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcba + mfcbc;
-					m1 = mfcbc - mfcba;
-					m0 = m2 + mfcbb;
-					mfcba = m0;
-					m0 += c1o9 * oMdrho;
-					mfcbb = m1 - m0 * vvz;
-					mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcca + mfccc;
-					m1 = mfccc - mfcca;
-					m0 = m2 + mfccb;
-					mfcca = m0;
-					m0 += c1o36 * oMdrho;
-					mfccb = m1 - m0 * vvz;
-					mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					// mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Y - Dir
-					m2 = mfaaa + mfaca;
-					m1 = mfaca - mfaaa;
-					m0 = m2 + mfaba;
-					mfaaa = m0;
-					m0 += c1o6 * oMdrho;
-					mfaba = m1 - m0 * vvy;
-					mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaab + mfacb;
-					m1 = mfacb - mfaab;
-					m0 = m2 + mfabb;
-					mfaab = m0;
-					mfabb = m1 - m0 * vvy;
-					mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaac + mfacc;
-					m1 = mfacc - mfaac;
-					m0 = m2 + mfabc;
-					mfaac = m0;
-					m0 += c1o18 * oMdrho;
-					mfabc = m1 - m0 * vvy;
-					mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbaa + mfbca;
-					m1 = mfbca - mfbaa;
-					m0 = m2 + mfbba;
-					mfbaa = m0;
-					m0 += c2o3 * oMdrho;
-					mfbba = m1 - m0 * vvy;
-					mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbab + mfbcb;
-					m1 = mfbcb - mfbab;
-					m0 = m2 + mfbbb;
-					mfbab = m0;
-					mfbbb = m1 - m0 * vvy;
-					mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfbac + mfbcc;
-					m1 = mfbcc - mfbac;
-					m0 = m2 + mfbbc;
-					mfbac = m0;
-					m0 += c2o9 * oMdrho;
-					mfbbc = m1 - m0 * vvy;
-					mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcaa + mfcca;
-					m1 = mfcca - mfcaa;
-					m0 = m2 + mfcba;
-					mfcaa = m0;
-					m0 += c1o6 * oMdrho;
-					mfcba = m1 - m0 * vvy;
-					mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcab + mfccb;
-					m1 = mfccb - mfcab;
-					m0 = m2 + mfcbb;
-					mfcab = m0;
-					mfcbb = m1 - m0 * vvy;
-					mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfcac + mfccc;
-					m1 = mfccc - mfcac;
-					m0 = m2 + mfcbc;
-					mfcac = m0;
-					m0 += c1o18 * oMdrho;
-					mfcbc = m1 - m0 * vvy;
-					mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					// mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// X - Dir
-					m2 = mfaaa + mfcaa;
-					m1 = mfcaa - mfaaa;
-					m0 = m2 + mfbaa;
-					mfaaa = m0;
-					m0 += 1. * oMdrho;
-					mfbaa = m1 - m0 * vvx;
-					mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaba + mfcba;
-					m1 = mfcba - mfaba;
-					m0 = m2 + mfbba;
-					mfaba = m0;
-					mfbba = m1 - m0 * vvx;
-					mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaca + mfcca;
-					m1 = mfcca - mfaca;
-					m0 = m2 + mfbca;
-					mfaca = m0;
-					m0 += c1o3 * oMdrho;
-					mfbca = m1 - m0 * vvx;
-					mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaab + mfcab;
-					m1 = mfcab - mfaab;
-					m0 = m2 + mfbab;
-					mfaab = m0;
-					mfbab = m1 - m0 * vvx;
-					mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfabb + mfcbb;
-					m1 = mfcbb - mfabb;
-					m0 = m2 + mfbbb;
-					mfabb = m0;
-					mfbbb = m1 - m0 * vvx;
-					mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfacb + mfccb;
-					m1 = mfccb - mfacb;
-					m0 = m2 + mfbcb;
-					mfacb = m0;
-					mfbcb = m1 - m0 * vvx;
-					mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfaac + mfcac;
-					m1 = mfcac - mfaac;
-					m0 = m2 + mfbac;
-					mfaac = m0;
-					m0 += c1o3 * oMdrho;
-					mfbac = m1 - m0 * vvx;
-					mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfabc + mfcbc;
-					m1 = mfcbc - mfabc;
-					m0 = m2 + mfbbc;
-					mfabc = m0;
-					mfbbc = m1 - m0 * vvx;
-					mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					m2 = mfacc + mfccc;
-					m1 = mfccc - mfacc;
-					m0 = m2 + mfbcc;
-					mfacc = m0;
-					m0 += c1o9 * oMdrho;
-					mfbcc = m1 - m0 * vvx;
-					mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-					////////////////////////////////////////////////////////////////////////////////////
-					// Cumulants
-					////////////////////////////////////////////////////////////////////////////////////
-
-					// mfaaa = 0.0;
-					real OxxPyyPzz = 1.0; //omega2 or bulk viscosity
-											//  LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
-											//  LBMReal OxyyMxzz  = 1.;//2+s9;//
-					real O4 = 1.;
-					real O5 = 1.;
-					real O6 = 1.;
-
-					//collFactorM+= (1.7 - collFactorM) * fabs(mfaaa) / (fabs(mfaaa) + 0.001f);
-
-
-					/////fourth order parameters; here only for test. Move out of loop!
-
-					real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-					real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-				    real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-					real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' )
-					real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-					//LBMReal stress = 1.0;// stress / (stress + 1.0e-10);
-					//stress = 1.0;
-					//OxyyPxzz += stress*(1.0-OxyyPxzz);
-					//OxyyPxzz = c3 * (collFactorM - c2) / (collFactorM - c3);
-					//OxyyMxzz += stress*(1.0-OxyyMxzz);
-					//Oxyz +=  stress*(1.0-Oxyz);
-					//A *= 1.0-stress;
-					//BB *= 1.0-stress;
-
-					//Cum 4.
-					//LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-					//LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-					//LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-					real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-					real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-					real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-					real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-					real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-					real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-
-					//Cum 5.
-					real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-					real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-					real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-					//Cum 6.
-					real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-						- 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-							+ 2. * (mfcaa * mfaca * mfaac)
-							+ 16. * mfbba * mfbab * mfabb)
-						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-					//2.
-					// linear combinations
-					real mxxPyyPzz = mfcaa + mfaca + mfaac;
-					//pStar = (mxxPyyPzz+vx2+vy2+vz2) * c1o3;//does not work
-					//pStar = (mxxPyyPzz) * c1o3;
-					//pStar = pStar + 1.5 * (mxxPyyPzz * c1o3 - pStar);
-					//mfaaa = mxxPyyPzz;
-					//  LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho));
-					mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa
-										//mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
-					real mxxMyy = mfcaa - mfaca;
-					real mxxMzz = mfcaa - mfaac;
-
-					///
-					real mmfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-					real mmfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-					real mmfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-					real mmfabb = mfabb;
-					real mmfbab = mfbab;
-					real mmfbba = mfbba;
-					///
-
-					real dxux =  -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz)*0;
-					//LBMReal dxux = -c1o2 * (mxxMyy + mxxMzz) * collFactorM - mfaaa * c1o3* omegaDRho;
-					real dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
-					real dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
-					real Dxy = -c3o1 * collFactorM * mfbba;
-					real Dxz = -c3o1 * collFactorM * mfbab;
-					real Dyz = -c3o1 * collFactorM * mfabb;
-//					// attempt to improve implicit  stress computation by fixed iteration
-//					LBMReal dX2_rho = (rhoToPhi)*dX2_phi;
-//					LBMReal dX1_rho = (rhoToPhi)*dX1_phi;
-//					LBMReal dX3_rho = (rhoToPhi)*dX3_phi;
-//
-//						LBMReal dfx= c1o3 * (c1 / collFactorM - c1o2) *(2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
-//						LBMReal dfy = c1o3 * (c1 / collFactorM - c1o2) *(Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
-//						LBMReal dfz = c1o3 * (c1 / collFactorM - c1o2) *(Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
-//
-//						for (int iteration = 0; iteration < 5; iteration++) {
-//							mxxMyy = (mfcaa - dfx * dfx * c1o2) - (mfaca - dfy * dfy * c1o2);
-//							mxxMzz = (mfcaa - dfx * dfx * c1o2) - (mfaac - dfz * dfz * c1o2);
-//						}
-/////end fixed iteration
-//
-
-
-					//relax
-					mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-					mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-					mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-					mfabb += collFactorM * (-mfabb);
-					mfbab += collFactorM * (-mfbab);
-					mfbba += collFactorM * (-mfbba);
-
-					//if (fabsf(mfaaa + (dxux + dyuy + dzuz) > 1e-9)){
-					//	std::cout << mfaaa <<" "<< (dxux + dyuy + dzuz)<< std::endl;
-					//}
-
-
-					////updated pressure
-					//mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling;
-					//mfaaa *= (one-omegaDRho);// (mfaaa + (dxux + dyuy + dzuz)) * .5; // Pressure elimination as in standard velocity model
-								 //  mfaaa += (rho - c1) * (dxux + dyuy + dzuz);
-				
-					mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
-
-										// mxxPyyPzz += (mfaaa + mfaaaS) * c1o2;
-										//mfaaa = mfaaaS;
-										// linear combinations back
-					mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-					mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-					mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-					//3.
-					// linear combinations
-					real mxxyPyzz = mfcba + mfabc;
-					real mxxyMyzz = mfcba - mfabc;
-
-					real mxxzPyyz = mfcab + mfacb;
-					real mxxzMyyz = mfcab - mfacb;
-
-					real mxyyPxzz = mfbca + mfbac;
-					real mxyyMxzz = mfbca - mfbac;
-
-					 mmfcaa += c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz- mfaaa);
-					 mmfaca += c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz- mfaaa);
-					 mmfaac += c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz- mfaaa);
-					 mmfabb += mfabb;
-					 mmfbab += mfbab;
-					 mmfbba += mfbba;
-
-					//relax
-					wadjust = Oxyz + (1. - Oxyz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-					mfbbb += wadjust * (-mfbbb);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-					mxxyPyzz += wadjust * (-mxxyPyzz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-					mxxyMyzz += wadjust * (-mxxyMyzz);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-					mxxzPyyz += wadjust * (-mxxzPyyz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-					mxxzMyyz += wadjust * (-mxxzMyyz);
-					wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-					mxyyPxzz += wadjust * (-mxyyPxzz);
-					wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-					mxyyMxzz += wadjust * (-mxyyMxzz);
-
-					// linear combinations back
-					mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-					mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-					mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-					mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-					mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-					mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-					//4.
-					CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-					CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-					CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-					CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc);
-					CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb);
-					CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb);
-
-					//5.
-					CUMbcc += O5 * (-CUMbcc);
-					CUMcbc += O5 * (-CUMcbc);
-					CUMccb += O5 * (-CUMccb);
-
-					//6.
-					CUMccc += O6 * (-CUMccc);
-
-					//back cumulants to central moments
-					//4.
-					//mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-					//mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-					//mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-					mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-					mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-					mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-					mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-					mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-					mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-
-					//5.
-					mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-					mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-					mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-					//6.
-					mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-						- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-						- 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-						- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-						+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-							+ 2. * (mfcaa * mfaca * mfaac)
-							+ 16. * mfbba * mfbab * mfabb)
-						- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-						- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-						+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-							+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-
-					////////
-
-
-					////////////////////////////////////////////////////////////////////////////////////
-					//forcing
-					mfbaa = -mfbaa;// *(c1 - forcingBIAS) / forcingBIAS;
-					mfaba = -mfaba;// *(c1 - forcingBIAS) / forcingBIAS;
-					mfaab = -mfaab;// *(c1 - forcingBIAS) / forcingBIAS;
-
-					//mfbaa += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (2 * dxux * dX1_phi + Dxy * dX2_phi + Dxz * dX3_phi) / (rho);
-					//mfaba += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxy * dX1_phi + 2 * dyuy * dX2_phi + Dyz * dX3_phi) / (rho);
-					//mfaab += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxz * dX1_phi + Dyz * dX2_phi + 2 * dyuy * dX3_phi) / (rho);
-
-					mfbaa -= c1o2 * rhoToPhi * (mmfcaa* dX1_phi + mmfbba * dX2_phi + mmfbab * dX3_phi) / (rho);
-					mfaba -= c1o2 * rhoToPhi * (mmfbba* dX1_phi + mmfaca * dX2_phi + mmfabb * dX3_phi) / (rho);
-					mfaab -= c1o2 * rhoToPhi * (mmfbab* dX1_phi + mmfabb * dX2_phi + mmfaac * dX3_phi) / (rho);
-					
-					vvx -= c1o4 * rhoToPhi * (mmfcaa * dX1_phi + mmfbba * dX2_phi + mmfbab * dX3_phi) / (rho);
-					vvy -= c1o4 * rhoToPhi * (mmfbba * dX1_phi + mmfaca * dX2_phi + mmfabb * dX3_phi) / (rho);
-					vvz -= c1o4 * rhoToPhi * (mmfbab * dX1_phi + mmfabb * dX2_phi + mmfaac * dX3_phi) / (rho);
-
-					vx2 = vvx * vvx;
-					vy2 = vvy * vvy;
-					vz2 = vvz * vvz;
-
-					//mmfcaa =0;// c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz - mfaaa);
-					//mmfaca =0;// c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz - mfaaa);
-					//mmfaac =0;// c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz - mfaaa);
-					//mmfabb =0;// mfabb;
-					//mmfbab =0;// mfbab;
-					//mmfbba =0;// mfbba;
-
-
-					//////////////////////////////////////////////////////////////////////////////////////
-					//grad Rho
-					//LBMReal dX1_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX1_phi - phi[d000] * three * gradPx;
-					//LBMReal dX2_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX2_phi - phi[d000] * three * gradPy;
-					//LBMReal dX3_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX3_phi - phi[d000] * three * gradPz;
-
-					//LBMReal dX2_rho = (rhoToPhi ) * dX2_phi ;
-					//LBMReal dX1_rho = (rhoToPhi ) * dX1_phi ;
-					//LBMReal dX3_rho = (rhoToPhi ) * dX3_phi ;
-					///////////////////////////////////////////////////////////////////////////////////////
-					//mfbaa += c1o3 * (c1 / collFactorM - c1o2) *(2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
-					//mfaba += c1o3 * (c1 / collFactorM - c1o2) *(Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
-					//mfaab += c1o3 * (c1 / collFactorM - c1o2) *(Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
-					
-					///////Fakhari pressure correction
-					//mfbaa -= mfaaa / rho * dX1_rho*c1o3;
-					//mfaba -= mfaaa / rho * dX2_rho*c1o3;
-					//mfaab -= mfaaa / rho * dX3_rho*c1o3;
-					////////////////////////////////////////////////////////////////////////////////////
-					//back
-					////////////////////////////////////////////////////////////////////////////////////
-					//mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Z - Dir
-					m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
-					m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-					mfaaa = m0;
-					mfaab = m1;
-					mfaac = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-					m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
-					m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-					mfaba = m0;
-					mfabb = m1;
-					mfabc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2;
-					m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-					mfaca = m0;
-					mfacb = m1;
-					mfacc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-					m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
-					m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-					mfbaa = m0;
-					mfbab = m1;
-					mfbac = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-					m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
-					m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-					mfbba = m0;
-					mfbbb = m1;
-					mfbbc = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-					m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
-					m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-					mfbca = m0;
-					mfbcb = m1;
-					mfbcc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2;
-					m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-					mfcaa = m0;
-					mfcab = m1;
-					mfcac = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-					m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
-					m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-					mfcba = m0;
-					mfcbb = m1;
-					mfcbc = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-					m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
-					m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-					mfcca = m0;
-					mfccb = m1;
-					mfccc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					//mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// Y - Dir
-					m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
-					m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfaaa = m0;
-					mfaba = m1;
-					mfaca = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
-					m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfaab = m0;
-					mfabb = m1;
-					mfacb = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
-					m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfaac = m0;
-					mfabc = m1;
-					mfacc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-					m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
-					m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-					mfbaa = m0;
-					mfbba = m1;
-					mfbca = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-					m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
-					m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-					mfbab = m0;
-					mfbbb = m1;
-					mfbcb = m2;
-					/////////b//////////////////////////////////////////////////////////////////////////
-					m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-					m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
-					m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-					mfbac = m0;
-					mfbbc = m1;
-					mfbcc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
-					m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfcaa = m0;
-					mfcba = m1;
-					mfcca = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
-					m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfcab = m0;
-					mfcbb = m1;
-					mfccb = m2;
-					/////////c//////////////////////////////////////////////////////////////////////////
-					m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-					m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
-					m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-					mfcac = m0;
-					mfcbc = m1;
-					mfccc = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					//mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-					////////////////////////////////////////////////////////////////////////////////////
-					// X - Dir
-					m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaaa = m0;
-					mfbaa = m1;
-					mfcaa = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaba = m0;
-					mfbba = m1;
-					mfcba = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaca = m0;
-					mfbca = m1;
-					mfcca = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaab = m0;
-					mfbab = m1;
-					mfcab = m2;
-					///////////b////////////////////////////////////////////////////////////////////////
-					m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
-					m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfabb = m0;
-					mfbbb = m1;
-					mfcbb = m2;
-					///////////b////////////////////////////////////////////////////////////////////////
-					m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfacb = m0;
-					mfbcb = m1;
-					mfccb = m2;
-					////////////////////////////////////////////////////////////////////////////////////
-					////////////////////////////////////////////////////////////////////////////////////
-					m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfaac = m0;
-					mfbac = m1;
-					mfcac = m2;
-					///////////c////////////////////////////////////////////////////////////////////////
-					m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
-					m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfabc = m0;
-					mfbbc = m1;
-					mfcbc = m2;
-					///////////c////////////////////////////////////////////////////////////////////////
-					m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-					m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
-					m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-					mfacc = m0;
-					mfbcc = m1;
-					mfccc = m2;
-					/////SimpleForce
-
-					//mfabb += c2o9 * deltaP;
-					//mfbab += c2o9 * deltaP;
-					//mfbba += c2o9 * deltaP;
-					//mfaab += c1o18 * deltaP;
-					//mfcab += c1o18 * deltaP;
-					//mfaba += c1o18 * deltaP;
-					//mfcba += c1o18 * deltaP;
-					//mfbaa += c1o18 * deltaP;
-					//mfbca += c1o18 * deltaP;
-					//mfaaa += c1o72 * deltaP;
-					//mfcaa += c1o72 * deltaP;
-					//mfaca += c1o72 * deltaP;
-					//mfcca += c1o72 * deltaP;
-					//mfcbb += c2o9 * deltaP;
-					//mfbcb += c2o9 * deltaP;
-					//mfbbc += c2o9 * deltaP;
-					//mfccb += c1o18 * deltaP;
-					//mfacb += c1o18 * deltaP;
-					//mfcbc += c1o18 * deltaP;
-					//mfabc += c1o18 * deltaP;
-					//mfbcc += c1o18 * deltaP;
-					//mfbac += c1o18 * deltaP;
-					//mfccc += c1o72 * deltaP;
-					//mfacc += c1o72 * deltaP;
-					//mfcac += c1o72 * deltaP;
-					//mfaac += c1o72 * deltaP;
-
-					//mfabb += c1o2*(-forcingX1                        ) * c2o9;
-					//mfbab += c1o2*(           - forcingX2            ) * c2o9;
-					//mfbba += c1o2*(                       - forcingX3) * c2o9;
-					//mfaab += c1o2*(-forcingX1 - forcingX2            ) * c1o18;
-					//mfcab += c1o2*( forcingX1 - forcingX2            ) * c1o18;
-					//mfaba += c1o2*(-forcingX1             - forcingX3) * c1o18;
-					//mfcba += c1o2*( forcingX1             - forcingX3) * c1o18;
-					//mfbaa += c1o2*(           - forcingX2 - forcingX3) * c1o18;
-					//mfbca += c1o2*(             forcingX2 - forcingX3) * c1o18;
-					//mfaaa += c1o2*(-forcingX1 - forcingX2 - forcingX3) * c1o72;
-					//mfcaa += c1o2*( forcingX1 - forcingX2 - forcingX3) * c1o72;
-					//mfaca += c1o2*(-forcingX1 + forcingX2 - forcingX3) * c1o72;
-					//mfcca += c1o2*( forcingX1 + forcingX2 - forcingX3) * c1o72;
-					//mfcbb += c1o2*( forcingX1                        ) * c2o9;
-					//mfbcb += c1o2*(             forcingX2            ) * c2o9;
-					//mfbbc += c1o2*(                         forcingX3) * c2o9;
-					//mfccb += c1o2*( forcingX1 + forcingX2            ) * c1o18;
-					//mfacb += c1o2*(-forcingX1 + forcingX2            ) * c1o18;
-					//mfcbc += c1o2*( forcingX1             + forcingX3) * c1o18;
-					//mfabc += c1o2*(-forcingX1             + forcingX3) * c1o18;
-					//mfbcc += c1o2*(             forcingX2 + forcingX3) * c1o18;
-					//mfbac += c1o2*(           - forcingX2 + forcingX3) * c1o18;
-					//mfccc += c1o2*( forcingX1 + forcingX2 + forcingX3) * c1o72;
-					//mfacc += c1o2*(-forcingX1 + forcingX2 + forcingX3) * c1o72;
-					//mfcac += c1o2*( forcingX1 - forcingX2 + forcingX3) * c1o72;
-					//mfaac += c1o2*(-forcingX1 - forcingX2 + forcingX3) * c1o72;
-					//pStarStart -= (vx2 + vy2 + vz2) * c1o3;
-
-					///Take the diffusion part with out
-
-					//mfStartcbb -= D3Q27System::getIncompFeqForDirection(D3Q27System::E  , zeroReal, vvx, vvy, vvz);
-					//mfStartbcb -= D3Q27System::getIncompFeqForDirection(D3Q27System::N  , zeroReal, vvx, vvy, vvz);
-					//mfStartbbc -= D3Q27System::getIncompFeqForDirection(D3Q27System::T  , zeroReal, vvx, vvy, vvz);
-					//mfStartccb -= D3Q27System::getIncompFeqForDirection(D3Q27System::NE , zeroReal, vvx, vvy, vvz);
-					//mfStartacb -= D3Q27System::getIncompFeqForDirection(D3Q27System::NW , zeroReal, vvx, vvy, vvz);
-					//mfStartcbc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TE , zeroReal, vvx, vvy, vvz);
-					//mfStartabc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TW , zeroReal, vvx, vvy, vvz);
-					//mfStartbcc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TN , zeroReal, vvx, vvy, vvz);
-					//mfStartbac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TS , zeroReal, vvx, vvy, vvz);
-					//mfStartccc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TNE, zeroReal, vvx, vvy, vvz);
-					//mfStartacc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TNW, zeroReal, vvx, vvy, vvz);
-					//mfStartcac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TSE, zeroReal, vvx, vvy, vvz);
-					//mfStartaac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TSW, zeroReal, vvx, vvy, vvz);
-					//mfStartabb -= D3Q27System::getIncompFeqForDirection(D3Q27System::W  , zeroReal, vvx, vvy, vvz);
-					//mfStartbab -= D3Q27System::getIncompFeqForDirection(D3Q27System::S  , zeroReal, vvx, vvy, vvz);
-					//mfStartbba -= D3Q27System::getIncompFeqForDirection(D3Q27System::B  , zeroReal, vvx, vvy, vvz);
-					//mfStartaab -= D3Q27System::getIncompFeqForDirection(D3Q27System::SW , zeroReal, vvx, vvy, vvz);
-					//mfStartcab -= D3Q27System::getIncompFeqForDirection(D3Q27System::SE , zeroReal, vvx, vvy, vvz);
-					//mfStartaba -= D3Q27System::getIncompFeqForDirection(D3Q27System::BW , zeroReal, vvx, vvy, vvz);
-					//mfStartcba -= D3Q27System::getIncompFeqForDirection(D3Q27System::BE , zeroReal, vvx, vvy, vvz);
-					//mfStartbaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BS , zeroReal, vvx, vvy, vvz);
-					//mfStartbca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BN , zeroReal, vvx, vvy, vvz);
-					//mfStartaaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BSW, zeroReal, vvx, vvy, vvz);
-					//mfStartcaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BSE, zeroReal, vvx, vvy, vvz);
-					//mfStartaca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BNW, zeroReal, vvx, vvy, vvz);
-					//mfStartcca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BNE, zeroReal, vvx, vvy, vvz);
-					//mfStartbbb -= D3Q27System::getIncompFeqForDirection(D3Q27System::REST, zeroReal, vvx, vvy, vvz);
-					//
-					//pStar += pStarStart*(omegaDRho-c1);
-
-					//mfStartcbb = c2o9 * pStar;
-					//	mfStartbcb= c2o9 * pStar;
-					//	mfStartbbc= c2o9 * pStar;
-					//	mfStartccb= c1o18 * pStar;
-					//	mfStartacb= c1o18 * pStar;
-					//	mfStartcbc= c1o18 * pStar;
-					//	mfStartabc= c1o18 * pStar;
-					//	mfStartbcc= c1o18 * pStar;
-					//	mfStartbac= c1o18 * pStar;
-					//	mfStartccc= c1o72 * pStar;
-					//	mfStartacc= c1o72 * pStar;
-					//	mfStartcac= c1o72 * pStar;
-					//	mfStartaac= c1o72 * pStar;
-					//	mfStartabb= c2o9 * pStar;
-					//	mfStartbab= c2o9 * pStar;
-					//	mfStartbba= c2o9 * pStar;
-					//	mfStartaab= c1o18 * pStar;
-					//	mfStartcab= c1o18 * pStar;
-					//	mfStartaba= c1o18 * pStar;
-					//	mfStartcba= c1o18 * pStar;
-					//	mfStartbaa= c1o18 * pStar;
-					//	mfStartbca= c1o18 * pStar;
-					//	mfStartaaa= c1o72 * pStar;
-					//	mfStartcaa= c1o72 * pStar;
-					//	mfStartaca= c1o72 * pStar;
-					//	mfStartcca= c1o72 * pStar;
-					//	mfStartbbb= c4 * c2o9 * pStar;
-
-					//mfaaa -= c1o2 * (mfStartaaa + mfStartccc)+ c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa);
-					//mfaab -= c1o2 * (mfStartaab + mfStartccb)+c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa));
-					//mfaac -= c1o2 * (mfStartaac + mfStartcca)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa);
-					//mfaba -= c1o2 * (mfStartaba + mfStartcbc)+c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa);
-					//mfabb -= c1o2 * (mfStartabb + mfStartcbb)+c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa);
-					//mfabc -= c1o2 * (mfStartabc + mfStartcba)+c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa);
-					//mfaca -= c1o2 * (mfStartaca + mfStartcac)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa);
-					//mfacb -= c1o2 * (mfStartacb + mfStartcab)+c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa));
-					//mfacc -= c1o2 * (mfStartacc + mfStartcaa)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa);
-					//mfbaa -= c1o2 * (mfStartbaa + mfStartbcc)+c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa);
-					//mfbab -= c1o2 * (mfStartbab + mfStartbcb)+c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa);
-					//mfbac -= c1o2 * (mfStartbac + mfStartbca)+c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa);
-					//mfbba -= c1o2 * (mfStartbba + mfStartbbc)+c1o9 * (c2 * mmfaac - mmfaca - mmfcaa);
-					//mfbbb -=  (mfStartbbb)-(c4o9 * (mmfaac + mmfaca + mmfcaa));
-					//mfbbc -= c1o2 * (mfStartbbc + mfStartbba)+c1o9 * (c2 * mmfaac - mmfaca - mmfcaa);
-					//mfbca -= c1o2 * (mfStartbca + mfStartbac)+c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa);
-					//mfbcb -= c1o2 * (mfStartbcb + mfStartbab)+c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa);
-					//mfbcc -= c1o2 * (mfStartbcc + mfStartbaa)+c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa);
-					//mfcaa -= c1o2 * (mfStartcaa + mfStartacc)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa);
-					//mfcab -= c1o2 * (mfStartcab + mfStartacb)+c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa));
-					//mfcac -= c1o2 * (mfStartcac + mfStartaca)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa);
-					//mfcba -= c1o2 * (mfStartcba + mfStartabc)+c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa);
-					//mfcbb -= c1o2 * (mfStartcbb + mfStartabb)+c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa);
-					//mfcbc -= c1o2 * (mfStartcbc + mfStartaba)+c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa);
-					//mfcca -= c1o2 * (mfStartcca + mfStartaac)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa);
-					//mfccb -= c1o2 * (mfStartccb + mfStartaab)+c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa));
-					//mfccc -= c1o2 * (mfStartccc + mfStartaaa)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa);
-
-					//mfhaaa =rho*( c1o2 * (mfStartaaa + mfStartccc) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa));
-					//mfhaab =rho*( c1o2 * (mfStartaab + mfStartccb) + c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa)));
-					//mfhaac =rho*( c1o2 * (mfStartaac + mfStartcca) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa));
-					//mfhaba =rho*( c1o2 * (mfStartaba + mfStartcbc) + c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa));
-					//mfhabb =rho*( c1o2 * (mfStartabb + mfStartcbb) + c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa));
-					//mfhabc =rho*( c1o2 * (mfStartabc + mfStartcba) + c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa));
-					//mfhaca =rho*( c1o2 * (mfStartaca + mfStartcac) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa));
-					//mfhacb =rho*( c1o2 * (mfStartacb + mfStartcab) + c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa)));
-					//mfhacc =rho*( c1o2 * (mfStartacc + mfStartcaa) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa));
-					//mfhbaa =rho*( c1o2 * (mfStartbaa + mfStartbcc) + c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa));
-					//mfhbab =rho*( c1o2 * (mfStartbab + mfStartbcb) + c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa));
-					//mfhbac =rho*( c1o2 * (mfStartbac + mfStartbca) + c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa));
-					//mfhbba =rho*( c1o2 * (mfStartbba + mfStartbbc) + c1o9 * (c2 * mmfaac - mmfaca - mmfcaa));
-					//mfhbbb =rho*( (mfStartbbb)-(c4o9 * (mmfaac + mmfaca + mmfcaa)));
-					//mfhbbc =rho*( c1o2 * (mfStartbbc + mfStartbba) + c1o9 * (c2 * mmfaac - mmfaca - mmfcaa));
-					//mfhbca =rho*( c1o2 * (mfStartbca + mfStartbac) + c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa));
-					//mfhbcb =rho*( c1o2 * (mfStartbcb + mfStartbab) + c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa));
-					//mfhbcc =rho*( c1o2 * (mfStartbcc + mfStartbaa) + c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa));
-					//mfhcaa =rho*( c1o2 * (mfStartcaa + mfStartacc) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa));
-					//mfhcab =rho*( c1o2 * (mfStartcab + mfStartacb) + c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa)));
-					//mfhcac =rho*( c1o2 * (mfStartcac + mfStartaca) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa));
-					//mfhcba =rho*( c1o2 * (mfStartcba + mfStartabc) + c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa));
-					//mfhcbb =rho*( c1o2 * (mfStartcbb + mfStartabb) + c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa));
-					//mfhcbc =rho*( c1o2 * (mfStartcbc + mfStartaba) + c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa));
-					//mfhcca =rho*( c1o2 * (mfStartcca + mfStartaac) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa));
-					//mfhccb =rho*( c1o2 * (mfStartccb + mfStartaab) + c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa)));
-					//mfhccc =rho*( c1o2 * (mfStartccc + mfStartaaa) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa));
-
-
-
-
-					pStar += pStarStart*(omegaDRho- c1o1);
-
-					mfcbb -= c2o9*pStar;
-					mfbcb -= c2o9*pStar;
-					mfbbc -= c2o9*pStar;
-					mfccb -= c1o18*pStar;
-					mfacb -= c1o18*pStar;
-					mfcbc -= c1o18*pStar;
-					mfabc -= c1o18*pStar;
-					mfbcc -= c1o18*pStar;
-					mfbac -= c1o18*pStar;
-					mfccc -= c1o72*pStar;
-					mfacc -= c1o72*pStar;
-					mfcac -= c1o72*pStar;
-					mfaac -= c1o72*pStar;
-					mfabb -= c2o9*pStar;
-					mfbab -= c2o9*pStar;
-					mfbba -= c2o9*pStar;
-					mfaab -= c1o18*pStar;
-					mfcab -= c1o18*pStar;
-					mfaba -= c1o18*pStar;
-					mfcba -= c1o18*pStar;
-					mfbaa -= c1o18*pStar;
-					mfbca -= c1o18*pStar;
-					mfaaa -= c1o72*pStar;
-					mfcaa -= c1o72*pStar;
-					mfaca -= c1o72*pStar;
-					mfcca -= c1o72*pStar;
-					mfbbb -= c4o1*c2o9*pStar;
-
-					mfhbcb = rho*c2o9 * pStar;
-					mfhbbc = rho*c2o9 * pStar;
-					mfhcbb = rho*c2o9 * pStar;
-					mfhccb = rho*c1o18 * pStar;
-					mfhacb = rho*c1o18 * pStar;
-					mfhcbc = rho*c1o18 * pStar;
-					mfhabc = rho*c1o18 * pStar;
-					mfhbcc = rho*c1o18 * pStar;
-					mfhbac = rho*c1o18 * pStar;
-					mfhccc = rho*c1o72 * pStar;
-					mfhacc = rho*c1o72 * pStar;
-					mfhcac = rho*c1o72 * pStar;
-					mfhaac = rho*c1o72 * pStar;
-					mfhabb = rho*c2o9 * pStar;
-					mfhbab = rho*c2o9 * pStar;
-					mfhbba = rho*c2o9 * pStar;
-					mfhaab = rho*c1o18 * pStar;
-					mfhcab = rho*c1o18 * pStar;
-					mfhaba = rho*c1o18 * pStar;
-					mfhcba = rho*c1o18 * pStar;
-					mfhbaa = rho*c1o18 * pStar;
-					mfhbca = rho*c1o18 * pStar;
-					mfhaaa = rho*c1o72 * pStar;
-					mfhcaa = rho*c1o72 * pStar;
-					mfhaca = rho*c1o72 * pStar;
-					mfhcca = rho*c1o72 * pStar;
-					mfhbbb = rho* c4o1 * c2o9 * pStar;
-
-					//mfStartbcb =  c2o9  * pStarStart;
-					//mfStartbbc =  c2o9  * pStarStart;
-					//mfStartcbb =  c2o9  * pStarStart;
-					//mfStartccb =  c1o18 * pStarStart;
-					//mfStartacb =  c1o18 * pStarStart;
-					//mfStartcbc =  c1o18 * pStarStart;
-					//mfStartabc =  c1o18 * pStarStart;
-					//mfStartbcc =  c1o18 * pStarStart;
-					//mfStartbac =  c1o18 * pStarStart;
-					//mfStartccc =  c1o72 * pStarStart;
-					//mfStartacc =  c1o72 * pStarStart;
-					//mfStartcac =  c1o72 * pStarStart;
-					//mfStartaac =  c1o72 * pStarStart;
-					//mfStartabb =  c2o9  * pStarStart;
-					//mfStartbab =  c2o9  * pStarStart;
-					//mfStartbba =  c2o9  * pStarStart;
-					//mfStartaab =  c1o18 * pStarStart;
-					//mfStartcab =  c1o18 * pStarStart;
-					//mfStartaba =  c1o18 * pStarStart;
-					//mfStartcba =  c1o18 * pStarStart;
-					//mfStartbaa =  c1o18 * pStarStart;
-					//mfStartbca =  c1o18 * pStarStart;
-					//mfStartaaa =  c1o72 * pStarStart;
-					//mfStartcaa =  c1o72 * pStarStart;
-					//mfStartaca =  c1o72 * pStarStart;
-					//mfStartcca =  c1o72 * pStarStart;
-					//mfStartbbb =  c4 * c2o9 * pStarStart;
-
-					//LBMReal scaleSplit = 0.5;
-					//mfStartbcb = mfStartbcb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
-					//mfStartbbc = mfStartbbc*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
-					//mfStartcbb = mfStartcbb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
-					//mfStartccb = mfStartccb*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartacb = mfStartacb*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartcbc = mfStartcbc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartabc = mfStartabc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartbcc = mfStartbcc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartbac = mfStartbac*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartccc = mfStartccc*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
-					//mfStartacc = mfStartacc*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
-					//mfStartcac = mfStartcac*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
-					//mfStartaac = mfStartaac*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
-					//mfStartabb = mfStartabb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
-					//mfStartbab = mfStartbab*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
-					//mfStartbba = mfStartbba*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
-					//mfStartaab = mfStartaab*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartcab = mfStartcab*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartaba = mfStartaba*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartcba = mfStartcba*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartbaa = mfStartbaa*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartbca = mfStartbca*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
-					//mfStartaaa = mfStartaaa*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
-					//mfStartcaa = mfStartcaa*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
-					//mfStartaca = mfStartaca*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
-					//mfStartcca = mfStartcca*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
-					//mfStartbbb = mfStartbbb*scaleSplit+(c1-scaleSplit)* c4 * c2o9 * pStarStart;
-
-
-					//mfaaa -= c1o2 * (mfStartaaa + mfStartccc);
-     //               mfaab -= c1o2 * (mfStartaab + mfStartccb);
-     //               mfaac -= c1o2 * (mfStartaac + mfStartcca);
-     //               mfaba -= c1o2 * (mfStartaba + mfStartcbc);
-     //               mfabb -= c1o2 * (mfStartabb + mfStartcbb);
-     //               mfabc -= c1o2 * (mfStartabc + mfStartcba);
-     //               mfaca -= c1o2 * (mfStartaca + mfStartcac);
-     //               mfacb -= c1o2 * (mfStartacb + mfStartcab);
-     //               mfacc -= c1o2 * (mfStartacc + mfStartcaa);
-     //               mfbaa -= c1o2 * (mfStartbaa + mfStartbcc);
-     //               mfbab -= c1o2 * (mfStartbab + mfStartbcb);
-     //               mfbac -= c1o2 * (mfStartbac + mfStartbca);
-     //               mfbba -= c1o2 * (mfStartbba + mfStartbbc);
-					//mfbbb -= (mfStartbbb);
-     //               mfbbc -= c1o2 * (mfStartbbc + mfStartbba);
-     //               mfbca -= c1o2 * (mfStartbca + mfStartbac);
-     //               mfbcb -= c1o2 * (mfStartbcb + mfStartbab);
-     //               mfbcc -= c1o2 * (mfStartbcc + mfStartbaa);
-     //               mfcaa -= c1o2 * (mfStartcaa + mfStartacc);
-     //               mfcab -= c1o2 * (mfStartcab + mfStartacb);
-     //               mfcac -= c1o2 * (mfStartcac + mfStartaca);
-     //               mfcba -= c1o2 * (mfStartcba + mfStartabc);
-     //               mfcbb -= c1o2 * (mfStartcbb + mfStartabb);
-     //               mfcbc -= c1o2 * (mfStartcbc + mfStartaba);
-     //               mfcca -= c1o2 * (mfStartcca + mfStartaac);
-     //               mfccb -= c1o2 * (mfStartccb + mfStartaab);
-     //               mfccc -= c1o2 * (mfStartccc + mfStartaaa);
-					//												
-					//mfhaaa += rho*c1o2 * (mfStartaaa + mfStartccc);
-					//mfhaab += rho*c1o2 * (mfStartaab + mfStartccb);
-					//mfhaac += rho*c1o2 * (mfStartaac + mfStartcca);
-					//mfhaba += rho*c1o2 * (mfStartaba + mfStartcbc);
-					//mfhabb += rho*c1o2 * (mfStartabb + mfStartcbb);
-					//mfhabc += rho*c1o2 * (mfStartabc + mfStartcba);
-					//mfhaca += rho*c1o2 * (mfStartaca + mfStartcac);
-					//mfhacb += rho*c1o2 * (mfStartacb + mfStartcab);
-					//mfhacc += rho*c1o2 * (mfStartacc + mfStartcaa);
-					//mfhbaa += rho*c1o2 * (mfStartbaa + mfStartbcc);
-					//mfhbab += rho*c1o2 * (mfStartbab + mfStartbcb);
-					//mfhbac += rho*c1o2 * (mfStartbac + mfStartbca);
-					//mfhbba += rho*c1o2 * (mfStartbba + mfStartbbc);
-					//mfhbbb += rho*(mfStartbbb);
-					//mfhbbc += rho*c1o2 * (mfStartbbc + mfStartbba);
-					//mfhbca += rho*c1o2 * (mfStartbca + mfStartbac);
-					//mfhbcb += rho*c1o2 * (mfStartbcb + mfStartbab);
-					//mfhbcc += rho*c1o2 * (mfStartbcc + mfStartbaa);
-					//mfhcaa += rho*c1o2 * (mfStartcaa + mfStartacc);
-					//mfhcab += rho*c1o2 * (mfStartcab + mfStartacb);
-					//mfhcac += rho*c1o2 * (mfStartcac + mfStartaca);
-					//mfhcba += rho*c1o2 * (mfStartcba + mfStartabc);
-					//mfhcbb += rho*c1o2 * (mfStartcbb + mfStartabb);
-					//mfhcbc += rho*c1o2 * (mfStartcbc + mfStartaba);
-					//mfhcca += rho*c1o2 * (mfStartcca + mfStartaac);
-					//mfhccb += rho*c1o2 * (mfStartccb + mfStartaab);
-					//mfhccc += rho*c1o2 * (mfStartccc + mfStartaaa);
-					//mfhbcb += c1o6 * c2o9 * deltaPP;
-					//mfhbbc += c1o6 * c2o9 * deltaPP;
-					//mfhcbb += c1o6 * c2o9 * deltaPP;
-					//mfhccb += c1o6 * c1o18 * deltaPP;
-					//mfhacb += c1o6 * c1o18 * deltaPP;
-					//mfhcbc += c1o6 * c1o18 * deltaPP;
-					//mfhabc += c1o6 * c1o18 * deltaPP;
-					//mfhbcc += c1o6 * c1o18 * deltaPP;
-					//mfhbac += c1o6 * c1o18 * deltaPP;
-					//mfhccc += c1o6 * c1o72 * deltaPP;
-					//mfhacc += c1o6 * c1o72 * deltaPP;
-					//mfhcac += c1o6 * c1o72 * deltaPP;
-					//mfhaac += c1o6 * c1o72 * deltaPP;
-					//mfhabb += c1o6 * c2o9 * deltaPP;
-					//mfhbab += c1o6 * c2o9 * deltaPP;
-					//mfhbba += c1o6 * c2o9 * deltaPP;
-					//mfhaab += c1o6 * c1o18 * deltaPP;
-					//mfhcab += c1o6 * c1o18 * deltaPP;
-					//mfhaba += c1o6 * c1o18 * deltaPP;
-					//mfhcba += c1o6 * c1o18 * deltaPP;
-					//mfhbaa += c1o6 * c1o18 * deltaPP;
-					//mfhbca += c1o6 * c1o18 * deltaPP;
-					//mfhaaa += c1o6 * c1o72 * deltaPP;
-					//mfhcaa += c1o6 * c1o72 * deltaPP;
-					//mfhaca += c1o6 * c1o72 * deltaPP;
-					//mfhcca += c1o6 * c1o72 * deltaPP;
-					//mfhbbb += c1o6 * c4 * c2o9 * deltaPP;
-
-
-					//mfhbcb = c1o3/rho * c2o9 ;
-					//mfhbbc = c1o3/rho * c2o9 ;
-					//mfhcbb = c1o3/rho * c2o9 ;
-					//mfhccb = c1o3/rho * c1o18 ;
-					//mfhacb = c1o3/rho * c1o18 ;
-					//mfhcbc = c1o3/rho * c1o18 ;
-					//mfhabc = c1o3/rho * c1o18 ;
-					//mfhbcc = c1o3/rho * c1o18 ;
-					//mfhbac = c1o3/rho * c1o18 ;
-					//mfhccc = c1o3/rho * c1o72 ;
-					//mfhacc = c1o3/rho * c1o72 ;
-					//mfhcac = c1o3/rho * c1o72 ;
-					//mfhaac = c1o3/rho * c1o72 ;
-					//mfhabb = c1o3/rho * c2o9 ;
-					//mfhbab = c1o3/rho * c2o9 ;
-					//mfhbba = c1o3/rho * c2o9 ;
-					//mfhaab = c1o3/rho * c1o18 ;
-					//mfhcab = c1o3/rho * c1o18 ;
-					//mfhaba = c1o3/rho * c1o18 ;
-					//mfhcba = c1o3/rho * c1o18 ;
-					//mfhbaa = c1o3/rho * c1o18 ;
-					//mfhbca = c1o3/rho * c1o18 ;
-					//mfhaaa = c1o3/rho * c1o72 ;
-					//mfhcaa = c1o3/rho * c1o72 ;
-					//mfhaca = c1o3/rho * c1o72 ;
-					//mfhcca = c1o3/rho * c1o72 ;
-					//mfhbbb = c1/rho;//c1o3/rho * c4 * c2o9 ;
-
-
-					
-					//mfabb += c1o2 * c2o9 * pStar * (phi[d000] - phi[dM00]) * rhoToPhi / rho;
-					//mfbab += c1o2 * c2o9 * pStar * (phi[d000] - phi[d0M0]) * rhoToPhi / rho;
-					//mfbba += c1o2 * c2o9 * pStar * (phi[d000] - phi[d00M]) * rhoToPhi / rho;
-					//mfaab += c1o2 * c1o18 * pStar * (phi[d000] - phi[dMM0]) * rhoToPhi / rho;
-					//mfcab += c1o2 * c1o18 * pStar * (phi[d000] - phi[dPM0]) * rhoToPhi / rho;
-					//mfaba += c1o2 * c1o18 * pStar * (phi[d000] - phi[dM0M]) * rhoToPhi / rho;
-					//mfcba += c1o2 * c1o18 * pStar * (phi[d000] - phi[dP0M]) * rhoToPhi / rho;
-					//mfbaa += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0MM]) * rhoToPhi / rho;
-					//mfbca += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0PM]) * rhoToPhi / rho;
-					//mfaaa += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMMM]) * rhoToPhi / rho;
-					//mfcaa += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPMM]) * rhoToPhi / rho;
-					//mfaca += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMPM]) * rhoToPhi / rho;
-					//mfcca += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPPM]) * rhoToPhi / rho;
-					//mfcbb += c1o2 * c2o9 * pStar * (phi[d000] - phi[dP00]) * rhoToPhi / rho;
-					//mfbcb += c1o2 * c2o9 * pStar * (phi[d000] - phi[d0P0]) * rhoToPhi / rho;
-					//mfbbc += c1o2 * c2o9 * pStar * (phi[d000] - phi[d00P]) * rhoToPhi / rho;
-					//mfccb += c1o2 * c1o18 * pStar * (phi[d000] - phi[dPP0]) * rhoToPhi / rho;
-					//mfacb += c1o2 * c1o18 * pStar * (phi[d000] - phi[dMP0]) * rhoToPhi / rho;
-					//mfcbc += c1o2 * c1o18 * pStar * (phi[d000] - phi[dP0P]) * rhoToPhi / rho;
-					//mfabc += c1o2 * c1o18 * pStar * (phi[d000] - phi[dM0P]) * rhoToPhi / rho;
-					//mfbcc += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0PP]) * rhoToPhi / rho;
-					//mfbac += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0MP]) * rhoToPhi / rho;
-					//mfccc += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPPP]) * rhoToPhi / rho;
-					//mfacc += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMPP]) * rhoToPhi / rho;
-					//mfcac += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPMP]) * rhoToPhi / rho;
-					//mfaac += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMMP]) * rhoToPhi / rho;
-					
-					///////////////
-					//mfabb += (pBefore-pStar) * c2o9  ;
-					//mfbab += (pBefore-pStar) * c2o9  ;
-					//mfbba += (pBefore-pStar) * c2o9  ;
-					//mfaab += (pBefore-pStar) * c1o18 ;
-					//mfcab += (pBefore-pStar) * c1o18 ;
-					//mfaba += (pBefore-pStar) * c1o18 ;
-					//mfcba += (pBefore-pStar) * c1o18 ;
-					//mfbaa += (pBefore-pStar) * c1o18 ;
-					//mfbca += (pBefore-pStar) * c1o18 ;
-					//mfaaa += (pBefore-pStar) * c1o72 ;
-					//mfcaa += (pBefore-pStar) * c1o72 ;
-					//mfaca += (pBefore-pStar) * c1o72 ;
-					//mfcca += (pBefore-pStar) * c1o72 ;
-					//mfcbb += (pBefore-pStar) * c2o9  ;
-					//mfbcb += (pBefore-pStar) * c2o9  ;
-					//mfbbc += (pBefore-pStar) * c2o9  ;
-					//mfccb += (pBefore-pStar) * c1o18 ;
-					//mfacb += (pBefore-pStar) * c1o18 ;
-					//mfcbc += (pBefore-pStar) * c1o18 ;
-					//mfabc += (pBefore-pStar) * c1o18 ;
-					//mfbcc += (pBefore-pStar) * c1o18 ;
-					//mfbac += (pBefore-pStar) * c1o18 ;
-					//mfccc += (pBefore-pStar) * c1o72 ;
-					//mfacc += (pBefore-pStar) * c1o72 ;
-					//mfcac += (pBefore-pStar) * c1o72 ;
-					//mfaac += (pBefore-pStar) * c1o72 ;
-					//mfbbb += (pBefore-pStar) * 8.0 / 9.0;
-
-					//mfabb = (pBefore ) * c2o9;
-					//mfbab = (pBefore ) * c2o9;
-					//mfbba = (pBefore ) * c2o9;
-					//mfaab = (pBefore ) * c1o16;
-					//mfcab = (pBefore ) * c1o16;
-					//mfaba = (pBefore ) * c1o16;
-					//mfcba = (pBefore ) * c1o16;
-					//mfbaa = (pBefore ) * c1o16;
-					//mfbca = (pBefore ) * c1o16;
-					//mfaaa = (pBefore ) * c1o72;
-					//mfcaa = (pBefore ) * c1o72;
-					//mfaca = (pBefore ) * c1o72;
-					//mfcca = (pBefore ) * c1o72;
-					//mfcbb = (pBefore ) * c2o9;
-					//mfbcb = (pBefore ) * c2o9;
-					//mfbbc = (pBefore ) * c2o9;
-					//mfccb = (pBefore ) * c1o16;
-					//mfacb = (pBefore ) * c1o16;
-					//mfcbc = (pBefore ) * c1o16;
-					//mfabc = (pBefore ) * c1o16;
-					//mfbcc = (pBefore ) * c1o16;
-					//mfbac = (pBefore ) * c1o16;
-					//mfccc = (pBefore ) * c1o72;
-					//mfacc = (pBefore ) * c1o72;
-					//mfcac = (pBefore ) * c1o72;
-					//mfaac = (pBefore ) * c1o72;
-					//mfbbb = (pBefore ) * 8.0 / 9.0;
-					///////////////////
-
-					//////////////////////////////////////////////////////////////////////////
-					//proof correctness
-					//////////////////////////////////////////////////////////////////////////
-					//#ifdef  PROOF_CORRECTNESS
-					real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-						+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-						+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-					//			   //LBMReal dif = fabs(drho - rho_post);
-					//               LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post;
-					//#ifdef SINGLEPRECISION
-					//			   if (dif > 10.0E-7 || dif < -10.0E-7)
-					//#else
-					//			   if (dif > 10.0E-15 || dif < -10.0E-15)
-					//#endif
-					//			   {
-					//				   UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post)
-					//					   + " dif=" + UbSystem::toString(dif)
-					//					   + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-					//				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-					//				   //exit(EXIT_FAILURE);
-					//			   }
-					//#endif
-
-					if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post))
-						UB_THROW(UbException(
-							UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," +
-							UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-
-					//////////////////////////////////////////////////////////////////////////
-					//write distribution
-					//////////////////////////////////////////////////////////////////////////
-					(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)         = mfabb         ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)         = mfbab         ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)         = mfbba         ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)        = mfaab        ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)       = mfcab       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)        = mfaba        ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)       = mfcba       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)        = mfbaa        ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)       = mfbca       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)       = mfaaa       ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)      = mfcaa      ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)      = mfaca      ;//* rho * c1o3;
-					(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3)     = mfcca     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc     ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb   ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb    ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc   ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc    ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc   ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac    ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc  ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac  ;//* rho * c1o3;
-					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac   ;//* rho * c1o3;
-
-					(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3;
-
-			
-					(*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3)         = mfhabb;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3)         = mfhbab;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3)         = mfhbba;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3)        = mfhaab;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3)       = mfhcab;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3)        = mfhaba;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3)       = mfhcba;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3)        = mfhbaa;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3)       = mfhbca;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3)       = mfhaaa;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3)      = mfhcaa;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3)      = mfhaca;//* rho * c1o3;
-					(*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3)     = mfhcca;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3)     = mfhcbb;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3)     = mfhbcb;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p)     = mfhbbc;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfhccb;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3)    = mfhacb;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfhcbc;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p)    = mfhabc;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfhbcc;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p)    = mfhbac;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfhccc;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfhacc;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfhcac;//* rho * c1o3;
-					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfhaac;//* rho * c1o3;
-
-					(*this->zeroDistributionsH2)(x1, x2, x3) = mfhbbb;// *rho* c1o3;
-
-																	// !Old Kernel
-/////////////////////  P H A S E - F I E L D   S O L V E R
-////////////////////////////////////////////
-/////CUMULANT PHASE-FIELD
-					real omegaD =1.0/( 3.0 * mob + 0.5);
-					{
-						mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-						mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-						mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-						mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-						mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-						mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-						mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-						mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-						mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-						mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-						mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-						mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-						mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-						mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-						mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-						mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-						mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-						mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-						mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-						mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-						mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-						mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-						mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-						mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// second component
-						real concentration =
-							((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-								(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-								((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-						////////////////////////////////////////////////////////////////////////////////////
-						real oneMinusRho = c1o1 - concentration;
-
-						real cx =
-							((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-								(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-								(mfcbb - mfabb));
-						real cy =
-							((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-								(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-								(mfbcb - mfbab));
-						real cz =
-							((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-								(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-								(mfbbc - mfbba));
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// calculate the square of velocities for this lattice node
-						real cx2 = cx * cx;
-						real cy2 = cy * cy;
-						real cz2 = cz * cz;
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (6)-(14) in \ref
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-						forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-						forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-						forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-						forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-						forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-						forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-						forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-						forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-						forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - experimental Cumulant ... to be published ... hopefully
-						//!
-
-						// linearized orthogonalization of 3rd order central moments
-						real Mabc = mfabc - mfaba * c1o3;
-						real Mbca = mfbca - mfbaa * c1o3;
-						real Macb = mfacb - mfaab * c1o3;
-						real Mcba = mfcba - mfaba * c1o3;
-						real Mcab = mfcab - mfaab * c1o3;
-						real Mbac = mfbac - mfbaa * c1o3;
-						// linearized orthogonalization of 5th order central moments
-						real Mcbc = mfcbc - mfaba * c1o9;
-						real Mbcc = mfbcc - mfbaa * c1o9;
-						real Mccb = mfccb - mfaab * c1o9;
-
-						//31.05.2022 addaptive mobility
-						//omegaD = c1 + (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) / (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration)) + fabs((1.0 - concentration) * (concentration)) * c1o6 * oneOverInterfaceScale+1.0e-200);
-						//omegaD = c2 * (concentration * (concentration - c1)) / (-c6 * (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) + (concentration * (concentration - c1))+1.0e-200);
-						// collision of 1st order moments
-						cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-							normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
-						cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-							normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
-						cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-							normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
-
-						cx2 = cx * cx;
-						cy2 = cy * cy;
-						cz2 = cz * cz;
-
-						// equilibration of 2nd order moments
-						mfbba = c0o1;
-						mfbab = c0o1;
-						mfabb = c0o1;
-
-						mfcaa = c1o3 * concentration;
-						mfaca = c1o3 * concentration;
-						mfaac = c1o3 * concentration;
-
-						// equilibration of 3rd order moments
-						Mabc = c0o1;
-						Mbca = c0o1;
-						Macb = c0o1;
-						Mcba = c0o1;
-						Mcab = c0o1;
-						Mbac = c0o1;
-						mfbbb = c0o1;
-
-						// from linearized orthogonalization 3rd order central moments to central moments
-						mfabc = Mabc + mfaba * c1o3;
-						mfbca = Mbca + mfbaa * c1o3;
-						mfacb = Macb + mfaab * c1o3;
-						mfcba = Mcba + mfaba * c1o3;
-						mfcab = Mcab + mfaab * c1o3;
-						mfbac = Mbac + mfbaa * c1o3;
-
-						// equilibration of 4th order moments
-						mfacc = c1o9 * concentration;
-						mfcac = c1o9 * concentration;
-						mfcca = c1o9 * concentration;
-
-						mfcbb = c0o1;
-						mfbcb = c0o1;
-						mfbbc = c0o1;
-
-						// equilibration of 5th order moments
-						Mcbc = c0o1;
-						Mbcc = c0o1;
-						Mccb = c0o1;
-
-						// from linearized orthogonalization 5th order central moments to central moments
-						mfcbc = Mcbc + mfaba * c1o9;
-						mfbcc = Mbcc + mfbaa * c1o9;
-						mfccb = Mccb + mfaab * c1o9;
-
-						// equilibration of 6th order moment
-						mfccc = c1o27 * concentration;
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-						//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-						//! see also Eq. (88)-(96) in
-						//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-						//!
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-						backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-						backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-						backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-						backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-						backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-						backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-						backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-						backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-						backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-						backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-						(*this->localDistributionsH1)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-						(*this->localDistributionsH1)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-						(*this->localDistributionsH1)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-						(*this->localDistributionsH1)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-						(*this->localDistributionsH1)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-						(*this->localDistributionsH1)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-						(*this->localDistributionsH1)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-						(*this->localDistributionsH1)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-						(*this->localDistributionsH1)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-						(*this->localDistributionsH1)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-						(*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-						(*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb;
-
-
-
-
-					}
-				}
-			}
-		}
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-
-real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi()
-{
-	using namespace vf::lbm::dir;
-	using namespace D3Q27System;
-
-	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
-		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
-}
-
-real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
-		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
-		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
-}
-
-real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
-		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
-}
-
-real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
-		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) +
-		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00])));
-}
-
-real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM]))))
-		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) +
-		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0])));
-}
-
-real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP]))))
-		+ WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) +
-		+WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M])));
-}
-
-real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
-		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
-}
-
-real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
-		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
-		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
-}
-
-real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
-		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
-}
-
-real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::nabla2_phi()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	real sum = 0.0;
-	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
-		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
-	sum += WEIGTH[d0PP] * (
-			(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
-		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
-		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
-		);
-	sum += WEIGTH[d00P] * (
-			((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
-		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
-		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
-		);
-
-
-	return 6.0 * sum;
-}
-
-void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::computePhasefield()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-	int minX1 = ghostLayerWidth;
-	int minX2 = ghostLayerWidth;
-	int minX3 = ghostLayerWidth;
-	int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-	int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-	int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-	//------------- Computing the phase-field ------------------
-	for (int x3 = minX3; x3 < maxX3; x3++) {
-		for (int x2 = minX2; x2 < maxX2; x2++) {
-			for (int x1 = minX1; x1 < maxX1; x1++) {
-				// if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-				{
-					int x1p = x1 + 1;
-					int x2p = x2 + 1;
-					int x3p = x3 + 1;
-
-					h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-					h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-					h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-					h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-					h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-					h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-					h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-					h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-					h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-					h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-					h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-					h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-					h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-					h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-					h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-					h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-					h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-					h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-					h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-					h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-					h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-					h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-					h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-					h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-					h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-					h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-					h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
-				}
-			}
-		}
-	}
-}
-
-void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-	using namespace vf::basics::constant;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi[d000] = (*ph)(x1, x2, x3);
-    if (phi[d000] < 0) {
-        phi[d000] = c0o1;
-    }
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		} else {
-			//phi[k] = (*ph)(x1 , x2, x3 );// neutral wetting
-			phi[k] = 0.0;//unwetting
-		}
-	}
-}
-
-void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi2[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		}
-		else {
-			phi2[k] = 0.05;
-		}
-	}
-}
-
-void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::swapDistributions()
-{
-	LBMKernel::swapDistributions();
-	dataSet->getHdistributions()->swap();
-	dataSet->getH2distributions()->swap();
-}
-
-void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::initForcing()
-{
-	muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3);
-	muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3);
-	muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3);
-
-	muDeltaT = deltaT;
-
-	muForcingX1.DefineVar("dt", &muDeltaT);
-	muForcingX2.DefineVar("dt", &muDeltaT);
-	muForcingX3.DefineVar("dt", &muDeltaT);
-
-	muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
-
-	muForcingX1.DefineVar("nu", &muNu);
-	muForcingX2.DefineVar("nu", &muNu);
-	muForcingX3.DefineVar("nu", &muNu);
-
-	muForcingX1.DefineVar("rho",&muRho); 
-	muForcingX2.DefineVar("rho",&muRho); 
-	muForcingX3.DefineVar("rho",&muRho); 
-
-}
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h
deleted file mode 100644
index 98ca6108dca8f0835bc5e4e9479f696791cc354c..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h
+++ /dev/null
@@ -1,125 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h
-//! \ingroup LBMKernel
-//! \author M. Geier, K. Kutscher, Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseSimpleVelocityBaseExternalPressureLBMKernel_H
-#define MultiphaseSimpleVelocityBaseExternalPressureLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  M. Geier, K. Kutscher, Hesameddin Safari
-class MultiphaseSimpleVelocityBaseExternalPressureLBMKernel : public LBMKernel
-{
-public:
-    MultiphaseSimpleVelocityBaseExternalPressureLBMKernel();
-    virtual ~MultiphaseSimpleVelocityBaseExternalPressureLBMKernel(void) = default;
-    void calculate(int step) override;
-    SPtr<LBMKernel> clone() override;
-
-
-    ///refactor
-    //CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure;
-
-
-    real getCalculationTime() override { return .0; }
-protected:
-    virtual void initDataSet();
-    void swapDistributions() override;
-
-    void initForcing();
-
-    void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-    void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-    void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-
-    real f1[D3Q27System::ENDF+1];
-
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-    CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1;
-    CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1;
-    CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH1;
-
-    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2;
-    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH2;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr p1Old;
-
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseFieldOld;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; 
-
-    real h  [D3Q27System::ENDF+1];
-    real h2[D3Q27System::ENDF + 1];
-    real g  [D3Q27System::ENDF+1];
-    real phi[D3Q27System::ENDF+1];
-    real phi2[D3Q27System::ENDF + 1];
-    real pr1[D3Q27System::ENDF+1];
-    real phi_cutoff[D3Q27System::ENDF+1];
-
-    real gradX1_phi();
-    real gradX2_phi();
-    real gradX3_phi();
-	real gradX1_rhoInv(real rhoL, real rhoDIV);
-	real gradX2_rhoInv(real rhoL, real rhoDIV);
-	real gradX3_rhoInv(real rhoL, real rhoDIV);
-    real gradX1_phi2();
-    real gradX2_phi2();
-    real gradX3_phi2();
-    void computePhasefield();
-    void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-    void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3);
-
-    real nabla2_phi();
-
-    mu::value_type muX1,muX2,muX3;
-    mu::value_type muDeltaT;
-    mu::value_type muNu;
-    mu::value_type muRho;
-    real forcingX1;
-    real forcingX2;
-    real forcingX3;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp
deleted file mode 100644
index 30e4fa4f8e634dfc629a37ac3e405f245168beff..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp
+++ /dev/null
@@ -1,3219 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseTwoPhaseFieldsCumulantLBMKernel.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include <cmath>
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseTwoPhaseFieldsCumulantLBMKernel::MultiphaseTwoPhaseFieldsCumulantLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseTwoPhaseFieldsCumulantLBMKernel::initDataSet()
-{
-    SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
-    SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); // For phase-field
-    SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); // For phase-field
-    SPtr<PhaseFieldArray3D> divU(new PhaseFieldArray3D(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0));
-    dataSet->setFdistributions(f);
-    dataSet->setHdistributions(h); // For phase-field
-    dataSet->setH2distributions(h2); // For phase-field
-    dataSet->setPhaseField(divU);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> MultiphaseTwoPhaseFieldsCumulantLBMKernel::clone()
-{
-    SPtr<LBMKernel> kernel(new MultiphaseTwoPhaseFieldsCumulantLBMKernel());
-    kernel->setNX(nx);
-    dynamicPointerCast<MultiphaseTwoPhaseFieldsCumulantLBMKernel>(kernel)->initDataSet();
-    kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-    kernel->setDensityRatio(this->densityRatio);
-    kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-    kernel->setContactAngle(this->contactAngle);
-    kernel->setPhiL(this->phiL);
-    kernel->setPhiH(this->phiH);
-    kernel->setPhaseFieldRelaxation(this->tauH);
-    kernel->setMobility(this->mob);
-
-    kernel->setBCSet(bcSet->clone(kernel));
-    kernel->setWithForcing(withForcing);
-    kernel->setForcingX1(muForcingX1);
-    kernel->setForcingX2(muForcingX2);
-    kernel->setForcingX3(muForcingX3);
-    kernel->setIndex(ix1, ix2, ix3);
-    kernel->setDeltaT(deltaT);
-
-    return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
- void  MultiphaseTwoPhaseFieldsCumulantLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real m2 = mfa + mfc;
-	real m1 = mfc - mfa;
-	real m0 = m2 + mfb;
-	mfa = m0;
-	m0 *= Kinverse;
-	m0 += oneMinusRho;
-	mfb = (m1 * Kinverse - m0 * vv) * K;
-	mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-
-////////////////////////////////////////////////////////////////////////////////
- void  MultiphaseTwoPhaseFieldsCumulantLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	
-	real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
-	real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
-	mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
-	mfa = m0;
-	mfb = m1;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
- void  MultiphaseTwoPhaseFieldsCumulantLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	
-	real m1 = (mfa + mfc) + mfb;
-	real m2 = mfc - mfa;
-	mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-	mfb = m2 - vv * m1;
-	mfa = m1;
-}
-
-
- void  MultiphaseTwoPhaseFieldsCumulantLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	
-	real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-	real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-	mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-	mfb = mb;
-	mfa = ma;
-}
-
-
-void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
-{
-    using namespace D3Q27System;
-//    using namespace UbMath;
-	using namespace vf::lbm::dir;
-	using namespace vf::basics::constant;
-
-    forcingX1 = 0.0;
-    forcingX2 = 0.0;
-    forcingX3 = 0.0;
-
-	real oneOverInterfaceScale = 1.0;
-    /////////////////////////////////////
-
-    localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-    nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-    zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-    localDistributionsH1    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-    nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-    zeroDistributionsH1     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-	localDistributionsH2    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions();
-    nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions();
-    zeroDistributionsH2     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions();
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-    //TODO
-	//very expensive !!!!!
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField(
-            new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField2(
-        new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-        CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU(
-            new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
-
-
-        for (int x3 = 0; x3 <= maxX3; x3++) {
-            for (int x2 = 0; x2 <= maxX2; x2++) {
-                for (int x1 = 0; x1 <= maxX1; x1++) {
-                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                        int x1p = x1 + 1;
-                        int x2p = x2 + 1;
-                        int x3p = x3 + 1;
-
-                        real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                        real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                        real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                        real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                        real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                        real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                        real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                        real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                        real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                        real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                        real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                        real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                        real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                        real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                        real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                        real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                        real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-                        (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
-                                                    (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-                                                    ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-                                                    (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-
-                        mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
-                        mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
-                        mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
-                        mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
-                        mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
-                        mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
-                        mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
-                        mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
-                        mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
-                        mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
-                        mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
-                        mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
-                        mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
-                        mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
-                        mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
-                        mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
-                        mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3);
-                        (*phaseField2)(x1, x2, x3) =
-                            (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) +
-                            (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-                             ((mfbaa + mfbac) + (mfbca + mfbcc))) +
-                            ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-						//(*phaseField)(x1, x2, x3) = (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;
-                    }
-                }
-            }
-        }
-
-        real collFactorM;
-        //LBMReal forcingTerm[D3Q27System::ENDF + 1];
-
-        for (int x3 = minX3; x3 < maxX3; x3++) {
-            for (int x2 = minX2; x2 < maxX2; x2++) {
-                for (int x1 = minX1; x1 < maxX1; x1++) {
-                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                        int x1p = x1 + 1;
-                        int x2p = x2 + 1;
-                        int x3p = x3 + 1;
-
-                        //////////////////////////////////////////////////////////////////////////
-                        // Read distributions and phase field
-                        ////////////////////////////////////////////////////////////////////////////
-                        //////////////////////////////////////////////////////////////////////////
-
-                        // E   N  T
-                        // c   c  c
-                        //////////
-                        // W   S  B
-                        // a   a  a
-
-                        // Rest ist b
-
-                        // mfxyz
-                        // a - negative
-                        // b - null
-                        // c - positive
-
-                        // a b c
-                        //-1 0 1
-
-                        findNeighbors(phaseField, x1, x2, x3);
-						findNeighbors2(phaseField2, x1, x2, x3);
-
-                        real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-                        real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-                        real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-                        real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-                        real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-                        real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-                        real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-                        real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-                        real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-                        real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-                        real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-                        real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-                        real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-                        real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-                        real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-                        real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-                        real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-                        real rhoH = 1.0;
-                        real rhoL = 1.0 / densityRatio;
-
-                        real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-                        real dX1_phi = gradX1_phi();
-                        real dX2_phi = gradX2_phi();
-                        real dX3_phi = gradX3_phi();
-
-						real dX1_phi2 = gradX1_phi2();
-						real dX2_phi2 = gradX2_phi2();
-						real dX3_phi2 = gradX3_phi2();
-
-
-                        real denom2 = sqrt(dX1_phi * dX1_phi+ dX1_phi2 * dX1_phi2 + dX2_phi * dX2_phi + dX2_phi2 * dX2_phi2 + dX3_phi * dX3_phi+ dX3_phi2 * dX3_phi2) + 1e-9;
-                        real normX1 = (dX1_phi-dX1_phi2)/denom2;
-						real normX2 = (dX2_phi-dX2_phi2)/denom2;
-						real normX3 = (dX3_phi-dX3_phi2)/denom2;
-
-						//LBMReal denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9;
-						//LBMReal normX1 = dX1_phi / denom;
-						//LBMReal normX2 = dX2_phi / denom;
-						//LBMReal normX3 = dX3_phi / denom;
-
-
-
-						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
-
-
-                        real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-                        //----------- Calculating Macroscopic Values -------------
-                        real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
-
-                            			   ////Incompressible Kernal
-
-						mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) / rho * c3o1;
-						mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) / rho * c3o1;
-						mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) / rho * c3o1;
-						mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) / rho * c3o1;
-						mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) / rho * c3o1;
-						mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) / rho * c3o1;
-						mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) / rho * c3o1;
-						mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) / rho * c3o1;
-						mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) / rho * c3o1;
-						mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) / rho * c3o1;
-						mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) / rho * c3o1;
-						mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) / rho * c3o1;
-						mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) / rho * c3o1;
-
-						mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) / rho * c3o1;
-						mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) / rho * c3o1;
-						mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) / rho * c3o1;
-						mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) / rho * c3o1;
-						mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) / rho * c3o1;
-						mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) / rho * c3o1;
-						mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) / rho * c3o1;
-						mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) / rho * c3o1;
-						mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) / rho * c3o1;
-						mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) / rho * c3o1;
-						mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) / rho * c3o1;
-						mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) / rho * c3o1;
-						mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) / rho * c3o1;
-
-						mfbbb = (*this->zeroDistributionsF)(x1, x2, x3) / rho * c3o1;
-
-
-			   real m0, m1, m2;
-			   real rhoRef=c1o1;
-
-			  //LBMReal 
-			//    LBMReal drho = (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;
-
-			   real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-				   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-				   (mfcbb - mfabb))/rhoRef;
-			   real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-				   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-				   (mfbcb - mfbab))/rhoRef;
-			   real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-				   (mfbbc - mfbba))/rhoRef;
-
-
-			   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();
-
-				   //LBMReal rho_m = 1.0 / densityRatio;
-				   //forcingX1 = forcingX1 * (rho - rho_m);
-				   //forcingX2 = forcingX2 * (rho - rho_m);
-				   //forcingX3 = forcingX3 * (rho - rho_m);
-				   vvx += forcingX1 * deltaT * 0.5; // X
-				   vvy += forcingX2 * deltaT * 0.5; // Y
-				   vvz += forcingX3 * deltaT * 0.5; // Z
-
-			   }
-
-
-			   ///surface tension force
-			   vvx += mu * dX1_phi*c1o2;
-			   vvy += mu * dX2_phi * c1o2 ;
-			   vvz += mu * dX3_phi * c1o2;
-
-			   //////classic source term
-			   ///----Classic source term 8.4.2021
-
-			   real vvxF, vvyF, vvzF;
-			   vvxF = vvx;//-2*c1o24 * lap_vx;// 
-			   vvyF = vvy;//-2*c1o24 * lap_vy;// 
-			   vvzF = vvz;//-2*c1o24 * lap_vz;// 
-
-//			   vvxF = 1.2* vvx- 0.2*0.5 * ((*velocityX)(x1 - 1, x2, x3) + (*velocityX)(x1 + 1, x2, x3));
-//			   vvyF = 1.2 *vvy- 0.2*0.5* ((*velocityY)(x1 , x2-1, x3) + (*velocityY)(x1 , x2+1, x3));
-//			   vvzF = 1.2 *vvz-0.2*0.5* ((*velocityZ)(x1 , x2, x3-1) + (*velocityZ)(x1 , x2, x3+1));
-			   //if (vvxF != vvx) {
-				  // vvxF = vvxF;
-			   //}
-			   real weightGrad = 1.0;// -denom * denom / (denom * denom + 0.0001 * 0.001);
-			   real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX1;
-			   real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX2;
-			   real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX3;
-
-			   //dX1_phiF *= 1.2;
-			   //dX2_phiF *= 1.2;
-			   //dX3_phiF *= 1.2;
-
-			   //LBMReal gradFD = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-			   //LBMReal gradPhi = (1.0 - phi[REST]) * (phi[REST]);
-			   //gradPhi = (gradPhi > gradFD) ? gradPhi : gradFD;
-			   //dX1_phiF = gradPhi * normX1;
-				  // dX2_phiF = gradPhi * normX2;
-				  // dX3_phiF = gradPhi * normX3;
-
-			   real ux2;
-			   real uy2;
-			   real uz2;
-			   ux2 = vvxF * vvxF;
-			   uy2 = vvyF * vvyF;
-			   uz2 = vvzF * vvzF;
-			   real forcingTerm[D3Q27System::ENDF + 1];
-			   for (int dir = FSTARTDIR; dir <= FENDDIR; dir++) {
-				   real velProd = DX1[dir] * vvxF + DX2[dir] * vvyF + DX3[dir] * vvzF;
-				   real velSq1 = velProd * velProd;
-				   real gamma = WEIGTH[dir] * (1.0 + 3 * velProd + (4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)));
-
-				   //LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
-
-				   //forcingTerm[dir] =
-					  // (-vvxF) * (fac1 * dX1_phiF) +
-					  // (-vvyF) * (fac1 * dX2_phiF) +
-					  // (-vvzF) * (fac1 * dX3_phiF) +
-					  // (DX1[dir]) * (fac1 * dX1_phiF) +
-					  // (DX2[dir]) * (fac1 * dX2_phiF) +
-					  // (DX3[dir]) * (fac1 * dX3_phiF);
-
-
-				   real fac1 = (gamma - WEIGTH[dir]) * c1o3 ;
-
-				   forcingTerm[dir] =
-					   (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
-					   (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) +
-					   (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)) +
-					   (DX1[dir]) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
-					   (DX2[dir]) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) +
-					   (DX3[dir]) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL));
-
-
-
-			   }
-
-			   real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-			   real fac1 = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi;
-			   forcingTerm[d000] =	 (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
-				   (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) +
-				   (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL));
-
-			   ////////
-			  // LBMReal divAfterSource=
-			  //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
-			  //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfacb + 3.0 * (0.5 * forcingTerm[NW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfcbc + 3.0 * (0.5 * forcingTerm[TE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfabc + 3.0 * (0.5 * forcingTerm[TW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfbcc + 3.0 * (0.5 * forcingTerm[TN]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfbac + 3.0 * (0.5 * forcingTerm[TS]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfccc + 3.0 * (0.5 * forcingTerm[TNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfacc + 3.0 * (0.5 * forcingTerm[TNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfcac + 3.0 * (0.5 * forcingTerm[TSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfaac + 3.0 * (0.5 * forcingTerm[TSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfabb + 3.0 * (0.5 * forcingTerm[W]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
-			  //( mfbab + 3.0 * (0.5 * forcingTerm[S]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfbba + 3.0 * (0.5 * forcingTerm[B]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaab + 3.0 * (0.5 * forcingTerm[SW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfcab + 3.0 * (0.5 * forcingTerm[SE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfaba + 3.0 * (0.5 * forcingTerm[BW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcba + 3.0 * (0.5 * forcingTerm[BE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbaa + 3.0 * (0.5 * forcingTerm[BS]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbca + 3.0 * (0.5 * forcingTerm[BN]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaaa + 3.0 * (0.5 * forcingTerm[BSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcaa + 3.0 * (0.5 * forcingTerm[BSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaca + 3.0 * (0.5 * forcingTerm[BNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcca + 3.0 * (0.5 * forcingTerm[BNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbbb + 3.0 * (0.5 * forcingTerm[REST]) / rho)*((vvxF)*(vvxF)+(vvyF)*(vvyF)+(vvzF)*(vvzF)-1);
-
-			  // LBMReal divBeforeSource =
-				 //  (mfcbb)    * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) +
-				 //  (mfbcb)    * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfbbc)    * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfccb)   * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfacb)   * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfcbc)   * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfabc)   * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfbcc)   * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfbac)   * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfccc)  * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfacc)  * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfcac)  * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfaac)  * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfabb)    * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) +
-				 //  (mfbab)    * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfbba)    * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaab)   * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfcab)   * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfaba)   * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcba)   * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbaa)   * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbca)   * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaaa)  * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcaa)  * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaca)  * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcca)  * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbbb) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF) * (vvzF)-1);
-			   //if (divAfterSource - divBeforeSource != 0 && phi[REST]>0.0001 && phi[REST]<0.999) {
-				  // std::cout << phi[REST]<<" "<< divAfterSource << " " << divBeforeSource <<" "<< divAfterSource/ divBeforeSource << std::endl;
-			   //}
-
-			   //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) {
-				  // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource);
-
-				  // forcingTerm[dP00]	 *=scaleDiv;
-				  // forcingTerm[N]	 *=scaleDiv;
-				  // forcingTerm[T]	 *=scaleDiv;
-				  // forcingTerm[NE]	 *=scaleDiv;
-				  // forcingTerm[NW]	 *=scaleDiv;
-				  // forcingTerm[TE]	 *=scaleDiv;
-				  // forcingTerm[TW]	 *=scaleDiv;
-				  // forcingTerm[TN]	 *=scaleDiv;
-				  // forcingTerm[TS]	 *=scaleDiv;
-				  // forcingTerm[TNE]	 *=scaleDiv;
-				  // forcingTerm[TNW]	 *=scaleDiv;
-				  // forcingTerm[TSE]	 *=scaleDiv;
-				  // forcingTerm[TSW]	 *=scaleDiv;
-				  // forcingTerm[W]	 *=scaleDiv;
-				  // forcingTerm[S]	 *=scaleDiv;
-				  // forcingTerm[B]	 *=scaleDiv;
-				  // forcingTerm[SW]	 *=scaleDiv;
-				  // forcingTerm[SE]	 *=scaleDiv;
-				  // forcingTerm[BW]	 *=scaleDiv;
-				  // forcingTerm[BE]	 *=scaleDiv;
-				  // forcingTerm[BS]	 *=scaleDiv;
-				  // forcingTerm[BN]	 *=scaleDiv;
-				  // forcingTerm[BSW]	 *=scaleDiv;
-				  // forcingTerm[BSE]	 *=scaleDiv;
-				  // forcingTerm[BNW]	 *=scaleDiv;
-				  // forcingTerm[BNE]	 *=scaleDiv;
-				  // forcingTerm[REST] *=scaleDiv;
-			   //}
-			   ////////
-
-
-			   mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
-
-			   //--------------------------------------------------------
-
-
-
-
-
-			   //////end classic source term
-
-
-
-
-			   //forcing 
-			   ///////////////////////////////////////////////////////////////////////////////////////////
-			   if (withForcing)
-			   {
-				   muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1);
-				   muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2);
-				   muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3);
-
-				   //forcingX1 = muForcingX1.Eval();
-				   //forcingX2 = muForcingX2.Eval();
-				   //forcingX3 = muForcingX3.Eval();
-
-				   //vvx += forcingX1 * deltaT * 0.5; // X
-				   //vvy += forcingX2 * deltaT * 0.5; // Y
-				   //vvz += forcingX3 * deltaT * 0.5; // Z
-			   }
-
-			   real vx2;
-               real vy2;
-               real vz2;
-               vx2 = vvx * vvx;
-               vy2 = vvy * vvy;
-               vz2 = vvz * vvz;
-			   ///////////////////////////////////////////////////////////////////////////////////////////               
-			   real 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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   real wadjust;
-			   real qudricLimit = 0.01;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //Hin
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   m2 = mfaaa + mfaac;
-			   m1 = mfaac - mfaaa;
-			   m0 = m2 + mfaab;
-			   mfaaa = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfaab = m1 - m0 * vvz;
-			   mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaba + mfabc;
-			   m1 = mfabc - mfaba;
-			   m0 = m2 + mfabb;
-			   mfaba = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfabb = m1 - m0 * vvz;
-			   mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaca + mfacc;
-			   m1 = mfacc - mfaca;
-			   m0 = m2 + mfacb;
-			   mfaca = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfacb = m1 - m0 * vvz;
-			   mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbaa + mfbac;
-			   m1 = mfbac - mfbaa;
-			   m0 = m2 + mfbab;
-			   mfbaa = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbab = m1 - m0 * vvz;
-			   mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbba + mfbbc;
-			   m1 = mfbbc - mfbba;
-			   m0 = m2 + mfbbb;
-			   mfbba = m0;
-			   m0 += c4o9 * oMdrho;
-			   mfbbb = m1 - m0 * vvz;
-			   mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbca + mfbcc;
-			   m1 = mfbcc - mfbca;
-			   m0 = m2 + mfbcb;
-			   mfbca = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbcb = m1 - m0 * vvz;
-			   mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcaa + mfcac;
-			   m1 = mfcac - mfcaa;
-			   m0 = m2 + mfcab;
-			   mfcaa = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfcab = m1 - m0 * vvz;
-			   mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcba + mfcbc;
-			   m1 = mfcbc - mfcba;
-			   m0 = m2 + mfcbb;
-			   mfcba = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfcbb = m1 - m0 * vvz;
-			   mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcca + mfccc;
-			   m1 = mfccc - mfcca;
-			   m0 = m2 + mfccb;
-			   mfcca = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfccb = m1 - m0 * vvz;
-			   mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   m2 = mfaaa + mfaca;
-			   m1 = mfaca - mfaaa;
-			   m0 = m2 + mfaba;
-			   mfaaa = m0;
-			   m0 += c1o6 * oMdrho;
-			   mfaba = m1 - m0 * vvy;
-			   mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaab + mfacb;
-			   m1 = mfacb - mfaab;
-			   m0 = m2 + mfabb;
-			   mfaab = m0;
-			   mfabb = m1 - m0 * vvy;
-			   mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaac + mfacc;
-			   m1 = mfacc - mfaac;
-			   m0 = m2 + mfabc;
-			   mfaac = m0;
-			   m0 += c1o18 * oMdrho;
-			   mfabc = m1 - m0 * vvy;
-			   mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbaa + mfbca;
-			   m1 = mfbca - mfbaa;
-			   m0 = m2 + mfbba;
-			   mfbaa = m0;
-			   m0 += c2o3 * oMdrho;
-			   mfbba = m1 - m0 * vvy;
-			   mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbab + mfbcb;
-			   m1 = mfbcb - mfbab;
-			   m0 = m2 + mfbbb;
-			   mfbab = m0;
-			   mfbbb = m1 - m0 * vvy;
-			   mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbac + mfbcc;
-			   m1 = mfbcc - mfbac;
-			   m0 = m2 + mfbbc;
-			   mfbac = m0;
-			   m0 += c2o9 * oMdrho;
-			   mfbbc = m1 - m0 * vvy;
-			   mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcaa + mfcca;
-			   m1 = mfcca - mfcaa;
-			   m0 = m2 + mfcba;
-			   mfcaa = m0;
-			   m0 += c1o6 * oMdrho;
-			   mfcba = m1 - m0 * vvy;
-			   mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcab + mfccb;
-			   m1 = mfccb - mfcab;
-			   m0 = m2 + mfcbb;
-			   mfcab = m0;
-			   mfcbb = m1 - m0 * vvy;
-			   mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcac + mfccc;
-			   m1 = mfccc - mfcac;
-			   m0 = m2 + mfcbc;
-			   mfcac = m0;
-			   m0 += c1o18 * oMdrho;
-			   mfcbc = m1 - m0 * vvy;
-			   mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   m2 = mfaaa + mfcaa;
-			   m1 = mfcaa - mfaaa;
-			   m0 = m2 + mfbaa;
-			   mfaaa = m0;
-			   m0 += 1. * oMdrho;
-			   mfbaa = m1 - m0 * vvx;
-			   mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaba + mfcba;
-			   m1 = mfcba - mfaba;
-			   m0 = m2 + mfbba;
-			   mfaba = m0;
-			   mfbba = m1 - m0 * vvx;
-			   mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaca + mfcca;
-			   m1 = mfcca - mfaca;
-			   m0 = m2 + mfbca;
-			   mfaca = m0;
-			   m0 += c1o3 * oMdrho;
-			   mfbca = m1 - m0 * vvx;
-			   mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaab + mfcab;
-			   m1 = mfcab - mfaab;
-			   m0 = m2 + mfbab;
-			   mfaab = m0;
-			   mfbab = m1 - m0 * vvx;
-			   mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfabb + mfcbb;
-			   m1 = mfcbb - mfabb;
-			   m0 = m2 + mfbbb;
-			   mfabb = m0;
-			   mfbbb = m1 - m0 * vvx;
-			   mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfacb + mfccb;
-			   m1 = mfccb - mfacb;
-			   m0 = m2 + mfbcb;
-			   mfacb = m0;
-			   mfbcb = m1 - m0 * vvx;
-			   mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaac + mfcac;
-			   m1 = mfcac - mfaac;
-			   m0 = m2 + mfbac;
-			   mfaac = m0;
-			   m0 += c1o3 * oMdrho;
-			   mfbac = m1 - m0 * vvx;
-			   mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfabc + mfcbc;
-			   m1 = mfcbc - mfabc;
-			   m0 = m2 + mfbbc;
-			   mfabc = m0;
-			   mfbbc = m1 - m0 * vvx;
-			   mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfacc + mfccc;
-			   m1 = mfccc - mfacc;
-			   m0 = m2 + mfbcc;
-			   mfacc = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbcc = m1 - m0 * vvx;
-			   mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Cumulants
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-			 //  LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
-			 //  LBMReal OxyyMxzz  = 1.;//2+s9;//
-			   real O4 = 1.;
-			   real O5 = 1.;
-			   real O6 = 1.;
-
-
-
-			   /////fourth order parameters; here only for test. Move out of loop!
-
-			   real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-			   real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-			//    LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-			   real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
-			   real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-
-
-			   //Cum 4.
-			   //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-			   //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-			   //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-			   real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-			   real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-			   real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-			   real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-			   real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-			   real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-
-			   //Cum 5.
-			   real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-			   real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-			   real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-			   //Cum 6.
-			   real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-				   - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-				   - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-				   - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-				   + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-					   + 2. * (mfcaa * mfaca * mfaac)
-					   + 16. * mfbba * mfbab * mfabb)
-				   - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-				   - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-				   + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-					   + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-			   //2.
-			   // linear combinations
-			   real mxxPyyPzz = mfcaa + mfaca + mfaac;
-				mxxPyyPzz-=mfaaa;//12.03.21 shifted by mfaaa
-			   real mxxMyy = mfcaa - mfaca;
-			   real mxxMzz = mfcaa - mfaac;
-
-			   //applying phase field gradients first part:
-			  // mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz);
-               // 17.03.2021 attempt for statililization by assymptotically vanishing bias
-               //LBMReal correctionScaling =
-               //    rhoToPhi / rho; // +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000;
-               //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) *
-               //             correctionScaling; // As in Hesam's code
-               //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling;
-               //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling;
-               //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling;
-               //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling;
-               //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling;
-
-			   real dxux =  -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
-			   real dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
-			   real dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
-
-			   real Dxy = -c3o1 * collFactorM * mfbba;
-			   real Dxz = -c3o1 * collFactorM * mfbab;
-			   real Dyz = -c3o1 * collFactorM * mfabb;
-
-
-			   //relax
-			   mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-			   mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-			   mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-			   mfabb += collFactorM * (-mfabb);
-			   mfbab += collFactorM * (-mfbab);
-			   mfbba += collFactorM * (-mfbba);
-
-			   //applying phase field gradients second part:
-			   //mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz);
-               //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) *
-               //             correctionScaling; // As in Hesam's code
-               //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling;
-               //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling;
-               //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling;
-               //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling;
-               //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling;
-
-               ////updated pressure
-               //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling;
-
-               mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
-			   // linear combinations back
-			   mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-			   mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-			   mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-			   //3.
-			   // linear combinations
-			   real mxxyPyzz = mfcba + mfabc;
-			   real mxxyMyzz = mfcba - mfabc;
-
-			   real mxxzPyyz = mfcab + mfacb;
-			   real mxxzMyyz = mfcab - mfacb;
-
-			   real mxyyPxzz = mfbca + mfbac;
-			   real mxyyMxzz = mfbca - mfbac;
-
-			   //relax
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-			   mfbbb += wadjust * (-mfbbb);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-			   mxxyPyzz += wadjust * (-mxxyPyzz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-			   mxxyMyzz += wadjust * (-mxxyMyzz);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-			   mxxzPyyz += wadjust * (-mxxzPyyz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-			   mxxzMyyz += wadjust * (-mxxzMyyz);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-			   mxyyPxzz += wadjust * (-mxyyPxzz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-			   mxyyMxzz += wadjust * (-mxyyMxzz);
-
-			   // linear combinations back
-			   mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-			   mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-			   mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-			   mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-			   mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-			   mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-			   //4.
-			   //CUMacc += O4 * (-CUMacc);
-			   //CUMcac += O4 * (-CUMcac);
-			   //CUMcca += O4 * (-CUMcca);
-
-			   //CUMbbc += O4 * (-CUMbbc);
-			   //CUMbcb += O4 * (-CUMbcb);
-			   //CUMcbb += O4 * (-CUMcbb);
-			   CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-			   CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-			   CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-			   CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc);
-			   CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb);
-			   CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb);
-
-			   //5.
-			   CUMbcc += O5 * (-CUMbcc);
-			   CUMcbc += O5 * (-CUMcbc);
-			   CUMccb += O5 * (-CUMccb);
-
-			   //6.
-			   CUMccc += O6 * (-CUMccc);
-
-			   //back cumulants to central moments
-			   //4.
-			   //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-			   //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-			   //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-			   mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-			   mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-			   mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-			   mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-			   mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-			   mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-
-			   //5.
-			   mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-			   mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-			   mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-			   //6.
-			   mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-				   - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-				   - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-				   - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-				   + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-					   + 2. * (mfcaa * mfaca * mfaac)
-					   + 16. * mfbba * mfbab * mfabb)
-				   - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-				   - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-				   + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-					   + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-
-			   ////////
-
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //forcing
-			   mfbaa = -mfbaa;
-			   mfaba = -mfaba;
-			   mfaab = -mfaab;
-			   //////////////////////////////////////////////////////////////////////////////////////
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //back
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
-			   m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfaaa = m0;
-			   mfaab = m1;
-			   mfaac = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-			   m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
-			   m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-			   mfaba = m0;
-			   mfabb = m1;
-			   mfabc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2;
-			   m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfaca = m0;
-			   mfacb = m1;
-			   mfacc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-			   m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
-			   m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-			   mfbaa = m0;
-			   mfbab = m1;
-			   mfbac = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-			   m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
-			   m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-			   mfbba = m0;
-			   mfbbb = m1;
-			   mfbbc = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-			   m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
-			   m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-			   mfbca = m0;
-			   mfbcb = m1;
-			   mfbcc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2;
-			   m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfcaa = m0;
-			   mfcab = m1;
-			   mfcac = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-			   m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
-			   m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-			   mfcba = m0;
-			   mfcbb = m1;
-			   mfcbc = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
-			   m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfcca = m0;
-			   mfccb = m1;
-			   mfccc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
-			   m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaaa = m0;
-			   mfaba = m1;
-			   mfaca = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
-			   m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaab = m0;
-			   mfabb = m1;
-			   mfacb = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
-			   m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaac = m0;
-			   mfabc = m1;
-			   mfacc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-			   m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
-			   m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-			   mfbaa = m0;
-			   mfbba = m1;
-			   mfbca = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-			   m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
-			   m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-			   mfbab = m0;
-			   mfbbb = m1;
-			   mfbcb = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-			   m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
-			   m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-			   mfbac = m0;
-			   mfbbc = m1;
-			   mfbcc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
-			   m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcaa = m0;
-			   mfcba = m1;
-			   mfcca = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
-			   m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcab = m0;
-			   mfcbb = m1;
-			   mfccb = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
-			   m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcac = m0;
-			   mfcbc = m1;
-			   mfccc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaaa = m0;
-			   mfbaa = m1;
-			   mfcaa = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaba = m0;
-			   mfbba = m1;
-			   mfcba = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaca = m0;
-			   mfbca = m1;
-			   mfcca = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaab = m0;
-			   mfbab = m1;
-			   mfcab = m2;
-			   ///////////b////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
-			   m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfabb = m0;
-			   mfbbb = m1;
-			   mfcbb = m2;
-			   ///////////b////////////////////////////////////////////////////////////////////////
-			   m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfacb = m0;
-			   mfbcb = m1;
-			   mfccb = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaac = m0;
-			   mfbac = m1;
-			   mfcac = m2;
-			   ///////////c////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfabc = m0;
-			   mfbbc = m1;
-			   mfcbc = m2;
-			   ///////////c////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfacc = m0;
-			   mfbcc = m1;
-			   mfccc = m2;
-
-			   /////classical source term 8.4.2021
-
-			   mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
-
-
-
-			   //////////////////////////////////////////////////////////////////////////
-			   //proof correctness
-			   //////////////////////////////////////////////////////////////////////////
-//#ifdef  PROOF_CORRECTNESS
-//			   LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-//				   + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-//				   + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-//			   //LBMReal dif = fabs(drho - rho_post);
-//               LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post;
-//#ifdef SINGLEPRECISION
-//			   if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//			   if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//			   {
-//				   UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post)
-//					   + " dif=" + UbSystem::toString(dif)
-//					   + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-//				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-//				   //exit(EXIT_FAILURE);
-//			   }
-//#endif
-			   //////////////////////////////////////////////////////////////////////////
-			   //write distribution
-			   //////////////////////////////////////////////////////////////////////////
-			   (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca * rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca * rho * c1o3;
-
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac * rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac * rho * c1o3;
-
-			   (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb * rho * c1o3;
-			   //////////////////////////////////////////////////////////////////////////
-
-			   ////!Incompressible Kernal
-
-                            
-//                            ///////Old Kernel \|/
-//                            // ux += forcingX1*deltaT*0.5; // X
-//                            // uy += forcingX2*deltaT*0.5; // Y
-//                            // uz += forcingX3*deltaT*0.5; // Z
-//                        }
-//
-//                        LBMReal ux = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-//                                      (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-//                                      (mfcbb - mfabb)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX1_phi + forcingX1) / (2 * rho);
-//
-//                        LBMReal uy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-//                                      (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-//                                      (mfbcb - mfbab)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX2_phi + forcingX2) / (2 * rho);
-//
-//                        LBMReal uz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-//                                      (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-//                                      (mfbbc - mfbba)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX3_phi + forcingX3) / (2 * rho);
-//
-//                        //--------------------------------------------------------
-//
-//                        LBMReal ux2 = ux * ux;
-//                        LBMReal uy2 = uy * uy;
-//                        LBMReal uz2 = uz * uz;
-//
-//                        //----------- Calculating Forcing Terms * -------------
-//                        for (int dir = STARTF; dir <= (FENDDIR); dir++) {
-//                            LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
-//                            LBMReal velSq1  = velProd * velProd;
-//                            LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2));
-//
-//                            LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
-//
-//                            forcingTerm[dir] = ((-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                                (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                                (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3))) +
-//                                               (DX1[dir]) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                               (DX2[dir]) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                               (DX3[dir]) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
-//                        }
-//
-//                        LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-//                        LBMReal fac1      = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi;
-//                        forcingTerm[REST] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                            (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                            (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
-//
-//                        //--------------------------------------------------------
-//
-//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-//                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-//                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-//                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-//                        mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-//                        mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-//                        mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-//                        mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-//                        mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-//                        mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-//                        mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-//                        mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-//                        mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-//                        mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-//                        mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-//                        mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-//                        mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-//                        mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-//                        mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-//                        mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-//                        mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-//                        mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-//                        mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-//                        mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-//                        mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-//                        mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-//                        mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST];
-//
-//                        LBMReal rho1 = (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 oMdrho, m0, m1, m2;
-//
-//                        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 = rho - (oMdrho + m0);
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        LBMReal wadjust;
-//                        LBMReal qudricLimit = 0.01;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Hin
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Z - Dir
-//                        m2    = mfaaa + mfaac;
-//                        m1    = mfaac - mfaaa;
-//                        m0    = m2 + mfaab;
-//                        mfaaa = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfaab = m1 - m0 * uz;
-//                        mfaac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaba + mfabc;
-//                        m1    = mfabc - mfaba;
-//                        m0    = m2 + mfabb;
-//                        mfaba = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfabb = m1 - m0 * uz;
-//                        mfabc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaca + mfacc;
-//                        m1    = mfacc - mfaca;
-//                        m0    = m2 + mfacb;
-//                        mfaca = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfacb = m1 - m0 * uz;
-//                        mfacc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbaa + mfbac;
-//                        m1    = mfbac - mfbaa;
-//                        m0    = m2 + mfbab;
-//                        mfbaa = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbab = m1 - m0 * uz;
-//                        mfbac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbba + mfbbc;
-//                        m1    = mfbbc - mfbba;
-//                        m0    = m2 + mfbbb;
-//                        mfbba = m0;
-//                        m0 += c4o9 * oMdrho;
-//                        mfbbb = m1 - m0 * uz;
-//                        mfbbc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbca + mfbcc;
-//                        m1    = mfbcc - mfbca;
-//                        m0    = m2 + mfbcb;
-//                        mfbca = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbcb = m1 - m0 * uz;
-//                        mfbcc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcaa + mfcac;
-//                        m1    = mfcac - mfcaa;
-//                        m0    = m2 + mfcab;
-//                        mfcaa = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfcab = m1 - m0 * uz;
-//                        mfcac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcba + mfcbc;
-//                        m1    = mfcbc - mfcba;
-//                        m0    = m2 + mfcbb;
-//                        mfcba = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfcbb = m1 - m0 * uz;
-//                        mfcbc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcca + mfccc;
-//                        m1    = mfccc - mfcca;
-//                        m0    = m2 + mfccb;
-//                        mfcca = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfccb = m1 - m0 * uz;
-//                        mfccc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Y - Dir
-//                        m2    = mfaaa + mfaca;
-//                        m1    = mfaca - mfaaa;
-//                        m0    = m2 + mfaba;
-//                        mfaaa = m0;
-//                        m0 += c1o6 * oMdrho;
-//                        mfaba = m1 - m0 * uy;
-//                        mfaca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaab + mfacb;
-//                        m1    = mfacb - mfaab;
-//                        m0    = m2 + mfabb;
-//                        mfaab = m0;
-//                        mfabb = m1 - m0 * uy;
-//                        mfacb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaac + mfacc;
-//                        m1    = mfacc - mfaac;
-//                        m0    = m2 + mfabc;
-//                        mfaac = m0;
-//                        m0 += c1o18 * oMdrho;
-//                        mfabc = m1 - m0 * uy;
-//                        mfacc = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbaa + mfbca;
-//                        m1    = mfbca - mfbaa;
-//                        m0    = m2 + mfbba;
-//                        mfbaa = m0;
-//                        m0 += c2o3 * oMdrho;
-//                        mfbba = m1 - m0 * uy;
-//                        mfbca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbab + mfbcb;
-//                        m1    = mfbcb - mfbab;
-//                        m0    = m2 + mfbbb;
-//                        mfbab = m0;
-//                        mfbbb = m1 - m0 * uy;
-//                        mfbcb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbac + mfbcc;
-//                        m1    = mfbcc - mfbac;
-//                        m0    = m2 + mfbbc;
-//                        mfbac = m0;
-//                        m0 += c2o9 * oMdrho;
-//                        mfbbc = m1 - m0 * uy;
-//                        mfbcc = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcaa + mfcca;
-//                        m1    = mfcca - mfcaa;
-//                        m0    = m2 + mfcba;
-//                        mfcaa = m0;
-//                        m0 += c1o6 * oMdrho;
-//                        mfcba = m1 - m0 * uy;
-//                        mfcca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcab + mfccb;
-//                        m1    = mfccb - mfcab;
-//                        m0    = m2 + mfcbb;
-//                        mfcab = m0;
-//                        mfcbb = m1 - m0 * uy;
-//                        mfccb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcac + mfccc;
-//                        m1    = mfccc - mfcac;
-//                        m0    = m2 + mfcbc;
-//                        mfcac = m0;
-//                        m0 += c1o18 * oMdrho;
-//                        mfcbc = m1 - m0 * uy;
-//                        mfccc = m2 - 2. * m1 * uy + uy2 * 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 * ux;
-//                        mfcaa = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaba + mfcba;
-//                        m1    = mfcba - mfaba;
-//                        m0    = m2 + mfbba;
-//                        mfaba = m0;
-//                        mfbba = m1 - m0 * ux;
-//                        mfcba = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaca + mfcca;
-//                        m1    = mfcca - mfaca;
-//                        m0    = m2 + mfbca;
-//                        mfaca = m0;
-//                        m0 += c1o3 * oMdrho;
-//                        mfbca = m1 - m0 * ux;
-//                        mfcca = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaab + mfcab;
-//                        m1    = mfcab - mfaab;
-//                        m0    = m2 + mfbab;
-//                        mfaab = m0;
-//                        mfbab = m1 - m0 * ux;
-//                        mfcab = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfabb + mfcbb;
-//                        m1    = mfcbb - mfabb;
-//                        m0    = m2 + mfbbb;
-//                        mfabb = m0;
-//                        mfbbb = m1 - m0 * ux;
-//                        mfcbb = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfacb + mfccb;
-//                        m1    = mfccb - mfacb;
-//                        m0    = m2 + mfbcb;
-//                        mfacb = m0;
-//                        mfbcb = m1 - m0 * ux;
-//                        mfccb = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaac + mfcac;
-//                        m1    = mfcac - mfaac;
-//                        m0    = m2 + mfbac;
-//                        mfaac = m0;
-//                        m0 += c1o3 * oMdrho;
-//                        mfbac = m1 - m0 * ux;
-//                        mfcac = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfabc + mfcbc;
-//                        m1    = mfcbc - mfabc;
-//                        m0    = m2 + mfbbc;
-//                        mfabc = m0;
-//                        mfbbc = m1 - m0 * ux;
-//                        mfcbc = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfacc + mfccc;
-//                        m1    = mfccc - mfacc;
-//                        m0    = m2 + mfbcc;
-//                        mfacc = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbcc = m1 - m0 * ux;
-//                        mfccc = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Cumulants
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        LBMReal OxxPyyPzz = 1.; // omega2 or bulk viscosity
-//                        LBMReal OxyyPxzz  = 1.; //-s9;//2+s9;//
-//                        LBMReal OxyyMxzz  = 1.; // 2+s9;//
-//                        LBMReal O4        = 1.;
-//                        LBMReal O5        = 1.;
-//                        LBMReal O6        = 1.;
-//
-//                        // Cum 4.
-//                        LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-//                        LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-//                        LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-//
-//                        LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) +
-//                                                  c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//                        LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) +
-//                                                  c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//                        LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) +
-//                                                  c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//
-//                        // Cum 5.
-//                        LBMReal CUMbcc = mfbcc -
-//                                         (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
-//                                          2. * (mfbab * mfacb + mfbba * mfabc)) -
-//                                         c1o3 * (mfbca + mfbac) * oMdrho;
-//                        LBMReal CUMcbc = mfcbc -
-//                                         (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
-//                                          2. * (mfabb * mfcab + mfbba * mfbac)) -
-//                                         c1o3 * (mfcba + mfabc) * oMdrho;
-//                        LBMReal CUMccb = mfccb -
-//                                         (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
-//                                          2. * (mfbab * mfbca + mfabb * mfcba)) -
-//                                         c1o3 * (mfacb + mfcab) * oMdrho;
-//
-//                        // Cum 6.
-//                        LBMReal CUMccc =
-//                            mfccc +
-//                            ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-//                              4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -
-//                              2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-//                             (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-//                              2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
-//                             c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-//                             c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
-//                             c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
-//                             (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
-//                              (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
-//                                 c2o3 * oMdrho) +
-//                            c1o27 * oMdrho;
-//
-//                        // 2.
-//                        // linear combinations
-//                        LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
-//                        LBMReal mxxMyy    = mfcaa - mfaca;
-//                        LBMReal mxxMzz    = mfcaa - mfaac;
-//
-//                        LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-//                        LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-//                        LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-//
-//                        (*divU)(x1, x2, x3) = dxux + dyuy + dzuz;
-//
-//                        // relax
-//                        mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) -
-//                                     3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz);
-//                        mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy);
-//                        mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz);
-//
-//                        mfabb += collFactorM * (-mfabb);
-//                        mfbab += collFactorM * (-mfbab);
-//                        mfbba += collFactorM * (-mfbba);
-//
-//                        // linear combinations back
-//                        mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-//                        mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-//                        mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-//
-//                        // 3.
-//                        // linear combinations
-//                        LBMReal mxxyPyzz = mfcba + mfabc;
-//                        LBMReal mxxyMyzz = mfcba - mfabc;
-//
-//                        LBMReal mxxzPyyz = mfcab + mfacb;
-//                        LBMReal mxxzMyyz = mfcab - mfacb;
-//
-//                        LBMReal mxyyPxzz = mfbca + mfbac;
-//                        LBMReal mxyyMxzz = mfbca - mfbac;
-//
-//                        // relax
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-//                        mfbbb += wadjust * (-mfbbb);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-//                        mxxyPyzz += wadjust * (-mxxyPyzz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-//                        mxxyMyzz += wadjust * (-mxxyMyzz);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-//                        mxxzPyyz += wadjust * (-mxxzPyyz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-//                        mxxzMyyz += wadjust * (-mxxzMyyz);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-//                        mxyyPxzz += wadjust * (-mxyyPxzz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-//                        mxyyMxzz += wadjust * (-mxyyMxzz);
-//
-//                        // linear combinations back
-//                        mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-//                        mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-//                        mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-//                        mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-//                        mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-//                        mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-//
-//                        // 4.
-//                        CUMacc += O4 * (-CUMacc);
-//                        CUMcac += O4 * (-CUMcac);
-//                        CUMcca += O4 * (-CUMcca);
-//
-//                        CUMbbc += O4 * (-CUMbbc);
-//                        CUMbcb += O4 * (-CUMbcb);
-//                        CUMcbb += O4 * (-CUMcbb);
-//
-//                        // 5.
-//                        CUMbcc += O5 * (-CUMbcc);
-//                        CUMcbc += O5 * (-CUMcbc);
-//                        CUMccb += O5 * (-CUMccb);
-//
-//                        // 6.
-//                        CUMccc += O6 * (-CUMccc);
-//
-//                        // back cumulants to central moments
-//                        // 4.
-//                        mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-//                        mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-//                        mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-//
-//                        mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//                        mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//                        mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//
-//                        // 5.
-//                        mfbcc = CUMbcc +
-//                                (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
-//                                 2. * (mfbab * mfacb + mfbba * mfabc)) +
-//                                c1o3 * (mfbca + mfbac) * oMdrho;
-//                        mfcbc = CUMcbc +
-//                                (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
-//                                 2. * (mfabb * mfcab + mfbba * mfbac)) +
-//                                c1o3 * (mfcba + mfabc) * oMdrho;
-//                        mfccb = CUMccb +
-//                                (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
-//                                 2. * (mfbab * mfbca + mfabb * mfcba)) +
-//                                c1o3 * (mfacb + mfcab) * oMdrho;
-//
-//                        // 6.
-//                        mfccc = CUMccc -
-//                                ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-//                                  4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) -
-//                                  2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-//                                 (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-//                                  2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
-//                                 c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-//                                 c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
-//                                 c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
-//                                 (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
-//                                  (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
-//                                     c2o3 * oMdrho) -
-//                                c1o27 * oMdrho;
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // forcing
-//                        mfbaa = -mfbaa;
-//                        mfaba = -mfaba;
-//                        mfaab = -mfaab;
-//                        //////////////////////////////////////////////////////////////////////////////////////
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // back
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Z - Dir
-//                        m0    = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2;
-//                        m2    = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfaaa = m0;
-//                        mfaab = m1;
-//                        mfaac = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2;
-//                        m1    = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2);
-//                        m2    = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2;
-//                        mfaba = m0;
-//                        mfabb = m1;
-//                        mfabc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2;
-//                        m2    = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfaca = m0;
-//                        mfacb = m1;
-//                        mfacc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2;
-//                        m1    = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2);
-//                        m2    = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2;
-//                        mfbaa = m0;
-//                        mfbab = m1;
-//                        mfbac = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2;
-//                        m1    = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2);
-//                        m2    = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2;
-//                        mfbba = m0;
-//                        mfbbb = m1;
-//                        mfbbc = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2;
-//                        m1    = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2);
-//                        m2    = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2;
-//                        mfbca = m0;
-//                        mfbcb = m1;
-//                        mfbcc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2;
-//                        m2    = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfcaa = m0;
-//                        mfcab = m1;
-//                        mfcac = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2;
-//                        m1    = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2);
-//                        m2    = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2;
-//                        mfcba = m0;
-//                        mfcbb = m1;
-//                        mfcbc = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2;
-//                        m2    = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfcca = m0;
-//                        mfccb = m1;
-//                        mfccc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Y - Dir
-//                        m0    = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2;
-//                        m2    = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaaa = m0;
-//                        mfaba = m1;
-//                        mfaca = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2;
-//                        m2    = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaab = m0;
-//                        mfabb = m1;
-//                        mfacb = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2;
-//                        m2    = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaac = m0;
-//                        mfabc = m1;
-//                        mfacc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2;
-//                        m1    = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2);
-//                        m2    = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2;
-//                        mfbaa = m0;
-//                        mfbba = m1;
-//                        mfbca = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2;
-//                        m1    = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2);
-//                        m2    = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2;
-//                        mfbab = m0;
-//                        mfbbb = m1;
-//                        mfbcb = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2;
-//                        m1    = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2);
-//                        m2    = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2;
-//                        mfbac = m0;
-//                        mfbbc = m1;
-//                        mfbcc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2;
-//                        m2    = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcaa = m0;
-//                        mfcba = m1;
-//                        mfcca = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2;
-//                        m2    = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcab = m0;
-//                        mfcbb = m1;
-//                        mfccb = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2;
-//                        m2    = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcac = m0;
-//                        mfcbc = m1;
-//                        mfccc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // X - Dir
-//                        m0    = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaaa = m0;
-//                        mfbaa = m1;
-//                        mfcaa = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaba = m0;
-//                        mfbba = m1;
-//                        mfcba = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaca = m0;
-//                        mfbca = m1;
-//                        mfcca = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaab = m0;
-//                        mfbab = m1;
-//                        mfcab = m2;
-//                        ///////////b////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2;
-//                        m2    = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfabb = m0;
-//                        mfbbb = m1;
-//                        mfcbb = m2;
-//                        ///////////b////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfacb = m0;
-//                        mfbcb = m1;
-//                        mfccb = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaac = m0;
-//                        mfbac = m1;
-//                        mfcac = m2;
-//                        ///////////c////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfabc = m0;
-//                        mfbbc = m1;
-//                        mfcbc = m2;
-//                        ///////////c////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfacc = m0;
-//                        mfbcc = m1;
-//                        mfccc = m2;
-//
-//                        ///////////////////////////////////////////////////////////////////////////
-//
-//                        //////////////////////////////////////////////////////////////////////////
-//                        // proof correctness
-//                        //////////////////////////////////////////////////////////////////////////
-//#ifdef PROOF_CORRECTNESS
-//                        LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
-//                                           (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
-//                                           (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) +
-//                                           (mfbba + mfbbc) + mfbbb;
-//
-//                        LBMReal dif = rho1 - rho_post;
-//#ifdef SINGLEPRECISION
-//                        if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//                        if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//                        {
-//                            UB_THROW(UbException(UB_EXARGS,
-//                                                 "rho=" + UbSystem::toString(rho) + ", rho_post=" +
-//                                                     UbSystem::toString(rho_post) + " dif=" + UbSystem::toString(dif) +
-//                                                     " rho is not correct for node " + UbSystem::toString(x1) + "," +
-//                                                     UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-//                        }
-//#endif
-//
-//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00];
-//                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N];
-//                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T];
-//                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE];
-//                        mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[NW];
-//                        mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[TE];
-//                        mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[TW];
-//                        mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[TN];
-//                        mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[TS];
-//                        mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[TNE];
-//                        mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[TNW];
-//                        mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[TSE];
-//                        mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[TSW];
-//                        mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[W];
-//                        mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[S];
-//                        mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[B];
-//                        mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[SW];
-//                        mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[SE];
-//                        mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[BW];
-//                        mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[BE];
-//                        mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[BS];
-//                        mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[BN];
-//                        mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[BSW];
-//                        mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[BSE];
-//                        mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[BNW];
-//                        mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[BNE];
-//                        mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[REST];
-//
-//                        //////////////////////////////////////////////////////////////////////////
-//                        // write distribution for F
-//                        //////////////////////////////////////////////////////////////////////////
-//
-//                        (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)     = mfabb;
-//                        (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)     = mfbab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)     = mfbba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)    = mfaab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)   = mfcab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)    = mfaba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)   = mfcba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)    = mfbaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)   = mfbca;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)   = mfaaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)  = mfcaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)  = mfaca;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-//
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac;
-//
-//                        (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
-// !Old Kernel
-                        /////////////////////  P H A S E - F I E L D   S O L V E R
-                        ////////////////////////////////////////////
-		/////CUMULANT PHASE-FIELD
-				real omegaD =1.0/( 3.0 * mob + 0.5);
-				{
-			   mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-			   mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-			   mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-			   mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-			   mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-			   mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-			   mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-			   mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-			   mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-			   mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-			   mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-			   mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-			   mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-			   mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-			   mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-			   mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-			   mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-			   mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-			   mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-			   mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-			   mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-			   mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-			   mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-			   mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-			   mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-			   mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-			   mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-
-					////////////////////////////////////////////////////////////////////////////////////
-		//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-		//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-		//!
-		////////////////////////////////////////////////////////////////////////////////////
-		// fluid component
-			   //LBMReal drhoFluid =
-				  // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) +
-				  // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) +
-					 //  ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb;
-
-			   //LBMReal rhoFluid = c1 + drhoFluid;
-			   //LBMReal OOrhoFluid = c1 / rhoFluid;
-
-
-			   //LBMReal vvx =
-				  // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) +
-				  // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) +
-					 //  (fcbb - fabb)) * OOrhoFluid;
-			   //LBMReal vvy =
-				  // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) +
-				  // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) +
-					 //  (fbcb - fbab)) * OOrhoFluid;
-			   //LBMReal vvz =
-				  // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) +
-				  // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) +
-					 //  (fbbc - fbba)) * OOrhoFluid;
-
-			 //  LBMReal vvx = ux;
-			 //  LBMReal vvy = uy;
-			 //  LBMReal vvz = uz;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // second component
-			   real concentration =
-				   ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-				   (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-					   ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //!
-			  // LBMReal fx = forces[0];
-			  // LBMReal fy = forces[1];
-			  // LBMReal fz = -concentration * forces[2];
-			  // vvx += fx * c1o2;
-			  // vvy += fy * c1o2;
-			  // vvz += fz * c1o2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   real oneMinusRho = c1o1 - concentration;
-
-			   real cx =
-				   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-				   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-					   (mfcbb - mfabb));
-			   real cy =
-				   ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-				   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-					   (mfbcb - mfbab));
-			   real cz =
-				   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-					   (mfbbc - mfbba));
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // calculate the square of velocities for this lattice node
-			   real cx2 = cx * cx;
-			   real cy2 = cy * cy;
-			   real cz2 = cz * cz;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //! see also Eq. (6)-(14) in \ref
-			   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-			   //!
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-			   forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-			   forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-			   forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-			   forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - experimental Cumulant ... to be published ... hopefully
-			   //!
-
-			   // linearized orthogonalization of 3rd order central moments
-			   real Mabc = mfabc - mfaba * c1o3;
-			   real Mbca = mfbca - mfbaa * c1o3;
-			   real Macb = mfacb - mfaab * c1o3;
-			   real Mcba = mfcba - mfaba * c1o3;
-			   real Mcab = mfcab - mfaab * c1o3;
-			   real Mbac = mfbac - mfbaa * c1o3;
-			   // linearized orthogonalization of 5th order central moments
-			   real Mcbc = mfcbc - mfaba * c1o9;
-			   real Mbcc = mfbcc - mfbaa * c1o9;
-			   real Mccb = mfccb - mfaab * c1o9;
-
-			   // collision of 1st order moments
-			  // LBMReal ccx, ccy, ccz;
-			   
-
-               cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-                    normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-               cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-                    normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-               cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-                    normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-
-			   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
-			   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
-			//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz;
-
-
-			   cx2 = cx * cx;
-			   cy2 = cy * cy;
-			   cz2 = cz * cz;
-
-			   // equilibration of 2nd order moments
-			   mfbba = c0o1;
-			   mfbab = c0o1;
-			   mfabb = c0o1;
-
-			   mfcaa = c1o3 * concentration;
-			   mfaca = c1o3 * concentration;
-			   mfaac = c1o3 * concentration;
-
-
-			   //LBMReal omega2 = 1.0f;// omegaD;
-			   //mfbba *= (c1 - omega2);
-			   //mfbab *= (c1 - omega2);
-			   //mfabb *= (c1 - omega2);
-
-			   //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration;
-			   //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration;
-			   //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration;
-
-			   // equilibration of 3rd order moments
-			   Mabc = c0o1;
-			   Mbca = c0o1;
-			   Macb = c0o1;
-			   Mcba = c0o1;
-			   Mcab = c0o1;
-			   Mbac = c0o1;
-			   mfbbb = c0o1;
-
-			   // from linearized orthogonalization 3rd order central moments to central moments
-			   mfabc = Mabc + mfaba * c1o3;
-			   mfbca = Mbca + mfbaa * c1o3;
-			   mfacb = Macb + mfaab * c1o3;
-			   mfcba = Mcba + mfaba * c1o3;
-			   mfcab = Mcab + mfaab * c1o3;
-			   mfbac = Mbac + mfbaa * c1o3;
-
-			   // equilibration of 4th order moments
-			   mfacc = c1o9 * concentration;
-			   mfcac = c1o9 * concentration;
-			   mfcca = c1o9 * concentration;
-
-			   mfcbb = c0o1;
-			   mfbcb = c0o1;
-			   mfbbc = c0o1;
-
-			   // equilibration of 5th order moments
-			   Mcbc = c0o1;
-			   Mbcc = c0o1;
-			   Mccb = c0o1;
-
-			   // from linearized orthogonalization 5th order central moments to central moments
-			   mfcbc = Mcbc + mfaba * c1o9;
-			   mfbcc = Mbcc + mfbaa * c1o9;
-			   mfccb = Mccb + mfaab * c1o9;
-
-			   // equilibration of 6th order moment
-			   mfccc = c1o27 * concentration;
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //! see also Eq. (88)-(96) in
-			   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-			   //!
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-			   backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-			   backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-			   backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-			   backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-			   (*this->localDistributionsH1)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-   (*this->localDistributionsH1)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-   (*this->localDistributionsH1)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-   (*this->localDistributionsH1)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-   (*this->localDistributionsH1)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-   (*this->localDistributionsH1)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-   (*this->localDistributionsH1)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-   (*this->localDistributionsH1)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-   (*this->localDistributionsH1)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-   (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-   (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-   (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-   (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-   (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb;
-   }
-
-   ////Phasefield 2:
-
-   {
-
-   normX1 *= -1;
-   normX2 *= -1;
-   normX3 *= -1;
-
-   mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
-   mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
-   mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
-   mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
-   mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
-   mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
-   mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
-   mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
-   mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
-   mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
-   mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
-   mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
-   mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
-   mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
-   mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
-   mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
-   mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
-   mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
-   mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
-   mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
-   mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
-   mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
-   mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-   mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
-   mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
-   mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
-   mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3);
-
-
-   ////////////////////////////////////////////////////////////////////////////////////
-//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-//!
-////////////////////////////////////////////////////////////////////////////////////
-// fluid component
-	   //LBMReal drhoFluid =
-		  // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) +
-		  // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) +
-			 //  ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb;
-
-	   //LBMReal rhoFluid = c1 + drhoFluid;
-	   //LBMReal OOrhoFluid = c1 / rhoFluid;
-
-
-	   //LBMReal vvx =
-		  // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) +
-		  // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) +
-			 //  (fcbb - fabb)) * OOrhoFluid;
-	   //LBMReal vvy =
-		  // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) +
-		  // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) +
-			 //  (fbcb - fbab)) * OOrhoFluid;
-	   //LBMReal vvz =
-		  // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) +
-		  // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) +
-			 //  (fbbc - fbba)) * OOrhoFluid;
-
-	 //  LBMReal vvx = ux;
-	 //  LBMReal vvy = uy;
-	 //  LBMReal vvz = uz;
-	   ////////////////////////////////////////////////////////////////////////////////////
-	   // second component
-   real concentration =
-	   ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-	   (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-		   ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref
-   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-   //!
-  // LBMReal fx = forces[0];
-  // LBMReal fy = forces[1];
-  // LBMReal fz = -concentration * forces[2];
-  // vvx += fx * c1o2;
-  // vvy += fy * c1o2;
-  // vvz += fz * c1o2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   real oneMinusRho = c1o1 - concentration;
-
-   real cx =
-	   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-	   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-		   (mfcbb - mfabb));
-   real cy =
-	   ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-	   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-		   (mfbcb - mfbab));
-   real cz =
-	   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-	   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-		   (mfbbc - mfbba));
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // calculate the square of velocities for this lattice node
-   real cx2 = cx * cx;
-   real cy2 = cy * cy;
-   real cz2 = cz * cz;
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-   //! see also Eq. (6)-(14) in \ref
-   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-   //!
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Z - Dir
-   forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Y - Dir
-   forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-   forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-   forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-   forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-   forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // X - Dir
-   forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-   forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-   forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-   forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-   forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-   forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-   forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-   forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-   forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - experimental Cumulant ... to be published ... hopefully
-   //!
-
-   // linearized orthogonalization of 3rd order central moments
-   real Mabc = mfabc - mfaba * c1o3;
-   real Mbca = mfbca - mfbaa * c1o3;
-   real Macb = mfacb - mfaab * c1o3;
-   real Mcba = mfcba - mfaba * c1o3;
-   real Mcab = mfcab - mfaab * c1o3;
-   real Mbac = mfbac - mfbaa * c1o3;
-   // linearized orthogonalization of 5th order central moments
-   real Mcbc = mfcbc - mfaba * c1o9;
-   real Mbcc = mfbcc - mfbaa * c1o9;
-   real Mccb = mfccb - mfaab * c1o9;
-
-   // collision of 1st order moments
-   cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-	   normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
-   cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-	   normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
-   cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-	   normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
-
-   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
-   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
-//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz;
-
-
-   cx2 = cx * cx;
-   cy2 = cy * cy;
-   cz2 = cz * cz;
-
-   // equilibration of 2nd order moments
-   mfbba = c0o1;
-   mfbab = c0o1;
-   mfabb = c0o1;
-
-   mfcaa = c1o3 * concentration;
-   mfaca = c1o3 * concentration;
-   mfaac = c1o3 * concentration;
-
-
-   //LBMReal omega2 = 1.0f;// omegaD;
-   //mfbba *= (c1 - omega2);
-   //mfbab *= (c1 - omega2);
-   //mfabb *= (c1 - omega2);
-
-   //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration;
-   //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration;
-   //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration;
-
-   // equilibration of 3rd order moments
-   Mabc = c0o1;
-   Mbca = c0o1;
-   Macb = c0o1;
-   Mcba = c0o1;
-   Mcab = c0o1;
-   Mbac = c0o1;
-   mfbbb = c0o1;
-
-   // from linearized orthogonalization 3rd order central moments to central moments
-   mfabc = Mabc + mfaba * c1o3;
-   mfbca = Mbca + mfbaa * c1o3;
-   mfacb = Macb + mfaab * c1o3;
-   mfcba = Mcba + mfaba * c1o3;
-   mfcab = Mcab + mfaab * c1o3;
-   mfbac = Mbac + mfbaa * c1o3;
-
-   // equilibration of 4th order moments
-   mfacc = c1o9 * concentration;
-   mfcac = c1o9 * concentration;
-   mfcca = c1o9 * concentration;
-
-   mfcbb = c0o1;
-   mfbcb = c0o1;
-   mfbbc = c0o1;
-
-   // equilibration of 5th order moments
-   Mcbc = c0o1;
-   Mbcc = c0o1;
-   Mccb = c0o1;
-
-   // from linearized orthogonalization 5th order central moments to central moments
-   mfcbc = Mcbc + mfaba * c1o9;
-   mfbcc = Mbcc + mfbaa * c1o9;
-   mfccb = Mccb + mfaab * c1o9;
-
-   // equilibration of 6th order moment
-   mfccc = c1o27 * concentration;
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-   //! see also Eq. (88)-(96) in
-   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-   //!
-   ////////////////////////////////////////////////////////////////////////////////////
-   // X - Dir
-   backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-   backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-   backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-   backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-   backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-   backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-   backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-   backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-   backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Y - Dir
-   backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-   backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-   backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-   backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-   backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Z - Dir
-   backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-   (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-   (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-   (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-   (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-   (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-   (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-   (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-   (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-   (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-   (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-   (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-   (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-   (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-   (*this->zeroDistributionsH2)(x1, x2, x3) = mfbbb;
-
-   }
-
-
-
-		/////!CUMULANT PHASE-FIELD
-
-
-
-                        /////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
-
-                        //h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                        //h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                        //h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                        //h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                        //h[NW]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                        //h[TE]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                        //h[TW]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                        //h[TN]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                        //h[TS]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                        //h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                        //h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        //h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        //h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                        //h[W]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                        //h[S]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                        //h[B]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                        //h[SW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        //h[SE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                        //h[BW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        //h[BE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                        //h[BS]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        //h[BN]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                        //h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        //h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        //h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        //h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        //h[REST] = (*this->zeroDistributionsH)(x1, x2, x3);
-
-                        //for (int dir = STARTF; dir < (ENDF + 1); dir++) {
-                        //    LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
-                        //    LBMReal velSq1  = velProd * velProd;
-                        //    LBMReal hEq; //, gEq;
-
-                        //    if (dir != REST) {
-                        //        LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0;
-                        //        LBMReal hSource     = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; 
-                        //        hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) +                                 hSource * WEIGTH[dir];
-
-                        //        // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5).
-                        //        h[dir] = h[dir] - (h[dir] - hEq) / (tauH); 
-
-                        //    } else {
-                        //        hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-                        //        h[REST] = h[REST] - (h[REST] - hEq) / (tauH); 
-                        //    }
-                        //}
-
-                        //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3)     = h[D3Q27System::INV_E];
-                        //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3)     = h[D3Q27System::INV_N];
-                        //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3)     = h[D3Q27System::INV_T];
-                        //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3)    = h[D3Q27System::INV_NE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3)   = h[D3Q27System::INV_NW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3)    = h[D3Q27System::INV_TE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3)   = h[D3Q27System::INV_TW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3)    = h[D3Q27System::INV_TN];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3)   = h[D3Q27System::INV_TS];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3)   = h[D3Q27System::INV_TNE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3)  = h[D3Q27System::INV_TNW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3)  = h[D3Q27System::INV_TSE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW];
-
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3)     = h[D3Q27System::INV_W];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3)     = h[D3Q27System::INV_S];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p)     = h[D3Q27System::INV_B];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3)   = h[D3Q27System::INV_SW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3)    = h[D3Q27System::INV_SE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p)   = h[D3Q27System::INV_BW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p)    = h[D3Q27System::INV_BE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p)   = h[D3Q27System::INV_BS];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p)    = h[D3Q27System::INV_BN];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p)  = h[D3Q27System::INV_BSE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p)  = h[D3Q27System::INV_BNW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p)   = h[D3Q27System::INV_BNE];
-
-                        //(*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST];
-
-                        /////////////////////   END OF OLD BGK SOLVER ///////////////////////////////
-                    }
-                }
-            }
-        
-       // dataSet->setPhaseField(divU);
-		}
-}
-//////////////////////////////////////////////////////////////////////////
-
-real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX1_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
-		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX1[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX2_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
-		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
-		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX2[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX3_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
-		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX3[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX1_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
-		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
-	//LBMReal sum = 0.0;
-	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-	//    sum += WEIGTH[k] * DX1[k] * phi2[k];
-	//}
-	//return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX2_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
-		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
-		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
-	//LBMReal sum = 0.0;
-	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-	//    sum += WEIGTH[k] * DX2[k] * phi2[k];
-	//}
-	//return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX3_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
-		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
-	//LBMReal sum = 0.0;
-	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-	//    sum += WEIGTH[k] * DX3[k] * phi2[k];
-	//}
-	//return 3.0 * sum;
-}
-
-
-
-
-
-real MultiphaseTwoPhaseFieldsCumulantLBMKernel::nabla2_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    real sum = 0.0;
-	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
-		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
-	sum += WEIGTH[d0PP] * (
-			(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
-		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
-		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
-		);
-	sum += WEIGTH[d00P] * (
-			((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
-		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
-		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
-		);
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * (phi[k] - phi[REST]);
-    //}
-    return 6.0 * sum;
-}
-
-void MultiphaseTwoPhaseFieldsCumulantLBMKernel::computePhasefield()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-    int minX1 = ghostLayerWidth;
-    int minX2 = ghostLayerWidth;
-    int minX3 = ghostLayerWidth;
-    int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-    int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-    int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-    //------------- Computing the phase-field ------------------
-    for (int x3 = minX3; x3 < maxX3; x3++) {
-        for (int x2 = minX2; x2 < maxX2; x2++) {
-            for (int x1 = minX1; x1 < maxX1; x1++) {
-                // if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-                {
-                    int x1p = x1 + 1;
-                    int x2p = x2 + 1;
-                    int x3p = x3 + 1;
-
-                    h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                    h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                    h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                    h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
-                }
-            }
-        }
-    }
-}
-
-void MultiphaseTwoPhaseFieldsCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-                                                int x3)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-    phi[d000] = (*ph)(x1, x2, x3);
-
-
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-        if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-            phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-        } else {
-			phi[k] = 0.0;
-         }
-    }
-}
-
-void MultiphaseTwoPhaseFieldsCumulantLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi2[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		}
-		else {
-			phi2[k] = 0.0;
-		}
-	}
-}
-
-void MultiphaseTwoPhaseFieldsCumulantLBMKernel::swapDistributions()
-{
-    LBMKernel::swapDistributions();
-    dataSet->getHdistributions()->swap();
-	dataSet->getH2distributions()->swap();
-}
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.h
deleted file mode 100644
index 34730f454faf81a126eb1431fb623f0447f52fa1..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.h
+++ /dev/null
@@ -1,114 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseTwoPhaseFieldsCumulantLBMKernel.h
-//! \ingroup LBMKernel
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseTwoPhaseFieldsCumulantLBMKernel_H
-#define MultiphaseTwoPhaseFieldsCumulantLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  H. Safari, K. Kutscher, M. Geier
-class MultiphaseTwoPhaseFieldsCumulantLBMKernel : public LBMKernel
-{
-public:
-   MultiphaseTwoPhaseFieldsCumulantLBMKernel();
-   virtual ~MultiphaseTwoPhaseFieldsCumulantLBMKernel(void) = default;
-   void calculate(int step) override;
-   SPtr<LBMKernel> clone() override;
-   void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-   void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-   void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-   void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-
-   real getCalculationTime() override { return .0; }
-protected:
-   virtual void initDataSet();
-   void swapDistributions() override;
-   real f1[D3Q27System::ENDF+1];
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH1;
-
-   CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2;
-   CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2;
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH2;
-
-   //CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   phaseField;
-
-   real h  [D3Q27System::ENDF+1];
-   real h2[D3Q27System::ENDF + 1];
-   real g  [D3Q27System::ENDF+1];
-   real phi[D3Q27System::ENDF+1];
-   real phi2[D3Q27System::ENDF + 1];
-   real pr1[D3Q27System::ENDF+1];
-   real phi_cutoff[D3Q27System::ENDF+1];
-
-   real gradX1_phi();
-   real gradX2_phi();
-   real gradX3_phi();
-   real gradX1_phi2();
-   real gradX2_phi2();
-   real gradX3_phi2();
-   //LBMReal gradX1_pr1();
-   //LBMReal gradX2_pr1();
-   //LBMReal gradX3_pr1();
-   //LBMReal dirgradC_phi(int n, int k);
-   void computePhasefield();
-   void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-   void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3);
-   //void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, int x1, int x2, int x3);
-   //void pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/);
-
-   real nabla2_phi();
-
-
-   mu::value_type muX1,muX2,muX3;
-   mu::value_type muDeltaT;
-   mu::value_type muNu;
-   real forcingX1;
-   real forcingX2;
-   real forcingX3;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp
deleted file mode 100644
index df28e16d1a717418aa0474ad4e74c7e85878bdf6..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp
+++ /dev/null
@@ -1,3609 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include <cmath>
-//#include "UbMath.h"
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::MultiphaseTwoPhaseFieldsPressureFilterLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::initDataSet()
-{
-    SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
-    SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field
-    SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field
-    //SPtr<PhaseFieldArray3D> divU(new PhaseFieldArray3D(            nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D(            nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new  CbArray3D<real, IndexerX3X2X1>(    nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-	pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-    dataSet->setFdistributions(f);
-    dataSet->setHdistributions(h); // For phase-field
-    dataSet->setH2distributions(h2); // For phase-field
-    //dataSet->setPhaseField(divU);
-	dataSet->setPhaseField(divU1);
-	dataSet->setPressureField(pressure);
-
-	phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0));
-	phaseField2 = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0));
-	divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
-
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::clone()
-{
-    SPtr<LBMKernel> kernel(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel());
-    kernel->setNX(nx);
-    dynamicPointerCast<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>(kernel)->initDataSet();
-    kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-    kernel->setDensityRatio(this->densityRatio);
-    kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-    kernel->setContactAngle(this->contactAngle);
-    kernel->setPhiL(this->phiL);
-    kernel->setPhiH(this->phiH);
-    kernel->setPhaseFieldRelaxation(this->tauH);
-    kernel->setMobility(this->mob);
-	kernel->setInterfaceWidth(this->interfaceWidth);
-
-    kernel->setBCSet(bcSet->clone(kernel));
-    kernel->setWithForcing(withForcing);
-    kernel->setForcingX1(muForcingX1);
-    kernel->setForcingX2(muForcingX2);
-    kernel->setForcingX3(muForcingX3);
-    kernel->setIndex(ix1, ix2, ix3);
-    kernel->setDeltaT(deltaT);
-	kernel->setGhostLayerWidth(2);
-	dynamicPointerCast<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>(kernel)->initForcing();
-
-    return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
- void  MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	
-	real m2 = mfa + mfc;
-	real m1 = mfc - mfa;
-	real m0 = m2 + mfb;
-	mfa = m0;
-	m0 *= Kinverse;
-	m0 += oneMinusRho;
-	mfb = (m1 * Kinverse - m0 * vv) * K;
-	mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-
-////////////////////////////////////////////////////////////////////////////////
- void  MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	 
-	real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
-	real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
-	mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
-	mfa = m0;
-	mfb = m1;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
- void  MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	
-	real m1 = (mfa + mfc) + mfb;
-	real m2 = mfc - mfa;
-	mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-	mfb = m2 - vv * m1;
-	mfa = m1;
-}
-
-
- void  MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	 
-	real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-	real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-	mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-	mfb = mb;
-	mfa = ma;
-}
-
-
-void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step)
-{
-    using namespace D3Q27System;
- //   using namespace UbMath;
-	using namespace vf::lbm::dir;
-	using namespace vf::basics::constant;
-
-    forcingX1 = 0.0;
-    forcingX2 = 0.0;
-    forcingX3 = 0.0;
-
-	real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5;
-    /////////////////////////////////////
-
-    localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-    nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-    zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-    localDistributionsH1    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-    nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-    zeroDistributionsH1     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-	localDistributionsH2    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions();
-    nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions();
-    zeroDistributionsH2     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions();
-
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField();
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-
-
-    //TODO
-	//very expensive !!!!!
-	//CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField(
- //           new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
- //   CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseField2(
- //       new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
- //       CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr divU(
- //           new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
-
-//#pragma omp parallel for
-	  for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) {
-            for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) {
-                for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; x1++) {
-                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                        int x1p = x1 + 1;
-                        int x2p = x2 + 1;
-                        int x3p = x3 + 1;
-
-                        real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                        real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                        real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                        real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                        real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                        real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                        real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                        real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                        real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                        real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                        real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                        real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                        real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                        real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                        real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                        real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                        real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-						(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
-                                                    (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-                                                    ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-                                                    (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-
-                        mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
-                        mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
-                        mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
-                        mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
-                        mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
-                        mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
-                        mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
-                        mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
-                        mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
-                        mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
-                        mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
-                        mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
-                        mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
-                        mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
-                        mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
-                        mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
-                        mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3);
-						(*phaseField2)(x1, x2, x3) =
-                            (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) +
-                            (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-                             ((mfbaa + mfbac) + (mfbca + mfbcc))) +
-                            ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-						//(*phaseField)(x1, x2, x3) = (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;
-
-////// read F-distributions for velocity formalism
-
-
-						 mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-						 mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-						 mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-						 mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-						 mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-						 mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-						 mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-						 mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-						 mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-						 mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-						 mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-						 mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-						 mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-						 mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-						 mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-						 mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-						 mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-						 mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-						 mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-						 mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-						 mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-						 mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-						 mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						 mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						 mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						 mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-						 mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-						real rhoH = 1.0;
-						real rhoL = 1.0 / densityRatio;
-
-						real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-						real drho = (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;
-
-						real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH);
-						//! variable density -> TRANSFER!
-						//LBMReal rho = rhoH * ((*phaseField)(x1, x2, x3)) + rhoL * ((*phaseField2)(x1, x2, x3));
-
-						(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + rho * c1o3 * drho;
-
-						//(*pressure)(x1, x2, x3) = (((*phaseField)(x1, x2, x3)) + ((*phaseField2)(x1, x2, x3)) - c1) * c1o3;
-						////!!!!!! relplace by pointer swap!
-						//(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3);
-                    }
-                }
-            }
-        }
-
-        real collFactorM;
-        //LBMReal forcingTerm[D3Q27System::ENDF + 1];
-
-		////filter
-
-		//for (int x3 = minX3; x3 < maxX3; x3++) {
-		//	for (int x2 = minX2; x2 < maxX2; x2++) {
-		//		for (int x1 = minX1; x1 < maxX1; x1++) {
-		//			if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-
-		//				LBMReal sum = 0.;
-
-		//				//Lapalce pressure
-		//				//sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3+1) - (*pressure)(x1, x2, x3))))
-		//				//	+ ((((*pressure)(x1+1, x2-1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3+1) - (*pressure)(x1, x2, x3)))));
-		//				//sum += WEIGTH[TN] * (
-		//				//	((((*pressure)(x1+1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3) - (*pressure)(x1, x2, x3))))
-		//				//	+ ((((*pressure)(x1+1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3+1) - (*pressure)(x1, x2, x3))))
-		//				//	+ ((((*pressure)(x1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) - (*pressure)(x1, x2, x3))))
-		//				//	);
-		//				//sum += WEIGTH[T] * (
-		//				//	(((*pressure)(x1+1, x2, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3) - (*pressure)(x1, x2, x3)))
-		//				//	+ (((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3) - (*pressure)(x1, x2, x3)))
-		//				//	+ (((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2, x3-1) - (*pressure)(x1, x2, x3)))
-		//				//	);
-
-
-		//				//LBMReal pressureFilter = 100;
-		//				//(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + pressureFilter * sum * (sqrt(fabs(sum)));
-
-		//				//Situpol Eq. 81
-		//				sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1)) + ((*pressure)(x1-1, x2-1, x3-1) )) + (((*pressure)(x1+1, x2+1, x3-1) ) + ((*pressure)(x1-1, x2-1, x3+1) )))
-		//					+ ((((*pressure)(x1+1, x2-1, x3+1) ) + ((*pressure)(x1-1, x2+1, x3-1) )) + (((*pressure)(x1+1, x2-1, x3-1) ) + ((*pressure)(x1-1, x2+1, x3+1) ))));
-		//				sum += WEIGTH[TN] * (
-		//					((((*pressure)(x1+1, x2+1, x3) ) + ((*pressure)(x1-1, x2-1, x3) )) + (((*pressure)(x1+1, x2-1, x3) ) + ((*pressure)(x1-1, x2+1, x3) )))
-		//					+ ((((*pressure)(x1+1, x2, x3+1) ) + ((*pressure)(x1-1, x2, x3-1) )) + (((*pressure)(x1+1, x2, x3-1) ) + ((*pressure)(x1-1, x2, x3+1) )))
-		//					+ ((((*pressure)(x1, x2+1, x3+1) ) + ((*pressure)(x1, x2-1, x3-1) )) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) )))
-		//					);
-		//				sum += WEIGTH[T] * (
-		//					(((*pressure)(x1+1, x2, x3) ) + ((*pressure)(x1-1, x2, x3) ))
-		//					+ (((*pressure)(x1, x2+1, x3) ) + ((*pressure)(x1, x2-1, x3) ))
-		//					+ (((*pressure)(x1, x2, x3+1)) + ((*pressure)(x1, x2, x3-1) ))
-		//					);
-		//				sum += WEIGTH[REST] * (*pressure)(x1, x2, x3);
-		//				(*pressureOld)(x1, x2, x3) = sum;
-
-
-
-
-		//			}
-		//		}
-		//	}
-		//}
-
-		////Periodic Filter
-//#pragma omp parallel for
-		for (int x3 = minX3-1; x3 <= maxX3; x3++) {
-			for (int x2 = minX2-1; x2 <= maxX2; x2++) {
-				for (int x1 = minX1-1; x1 <= maxX1; x1++) {
-					if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-
-						real sum = 0.;
-
-
-
-						//Lapalce pressure
-						//sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3+1) - (*pressure)(x1, x2, x3))))
-						//	+ ((((*pressure)(x1+1, x2-1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3+1) - (*pressure)(x1, x2, x3)))));
-						//sum += WEIGTH[TN] * (
-						//	((((*pressure)(x1+1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3) - (*pressure)(x1, x2, x3))))
-						//	+ ((((*pressure)(x1+1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3+1) - (*pressure)(x1, x2, x3))))
-						//	+ ((((*pressure)(x1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) - (*pressure)(x1, x2, x3))))
-						//	);
-						//sum += WEIGTH[T] * (
-						//	(((*pressure)(x1+1, x2, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3) - (*pressure)(x1, x2, x3)))
-						//	+ (((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3) - (*pressure)(x1, x2, x3)))
-						//	+ (((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2, x3-1) - (*pressure)(x1, x2, x3)))
-						//	);
-
-
-						//LBMReal pressureFilter = 100;
-						//(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + pressureFilter * sum * (sqrt(fabs(sum)));
-
-						//Situpol Eq. 81
-
-						//int x1p = (x1 < maxX1) ? x1 + 1 : 0;
-						//int x1m = (x1 > 0) ? x1 - 1 : maxX1;
-						//int x2p = (x2 < maxX2) ? x2 + 1 : 0;
-						//int x2m = (x2 > 0) ? x2 - 1 : maxX2;
-						//int x3p = (x3 < maxX3) ? x3 + 1 : 0;
-						//int x3m = (x3 > 0) ? x3 - 1 : maxX3;
-						//sum += WEIGTH[TNE] * (((((*pressure)(x1p, x2p, x3p)) + ((*pressure)(x1m, x2m, x3m))) + (((*pressure)(x1p, x2p, x3m)) + ((*pressure)(x1m, x2m, x3p))))
-						//	+ ((((*pressure)(x1p, x2m, x3p)) + ((*pressure)(x1m, x2p, x3m))) + (((*pressure)(x1p, x2m, x3m)) + ((*pressure)(x1m, x2p, x3p)))));
-						//sum += WEIGTH[TN] * (
-						//	((((*pressure)(x1p, x2p, x3)) + ((*pressure)(x1m, x2m, x3))) + (((*pressure)(x1p, x2m, x3)) + ((*pressure)(x1m, x2p, x3))))
-						//	+ ((((*pressure)(x1p, x2, x3p)) + ((*pressure)(x1m, x2, x3m))) + (((*pressure)(x1p, x2, x3m)) + ((*pressure)(x1m, x2, x3p))))
-						//	+ ((((*pressure)(x1, x2p, x3p)) + ((*pressure)(x1, x2m, x3m))) + (((*pressure)(x1, x2p, x3m) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2m, x3p))))
-						//	);
-						//sum += WEIGTH[T] * (
-						//	(((*pressure)(x1p, x2, x3)) + ((*pressure)(x1m, x2, x3)))
-						//	+ (((*pressure)(x1, x2p, x3)) + ((*pressure)(x1, x2m, x3)))
-						//	+ (((*pressure)(x1, x2, x3p)) + ((*pressure)(x1, x2, x3m)))
-						//	);
-						//sum += WEIGTH[REST] * (*pressure)(x1, x2, x3);
-						//(*pressureOld)(x1, x2, x3) = sum;
-						 
-						///Version for boundaries
-						for (int xx = -1; xx <= 1; xx++) {
-							//int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0;
-							int xxx = xx + x1;
-
-							for (int yy = -1; yy <= 1; yy++) {
-								//int yyy = (yy+x2 <= maxX2) ?( (yy + x2 > 0) ? yy + x2 : maxX2) : 0;
-								int yyy = yy + x2;
-
-								for (int zz = -1; zz <= 1; zz++) {
-									//int zzz = (zz+x3 <= maxX3) ? zzz = ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0;
-									int zzz = zz + x3;
-									
-									if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) {
-										sum+= 64.0/(216.0*(c1o1+c3o1*abs(xx))* (c1o1 + c3o1 * abs(yy))* (c1o1 + c3o1 * abs(zz)))*(*pressureOld)(xxx, yyy, zzz);
-									}
-									else{ sum+= 64.0 / (216.0 * (c1o1 + c3o1 * abs(xx)) * (c1o1 + c3o1 * abs(yy)) * (c1o1 + c3o1 * abs(zz))) * (*pressureOld)(x1, x2, x3);
-									}
-
-
-								}
-							}
-						}
-						(*pressure)(x1, x2, x3) = sum;
-
-
-
-					}
-				}
-			}
-		}
-
-//#pragma omp parallel for
-		// for (int x3 = minX3-1; x3 <= maxX3; x3++) {
-		// 	for (int x2 = minX2-1; x2 <= maxX2; x2++) {
-		// 		for (int x1 = minX1-1; x1 <= maxX1; x1++) {
-		// 			if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-		// 				///filter!
-
-		// 				(*pressure)(x1, x2, x3) = (*pressureOld)(x1, x2, x3);
-		// 			}
-		// 		}
-		// 	}
-		// }
-		////!filter
-
-
-//#pragma omp parallel for
-        for (int x3 = minX3; x3 < maxX3; x3++) {
-            for (int x2 = minX2; x2 < maxX2; x2++) {
-                for (int x1 = minX1; x1 < maxX1; x1++) {
-                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                        int x1p = x1 + 1;
-                        int x2p = x2 + 1;
-                        int x3p = x3 + 1;
-
-
-
-                        //////////////////////////////////////////////////////////////////////////
-                        // Read distributions and phase field
-                        ////////////////////////////////////////////////////////////////////////////
-                        //////////////////////////////////////////////////////////////////////////
-
-                        // E   N  T
-                        // c   c  c
-                        //////////
-                        // W   S  B
-                        // a   a  a
-
-                        // Rest ist b
-
-                        // mfxyz
-                        // a - negative
-                        // b - null
-                        // c - positive
-
-                        // a b c
-                        //-1 0 1
-
-                        findNeighbors(phaseField, x1, x2, x3);
-						findNeighbors2(phaseField2, x1, x2, x3);
-
-                        real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-                        real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-                        real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-                        real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-                        real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-                        real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-                        real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-                        real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-                        real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-                        real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-                        real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-                        real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-                        real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-                        real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-                        real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-                        real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-                        real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-                        real rhoH = 1.0;
-                        real rhoL = 1.0 / densityRatio;
-
-                        real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-                        real dX1_phi = gradX1_phi();
-                        real dX2_phi = gradX2_phi();
-                        real dX3_phi = gradX3_phi();
-
-						//LBMReal dX1_phi2 = gradX1_phi2();
-						//LBMReal dX2_phi2 = gradX2_phi2();
-						//LBMReal dX3_phi2 = gradX3_phi2();
-
-
-      //                  LBMReal denom2 = sqrt(dX1_phi * dX1_phi+ dX1_phi2 * dX1_phi2 + dX2_phi * dX2_phi + dX2_phi2 * dX2_phi2 + dX3_phi * dX3_phi+ dX3_phi2 * dX3_phi2) + 1e-9;
-      //                  LBMReal normX1 = (dX1_phi-dX1_phi2)/denom2;
-						//LBMReal normX2 = (dX2_phi-dX2_phi2)/denom2;
-						//LBMReal normX3 = (dX3_phi-dX3_phi2)/denom2;
-
-						real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9;
-						real normX1 = dX1_phi / denom;
-						real normX2 = dX2_phi / denom;
-						real normX3 = dX3_phi / denom;
-
-
-
-						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
-
-
-                        real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-                        //----------- Calculating Macroscopic Values -------------
-                        real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
-
-						//! variable density -> TRANSFER!
-						//LBMReal rho = rhoH * ((*phaseField)(x1, x2, x3)) + rhoL * ((*phaseField2)(x1, x2, x3));
-
-
-                            			   ////Incompressible Kernal
-
-						//mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)         ;// / rho * c3;
-						//mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)         ;// / rho * c3;
-						//mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)        ;// / rho * c3;
-						//mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)       ;// / rho * c3;
-						//mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)         ;// / rho * c3;
-						//mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)        ;// / rho * c3;
-						//mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)       ;// / rho * c3;
-						//mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)        ;// / rho * c3;
-						//mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)       ;// / rho * c3;
-						//mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)       ;// / rho * c3;
-						//mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)      ;// / rho * c3;
-						//mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)      ;// / rho * c3;
-						//mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3)     ;// / rho * c3;																								    
-						//mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     ;// / rho * c3;
-						//mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     ;// / rho * c3;
-						//mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     ;// / rho * c3;
-						//mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   ;// / rho * c3;
-						//mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    ;// / rho * c3;
-						//mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   ;// / rho * c3;
-						//mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    ;// / rho * c3;
-						//mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   ;// / rho * c3;
-						//mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    ;// / rho * c3;
-						//mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) ;// / rho * c3;
-						//mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  ;// / rho * c3;
-						//mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  ;// / rho * c3;
-						//mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   ;// / rho * c3;
-
-						//mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);// / rho * c3;
-
-
-			   real m0, m1, m2;
-			   real rhoRef=c1o1;
-
-			  //LBMReal 
-			//    LBMReal drho = (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;
-
-			   real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-				   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-				   (mfcbb - mfabb))/rhoRef;
-			   real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-				   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-				   (mfbcb - mfbab))/rhoRef;
-			   real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-				   (mfbbc - mfbba))/rhoRef;
-
-			 //  (*pressure)(x1, x2, x3) = (*pressureOld)(x1, x2, x3)+rho*c1o3*drho;
-
-			   //LBMReal gradPx = c1o2 * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3));
-			   //LBMReal gradPy = c1o2 * ((*pressure)(x1, x2 + 1, x3) - (*pressure)(x1, x2 - 1, x3));
-			   //LBMReal gradPz = c1o2 * ((*pressure)(x1, x2, x3 + 1) - (*pressure)(x1, x2, x3 - 1));
-
-			   //LBMReal gradPx = 3.0 * (WEIGTH[TNE] * (
-				  // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 + 1, x2 - 1, x3 + 1) - (*pressure)(x1 - 1, x2 + 1, x3 - 1)))
-				  // + (((*pressure)(x1 + 1, x2 - 1, x3 - 1) - (*pressure)(x1 - 1, x2 + 1, x3 + 1)) + ((*pressure)(x1 + 1, x2 + 1, x3 - 1) - (*pressure)(x1 - 1, x2 - 1, x3 + 1))))
-				  // + WEIGTH[NE] * (
-				  // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 + 1, x2 - 1, x3) - (*pressure)(x1 - 1, x2 + 1, x3)))
-					 //  + (((*pressure)(x1 + 1, x2, x3 - 1) - (*pressure)(x1 - 1, x2, x3 + 1)) + ((*pressure)(x1 + 1, x2, x3 + 1) - (*pressure)(x1 - 1, x2, x3 - 1))))
-				  // + WEIGTH[dP00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3)));
-
-			   //LBMReal gradPy = 3.0 * (WEIGTH[TNE] * (
-				  // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1)))
-				  // + (((*pressure)(x1 - 1, x2 + 1, x3 - 1) - (*pressure)(x1 + 1, x2 - 1, x3 + 1)) + ((*pressure)(x1 + 1, x2 + 1, x3 - 1) - (*pressure)(x1 - 1, x2 - 1, x3 + 1))))
-				  // + WEIGTH[NE] * (
-				  // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 - 1, x2 + 1, x3) - (*pressure)(x1 + 1, x2 - 1, x3)))
-					 //  + (((*pressure)(x1, x2+1, x3 - 1) - (*pressure)(x1, x2-1, x3 + 1)) + ((*pressure)(x1, x2+1, x3 + 1) - (*pressure)(x1, x2-1, x3 - 1))))
-				  // + WEIGTH[dP00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3)));
-
-			   //LBMReal gradPz = 3.0 * (WEIGTH[TNE] * (
-				  // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1)))
-				  // + (((*pressure)(x1 - 1, x2 - 1, x3 + 1) - (*pressure)(x1 + 1, x2 + 1, x3 - 1)) + ((*pressure)(x1 + 1, x2 - 1, x3 + 1) - (*pressure)(x1 - 1, x2 + 1, x3 - 1))))
-				  // + WEIGTH[NE] * (
-				  // (((*pressure)(x1 + 1, x2, x3+1) - (*pressure)(x1 - 1, x2, x3-1)) + ((*pressure)(x1 - 1, x2, x3+1) - (*pressure)(x1 + 1, x2, x3-1)))
-					 //  + (((*pressure)(x1, x2 - 1, x3 + 1) - (*pressure)(x1, x2 + 1, x3 - 1)) + ((*pressure)(x1, x2 + 1, x3 + 1) - (*pressure)(x1, x2 - 1, x3 - 1))))
-				  // + WEIGTH[dP00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1)));
-			  
-			   
-			   real gradPx = 0.0;
-			   real gradPy = 0.0;
-			   real gradPz = 0.0;
-			   for (int dir1 = -1; dir1 <= 1; dir1++) {
-				   for (int dir2 = -1; dir2 <= 1; dir2++) {
-					   int yyy = x2 + dir1;
-					   int zzz = x3 + dir2;
-					   if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) {
-						   gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) {
-						   gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-
-					   int xxx = x1 + dir1;
-					   if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) {
-						   gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) {
-						   gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-
-					   yyy = x2 + dir2;
-					   if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) {
-						   gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) {
-						   gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-
-				   }
-			   }
-
-			   //Viscosity increase by pressure gradient
-			   real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom);
-			   //LBMReal limVis = 0.0000001*10;//0.01;
-			  // collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM);
-			  // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
-			   errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi;
-			   //collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis);
-
-			   //3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) - (phi2[BNE] - phi2[TSW])))
-			   //+WEIGTH[NE] * (((phi2[TE] - phi2[BW]) - (phi2[BE] - phi2[TW])) + ((phi2[TS] - phi2[BN]) + (phi2[TN] - phi2[BS])))) +
-			   //+WEIGTH[N] * (phi2[T] - phi2[B]));
-
-			   //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()+c1o3*drho*dX1_phi*rhoToPhi/rho;//-gradPx/rho;
-				  // forcingX2 = muForcingX2.Eval() + c1o3*drho*dX2_phi * rhoToPhi / rho;//-gradPy/rho;
-				   //forcingX3 = muForcingX3.Eval() + c1o3*drho*dX3_phi * rhoToPhi / rho;//-gradPz/rho;
-
-
-				   muRho = rho;
-				   
-			       //muForcingX1.DefineConst("rho", rho);
-			       //muForcingX2.DefineConst("rho", rho);
-			       //muForcingX3.DefineConst("rho", rho);
-				   			   
-
-				   forcingX1 = muForcingX1.Eval()/rho - gradPx/rho;
-				   forcingX2 = muForcingX2.Eval()/rho - gradPy/rho;
-				   forcingX3 = muForcingX3.Eval()/rho - gradPz/rho;
-
-				   //LBMReal rho_m = 1.0 / densityRatio;
-				   //forcingX1 = forcingX1 * (rho - rho_m);
-				   //forcingX2 = forcingX2 * (rho - rho_m);
-				   //forcingX3 = forcingX3 * (rho - rho_m);
-				   vvx += forcingX1 * deltaT * 0.5; // X
-				   vvy += forcingX2 * deltaT * 0.5; // Y
-				   vvz += forcingX3 * deltaT * 0.5; // Z
-
-			   //}
-
-
-			   ///surface tension force
-			   vvx += mu * dX1_phi * c1o2 / rho;
-			   vvy += mu * dX2_phi * c1o2 / rho ;
-			   vvz += mu * dX3_phi * c1o2 / rho;
-
-			   //////classic source term
-			   ///----Classic source term 8.4.2021
-
-			   //LBMReal vvxF, vvyF, vvzF;
-			   //vvxF = vvx;//-2*c1o24 * lap_vx;// 
-			   //vvyF = vvy;//-2*c1o24 * lap_vy;// 
-			   //vvzF = vvz;//-2*c1o24 * lap_vz;// 
-
-//			   vvxF = 1.2* vvx- 0.2*0.5 * ((*velocityX)(x1 - 1, x2, x3) + (*velocityX)(x1 + 1, x2, x3));
-//			   vvyF = 1.2 *vvy- 0.2*0.5* ((*velocityY)(x1 , x2-1, x3) + (*velocityY)(x1 , x2+1, x3));
-//			   vvzF = 1.2 *vvz-0.2*0.5* ((*velocityZ)(x1 , x2, x3-1) + (*velocityZ)(x1 , x2, x3+1));
-			   //if (vvxF != vvx) {
-				  // vvxF = vvxF;
-			   //}
-			   //LBMReal weightGrad = 1.0;// -denom * denom / (denom * denom + 0.0001 * 0.001);
-			   //LBMReal dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX1;
-			   //LBMReal dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX2;
-			   //LBMReal dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX3;
-
-			   //dX1_phiF *= 1.2;
-			   //dX2_phiF *= 1.2;
-			   //dX3_phiF *= 1.2;
-
-			   //LBMReal gradFD = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-			   //LBMReal gradPhi = (1.0 - phi[REST]) * (phi[REST]);
-			   //gradPhi = (gradPhi > gradFD) ? gradPhi : gradFD;
-			   //dX1_phiF = gradPhi * normX1;
-				  // dX2_phiF = gradPhi * normX2;
-				  // dX3_phiF = gradPhi * normX3;
-
-			   //LBMReal ux2;
-			   //LBMReal uy2;
-			   //LBMReal uz2;
-			   //ux2 = vvxF * vvxF;
-			   //uy2 = vvyF * vvyF;
-			   //uz2 = vvzF * vvzF;
-			   //LBMReal forcingTerm[D3Q27System::ENDF + 1];
-			   //for (int dir = STARTF; dir <= (FENDDIR); dir++) {
-				  // LBMReal velProd = DX1[dir] * vvxF + DX2[dir] * vvyF + DX3[dir] * vvzF;
-				  // LBMReal velSq1 = velProd * velProd;
-				  // LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + (4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)));
-
-				  // //LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
-
-				  // //forcingTerm[dir] =
-					 // // (-vvxF) * (fac1 * dX1_phiF) +
-					 // // (-vvyF) * (fac1 * dX2_phiF) +
-					 // // (-vvzF) * (fac1 * dX3_phiF) +
-					 // // (DX1[dir]) * (fac1 * dX1_phiF) +
-					 // // (DX2[dir]) * (fac1 * dX2_phiF) +
-					 // // (DX3[dir]) * (fac1 * dX3_phiF);
-
-
-				  // //LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 ;
-
-				  // //forcingTerm[dir] =
-					 // // (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
-					 // // (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) +
-					 // // (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)) +
-					 // // (DX1[dir]) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
-					 // // (DX2[dir]) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) +
-					 // // (DX3[dir]) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL));
-
-
-
-			   //}
-
-			   //LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-			   //LBMReal fac1 = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi;
-			   //forcingTerm[REST] =	 (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
-				  // (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) +
-				  // (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL));
-
-			   ////////
-			  // LBMReal divAfterSource=
-			  //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
-			  //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfacb + 3.0 * (0.5 * forcingTerm[NW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfcbc + 3.0 * (0.5 * forcingTerm[TE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfabc + 3.0 * (0.5 * forcingTerm[TW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfbcc + 3.0 * (0.5 * forcingTerm[TN]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfbac + 3.0 * (0.5 * forcingTerm[TS]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfccc + 3.0 * (0.5 * forcingTerm[TNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfacc + 3.0 * (0.5 * forcingTerm[TNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfcac + 3.0 * (0.5 * forcingTerm[TSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfaac + 3.0 * (0.5 * forcingTerm[TSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfabb + 3.0 * (0.5 * forcingTerm[W]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
-			  //( mfbab + 3.0 * (0.5 * forcingTerm[S]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfbba + 3.0 * (0.5 * forcingTerm[B]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaab + 3.0 * (0.5 * forcingTerm[SW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfcab + 3.0 * (0.5 * forcingTerm[SE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfaba + 3.0 * (0.5 * forcingTerm[BW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcba + 3.0 * (0.5 * forcingTerm[BE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbaa + 3.0 * (0.5 * forcingTerm[BS]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbca + 3.0 * (0.5 * forcingTerm[BN]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaaa + 3.0 * (0.5 * forcingTerm[BSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcaa + 3.0 * (0.5 * forcingTerm[BSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaca + 3.0 * (0.5 * forcingTerm[BNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcca + 3.0 * (0.5 * forcingTerm[BNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbbb + 3.0 * (0.5 * forcingTerm[REST]) / rho)*((vvxF)*(vvxF)+(vvyF)*(vvyF)+(vvzF)*(vvzF)-1);
-
-			  // LBMReal divBeforeSource =
-				 //  (mfcbb)    * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) +
-				 //  (mfbcb)    * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfbbc)    * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfccb)   * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfacb)   * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfcbc)   * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfabc)   * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfbcc)   * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfbac)   * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfccc)  * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfacc)  * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfcac)  * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfaac)  * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfabb)    * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) +
-				 //  (mfbab)    * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfbba)    * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaab)   * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfcab)   * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfaba)   * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcba)   * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbaa)   * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbca)   * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaaa)  * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcaa)  * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaca)  * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcca)  * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbbb) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF) * (vvzF)-1);
-			   //if (divAfterSource - divBeforeSource != 0 && phi[REST]>0.0001 && phi[REST]<0.999) {
-				  // std::cout << phi[REST]<<" "<< divAfterSource << " " << divBeforeSource <<" "<< divAfterSource/ divBeforeSource << std::endl;
-			   //}
-
-			   //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) {
-				  // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource);
-
-				  // forcingTerm[dP00]	 *=scaleDiv;
-				  // forcingTerm[N]	 *=scaleDiv;
-				  // forcingTerm[T]	 *=scaleDiv;
-				  // forcingTerm[NE]	 *=scaleDiv;
-				  // forcingTerm[NW]	 *=scaleDiv;
-				  // forcingTerm[TE]	 *=scaleDiv;
-				  // forcingTerm[TW]	 *=scaleDiv;
-				  // forcingTerm[TN]	 *=scaleDiv;
-				  // forcingTerm[TS]	 *=scaleDiv;
-				  // forcingTerm[TNE]	 *=scaleDiv;
-				  // forcingTerm[TNW]	 *=scaleDiv;
-				  // forcingTerm[TSE]	 *=scaleDiv;
-				  // forcingTerm[TSW]	 *=scaleDiv;
-				  // forcingTerm[W]	 *=scaleDiv;
-				  // forcingTerm[S]	 *=scaleDiv;
-				  // forcingTerm[B]	 *=scaleDiv;
-				  // forcingTerm[SW]	 *=scaleDiv;
-				  // forcingTerm[SE]	 *=scaleDiv;
-				  // forcingTerm[BW]	 *=scaleDiv;
-				  // forcingTerm[BE]	 *=scaleDiv;
-				  // forcingTerm[BS]	 *=scaleDiv;
-				  // forcingTerm[BN]	 *=scaleDiv;
-				  // forcingTerm[BSW]	 *=scaleDiv;
-				  // forcingTerm[BSE]	 *=scaleDiv;
-				  // forcingTerm[BNW]	 *=scaleDiv;
-				  // forcingTerm[BNE]	 *=scaleDiv;
-				  // forcingTerm[REST] *=scaleDiv;
-			   //}
-			   ////////
-
-
-			   //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   //mfacb += 3.0 * (0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   //mfcbc += 3.0 * (0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   //mfabc += 3.0 * (0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   //mfbcc += 3.0 * (0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   //mfbac += 3.0 * (0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   //mfccc += 3.0 * (0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   //mfacc += 3.0 * (0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   //mfcac += 3.0 * (0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   //mfaac += 3.0 * (0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   //mfabb += 3.0 * (0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   //mfbab += 3.0 * (0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   //mfbba += 3.0 * (0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   //mfaab += 3.0 * (0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   //mfcab += 3.0 * (0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   //mfaba += 3.0 * (0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   //mfcba += 3.0 * (0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   //mfbaa += 3.0 * (0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   //mfbca += 3.0 * (0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   //mfaaa += 3.0 * (0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   //mfcaa += 3.0 * (0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   //mfaca += 3.0 * (0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   //mfcca += 3.0 * (0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   //mfbbb += 3.0 * (0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
-
-			   //--------------------------------------------------------
-
-
-
-
-
-			   //////end classic source term
-
-
-
-
-			   //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();
-
-				  // //vvx += forcingX1 * deltaT * 0.5; // X
-				  // //vvy += forcingX2 * deltaT * 0.5; // Y
-				  // //vvz += forcingX3 * deltaT * 0.5; // Z
-			   //}
-
-			   real vx2;
-               real vy2;
-               real vz2;
-               vx2 = vvx * vvx;
-               vy2 = vvy * vvy;
-               vz2 = vvz * vvz;
-			   ///////////////////////////////////////////////////////////////////////////////////////////               
-			   real 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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   real wadjust;
-			   real qudricLimit = 0.01;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //Hin
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   m2 = mfaaa + mfaac;
-			   m1 = mfaac - mfaaa;
-			   m0 = m2 + mfaab;
-			   mfaaa = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfaab = m1 - m0 * vvz;
-			   mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaba + mfabc;
-			   m1 = mfabc - mfaba;
-			   m0 = m2 + mfabb;
-			   mfaba = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfabb = m1 - m0 * vvz;
-			   mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaca + mfacc;
-			   m1 = mfacc - mfaca;
-			   m0 = m2 + mfacb;
-			   mfaca = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfacb = m1 - m0 * vvz;
-			   mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbaa + mfbac;
-			   m1 = mfbac - mfbaa;
-			   m0 = m2 + mfbab;
-			   mfbaa = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbab = m1 - m0 * vvz;
-			   mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbba + mfbbc;
-			   m1 = mfbbc - mfbba;
-			   m0 = m2 + mfbbb;
-			   mfbba = m0;
-			   m0 += c4o9 * oMdrho;
-			   mfbbb = m1 - m0 * vvz;
-			   mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbca + mfbcc;
-			   m1 = mfbcc - mfbca;
-			   m0 = m2 + mfbcb;
-			   mfbca = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbcb = m1 - m0 * vvz;
-			   mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcaa + mfcac;
-			   m1 = mfcac - mfcaa;
-			   m0 = m2 + mfcab;
-			   mfcaa = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfcab = m1 - m0 * vvz;
-			   mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcba + mfcbc;
-			   m1 = mfcbc - mfcba;
-			   m0 = m2 + mfcbb;
-			   mfcba = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfcbb = m1 - m0 * vvz;
-			   mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcca + mfccc;
-			   m1 = mfccc - mfcca;
-			   m0 = m2 + mfccb;
-			   mfcca = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfccb = m1 - m0 * vvz;
-			   mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   m2 = mfaaa + mfaca;
-			   m1 = mfaca - mfaaa;
-			   m0 = m2 + mfaba;
-			   mfaaa = m0;
-			   m0 += c1o6 * oMdrho;
-			   mfaba = m1 - m0 * vvy;
-			   mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaab + mfacb;
-			   m1 = mfacb - mfaab;
-			   m0 = m2 + mfabb;
-			   mfaab = m0;
-			   mfabb = m1 - m0 * vvy;
-			   mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaac + mfacc;
-			   m1 = mfacc - mfaac;
-			   m0 = m2 + mfabc;
-			   mfaac = m0;
-			   m0 += c1o18 * oMdrho;
-			   mfabc = m1 - m0 * vvy;
-			   mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbaa + mfbca;
-			   m1 = mfbca - mfbaa;
-			   m0 = m2 + mfbba;
-			   mfbaa = m0;
-			   m0 += c2o3 * oMdrho;
-			   mfbba = m1 - m0 * vvy;
-			   mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbab + mfbcb;
-			   m1 = mfbcb - mfbab;
-			   m0 = m2 + mfbbb;
-			   mfbab = m0;
-			   mfbbb = m1 - m0 * vvy;
-			   mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbac + mfbcc;
-			   m1 = mfbcc - mfbac;
-			   m0 = m2 + mfbbc;
-			   mfbac = m0;
-			   m0 += c2o9 * oMdrho;
-			   mfbbc = m1 - m0 * vvy;
-			   mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcaa + mfcca;
-			   m1 = mfcca - mfcaa;
-			   m0 = m2 + mfcba;
-			   mfcaa = m0;
-			   m0 += c1o6 * oMdrho;
-			   mfcba = m1 - m0 * vvy;
-			   mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcab + mfccb;
-			   m1 = mfccb - mfcab;
-			   m0 = m2 + mfcbb;
-			   mfcab = m0;
-			   mfcbb = m1 - m0 * vvy;
-			   mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcac + mfccc;
-			   m1 = mfccc - mfcac;
-			   m0 = m2 + mfcbc;
-			   mfcac = m0;
-			   m0 += c1o18 * oMdrho;
-			   mfcbc = m1 - m0 * vvy;
-			   mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   m2 = mfaaa + mfcaa;
-			   m1 = mfcaa - mfaaa;
-			   m0 = m2 + mfbaa;
-			   mfaaa = m0;
-			   m0 += 1. * oMdrho;
-			   mfbaa = m1 - m0 * vvx;
-			   mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaba + mfcba;
-			   m1 = mfcba - mfaba;
-			   m0 = m2 + mfbba;
-			   mfaba = m0;
-			   mfbba = m1 - m0 * vvx;
-			   mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaca + mfcca;
-			   m1 = mfcca - mfaca;
-			   m0 = m2 + mfbca;
-			   mfaca = m0;
-			   m0 += c1o3 * oMdrho;
-			   mfbca = m1 - m0 * vvx;
-			   mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaab + mfcab;
-			   m1 = mfcab - mfaab;
-			   m0 = m2 + mfbab;
-			   mfaab = m0;
-			   mfbab = m1 - m0 * vvx;
-			   mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfabb + mfcbb;
-			   m1 = mfcbb - mfabb;
-			   m0 = m2 + mfbbb;
-			   mfabb = m0;
-			   mfbbb = m1 - m0 * vvx;
-			   mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfacb + mfccb;
-			   m1 = mfccb - mfacb;
-			   m0 = m2 + mfbcb;
-			   mfacb = m0;
-			   mfbcb = m1 - m0 * vvx;
-			   mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaac + mfcac;
-			   m1 = mfcac - mfaac;
-			   m0 = m2 + mfbac;
-			   mfaac = m0;
-			   m0 += c1o3 * oMdrho;
-			   mfbac = m1 - m0 * vvx;
-			   mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfabc + mfcbc;
-			   m1 = mfcbc - mfabc;
-			   m0 = m2 + mfbbc;
-			   mfabc = m0;
-			   mfbbc = m1 - m0 * vvx;
-			   mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfacc + mfccc;
-			   m1 = mfccc - mfacc;
-			   m0 = m2 + mfbcc;
-			   mfacc = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbcc = m1 - m0 * vvx;
-			   mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Cumulants
-			   ////////////////////////////////////////////////////////////////////////////////////
-
-
-			  // mfaaa = 0.0;
-			   real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-			 //  LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
-			 //  LBMReal OxyyMxzz  = 1.;//2+s9;//
-			   real O4 = 1.;
-			   real O5 = 1.;
-			   real O6 = 1.;
-
-
-
-			   /////fourth order parameters; here only for test. Move out of loop!
-
-			   real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-			   real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-			//    real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-			   real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
-			   real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-
-
-			   //Cum 4.
-			   //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-			   //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-			   //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-			   real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-			   real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-			   real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-			   real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-			   real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-			   real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-
-			   //Cum 5.
-			   real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-			   real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-			   real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-			   //Cum 6.
-			   real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-				   - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-				   - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-				   - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-				   + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-					   + 2. * (mfcaa * mfaca * mfaac)
-					   + 16. * mfbba * mfbab * mfabb)
-				   - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-				   - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-				   + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-					   + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-				///storing pre collision second moments
-				// LBMReal mbxx = mfcaa - c1o3 * mfaaa;
-				// LBMReal mbyy = mfaca - c1o3 * mfaaa;
-				// LBMReal mbzz = mfaac - c1o3 * mfaaa;
-				// LBMReal mbxy = mfbba;
-				// LBMReal mbxz = mfbab;
-				// LBMReal mbyz = mfabb;
-
-			   //2.
-			   // linear combinations
-			   real mxxPyyPzz = mfcaa + mfaca + mfaac;
-
-			//  LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho));
-			  mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa
-				//mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
-			   real mxxMyy = mfcaa - mfaca;
-			   real mxxMzz = mfcaa - mfaac;
-
-			   //applying phase field gradients first part:
-			  // mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz);
-               // 17.03.2021 attempt for statililization by assymptotically vanishing bias
-               //LBMReal correctionScaling =
-               //    rhoToPhi / rho; // +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000;
-               //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) *
-               //             correctionScaling; // As in Hesam's code
-               //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling;
-               //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling;
-               //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling;
-               //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling;
-               //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling;
-
-			   real dxux =  -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
-			   real dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
-			   real dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
-
-			   real Dxy = -c3o1 * collFactorM * mfbba;
-			   real Dxz = -c3o1 * collFactorM * mfbab;
-			   real Dyz = -c3o1 * collFactorM * mfabb;
-
-
-			   //relax
-			   mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-			   mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-			   mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-			   mfabb += collFactorM * (-mfabb);
-			   mfbab += collFactorM * (-mfbab);
-			   mfbba += collFactorM * (-mfbba);
-
-			   //applying phase field gradients second part:
-			   //mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz);
-               //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) *
-               //             correctionScaling; // As in Hesam's code
-               //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling;
-               //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling;
-               //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling;
-               //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling;
-               //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling;
-
-               ////updated pressure
-               //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling;
-			   mfaaa = 0.0; // Pressure elimination as in standard velocity model
-			 //  mfaaa += (rho - c1) * (dxux + dyuy + dzuz);
-
-               mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
-
-			  // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2;
-			   //mfaaa = mfaaaS;
-			   // linear combinations back
-			   mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-			   mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-			   mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-			   //3.
-			   // linear combinations
-			   real mxxyPyzz = mfcba + mfabc;
-			   real mxxyMyzz = mfcba - mfabc;
-
-			   real mxxzPyyz = mfcab + mfacb;
-			   real mxxzMyyz = mfcab - mfacb;
-
-			   real mxyyPxzz = mfbca + mfbac;
-			   real mxyyMxzz = mfbca - mfbac;
-
-			   //relax
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-			   mfbbb += wadjust * (-mfbbb);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-			   mxxyPyzz += wadjust * (-mxxyPyzz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-			   mxxyMyzz += wadjust * (-mxxyMyzz);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-			   mxxzPyyz += wadjust * (-mxxzPyyz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-			   mxxzMyyz += wadjust * (-mxxzMyyz);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-			   mxyyPxzz += wadjust * (-mxyyPxzz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-			   mxyyMxzz += wadjust * (-mxyyMxzz);
-
-			   // linear combinations back
-			   mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-			   mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-			   mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-			   mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-			   mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-			   mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-			   //4.
-			   //CUMacc += O4 * (-CUMacc);
-			   //CUMcac += O4 * (-CUMcac);
-			   //CUMcca += O4 * (-CUMcca);
-
-			   //CUMbbc += O4 * (-CUMbbc);
-			   //CUMbcb += O4 * (-CUMbcb);
-			   //CUMcbb += O4 * (-CUMcbb);
-			   CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-			   CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-			   CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-			   CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc);
-			   CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb);
-			   CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb);
-
-			   //5.
-			   CUMbcc += O5 * (-CUMbcc);
-			   CUMcbc += O5 * (-CUMcbc);
-			   CUMccb += O5 * (-CUMccb);
-
-			   //6.
-			   CUMccc += O6 * (-CUMccc);
-
-			   //back cumulants to central moments
-			   //4.
-			   //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-			   //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-			   //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-			   mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-			   mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-			   mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-			   mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-			   mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-			   mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-
-			   //5.
-			   mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-			   mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-			   mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-			   //6.
-			   mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-				   - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-				   - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-				   - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-				   + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-					   + 2. * (mfcaa * mfaca * mfaac)
-					   + 16. * mfbba * mfbab * mfabb)
-				   - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-				   - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-				   + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-					   + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-
-			   ////////
-
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //forcing
-			   mfbaa = -mfbaa;
-			   mfaba = -mfaba;
-			   mfaab = -mfaab;
-			   //////////////////////////////////////////////////////////////////////////////////////
-			   //mfbaa += -rho * rhoToPhi * c1o2 * ((mbxx + mfcaa) * dX1_phi + (mbxy + mfbba) * dX2_phi + (mbxz + mfbab) * dX3_phi);
-			   //mfaba += -rho * rhoToPhi * c1o2 * ((mbxy + mfbba) * dX1_phi + (mbyy + mfaca) * dX2_phi + (mbyz + mfabb) * dX3_phi);
-			   //mfaab += -rho * rhoToPhi * c1o2 * ((mbxz + mfbab) * dX1_phi + (mbyz + mfabb) * dX2_phi + (mbzz + mfaac) * dX3_phi);
-			   mfbaa += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (2 * dxux * dX1_phi + Dxy * dX2_phi + Dxz * dX3_phi) / (rho);
-			   mfaba += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (Dxy * dX1_phi + 2 * dyuy * dX2_phi + Dyz * dX3_phi) / (rho);
-			   mfaab += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (Dxz * dX1_phi + Dyz * dX2_phi + 2 * dyuy * dX3_phi) / (rho);
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //back
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
-			   m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfaaa = m0;
-			   mfaab = m1;
-			   mfaac = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-			   m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
-			   m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-			   mfaba = m0;
-			   mfabb = m1;
-			   mfabc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2;
-			   m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfaca = m0;
-			   mfacb = m1;
-			   mfacc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-			   m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
-			   m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-			   mfbaa = m0;
-			   mfbab = m1;
-			   mfbac = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-			   m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
-			   m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-			   mfbba = m0;
-			   mfbbb = m1;
-			   mfbbc = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-			   m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
-			   m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-			   mfbca = m0;
-			   mfbcb = m1;
-			   mfbcc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2;
-			   m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfcaa = m0;
-			   mfcab = m1;
-			   mfcac = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-			   m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
-			   m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-			   mfcba = m0;
-			   mfcbb = m1;
-			   mfcbc = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
-			   m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfcca = m0;
-			   mfccb = m1;
-			   mfccc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
-			   m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaaa = m0;
-			   mfaba = m1;
-			   mfaca = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
-			   m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaab = m0;
-			   mfabb = m1;
-			   mfacb = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
-			   m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaac = m0;
-			   mfabc = m1;
-			   mfacc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-			   m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
-			   m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-			   mfbaa = m0;
-			   mfbba = m1;
-			   mfbca = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-			   m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
-			   m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-			   mfbab = m0;
-			   mfbbb = m1;
-			   mfbcb = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-			   m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
-			   m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-			   mfbac = m0;
-			   mfbbc = m1;
-			   mfbcc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
-			   m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcaa = m0;
-			   mfcba = m1;
-			   mfcca = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
-			   m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcab = m0;
-			   mfcbb = m1;
-			   mfccb = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
-			   m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcac = m0;
-			   mfcbc = m1;
-			   mfccc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaaa = m0;
-			   mfbaa = m1;
-			   mfcaa = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaba = m0;
-			   mfbba = m1;
-			   mfcba = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaca = m0;
-			   mfbca = m1;
-			   mfcca = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaab = m0;
-			   mfbab = m1;
-			   mfcab = m2;
-			   ///////////b////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
-			   m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfabb = m0;
-			   mfbbb = m1;
-			   mfcbb = m2;
-			   ///////////b////////////////////////////////////////////////////////////////////////
-			   m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfacb = m0;
-			   mfbcb = m1;
-			   mfccb = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaac = m0;
-			   mfbac = m1;
-			   mfcac = m2;
-			   ///////////c////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfabc = m0;
-			   mfbbc = m1;
-			   mfcbc = m2;
-			   ///////////c////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfacc = m0;
-			   mfbcc = m1;
-			   mfccc = m2;
-
-			   /////classical source term 8.4.2021
-
-			   //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   //mfacb += 3.0 * (0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   //mfcbc += 3.0 * (0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   //mfabc += 3.0 * (0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   //mfbcc += 3.0 * (0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   //mfbac += 3.0 * (0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   //mfccc += 3.0 * (0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   //mfacc += 3.0 * (0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   //mfcac += 3.0 * (0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   //mfaac += 3.0 * (0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   //mfabb += 3.0 * (0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   //mfbab += 3.0 * (0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   //mfbba += 3.0 * (0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   //mfaab += 3.0 * (0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   //mfcab += 3.0 * (0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   //mfaba += 3.0 * (0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   //mfcba += 3.0 * (0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   //mfbaa += 3.0 * (0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   //mfbca += 3.0 * (0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   //mfaaa += 3.0 * (0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   //mfcaa += 3.0 * (0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   //mfaca += 3.0 * (0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   //mfcca += 3.0 * (0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   //mfbbb += 3.0 * (0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
-
-
-
-			   //////////////////////////////////////////////////////////////////////////
-			   //proof correctness
-			   //////////////////////////////////////////////////////////////////////////
-//#ifdef  PROOF_CORRECTNESS
-			   real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-				   + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-				   + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-//			   //LBMReal dif = fabs(drho - rho_post);
-//               LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post;
-//#ifdef SINGLEPRECISION
-//			   if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//			   if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//			   {
-//				   UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post)
-//					   + " dif=" + UbSystem::toString(dif)
-//					   + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-//				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-//				   //exit(EXIT_FAILURE);
-//			   }
-//#endif
-
-			   if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post))
-				   UB_THROW(UbException(
-					   UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," +
-					   UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-
-			   //////////////////////////////////////////////////////////////////////////
-			   //write distribution
-			   //////////////////////////////////////////////////////////////////////////
-			   (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb         ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab         ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba         ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab        ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab       ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba        ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba       ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa        ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca       ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa       ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa      ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca      ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca     ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb     ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb     ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc     ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb   ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb    ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc   ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc    ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc   ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac    ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc  ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac  ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac   ;//* rho * c1o3;
-
-			   (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3;
-			   //////////////////////////////////////////////////////////////////////////
-
-			   ////!Incompressible Kernal
-
-                            
-//                            ///////Old Kernel \|/
-//                            // ux += forcingX1*deltaT*0.5; // X
-//                            // uy += forcingX2*deltaT*0.5; // Y
-//                            // uz += forcingX3*deltaT*0.5; // Z
-//                        }
-//
-//                        LBMReal ux = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-//                                      (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-//                                      (mfcbb - mfabb)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX1_phi + forcingX1) / (2 * rho);
-//
-//                        LBMReal uy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-//                                      (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-//                                      (mfbcb - mfbab)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX2_phi + forcingX2) / (2 * rho);
-//
-//                        LBMReal uz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-//                                      (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-//                                      (mfbbc - mfbba)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX3_phi + forcingX3) / (2 * rho);
-//
-//                        //--------------------------------------------------------
-//
-//                        LBMReal ux2 = ux * ux;
-//                        LBMReal uy2 = uy * uy;
-//                        LBMReal uz2 = uz * uz;
-//
-//                        //----------- Calculating Forcing Terms * -------------
-//                        for (int dir = STARTF; dir <= (FENDDIR); dir++) {
-//                            LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
-//                            LBMReal velSq1  = velProd * velProd;
-//                            LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2));
-//
-//                            LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
-//
-//                            forcingTerm[dir] = ((-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                                (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                                (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3))) +
-//                                               (DX1[dir]) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                               (DX2[dir]) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                               (DX3[dir]) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
-//                        }
-//
-//                        LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-//                        LBMReal fac1      = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi;
-//                        forcingTerm[REST] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                            (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                            (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
-//
-//                        //--------------------------------------------------------
-//
-//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-//                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-//                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-//                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-//                        mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-//                        mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-//                        mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-//                        mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-//                        mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-//                        mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-//                        mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-//                        mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-//                        mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-//                        mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-//                        mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-//                        mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-//                        mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-//                        mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-//                        mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-//                        mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-//                        mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-//                        mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-//                        mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-//                        mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-//                        mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-//                        mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-//                        mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST];
-//
-//                        LBMReal rho1 = (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 oMdrho, m0, m1, m2;
-//
-//                        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 = rho - (oMdrho + m0);
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        LBMReal wadjust;
-//                        LBMReal qudricLimit = 0.01;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Hin
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Z - Dir
-//                        m2    = mfaaa + mfaac;
-//                        m1    = mfaac - mfaaa;
-//                        m0    = m2 + mfaab;
-//                        mfaaa = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfaab = m1 - m0 * uz;
-//                        mfaac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaba + mfabc;
-//                        m1    = mfabc - mfaba;
-//                        m0    = m2 + mfabb;
-//                        mfaba = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfabb = m1 - m0 * uz;
-//                        mfabc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaca + mfacc;
-//                        m1    = mfacc - mfaca;
-//                        m0    = m2 + mfacb;
-//                        mfaca = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfacb = m1 - m0 * uz;
-//                        mfacc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbaa + mfbac;
-//                        m1    = mfbac - mfbaa;
-//                        m0    = m2 + mfbab;
-//                        mfbaa = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbab = m1 - m0 * uz;
-//                        mfbac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbba + mfbbc;
-//                        m1    = mfbbc - mfbba;
-//                        m0    = m2 + mfbbb;
-//                        mfbba = m0;
-//                        m0 += c4o9 * oMdrho;
-//                        mfbbb = m1 - m0 * uz;
-//                        mfbbc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbca + mfbcc;
-//                        m1    = mfbcc - mfbca;
-//                        m0    = m2 + mfbcb;
-//                        mfbca = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbcb = m1 - m0 * uz;
-//                        mfbcc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcaa + mfcac;
-//                        m1    = mfcac - mfcaa;
-//                        m0    = m2 + mfcab;
-//                        mfcaa = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfcab = m1 - m0 * uz;
-//                        mfcac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcba + mfcbc;
-//                        m1    = mfcbc - mfcba;
-//                        m0    = m2 + mfcbb;
-//                        mfcba = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfcbb = m1 - m0 * uz;
-//                        mfcbc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcca + mfccc;
-//                        m1    = mfccc - mfcca;
-//                        m0    = m2 + mfccb;
-//                        mfcca = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfccb = m1 - m0 * uz;
-//                        mfccc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Y - Dir
-//                        m2    = mfaaa + mfaca;
-//                        m1    = mfaca - mfaaa;
-//                        m0    = m2 + mfaba;
-//                        mfaaa = m0;
-//                        m0 += c1o6 * oMdrho;
-//                        mfaba = m1 - m0 * uy;
-//                        mfaca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaab + mfacb;
-//                        m1    = mfacb - mfaab;
-//                        m0    = m2 + mfabb;
-//                        mfaab = m0;
-//                        mfabb = m1 - m0 * uy;
-//                        mfacb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaac + mfacc;
-//                        m1    = mfacc - mfaac;
-//                        m0    = m2 + mfabc;
-//                        mfaac = m0;
-//                        m0 += c1o18 * oMdrho;
-//                        mfabc = m1 - m0 * uy;
-//                        mfacc = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbaa + mfbca;
-//                        m1    = mfbca - mfbaa;
-//                        m0    = m2 + mfbba;
-//                        mfbaa = m0;
-//                        m0 += c2o3 * oMdrho;
-//                        mfbba = m1 - m0 * uy;
-//                        mfbca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbab + mfbcb;
-//                        m1    = mfbcb - mfbab;
-//                        m0    = m2 + mfbbb;
-//                        mfbab = m0;
-//                        mfbbb = m1 - m0 * uy;
-//                        mfbcb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbac + mfbcc;
-//                        m1    = mfbcc - mfbac;
-//                        m0    = m2 + mfbbc;
-//                        mfbac = m0;
-//                        m0 += c2o9 * oMdrho;
-//                        mfbbc = m1 - m0 * uy;
-//                        mfbcc = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcaa + mfcca;
-//                        m1    = mfcca - mfcaa;
-//                        m0    = m2 + mfcba;
-//                        mfcaa = m0;
-//                        m0 += c1o6 * oMdrho;
-//                        mfcba = m1 - m0 * uy;
-//                        mfcca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcab + mfccb;
-//                        m1    = mfccb - mfcab;
-//                        m0    = m2 + mfcbb;
-//                        mfcab = m0;
-//                        mfcbb = m1 - m0 * uy;
-//                        mfccb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcac + mfccc;
-//                        m1    = mfccc - mfcac;
-//                        m0    = m2 + mfcbc;
-//                        mfcac = m0;
-//                        m0 += c1o18 * oMdrho;
-//                        mfcbc = m1 - m0 * uy;
-//                        mfccc = m2 - 2. * m1 * uy + uy2 * 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 * ux;
-//                        mfcaa = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaba + mfcba;
-//                        m1    = mfcba - mfaba;
-//                        m0    = m2 + mfbba;
-//                        mfaba = m0;
-//                        mfbba = m1 - m0 * ux;
-//                        mfcba = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaca + mfcca;
-//                        m1    = mfcca - mfaca;
-//                        m0    = m2 + mfbca;
-//                        mfaca = m0;
-//                        m0 += c1o3 * oMdrho;
-//                        mfbca = m1 - m0 * ux;
-//                        mfcca = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaab + mfcab;
-//                        m1    = mfcab - mfaab;
-//                        m0    = m2 + mfbab;
-//                        mfaab = m0;
-//                        mfbab = m1 - m0 * ux;
-//                        mfcab = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfabb + mfcbb;
-//                        m1    = mfcbb - mfabb;
-//                        m0    = m2 + mfbbb;
-//                        mfabb = m0;
-//                        mfbbb = m1 - m0 * ux;
-//                        mfcbb = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfacb + mfccb;
-//                        m1    = mfccb - mfacb;
-//                        m0    = m2 + mfbcb;
-//                        mfacb = m0;
-//                        mfbcb = m1 - m0 * ux;
-//                        mfccb = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaac + mfcac;
-//                        m1    = mfcac - mfaac;
-//                        m0    = m2 + mfbac;
-//                        mfaac = m0;
-//                        m0 += c1o3 * oMdrho;
-//                        mfbac = m1 - m0 * ux;
-//                        mfcac = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfabc + mfcbc;
-//                        m1    = mfcbc - mfabc;
-//                        m0    = m2 + mfbbc;
-//                        mfabc = m0;
-//                        mfbbc = m1 - m0 * ux;
-//                        mfcbc = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfacc + mfccc;
-//                        m1    = mfccc - mfacc;
-//                        m0    = m2 + mfbcc;
-//                        mfacc = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbcc = m1 - m0 * ux;
-//                        mfccc = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Cumulants
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        LBMReal OxxPyyPzz = 1.; // omega2 or bulk viscosity
-//                        LBMReal OxyyPxzz  = 1.; //-s9;//2+s9;//
-//                        LBMReal OxyyMxzz  = 1.; // 2+s9;//
-//                        LBMReal O4        = 1.;
-//                        LBMReal O5        = 1.;
-//                        LBMReal O6        = 1.;
-//
-//                        // Cum 4.
-//                        LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-//                        LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-//                        LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-//
-//                        LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) +
-//                                                  c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//                        LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) +
-//                                                  c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//                        LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) +
-//                                                  c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//
-//                        // Cum 5.
-//                        LBMReal CUMbcc = mfbcc -
-//                                         (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
-//                                          2. * (mfbab * mfacb + mfbba * mfabc)) -
-//                                         c1o3 * (mfbca + mfbac) * oMdrho;
-//                        LBMReal CUMcbc = mfcbc -
-//                                         (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
-//                                          2. * (mfabb * mfcab + mfbba * mfbac)) -
-//                                         c1o3 * (mfcba + mfabc) * oMdrho;
-//                        LBMReal CUMccb = mfccb -
-//                                         (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
-//                                          2. * (mfbab * mfbca + mfabb * mfcba)) -
-//                                         c1o3 * (mfacb + mfcab) * oMdrho;
-//
-//                        // Cum 6.
-//                        LBMReal CUMccc =
-//                            mfccc +
-//                            ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-//                              4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -
-//                              2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-//                             (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-//                              2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
-//                             c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-//                             c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
-//                             c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
-//                             (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
-//                              (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
-//                                 c2o3 * oMdrho) +
-//                            c1o27 * oMdrho;
-//
-//                        // 2.
-//                        // linear combinations
-//                        LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
-//                        LBMReal mxxMyy    = mfcaa - mfaca;
-//                        LBMReal mxxMzz    = mfcaa - mfaac;
-//
-//                        LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-//                        LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-//                        LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-//
-//                        (*divU)(x1, x2, x3) = dxux + dyuy + dzuz;
-//
-//                        // relax
-//                        mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) -
-//                                     3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz);
-//                        mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy);
-//                        mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz);
-//
-//                        mfabb += collFactorM * (-mfabb);
-//                        mfbab += collFactorM * (-mfbab);
-//                        mfbba += collFactorM * (-mfbba);
-//
-//                        // linear combinations back
-//                        mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-//                        mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-//                        mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-//
-//                        // 3.
-//                        // linear combinations
-//                        LBMReal mxxyPyzz = mfcba + mfabc;
-//                        LBMReal mxxyMyzz = mfcba - mfabc;
-//
-//                        LBMReal mxxzPyyz = mfcab + mfacb;
-//                        LBMReal mxxzMyyz = mfcab - mfacb;
-//
-//                        LBMReal mxyyPxzz = mfbca + mfbac;
-//                        LBMReal mxyyMxzz = mfbca - mfbac;
-//
-//                        // relax
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-//                        mfbbb += wadjust * (-mfbbb);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-//                        mxxyPyzz += wadjust * (-mxxyPyzz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-//                        mxxyMyzz += wadjust * (-mxxyMyzz);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-//                        mxxzPyyz += wadjust * (-mxxzPyyz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-//                        mxxzMyyz += wadjust * (-mxxzMyyz);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-//                        mxyyPxzz += wadjust * (-mxyyPxzz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-//                        mxyyMxzz += wadjust * (-mxyyMxzz);
-//
-//                        // linear combinations back
-//                        mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-//                        mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-//                        mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-//                        mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-//                        mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-//                        mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-//
-//                        // 4.
-//                        CUMacc += O4 * (-CUMacc);
-//                        CUMcac += O4 * (-CUMcac);
-//                        CUMcca += O4 * (-CUMcca);
-//
-//                        CUMbbc += O4 * (-CUMbbc);
-//                        CUMbcb += O4 * (-CUMbcb);
-//                        CUMcbb += O4 * (-CUMcbb);
-//
-//                        // 5.
-//                        CUMbcc += O5 * (-CUMbcc);
-//                        CUMcbc += O5 * (-CUMcbc);
-//                        CUMccb += O5 * (-CUMccb);
-//
-//                        // 6.
-//                        CUMccc += O6 * (-CUMccc);
-//
-//                        // back cumulants to central moments
-//                        // 4.
-//                        mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-//                        mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-//                        mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-//
-//                        mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//                        mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//                        mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//
-//                        // 5.
-//                        mfbcc = CUMbcc +
-//                                (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
-//                                 2. * (mfbab * mfacb + mfbba * mfabc)) +
-//                                c1o3 * (mfbca + mfbac) * oMdrho;
-//                        mfcbc = CUMcbc +
-//                                (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
-//                                 2. * (mfabb * mfcab + mfbba * mfbac)) +
-//                                c1o3 * (mfcba + mfabc) * oMdrho;
-//                        mfccb = CUMccb +
-//                                (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
-//                                 2. * (mfbab * mfbca + mfabb * mfcba)) +
-//                                c1o3 * (mfacb + mfcab) * oMdrho;
-//
-//                        // 6.
-//                        mfccc = CUMccc -
-//                                ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-//                                  4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) -
-//                                  2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-//                                 (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-//                                  2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
-//                                 c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-//                                 c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
-//                                 c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
-//                                 (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
-//                                  (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
-//                                     c2o3 * oMdrho) -
-//                                c1o27 * oMdrho;
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // forcing
-//                        mfbaa = -mfbaa;
-//                        mfaba = -mfaba;
-//                        mfaab = -mfaab;
-//                        //////////////////////////////////////////////////////////////////////////////////////
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // back
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Z - Dir
-//                        m0    = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2;
-//                        m2    = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfaaa = m0;
-//                        mfaab = m1;
-//                        mfaac = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2;
-//                        m1    = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2);
-//                        m2    = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2;
-//                        mfaba = m0;
-//                        mfabb = m1;
-//                        mfabc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2;
-//                        m2    = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfaca = m0;
-//                        mfacb = m1;
-//                        mfacc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2;
-//                        m1    = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2);
-//                        m2    = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2;
-//                        mfbaa = m0;
-//                        mfbab = m1;
-//                        mfbac = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2;
-//                        m1    = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2);
-//                        m2    = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2;
-//                        mfbba = m0;
-//                        mfbbb = m1;
-//                        mfbbc = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2;
-//                        m1    = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2);
-//                        m2    = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2;
-//                        mfbca = m0;
-//                        mfbcb = m1;
-//                        mfbcc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2;
-//                        m2    = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfcaa = m0;
-//                        mfcab = m1;
-//                        mfcac = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2;
-//                        m1    = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2);
-//                        m2    = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2;
-//                        mfcba = m0;
-//                        mfcbb = m1;
-//                        mfcbc = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2;
-//                        m2    = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfcca = m0;
-//                        mfccb = m1;
-//                        mfccc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Y - Dir
-//                        m0    = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2;
-//                        m2    = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaaa = m0;
-//                        mfaba = m1;
-//                        mfaca = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2;
-//                        m2    = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaab = m0;
-//                        mfabb = m1;
-//                        mfacb = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2;
-//                        m2    = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaac = m0;
-//                        mfabc = m1;
-//                        mfacc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2;
-//                        m1    = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2);
-//                        m2    = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2;
-//                        mfbaa = m0;
-//                        mfbba = m1;
-//                        mfbca = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2;
-//                        m1    = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2);
-//                        m2    = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2;
-//                        mfbab = m0;
-//                        mfbbb = m1;
-//                        mfbcb = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2;
-//                        m1    = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2);
-//                        m2    = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2;
-//                        mfbac = m0;
-//                        mfbbc = m1;
-//                        mfbcc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2;
-//                        m2    = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcaa = m0;
-//                        mfcba = m1;
-//                        mfcca = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2;
-//                        m2    = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcab = m0;
-//                        mfcbb = m1;
-//                        mfccb = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2;
-//                        m2    = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcac = m0;
-//                        mfcbc = m1;
-//                        mfccc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // X - Dir
-//                        m0    = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaaa = m0;
-//                        mfbaa = m1;
-//                        mfcaa = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaba = m0;
-//                        mfbba = m1;
-//                        mfcba = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaca = m0;
-//                        mfbca = m1;
-//                        mfcca = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaab = m0;
-//                        mfbab = m1;
-//                        mfcab = m2;
-//                        ///////////b////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2;
-//                        m2    = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfabb = m0;
-//                        mfbbb = m1;
-//                        mfcbb = m2;
-//                        ///////////b////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfacb = m0;
-//                        mfbcb = m1;
-//                        mfccb = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaac = m0;
-//                        mfbac = m1;
-//                        mfcac = m2;
-//                        ///////////c////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfabc = m0;
-//                        mfbbc = m1;
-//                        mfcbc = m2;
-//                        ///////////c////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfacc = m0;
-//                        mfbcc = m1;
-//                        mfccc = m2;
-//
-//                        ///////////////////////////////////////////////////////////////////////////
-//
-//                        //////////////////////////////////////////////////////////////////////////
-//                        // proof correctness
-//                        //////////////////////////////////////////////////////////////////////////
-//#ifdef PROOF_CORRECTNESS
-//                        LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
-//                                           (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
-//                                           (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) +
-//                                           (mfbba + mfbbc) + mfbbb;
-//
-//                        LBMReal dif = rho1 - rho_post;
-//#ifdef SINGLEPRECISION
-//                        if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//                        if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//                        {
-//                            UB_THROW(UbException(UB_EXARGS,
-//                                                 "rho=" + UbSystem::toString(rho) + ", rho_post=" +
-//                                                     UbSystem::toString(rho_post) + " dif=" + UbSystem::toString(dif) +
-//                                                     " rho is not correct for node " + UbSystem::toString(x1) + "," +
-//                                                     UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-//                        }
-//#endif
-//
-//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00];
-//                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N];
-//                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T];
-//                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE];
-//                        mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[NW];
-//                        mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[TE];
-//                        mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[TW];
-//                        mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[TN];
-//                        mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[TS];
-//                        mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[TNE];
-//                        mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[TNW];
-//                        mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[TSE];
-//                        mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[TSW];
-//                        mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[W];
-//                        mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[S];
-//                        mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[B];
-//                        mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[SW];
-//                        mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[SE];
-//                        mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[BW];
-//                        mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[BE];
-//                        mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[BS];
-//                        mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[BN];
-//                        mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[BSW];
-//                        mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[BSE];
-//                        mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[BNW];
-//                        mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[BNE];
-//                        mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[REST];
-//
-//                        //////////////////////////////////////////////////////////////////////////
-//                        // write distribution for F
-//                        //////////////////////////////////////////////////////////////////////////
-//
-//                        (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)     = mfabb;
-//                        (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)     = mfbab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)     = mfbba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)    = mfaab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)   = mfcab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)    = mfaba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)   = mfcba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)    = mfbaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)   = mfbca;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)   = mfaaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)  = mfcaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)  = mfaca;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-//
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac;
-//
-//                        (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
-// !Old Kernel
-                        /////////////////////  P H A S E - F I E L D   S O L V E R
-                        ////////////////////////////////////////////
-		/////CUMULANT PHASE-FIELD
-				real omegaD =1.0/( 3.0 * mob + 0.5);
-				{
-			   mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-			   mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-			   mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-			   mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-			   mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-			   mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-			   mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-			   mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-			   mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-			   mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-			   mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-			   mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-			   mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-			   mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-			   mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-			   mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-			   mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-			   mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-			   mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-			   mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-			   mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-			   mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-			   mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-			   mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-			   mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-			   mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-			   mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-
-					////////////////////////////////////////////////////////////////////////////////////
-		//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-		//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-		//!
-		////////////////////////////////////////////////////////////////////////////////////
-		// fluid component
-			   //LBMReal drhoFluid =
-				  // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) +
-				  // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) +
-					 //  ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb;
-
-			   //LBMReal rhoFluid = c1 + drhoFluid;
-			   //LBMReal OOrhoFluid = c1 / rhoFluid;
-
-
-			   //LBMReal vvx =
-				  // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) +
-				  // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) +
-					 //  (fcbb - fabb)) * OOrhoFluid;
-			   //LBMReal vvy =
-				  // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) +
-				  // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) +
-					 //  (fbcb - fbab)) * OOrhoFluid;
-			   //LBMReal vvz =
-				  // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) +
-				  // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) +
-					 //  (fbbc - fbba)) * OOrhoFluid;
-
-			 //  LBMReal vvx = ux;
-			 //  LBMReal vvy = uy;
-			 //  LBMReal vvz = uz;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // second component
-			   real concentration =
-				   ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-				   (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-					   ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //!
-			  // LBMReal fx = forces[0];
-			  // LBMReal fy = forces[1];
-			  // LBMReal fz = -concentration * forces[2];
-			  // vvx += fx * c1o2;
-			  // vvy += fy * c1o2;
-			  // vvz += fz * c1o2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   real oneMinusRho = c1o1 - concentration;
-
-			   real cx =
-				   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-				   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-					   (mfcbb - mfabb));
-			   real cy =
-				   ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-				   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-					   (mfbcb - mfbab));
-			   real cz =
-				   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-					   (mfbbc - mfbba));
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // calculate the square of velocities for this lattice node
-			   real cx2 = cx * cx;
-			   real cy2 = cy * cy;
-			   real cz2 = cz * cz;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //! see also Eq. (6)-(14) in \ref
-			   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-			   //!
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-			   forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-			   forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-			   forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-			   forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - experimental Cumulant ... to be published ... hopefully
-			   //!
-
-			   // linearized orthogonalization of 3rd order central moments
-			   real Mabc = mfabc - mfaba * c1o3;
-			   real Mbca = mfbca - mfbaa * c1o3;
-			   real Macb = mfacb - mfaab * c1o3;
-			   real Mcba = mfcba - mfaba * c1o3;
-			   real Mcab = mfcab - mfaab * c1o3;
-			   real Mbac = mfbac - mfbaa * c1o3;
-			   // linearized orthogonalization of 5th order central moments
-			   real Mcbc = mfcbc - mfaba * c1o9;
-			   real Mbcc = mfbcc - mfbaa * c1o9;
-			   real Mccb = mfccb - mfaab * c1o9;
-
-			   // collision of 1st order moments
-			  // LBMReal ccx, ccy, ccz;
-			   
-
-               cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-                    normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-               cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-                    normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-               cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-                    normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-
-			   //cx = cx * (c1 - omegaD) + omegaD * vvx * concentration +
-				  // normX1 * (c1 - 0.5 * omegaD) * (1.0 - phi[REST]) * (phi[REST])*(phi[REST]+phi2[REST]) * c1o3 * oneOverInterfaceScale;
-			   //cy = cy * (c1 - omegaD) + omegaD * vvy * concentration +
-				  // normX2 * (c1 - 0.5 * omegaD) * (1.0 - phi[REST]) * (phi[REST]) * (phi[REST] + phi2[REST]) * c1o3 * oneOverInterfaceScale;
-			   //cz = cz * (c1 - omegaD) + omegaD * vvz * concentration +
-				  // normX3 * (c1 - 0.5 * omegaD) * (1.0 - phi[REST]) * (phi[REST]) * (phi[REST] + phi2[REST]) * c1o3 * oneOverInterfaceScale;
-
-			   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
-			   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
-			//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz;
-
-
-			   cx2 = cx * cx;
-			   cy2 = cy * cy;
-			   cz2 = cz * cz;
-
-			   // equilibration of 2nd order moments
-			   mfbba = c0o1;
-			   mfbab = c0o1;
-			   mfabb = c0o1;
-
-			   mfcaa = c1o3 * concentration;
-			   mfaca = c1o3 * concentration;
-			   mfaac = c1o3 * concentration;
-
-
-			   //LBMReal omega2 = 1.0f;// omegaD;
-			   //mfbba *= (c1 - omega2);
-			   //mfbab *= (c1 - omega2);
-			   //mfabb *= (c1 - omega2);
-
-			   //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration;
-			   //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration;
-			   //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration;
-
-			   // equilibration of 3rd order moments
-			   Mabc = c0o1;
-			   Mbca = c0o1;
-			   Macb = c0o1;
-			   Mcba = c0o1;
-			   Mcab = c0o1;
-			   Mbac = c0o1;
-			   mfbbb = c0o1;
-
-			   // from linearized orthogonalization 3rd order central moments to central moments
-			   mfabc = Mabc + mfaba * c1o3;
-			   mfbca = Mbca + mfbaa * c1o3;
-			   mfacb = Macb + mfaab * c1o3;
-			   mfcba = Mcba + mfaba * c1o3;
-			   mfcab = Mcab + mfaab * c1o3;
-			   mfbac = Mbac + mfbaa * c1o3;
-
-			   // equilibration of 4th order moments
-			   mfacc = c1o9 * concentration;
-			   mfcac = c1o9 * concentration;
-			   mfcca = c1o9 * concentration;
-
-			   mfcbb = c0o1;
-			   mfbcb = c0o1;
-			   mfbbc = c0o1;
-
-			   // equilibration of 5th order moments
-			   Mcbc = c0o1;
-			   Mbcc = c0o1;
-			   Mccb = c0o1;
-
-			   // from linearized orthogonalization 5th order central moments to central moments
-			   mfcbc = Mcbc + mfaba * c1o9;
-			   mfbcc = Mbcc + mfbaa * c1o9;
-			   mfccb = Mccb + mfaab * c1o9;
-
-			   // equilibration of 6th order moment
-			   mfccc = c1o27 * concentration;
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //! see also Eq. (88)-(96) in
-			   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-			   //!
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-			   backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-			   backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-			   backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-			   backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-			   (*this->localDistributionsH1)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-   (*this->localDistributionsH1)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-   (*this->localDistributionsH1)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-   (*this->localDistributionsH1)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-   (*this->localDistributionsH1)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-   (*this->localDistributionsH1)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-   (*this->localDistributionsH1)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-   (*this->localDistributionsH1)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-   (*this->localDistributionsH1)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-   (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-   (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-   (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-   (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-   (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb;
-   }
-
-   ////Phasefield 2:
-
-   {
-
-   normX1 *= -1;
-   normX2 *= -1;
-   normX3 *= -1;
-
-   mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
-   mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
-   mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
-   mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
-   mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
-   mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
-   mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
-   mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
-   mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
-   mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
-   mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
-   mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
-   mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
-   mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
-   mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
-   mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
-   mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
-   mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
-   mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
-   mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
-   mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
-   mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
-   mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-   mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
-   mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
-   mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
-   mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3);
-
-
-   ////////////////////////////////////////////////////////////////////////////////////
-//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-//!
-////////////////////////////////////////////////////////////////////////////////////
-// fluid component
-	   //LBMReal drhoFluid =
-		  // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) +
-		  // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) +
-			 //  ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb;
-
-	   //LBMReal rhoFluid = c1 + drhoFluid;
-	   //LBMReal OOrhoFluid = c1 / rhoFluid;
-
-
-	   //LBMReal vvx =
-		  // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) +
-		  // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) +
-			 //  (fcbb - fabb)) * OOrhoFluid;
-	   //LBMReal vvy =
-		  // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) +
-		  // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) +
-			 //  (fbcb - fbab)) * OOrhoFluid;
-	   //LBMReal vvz =
-		  // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) +
-		  // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) +
-			 //  (fbbc - fbba)) * OOrhoFluid;
-
-	 //  LBMReal vvx = ux;
-	 //  LBMReal vvy = uy;
-	 //  LBMReal vvz = uz;
-	   ////////////////////////////////////////////////////////////////////////////////////
-	   // second component
-   real concentration =
-	   ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-	   (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-		   ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref
-   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-   //!
-  // LBMReal fx = forces[0];
-  // LBMReal fy = forces[1];
-  // LBMReal fz = -concentration * forces[2];
-  // vvx += fx * c1o2;
-  // vvy += fy * c1o2;
-  // vvz += fz * c1o2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   real oneMinusRho = c1o1 - concentration;
-
-   real cx =
-	   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-	   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-		   (mfcbb - mfabb));
-   real cy =
-	   ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-	   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-		   (mfbcb - mfbab));
-   real cz =
-	   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-	   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-		   (mfbbc - mfbba));
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // calculate the square of velocities for this lattice node
-   real cx2 = cx * cx;
-   real cy2 = cy * cy;
-   real cz2 = cz * cz;
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-   //! see also Eq. (6)-(14) in \ref
-   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-   //!
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Z - Dir
-   forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Y - Dir
-   forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-   forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-   forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-   forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-   forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // X - Dir
-   forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-   forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-   forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-   forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-   forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-   forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-   forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-   forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-   forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - experimental Cumulant ... to be published ... hopefully
-   //!
-
-   // linearized orthogonalization of 3rd order central moments
-   real Mabc = mfabc - mfaba * c1o3;
-   real Mbca = mfbca - mfbaa * c1o3;
-   real Macb = mfacb - mfaab * c1o3;
-   real Mcba = mfcba - mfaba * c1o3;
-   real Mcab = mfcab - mfaab * c1o3;
-   real Mbac = mfbac - mfbaa * c1o3;
-   // linearized orthogonalization of 5th order central moments
-   real Mcbc = mfcbc - mfaba * c1o9;
-   real Mbcc = mfbcc - mfbaa * c1o9;
-   real Mccb = mfccb - mfaab * c1o9;
-
-   // collision of 1st order moments
-   cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-	   normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
-   cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-	   normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
-   cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-	   normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
-
-   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
-   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
-//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz;
-
-
-   cx2 = cx * cx;
-   cy2 = cy * cy;
-   cz2 = cz * cz;
-
-   // equilibration of 2nd order moments
-   mfbba = c0o1;
-   mfbab = c0o1;
-   mfabb = c0o1;
-
-   mfcaa = c1o3 * concentration;
-   mfaca = c1o3 * concentration;
-   mfaac = c1o3 * concentration;
-
-
-   //LBMReal omega2 = 1.0f;// omegaD;
-   //mfbba *= (c1 - omega2);
-   //mfbab *= (c1 - omega2);
-   //mfabb *= (c1 - omega2);
-
-   //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration;
-   //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration;
-   //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration;
-
-   // equilibration of 3rd order moments
-   Mabc = c0o1;
-   Mbca = c0o1;
-   Macb = c0o1;
-   Mcba = c0o1;
-   Mcab = c0o1;
-   Mbac = c0o1;
-   mfbbb = c0o1;
-
-   // from linearized orthogonalization 3rd order central moments to central moments
-   mfabc = Mabc + mfaba * c1o3;
-   mfbca = Mbca + mfbaa * c1o3;
-   mfacb = Macb + mfaab * c1o3;
-   mfcba = Mcba + mfaba * c1o3;
-   mfcab = Mcab + mfaab * c1o3;
-   mfbac = Mbac + mfbaa * c1o3;
-
-   // equilibration of 4th order moments
-   mfacc = c1o9 * concentration;
-   mfcac = c1o9 * concentration;
-   mfcca = c1o9 * concentration;
-
-   mfcbb = c0o1;
-   mfbcb = c0o1;
-   mfbbc = c0o1;
-
-   // equilibration of 5th order moments
-   Mcbc = c0o1;
-   Mbcc = c0o1;
-   Mccb = c0o1;
-
-   // from linearized orthogonalization 5th order central moments to central moments
-   mfcbc = Mcbc + mfaba * c1o9;
-   mfbcc = Mbcc + mfbaa * c1o9;
-   mfccb = Mccb + mfaab * c1o9;
-
-   // equilibration of 6th order moment
-   mfccc = c1o27 * concentration;
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-   //! see also Eq. (88)-(96) in
-   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-   //!
-   ////////////////////////////////////////////////////////////////////////////////////
-   // X - Dir
-   backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-   backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-   backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-   backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-   backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-   backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-   backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-   backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-   backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Y - Dir
-   backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-   backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-   backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-   backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-   backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Z - Dir
-   backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-   (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-   (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-   (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-   (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-   (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-   (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-   (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-   (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-   (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-   (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-   (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-   (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-   (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-   (*this->zeroDistributionsH2)(x1, x2, x3) = mfbbb;
-
-   }
-
-
-
-		/////!CUMULANT PHASE-FIELD
-
-
-
-                        /////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
-
-                        //h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                        //h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                        //h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                        //h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                        //h[NW]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                        //h[TE]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                        //h[TW]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                        //h[TN]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                        //h[TS]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                        //h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                        //h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        //h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        //h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                        //h[W]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                        //h[S]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                        //h[B]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                        //h[SW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        //h[SE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                        //h[BW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        //h[BE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                        //h[BS]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        //h[BN]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                        //h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        //h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        //h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        //h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        //h[REST] = (*this->zeroDistributionsH)(x1, x2, x3);
-
-                        //for (int dir = STARTF; dir < (ENDF + 1); dir++) {
-                        //    LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
-                        //    LBMReal velSq1  = velProd * velProd;
-                        //    LBMReal hEq; //, gEq;
-
-                        //    if (dir != REST) {
-                        //        LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0;
-                        //        LBMReal hSource     = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; 
-                        //        hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) +                                 hSource * WEIGTH[dir];
-
-                        //        // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5).
-                        //        h[dir] = h[dir] - (h[dir] - hEq) / (tauH); 
-
-                        //    } else {
-                        //        hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-                        //        h[REST] = h[REST] - (h[REST] - hEq) / (tauH); 
-                        //    }
-                        //}
-
-                        //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3)     = h[D3Q27System::INV_E];
-                        //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3)     = h[D3Q27System::INV_N];
-                        //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3)     = h[D3Q27System::INV_T];
-                        //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3)    = h[D3Q27System::INV_NE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3)   = h[D3Q27System::INV_NW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3)    = h[D3Q27System::INV_TE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3)   = h[D3Q27System::INV_TW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3)    = h[D3Q27System::INV_TN];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3)   = h[D3Q27System::INV_TS];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3)   = h[D3Q27System::INV_TNE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3)  = h[D3Q27System::INV_TNW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3)  = h[D3Q27System::INV_TSE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW];
-
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3)     = h[D3Q27System::INV_W];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3)     = h[D3Q27System::INV_S];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p)     = h[D3Q27System::INV_B];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3)   = h[D3Q27System::INV_SW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3)    = h[D3Q27System::INV_SE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p)   = h[D3Q27System::INV_BW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p)    = h[D3Q27System::INV_BE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p)   = h[D3Q27System::INV_BS];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p)    = h[D3Q27System::INV_BN];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p)  = h[D3Q27System::INV_BSE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p)  = h[D3Q27System::INV_BNW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p)   = h[D3Q27System::INV_BNE];
-
-                        //(*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST];
-
-                        /////////////////////   END OF OLD BGK SOLVER ///////////////////////////////
-                    }
-                }
-            }
-        
-       // dataSet->setPhaseField(divU);
-		}
-}
-//////////////////////////////////////////////////////////////////////////
-
-real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX1_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
-		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX1[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX2_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
-		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
-		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX2[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX3_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
-		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX3[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX1_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
-		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
-	//LBMReal sum = 0.0;
-	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-	//    sum += WEIGTH[k] * DX1[k] * phi2[k];
-	//}
-	//return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX2_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
-		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
-		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
-	//LBMReal sum = 0.0;
-	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-	//    sum += WEIGTH[k] * DX2[k] * phi2[k];
-	//}
-	//return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX3_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
-		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
-	//LBMReal sum = 0.0;
-	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-	//    sum += WEIGTH[k] * DX3[k] * phi2[k];
-	//}
-	//return 3.0 * sum;
-}
-
-
-
-
-
-real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::nabla2_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    real sum = 0.0;
-	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
-		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
-	sum += WEIGTH[d0PP] * (
-			(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
-		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
-		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
-		);
-	sum += WEIGTH[d00P] * (
-			((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
-		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
-		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
-		);
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * (phi[k] - phi[REST]);
-    //}
-    return 6.0 * sum;
-}
-
-void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::computePhasefield()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-    int minX1 = ghostLayerWidth;
-    int minX2 = ghostLayerWidth;
-    int minX3 = ghostLayerWidth;
-    int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-    int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-    int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-    //------------- Computing the phase-field ------------------
-    for (int x3 = minX3; x3 < maxX3; x3++) {
-        for (int x2 = minX2; x2 < maxX2; x2++) {
-            for (int x1 = minX1; x1 < maxX1; x1++) {
-                // if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-                {
-                    int x1p = x1 + 1;
-                    int x2p = x2 + 1;
-                    int x3p = x3 + 1;
-
-                    h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                    h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                    h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                    h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
-                }
-            }
-        }
-    }
-}
-
-void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-                                                int x3)
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-    phi[d000] = (*ph)(x1, x2, x3);
-
-
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-        if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-            phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-        } else {
-			phi[k] = 0.0;
-         }
-    }
-}
-
-void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi2[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		}
-		else {
-			phi2[k] = 0.0;
-		}
-	}
-}
-
-void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::swapDistributions()
-{
-    LBMKernel::swapDistributions();
-    dataSet->getHdistributions()->swap();
-	dataSet->getH2distributions()->swap();
-}
-
-void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::initForcing()
-{
-	muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3);
-	muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3);
-	muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3);
-
-	muDeltaT = deltaT;
-
-	muForcingX1.DefineVar("dt", &muDeltaT);
-	muForcingX2.DefineVar("dt", &muDeltaT);
-	muForcingX3.DefineVar("dt", &muDeltaT);
-
-	muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
-
-	muForcingX1.DefineVar("nu", &muNu);
-	muForcingX2.DefineVar("nu", &muNu);
-	muForcingX3.DefineVar("nu", &muNu);
-
-	muForcingX1.DefineVar("rho",&muRho); 
-	muForcingX2.DefineVar("rho",&muRho); 
-	muForcingX3.DefineVar("rho",&muRho); 
-
-}
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h
deleted file mode 100644
index c486caf0c0fb64c3a9a7366b55bb3150c139468a..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h
+++ /dev/null
@@ -1,130 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h
-//! \ingroup LBMKernel
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseTwoPhaseFieldsPressureFilterLBMKernel_H
-#define MultiphaseTwoPhaseFieldsPressureFilterLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  H. Safari, K. Kutscher, M. Geier
-class MultiphaseTwoPhaseFieldsPressureFilterLBMKernel : public LBMKernel
-{
-public:
-   MultiphaseTwoPhaseFieldsPressureFilterLBMKernel();
-   virtual ~MultiphaseTwoPhaseFieldsPressureFilterLBMKernel(void) = default;
-   void calculate(int step) override;
-   SPtr<LBMKernel> clone() override;
-
-
-   ///refactor
-   //CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure;
-   
-
-   real getCalculationTime() override { return .0; }
-protected:
-   virtual void initDataSet();
-   void swapDistributions() override;
-
-   void initForcing();
-
-   void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-   void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-   void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-   void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-
-   real f1[D3Q27System::ENDF+1];
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH1;
-
-   CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2;
-   CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2;
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH2;
-
-   //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr   phaseField;
-
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld;
-
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField;
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField2; 
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; 
-
-   real h  [D3Q27System::ENDF+1];
-   real h2[D3Q27System::ENDF + 1];
-   real g  [D3Q27System::ENDF+1];
-   real phi[D3Q27System::ENDF+1];
-   real phi2[D3Q27System::ENDF + 1];
-   real pr1[D3Q27System::ENDF+1];
-   real phi_cutoff[D3Q27System::ENDF+1];
-
-   real gradX1_phi();
-   real gradX2_phi();
-   real gradX3_phi();
-   real gradX1_phi2();
-   real gradX2_phi2();
-   real gradX3_phi2();
-   //LBMReal gradX1_pr1();
-   //LBMReal gradX2_pr1();
-   //LBMReal gradX3_pr1();
-   //LBMReal dirgradC_phi(int n, int k);
-   void computePhasefield();
-   void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-   void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3);
-   //void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, int x1, int x2, int x3);
-   //void pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/);
-
-   real nabla2_phi();
-
-
-   mu::value_type muX1,muX2,muX3;
-   mu::value_type muDeltaT;
-   mu::value_type muNu;
-   mu::value_type muRho;
-   real forcingX1;
-   real forcingX2;
-   real forcingX3;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp
deleted file mode 100644
index d15714f6f8da63e020a7ee40ea953779e25e46c6..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp
+++ /dev/null
@@ -1,3516 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp
-//! \ingroup LBMKernel
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27System.h"
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include <cmath>
-
-#define PROOF_CORRECTNESS
-
-//////////////////////////////////////////////////////////////////////////
-MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel() { this->compressible = false; }
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::initDataSet()
-{
-    SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
-    SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); // For phase-field
-    SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); // For phase-field
-    SPtr<PhaseFieldArray3D> divU(new PhaseFieldArray3D(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0));
-	 pressure= CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0));
-	 pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<real, IndexerX3X2X1>(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0));
-    dataSet->setFdistributions(f);
-    dataSet->setHdistributions(h); // For phase-field
-    dataSet->setH2distributions(h2); // For phase-field
-    dataSet->setPhaseField(divU);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::clone()
-{
-    SPtr<LBMKernel> kernel(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel());
-    kernel->setNX(nx);
-    dynamicPointerCast<MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel>(kernel)->initDataSet();
-    kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
-    kernel->setDensityRatio(this->densityRatio);
-    kernel->setMultiphaseModelParameters(this->beta, this->kappa);
-    kernel->setContactAngle(this->contactAngle);
-    kernel->setPhiL(this->phiL);
-    kernel->setPhiH(this->phiH);
-    kernel->setPhaseFieldRelaxation(this->tauH);
-    kernel->setMobility(this->mob);
-
-    kernel->setBCSet(bcSet->clone(kernel));
-    kernel->setWithForcing(withForcing);
-    kernel->setForcingX1(muForcingX1);
-    kernel->setForcingX2(muForcingX2);
-    kernel->setForcingX3(muForcingX3);
-    kernel->setIndex(ix1, ix2, ix3);
-    kernel->setDeltaT(deltaT);
-
-    return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
- void  MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	 
-	real m2 = mfa + mfc;
-	real m1 = mfc - mfa;
-	real m0 = m2 + mfb;
-	mfa = m0;
-	m0 *= Kinverse;
-	m0 += oneMinusRho;
-	mfb = (m1 * Kinverse - m0 * vv) * K;
-	mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K;
-}
-
-////////////////////////////////////////////////////////////////////////////////
- void  MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	 
-	real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
-	real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
-	mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
-	mfa = m0;
-	mfb = m1;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
- void  MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	 
-	real m1 = (mfa + mfc) + mfb;
-	real m2 = mfc - mfa;
-	mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2);
-	mfb = m2 - vv * m1;
-	mfa = m1;
-}
-
-
- void  MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) {
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-	 
-	real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
-	real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv;
-	mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
-	mfb = mb;
-	mfa = ma;
-}
-
-
-void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step)
-{
-    using namespace D3Q27System;
- //   using namespace UbMath;
-	using namespace vf::lbm::dir;
-	using namespace vf::basics::constant;
-
-    forcingX1 = 0.0;
-    forcingX2 = 0.0;
-    forcingX3 = 0.0;
-
-	real oneOverInterfaceScale = 1.0;
-    /////////////////////////////////////
-
-    localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-    nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-    zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-    localDistributionsH1    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-    nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-    zeroDistributionsH1     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-	localDistributionsH2    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions();
-    nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions();
-    zeroDistributionsH2     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions();
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-    //TODO
-	//very expensive !!!!!
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField(
-            new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField2(
-        new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
-        CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU(
-            new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
-
-#pragma omp parallel for
-	  for (int x3 = 0; x3 <= maxX3; x3++) {
-            for (int x2 = 0; x2 <= maxX2; x2++) {
-                for (int x1 = 0; x1 <= maxX1; x1++) {
-                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                        int x1p = x1 + 1;
-                        int x2p = x2 + 1;
-                        int x3p = x3 + 1;
-
-                        real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                        real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                        real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                        real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                        real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                        real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                        real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                        real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                        real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                        real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                        real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                        real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                        real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                        real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                        real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                        real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                        real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-                        (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
-                                                    (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-                                                    ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
-                                                    (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-
-                        mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
-                        mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
-                        mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
-                        mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
-                        mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
-                        mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
-                        mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
-                        mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
-                        mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
-                        mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
-                        mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
-                        mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
-                        mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
-                        mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
-                        mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
-                        mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
-                        mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3);
-                        (*phaseField2)(x1, x2, x3) =
-                            (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) +
-                            (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
-                             ((mfbaa + mfbac) + (mfbca + mfbcc))) +
-                            ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
-						//(*phaseField)(x1, x2, x3) = (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;
-
-////// read F-distributions for velocity formalism
-
-
-						 mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-						 mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-						 mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-						 mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-						 mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-						 mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-						 mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-						 mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-						 mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-						 mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-						 mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-						 mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-						 mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-						 mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-						 mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-						 mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-						 mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-						 mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-						 mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-						 mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-						 mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-						 mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-						 mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						 mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						 mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						 mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-						 mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-						real rhoH = 1.0;
-						real rhoL = 1.0 / densityRatio;
-
-						real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-						real drho = (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;
-
-						real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
-						(*pressure)(x1, x2, x3) = (*pressure)(x1, x2, x3) + rho * c1o3 * drho;
-
-						////!!!!!! relplace by pointer swap!
-						(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3);
-                    }
-                }
-            }
-        }
-
-        real collFactorM;
-        //LBMReal forcingTerm[D3Q27System::ENDF + 1];
-
-		////filter
-
-		//for (int x3 = minX3; x3 < maxX3; x3++) {
-		//	for (int x2 = minX2; x2 < maxX2; x2++) {
-		//		for (int x1 = minX1; x1 < maxX1; x1++) {
-		//			if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-
-		//				LBMReal sum = 0.;
-
-		//				//Lapalce pressure
-		//				//sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3+1) - (*pressure)(x1, x2, x3))))
-		//				//	+ ((((*pressure)(x1+1, x2-1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3+1) - (*pressure)(x1, x2, x3)))));
-		//				//sum += WEIGTH[TN] * (
-		//				//	((((*pressure)(x1+1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3) - (*pressure)(x1, x2, x3))))
-		//				//	+ ((((*pressure)(x1+1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3+1) - (*pressure)(x1, x2, x3))))
-		//				//	+ ((((*pressure)(x1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) - (*pressure)(x1, x2, x3))))
-		//				//	);
-		//				//sum += WEIGTH[T] * (
-		//				//	(((*pressure)(x1+1, x2, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3) - (*pressure)(x1, x2, x3)))
-		//				//	+ (((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3) - (*pressure)(x1, x2, x3)))
-		//				//	+ (((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2, x3-1) - (*pressure)(x1, x2, x3)))
-		//				//	);
-
-
-		//				//LBMReal pressureFilter = 100;
-		//				//(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + pressureFilter * sum * (sqrt(fabs(sum)));
-
-		//				//Situpol Eq. 81
-		//				sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1)) + ((*pressure)(x1-1, x2-1, x3-1) )) + (((*pressure)(x1+1, x2+1, x3-1) ) + ((*pressure)(x1-1, x2-1, x3+1) )))
-		//					+ ((((*pressure)(x1+1, x2-1, x3+1) ) + ((*pressure)(x1-1, x2+1, x3-1) )) + (((*pressure)(x1+1, x2-1, x3-1) ) + ((*pressure)(x1-1, x2+1, x3+1) ))));
-		//				sum += WEIGTH[TN] * (
-		//					((((*pressure)(x1+1, x2+1, x3) ) + ((*pressure)(x1-1, x2-1, x3) )) + (((*pressure)(x1+1, x2-1, x3) ) + ((*pressure)(x1-1, x2+1, x3) )))
-		//					+ ((((*pressure)(x1+1, x2, x3+1) ) + ((*pressure)(x1-1, x2, x3-1) )) + (((*pressure)(x1+1, x2, x3-1) ) + ((*pressure)(x1-1, x2, x3+1) )))
-		//					+ ((((*pressure)(x1, x2+1, x3+1) ) + ((*pressure)(x1, x2-1, x3-1) )) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) )))
-		//					);
-		//				sum += WEIGTH[T] * (
-		//					(((*pressure)(x1+1, x2, x3) ) + ((*pressure)(x1-1, x2, x3) ))
-		//					+ (((*pressure)(x1, x2+1, x3) ) + ((*pressure)(x1, x2-1, x3) ))
-		//					+ (((*pressure)(x1, x2, x3+1)) + ((*pressure)(x1, x2, x3-1) ))
-		//					);
-		//				sum += WEIGTH[REST] * (*pressure)(x1, x2, x3);
-		//				(*pressureOld)(x1, x2, x3) = sum;
-
-
-
-
-		//			}
-		//		}
-		//	}
-		//}
-
-		////Periodic Filter
-#pragma omp parallel for
-		for (int x3 = 0; x3 <= maxX3; x3++) {
-			for (int x2 = 0; x2 <= maxX2; x2++) {
-				for (int x1 = 0; x1 <= maxX1; x1++) {
-					if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-
-						real sum = 0.;
-
-
-
-						//Lapalce pressure
-						//sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3+1) - (*pressure)(x1, x2, x3))))
-						//	+ ((((*pressure)(x1+1, x2-1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3+1) - (*pressure)(x1, x2, x3)))));
-						//sum += WEIGTH[TN] * (
-						//	((((*pressure)(x1+1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3) - (*pressure)(x1, x2, x3))))
-						//	+ ((((*pressure)(x1+1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3+1) - (*pressure)(x1, x2, x3))))
-						//	+ ((((*pressure)(x1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) - (*pressure)(x1, x2, x3))))
-						//	);
-						//sum += WEIGTH[T] * (
-						//	(((*pressure)(x1+1, x2, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3) - (*pressure)(x1, x2, x3)))
-						//	+ (((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3) - (*pressure)(x1, x2, x3)))
-						//	+ (((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2, x3-1) - (*pressure)(x1, x2, x3)))
-						//	);
-
-
-						//LBMReal pressureFilter = 100;
-						//(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + pressureFilter * sum * (sqrt(fabs(sum)));
-
-						//Situpol Eq. 81
-
-						//int x1p = (x1 < maxX1) ? x1 + 1 : 0;
-						//int x1m = (x1 > 0) ? x1 - 1 : maxX1;
-						//int x2p = (x2 < maxX2) ? x2 + 1 : 0;
-						//int x2m = (x2 > 0) ? x2 - 1 : maxX2;
-						//int x3p = (x3 < maxX3) ? x3 + 1 : 0;
-						//int x3m = (x3 > 0) ? x3 - 1 : maxX3;
-						//sum += WEIGTH[TNE] * (((((*pressure)(x1p, x2p, x3p)) + ((*pressure)(x1m, x2m, x3m))) + (((*pressure)(x1p, x2p, x3m)) + ((*pressure)(x1m, x2m, x3p))))
-						//	+ ((((*pressure)(x1p, x2m, x3p)) + ((*pressure)(x1m, x2p, x3m))) + (((*pressure)(x1p, x2m, x3m)) + ((*pressure)(x1m, x2p, x3p)))));
-						//sum += WEIGTH[TN] * (
-						//	((((*pressure)(x1p, x2p, x3)) + ((*pressure)(x1m, x2m, x3))) + (((*pressure)(x1p, x2m, x3)) + ((*pressure)(x1m, x2p, x3))))
-						//	+ ((((*pressure)(x1p, x2, x3p)) + ((*pressure)(x1m, x2, x3m))) + (((*pressure)(x1p, x2, x3m)) + ((*pressure)(x1m, x2, x3p))))
-						//	+ ((((*pressure)(x1, x2p, x3p)) + ((*pressure)(x1, x2m, x3m))) + (((*pressure)(x1, x2p, x3m) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2m, x3p))))
-						//	);
-						//sum += WEIGTH[T] * (
-						//	(((*pressure)(x1p, x2, x3)) + ((*pressure)(x1m, x2, x3)))
-						//	+ (((*pressure)(x1, x2p, x3)) + ((*pressure)(x1, x2m, x3)))
-						//	+ (((*pressure)(x1, x2, x3p)) + ((*pressure)(x1, x2, x3m)))
-						//	);
-						//sum += WEIGTH[REST] * (*pressure)(x1, x2, x3);
-						//(*pressureOld)(x1, x2, x3) = sum;
-						 
-						///Version for boundaries
-						for (int xx = -1; xx <= 1; xx++) {
-							int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0;
-
-							for (int yy = -1; yy <= 1; yy++) {
-								int yyy = (yy+x2 <= maxX2) ? ((yy + x2 > 0) ? yy + x2 : maxX2) : 0;
-
-								for (int zz = -1; zz <= 1; zz++) {
-									int zzz = (zz+x3 <= maxX3) ? ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0;
-
-									if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) {
-										sum+= 64.0/(216.0*(c1o1+c3o1 *abs(xx))* (c1o1 + c3o1 * abs(yy))* (c1o1 + c3o1 * abs(zz)))*(*pressure)(xxx, yyy, zzz);
-									}
-									else{ sum+= 64.0 / (216.0 * (c1o1 + c3o1 * abs(xx)) * (c1o1 + c3o1 * abs(yy)) * (c1o1 + c3o1 * abs(zz))) * (*pressure)(x1, x2, x3);
-									}
-
-
-								}
-							}
-						}
-						(*pressureOld)(x1, x2, x3) = sum;
-
-
-
-					}
-				}
-			}
-		}
-
-#pragma omp parallel for
-		for (int x3 = 0; x3 <= maxX3; x3++) {
-			for (int x2 = 0; x2 <= maxX2; x2++) {
-				for (int x1 = 0; x1 <= maxX1; x1++) {
-					if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-						///filter!
-
-						(*pressure)(x1, x2, x3) = (*pressureOld)(x1, x2, x3);
-					}
-				}
-			}
-		}
-		////!filter
-
-
-#pragma omp parallel for
-        for (int x3 = minX3; x3 < maxX3; x3++) {
-            for (int x2 = minX2; x2 < maxX2; x2++) {
-                for (int x1 = minX1; x1 < maxX1; x1++) {
-                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
-                        int x1p = x1 + 1;
-                        int x2p = x2 + 1;
-                        int x3p = x3 + 1;
-
-
-
-                        //////////////////////////////////////////////////////////////////////////
-                        // Read distributions and phase field
-                        ////////////////////////////////////////////////////////////////////////////
-                        //////////////////////////////////////////////////////////////////////////
-
-                        // E   N  T
-                        // c   c  c
-                        //////////
-                        // W   S  B
-                        // a   a  a
-
-                        // Rest ist b
-
-                        // mfxyz
-                        // a - negative
-                        // b - null
-                        // c - positive
-
-                        // a b c
-                        //-1 0 1
-
-                        findNeighbors(phaseField, x1, x2, x3);
-						findNeighbors2(phaseField2, x1, x2, x3);
-
-                        real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-                        real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-                        real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-                        real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-                        real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-                        real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-                        real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-                        real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-                        real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-                        real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-                        real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-                        real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-                        real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-                        real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-                        real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-                        real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-                        real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-                        real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-                        real rhoH = 1.0;
-                        real rhoL = 1.0 / densityRatio;
-
-                        real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-                        real dX1_phi = gradX1_phi();
-                        real dX2_phi = gradX2_phi();
-                        real dX3_phi = gradX3_phi();
-
-						//LBMReal dX1_phi2 = gradX1_phi2();
-						//LBMReal dX2_phi2 = gradX2_phi2();
-						//LBMReal dX3_phi2 = gradX3_phi2();
-
-
-      //                  LBMReal denom2 = sqrt(dX1_phi * dX1_phi+ dX1_phi2 * dX1_phi2 + dX2_phi * dX2_phi + dX2_phi2 * dX2_phi2 + dX3_phi * dX3_phi+ dX3_phi2 * dX3_phi2) + 1e-9;
-      //                  LBMReal normX1 = (dX1_phi-dX1_phi2)/denom2;
-						//LBMReal normX2 = (dX2_phi-dX2_phi2)/denom2;
-						//LBMReal normX3 = (dX3_phi-dX3_phi2)/denom2;
-
-						real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9;
-						real normX1 = dX1_phi / denom;
-						real normX2 = dX2_phi / denom;
-						real normX3 = dX3_phi / denom;
-
-
-
-						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL);
-
-
-                        real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi();
-
-                        //----------- Calculating Macroscopic Values -------------
-                        real rho = rhoH + rhoToPhi * (phi[d000] - phiH);
-
-                            			   ////Incompressible Kernal
-
-						//mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)         ;// / rho * c3;
-						//mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)         ;// / rho * c3;
-						//mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)        ;// / rho * c3;
-						//mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)       ;// / rho * c3;
-						//mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)         ;// / rho * c3;
-						//mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)        ;// / rho * c3;
-						//mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)       ;// / rho * c3;
-						//mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)        ;// / rho * c3;
-						//mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)       ;// / rho * c3;
-						//mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)       ;// / rho * c3;
-						//mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)      ;// / rho * c3;
-						//mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)      ;// / rho * c3;
-						//mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3)     ;// / rho * c3;																								    
-						//mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     ;// / rho * c3;
-						//mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     ;// / rho * c3;
-						//mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     ;// / rho * c3;
-						//mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   ;// / rho * c3;
-						//mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    ;// / rho * c3;
-						//mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   ;// / rho * c3;
-						//mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    ;// / rho * c3;
-						//mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   ;// / rho * c3;
-						//mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    ;// / rho * c3;
-						//mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) ;// / rho * c3;
-						//mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  ;// / rho * c3;
-						//mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  ;// / rho * c3;
-						//mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   ;// / rho * c3;
-
-						//mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);// / rho * c3;
-
-
-			   real m0, m1, m2;
-			   real rhoRef=c1o1;
-
-			  //LBMReal 
-			//    LBMReal drho = (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;
-
-			   real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-				   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-				   (mfcbb - mfabb))/rhoRef;
-			   real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-				   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-				   (mfbcb - mfbab))/rhoRef;
-			   real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-				   (mfbbc - mfbba))/rhoRef;
-
-			 //  (*pressure)(x1, x2, x3) = (*pressureOld)(x1, x2, x3)+rho*c1o3*drho;
-
-			   //LBMReal gradPx = c1o2 * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3));
-			   //LBMReal gradPy = c1o2 * ((*pressure)(x1, x2 + 1, x3) - (*pressure)(x1, x2 - 1, x3));
-			   //LBMReal gradPz = c1o2 * ((*pressure)(x1, x2, x3 + 1) - (*pressure)(x1, x2, x3 - 1));
-
-			   //LBMReal gradPx = 3.0 * (WEIGTH[TNE] * (
-				  // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 + 1, x2 - 1, x3 + 1) - (*pressure)(x1 - 1, x2 + 1, x3 - 1)))
-				  // + (((*pressure)(x1 + 1, x2 - 1, x3 - 1) - (*pressure)(x1 - 1, x2 + 1, x3 + 1)) + ((*pressure)(x1 + 1, x2 + 1, x3 - 1) - (*pressure)(x1 - 1, x2 - 1, x3 + 1))))
-				  // + WEIGTH[NE] * (
-				  // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 + 1, x2 - 1, x3) - (*pressure)(x1 - 1, x2 + 1, x3)))
-					 //  + (((*pressure)(x1 + 1, x2, x3 - 1) - (*pressure)(x1 - 1, x2, x3 + 1)) + ((*pressure)(x1 + 1, x2, x3 + 1) - (*pressure)(x1 - 1, x2, x3 - 1))))
-				  // + WEIGTH[dP00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3)));
-
-			   //LBMReal gradPy = 3.0 * (WEIGTH[TNE] * (
-				  // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1)))
-				  // + (((*pressure)(x1 - 1, x2 + 1, x3 - 1) - (*pressure)(x1 + 1, x2 - 1, x3 + 1)) + ((*pressure)(x1 + 1, x2 + 1, x3 - 1) - (*pressure)(x1 - 1, x2 - 1, x3 + 1))))
-				  // + WEIGTH[NE] * (
-				  // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 - 1, x2 + 1, x3) - (*pressure)(x1 + 1, x2 - 1, x3)))
-					 //  + (((*pressure)(x1, x2+1, x3 - 1) - (*pressure)(x1, x2-1, x3 + 1)) + ((*pressure)(x1, x2+1, x3 + 1) - (*pressure)(x1, x2-1, x3 - 1))))
-				  // + WEIGTH[dP00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3)));
-
-			   //LBMReal gradPz = 3.0 * (WEIGTH[TNE] * (
-				  // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1)))
-				  // + (((*pressure)(x1 - 1, x2 - 1, x3 + 1) - (*pressure)(x1 + 1, x2 + 1, x3 - 1)) + ((*pressure)(x1 + 1, x2 - 1, x3 + 1) - (*pressure)(x1 - 1, x2 + 1, x3 - 1))))
-				  // + WEIGTH[NE] * (
-				  // (((*pressure)(x1 + 1, x2, x3+1) - (*pressure)(x1 - 1, x2, x3-1)) + ((*pressure)(x1 - 1, x2, x3+1) - (*pressure)(x1 + 1, x2, x3-1)))
-					 //  + (((*pressure)(x1, x2 - 1, x3 + 1) - (*pressure)(x1, x2 + 1, x3 - 1)) + ((*pressure)(x1, x2 + 1, x3 + 1) - (*pressure)(x1, x2 - 1, x3 - 1))))
-				  // + WEIGTH[dP00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1)));
-			  
-			   
-			   real gradPx = 0.0;
-			   real gradPy = 0.0;
-			   real gradPz = 0.0;
-			   for (int dir1 = -1; dir1 <= 1; dir1++) {
-				   for (int dir2 = -1; dir2 <= 1; dir2++) {
-					   int yyy = x2 + dir1;
-					   int zzz = x3 + dir2;
-					   if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) {
-						   gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 - 1, yyy, zzz)) {
-						   gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-
-					   int xxx = x1 + dir1;
-					   if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) {
-						   gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) {
-						   gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-
-					   yyy = x2 + dir2;
-					   if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) {
-						   gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) {
-						   gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-					   else {
-						   gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)));
-					   }
-
-				   }
-			   }
-
-			   //3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) - (phi2[BNE] - phi2[TSW])))
-			   //+WEIGTH[NE] * (((phi2[TE] - phi2[BW]) - (phi2[BE] - phi2[TW])) + ((phi2[TS] - phi2[BN]) + (phi2[TN] - phi2[BS])))) +
-			   //+WEIGTH[N] * (phi2[T] - phi2[B]));
-
-			   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()+c1o3*drho*dX1_phi*rhoToPhi/rho;//-gradPx/rho;
-				  // forcingX2 = muForcingX2.Eval() + c1o3*drho*dX2_phi * rhoToPhi / rho;//-gradPy/rho;
-				   //forcingX3 = muForcingX3.Eval() + c1o3*drho*dX3_phi * rhoToPhi / rho;//-gradPz/rho;
-
-				   forcingX1 = muForcingX1.Eval() -gradPx/rho;
-				   forcingX2 = muForcingX2.Eval() -gradPy/rho;
-				   forcingX3 = muForcingX3.Eval() -gradPz/rho;
-
-				   //LBMReal rho_m = 1.0 / densityRatio;
-				   //forcingX1 = forcingX1 * (rho - rho_m);
-				   //forcingX2 = forcingX2 * (rho - rho_m);
-				   //forcingX3 = forcingX3 * (rho - rho_m);
-				   vvx += forcingX1 * deltaT * 0.5; // X
-				   vvy += forcingX2 * deltaT * 0.5; // Y
-				   vvz += forcingX3 * deltaT * 0.5; // Z
-
-			   }
-
-
-			   ///surface tension force
-			   vvx += mu * dX1_phi * c1o2;
-			   vvy += mu * dX2_phi * c1o2 ;
-			   vvz += mu * dX3_phi * c1o2;
-
-			   //////classic source term
-			   ///----Classic source term 8.4.2021
-
-			   //LBMReal vvxF, vvyF, vvzF;
-			   //vvxF = vvx;//-2*c1o24 * lap_vx;// 
-			   //vvyF = vvy;//-2*c1o24 * lap_vy;// 
-			   //vvzF = vvz;//-2*c1o24 * lap_vz;// 
-
-//			   vvxF = 1.2* vvx- 0.2*0.5 * ((*velocityX)(x1 - 1, x2, x3) + (*velocityX)(x1 + 1, x2, x3));
-//			   vvyF = 1.2 *vvy- 0.2*0.5* ((*velocityY)(x1 , x2-1, x3) + (*velocityY)(x1 , x2+1, x3));
-//			   vvzF = 1.2 *vvz-0.2*0.5* ((*velocityZ)(x1 , x2, x3-1) + (*velocityZ)(x1 , x2, x3+1));
-			   //if (vvxF != vvx) {
-				  // vvxF = vvxF;
-			   //}
-			   //LBMReal weightGrad = 1.0;// -denom * denom / (denom * denom + 0.0001 * 0.001);
-			   //LBMReal dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX1;
-			   //LBMReal dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX2;
-			   //LBMReal dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX3;
-
-			   //dX1_phiF *= 1.2;
-			   //dX2_phiF *= 1.2;
-			   //dX3_phiF *= 1.2;
-
-			   //LBMReal gradFD = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
-			   //LBMReal gradPhi = (1.0 - phi[REST]) * (phi[REST]);
-			   //gradPhi = (gradPhi > gradFD) ? gradPhi : gradFD;
-			   //dX1_phiF = gradPhi * normX1;
-				  // dX2_phiF = gradPhi * normX2;
-				  // dX3_phiF = gradPhi * normX3;
-
-			   //LBMReal ux2;
-			   //LBMReal uy2;
-			   //LBMReal uz2;
-			   //ux2 = vvxF * vvxF;
-			   //uy2 = vvyF * vvyF;
-			   //uz2 = vvzF * vvzF;
-			   //LBMReal forcingTerm[D3Q27System::ENDF + 1];
-			   //for (int dir = STARTF; dir <= (FENDDIR); dir++) {
-				  // LBMReal velProd = DX1[dir] * vvxF + DX2[dir] * vvyF + DX3[dir] * vvzF;
-				  // LBMReal velSq1 = velProd * velProd;
-				  // LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + (4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)));
-
-				  // //LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
-
-				  // //forcingTerm[dir] =
-					 // // (-vvxF) * (fac1 * dX1_phiF) +
-					 // // (-vvyF) * (fac1 * dX2_phiF) +
-					 // // (-vvzF) * (fac1 * dX3_phiF) +
-					 // // (DX1[dir]) * (fac1 * dX1_phiF) +
-					 // // (DX2[dir]) * (fac1 * dX2_phiF) +
-					 // // (DX3[dir]) * (fac1 * dX3_phiF);
-
-
-				  // //LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 ;
-
-				  // //forcingTerm[dir] =
-					 // // (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
-					 // // (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) +
-					 // // (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)) +
-					 // // (DX1[dir]) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
-					 // // (DX2[dir]) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) +
-					 // // (DX3[dir]) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL));
-
-
-
-			   //}
-
-			   //LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-			   //LBMReal fac1 = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi;
-			   //forcingTerm[REST] =	 (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) +
-				  // (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) +
-				  // (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL));
-
-			   ////////
-			  // LBMReal divAfterSource=
-			  //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
-			  //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfacb + 3.0 * (0.5 * forcingTerm[NW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF)  *(vvzF)-1)+
-			  //( mfcbc + 3.0 * (0.5 * forcingTerm[TE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfabc + 3.0 * (0.5 * forcingTerm[TW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF-1)*(vvzF-1)-1)+
-			  //( mfbcc + 3.0 * (0.5 * forcingTerm[TN]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfbac + 3.0 * (0.5 * forcingTerm[TS]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfccc + 3.0 * (0.5 * forcingTerm[TNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfacc + 3.0 * (0.5 * forcingTerm[TNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfcac + 3.0 * (0.5 * forcingTerm[TSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfaac + 3.0 * (0.5 * forcingTerm[TSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+
-			  //( mfabb + 3.0 * (0.5 * forcingTerm[W]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF)  *(vvzF)-1)+
-			  //( mfbab + 3.0 * (0.5 * forcingTerm[S]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfbba + 3.0 * (0.5 * forcingTerm[B]) / rho	) *((vvxF)  *(vvxF)  +(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaab + 3.0 * (0.5 * forcingTerm[SW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfcab + 3.0 * (0.5 * forcingTerm[SE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF)  *(vvzF)-1)+
-			  //( mfaba + 3.0 * (0.5 * forcingTerm[BW]) / rho	) *((vvxF+1)*(vvxF+1)+(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcba + 3.0 * (0.5 * forcingTerm[BE]) / rho	) *((vvxF-1)*(vvxF-1)+(vvyF)  *(vvyF)  +(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbaa + 3.0 * (0.5 * forcingTerm[BS]) / rho	) *((vvxF)  *(vvxF)  +(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbca + 3.0 * (0.5 * forcingTerm[BN]) / rho	) *((vvxF)  *(vvxF)  +(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaaa + 3.0 * (0.5 * forcingTerm[BSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcaa + 3.0 * (0.5 * forcingTerm[BSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfaca + 3.0 * (0.5 * forcingTerm[BNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfcca + 3.0 * (0.5 * forcingTerm[BNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+
-			  //( mfbbb + 3.0 * (0.5 * forcingTerm[REST]) / rho)*((vvxF)*(vvxF)+(vvyF)*(vvyF)+(vvzF)*(vvzF)-1);
-
-			  // LBMReal divBeforeSource =
-				 //  (mfcbb)    * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) +
-				 //  (mfbcb)    * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfbbc)    * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfccb)   * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfacb)   * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfcbc)   * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfabc)   * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfbcc)   * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfbac)   * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfccc)  * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfacc)  * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfcac)  * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfaac)  * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) +
-				 //  (mfabb)    * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) +
-				 //  (mfbab)    * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfbba)    * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaab)   * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfcab)   * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) +
-				 //  (mfaba)   * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcba)   * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbaa)   * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbca)   * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaaa)  * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcaa)  * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfaca)  * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfcca)  * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) +
-				 //  (mfbbb) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF) * (vvzF)-1);
-			   //if (divAfterSource - divBeforeSource != 0 && phi[REST]>0.0001 && phi[REST]<0.999) {
-				  // std::cout << phi[REST]<<" "<< divAfterSource << " " << divBeforeSource <<" "<< divAfterSource/ divBeforeSource << std::endl;
-			   //}
-
-			   //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) {
-				  // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource);
-
-				  // forcingTerm[dP00]	 *=scaleDiv;
-				  // forcingTerm[N]	 *=scaleDiv;
-				  // forcingTerm[T]	 *=scaleDiv;
-				  // forcingTerm[NE]	 *=scaleDiv;
-				  // forcingTerm[NW]	 *=scaleDiv;
-				  // forcingTerm[TE]	 *=scaleDiv;
-				  // forcingTerm[TW]	 *=scaleDiv;
-				  // forcingTerm[TN]	 *=scaleDiv;
-				  // forcingTerm[TS]	 *=scaleDiv;
-				  // forcingTerm[TNE]	 *=scaleDiv;
-				  // forcingTerm[TNW]	 *=scaleDiv;
-				  // forcingTerm[TSE]	 *=scaleDiv;
-				  // forcingTerm[TSW]	 *=scaleDiv;
-				  // forcingTerm[W]	 *=scaleDiv;
-				  // forcingTerm[S]	 *=scaleDiv;
-				  // forcingTerm[B]	 *=scaleDiv;
-				  // forcingTerm[SW]	 *=scaleDiv;
-				  // forcingTerm[SE]	 *=scaleDiv;
-				  // forcingTerm[BW]	 *=scaleDiv;
-				  // forcingTerm[BE]	 *=scaleDiv;
-				  // forcingTerm[BS]	 *=scaleDiv;
-				  // forcingTerm[BN]	 *=scaleDiv;
-				  // forcingTerm[BSW]	 *=scaleDiv;
-				  // forcingTerm[BSE]	 *=scaleDiv;
-				  // forcingTerm[BNW]	 *=scaleDiv;
-				  // forcingTerm[BNE]	 *=scaleDiv;
-				  // forcingTerm[REST] *=scaleDiv;
-			   //}
-			   ////////
-
-
-			   //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   //mfacb += 3.0 * (0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   //mfcbc += 3.0 * (0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   //mfabc += 3.0 * (0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   //mfbcc += 3.0 * (0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   //mfbac += 3.0 * (0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   //mfccc += 3.0 * (0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   //mfacc += 3.0 * (0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   //mfcac += 3.0 * (0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   //mfaac += 3.0 * (0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   //mfabb += 3.0 * (0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   //mfbab += 3.0 * (0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   //mfbba += 3.0 * (0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   //mfaab += 3.0 * (0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   //mfcab += 3.0 * (0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   //mfaba += 3.0 * (0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   //mfcba += 3.0 * (0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   //mfbaa += 3.0 * (0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   //mfbca += 3.0 * (0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   //mfaaa += 3.0 * (0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   //mfcaa += 3.0 * (0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   //mfaca += 3.0 * (0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   //mfcca += 3.0 * (0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   //mfbbb += 3.0 * (0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
-
-			   //--------------------------------------------------------
-
-
-
-
-
-			   //////end classic source term
-
-
-
-
-			   //forcing 
-			   ///////////////////////////////////////////////////////////////////////////////////////////
-			   if (withForcing)
-			   {
-				   muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1);
-				   muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2);
-				   muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3);
-
-				   //forcingX1 = muForcingX1.Eval();
-				   //forcingX2 = muForcingX2.Eval();
-				   //forcingX3 = muForcingX3.Eval();
-
-				   //vvx += forcingX1 * deltaT * 0.5; // X
-				   //vvy += forcingX2 * deltaT * 0.5; // Y
-				   //vvz += forcingX3 * deltaT * 0.5; // Z
-			   }
-
-			   real vx2;
-               real vy2;
-               real vz2;
-               vx2 = vvx * vvx;
-               vy2 = vvy * vvy;
-               vz2 = vvz * vvz;
-			   ///////////////////////////////////////////////////////////////////////////////////////////               
-			   real 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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   real wadjust;
-			   real qudricLimit = 0.01;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //Hin
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   m2 = mfaaa + mfaac;
-			   m1 = mfaac - mfaaa;
-			   m0 = m2 + mfaab;
-			   mfaaa = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfaab = m1 - m0 * vvz;
-			   mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaba + mfabc;
-			   m1 = mfabc - mfaba;
-			   m0 = m2 + mfabb;
-			   mfaba = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfabb = m1 - m0 * vvz;
-			   mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaca + mfacc;
-			   m1 = mfacc - mfaca;
-			   m0 = m2 + mfacb;
-			   mfaca = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfacb = m1 - m0 * vvz;
-			   mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbaa + mfbac;
-			   m1 = mfbac - mfbaa;
-			   m0 = m2 + mfbab;
-			   mfbaa = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbab = m1 - m0 * vvz;
-			   mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbba + mfbbc;
-			   m1 = mfbbc - mfbba;
-			   m0 = m2 + mfbbb;
-			   mfbba = m0;
-			   m0 += c4o9 * oMdrho;
-			   mfbbb = m1 - m0 * vvz;
-			   mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbca + mfbcc;
-			   m1 = mfbcc - mfbca;
-			   m0 = m2 + mfbcb;
-			   mfbca = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbcb = m1 - m0 * vvz;
-			   mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcaa + mfcac;
-			   m1 = mfcac - mfcaa;
-			   m0 = m2 + mfcab;
-			   mfcaa = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfcab = m1 - m0 * vvz;
-			   mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcba + mfcbc;
-			   m1 = mfcbc - mfcba;
-			   m0 = m2 + mfcbb;
-			   mfcba = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfcbb = m1 - m0 * vvz;
-			   mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcca + mfccc;
-			   m1 = mfccc - mfcca;
-			   m0 = m2 + mfccb;
-			   mfcca = m0;
-			   m0 += c1o36 * oMdrho;
-			   mfccb = m1 - m0 * vvz;
-			   mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   m2 = mfaaa + mfaca;
-			   m1 = mfaca - mfaaa;
-			   m0 = m2 + mfaba;
-			   mfaaa = m0;
-			   m0 += c1o6 * oMdrho;
-			   mfaba = m1 - m0 * vvy;
-			   mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaab + mfacb;
-			   m1 = mfacb - mfaab;
-			   m0 = m2 + mfabb;
-			   mfaab = m0;
-			   mfabb = m1 - m0 * vvy;
-			   mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaac + mfacc;
-			   m1 = mfacc - mfaac;
-			   m0 = m2 + mfabc;
-			   mfaac = m0;
-			   m0 += c1o18 * oMdrho;
-			   mfabc = m1 - m0 * vvy;
-			   mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbaa + mfbca;
-			   m1 = mfbca - mfbaa;
-			   m0 = m2 + mfbba;
-			   mfbaa = m0;
-			   m0 += c2o3 * oMdrho;
-			   mfbba = m1 - m0 * vvy;
-			   mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbab + mfbcb;
-			   m1 = mfbcb - mfbab;
-			   m0 = m2 + mfbbb;
-			   mfbab = m0;
-			   mfbbb = m1 - m0 * vvy;
-			   mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfbac + mfbcc;
-			   m1 = mfbcc - mfbac;
-			   m0 = m2 + mfbbc;
-			   mfbac = m0;
-			   m0 += c2o9 * oMdrho;
-			   mfbbc = m1 - m0 * vvy;
-			   mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcaa + mfcca;
-			   m1 = mfcca - mfcaa;
-			   m0 = m2 + mfcba;
-			   mfcaa = m0;
-			   m0 += c1o6 * oMdrho;
-			   mfcba = m1 - m0 * vvy;
-			   mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcab + mfccb;
-			   m1 = mfccb - mfcab;
-			   m0 = m2 + mfcbb;
-			   mfcab = m0;
-			   mfcbb = m1 - m0 * vvy;
-			   mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfcac + mfccc;
-			   m1 = mfccc - mfcac;
-			   m0 = m2 + mfcbc;
-			   mfcac = m0;
-			   m0 += c1o18 * oMdrho;
-			   mfcbc = m1 - m0 * vvy;
-			   mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   m2 = mfaaa + mfcaa;
-			   m1 = mfcaa - mfaaa;
-			   m0 = m2 + mfbaa;
-			   mfaaa = m0;
-			   m0 += 1. * oMdrho;
-			   mfbaa = m1 - m0 * vvx;
-			   mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaba + mfcba;
-			   m1 = mfcba - mfaba;
-			   m0 = m2 + mfbba;
-			   mfaba = m0;
-			   mfbba = m1 - m0 * vvx;
-			   mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaca + mfcca;
-			   m1 = mfcca - mfaca;
-			   m0 = m2 + mfbca;
-			   mfaca = m0;
-			   m0 += c1o3 * oMdrho;
-			   mfbca = m1 - m0 * vvx;
-			   mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaab + mfcab;
-			   m1 = mfcab - mfaab;
-			   m0 = m2 + mfbab;
-			   mfaab = m0;
-			   mfbab = m1 - m0 * vvx;
-			   mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfabb + mfcbb;
-			   m1 = mfcbb - mfabb;
-			   m0 = m2 + mfbbb;
-			   mfabb = m0;
-			   mfbbb = m1 - m0 * vvx;
-			   mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfacb + mfccb;
-			   m1 = mfccb - mfacb;
-			   m0 = m2 + mfbcb;
-			   mfacb = m0;
-			   mfbcb = m1 - m0 * vvx;
-			   mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfaac + mfcac;
-			   m1 = mfcac - mfaac;
-			   m0 = m2 + mfbac;
-			   mfaac = m0;
-			   m0 += c1o3 * oMdrho;
-			   mfbac = m1 - m0 * vvx;
-			   mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfabc + mfcbc;
-			   m1 = mfcbc - mfabc;
-			   m0 = m2 + mfbbc;
-			   mfabc = m0;
-			   mfbbc = m1 - m0 * vvx;
-			   mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m2 = mfacc + mfccc;
-			   m1 = mfccc - mfacc;
-			   m0 = m2 + mfbcc;
-			   mfacc = m0;
-			   m0 += c1o9 * oMdrho;
-			   mfbcc = m1 - m0 * vvx;
-			   mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Cumulants
-			   ////////////////////////////////////////////////////////////////////////////////////
-
-
-			  // mfaaa = 0.0;
-			   real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-			 //  LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
-			 //  LBMReal OxyyMxzz  = 1.;//2+s9;//
-			   real O4 = 1.;
-			   real O5 = 1.;
-			   real O6 = 1.;
-
-
-
-			   /////fourth order parameters; here only for test. Move out of loop!
-
-			   real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
-			   real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
-			//    real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
-			   real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-			   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
-			   real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
-
-
-			   //Cum 4.
-			   //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-			   //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-			   //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-			   real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-			   real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-			   real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-			   real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-			   real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-			   real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho);
-
-			   //Cum 5.
-			   real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-			   real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-			   real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-			   //Cum 6.
-			   real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-				   - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-				   - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-				   - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-				   + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-					   + 2. * (mfcaa * mfaca * mfaac)
-					   + 16. * mfbba * mfbab * mfabb)
-				   - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-				   - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-				   + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-					   + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-			   //2.
-			   // linear combinations
-			   real mxxPyyPzz = mfcaa + mfaca + mfaac;
-
-			//  LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho));
-			  mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa
-				//mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
-			   real mxxMyy = mfcaa - mfaca;
-			   real mxxMzz = mfcaa - mfaac;
-
-			   //applying phase field gradients first part:
-			  // mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz);
-               // 17.03.2021 attempt for statililization by assymptotically vanishing bias
-               //LBMReal correctionScaling =
-               //    rhoToPhi / rho; // +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000;
-               //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) *
-               //             correctionScaling; // As in Hesam's code
-               //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling;
-               //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling;
-               //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling;
-               //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling;
-               //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling;
-
-			   real dxux =  -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
-			   real dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
-			   real dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
-
-			   real Dxy = -c3o1 * collFactorM * mfbba;
-			   real Dxz = -c3o1 * collFactorM * mfbab;
-			   real Dyz = -c3o1 * collFactorM * mfabb;
-
-
-			   //relax
-			   mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-			   mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
-			   mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
-
-			   mfabb += collFactorM * (-mfabb);
-			   mfbab += collFactorM * (-mfbab);
-			   mfbba += collFactorM * (-mfbba);
-
-			   //applying phase field gradients second part:
-			   //mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz);
-               //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) *
-               //             correctionScaling; // As in Hesam's code
-               //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling;
-               //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling;
-               //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling;
-               //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling;
-               //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling;
-
-               ////updated pressure
-               //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling;
-			   mfaaa = 0.0; // Pressure elimination as in standard velocity model
-			 //  mfaaa += (rho - c1) * (dxux + dyuy + dzuz);
-
-               mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
-
-			  // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2;
-			   //mfaaa = mfaaaS;
-			   // linear combinations back
-			   mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-			   mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-			   mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-			   //3.
-			   // linear combinations
-			   real mxxyPyzz = mfcba + mfabc;
-			   real mxxyMyzz = mfcba - mfabc;
-
-			   real mxxzPyyz = mfcab + mfacb;
-			   real mxxzMyyz = mfcab - mfacb;
-
-			   real mxyyPxzz = mfbca + mfbac;
-			   real mxyyMxzz = mfbca - mfbac;
-
-			   //relax
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-			   mfbbb += wadjust * (-mfbbb);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-			   mxxyPyzz += wadjust * (-mxxyPyzz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-			   mxxyMyzz += wadjust * (-mxxyMyzz);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-			   mxxzPyyz += wadjust * (-mxxzPyyz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-			   mxxzMyyz += wadjust * (-mxxzMyyz);
-			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-			   mxyyPxzz += wadjust * (-mxyyPxzz);
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-			   mxyyMxzz += wadjust * (-mxyyMxzz);
-
-			   // linear combinations back
-			   mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-			   mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-			   mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-			   mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-			   mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-			   mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-			   //4.
-			   //CUMacc += O4 * (-CUMacc);
-			   //CUMcac += O4 * (-CUMcac);
-			   //CUMcca += O4 * (-CUMcca);
-
-			   //CUMbbc += O4 * (-CUMbbc);
-			   //CUMbcb += O4 * (-CUMbcb);
-			   //CUMcbb += O4 * (-CUMcbb);
-			   CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-			   CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-			   CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-			   CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc);
-			   CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb);
-			   CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb);
-
-			   //5.
-			   CUMbcc += O5 * (-CUMbcc);
-			   CUMcbc += O5 * (-CUMcbc);
-			   CUMccb += O5 * (-CUMccb);
-
-			   //6.
-			   CUMccc += O6 * (-CUMccc);
-
-			   //back cumulants to central moments
-			   //4.
-			   //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-			   //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-			   //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-			   mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-			   mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-			   mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-			   mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-			   mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-			   mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho;
-
-			   //5.
-			   mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-			   mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-			   mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-			   //6.
-			   mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-				   - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-				   - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-				   - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-				   + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-					   + 2. * (mfcaa * mfaca * mfaac)
-					   + 16. * mfbba * mfbab * mfabb)
-				   - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-				   - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-				   + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-					   + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-
-			   ////////
-
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //forcing
-			   mfbaa = -mfbaa;
-			   mfaba = -mfaba;
-			   mfaab = -mfaab;
-			   //////////////////////////////////////////////////////////////////////////////////////
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //back
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
-			   m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfaaa = m0;
-			   mfaab = m1;
-			   mfaac = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-			   m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
-			   m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-			   mfaba = m0;
-			   mfabb = m1;
-			   mfabc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2;
-			   m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfaca = m0;
-			   mfacb = m1;
-			   mfacc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-			   m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
-			   m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-			   mfbaa = m0;
-			   mfbab = m1;
-			   mfbac = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-			   m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
-			   m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-			   mfbba = m0;
-			   mfbbb = m1;
-			   mfbbc = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-			   m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
-			   m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-			   mfbca = m0;
-			   mfbcb = m1;
-			   mfbcc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2;
-			   m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfcaa = m0;
-			   mfcab = m1;
-			   mfcac = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-			   m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
-			   m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-			   mfcba = m0;
-			   mfcbb = m1;
-			   mfcbc = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-			   m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
-			   m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-			   mfcca = m0;
-			   mfccb = m1;
-			   mfccc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
-			   m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaaa = m0;
-			   mfaba = m1;
-			   mfaca = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
-			   m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaab = m0;
-			   mfabb = m1;
-			   mfacb = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
-			   m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfaac = m0;
-			   mfabc = m1;
-			   mfacc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-			   m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
-			   m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-			   mfbaa = m0;
-			   mfbba = m1;
-			   mfbca = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-			   m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
-			   m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-			   mfbab = m0;
-			   mfbbb = m1;
-			   mfbcb = m2;
-			   /////////b//////////////////////////////////////////////////////////////////////////
-			   m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-			   m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
-			   m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-			   mfbac = m0;
-			   mfbbc = m1;
-			   mfbcc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
-			   m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcaa = m0;
-			   mfcba = m1;
-			   mfcca = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
-			   m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcab = m0;
-			   mfcbb = m1;
-			   mfccb = m2;
-			   /////////c//////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-			   m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
-			   m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-			   mfcac = m0;
-			   mfcbc = m1;
-			   mfccc = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaaa = m0;
-			   mfbaa = m1;
-			   mfcaa = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaba = m0;
-			   mfbba = m1;
-			   mfcba = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaca = m0;
-			   mfbca = m1;
-			   mfcca = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaab = m0;
-			   mfbab = m1;
-			   mfcab = m2;
-			   ///////////b////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
-			   m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfabb = m0;
-			   mfbbb = m1;
-			   mfcbb = m2;
-			   ///////////b////////////////////////////////////////////////////////////////////////
-			   m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfacb = m0;
-			   mfbcb = m1;
-			   mfccb = m2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfaac = m0;
-			   mfbac = m1;
-			   mfcac = m2;
-			   ///////////c////////////////////////////////////////////////////////////////////////
-			   m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
-			   m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfabc = m0;
-			   mfbbc = m1;
-			   mfcbc = m2;
-			   ///////////c////////////////////////////////////////////////////////////////////////
-			   m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-			   m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
-			   m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-			   mfacc = m0;
-			   mfbcc = m1;
-			   mfccc = m2;
-
-			   /////classical source term 8.4.2021
-
-			   //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-			   //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-			   //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-			   //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-			   //mfacb += 3.0 * (0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-			   //mfcbc += 3.0 * (0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-			   //mfabc += 3.0 * (0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-			   //mfbcc += 3.0 * (0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-			   //mfbac += 3.0 * (0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-			   //mfccc += 3.0 * (0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-			   //mfacc += 3.0 * (0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-			   //mfcac += 3.0 * (0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-			   //mfaac += 3.0 * (0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-			   //mfabb += 3.0 * (0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-			   //mfbab += 3.0 * (0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-			   //mfbba += 3.0 * (0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-			   //mfaab += 3.0 * (0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-			   //mfcab += 3.0 * (0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-			   //mfaba += 3.0 * (0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-			   //mfcba += 3.0 * (0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-			   //mfbaa += 3.0 * (0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-			   //mfbca += 3.0 * (0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-			   //mfaaa += 3.0 * (0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-			   //mfcaa += 3.0 * (0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-			   //mfaca += 3.0 * (0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-			   //mfcca += 3.0 * (0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-			   //mfbbb += 3.0 * (0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
-
-
-
-			   //////////////////////////////////////////////////////////////////////////
-			   //proof correctness
-			   //////////////////////////////////////////////////////////////////////////
-//#ifdef  PROOF_CORRECTNESS
-//			   LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-//				   + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-//				   + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-//			   //LBMReal dif = fabs(drho - rho_post);
-//               LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post;
-//#ifdef SINGLEPRECISION
-//			   if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//			   if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//			   {
-//				   UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post)
-//					   + " dif=" + UbSystem::toString(dif)
-//					   + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-//				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-//				   //exit(EXIT_FAILURE);
-//			   }
-//#endif
-			   //////////////////////////////////////////////////////////////////////////
-			   //write distribution
-			   //////////////////////////////////////////////////////////////////////////
-			   (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb         ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab         ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba         ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab        ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab       ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba        ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba       ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa        ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca       ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa       ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa      ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca      ;//* rho * c1o3;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca     ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb     ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb     ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc     ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb   ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb    ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc   ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc    ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc   ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac    ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc  ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac  ;//* rho * c1o3;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac   ;//* rho * c1o3;
-
-			   (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3;
-			   //////////////////////////////////////////////////////////////////////////
-
-			   ////!Incompressible Kernal
-
-                            
-//                            ///////Old Kernel \|/
-//                            // ux += forcingX1*deltaT*0.5; // X
-//                            // uy += forcingX2*deltaT*0.5; // Y
-//                            // uz += forcingX3*deltaT*0.5; // Z
-//                        }
-//
-//                        LBMReal ux = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-//                                      (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-//                                      (mfcbb - mfabb)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX1_phi + forcingX1) / (2 * rho);
-//
-//                        LBMReal uy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-//                                      (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-//                                      (mfbcb - mfbab)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX2_phi + forcingX2) / (2 * rho);
-//
-//                        LBMReal uz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-//                                      (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-//                                      (mfbbc - mfbba)) /
-//                                         (rho * c1o3) +
-//                                     (mu * dX3_phi + forcingX3) / (2 * rho);
-//
-//                        //--------------------------------------------------------
-//
-//                        LBMReal ux2 = ux * ux;
-//                        LBMReal uy2 = uy * uy;
-//                        LBMReal uz2 = uz * uz;
-//
-//                        //----------- Calculating Forcing Terms * -------------
-//                        for (int dir = STARTF; dir <= (FENDDIR); dir++) {
-//                            LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
-//                            LBMReal velSq1  = velProd * velProd;
-//                            LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2));
-//
-//                            LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
-//
-//                            forcingTerm[dir] = ((-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                                (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                                (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3))) +
-//                                               (DX1[dir]) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                               (DX2[dir]) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                               (DX3[dir]) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
-//                        }
-//
-//                        LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-//                        LBMReal fac1      = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi;
-//                        forcingTerm[REST] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
-//                                            (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
-//                                            (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
-//
-//                        //--------------------------------------------------------
-//
-//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
-//                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
-//                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
-//                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
-//                        mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
-//                        mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
-//                        mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
-//                        mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
-//                        mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
-//                        mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
-//                        mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
-//                        mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
-//                        mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
-//                        mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
-//                        mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
-//                        mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
-//                        mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
-//                        mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
-//                        mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
-//                        mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
-//                        mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
-//                        mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
-//                        mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
-//                        mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
-//                        mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
-//                        mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
-//                        mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST];
-//
-//                        LBMReal rho1 = (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 oMdrho, m0, m1, m2;
-//
-//                        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 = rho - (oMdrho + m0);
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        LBMReal wadjust;
-//                        LBMReal qudricLimit = 0.01;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Hin
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Z - Dir
-//                        m2    = mfaaa + mfaac;
-//                        m1    = mfaac - mfaaa;
-//                        m0    = m2 + mfaab;
-//                        mfaaa = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfaab = m1 - m0 * uz;
-//                        mfaac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaba + mfabc;
-//                        m1    = mfabc - mfaba;
-//                        m0    = m2 + mfabb;
-//                        mfaba = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfabb = m1 - m0 * uz;
-//                        mfabc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaca + mfacc;
-//                        m1    = mfacc - mfaca;
-//                        m0    = m2 + mfacb;
-//                        mfaca = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfacb = m1 - m0 * uz;
-//                        mfacc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbaa + mfbac;
-//                        m1    = mfbac - mfbaa;
-//                        m0    = m2 + mfbab;
-//                        mfbaa = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbab = m1 - m0 * uz;
-//                        mfbac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbba + mfbbc;
-//                        m1    = mfbbc - mfbba;
-//                        m0    = m2 + mfbbb;
-//                        mfbba = m0;
-//                        m0 += c4o9 * oMdrho;
-//                        mfbbb = m1 - m0 * uz;
-//                        mfbbc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbca + mfbcc;
-//                        m1    = mfbcc - mfbca;
-//                        m0    = m2 + mfbcb;
-//                        mfbca = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbcb = m1 - m0 * uz;
-//                        mfbcc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcaa + mfcac;
-//                        m1    = mfcac - mfcaa;
-//                        m0    = m2 + mfcab;
-//                        mfcaa = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfcab = m1 - m0 * uz;
-//                        mfcac = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcba + mfcbc;
-//                        m1    = mfcbc - mfcba;
-//                        m0    = m2 + mfcbb;
-//                        mfcba = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfcbb = m1 - m0 * uz;
-//                        mfcbc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcca + mfccc;
-//                        m1    = mfccc - mfcca;
-//                        m0    = m2 + mfccb;
-//                        mfcca = m0;
-//                        m0 += c1o36 * oMdrho;
-//                        mfccb = m1 - m0 * uz;
-//                        mfccc = m2 - 2. * m1 * uz + uz2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Y - Dir
-//                        m2    = mfaaa + mfaca;
-//                        m1    = mfaca - mfaaa;
-//                        m0    = m2 + mfaba;
-//                        mfaaa = m0;
-//                        m0 += c1o6 * oMdrho;
-//                        mfaba = m1 - m0 * uy;
-//                        mfaca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaab + mfacb;
-//                        m1    = mfacb - mfaab;
-//                        m0    = m2 + mfabb;
-//                        mfaab = m0;
-//                        mfabb = m1 - m0 * uy;
-//                        mfacb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaac + mfacc;
-//                        m1    = mfacc - mfaac;
-//                        m0    = m2 + mfabc;
-//                        mfaac = m0;
-//                        m0 += c1o18 * oMdrho;
-//                        mfabc = m1 - m0 * uy;
-//                        mfacc = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbaa + mfbca;
-//                        m1    = mfbca - mfbaa;
-//                        m0    = m2 + mfbba;
-//                        mfbaa = m0;
-//                        m0 += c2o3 * oMdrho;
-//                        mfbba = m1 - m0 * uy;
-//                        mfbca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbab + mfbcb;
-//                        m1    = mfbcb - mfbab;
-//                        m0    = m2 + mfbbb;
-//                        mfbab = m0;
-//                        mfbbb = m1 - m0 * uy;
-//                        mfbcb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfbac + mfbcc;
-//                        m1    = mfbcc - mfbac;
-//                        m0    = m2 + mfbbc;
-//                        mfbac = m0;
-//                        m0 += c2o9 * oMdrho;
-//                        mfbbc = m1 - m0 * uy;
-//                        mfbcc = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcaa + mfcca;
-//                        m1    = mfcca - mfcaa;
-//                        m0    = m2 + mfcba;
-//                        mfcaa = m0;
-//                        m0 += c1o6 * oMdrho;
-//                        mfcba = m1 - m0 * uy;
-//                        mfcca = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcab + mfccb;
-//                        m1    = mfccb - mfcab;
-//                        m0    = m2 + mfcbb;
-//                        mfcab = m0;
-//                        mfcbb = m1 - m0 * uy;
-//                        mfccb = m2 - 2. * m1 * uy + uy2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfcac + mfccc;
-//                        m1    = mfccc - mfcac;
-//                        m0    = m2 + mfcbc;
-//                        mfcac = m0;
-//                        m0 += c1o18 * oMdrho;
-//                        mfcbc = m1 - m0 * uy;
-//                        mfccc = m2 - 2. * m1 * uy + uy2 * 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 * ux;
-//                        mfcaa = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaba + mfcba;
-//                        m1    = mfcba - mfaba;
-//                        m0    = m2 + mfbba;
-//                        mfaba = m0;
-//                        mfbba = m1 - m0 * ux;
-//                        mfcba = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaca + mfcca;
-//                        m1    = mfcca - mfaca;
-//                        m0    = m2 + mfbca;
-//                        mfaca = m0;
-//                        m0 += c1o3 * oMdrho;
-//                        mfbca = m1 - m0 * ux;
-//                        mfcca = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaab + mfcab;
-//                        m1    = mfcab - mfaab;
-//                        m0    = m2 + mfbab;
-//                        mfaab = m0;
-//                        mfbab = m1 - m0 * ux;
-//                        mfcab = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfabb + mfcbb;
-//                        m1    = mfcbb - mfabb;
-//                        m0    = m2 + mfbbb;
-//                        mfabb = m0;
-//                        mfbbb = m1 - m0 * ux;
-//                        mfcbb = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfacb + mfccb;
-//                        m1    = mfccb - mfacb;
-//                        m0    = m2 + mfbcb;
-//                        mfacb = m0;
-//                        mfbcb = m1 - m0 * ux;
-//                        mfccb = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfaac + mfcac;
-//                        m1    = mfcac - mfaac;
-//                        m0    = m2 + mfbac;
-//                        mfaac = m0;
-//                        m0 += c1o3 * oMdrho;
-//                        mfbac = m1 - m0 * ux;
-//                        mfcac = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfabc + mfcbc;
-//                        m1    = mfcbc - mfabc;
-//                        m0    = m2 + mfbbc;
-//                        mfabc = m0;
-//                        mfbbc = m1 - m0 * ux;
-//                        mfcbc = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m2    = mfacc + mfccc;
-//                        m1    = mfccc - mfacc;
-//                        m0    = m2 + mfbcc;
-//                        mfacc = m0;
-//                        m0 += c1o9 * oMdrho;
-//                        mfbcc = m1 - m0 * ux;
-//                        mfccc = m2 - 2. * m1 * ux + ux2 * m0;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Cumulants
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        LBMReal OxxPyyPzz = 1.; // omega2 or bulk viscosity
-//                        LBMReal OxyyPxzz  = 1.; //-s9;//2+s9;//
-//                        LBMReal OxyyMxzz  = 1.; // 2+s9;//
-//                        LBMReal O4        = 1.;
-//                        LBMReal O5        = 1.;
-//                        LBMReal O6        = 1.;
-//
-//                        // Cum 4.
-//                        LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-//                        LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-//                        LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-//
-//                        LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) +
-//                                                  c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//                        LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) +
-//                                                  c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//                        LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) +
-//                                                  c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-//
-//                        // Cum 5.
-//                        LBMReal CUMbcc = mfbcc -
-//                                         (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
-//                                          2. * (mfbab * mfacb + mfbba * mfabc)) -
-//                                         c1o3 * (mfbca + mfbac) * oMdrho;
-//                        LBMReal CUMcbc = mfcbc -
-//                                         (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
-//                                          2. * (mfabb * mfcab + mfbba * mfbac)) -
-//                                         c1o3 * (mfcba + mfabc) * oMdrho;
-//                        LBMReal CUMccb = mfccb -
-//                                         (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
-//                                          2. * (mfbab * mfbca + mfabb * mfcba)) -
-//                                         c1o3 * (mfacb + mfcab) * oMdrho;
-//
-//                        // Cum 6.
-//                        LBMReal CUMccc =
-//                            mfccc +
-//                            ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-//                              4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -
-//                              2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-//                             (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-//                              2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
-//                             c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-//                             c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
-//                             c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
-//                             (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
-//                              (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
-//                                 c2o3 * oMdrho) +
-//                            c1o27 * oMdrho;
-//
-//                        // 2.
-//                        // linear combinations
-//                        LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
-//                        LBMReal mxxMyy    = mfcaa - mfaca;
-//                        LBMReal mxxMzz    = mfcaa - mfaac;
-//
-//                        LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-//                        LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
-//                        LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
-//
-//                        (*divU)(x1, x2, x3) = dxux + dyuy + dzuz;
-//
-//                        // relax
-//                        mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) -
-//                                     3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz);
-//                        mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy);
-//                        mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz);
-//
-//                        mfabb += collFactorM * (-mfabb);
-//                        mfbab += collFactorM * (-mfbab);
-//                        mfbba += collFactorM * (-mfbba);
-//
-//                        // linear combinations back
-//                        mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-//                        mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-//                        mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-//
-//                        // 3.
-//                        // linear combinations
-//                        LBMReal mxxyPyzz = mfcba + mfabc;
-//                        LBMReal mxxyMyzz = mfcba - mfabc;
-//
-//                        LBMReal mxxzPyyz = mfcab + mfacb;
-//                        LBMReal mxxzMyyz = mfcab - mfacb;
-//
-//                        LBMReal mxyyPxzz = mfbca + mfbac;
-//                        LBMReal mxyyMxzz = mfbca - mfbac;
-//
-//                        // relax
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-//                        mfbbb += wadjust * (-mfbbb);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-//                        mxxyPyzz += wadjust * (-mxxyPyzz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-//                        mxxyMyzz += wadjust * (-mxxyMyzz);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-//                        mxxzPyyz += wadjust * (-mxxzPyyz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-//                        mxxzMyyz += wadjust * (-mxxzMyyz);
-//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-//                        mxyyPxzz += wadjust * (-mxyyPxzz);
-//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-//                        mxyyMxzz += wadjust * (-mxyyMxzz);
-//
-//                        // linear combinations back
-//                        mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-//                        mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-//                        mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-//                        mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-//                        mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-//                        mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-//
-//                        // 4.
-//                        CUMacc += O4 * (-CUMacc);
-//                        CUMcac += O4 * (-CUMcac);
-//                        CUMcca += O4 * (-CUMcca);
-//
-//                        CUMbbc += O4 * (-CUMbbc);
-//                        CUMbcb += O4 * (-CUMbcb);
-//                        CUMcbb += O4 * (-CUMcbb);
-//
-//                        // 5.
-//                        CUMbcc += O5 * (-CUMbcc);
-//                        CUMcbc += O5 * (-CUMcbc);
-//                        CUMccb += O5 * (-CUMccb);
-//
-//                        // 6.
-//                        CUMccc += O6 * (-CUMccc);
-//
-//                        // back cumulants to central moments
-//                        // 4.
-//                        mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-//                        mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-//                        mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-//
-//                        mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//                        mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//                        mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho +
-//                                c1o9 * (oMdrho - 1) * oMdrho;
-//
-//                        // 5.
-//                        mfbcc = CUMbcc +
-//                                (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
-//                                 2. * (mfbab * mfacb + mfbba * mfabc)) +
-//                                c1o3 * (mfbca + mfbac) * oMdrho;
-//                        mfcbc = CUMcbc +
-//                                (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
-//                                 2. * (mfabb * mfcab + mfbba * mfbac)) +
-//                                c1o3 * (mfcba + mfabc) * oMdrho;
-//                        mfccb = CUMccb +
-//                                (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
-//                                 2. * (mfbab * mfbca + mfabb * mfcba)) +
-//                                c1o3 * (mfacb + mfcab) * oMdrho;
-//
-//                        // 6.
-//                        mfccc = CUMccc -
-//                                ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
-//                                  4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) -
-//                                  2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
-//                                 (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
-//                                  2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
-//                                 c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
-//                                 c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
-//                                 c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
-//                                 (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
-//                                  (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
-//                                     c2o3 * oMdrho) -
-//                                c1o27 * oMdrho;
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // forcing
-//                        mfbaa = -mfbaa;
-//                        mfaba = -mfaba;
-//                        mfaab = -mfaab;
-//                        //////////////////////////////////////////////////////////////////////////////////////
-//
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // back
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Z - Dir
-//                        m0    = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2;
-//                        m2    = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfaaa = m0;
-//                        mfaab = m1;
-//                        mfaac = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2;
-//                        m1    = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2);
-//                        m2    = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2;
-//                        mfaba = m0;
-//                        mfabb = m1;
-//                        mfabc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2;
-//                        m2    = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfaca = m0;
-//                        mfacb = m1;
-//                        mfacc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2;
-//                        m1    = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2);
-//                        m2    = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2;
-//                        mfbaa = m0;
-//                        mfbab = m1;
-//                        mfbac = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2;
-//                        m1    = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2);
-//                        m2    = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2;
-//                        mfbba = m0;
-//                        mfbbb = m1;
-//                        mfbbc = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2;
-//                        m1    = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2);
-//                        m2    = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2;
-//                        mfbca = m0;
-//                        mfbcb = m1;
-//                        mfbcc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2;
-//                        m2    = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfcaa = m0;
-//                        mfcab = m1;
-//                        mfcac = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2;
-//                        m1    = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2);
-//                        m2    = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2;
-//                        mfcba = m0;
-//                        mfcbb = m1;
-//                        mfcbc = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2;
-//                        m1    = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2;
-//                        m2    = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2;
-//                        mfcca = m0;
-//                        mfccb = m1;
-//                        mfccc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // Y - Dir
-//                        m0    = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2;
-//                        m2    = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaaa = m0;
-//                        mfaba = m1;
-//                        mfaca = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2;
-//                        m2    = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaab = m0;
-//                        mfabb = m1;
-//                        mfacb = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2;
-//                        m2    = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfaac = m0;
-//                        mfabc = m1;
-//                        mfacc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2;
-//                        m1    = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2);
-//                        m2    = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2;
-//                        mfbaa = m0;
-//                        mfbba = m1;
-//                        mfbca = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2;
-//                        m1    = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2);
-//                        m2    = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2;
-//                        mfbab = m0;
-//                        mfbbb = m1;
-//                        mfbcb = m2;
-//                        /////////b//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2;
-//                        m1    = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2);
-//                        m2    = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2;
-//                        mfbac = m0;
-//                        mfbbc = m1;
-//                        mfbcc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2;
-//                        m2    = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcaa = m0;
-//                        mfcba = m1;
-//                        mfcca = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2;
-//                        m2    = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcab = m0;
-//                        mfcbb = m1;
-//                        mfccb = m2;
-//                        /////////c//////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
-//                        m1    = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2;
-//                        m2    = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
-//                        mfcac = m0;
-//                        mfcbc = m1;
-//                        mfccc = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        // X - Dir
-//                        m0    = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaaa = m0;
-//                        mfbaa = m1;
-//                        mfcaa = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaba = m0;
-//                        mfbba = m1;
-//                        mfcba = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaca = m0;
-//                        mfbca = m1;
-//                        mfcca = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaab = m0;
-//                        mfbab = m1;
-//                        mfcab = m2;
-//                        ///////////b////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2;
-//                        m2    = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfabb = m0;
-//                        mfbbb = m1;
-//                        mfcbb = m2;
-//                        ///////////b////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfacb = m0;
-//                        mfbcb = m1;
-//                        mfccb = m2;
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        ////////////////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfaac = m0;
-//                        mfbac = m1;
-//                        mfcac = m2;
-//                        ///////////c////////////////////////////////////////////////////////////////////////
-//                        m0    = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2;
-//                        m2    = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfabc = m0;
-//                        mfbbc = m1;
-//                        mfcbc = m2;
-//                        ///////////c////////////////////////////////////////////////////////////////////////
-//                        m0    = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
-//                        m1    = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2;
-//                        m2    = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
-//                        mfacc = m0;
-//                        mfbcc = m1;
-//                        mfccc = m2;
-//
-//                        ///////////////////////////////////////////////////////////////////////////
-//
-//                        //////////////////////////////////////////////////////////////////////////
-//                        // proof correctness
-//                        //////////////////////////////////////////////////////////////////////////
-//#ifdef PROOF_CORRECTNESS
-//                        LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
-//                                           (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
-//                                           (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) +
-//                                           (mfbba + mfbbc) + mfbbb;
-//
-//                        LBMReal dif = rho1 - rho_post;
-//#ifdef SINGLEPRECISION
-//                        if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//                        if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//                        {
-//                            UB_THROW(UbException(UB_EXARGS,
-//                                                 "rho=" + UbSystem::toString(rho) + ", rho_post=" +
-//                                                     UbSystem::toString(rho_post) + " dif=" + UbSystem::toString(dif) +
-//                                                     " rho is not correct for node " + UbSystem::toString(x1) + "," +
-//                                                     UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-//                        }
-//#endif
-//
-//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00];
-//                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N];
-//                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T];
-//                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE];
-//                        mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[NW];
-//                        mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[TE];
-//                        mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[TW];
-//                        mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[TN];
-//                        mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[TS];
-//                        mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[TNE];
-//                        mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[TNW];
-//                        mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[TSE];
-//                        mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[TSW];
-//                        mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[W];
-//                        mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[S];
-//                        mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[B];
-//                        mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[SW];
-//                        mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[SE];
-//                        mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[BW];
-//                        mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[BE];
-//                        mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[BS];
-//                        mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[BN];
-//                        mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[BSW];
-//                        mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[BSE];
-//                        mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[BNW];
-//                        mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[BNE];
-//                        mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[REST];
-//
-//                        //////////////////////////////////////////////////////////////////////////
-//                        // write distribution for F
-//                        //////////////////////////////////////////////////////////////////////////
-//
-//                        (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)     = mfabb;
-//                        (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)     = mfbab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)     = mfbba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)    = mfaab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)   = mfcab;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)    = mfaba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)   = mfcba;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)    = mfbaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)   = mfbca;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)   = mfaaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)  = mfcaa;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)  = mfaca;
-//                        (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-//
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac;
-//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac;
-//
-//                        (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
-// !Old Kernel
-                        /////////////////////  P H A S E - F I E L D   S O L V E R
-                        ////////////////////////////////////////////
-		/////CUMULANT PHASE-FIELD
-				real omegaD =1.0/( 3.0 * mob + 0.5);
-				{
-			   mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-			   mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-			   mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-			   mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-			   mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-			   mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-			   mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-			   mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-			   mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-			   mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-			   mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-			   mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-			   mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-			   mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-			   mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-			   mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-			   mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-			   mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-			   mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-			   mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-			   mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-			   mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-			   mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-			   mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-			   mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-			   mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-			   mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
-
-
-					////////////////////////////////////////////////////////////////////////////////////
-		//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-		//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-		//!
-		////////////////////////////////////////////////////////////////////////////////////
-		// fluid component
-			   //LBMReal drhoFluid =
-				  // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) +
-				  // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) +
-					 //  ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb;
-
-			   //LBMReal rhoFluid = c1 + drhoFluid;
-			   //LBMReal OOrhoFluid = c1 / rhoFluid;
-
-
-			   //LBMReal vvx =
-				  // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) +
-				  // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) +
-					 //  (fcbb - fabb)) * OOrhoFluid;
-			   //LBMReal vvy =
-				  // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) +
-				  // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) +
-					 //  (fbcb - fbab)) * OOrhoFluid;
-			   //LBMReal vvz =
-				  // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) +
-				  // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) +
-					 //  (fbbc - fbba)) * OOrhoFluid;
-
-			 //  LBMReal vvx = ux;
-			 //  LBMReal vvy = uy;
-			 //  LBMReal vvz = uz;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // second component
-			   real concentration =
-				   ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-				   (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-					   ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //!
-			  // LBMReal fx = forces[0];
-			  // LBMReal fy = forces[1];
-			  // LBMReal fz = -concentration * forces[2];
-			  // vvx += fx * c1o2;
-			  // vvy += fy * c1o2;
-			  // vvz += fz * c1o2;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   real oneMinusRho = c1o1 - concentration;
-
-			   real cx =
-				   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-				   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-					   (mfcbb - mfabb));
-			   real cy =
-				   ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-				   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-					   (mfbcb - mfbab));
-			   real cz =
-				   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-					   (mfbbc - mfbba));
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // calculate the square of velocities for this lattice node
-			   real cx2 = cx * cx;
-			   real cy2 = cy * cy;
-			   real cz2 = cz * cz;
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //! see also Eq. (6)-(14) in \ref
-			   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-			   //!
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-			   forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-			   forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-			   forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-			   forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-			   forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-			   forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-			   forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - experimental Cumulant ... to be published ... hopefully
-			   //!
-
-			   // linearized orthogonalization of 3rd order central moments
-			   real Mabc = mfabc - mfaba * c1o3;
-			   real Mbca = mfbca - mfbaa * c1o3;
-			   real Macb = mfacb - mfaab * c1o3;
-			   real Mcba = mfcba - mfaba * c1o3;
-			   real Mcab = mfcab - mfaab * c1o3;
-			   real Mbac = mfbac - mfbaa * c1o3;
-			   // linearized orthogonalization of 5th order central moments
-			   real Mcbc = mfcbc - mfaba * c1o9;
-			   real Mbcc = mfbcc - mfbaa * c1o9;
-			   real Mccb = mfccb - mfaab * c1o9;
-
-			   // collision of 1st order moments
-			  // LBMReal ccx, ccy, ccz;
-			   
-
-               cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-                    normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-               cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-                    normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-               cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-                    normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale;
-
-			   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
-			   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
-			//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz;
-
-
-			   cx2 = cx * cx;
-			   cy2 = cy * cy;
-			   cz2 = cz * cz;
-
-			   // equilibration of 2nd order moments
-			   mfbba = c0o1;
-			   mfbab = c0o1;
-			   mfabb = c0o1;
-
-			   mfcaa = c1o3 * concentration;
-			   mfaca = c1o3 * concentration;
-			   mfaac = c1o3 * concentration;
-
-
-			   //LBMReal omega2 = 1.0f;// omegaD;
-			   //mfbba *= (c1 - omega2);
-			   //mfbab *= (c1 - omega2);
-			   //mfabb *= (c1 - omega2);
-
-			   //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration;
-			   //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration;
-			   //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration;
-
-			   // equilibration of 3rd order moments
-			   Mabc = c0o1;
-			   Mbca = c0o1;
-			   Macb = c0o1;
-			   Mcba = c0o1;
-			   Mcab = c0o1;
-			   Mbac = c0o1;
-			   mfbbb = c0o1;
-
-			   // from linearized orthogonalization 3rd order central moments to central moments
-			   mfabc = Mabc + mfaba * c1o3;
-			   mfbca = Mbca + mfbaa * c1o3;
-			   mfacb = Macb + mfaab * c1o3;
-			   mfcba = Mcba + mfaba * c1o3;
-			   mfcab = Mcab + mfaab * c1o3;
-			   mfbac = Mbac + mfbaa * c1o3;
-
-			   // equilibration of 4th order moments
-			   mfacc = c1o9 * concentration;
-			   mfcac = c1o9 * concentration;
-			   mfcca = c1o9 * concentration;
-
-			   mfcbb = c0o1;
-			   mfbcb = c0o1;
-			   mfbbc = c0o1;
-
-			   // equilibration of 5th order moments
-			   Mcbc = c0o1;
-			   Mbcc = c0o1;
-			   Mccb = c0o1;
-
-			   // from linearized orthogonalization 5th order central moments to central moments
-			   mfcbc = Mcbc + mfaba * c1o9;
-			   mfbcc = Mbcc + mfbaa * c1o9;
-			   mfccb = Mccb + mfaab * c1o9;
-
-			   // equilibration of 6th order moment
-			   mfccc = c1o27 * concentration;
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-			   //! see also Eq. (88)-(96) in
-			   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-			   //!
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // X - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-			   backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-			   backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-			   backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-			   backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-			   backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Y - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-			   backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-			   backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-			   backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-			   ////////////////////////////////////////////////////////////////////////////////////
-			   // Z - Dir
-			   backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-			   backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-			   (*this->localDistributionsH1)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
-   (*this->localDistributionsH1)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
-   (*this->localDistributionsH1)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
-   (*this->localDistributionsH1)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
-   (*this->localDistributionsH1)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
-   (*this->localDistributionsH1)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
-   (*this->localDistributionsH1)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
-   (*this->localDistributionsH1)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
-   (*this->localDistributionsH1)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
-   (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
-   (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
-   (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
-   (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
-   (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
-
-   (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb;
-   }
-
-   ////Phasefield 2:
-
-   {
-
-   normX1 *= -1;
-   normX2 *= -1;
-   normX3 *= -1;
-
-   mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
-   mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
-   mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
-   mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
-   mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
-   mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
-   mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
-   mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
-   mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
-   mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
-   mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
-   mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
-   mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
-   mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
-   mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
-   mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
-   mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
-   mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
-   mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
-   mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
-   mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
-   mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
-   mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-   mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
-   mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
-   mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
-   mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3);
-
-
-   ////////////////////////////////////////////////////////////////////////////////////
-//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
-//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-//!
-////////////////////////////////////////////////////////////////////////////////////
-// fluid component
-	   //LBMReal drhoFluid =
-		  // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) +
-		  // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) +
-			 //  ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb;
-
-	   //LBMReal rhoFluid = c1 + drhoFluid;
-	   //LBMReal OOrhoFluid = c1 / rhoFluid;
-
-
-	   //LBMReal vvx =
-		  // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) +
-		  // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) +
-			 //  (fcbb - fabb)) * OOrhoFluid;
-	   //LBMReal vvy =
-		  // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) +
-		  // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) +
-			 //  (fbcb - fbab)) * OOrhoFluid;
-	   //LBMReal vvz =
-		  // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) +
-		  // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) +
-			 //  (fbbc - fbba)) * OOrhoFluid;
-
-	 //  LBMReal vvx = ux;
-	 //  LBMReal vvy = uy;
-	 //  LBMReal vvz = uz;
-	   ////////////////////////////////////////////////////////////////////////////////////
-	   // second component
-   real concentration =
-	   ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
-	   (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
-		   ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref
-   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-   //!
-  // LBMReal fx = forces[0];
-  // LBMReal fy = forces[1];
-  // LBMReal fz = -concentration * forces[2];
-  // vvx += fx * c1o2;
-  // vvy += fy * c1o2;
-  // vvz += fz * c1o2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   real oneMinusRho = c1o1 - concentration;
-
-   real cx =
-	   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-	   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-		   (mfcbb - mfabb));
-   real cy =
-	   ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-	   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-		   (mfbcb - mfbab));
-   real cz =
-	   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-	   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-		   (mfbbc - mfbba));
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // calculate the square of velocities for this lattice node
-   real cx2 = cx * cx;
-   real cy2 = cy * cy;
-   real cz2 = cz * cz;
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
-   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-   //! see also Eq. (6)-(14) in \ref
-   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-   //!
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Z - Dir
-   forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Y - Dir
-   forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-   forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-   forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-   forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-   forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-   forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // X - Dir
-   forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-   forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-   forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-   forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-   forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-   forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-   forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-   forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-   forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - experimental Cumulant ... to be published ... hopefully
-   //!
-
-   // linearized orthogonalization of 3rd order central moments
-   real Mabc = mfabc - mfaba * c1o3;
-   real Mbca = mfbca - mfbaa * c1o3;
-   real Macb = mfacb - mfaab * c1o3;
-   real Mcba = mfcba - mfaba * c1o3;
-   real Mcab = mfcab - mfaab * c1o3;
-   real Mbac = mfbac - mfbaa * c1o3;
-   // linearized orthogonalization of 5th order central moments
-   real Mcbc = mfcbc - mfaba * c1o9;
-   real Mbcc = mfbcc - mfbaa * c1o9;
-   real Mccb = mfccb - mfaab * c1o9;
-
-   // collision of 1st order moments
-   cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration +
-	   normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
-   cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration +
-	   normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
-   cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration +
-	   normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale;
-
-   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
-   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
-//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz;
-
-
-   cx2 = cx * cx;
-   cy2 = cy * cy;
-   cz2 = cz * cz;
-
-   // equilibration of 2nd order moments
-   mfbba = c0o1;
-   mfbab = c0o1;
-   mfabb = c0o1;
-
-   mfcaa = c1o3 * concentration;
-   mfaca = c1o3 * concentration;
-   mfaac = c1o3 * concentration;
-
-
-   //LBMReal omega2 = 1.0f;// omegaD;
-   //mfbba *= (c1 - omega2);
-   //mfbab *= (c1 - omega2);
-   //mfabb *= (c1 - omega2);
-
-   //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration;
-   //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration;
-   //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration;
-
-   // equilibration of 3rd order moments
-   Mabc = c0o1;
-   Mbca = c0o1;
-   Macb = c0o1;
-   Mcba = c0o1;
-   Mcab = c0o1;
-   Mbac = c0o1;
-   mfbbb = c0o1;
-
-   // from linearized orthogonalization 3rd order central moments to central moments
-   mfabc = Mabc + mfaba * c1o3;
-   mfbca = Mbca + mfbaa * c1o3;
-   mfacb = Macb + mfaab * c1o3;
-   mfcba = Mcba + mfaba * c1o3;
-   mfcab = Mcab + mfaab * c1o3;
-   mfbac = Mbac + mfbaa * c1o3;
-
-   // equilibration of 4th order moments
-   mfacc = c1o9 * concentration;
-   mfcac = c1o9 * concentration;
-   mfcca = c1o9 * concentration;
-
-   mfcbb = c0o1;
-   mfbcb = c0o1;
-   mfbbc = c0o1;
-
-   // equilibration of 5th order moments
-   Mcbc = c0o1;
-   Mbcc = c0o1;
-   Mccb = c0o1;
-
-   // from linearized orthogonalization 5th order central moments to central moments
-   mfcbc = Mcbc + mfaba * c1o9;
-   mfbcc = Mbcc + mfbaa * c1o9;
-   mfccb = Mccb + mfaab * c1o9;
-
-   // equilibration of 6th order moment
-   mfccc = c1o27 * concentration;
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
-   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
-   //! see also Eq. (88)-(96) in
-   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-   //!
-   ////////////////////////////////////////////////////////////////////////////////////
-   // X - Dir
-   backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho);
-   backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
-   backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho);
-   backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
-   backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
-   backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
-   backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho);
-   backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
-   backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Y - Dir
-   backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
-   backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
-   backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
-   backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho);
-   backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
-   backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Z - Dir
-   backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho);
-   backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho);
-
-
-
-   (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-   (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-   (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-   (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-   (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-   (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-   (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-   (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-   (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-   (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-   (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-   (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-   (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-   (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-   (*this->zeroDistributionsH2)(x1, x2, x3) = mfbbb;
-
-   }
-
-
-
-		/////!CUMULANT PHASE-FIELD
-
-
-
-                        /////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
-
-                        //h[dP00]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                        //h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                        //h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                        //h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                        //h[NW]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                        //h[TE]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                        //h[TW]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                        //h[TN]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                        //h[TS]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                        //h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                        //h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        //h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        //h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                        //h[W]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                        //h[S]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                        //h[B]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                        //h[SW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        //h[SE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                        //h[BW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        //h[BE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                        //h[BS]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        //h[BN]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                        //h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        //h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        //h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        //h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        //h[REST] = (*this->zeroDistributionsH)(x1, x2, x3);
-
-                        //for (int dir = STARTF; dir < (ENDF + 1); dir++) {
-                        //    LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
-                        //    LBMReal velSq1  = velProd * velProd;
-                        //    LBMReal hEq; //, gEq;
-
-                        //    if (dir != REST) {
-                        //        LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0;
-                        //        LBMReal hSource     = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; 
-                        //        hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) +                                 hSource * WEIGTH[dir];
-
-                        //        // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5).
-                        //        h[dir] = h[dir] - (h[dir] - hEq) / (tauH); 
-
-                        //    } else {
-                        //        hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-                        //        h[REST] = h[REST] - (h[REST] - hEq) / (tauH); 
-                        //    }
-                        //}
-
-                        //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3)     = h[D3Q27System::INV_E];
-                        //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3)     = h[D3Q27System::INV_N];
-                        //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3)     = h[D3Q27System::INV_T];
-                        //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3)    = h[D3Q27System::INV_NE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3)   = h[D3Q27System::INV_NW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3)    = h[D3Q27System::INV_TE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3)   = h[D3Q27System::INV_TW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3)    = h[D3Q27System::INV_TN];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3)   = h[D3Q27System::INV_TS];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3)   = h[D3Q27System::INV_TNE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3)  = h[D3Q27System::INV_TNW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3)  = h[D3Q27System::INV_TSE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW];
-
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3)     = h[D3Q27System::INV_W];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3)     = h[D3Q27System::INV_S];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p)     = h[D3Q27System::INV_B];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3)   = h[D3Q27System::INV_SW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3)    = h[D3Q27System::INV_SE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p)   = h[D3Q27System::INV_BW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p)    = h[D3Q27System::INV_BE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p)   = h[D3Q27System::INV_BS];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p)    = h[D3Q27System::INV_BN];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p)  = h[D3Q27System::INV_BSE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p)  = h[D3Q27System::INV_BNW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p)   = h[D3Q27System::INV_BNE];
-
-                        //(*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST];
-
-                        /////////////////////   END OF OLD BGK SOLVER ///////////////////////////////
-                    }
-                }
-            }
-        
-       // dataSet->setPhaseField(divU);
-		}
-}
-//////////////////////////////////////////////////////////////////////////
-
-real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX1_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) +
-		+WEIGTH[d0P0] * (phi[dP00] - phi[dM00]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX1[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX2_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM])))
-		+ WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) +
-		+WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX2[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX3_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP])))
-		+ WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) +
-		+WEIGTH[d0P0] * (phi[d00P] - phi[d00M]));
-    //LBMReal sum = 0.0;
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * DX3[k] * phi[k];
-    //}
-    //return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX1_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) +
-		+WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00]));
-	//LBMReal sum = 0.0;
-	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-	//    sum += WEIGTH[k] * DX1[k] * phi2[k];
-	//}
-	//return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX2_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM])))
-		+ WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) +
-		+WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0]));
-	//LBMReal sum = 0.0;
-	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-	//    sum += WEIGTH[k] * DX2[k] * phi2[k];
-	//}
-	//return 3.0 * sum;
-}
-
-real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX3_phi2()
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP])))
-		+ WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) +
-		+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M]));
-	//LBMReal sum = 0.0;
-	//for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-	//    sum += WEIGTH[k] * DX3[k] * phi2[k];
-	//}
-	//return 3.0 * sum;
-}
-
-
-
-
-
-real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::nabla2_phi()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    real sum = 0.0;
-	sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000])))
-		+ (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000]))));
-	sum += WEIGTH[d0PP] * (
-			(((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000])))
-		+	(((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000])))
-		+	(((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))
-		);
-	sum += WEIGTH[d00P] * (
-			((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000]))
-		+	((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000]))
-		+	((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))
-		);
-    //for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-    //    sum += WEIGTH[k] * (phi[k] - phi[REST]);
-    //}
-    return 6.0 * sum;
-}
-
-void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::computePhasefield()
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
-
-    int minX1 = ghostLayerWidth;
-    int minX2 = ghostLayerWidth;
-    int minX3 = ghostLayerWidth;
-    int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
-    int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
-    int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
-
-    //------------- Computing the phase-field ------------------
-    for (int x3 = minX3; x3 < maxX3; x3++) {
-        for (int x2 = minX2; x2 < maxX2; x2++) {
-            for (int x1 = minX1; x1 < maxX1; x1++) {
-                // if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-                {
-                    int x1p = x1 + 1;
-                    int x2p = x2 + 1;
-                    int x3p = x3 + 1;
-
-                    h[dP00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
-                    h[d0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
-                    h[d00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
-                    h[dPP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
-                    h[dMP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
-                    h[dP0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
-                    h[dM0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
-                    h[d0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
-                    h[d0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
-                    h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
-                    h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    h[dM00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
-                    h[d0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
-                    h[d00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
-                    h[dMM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    h[dPM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
-                    h[dM0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    h[dP0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
-                    h[d0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    h[d0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
-                    h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3);
-                }
-            }
-        }
-    }
-}
-
-void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-                                                int x3)
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-    SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-    phi[d000] = (*ph)(x1, x2, x3);
-
-
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-        if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-            phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-        } else {
-			phi[k] = 0.0;
-         }
-    }
-}
-
-void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
-	int x3)
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-	phi2[d000] = (*ph)(x1, x2, x3);
-
-
-	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-
-		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
-			phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
-		}
-		else {
-			phi2[k] = 0.0;
-		}
-	}
-}
-
-void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::swapDistributions()
-{
-    LBMKernel::swapDistributions();
-    dataSet->getHdistributions()->swap();
-	dataSet->getH2distributions()->swap();
-}
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h
deleted file mode 100644
index 34c0f5b8db234c27a2f55f7c8dee4a7c33bdc949..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h
+++ /dev/null
@@ -1,119 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h
-//! \ingroup LBMKernel
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel_H
-#define MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  H. Safari, K. Kutscher, M. Geier
-class MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel : public LBMKernel
-{
-public:
-   MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel();
-   virtual ~MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel(void) = default;
-   void calculate(int step) override;
-   SPtr<LBMKernel> clone() override;
-   void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-   void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho);
-   void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-   void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2);
-
-   ///refactor
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure;
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld;
-
-   real getCalculationTime() override { return .0; }
-protected:
-   virtual void initDataSet();
-   void swapDistributions() override;
-   real f1[D3Q27System::ENDF+1];
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH1;
-
-   CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2;
-   CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2;
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH2;
-
-   //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr   phaseField;
-
-
-   real h  [D3Q27System::ENDF+1];
-   real h2[D3Q27System::ENDF + 1];
-   real g  [D3Q27System::ENDF+1];
-   real phi[D3Q27System::ENDF+1];
-   real phi2[D3Q27System::ENDF + 1];
-   real pr1[D3Q27System::ENDF+1];
-   real phi_cutoff[D3Q27System::ENDF+1];
-
-   real gradX1_phi();
-   real gradX2_phi();
-   real gradX3_phi();
-   real gradX1_phi2();
-   real gradX2_phi2();
-   real gradX3_phi2();
-   //LBMReal gradX1_pr1();
-   //LBMReal gradX2_pr1();
-   //LBMReal gradX3_pr1();
-   //LBMReal dirgradC_phi(int n, int k);
-   void computePhasefield();
-   void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
-   void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3);
-   //void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, int x1, int x2, int x3);
-   //void pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/);
-
-   real nabla2_phi();
-
-
-   mu::value_type muX1,muX2,muX3;
-   mu::value_type muDeltaT;
-   mu::value_type muNu;
-   real forcingX1;
-   real forcingX2;
-   real forcingX3;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/MultiphaseFlow.h b/src/cpu/MultiphaseFlow/MultiphaseFlow.h
deleted file mode 100644
index 79c2ce8066414bc3a96457e143c9552d6907b663..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/MultiphaseFlow.h
+++ /dev/null
@@ -1,63 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseFlow.h
-//! \ingroup MultiphaseFlow
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef MultiphaseFlow_h
-#define MultiphaseFlow_h
-
-#include "MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h"
-#include "MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h"
-#include "MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.h"
-#include "MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h"
-#include "MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h"
-#include "MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h"
-          
-#include "MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.h"
-#include "MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.h"
-#include "MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.h"
-#include "MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h"
-#include "MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.h"
-#include "MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.h"
-#include "MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h"
-#include "MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.h"
-#include "MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h"
-#include "MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h"
-          
-#include "MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.h"
-#include "MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.h"
-
-#include "MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.h"
-#include "MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h"
-#include "MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.h"
-#include "MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h"
-
-#endif
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp b/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp
deleted file mode 100644
index 2bf1ac28d3dc1dad3520d023e7bd96f6b6a2372b..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp
+++ /dev/null
@@ -1,516 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file WriteMultiphaseQuantitiesSimulationObserver.cpp
-//! \ingroup SimulationObservers
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include "WriteMultiphaseQuantitiesSimulationObserver.h"
-#include "BCSet.h"
-#include "LBMKernel.h"
-#include <string>
-#include <vector>
-
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include <parallel/Communicator.h>
-#include "DataSet3D.h"
-#include "Grid3D.h"
-#include "LBMUnitConverter.h"
-#include "UbScheduler.h"
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include <logger/Logger.h>
-
-WriteMultiphaseQuantitiesSimulationObserver::WriteMultiphaseQuantitiesSimulationObserver() = default;
-//////////////////////////////////////////////////////////////////////////
-WriteMultiphaseQuantitiesSimulationObserver::WriteMultiphaseQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s,
-                                                                             const std::string &path,
-                                                                             WbWriter *const writer,
-                                                                             SPtr<LBMUnitConverter> conv,
-                                                                             std::shared_ptr<vf::parallel::Communicator> comm)
-        : SimulationObserver(grid, s), path(path), writer(writer), conv(conv), comm(comm)
-{
-    gridRank = comm->getProcessID();
-    minInitLevel = this->grid->getCoarsestInitializedLevel();
-    maxInitLevel = this->grid->getFinestInitializedLevel();
-
-    blockVector.resize(maxInitLevel + 1);
-
-    for (int level = minInitLevel; level <= maxInitLevel; level++)
-    {
-        grid->getBlocks(level, gridRank, true, blockVector[level]);
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void WriteMultiphaseQuantitiesSimulationObserver::init()
-{}
-
-//////////////////////////////////////////////////////////////////////////
-void WriteMultiphaseQuantitiesSimulationObserver::update(real step)
-{
-    if (scheduler->isDue(step))
-        collectData(step);
-
-    //UBLOG(logDEBUG3, "WriteMultiphaseQuantitiesSimulationObserver::update:" << step);
-    VF_LOG_DEBUG("WriteMultiphaseQuantitiesSimulationObserver::update:: {}", step);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void WriteMultiphaseQuantitiesSimulationObserver::collectData(real step)
-{
-    int istep = static_cast<int>(step);
-
-    for (int level = minInitLevel; level <= maxInitLevel; level++)
-    {
-        for (SPtr<Block3D> block : blockVector[level])
-        {
-            if (block)
-            {
-                addDataMQ(block);
-            }
-        }
-    }
-
-    std::string pfilePath, partPath, subfolder, cfilePath;
-
-    subfolder = "mq" + UbSystem::toString(istep);
-    pfilePath = path + "/mq/" + subfolder;
-    cfilePath = path + "/mq/mq_collection";
-    partPath = pfilePath + "/mq" + UbSystem::toString(gridRank) + "_" + UbSystem::toString(istep);
-
-    std::string partName = writer->writeOctsWithNodeData(partPath, nodes, cells, datanames, data);
-    size_t found = partName.find_last_of("/");
-    std::string piece = partName.substr(found + 1);
-    piece = subfolder + "/" + piece;
-
-    std::vector<std::string> cellDataNames;
-    std::vector<std::string> pieces = comm->gather(piece);
-    if (comm->getProcessID() == comm->getRoot()) {
-        std::string pname =
-                WbWriterVtkXmlASCII::getInstance()->writeParallelFile(pfilePath, pieces, datanames, cellDataNames);
-        found = pname.find_last_of("/");
-        piece = pname.substr(found + 1);
-
-        std::vector<std::string> filenames;
-        filenames.push_back(piece);
-        if (step == SimulationObserver::scheduler->getMinBegin())
-        {
-            WbWriterVtkXmlASCII::getInstance()->writeCollection(cfilePath, filenames, istep, false);
-        } else
-        {
-            WbWriterVtkXmlASCII::getInstance()->addFilesToCollection(cfilePath, filenames, istep, false);
-        }
-        //UBLOG(logINFO, "WriteMultiphaseQuantitiesSimulationObserver step: " << istep);
-        VF_LOG_INFO("WriteMultiphaseQuantitiesSimulationObserver step: {}", istep);
-    }
-
-    clearData();
-}
-
-//////////////////////////////////////////////////////////////////////////
-void WriteMultiphaseQuantitiesSimulationObserver::clearData()
-{
-    nodes.clear();
-    cells.clear();
-    datanames.clear();
-    data.clear();
-}
-
-//////////////////////////////////////////////////////////////////////////
-void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
-{
-    using namespace D3Q27System;
- //   using namespace UbMath;
-    using namespace vf::lbm::dir;
-    using namespace vf::basics::constant;
-
-    SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel());
-    //double level   = (double)block->getLevel();
-
-    // Diese Daten werden geschrieben:
-    datanames.resize(0);
-    datanames.push_back("Phi");
-    datanames.push_back("Vx");
-    datanames.push_back("Vy");
-    datanames.push_back("Vz");
-    datanames.push_back("P1");
-    datanames.push_back("Phi2");
-    if (kernel->getDataSet()->getPressureField()) datanames.push_back("Pressure");
-
-    data.resize(datanames.size());
-
-
-    SPtr<BCArray3D> bcArray                  = kernel->getBCSet()->getBCArray();
-    SPtr<DistributionArray3D> distributionsF = kernel->getDataSet()->getFdistributions();
-    SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions();
-    SPtr<DistributionArray3D> distributionsH2 = kernel->getDataSet()->getH2distributions();
-    SPtr<PhaseFieldArray3D> divU             = kernel->getDataSet()->getPhaseField();
-
-    SPtr<PressureFieldArray3D> pressure;
-    if (kernel->getDataSet()->getPressureField()) pressure = kernel->getDataSet()->getPressureField();
-
-    real f[D3Q27System::ENDF + 1];
-    real phi[D3Q27System::ENDF + 1];
-    real phi2[D3Q27System::ENDF + 1];
-    real vx1, vx2, vx3, rho, p1, beta, kappa;
-    real densityRatio = kernel->getDensityRatio();
-
-    kernel->getMultiphaseModelParameters(beta, kappa);
-    real phiL = kernel->getPhiL();
-    real phiH = kernel->getPhiH();
-
-    // knotennummerierung faengt immer bei 0 an!
-    int SWB, SEB, NEB, NWB, SWT, SET, NET, NWT;
-
-    if (block->getKernel()->getCompressible()) {
-        calcMacros = &D3Q27System::calcCompMacroscopicValues;
-    } else {
-        calcMacros = &D3Q27System::calcIncompMacroscopicValues;
-    }
-
-    // int minX1 = 0;
-    // int minX2 = 0;
-    // int minX3 = 0;
-
-    int maxX1 = (int)(distributionsF->getNX1());
-    int maxX2 = (int)(distributionsF->getNX2());
-    int maxX3 = (int)(distributionsF->getNX3());
-
-    int minX1 = 0;
-    int minX2 = 0;
-    int minX3 = 0;
-    
-    if (kernel->getGhostLayerWidth() == 2)
-    {
-        minX1 = 1;
-        minX2 = 1;
-        minX3 = 1;
-    }
-
-    // int maxX1 = (int)(distributions->getNX1());
-    // int maxX2 = (int)(distributions->getNX2());
-    // int maxX3 = (int)(distributions->getNX3());
-
-    // nummern vergeben und node vector erstellen + daten sammeln
-    CbArray3D<int> nodeNumbers((int)maxX1, (int)maxX2, (int)maxX3, -1);
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField(
-        new CbArray3D<real, IndexerX3X2X1>(maxX1, maxX2, maxX3, -999.0));
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField2(
-        new CbArray3D<real, IndexerX3X2X1>(maxX1, maxX2, maxX3, -999.0));
-
-    for (int ix3 = minX3; ix3 < maxX3; ix3++) {
-        for (int ix2 = minX2; ix2 < maxX2; ix2++) {
-            for (int ix1 = minX1; ix1 < maxX1; ix1++) {
-                if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) {
-                    distributionsH->getPreCollisionDistribution(f, ix1, ix2, ix3);
-                    (*phaseField)(ix1, ix2, ix3) =
-                        ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
-                        (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
-                        ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
-                            ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000];
-                    if (distributionsH2) {
-                    distributionsH2->getPreCollisionDistribution(f, ix1, ix2, ix3);
-                    (*phaseField2)(ix1, ix2, ix3) =
-                        ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
-                        (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
-                        ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
-                            ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000];
-                }
-                    else { (*phaseField2)(ix1, ix2, ix3) = 999.0; }
-                    
-                }
-            }
-        }
-    }
-
-    if (kernel->getGhostLayerWidth() == 1)
-    {
-        maxX1 -= 2;
-        maxX2 -= 2;
-        maxX3 -= 2;
-    }
-    else if (kernel->getGhostLayerWidth() == 2)
-    {
-        maxX1 -= 3;
-        maxX2 -= 3;
-        maxX3 -= 3;
-    }
-
-    int nr = (int)nodes.size();
-    real dX1_phi;
-    real dX2_phi;
-    real dX3_phi;
-    real mu;
-
-    for (int ix3 = minX3; ix3 <= maxX3; ix3++) {
-        for (int ix2 = minX2; ix2 <= maxX2; ix2++) {
-            for (int ix1 = minX1; ix1 <= maxX1; ix1++) {
-                if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) {
-                    int index                  = 0;
-                    nodeNumbers(ix1, ix2, ix3) = nr++;
-                    Vector3D worldCoordinates  = grid->getNodeCoordinates(block, ix1, ix2, ix3);
-                    nodes.push_back(UbTupleFloat3(float(worldCoordinates[0]), float(worldCoordinates[1]),
-                                                  float(worldCoordinates[2])));
-
-                    phi[d000] = (*phaseField)(ix1, ix2, ix3);
-                    phi2[d000] = (*phaseField2)(ix1, ix2, ix3);
-
-                    if ((ix1 == 0) || (ix2 == 0) || (ix3 == 0)) {
-                        dX1_phi = 0.0;
-                        dX2_phi = 0.0;
-                        dX3_phi = 0.0;
-                        mu      = 0.0;
-                        // vx1 = 0.0;
-                        // vx2 = 0.0;
-                        // vx3 = 0.0;
-                    } else {
-                        phi[dP00] = (*phaseField)(ix1 + DX1[dP00], ix2 + DX2[dP00], ix3 + DX3[dP00]);
-                        phi[d0P0] = (*phaseField)(ix1 + DX1[d0P0], ix2 + DX2[d0P0], ix3 + DX3[d0P0]);
-                        phi[d00P] = (*phaseField)(ix1 + DX1[d00P], ix2 + DX2[d00P], ix3 + DX3[d00P]);
-                        phi[dM00] = (*phaseField)(ix1 + DX1[dM00], ix2 + DX2[dM00], ix3 + DX3[dM00]);
-                        phi[d0M0] = (*phaseField)(ix1 + DX1[d0M0], ix2 + DX2[d0M0], ix3 + DX3[d0M0]);
-                        phi[d00M] = (*phaseField)(ix1 + DX1[d00M], ix2 + DX2[d00M], ix3 + DX3[d00M]);
-                        phi[dPP0] = (*phaseField)(ix1 + DX1[dPP0], ix2 + DX2[dPP0], ix3 + DX3[dPP0]);
-                        phi[dMP0] = (*phaseField)(ix1 + DX1[dMP0], ix2 + DX2[dMP0], ix3 + DX3[dMP0]);
-                        phi[dP0P] = (*phaseField)(ix1 + DX1[dP0P], ix2 + DX2[dP0P], ix3 + DX3[dP0P]);
-                        phi[dM0P] = (*phaseField)(ix1 + DX1[dM0P], ix2 + DX2[dM0P], ix3 + DX3[dM0P]);
-                        phi[d0PP] = (*phaseField)(ix1 + DX1[d0PP], ix2 + DX2[d0PP], ix3 + DX3[d0PP]);
-                        phi[d0MP] = (*phaseField)(ix1 + DX1[d0MP], ix2 + DX2[d0MP], ix3 + DX3[d0MP]);
-                        phi[dMM0] = (*phaseField)(ix1 + DX1[dMM0], ix2 + DX2[dMM0], ix3 + DX3[dMM0]);
-                        phi[dPM0] = (*phaseField)(ix1 + DX1[dPM0], ix2 + DX2[dPM0], ix3 + DX3[dPM0]);
-                        phi[dM0M] = (*phaseField)(ix1 + DX1[dM0M], ix2 + DX2[dM0M], ix3 + DX3[dM0M]);
-                        phi[dP0M] = (*phaseField)(ix1 + DX1[dP0M], ix2 + DX2[dP0M], ix3 + DX3[dP0M]);
-                        phi[d0MM] = (*phaseField)(ix1 + DX1[d0MM], ix2 + DX2[d0MM], ix3 + DX3[d0MM]);
-                        phi[d0PM] = (*phaseField)(ix1 + DX1[d0PM], ix2 + DX2[d0PM], ix3 + DX3[d0PM]);
-                        phi[dMMM] = (*phaseField)(ix1 + DX1[dMMM], ix2 + DX2[dMMM], ix3 + DX3[dMMM]);
-                        phi[dPMM] = (*phaseField)(ix1 + DX1[dPMM], ix2 + DX2[dPMM], ix3 + DX3[dPMM]);
-                        phi[dMPM] = (*phaseField)(ix1 + DX1[dMPM], ix2 + DX2[dMPM], ix3 + DX3[dMPM]);
-                        phi[dPPM] = (*phaseField)(ix1 + DX1[dPPM], ix2 + DX2[dPPM], ix3 + DX3[dPPM]);
-                        phi[dPPP] = (*phaseField)(ix1 + DX1[dPPP], ix2 + DX2[dPPP], ix3 + DX3[dPPP]);
-                        phi[dMPP] = (*phaseField)(ix1 + DX1[dMPP], ix2 + DX2[dMPP], ix3 + DX3[dMPP]);
-                        phi[dPMP] = (*phaseField)(ix1 + DX1[dPMP], ix2 + DX2[dPMP], ix3 + DX3[dPMP]);
-                        phi[dMMP] = (*phaseField)(ix1 + DX1[dMMP], ix2 + DX2[dMMP], ix3 + DX3[dMMP]);
-                        dX1_phi  = 0.0 * gradX1_phi(phi);
-                        dX2_phi  = 0.0 * gradX2_phi(phi);
-                        dX3_phi  = 0.0 * gradX3_phi(phi);
-                        mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(phi);
-
-                        //phi2[dP00] = (*phaseField2)(ix1 + DX1[dP00], ix2 + DX2[dP00], ix3 + DX3[dP00]);
-                        //phi2[N] = (*phaseField2)(ix1 + DX1[N], ix2 + DX2[N], ix3 + DX3[N]);
-                        //phi2[T] = (*phaseField2)(ix1 + DX1[T], ix2 + DX2[T], ix3 + DX3[T]);
-                        //phi2[W] = (*phaseField2)(ix1 + DX1[W], ix2 + DX2[W], ix3 + DX3[W]);
-                        //phi2[S] = (*phaseField2)(ix1 + DX1[S], ix2 + DX2[S], ix3 + DX3[S]);
-                        //phi2[B] = (*phaseField2)(ix1 + DX1[B], ix2 + DX2[B], ix3 + DX3[B]);
-                        //phi2[NE] = (*phaseField2)(ix1 + DX1[NE], ix2 + DX2[NE], ix3 + DX3[NE]);
-                        //phi2[NW] = (*phaseField2)(ix1 + DX1[NW], ix2 + DX2[NW], ix3 + DX3[NW]);
-                        //phi2[TE] = (*phaseField2)(ix1 + DX1[TE], ix2 + DX2[TE], ix3 + DX3[TE]);
-                        //phi2[TW] = (*phaseField2)(ix1 + DX1[TW], ix2 + DX2[TW], ix3 + DX3[TW]);
-                        //phi2[TN] = (*phaseField2)(ix1 + DX1[TN], ix2 + DX2[TN], ix3 + DX3[TN]);
-                        //phi2[TS] = (*phaseField2)(ix1 + DX1[TS], ix2 + DX2[TS], ix3 + DX3[TS]);
-                        //phi2[SW] = (*phaseField2)(ix1 + DX1[SW], ix2 + DX2[SW], ix3 + DX3[SW]);
-                        //phi2[SE] = (*phaseField2)(ix1 + DX1[SE], ix2 + DX2[SE], ix3 + DX3[SE]);
-                        //phi2[BW] = (*phaseField2)(ix1 + DX1[BW], ix2 + DX2[BW], ix3 + DX3[BW]);
-                        //phi2[BE] = (*phaseField2)(ix1 + DX1[BE], ix2 + DX2[BE], ix3 + DX3[BE]);
-                        //phi2[BS] = (*phaseField2)(ix1 + DX1[BS], ix2 + DX2[BS], ix3 + DX3[BS]);
-                        //phi2[BN] = (*phaseField2)(ix1 + DX1[BN], ix2 + DX2[BN], ix3 + DX3[BN]);
-                        //phi2[BSW] = (*phaseField2)(ix1 + DX1[BSW], ix2 + DX2[BSW], ix3 + DX3[BSW]);
-                        //phi2[BSE] = (*phaseField2)(ix1 + DX1[BSE], ix2 + DX2[BSE], ix3 + DX3[BSE]);
-                        //phi2[BNW] = (*phaseField2)(ix1 + DX1[BNW], ix2 + DX2[BNW], ix3 + DX3[BNW]);
-                        //phi2[BNE] = (*phaseField2)(ix1 + DX1[BNE], ix2 + DX2[BNE], ix3 + DX3[BNE]);
-                        //phi2[TNE] = (*phaseField2)(ix1 + DX1[TNE], ix2 + DX2[TNE], ix3 + DX3[TNE]);
-                        //phi2[TNW] = (*phaseField2)(ix1 + DX1[TNW], ix2 + DX2[TNW], ix3 + DX3[TNW]);
-                        //phi2[TSE] = (*phaseField2)(ix1 + DX1[TSE], ix2 + DX2[TSE], ix3 + DX3[TSE]);
-                        //phi2[TSW] = (*phaseField2)(ix1 + DX1[TSW], ix2 + DX2[TSW], ix3 + DX3[TSW]);
-
-                       // mu = 2 * beta * phi[REST] * (phi[REST] - 1) * (2 * phi[REST] - 1) - kappa * nabla2_phi(phi);
-
-
-
-                    }
-
-                    distributionsF->getPreCollisionDistribution(f, ix1, ix2, ix3);
-                    //real dU = (*divU)(ix1, ix2, ix3);
-
-                    real rhoH = 1.0;
-                    real rhoL = 1.0 / densityRatio;
-                    // LBMReal rhoToPhi = (1.0 - 1.0/densityRatio);
-                    real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-                    // rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio;
-                    rho = rhoH + rhoToPhi * (phi[d000] - phiH);
-
-                    if (pressure) {
-                        vx1 =
-                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) +
-                            (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) ;
-
-                        vx2 =
-                            ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) +
-                            (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) ;
-
-                        vx3 =
-                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) +
-                            (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M]));
-
-                    }
-                    else {
-                        vx1 =
-                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) +
-                            (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) /
-                                (rho * c1o3) +
-                            mu * dX1_phi / (2 * rho);
-
-                        vx2 =
-                            ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) +
-                            (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) /
-                                (rho * c1o3) +
-                            mu * dX2_phi / (2 * rho);
-
-                        vx3 =
-                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) +
-                            (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])) /
-                                (rho * c1o3) +
-                            mu * dX3_phi / (2 * rho);
-
-                    }
-
-                    p1 = (((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
-                          (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
-                           ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
-                          ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]) +
-                         (vx1 * rhoToPhi * dX1_phi * c1o3 + vx2 * rhoToPhi * dX2_phi * c1o3 +
-                          vx3 * rhoToPhi * dX3_phi * c1o3) /
-                             2.0;
-                    p1 = rho * p1 * c1o3;
-
-                    // calcMacros(f,rho,vx1,vx2,vx3);
-                    // tempfield(ix1,ix2,ix3)= ; Added by HS
-                    // double press = D3Q27System::calcPress(f,rho,vx1,vx2,vx3);
-
-					if (UbMath::isNaN(vx1) || UbMath::isInfinity(vx1))
-                        UB_THROW(UbException(
-                            UB_EXARGS, "vx1 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" +
-                                           block->toString() + ", node=" + UbSystem::toString(ix1) + "," +
-                                           UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-                    // vx1=999.0;
-                    if (UbMath::isNaN(vx2) || UbMath::isInfinity(vx2))
-                        UB_THROW(UbException(
-                            UB_EXARGS, "vx2 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" +
-                                           block->toString() + ", node=" + UbSystem::toString(ix1) + "," +
-                                           UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-                    // vx2=999.0;
-                    if (UbMath::isNaN(vx3) || UbMath::isInfinity(vx3))
-                        UB_THROW(UbException(
-                            UB_EXARGS, "vx3 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" +
-                                           block->toString() + ", node=" + UbSystem::toString(ix1) + "," +
-                                           UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-
-                    if (UbMath::isNaN(phi[d000]) || UbMath::isInfinity(phi[d000]))
-                        UB_THROW(UbException(
-                            UB_EXARGS, "phi is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" +
-                                           block->toString() + ", node=" + UbSystem::toString(ix1) + "," +
-                                           UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-
-                    if (UbMath::isNaN(p1) || UbMath::isInfinity(p1))
-                        UB_THROW( UbException(UB_EXARGS,"p1 is not a number (nan or -1.#IND) or infinity number -1.#INF in block="+block->toString()+
-                        ", node="+UbSystem::toString(ix1)+","+UbSystem::toString(ix2)+","+UbSystem::toString(ix3)));
-
-                    data[index++].push_back(phi[d000]);
-                    data[index++].push_back(vx1);
-                    data[index++].push_back(vx2);
-                    data[index++].push_back(vx3);
-                    data[index++].push_back(p1);
-                    data[index++].push_back(phi2[d000]);
-                    if (pressure) data[index++].push_back((*pressure)(ix1, ix2, ix3));
-                }
-            }
-        }
-    }
-    maxX1 -= 1;
-    maxX2 -= 1;
-    maxX3 -= 1;
-    // cell vector erstellen
-    for (int ix3 = minX3; ix3 <= maxX3; ix3++) {
-        for (int ix2 = minX2; ix2 <= maxX2; ix2++) {
-            for (int ix1 = minX1; ix1 <= maxX1; ix1++) {
-                if ((SWB = nodeNumbers(ix1, ix2, ix3)) >= 0 && (SEB = nodeNumbers(ix1 + 1, ix2, ix3)) >= 0 &&
-                    (NEB = nodeNumbers(ix1 + 1, ix2 + 1, ix3)) >= 0 && (NWB = nodeNumbers(ix1, ix2 + 1, ix3)) >= 0 &&
-                    (SWT = nodeNumbers(ix1, ix2, ix3 + 1)) >= 0 && (SET = nodeNumbers(ix1 + 1, ix2, ix3 + 1)) >= 0 &&
-                    (NET = nodeNumbers(ix1 + 1, ix2 + 1, ix3 + 1)) >= 0 &&
-                    (NWT = nodeNumbers(ix1, ix2 + 1, ix3 + 1)) >= 0) {
-                    cells.push_back(makeUbTuple((unsigned int)SWB, (unsigned int)SEB, (unsigned int)NEB,
-                                                (unsigned int)NWB, (unsigned int)SWT, (unsigned int)SET,
-                                                (unsigned int)NET, (unsigned int)NWT));
-                }
-            }
-        }
-    }
-}
-
-real WriteMultiphaseQuantitiesSimulationObserver::gradX1_phi(const real *const &h)
-{
-    using namespace D3Q27System;
-    real sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX1[k] * h[k];
-    }
-    return 3.0 * sum;
-}
-real WriteMultiphaseQuantitiesSimulationObserver::gradX2_phi(const real *const &h)
-{
-    using namespace D3Q27System;
-    real sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX2[k] * h[k];
-    }
-    return 3.0 * sum;
-}
-
-real WriteMultiphaseQuantitiesSimulationObserver::gradX3_phi(const real *const &h)
-{
-    using namespace D3Q27System;
-    real sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX3[k] * h[k];
-    }
-    return 3.0 * sum;
-}
-
-real WriteMultiphaseQuantitiesSimulationObserver::nabla2_phi(const real *const &h)
-{
-    using namespace vf::lbm::dir;
-
-    using namespace D3Q27System;
-    real sum = 0.0;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * (h[k] - h[d000]);
-    }
-    return 6.0 * sum;
-}
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.h b/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.h
deleted file mode 100644
index e5ba399ad57155c332cc2cd8520c51c8e86c441c..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.h
+++ /dev/null
@@ -1,104 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file WriteMultiphaseQuantitiesSimulationObserver.h
-//! \ingroup SimulationObservers
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef WriteMultiphaseQuantitiesSimulationObserver_H
-#define WriteMultiphaseQuantitiesSimulationObserver_H
-
-#include <PointerDefinitions.h>
-#include <string>
-#include <vector>
-
-#include "SimulationObserver.h"
-#include "LBMSystem.h"
-#include "UbTuple.h"
-
-namespace vf::parallel {class Communicator;}
-class Grid3D;
-class UbScheduler;
-class LBMUnitConverter;
-class WbWriter;
-class Block3D;
-
-//! \brief A class writes macroscopic quantities information to a VTK-file
-class WriteMultiphaseQuantitiesSimulationObserver : public SimulationObserver
-{
-public:
-    WriteMultiphaseQuantitiesSimulationObserver();
-    //! \brief Construct WriteMultiphaseQuantitiesSimulationObserver object
-    //! \pre The Grid3D and UbScheduler objects must exist
-    //! \param grid is observable Grid3D object
-    //! \param s is UbScheduler object for scheduling of observer
-    //! \param path is path of folder for output
-    //! \param writer is WbWriter object
-    //! \param conv is LBMUnitConverter object
-    //! \param comm is Communicator object
-    WriteMultiphaseQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path,
-                                          WbWriter *const writer, SPtr<LBMUnitConverter> conv, std::shared_ptr<vf::parallel::Communicator> comm);
-    ~WriteMultiphaseQuantitiesSimulationObserver() override = default;
-
-    void update(real step) override;
-
-protected:
-    //! Collect data for VTK-file
-    //! \param step is a time step
-    void collectData(real step);
-    //! Collect data for VTK-file
-    //! \param block is a time step
-    void addDataMQ(SPtr<Block3D> block);
-    void clearData();
-
-private:
-    void init();
-    std::vector<UbTupleFloat3> nodes;
-    std::vector<UbTupleUInt8> cells;
-    std::vector<std::string> datanames;
-    std::vector<std::vector<real>> data;
-    std::string path;
-    WbWriter *writer;
-    SPtr<LBMUnitConverter> conv;
-    std::vector<std::vector<SPtr<Block3D>>> blockVector;
-    int minInitLevel;
-    int maxInitLevel;
-    int gridRank;
-    std::shared_ptr<vf::parallel::Communicator> comm;
-
-    real gradX1_phi(const real *const &);
-    real gradX2_phi(const real *const &);
-    real gradX3_phi(const real *const &);
-    real nabla2_phi(const real *const &);
-
-    using CalcMacrosFct = void (*)(const real *const &, real &, real &, real &, real &);
-    CalcMacrosFct calcMacros;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp b/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp
deleted file mode 100644
index 9e2fd5433c3f30649abd46ef00ffa8a92d0b20ba..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp
+++ /dev/null
@@ -1,416 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file WriteSharpInterfaceQuantitiesSimulationObserver.cpp
-//! \ingroup SimulationObservers
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include "WriteSharpInterfaceQuantitiesSimulationObserver.h"
-#include "BCSet.h"
-#include "LBMKernel.h"
-#include <string>
-#include <vector>
-
-#include "BCArray3D.h"
-#include "Block3D.h"
-#include <parallel/Communicator.h>
-#include "DataSet3D.h"
-#include "Grid3D.h"
-#include "LBMUnitConverter.h"
-#include "UbScheduler.h"
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-
-WriteSharpInterfaceQuantitiesSimulationObserver::WriteSharpInterfaceQuantitiesSimulationObserver() = default;
-//////////////////////////////////////////////////////////////////////////
-WriteSharpInterfaceQuantitiesSimulationObserver::WriteSharpInterfaceQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s,
-                                                                             const std::string &path,
-                                                                             WbWriter *const writer,
-                                                                             SPtr<LBMUnitConverter> conv,
-                                                                             std::shared_ptr<vf::parallel::Communicator> comm)
-        : SimulationObserver(grid, s), path(path), writer(writer), conv(conv), comm(comm)
-{
-    gridRank = comm->getProcessID();
-    minInitLevel = this->grid->getCoarsestInitializedLevel();
-    maxInitLevel = this->grid->getFinestInitializedLevel();
-
-    blockVector.resize(maxInitLevel + 1);
-
-    for (int level = minInitLevel; level <= maxInitLevel; level++)
-    {
-        grid->getBlocks(level, gridRank, true, blockVector[level]);
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void WriteSharpInterfaceQuantitiesSimulationObserver::init()
-{}
-
-//////////////////////////////////////////////////////////////////////////
-void WriteSharpInterfaceQuantitiesSimulationObserver::update(double step)
-{
-    if (scheduler->isDue(step))
-        collectData(step);
-
-    UBLOG(logDEBUG3, "WriteSharpInterfaceQuantitiesSimulationObserver::update:" << step);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void WriteSharpInterfaceQuantitiesSimulationObserver::collectData(double step)
-{
-    int istep = static_cast<int>(step);
-
-    for (int level = minInitLevel; level <= maxInitLevel; level++)
-    {
-        for (SPtr<Block3D> block : blockVector[level])
-        {
-            if (block)
-            {
-                addDataMQ(block);
-            }
-        }
-    }
-
-    std::string pfilePath, partPath, subfolder, cfilePath;
-
-    subfolder = "mq" + UbSystem::toString(istep);
-    pfilePath = path + "/mq/" + subfolder;
-    cfilePath = path + "/mq/mq_collection";
-    partPath = pfilePath + "/mq" + UbSystem::toString(gridRank) + "_" + UbSystem::toString(istep);
-
-    std::string partName = writer->writeOctsWithNodeData(partPath, nodes, cells, datanames, data);
-    size_t found = partName.find_last_of("/");
-    std::string piece = partName.substr(found + 1);
-    piece = subfolder + "/" + piece;
-
-    std::vector<std::string> cellDataNames;
-    std::vector<std::string> pieces = comm->gather(piece);
-    if (comm->getProcessID() == comm->getRoot()) {
-        std::string pname =
-                WbWriterVtkXmlASCII::getInstance()->writeParallelFile(pfilePath, pieces, datanames, cellDataNames);
-        found = pname.find_last_of("/");
-        piece = pname.substr(found + 1);
-
-        std::vector<std::string> filenames;
-        filenames.push_back(piece);
-        if (step == SimulationObserver::scheduler->getMinBegin())
-        {
-            WbWriterVtkXmlASCII::getInstance()->writeCollection(cfilePath, filenames, istep, false);
-        } else
-        {
-            WbWriterVtkXmlASCII::getInstance()->addFilesToCollection(cfilePath, filenames, istep, false);
-        }
-        UBLOG(logINFO, "WriteSharpInterfaceQuantitiesSimulationObserver step: " << istep);
-    }
-
-    clearData();
-}
-
-//////////////////////////////////////////////////////////////////////////
-void WriteSharpInterfaceQuantitiesSimulationObserver::clearData()
-{
-    nodes.clear();
-    cells.clear();
-    datanames.clear();
-    data.clear();
-}
-
-//////////////////////////////////////////////////////////////////////////
-void WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
-{
-    using namespace D3Q27System;
-    //using namespace UbMath;
-    using namespace vf::lbm::dir;
-    using namespace vf::basics::constant;
-    SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel());
-    //double level   = (double)block->getLevel();
-    kernel->swapDistributions();
-    // Diese Daten werden geschrieben:
-    datanames.resize(0);
-    datanames.push_back("Phi");
-    datanames.push_back("Vx");
-    datanames.push_back("Vy");
-    datanames.push_back("Vz");
-    datanames.push_back("Pressure");
-
-    data.resize(datanames.size());
-
-
-    SPtr<BCArray3D> bcArray                  = kernel->getBCSet()->getBCArray();
-    SPtr<DistributionArray3D> distributionsF = kernel->getDataSet()->getFdistributions();
-    SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions();
-    SPtr<DistributionArray3D> distributionsH2 = kernel->getDataSet()->getH2distributions();
-    SPtr<PhaseFieldArray3D> divU             = kernel->getDataSet()->getPhaseField();
-
-    real pressure;
-
-    real f[D3Q27System::ENDF + 1];
-    real phi;
-    real vx1, vx2, vx3, rho;
-    real densityRatio = kernel->getDensityRatio();
-    //real phiL = kernel->getPhiL();
-    //real phiH = kernel->getPhiH();
-
-    // knotennummerierung faengt immer bei 0 an!
-    int SWB, SEB, NEB, NWB, SWT, SET, NET, NWT;
-
-    if (block->getKernel()->getCompressible()) {
-        calcMacros = &D3Q27System::calcCompMacroscopicValues;
-    } else {
-        calcMacros = &D3Q27System::calcIncompMacroscopicValues;
-    }
-
-    // int minX1 = 0;
-    // int minX2 = 0;
-    // int minX3 = 0;
-
-    int maxX1 = (int)(distributionsF->getNX1());
-    int maxX2 = (int)(distributionsF->getNX2());
-    int maxX3 = (int)(distributionsF->getNX3());
-
-    int minX1 = 0;
-    int minX2 = 0;
-    int minX3 = 0;
-    
-    if (kernel->getGhostLayerWidth() == 2)
-    {
-        minX1 = 1;
-        minX2 = 1;
-        minX3 = 1;
-    }
-
-    // int maxX1 = (int)(distributions->getNX1());
-    // int maxX2 = (int)(distributions->getNX2());
-    // int maxX3 = (int)(distributions->getNX3());
-
-    // nummern vergeben und node vector erstellen + daten sammeln
-    CbArray3D<int> nodeNumbers((int)maxX1, (int)maxX2, (int)maxX3, -1);
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField(
-        new CbArray3D<real, IndexerX3X2X1>(maxX1, maxX2, maxX3, -999.0));
-
-
-    for (int ix3 = minX3; ix3 < maxX3; ix3++) {
-        for (int ix2 = minX2; ix2 < maxX2; ix2++) {
-            for (int ix1 = minX1; ix1 < maxX1; ix1++) {
-                if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) {
-                    distributionsH->getPostCollisionDistribution(f, ix1, ix2, ix3);
-                    (*phaseField)(ix1, ix2, ix3) =
-                        ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
-                        (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
-                        ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
-                            ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000];
-                }
-            }
-        }
-    }
-
-    if (kernel->getGhostLayerWidth() == 1)
-    {
-        maxX1 -= 2;
-        maxX2 -= 2;
-        maxX3 -= 2;
-    }
-    else if (kernel->getGhostLayerWidth() == 2)
-    {
-        maxX1 -= 3;
-        maxX2 -= 3;
-        maxX3 -= 3;
-    }
-
-    int nr = (int)nodes.size();
-    //real dX1_phi;
-    //real dX2_phi;
-    //real dX3_phi;
-    //real mu;
-
-    for (int ix3 = minX3; ix3 <= maxX3; ix3++) {
-        for (int ix2 = minX2; ix2 <= maxX2; ix2++) {
-            for (int ix1 = minX1; ix1 <= maxX1; ix1++) {
-                if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) {
-                    int index                  = 0;
-                    nodeNumbers(ix1, ix2, ix3) = nr++;
-                    Vector3D worldCoordinates  = grid->getNodeCoordinates(block, ix1, ix2, ix3);
-                    nodes.push_back(UbTupleFloat3(float(worldCoordinates[0]), float(worldCoordinates[1]),
-                                                  float(worldCoordinates[2])));
-
-                    phi = (*phaseField)(ix1, ix2, ix3);
-
-
-                    distributionsF->getPostCollisionDistribution(f, ix1, ix2, ix3);
-                    //real dU = (*divU)(ix1, ix2, ix3);
-
-                    real rhoH = 1.0;
-                    real rhoL = 1.0 / densityRatio;
-                    // real rhoToPhi = (1.0 - 1.0/densityRatio);
-                    //real rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
-
-                    // rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio;
-
-                    
-                    rho = (phi>c1o2) ? rhoH : rhoL; // rhoH + rhoToPhi * (phi - phiH);
-
-                        vx1 =
-                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) +
-                            (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) ;
-
-                        vx2 =
-                            ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) +
-                            (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) ;
-
-                        vx3 =
-                            ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) +
-                            (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M]));
-
-
-
-                    pressure = (((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) +
-                        (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) +
-                        ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
-                            ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000])*c1o3*rho;
-
-					if (UbMath::isNaN(vx1) || UbMath::isInfinity(vx1))
-                        UB_THROW(UbException(
-                            UB_EXARGS, "vx1 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" +
-                                           block->toString() + ", node=" + UbSystem::toString(ix1) + "," +
-                                           UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-                    // vx1=999.0;
-                    if (UbMath::isNaN(vx2) || UbMath::isInfinity(vx2))
-                        UB_THROW(UbException(
-                            UB_EXARGS, "vx2 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" +
-                                           block->toString() + ", node=" + UbSystem::toString(ix1) + "," +
-                                           UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-                    // vx2=999.0;
-                    if (UbMath::isNaN(vx3) || UbMath::isInfinity(vx3))
-                        UB_THROW(UbException(
-                            UB_EXARGS, "vx3 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" +
-                                           block->toString() + ", node=" + UbSystem::toString(ix1) + "," +
-                                           UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-
-                    if (UbMath::isNaN(phi) || UbMath::isInfinity(phi))
-                        UB_THROW(UbException(
-                            UB_EXARGS, "phi is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" +
-                                           block->toString() + ", node=" + UbSystem::toString(ix1) + "," +
-                                           UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-
-                     if (UbMath::isNaN(pressure) || UbMath::isInfinity(pressure))
-                        UB_THROW( UbException(UB_EXARGS,"pressure is not a number (nan or -1.#IND) or infinity number -1.#INF in block="+block->toString()+
-                        ", node="+UbSystem::toString(ix1)+","+UbSystem::toString(ix2)+","+UbSystem::toString(ix3)));
-
-                    //if (UbMath::isNaN(p1) || UbMath::isInfinity(p1))
-                    //    UB_THROW( UbException(UB_EXARGS,"p1 is not a number (nan or -1.#IND) or infinity number -1.#INF in block="+block->toString()+
-                    //    ", node="+UbSystem::toString(ix1)+","+UbSystem::toString(ix2)+","+UbSystem::toString(ix3)));
-
-                    //if (UbMath::isNaN(mp) || UbMath::isInfinity(mp))
-                    //    UB_THROW(UbException(UB_EXARGS, "mp is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + block->toString() +
-                    //        ", node=" + UbSystem::toString(ix1) + "," + UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-
-                    //if (UbMath::isNaN(delmp) || UbMath::isInfinity(delmp))
-                    //    UB_THROW(UbException(UB_EXARGS, "delmp is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + block->toString() +
-                    //        ", node=" + UbSystem::toString(ix1) + "," + UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-
-                    data[index++].push_back(phi);
-                    data[index++].push_back(vx1);
-                    data[index++].push_back(vx2);
-                    data[index++].push_back(vx3);
-                    //data[index++].push_back(p1);
-                    //data[index++].push_back(phi2[d000]);
-                    //data[index++].push_back(mp);
-                    //data[index++].push_back(delmp);
-                    data[index++].push_back(pressure);
-                }
-            }
-        }
-    }
-    maxX1 -= 1;
-    maxX2 -= 1;
-    maxX3 -= 1;
-    // cell vector erstellen
-    for (int ix3 = minX3; ix3 <= maxX3; ix3++) {
-        for (int ix2 = minX2; ix2 <= maxX2; ix2++) {
-            for (int ix1 = minX1; ix1 <= maxX1; ix1++) {
-                if ((SWB = nodeNumbers(ix1, ix2, ix3)) >= 0 && (SEB = nodeNumbers(ix1 + 1, ix2, ix3)) >= 0 &&
-                    (NEB = nodeNumbers(ix1 + 1, ix2 + 1, ix3)) >= 0 && (NWB = nodeNumbers(ix1, ix2 + 1, ix3)) >= 0 &&
-                    (SWT = nodeNumbers(ix1, ix2, ix3 + 1)) >= 0 && (SET = nodeNumbers(ix1 + 1, ix2, ix3 + 1)) >= 0 &&
-                    (NET = nodeNumbers(ix1 + 1, ix2 + 1, ix3 + 1)) >= 0 &&
-                    (NWT = nodeNumbers(ix1, ix2 + 1, ix3 + 1)) >= 0) {
-                    cells.push_back(makeUbTuple((unsigned int)SWB, (unsigned int)SEB, (unsigned int)NEB,
-                                                (unsigned int)NWB, (unsigned int)SWT, (unsigned int)SET,
-                                                (unsigned int)NET, (unsigned int)NWT));
-                }
-            }
-        }
-    }
-    kernel->swapDistributions();
-}
-
-real WriteSharpInterfaceQuantitiesSimulationObserver::gradX1_phi(const real *const &h)
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-    using namespace vf::basics::constant;
-    real sum = c0o1;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX1[k] * h[k];
-    }
-    return 3.0 * sum;
-}
-real WriteSharpInterfaceQuantitiesSimulationObserver::gradX2_phi(const real *const &h)
-{
-    using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-    using namespace vf::basics::constant;
-    real sum = c0o1;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX2[k] * h[k];
-    }
-    return 3.0 * sum;
-}
-
-real WriteSharpInterfaceQuantitiesSimulationObserver::gradX3_phi(const real *const &h)
-{
-    using namespace D3Q27System;
-    using namespace vf::lbm::dir;
-    using namespace vf::basics::constant;
-    real sum = c0o1;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * DX3[k] * h[k];
-    }
-    return 3.0 * sum;
-}
-
-real WriteSharpInterfaceQuantitiesSimulationObserver::nabla2_phi(const real *const &h)
-{
-    using namespace D3Q27System;
-    using namespace vf::lbm::dir;
-    using namespace vf::basics::constant;
-    real sum = c0o1;
-    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
-        sum += WEIGTH[k] * (h[k] - h[d000]);
-    }
-    return 6.0 * sum;
-}
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.h b/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.h
deleted file mode 100644
index bf42cbfa46b8c6b080da16b1732bd242674e48c5..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.h
+++ /dev/null
@@ -1,104 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file WriteSharpInterfaceQuantitiesSimulationObserver.h
-//! \ingroup SimulationObservers
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef WriteSharpInterfaceQuantitiesSimulationObserver_H
-#define WriteSharpInterfaceQuantitiesSimulationObserver_H
-
-#include <PointerDefinitions.h>
-#include <string>
-#include <vector>
-
-#include "SimulationObserver.h"
-#include "LBMSystem.h"
-#include "UbTuple.h"
-
-namespace vf::parallel {class Communicator;}
-class Grid3D;
-class UbScheduler;
-class LBMUnitConverter;
-class WbWriter;
-class Block3D;
-
-//! \brief A class writes macroscopic quantities information to a VTK-file
-class WriteSharpInterfaceQuantitiesSimulationObserver : public SimulationObserver
-{
-public:
-    WriteSharpInterfaceQuantitiesSimulationObserver();
-    //! \brief Construct WriteSharpInterfaceQuantitiesSimulationObserver object
-    //! \pre The Grid3D and UbScheduler objects must exist
-    //! \param grid is observable Grid3D object
-    //! \param s is UbScheduler object for scheduling of observer
-    //! \param path is path of folder for output
-    //! \param writer is WbWriter object
-    //! \param conv is LBMUnitConverter object
-    //! \param comm is Communicator object
-    WriteSharpInterfaceQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path,
-                                          WbWriter *const writer, SPtr<LBMUnitConverter> conv, std::shared_ptr<vf::parallel::Communicator> comm);
-    ~WriteSharpInterfaceQuantitiesSimulationObserver() override = default;
-
-    void update(double step) override;
-
-protected:
-    //! Collect data for VTK-file
-    //! \param step is a time step
-    void collectData(double step);
-    //! Collect data for VTK-file
-    //! \param block is a time step
-    void addDataMQ(SPtr<Block3D> block);
-    void clearData();
-
-private:
-    void init();
-    std::vector<UbTupleFloat3> nodes;
-    std::vector<UbTupleUInt8> cells;
-    std::vector<std::string> datanames;
-    std::vector<std::vector<double>> data;
-    std::string path;
-    WbWriter *writer;
-    SPtr<LBMUnitConverter> conv;
-    std::vector<std::vector<SPtr<Block3D>>> blockVector;
-    int minInitLevel;
-    int maxInitLevel;
-    int gridRank;
-    std::shared_ptr<vf::parallel::Communicator> comm;
-
-    real gradX1_phi(const real *const &);
-    real gradX2_phi(const real *const &);
-    real gradX3_phi(const real *const &);
-    real nabla2_phi(const real *const &);
-
-    using CalcMacrosFct = void (*)(const real *const &, real &, real &, real &, real &);
-    CalcMacrosFct calcMacros;
-};
-
-#endif
diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.cpp
deleted file mode 100644
index 1b8dc581c37fea66b6f5725330d5d693917adf7d..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseBoundaryConditionsBlockVisitor.cpp
-//! \ingroup Visitors
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseBoundaryConditionsBlockVisitor.h"
-#include "BC.h"
-#include "BCArray3D.h"
-#include "BCSet.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "DataSet3D.h"
-#include "Grid3D.h"
-#include "D3Q27System.h"
-#include "BC.h"
-#include "Block3D.h"
-#include "BCArray3D.h"
-#include "LBMKernel.h"
-
-MultiphaseBoundaryConditionsBlockVisitor::MultiphaseBoundaryConditionsBlockVisitor() :
-Block3DVisitor(0, D3Q27System::MAXLEVEL)
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseBoundaryConditionsBlockVisitor::~MultiphaseBoundaryConditionsBlockVisitor()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseBoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block)
-{
-   if (block->getRank() == grid->getRank())
-   {
-      SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel());
-
-      if (!kernel)
-      {
-         throw UbException(UB_EXARGS, "LBMKernel in " + block->toString() + "is not exist!");
-      }
-
-      SPtr<BCSet> bcSet = kernel->getBCSet();
-
-      if (!bcSet)
-      {
-         throw UbException(UB_EXARGS,"Boundary Conditions Processor is not exist!" );
-      }
-
-      SPtr<BCArray3D> bcArray = bcSet->getBCArray();
-
-      bool compressible = kernel->getCompressible();
-      real collFactorL = kernel->getCollisionFactorL();
-	  real collFactorG = kernel->getCollisionFactorG();
-	  real collFactorPh = 1.0/kernel->getPhaseFieldRelaxation();
-	  real densityRatio = kernel->getDensityRatio();
-	  real phiL = kernel->getPhiL();
-	  real phiH = kernel->getPhiH();
-      //int level = block->getLevel();
-
-      int minX1 = 0;
-      int minX2 = 0;
-      int minX3 = 0;
-      int maxX1 = (int)bcArray->getNX1();
-      int maxX2 = (int)bcArray->getNX2();
-      int maxX3 = (int)bcArray->getNX3();
-      SPtr<BoundaryConditions> bcPtr;
-
-      bcSet->clearBC();
-
-      SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions();
-	  SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions();
-      SPtr<DistributionArray3D> distributionsH2 = kernel->getDataSet()->getH2distributions();
-
-      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))
-               {
-                  if ((bcPtr = bcArray->getBC(x1, x2, x3)) != NULL)
-                  {
-                     char alg = bcPtr->getBCStrategyType();
-                     SPtr<BCStrategy> bca = bcMap[alg];
-                     
-                     if (bca)
-                     {
-                        bca = bca->clone();
-                        bca->setNodeIndex(x1, x2, x3);
-                        bca->setBcPointer(bcPtr);
-                        //bca->addDistributions(distributions, distributionsH);
-						bca->addDistributions(distributions);
-						bca->addDistributionsH(distributionsH);
-                        if (distributionsH2)
-                            bca->addDistributionsH2(distributionsH2);
-                        bca->setCollFactorL(collFactorL);
-						bca->setCollFactorG(collFactorG);
-						bca->setCollFactorPh(collFactorPh);
-						bca->setDensityRatio(densityRatio);
-						bca->setPhiBound(phiL, phiH);
-                        bca->setCompressible(compressible);
-                        bca->setBcArray(bcArray);
-                        bcSet->addBC(bca);
-                     }
-                  }
-               }
-            }
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseBoundaryConditionsBlockVisitor::addBC(SPtr<BC> bc)
-{
-   bcMap.insert(std::make_pair(bc->getBCStrategyType(), bc->getAlgorithm()));
-}
-
-
-
diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp
deleted file mode 100644
index 54ee28571ebf76ca96d3d79cbb49417654517a8c..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp
+++ /dev/null
@@ -1,360 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseInitDistributionsBlockVisitor.cpp
-//! \ingroup Visitors
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseInitDistributionsBlockVisitor.h"
-#include "BCArray3D.h"
-#include "BCSet.h"
-#include "Block3D.h"
-#include "DataSet3D.h"
-#include "EsoTwist3D.h"
-#include "Grid3D.h"
-#include "D3Q27System.h"
-#include "LBMKernel.h"
-
-MultiphaseInitDistributionsBlockVisitor::MultiphaseInitDistributionsBlockVisitor() 
-	: Block3DVisitor(0, D3Q27System::MAXLEVEL)
-{
-	this->setVx1(0.0);
-	this->setVx2(0.0);
-	this->setVx3(0.0);
-	this->setRho(0.0);
-}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseInitDistributionsBlockVisitor::MultiphaseInitDistributionsBlockVisitor( real densityRatio, real vx1, real vx2, real vx3, real rho)
-	: Block3DVisitor(0, D3Q27System::MAXLEVEL), densityRatio(densityRatio) 
-{
-	this->setVx1(vx1);
-	this->setVx2(vx2);
-	this->setVx3(vx3);
-	this->setRho(rho);}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setVx1( const mu::Parser& parser)  
-{ 
-	this->checkFunction(parser); 
-	this->muVx1 = parser;  
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setVx2( const mu::Parser& parser)
-{ 
-	this->checkFunction(parser); 
-	this->muVx2 = parser;  
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setVx3( const mu::Parser& parser)  
-{ 
-	this->checkFunction(parser); 
-	this->muVx3 = parser;  
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setRho( const mu::Parser& parser)  
-{ 
-	this->checkFunction(parser); 
-	this->muRho = parser;  
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setPhi( const mu::Parser& parser)  
-{ 
-	this->checkFunction(parser); 
-	this->muPhi = parser;  
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setVx1( const std::string& muParserString)  
-{ 
-	this->muVx1.SetExpr(muParserString); 
-	this->checkFunction(muVx1); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setVx2( const std::string& muParserString) 
-{ 
-	this->muVx2.SetExpr(muParserString); 
-	this->checkFunction(muVx2); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setVx3( const std::string& muParserString)  
-{ 
-	this->muVx3.SetExpr(muParserString); 
-	this->checkFunction(muVx3); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setRho( const std::string& muParserString)  
-{ 
-	this->muRho.SetExpr(muParserString); 
-	this->checkFunction(muRho); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setPhi( const std::string& muParserString)  
-{ 
-	this->muPhi.SetExpr(muParserString); 
-	this->checkFunction(muPhi); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setVx1( real vx1 ) 
-{ 
-	this->muVx1.SetExpr( UbSystem::toString(vx1,D3Q27RealLim::digits10) );  
-	this->checkFunction(muVx1); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setVx2( real vx2 ) 
-{ 
-	this->muVx2.SetExpr( UbSystem::toString(vx2,D3Q27RealLim::digits10) );  
-	this->checkFunction(muVx2); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setVx3( real vx3 ) 
-{ 
-	this->muVx3.SetExpr( UbSystem::toString(vx3,D3Q27RealLim::digits10) );  
-	this->checkFunction(muVx3); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setRho( real rho ) 
-{ 
-	this->muRho.SetExpr( UbSystem::toString(rho,D3Q27RealLim::digits10) );  
-	this->checkFunction(muRho); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setPhi( real phi ) 
-{ 
-	this->muPhi.SetExpr( UbSystem::toString(phi,D3Q27RealLim::digits10) );  
-	this->checkFunction(muPhi); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D> block) 
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	if(!block) UB_THROW( UbException(UB_EXARGS,"block is not exist") );
-
-	//define vars for functions
-	mu::value_type x1,x2,x3;
-	this->muVx1.DefineVar("x1",&x1); this->muVx1.DefineVar("x2",&x2); this->muVx1.DefineVar("x3",&x3);
-	this->muVx2.DefineVar("x1",&x1); this->muVx2.DefineVar("x2",&x2); this->muVx2.DefineVar("x3",&x3);
-	this->muVx3.DefineVar("x1",&x1); this->muVx3.DefineVar("x2",&x2); this->muVx3.DefineVar("x3",&x3);
-	this->muRho.DefineVar("x1",&x1); this->muRho.DefineVar("x2",&x2); this->muRho.DefineVar("x3",&x3);
-	this->muPhi.DefineVar("x1",&x1); this->muPhi.DefineVar("x2",&x2); this->muPhi.DefineVar("x3",&x3);
-
-	real vx1, vx2, vx3, rho, /*p1,*/ phi;
-
-	int gridRank = grid->getRank();
-	int blockRank = block->getRank();
-
-	if (blockRank == gridRank && block->isActive())
-	{
-        SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel());
-		if (!kernel)
-			throw UbException(UB_EXARGS, "The LBM kernel isn't exist in block: "+block->toString());
-
-		SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray();
-        SPtr<EsoTwist3D> distributionsF = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getFdistributions()); 
-		SPtr<EsoTwist3D> distributionsH = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getHdistributions());
-        SPtr<EsoTwist3D> distributionsH2 = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getH2distributions());
-
-		real phiL = kernel->getPhiL();
-		real phiH = kernel->getPhiH();
-
-		real f[D3Q27System::ENDF+1];
-
-		for(int ix3=0; ix3<(int)bcArray->getNX3(); ix3++)
-            for (int ix2 = 0; ix2 < (int)bcArray->getNX2(); ix2++)
-                for (int ix1 = 0; ix1 < (int)bcArray->getNX1(); ix1++)
-				{
-					Vector3D coords = grid->getNodeCoordinates(block, ix1, ix2, ix3);
-                    x1              = coords[0];
-                    x2              = coords[1];
-                    x3              = coords[2];
-
-					
-					//p1  = 0.0;
-					//p1 = muRho.Eval();
-					vx1 = muVx1.Eval();
-					vx2 = muVx2.Eval();
-					vx3 = muVx3.Eval();
-					phi = muPhi.Eval();
-					
-					//rho = phi*1.0 + (1.0-phi)/densityRatio;
-					real rhoH = 1.0;
-					real rhoL = 1.0/densityRatio;
-					rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL);
-
-			
-					real feq[27];
-					real geq[27];
-
-					//calcFeqsFct(feq,rho,vx1,vx2,vx3);
-					real vx1Sq = vx1*vx1;
-					real vx2Sq = vx2*vx2;
-					real vx3Sq = vx3*vx3;
-					for (int dir = STARTF; dir < (ENDF+1); dir++)
-					{
-						real velProd = DX1[dir]*vx1 + DX2[dir]*vx2 + DX3[dir]*vx3;
-						real velSq1 = velProd*velProd;
-						real gamma = WEIGTH[dir]*(3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq));
-
-						feq[dir] = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq));
-						//geq[dir] = p1*WEIGTH[dir] + gamma;
-						//geq[dir] = p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho;
-						//geq[dir] = (p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho)*vf::basics::constant::c1o3;
-						geq[dir] = (gamma*rho)* vf::basics::constant::c1o3;
-					}
-
-
-					f[dP00]    =  geq[dP00]    ;
-					f[dM00]    =  geq[dM00]    ;
-					f[d0P0]    =  geq[d0P0]    ;
-					f[d0M0]    =  geq[d0M0]    ;
-					f[d00P]    =  geq[d00P]    ;
-					f[d00M]    =  geq[d00M]    ;
-					f[dPP0]   =  geq[dPP0]   ;
-					f[dMM0]   =  geq[dMM0]   ;
-					f[dPM0]   =  geq[dPM0]   ;
-					f[dMP0]   =  geq[dMP0]   ;
-					f[dP0P]   =  geq[dP0P]   ;
-					f[dM0M]   =  geq[dM0M]   ;
-					f[dP0M]   =  geq[dP0M]   ;
-					f[dM0P]   =  geq[dM0P]   ;
-					f[d0PP]   =  geq[d0PP]   ;
-					f[d0MM]   =  geq[d0MM]   ;
-					f[d0PM]   =  geq[d0PM]   ;
-					f[d0MP]   =  geq[d0MP]   ;
-					f[dPPP]  =  geq[dPPP]  ;
-					f[dMPP]  =  geq[dMPP]  ;
-					f[dPMP]  =  geq[dPMP]  ;
-					f[dMMP]  =  geq[dMMP]  ;
-					f[dPPM]  =  geq[dPPM]  ;
-					f[dMPM]  =  geq[dMPM]  ;
-					f[dPMM]  =  geq[dPMM]  ;
-					f[dMMM]  =  geq[dMMM]  ;
-					f[d000] =  geq[d000] ;
-
-					distributionsF->setPostCollisionDistribution(f, ix1, ix2, ix3);
-					distributionsF->setPreCollisionDistribution(f, ix1, ix2, ix3);
-
-					f[dP00]    =  phi * feq[dP00]    / rho;
-					f[dM00]    =  phi * feq[dM00]    / rho;
-					f[d0P0]    =  phi * feq[d0P0]    / rho;
-					f[d0M0]    =  phi * feq[d0M0]    / rho;
-					f[d00P]    =  phi * feq[d00P]    / rho;
-					f[d00M]    =  phi * feq[d00M]    / rho;
-					f[dPP0]   =  phi * feq[dPP0]   / rho;
-					f[dMM0]   =  phi * feq[dMM0]   / rho;
-					f[dPM0]   =  phi * feq[dPM0]   / rho;
-					f[dMP0]   =  phi * feq[dMP0]   / rho;
-					f[dP0P]   =  phi * feq[dP0P]   / rho;
-					f[dM0M]   =  phi * feq[dM0M]   / rho;
-					f[dP0M]   =  phi * feq[dP0M]   / rho;
-					f[dM0P]   =  phi * feq[dM0P]   / rho;
-					f[d0PP]   =  phi * feq[d0PP]   / rho;
-					f[d0MM]   =  phi * feq[d0MM]   / rho;
-					f[d0PM]   =  phi * feq[d0PM]   / rho;
-					f[d0MP]   =  phi * feq[d0MP]   / rho;
-					f[dPPP]  =  phi * feq[dPPP]  / rho;
-					f[dMPP]  =  phi * feq[dMPP]  / rho;
-					f[dPMP]  =  phi * feq[dPMP]  / rho;
-					f[dMMP]  =  phi * feq[dMMP]  / rho;
-					f[dPPM]  =  phi * feq[dPPM]  / rho;
-					f[dMPM]  =  phi * feq[dMPM]  / rho;
-					f[dPMM]  =  phi * feq[dPMM]  / rho;
-					f[dMMM]  =  phi * feq[dMMM]  / rho;
-					f[d000] =  phi * feq[d000] / rho;
-
-					distributionsH->setPostCollisionDistribution(f, ix1, ix2, ix3);
-					distributionsH->setPreCollisionDistribution(f, ix1, ix2, ix3);
-
-					if (distributionsH2) {
-
-						f[dP00]    = (1.-phi) * feq[dP00] / rho;
-						f[dM00]    = (1.-phi) * feq[dM00] / rho;
-						f[d0P0]    = (1.-phi) * feq[d0P0] / rho;
-						f[d0M0]    = (1.-phi) * feq[d0M0] / rho;
-						f[d00P]    = (1.-phi) * feq[d00P] / rho;
-						f[d00M]    = (1.-phi) * feq[d00M] / rho;
-						f[dPP0]   = (1.-phi) * feq[dPP0] / rho;
-						f[dMM0]   = (1.-phi) * feq[dMM0] / rho;
-						f[dPM0]   = (1.-phi) * feq[dPM0] / rho;
-						f[dMP0]   = (1.-phi) * feq[dMP0] / rho;
-						f[dP0P]   = (1.-phi) * feq[dP0P] / rho;
-						f[dM0M]   = (1.-phi) * feq[dM0M] / rho;
-						f[dP0M]   = (1.-phi) * feq[dP0M] / rho;
-						f[dM0P]   = (1.-phi) * feq[dM0P] / rho;
-						f[d0PP]   = (1.-phi) * feq[d0PP] / rho;
-						f[d0MM]   = (1.-phi) * feq[d0MM] / rho;
-						f[d0PM]   = (1.-phi) * feq[d0PM] / rho;
-						f[d0MP]   = (1.-phi) * feq[d0MP] / rho;
-						f[dPPP]  = (1.-phi) * feq[dPPP] / rho;
-						f[dMPP]  = (1.-phi) * feq[dMPP] / rho;
-						f[dPMP]  = (1.-phi) * feq[dPMP] / rho;
-						f[dMMP]  = (1.-phi) * feq[dMMP] / rho;
-						f[dPPM]  = (1.-phi) * feq[dPPM] / rho;
-						f[dMPM]  = (1.-phi) * feq[dMPM] / rho;
-						f[dPMM]  = (1.-phi) * feq[dPMM] / rho;
-						f[dMMM]  = (1.-phi) * feq[dMMM] / rho;
-						f[d000] = (1.-phi) * feq[d000] / rho;
-
-                        distributionsH2->setPostCollisionDistribution(f, ix1, ix2, ix3);
-                        distributionsH2->setPreCollisionDistribution(f, ix1, ix2, ix3);                    
-					}
-				}
-	}
-
-	//variablen der functions loeschen, da die verwiesenen Objecte nach dem verlassen des scopes ungueltig sind!
-	this->muVx1.ClearVar();
-	this->muVx2.ClearVar();
-	this->muVx3.ClearVar();
-	this->muRho.ClearVar();
-
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::checkFunction(mu::Parser fct)
-{
-	real x1=1.0,x2=1.0,x3=1.0;
-	fct.DefineVar("x1",&x1); 
-	fct.DefineVar("x2",&x2); 
-	fct.DefineVar("x3",&x3);
-
-	try
-	{
-		fct.Eval();
-		fct.ClearVar();
-	}
-	catch(mu::ParserError& e)
-	{
-		throw UbException(UB_EXARGS,"function: "+e.GetExpr() + (std::string)"error: "+e.GetMsg()
-			+(std::string)", only x1,x2,x3 are allowed as variables" );
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseInitDistributionsBlockVisitor::setNu( real nu )
-{
-	this->nu = nu;
-}
-
diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.h b/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.h
deleted file mode 100644
index 6077a1294582ea423dd3c5fcb446dd841e65491a..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.h
+++ /dev/null
@@ -1,100 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseInitDistributionsBlockVisitor.h
-//! \ingroup Visitors
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#ifndef MultiphaseInitDistributionsBlockVisitor_H
-#define MultiphaseInitDistributionsBlockVisitor_H
-
-#include "Block3DVisitor.h"
-#include "D3Q27System.h"
-#include "Block3D.h"
-
-#include <muParser.h>
-
-
-
-class MultiphaseInitDistributionsBlockVisitor : public Block3DVisitor
-{
-public:
-	typedef std::numeric_limits<real> D3Q27RealLim;
-
-public:
-	MultiphaseInitDistributionsBlockVisitor();
-	//D3Q27ETInitDistributionsBlockVisitor(LBMReal rho, LBMReal vx1=0.0, LBMReal vx2=0.0, LBMReal vx3=0.0);
-	//! Constructor
-	//! \param nu - viscosity
-	//! \param rho - density
-	//! \param vx1 - velocity in x
-	//! \param vx2 - velocity in y
-	//! \param vx3 - velocity in z
-	MultiphaseInitDistributionsBlockVisitor( real densityRatio, real vx1=0.0, real vx2=0.0, real vx3=0.0, real rho=0.0);
-	//////////////////////////////////////////////////////////////////////////
-	//automatic vars are: x1,x2, x3
-	//ussage example: setVx1("x1*0.01+x2*0.003")
-	//////////////////////////////////////////////////////////////////////////
-	void setVx1( const mu::Parser& parser);
-	void setVx2( const mu::Parser& parser);
-	void setVx3( const mu::Parser& parser);
-	void setRho( const mu::Parser& parser);
-	void setPhi( const mu::Parser& parser);
-
-	void setVx1( const std::string& muParserString);
-	void setVx2( const std::string& muParserString);
-	void setVx3( const std::string& muParserString);
-	void setRho( const std::string& muParserString);
-	void setPhi( const std::string& muParserString);
-
-	//////////////////////////////////////////////////////////////////////////
-	void setVx1( real vx1 );
-	void setVx2( real vx2 );
-	void setVx3( real vx3 );
-	void setRho( real rho );
-	void setPhi( real rho );
-	void setNu( real nu );
-
-	void visit(SPtr<Grid3D> grid, SPtr<Block3D> block);
-
-protected:
-	void checkFunction(mu::Parser fct);
-
-private:
-	mu::Parser muVx1;
-	mu::Parser muVx2;
-	mu::Parser muVx3;
-	mu::Parser muRho;
-	mu::Parser muPhi;
-
-	real nu;
-	real densityRatio;
-};
-
-#endif //D3Q27INITDISTRIBUTIONSPATCHVISITOR_H
diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.cpp
deleted file mode 100644
index 71e1aa1f7b25ba996d9b812f24e8958fa2f56b55..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-#include "MultiphaseSetKernelBlockVisitor.h"
-#include "D3Q27System.h"
-#include "LBMSystem.h"
-#include "Block3D.h"
-#include "Grid3D.h"
-
-//SetKernelBlockVisitor::SetKernelBlockVisitor(LBMKernel3DPtr kernel, LBMReal nue) : 
-//                        Block3DVisitor(0, D3Q27System::MAXLEVEL), kernel(kernel), nue(nue)
-//{
-//
-//}
-//////////////////////////////////////////////////////////////////////////
-//SetKernelBlockVisitor::SetKernelBlockVisitor( LBMKernel3DPtr kernel, LBMReal nue, double availMem, double needMem ) : 
-//                                              Block3DVisitor(0, D3Q27System::MAXLEVEL), kernel(kernel), nue(nue)
-//{
-//   if (needMem > availMem)
-//   {
-//      throw UbException(UB_EXARGS,"SetKernelBlockVisitor: Not enough memory!!!");
-//   }
-//}
-//////////////////////////////////////////////////////////////////////////
-MultiphaseSetKernelBlockVisitor::MultiphaseSetKernelBlockVisitor(SPtr<LBMKernel> kernel, real nuL, real nuG, real availMem, real needMem, MultiphaseSetKernelBlockVisitor::Action action /*= SetKernelBlockVisitor::New*/) :
-	Block3DVisitor(0, D3Q27System::MAXLEVEL), kernel(kernel), nuL(nuL), nuG(nuG), action(action), dataSetFlag(true)
-{
-	if (needMem > availMem)
-	{
-		throw UbException(UB_EXARGS, "SetKernelBlockVisitor: Not enough memory!!!");
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseSetKernelBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block)
-{
-	if(kernel && (block->getRank() == grid->getRank()))
-	{
-		real collFactorL = LBMSystem::calcCollisionFactor(nuL, block->getLevel());
-		real collFactorG = LBMSystem::calcCollisionFactor(nuG, block->getLevel());
-		kernel->setCollisionFactorMultiphase(collFactorL, collFactorG);
-
-		kernel->setIndex(block->getX1(), block->getX2(), block->getX3());
-		kernel->setDeltaT(LBMSystem::getDeltaT(block->getLevel()));
-		kernel->setBlock(block);
-        UbTupleInt3 blockNX = grid->getBlockNX();
-        kernel->setNX(std::array<int, 3>{ { val<1>(blockNX), val<2>(blockNX), val<3>(blockNX) } });
-        SPtr<LBMKernel> newKernel = kernel->clone();
-
-		switch (action)
-		{
-		case MultiphaseSetKernelBlockVisitor::NewKernel:
-			block->setKernel(newKernel);
-			break;
-		case MultiphaseSetKernelBlockVisitor::ChangeKernel:
-			{
-                SPtr<DataSet3D> dataSet = block->getKernel()->getDataSet();
-				if (!dataSet)
-				{
-					UB_THROW(UbException(UB_EXARGS, "It is not possible to change a DataSet in kernel! Old DataSet is not exist!"));
-				}
-
-				newKernel->setDataSet(dataSet);
-
-				SPtr<BCSet> bcProc = block->getKernel()->getBCSet();
-				if (!bcProc)
-				{
-					UB_THROW(UbException(UB_EXARGS, "It is not possible to change a BCSet in kernel! Old BCSet is not exist!"));
-				}
-				newKernel->setBCSet(bcProc);
-				block->setKernel(newKernel);
-			}
-			break;
-
-		case MultiphaseSetKernelBlockVisitor::ChangeKernelWithData:
-			{
-				SPtr<BCSet> bcProc = block->getKernel()->getBCSet();
-				if (!bcProc)
-				{
-					UB_THROW(UbException(UB_EXARGS, "It is not possible to change a BCSet in kernel! Old BCSet is not exist!"));
-				}
-				newKernel->setBCSet(bcProc);
-				block->setKernel(newKernel);
-			}
-			break;
-        case MultiphaseSetKernelBlockVisitor::AddKernel: 
-			{
-                if (!block->getKernel()) 
-				{
-                    block->setKernel(newKernel);
-                } 
-				//else
-    //                std::cout << "block: " << block->getX1() << "," << block->getX2() << ","<< block->getX3() << std::endl;
-			} 
-			break;
-		}
-
-	}
-}
-
-void MultiphaseSetKernelBlockVisitor::setNoDataSetFlag(bool flag)
-{
-	dataSetFlag = flag;
-}
-
diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.h b/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.h
deleted file mode 100644
index cac0b61c8eff491e79129ce2111d2590fb6c1e96..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.h
+++ /dev/null
@@ -1,62 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseSetKernelBlockVisitor.cpp
-//! \ingroup Visitors
-//! \author Hesameddin Safari
-//=======================================================================================
-#ifndef MultiphaseSetKernelBlockVisitor_h
-#define MultiphaseSetKernelBlockVisitor_h
-
-#include "Block3DVisitor.h"
-#include "LBMKernel.h"
-
-
-class MultiphaseSetKernelBlockVisitor : public Block3DVisitor
-{
-public:
-	enum Action { NewKernel, ChangeKernel, ChangeKernelWithData, AddKernel};
-public:
-	MultiphaseSetKernelBlockVisitor(SPtr<LBMKernel> kernel, real nuL, real nuG, real availMem, real needMem, 
-		MultiphaseSetKernelBlockVisitor::Action action = MultiphaseSetKernelBlockVisitor::NewKernel);
-
-	virtual ~MultiphaseSetKernelBlockVisitor() {}
-
-	virtual void visit(SPtr<Grid3D> grid, SPtr<Block3D> block);
-
-	void setNoDataSetFlag(bool flag);
-
-private:
-	SPtr<LBMKernel> kernel;
-	real nuL;
-	real nuG;
-	Action action;
-	bool dataSetFlag;
-};
-
-#endif
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp
deleted file mode 100644
index a51bdc0234734282d3c9504fd2d52d7b11355414..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp
+++ /dev/null
@@ -1,380 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp
-//! \ingroup Visitors
-//! \author Hesameddin Safari
-//=======================================================================================
-
-#include "MultiphaseVelocityFormInitDistributionsBlockVisitor.h"
-#include "BCArray3D.h"
-#include "BCSet.h"
-#include "Block3D.h"
-#include "DataSet3D.h"
-#include "EsoTwist3D.h"
-#include "Grid3D.h"
-#include "D3Q27System.h"
-#include "LBMKernel.h"
-
-MultiphaseVelocityFormInitDistributionsBlockVisitor::MultiphaseVelocityFormInitDistributionsBlockVisitor() 
-	: Block3DVisitor(0, D3Q27System::MAXLEVEL)
-{
-	this->setVx1(0.0);
-	this->setVx2(0.0);
-	this->setVx3(0.0);
-	this->setRho(0.0);
-    this->setPhi(0.0);
-	this->setPressure(0.0);
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx1( const mu::Parser& parser)  
-{ 
-	this->checkFunction(parser); 
-	this->muVx1 = parser;  
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx2( const mu::Parser& parser)
-{ 
-	this->checkFunction(parser); 
-	this->muVx2 = parser;  
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx3( const mu::Parser& parser)  
-{ 
-	this->checkFunction(parser); 
-	this->muVx3 = parser;  
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setRho( const mu::Parser& parser)  
-{ 
-	this->checkFunction(parser); 
-	this->muRho = parser;  
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPhi( const mu::Parser& parser)  
-{ 
-	this->checkFunction(parser); 
-	this->muPhi = parser;  
-}
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPressure(const mu::Parser& parser)
-{
-	this->checkFunction(parser);
-	this->muPressure = parser;
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx1( const std::string& muParserString)  
-{ 
-	this->muVx1.SetExpr(muParserString); 
-	this->checkFunction(muVx1); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx2( const std::string& muParserString) 
-{ 
-	this->muVx2.SetExpr(muParserString); 
-	this->checkFunction(muVx2); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx3( const std::string& muParserString)  
-{ 
-	this->muVx3.SetExpr(muParserString); 
-	this->checkFunction(muVx3); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setRho( const std::string& muParserString)  
-{ 
-	this->muRho.SetExpr(muParserString); 
-	this->checkFunction(muRho); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPhi( const std::string& muParserString)  
-{ 
-	this->muPhi.SetExpr(muParserString); 
-	this->checkFunction(muPhi); 
-}
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPressure(const std::string& muParserString)
-{
-	this->muPressure.SetExpr(muParserString);
-	this->checkFunction(muPressure);
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx1( real vx1 ) 
-{ 
-	this->muVx1.SetExpr( UbSystem::toString(vx1,D3Q27RealLim::digits10) );  
-	this->checkFunction(muVx1); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx2( real vx2 ) 
-{ 
-	this->muVx2.SetExpr( UbSystem::toString(vx2,D3Q27RealLim::digits10) );  
-	this->checkFunction(muVx2); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx3( real vx3 ) 
-{ 
-	this->muVx3.SetExpr( UbSystem::toString(vx3,D3Q27RealLim::digits10) );  
-	this->checkFunction(muVx3); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setRho( real rho ) 
-{ 
-	this->muRho.SetExpr( UbSystem::toString(rho,D3Q27RealLim::digits10) );  
-	this->checkFunction(muRho); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPhi( real phi ) 
-{ 
-	this->muPhi.SetExpr( UbSystem::toString(phi,D3Q27RealLim::digits10) );  
-	this->checkFunction(muPhi); 
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D> block) 
-{
-	using namespace D3Q27System;
-	using namespace vf::lbm::dir;
-
-	if(!block) UB_THROW( UbException(UB_EXARGS,"block is not exist") );
-
-	//define vars for functions
-	mu::value_type x1,x2,x3;
-	this->muVx1.DefineVar("x1",&x1); this->muVx1.DefineVar("x2",&x2); this->muVx1.DefineVar("x3",&x3);
-	this->muVx2.DefineVar("x1",&x1); this->muVx2.DefineVar("x2",&x2); this->muVx2.DefineVar("x3",&x3);
-	this->muVx3.DefineVar("x1",&x1); this->muVx3.DefineVar("x2",&x2); this->muVx3.DefineVar("x3",&x3);
-	this->muRho.DefineVar("x1",&x1); this->muRho.DefineVar("x2",&x2); this->muRho.DefineVar("x3",&x3);
-	this->muPhi.DefineVar("x1",&x1); this->muPhi.DefineVar("x2",&x2); this->muPhi.DefineVar("x3",&x3);
-	this->muPressure.DefineVar("x1", &x1); this->muPressure.DefineVar("x2", &x2); this->muPressure.DefineVar("x3", &x3);
-
-	
-
-	int gridRank = grid->getRank();
-	int blockRank = block->getRank();
-
-	if (blockRank == gridRank && block->isActive())
-	{
-        SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel());
-		if (!kernel)
-			throw UbException(UB_EXARGS, "The LBM kernel isn't exist in block: "+block->toString());
-
-		SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray();
-        SPtr<EsoTwist3D> distributionsF = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getFdistributions()); 
-		SPtr<EsoTwist3D> distributionsH = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getHdistributions());
-        SPtr<EsoTwist3D> distributionsH2 = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getH2distributions());
-		SPtr<PhaseFieldArray3D> pressure = dynamicPointerCast<PhaseFieldArray3D>(kernel->getDataSet()->getPressureField());
-
-
-		//LBMReal phiL = kernel->getPhiL();
-		//LBMReal phiH = kernel->getPhiH();
-
-		real f[D3Q27System::ENDF+1];
-
-		for(int ix3=0; ix3<(int)bcArray->getNX3(); ix3++)
-            for (int ix2 = 0; ix2 < (int)bcArray->getNX2(); ix2++)
-                for (int ix1 = 0; ix1 < (int)bcArray->getNX1(); ix1++)
-				{
-					Vector3D coords = grid->getNodeCoordinates(block, ix1, ix2, ix3);
-                    x1              = coords[0];
-                    x2              = coords[1];
-                    x3              = coords[2];
-
-					real vx1 = 0, vx2 = 0, vx3 = 0, p1 = 0, phi = 0,pres=0;
-					//p1  = 0.0;
-					p1 = muRho.Eval();
-					vx1 = muVx1.Eval();
-					vx2 = muVx2.Eval();
-					vx3 = muVx3.Eval();
-					phi = muPhi.Eval();
-					pres = muPressure.Eval();
-                    if (pressure) 
-						(*pressure)(ix1, ix2, ix3) = pres;
-
-					
-					//rho = phi*1.0 + (1.0-phi)/densityRatio;
-					//LBMReal rhoH = 1.0;
-					//LBMReal rhoL = 1.0/densityRatio;
-					//LBMReal rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL);
-
-			
-					real feq[27];
-					real geq[27];
-
-					//calcFeqsFct(feq,rho,vx1,vx2,vx3);
-					real vx1Sq = vx1*vx1;
-					real vx2Sq = vx2*vx2;
-					real vx3Sq = vx3*vx3;
-					for (int dir = STARTF; dir <= ENDF; dir++)
-					{
-						real velProd = DX1[dir]*vx1 + DX2[dir]*vx2 + DX3[dir]*vx3;
-						real velSq1 = velProd*velProd;
-						real gamma = WEIGTH[dir]*(3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq));
-
-						//feq[dir] = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq));
-						feq[dir] =  WEIGTH[dir] * (1 + 3 * velProd + 4.5 * velSq1 - 1.5 * (vx1Sq + vx2Sq + vx3Sq));
-						//geq[dir] = p1*WEIGTH1[dir] + gamma;
-						//geq[dir] = p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho;
-						geq[dir] = p1 * WEIGTH[dir] / (vf::basics::constant::c1o3) + gamma ;
-					}
-
-					f[d000] = geq[d000];
-					f[dP00] = geq[dP00];
-					f[dM00] = geq[dM00];
-					f[d0P0] = geq[d0P0];
-					f[d0M0] = geq[d0M0];
-					f[d00P] = geq[d00P];
-					f[d00M] = geq[d00M];
-					f[dPP0] = geq[dPP0];
-					f[dMM0] = geq[dMM0];
-					f[dPM0] = geq[dPM0];
-					f[dMP0] = geq[dMP0];
-					f[dP0P] = geq[dP0P];
-					f[dM0M] = geq[dM0M];
-					f[dP0M] = geq[dP0M];
-					f[dM0P] = geq[dM0P];
-					f[d0PP] = geq[d0PP];
-					f[d0MM] = geq[d0MM];
-					f[d0PM] = geq[d0PM];
-					f[d0MP] = geq[d0MP];
-					f[dPPP] = geq[dPPP];
-					f[dMPP] = geq[dMPP];
-					f[dPMP] = geq[dPMP];
-					f[dMMP] = geq[dMMP];
-					f[dPPM] = geq[dPPM];
-					f[dMPM] = geq[dMPM];
-					f[dPMM] = geq[dPMM];
-					f[dMMM] = geq[dMMM];
-					
-
-					distributionsF->setPostCollisionDistribution(f, ix1, ix2, ix3);
-					distributionsF->setPreCollisionDistribution(f, ix1, ix2, ix3);
-
-					f[d000] = phi * feq[d000];// / rho;
-					f[dP00] = phi * feq[dP00];// / rho;
-					f[dM00] = phi * feq[dM00];// / rho;
-					f[d0P0] = phi * feq[d0P0];// / rho;
-					f[d0M0] = phi * feq[d0M0];// / rho;
-					f[d00P] = phi * feq[d00P];// / rho;
-					f[d00M] = phi * feq[d00M];// / rho;
-					f[dPP0] = phi * feq[dPP0];// / rho;
-					f[dMM0] = phi * feq[dMM0];// / rho;
-					f[dPM0] = phi * feq[dPM0];// / rho;
-					f[dMP0] = phi * feq[dMP0];// / rho;
-					f[dP0P] = phi * feq[dP0P];// / rho;
-					f[dM0M] = phi * feq[dM0M];// / rho;
-					f[dP0M] = phi * feq[dP0M];// / rho;
-					f[dM0P] = phi * feq[dM0P];// / rho;
-					f[d0PP] = phi * feq[d0PP];// / rho;
-					f[d0MM] = phi * feq[d0MM];// / rho;
-					f[d0PM] = phi * feq[d0PM];// / rho;
-					f[d0MP] = phi * feq[d0MP];// / rho;
-					f[dPPP] = phi * feq[dPPP];// / rho;
-					f[dMPP] = phi * feq[dMPP];// / rho;
-					f[dPMP] = phi * feq[dPMP];// / rho;
-					f[dMMP] = phi * feq[dMMP];// / rho;
-					f[dPPM] = phi * feq[dPPM];// / rho;
-					f[dMPM] = phi * feq[dMPM];// / rho;
-					f[dPMM] = phi * feq[dPMM];// / rho;
-					f[dMMM] = phi * feq[dMMM];// / rho;
-					
-
-					distributionsH->setPostCollisionDistribution(f, ix1, ix2, ix3);
-					distributionsH->setPreCollisionDistribution(f, ix1, ix2, ix3);
-
-					if (distributionsH2) {
-
-						f[d000] = 0;//(1. - phi) * feq[d000]; //  / rho;
-						f[dP00] = 0;//(1.-phi) * feq[dP00]   ;// / rho;
-						f[dM00] = 0;//(1.-phi) * feq[dM00]   ;// / rho;
-						f[d0P0] = 0;//(1.-phi) * feq[d0P0]   ;// / rho;
-						f[d0M0] = 0;//(1.-phi) * feq[d0M0]   ;// / rho;
-						f[d00P] = 0;//(1.-phi) * feq[d00P]   ;// / rho;
-						f[d00M] = 0;//(1.-phi) * feq[d00M]   ;// / rho;
-						f[dPP0] = 0;//(1.-phi) * feq[dPP0]  ;// / rho;
-						f[dMM0] = 0;//(1.-phi) * feq[dMM0]  ;// / rho;
-						f[dPM0] = 0;//(1.-phi) * feq[dPM0]  ;// / rho;
-						f[dMP0] = 0;//(1.-phi) * feq[dMP0]  ;// / rho;
-						f[dP0P] = 0;//(1.-phi) * feq[dP0P]  ;// / rho;
-						f[dM0M] = 0;//(1.-phi) * feq[dM0M]  ;// / rho;
-						f[dP0M] = 0;//(1.-phi) * feq[dP0M]  ;// / rho;
-						f[dM0P] = 0;//(1.-phi) * feq[dM0P]  ;// / rho;
-						f[d0PP] = 0;//(1.-phi) * feq[d0PP]  ;// / rho;
-						f[d0MM] = 0;//(1.-phi) * feq[d0MM]  ;// / rho;
-						f[d0PM] = 0;//(1.-phi) * feq[d0PM]  ;// / rho;
-						f[d0MP] = 0;//(1.-phi) * feq[d0MP]  ;// / rho;
-						f[dPPP] = 0;//(1.-phi) * feq[dPPP] ;// / rho;
-						f[dMPP] = 0;//(1.-phi) * feq[dMPP] ;// / rho;
-						f[dPMP] = 0;//(1.-phi) * feq[dPMP] ;// / rho;
-						f[dMMP] = 0;//(1.-phi) * feq[dMMP] ;// / rho;
-						f[dPPM] = 0;//(1.-phi) * feq[dPPM] ;// / rho;
-						f[dMPM] = 0;//(1.-phi) * feq[dMPM] ;// / rho;
-						f[dPMM] = 0;//(1.-phi) * feq[dPMM] ;// / rho;
-						f[dMMM] = 0;//(1.-phi) * feq[dMMM] ;// / rho;
-						
-
-                        distributionsH2->setPostCollisionDistribution(f, ix1, ix2, ix3);
-                        distributionsH2->setPreCollisionDistribution(f, ix1, ix2, ix3);                    
-					}
-				}
-	}
-
-	//variablen der functions loeschen, da die verwiesenen Objecte nach dem verlassen des scopes ungueltig sind!
-	this->muVx1.ClearVar();
-	this->muVx2.ClearVar();
-	this->muVx3.ClearVar();
-	this->muRho.ClearVar();
-
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::checkFunction(mu::Parser fct)
-{
-	real x1=1.0,x2=1.0,x3=1.0;
-	fct.DefineVar("x1",&x1); 
-	fct.DefineVar("x2",&x2); 
-	fct.DefineVar("x3",&x3);
-
-	try
-	{
-		fct.Eval();
-		fct.ClearVar();
-	}
-	catch(mu::ParserError& e)
-	{
-		throw UbException(UB_EXARGS,"function: "+e.GetExpr() + (std::string)"error: "+e.GetMsg()
-			+(std::string)", only x1,x2,x3 are allowed as variables" );
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setNu( real nu )
-{
-	this->nu = nu;
-}
-
-void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPressure(real pres)
-{
-	this->muPressure.SetExpr(UbSystem::toString(pres, D3Q27RealLim::digits10));
-	this->checkFunction(muPressure);
-
-}
-
diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h b/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h
deleted file mode 100644
index 92ab5eff9af4559bf22893c9a8506362604606c3..0000000000000000000000000000000000000000
--- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h
+++ /dev/null
@@ -1,102 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file MultiphaseVelocityFormInitDistributionsBlockVisitor.h
-//! \ingroup Visitors
-//! \author Hesameddin Safari, Martin Geier, Konstantin Kutscher
-//=======================================================================================
-
-#ifndef MultiphaseVelocityFormInitDistributionsBlockVisitor_H
-#define MultiphaseVelocityFormInitDistributionsBlockVisitor_H
-
-#include "Block3DVisitor.h"
-#include "D3Q27System.h"
-#include "Block3D.h"
-
-#include <muParser.h>
-
-
-
-class MultiphaseVelocityFormInitDistributionsBlockVisitor : public Block3DVisitor
-{
-public:
-	typedef std::numeric_limits<real> D3Q27RealLim;
-
-public:
-	MultiphaseVelocityFormInitDistributionsBlockVisitor();
-	//D3Q27ETInitDistributionsBlockVisitor(LBMReal rho, LBMReal vx1=0.0, LBMReal vx2=0.0, LBMReal vx3=0.0);
-	//! Constructor
-	//! \param nu - viscosity
-	//! \param rho - density
-	//! \param vx1 - velocity in x
-	//! \param vx2 - velocity in y
-	//! \param vx3 - velocity in z
-	//////////////////////////////////////////////////////////////////////////
-	//automatic vars are: x1,x2, x3
-	//ussage example: setVx1("x1*0.01+x2*0.003")
-	//////////////////////////////////////////////////////////////////////////
-	void setVx1( const mu::Parser& parser);
-	void setVx2( const mu::Parser& parser);
-	void setVx3( const mu::Parser& parser);
-	void setRho( const mu::Parser& parser);
-	void setPhi( const mu::Parser& parser);
-	void setPressure(const mu::Parser& parser);
-
-	void setVx1( const std::string& muParserString);
-	void setVx2( const std::string& muParserString);
-	void setVx3( const std::string& muParserString);
-	void setRho( const std::string& muParserString);
-	void setPhi( const std::string& muParserString);
-	void setPressure(const std::string& muParserString);
-
-	//////////////////////////////////////////////////////////////////////////
-	void setVx1( real vx1 );
-	void setVx2( real vx2 );
-	void setVx3( real vx3 );
-	void setRho( real rho );
-	void setPhi( real rho );
-	void setNu( real nu );
-	void setPressure(real pres);
-
-	void visit(SPtr<Grid3D> grid, SPtr<Block3D> block);
-
-protected:
-	void checkFunction(mu::Parser fct);
-
-private:
-	mu::Parser muVx1;
-	mu::Parser muVx2;
-	mu::Parser muVx3;
-	mu::Parser muRho;
-	mu::Parser muPhi;
-	mu::Parser muPressure;
-
-	real nu;
-};
-
-#endif //D3Q27INITDISTRIBUTIONSPATCHVISITOR_H
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h
deleted file mode 100644
index 24c96da39c87a156574327fb92ad758d2025e639..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h
+++ /dev/null
@@ -1,60 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyBinghamModelNoSlipBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef RheologyBinghamModelNoSlipBCStrategy_h__
-#define RheologyBinghamModelNoSlipBCStrategy_h__
-
-#include "RheologyNoSlipBCStrategy.h"
-#include "cpu/NonNewtonianFluids/LBM/Rheology.h"
-
-class RheologyBinghamModelNoSlipBCStrategy : public RheologyNoSlipBCStrategy
-{
-public:
-   RheologyBinghamModelNoSlipBCStrategy()
-   {
-      BCStrategy::type = BCStrategy::RheologyBinghamModelNoSlipBCStrategy;
-      BCStrategy::preCollision = true;
-   }
-   ~RheologyBinghamModelNoSlipBCStrategy() {}
-   SPtr<BCStrategy> clone() override
-   {
-      SPtr<BCStrategy> bc(new RheologyBinghamModelNoSlipBCStrategy());
-      return bc;
-   }
-protected:
-   real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override 
-   { 
-      return Rheology::getBinghamCollFactor(omegaInf, shearRate, drho);
-   }
-};
-#endif // BinghamModelNoSlipBCStrategy_h__
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h
deleted file mode 100644
index bbff469c0ebef26eaf57859d56e4bd27c39b358a..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h
+++ /dev/null
@@ -1,60 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyBinghamModelVelocityBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef BinghamModelVelocityBCStrategy_h__
-#define BinghamModelVelocityBCStrategy_h__
-
-#include "RheologyVelocityBCStrategy.h"
-#include "cpu/NonNewtonianFluids/LBM/Rheology.h"
-
-class RheologyBinghamModelVelocityBCStrategy : public RheologyVelocityBCStrategy
-{
-public:
-   RheologyBinghamModelVelocityBCStrategy()
-   {
-      BCStrategy::type = BCStrategy::RheologyBinghamModelVelocityBCStrategy;
-      BCStrategy::preCollision = true;
-   }
-   ~RheologyBinghamModelVelocityBCStrategy() {}
-   SPtr<BCStrategy> clone() override
-   {
-      SPtr<BCStrategy> bc(new RheologyBinghamModelVelocityBCStrategy());
-      return bc;
-   }
-protected:
-   real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override 
-   { 
-      return Rheology::getBinghamCollFactor(omegaInf, shearRate, drho);
-   }
-};
-#endif // BinghamModelVelocityBCStrategy_h__
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h
deleted file mode 100644
index c29c6e9cebc3092358369bc16c5bfe5b65215ea9..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyHerschelBulkleyModelNoSlipBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef RheologyHerschelBulkleyModelNoSlipBCStrategy_h__
-#define RheologyHerschelBulkleyModelNoSlipBCStrategy_h__
-
-#include "RheologyNoSlipBCStrategy.h"
-#include "cpu/NonNewtonianFluids/LBM/Rheology.h"
-
-class RheologyHerschelBulkleyModelNoSlipBCStrategy : public RheologyNoSlipBCStrategy
-{
-public:
-   RheologyHerschelBulkleyModelNoSlipBCStrategy() 
-   {
-      BCStrategy::type = BCStrategy::RheologyHerschelBulkleyModelNoSlipBCStrategy;
-      BCStrategy::preCollision = true;
-   }
-   ~RheologyHerschelBulkleyModelNoSlipBCStrategy() {}
-   SPtr<BCStrategy> clone() override
-   {
-      SPtr<BCStrategy> bc(new RheologyHerschelBulkleyModelNoSlipBCStrategy());
-      return bc;
-   }
-protected:
-   real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override
-   {
-      return Rheology::getHerschelBulkleyCollFactor(omegaInf, shearRate, drho);
-   }
-};
-#endif // RheologyHerschelBulkleyModelNoSlipBCStrategy_h__
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp
deleted file mode 100644
index f66ec5059ddd3ad0110ac263ffdff2370cc944bc..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyNoSlipBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#include "RheologyNoSlipBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BoundaryConditions.h"
-
-//////////////////////////////////////////////////////////////////////////
-void RheologyNoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-   this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyNoSlipBCStrategy::applyBC()
-{
-   real f[D3Q27System::ENDF + 1];
-   real feq[D3Q27System::ENDF + 1];
-   distributions->getPreCollisionDistribution(f, x1, x2, x3);
-   real rho, vx1, vx2, vx3;
-   calcMacrosFct(f, rho, vx1, vx2, vx3);
-   calcFeqFct(feq, rho, vx1, vx2, vx3);
-
-   real shearRate = D3Q27System::getShearRate(f, collFactor);
-   real collFactorF = getRheologyCollFactor(collFactor, shearRate, rho);
-
-   for (int fDir = D3Q27System::FSTARTDIR; fDir <= D3Q27System::FENDDIR; fDir++)
-   {
-      if (bcPtr->hasNoSlipBoundaryFlag(fDir))
-      {
-         //quadratic bounce back
-         const int invDir = D3Q27System::INVDIR[fDir];
-         real q = bcPtr->getQ(invDir);
-         real fReturn =(f[invDir] + q * f[fDir] + q * collFactorF * (feq[invDir] - f[invDir] + feq[fDir] - f[fDir])) / (vf::basics::constant::c1o1 + q);
-         distributions->setPreCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], invDir);
-      }
-   }
-}
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h
deleted file mode 100644
index 611d87bcd3b6e275869b6ec430b7a1f349c0aa3e..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h
+++ /dev/null
@@ -1,52 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyNoSlipBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef RheologyNoSlipBCStrategy_h__
-#define RheologyNoSlipBCStrategy_h__
-
-#include "BCStrategy.h"
-#include <PointerDefinitions.h>
-
-class DistributionArray3D;
-
-class RheologyNoSlipBCStrategy : public BCStrategy
-{
-public:
-   RheologyNoSlipBCStrategy() = default;
-   ~RheologyNoSlipBCStrategy() = default;
-   virtual SPtr<BCStrategy> clone() override { UB_THROW(UbException("real clone() - belongs in the derived class")); }
-   void addDistributions(SPtr<DistributionArray3D> distributions) override;
-   void applyBC() override;
-protected:
-   virtual real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const = 0; // { UB_THROW(UbException("real getRheologyCollFactor() - belongs in the derived class")); }
-};
-#endif // RheologyNoSlipBCStrategy_h__
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h
deleted file mode 100644
index f867ab1dc2df84bb8498728295a1f6d7cf734d83..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyPowellEyringModelNoSlipBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef RheologyPowellEyringModelNoSlipBCStrategy_h__
-#define RheologyPowellEyringModelNoSlipBCStrategy_h__
-
-#include "RheologyNoSlipBCStrategy.h"
-#include "cpu/NonNewtonianFluids/LBM/Rheology.h"
-
-class RheologyPowellEyringModelNoSlipBCStrategy : public RheologyNoSlipBCStrategy
-{
-public:
-   RheologyPowellEyringModelNoSlipBCStrategy() 
-   {
-      BCStrategy::type = BCStrategy::RheologyPowellEyringModelNoSlipBCStrategy;
-      BCStrategy::preCollision = true;
-   }
-   ~RheologyPowellEyringModelNoSlipBCStrategy() {}
-   SPtr<BCStrategy> clone() override
-   {
-      SPtr<BCStrategy> bc(new RheologyPowellEyringModelNoSlipBCStrategy());
-      return bc;
-   }
-protected:
-   real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override
-   {
-      return Rheology::getHerschelBulkleyCollFactor(omegaInf, shearRate, drho);
-   }
-};
-#endif // RheologyPowellEyringModelNoSlipBCStrategy_h__
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp
deleted file mode 100644
index 24e1f4c14c9d7ac0339ab4214cf7a325b1319f02..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyVelocityBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#include "RheologyVelocityBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BoundaryConditions.h"
-
-RheologyVelocityBCStrategy::RheologyVelocityBCStrategy()
-{
-   //BCStrategy::type = BCStrategy::RheologyVelocityBCStrategy;
-   //BCStrategy::preCollision = false;
-}
-//////////////////////////////////////////////////////////////////////////
-RheologyVelocityBCStrategy::~RheologyVelocityBCStrategy()
-{
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyVelocityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-   this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyVelocityBCStrategy::applyBC()
-{
-    using namespace vf::basics::constant;
-
-    real f[D3Q27System::ENDF+1];
-    real feq[D3Q27System::ENDF+1];
-    distributions->getPreCollisionDistribution(f, x1, x2, x3);
-    real rho, vx1, vx2, vx3, drho;
-    calcMacrosFct(f, drho, vx1, vx2, vx3);
-    calcFeqFct(feq, drho, vx1, vx2, vx3);
-
-    real shearRate = D3Q27System::getShearRate(f, collFactor);
-    // getShearRate(f, collFactor) takes pre collision state but is given post collision state. Requires rescaling
-    real collFactorF = getRheologyCollFactor(collFactor, shearRate, drho);
-
-
-    rho = 1.0+drho*compressibleFactor;
-
-    for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
-    {
-        if (bcPtr->hasVelocityBoundaryFlag(fdir))
-        {
-            const int invDir = D3Q27System::INVDIR[fdir];
-            real q = bcPtr->getQ(invDir);
-            real velocity = bcPtr->getBoundaryVelocity(invDir);
-            real fReturn = ((c1o1 - q) / (c1o1 + q)) * ((f[invDir])) + ((q * (f[invDir] + f[fdir] - collFactorF * (f[invDir] - feq[invDir] + f[fdir] - feq[fdir])) - velocity * rho) / (c1o1 + q));
-            distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-        }
-    }
-
-}
-
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.h
deleted file mode 100644
index 00c08230cf19fd73bfa56b7949239e62be72fbd4..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.h
+++ /dev/null
@@ -1,54 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyVelocityBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef RheologyVelocityBCStrategy_h__
-#define RheologyVelocityBCStrategy_h__
-
-#include "BCStrategy.h"
-#include <PointerDefinitions.h>
-
-class DistributionArray3D;
-
-class RheologyVelocityBCStrategy : public BCStrategy
-{
-public:
-   RheologyVelocityBCStrategy();
-   ~RheologyVelocityBCStrategy();
-   virtual SPtr<BCStrategy> clone() override { UB_THROW(UbException("real clone() - belongs in the derived class")); }
-   void addDistributions(SPtr<DistributionArray3D> distributions) override;
-   void applyBC() override;
-protected:
-   virtual real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const = 0; // { UB_THROW(UbException("real getRheologyCollFactor() - belongs in the derived class")); }
-};
-
-#endif // RheologyVelocityBCStrategy_h__
-
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp
deleted file mode 100644
index 9761d9d2b5a74892e82eac50f5ae6709cbbd4def..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ThixotropyDensityBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include "ThixotropyDensityBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BoundaryConditions.h"
-
-ThixotropyDensityBCStrategy::ThixotropyDensityBCStrategy()
-{
-	BCStrategy::type = BCStrategy::ThixotropyDensityBCStrategy;
-	BCStrategy::preCollision = false;
-	BCStrategy::thixotropy = true;
-	lambdaBC = 0.0;
-}
-//////////////////////////////////////////////////////////////////////////
-ThixotropyDensityBCStrategy::~ThixotropyDensityBCStrategy()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> ThixotropyDensityBCStrategy::clone()
-{
-	SPtr<BCStrategy> bc(new ThixotropyDensityBCStrategy());
-	dynamicPointerCast<ThixotropyDensityBCStrategy>(bc)->setLambdaBC(lambdaBC);
-	return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyDensityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-	this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-//void ThixotropyDensityBCStrategy::addDistributionsF(DistributionArray3DPtr distributions)
-//{
-//	this->distributionsf = distributions;
-//}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyDensityBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributions)
-{
-	this->distributionsH = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyDensityBCStrategy::applyBC()
-{
-	using namespace vf::lbm::dir;
-    using namespace D3Q27System;
-
-	real f[D3Q27System::ENDF + 1];
-	real feq[D3Q27System::ENDF + 1];
-	real h[D3Q27System::ENDF + 1];
-	real heq[D3Q27System::ENDF + 1];
-	distributions->getPostCollisionDistribution(f, x1, x2, x3);
-	distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
-	
-	real rho, vx1, vx2, vx3;
-	
-	calcMacrosFct(f, rho, vx1, vx2, vx3);
-	calcFeqFct(feq, rho, vx1, vx2, vx3);
-
-	real lambda = D3Q27System::getDensity(h);
-	D3Q27System::calcCompFeq(heq, lambda, vx1, vx2, vx3);
-
-
-	int nx1 = x1;
-	int nx2 = x2;
-	int nx3 = x3;
-
-	//flag points in direction of fluid
-	if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 -= 1; }
-	else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 += 1; }
-	else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 -= 1; }
-	else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 += 1; }
-	else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 -= 1; }
-	else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 += 1; }
-	else	 UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
-
-	real rhoBC = bcPtr->getBoundaryDensity();
-
-	for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++)
-	{
-		if (bcPtr->hasDensityBoundaryFlag(fdir))
-		{
-			real ftemp = calcFeqsForDirFct(fdir, rho, vx1, vx2, vx3);
-			ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3) + f[fdir] - ftemp;
-			distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
-
-			real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3);
-			htemp = D3Q27System::getCompFeqForDirection(fdir,lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp;
-			distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
-		}
-	}
-}
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h
deleted file mode 100644
index a40500fe5b9e5ca2136bba71e3723e75db33bd50..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ThixotropyDensityBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef ThixotropyDensityBCStrategy_h__
-#define ThixotropyDensityBCStrategy_h__
-
-#include "BCStrategy.h"
-
-
-class ThixotropyDensityBCStrategy : public BCStrategy
-{
-public:
-	ThixotropyDensityBCStrategy();
-	virtual ~ThixotropyDensityBCStrategy();
-	SPtr<BCStrategy> clone();
-	void addDistributions(SPtr<DistributionArray3D> distributions);
-	//void addDistributionsF(SPtr<DistributionArray3D> distributions);
-	void addDistributionsH(SPtr<DistributionArray3D> distributions);
-	void applyBC();
-	void setLambdaBC(real lambda) { this->lambdaBC = lambda; }
-	real getLambdaBC() { return this->lambdaBC; }
-protected:
-	SPtr<DistributionArray3D> distributionsH;
-private:
-	real lambdaBC;
-};
-#endif // ThixotropyDensityBCStrategy_h__
-
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp
deleted file mode 100644
index e143e0574268fc2f7ee76bb660c385469302a307..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ThixotropyNoSlipBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#include "ThixotropyNoSlipBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BoundaryConditions.h"
-
-ThixotropyNoSlipBCStrategy::ThixotropyNoSlipBCStrategy()
-{
-	BCStrategy::type = BCStrategy::ThixotropyNoSlipBCStrategy;
-	BCStrategy::preCollision = false;
-	BCStrategy::thixotropy = true;
-	
-}
-//////////////////////////////////////////////////////////////////////////
-ThixotropyNoSlipBCStrategy::~ThixotropyNoSlipBCStrategy()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> ThixotropyNoSlipBCStrategy::clone()
-{
-	SPtr<BCStrategy> bc(new ThixotropyNoSlipBCStrategy());
-	return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyNoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-	this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-//void ThixotropyNoSlipBCStrategy::addDistributionsF(SPtr<DistributionArray3D> distributions)
-//{
-//	this->distributionsf = distributions;
-//}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyNoSlipBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributions)
-{
-	this->distributionsH = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyNoSlipBCStrategy::applyBC()
-{
-	real f[D3Q27System::ENDF + 1];
-	real feq[D3Q27System::ENDF + 1];
-	real h[D3Q27System::ENDF + 1];
-	real heq[D3Q27System::ENDF + 1];
-	distributions->getPostCollisionDistribution(f, x1, x2, x3);
-	distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
-	real rho, vx1, vx2, vx3;//, concentration, fl1, fl2, fl3, m100;
-	calcMacrosFct(f, rho, vx1, vx2, vx3);
-	calcFeqFct(feq, rho, vx1, vx2, vx3);
-
-	//calcDiffusionMacrosFctPost(h, concentration, fl1, fl2, fl3, m100, collFactor);
-	real lambda = D3Q27System::getDensity(h);
-	D3Q27System::calcCompFeq(heq, lambda, 0., 0., 0.);
-
-	for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++)
-	{
-		if (bcPtr->hasNoSlipBoundaryFlag(fdir))
-		{
-			//quadratic bounce back
-			const int invDir = D3Q27System::INVDIR[fdir];
-			real q = bcPtr->getQ(invDir);
-			real fReturnf = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q))*((f[invDir] - feq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + feq[invDir]) + ((q / (vf::basics::constant::c1o1 + q))*(f[invDir] + f[fdir]));
-			real fReturnh = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q))*((h[invDir] - heq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + heq[invDir]) + ((q / (vf::basics::constant::c1o1 + q))*(h[invDir] + h[fdir]));
-
-			distributions->setPostCollisionDistributionForDirection(fReturnf, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
-			distributionsH->setPostCollisionDistributionForDirection(fReturnh, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
-
-		}
-	}
-}
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h
deleted file mode 100644
index edd8952333f9607429e78ea917edf360768743c7..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h
+++ /dev/null
@@ -1,54 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ThixotropyNoSlipBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef ThixotropyNoSlipBCStrategy_h__
-#define ThixotropyNoSlipBCStrategy_h__
-
-#include "BCStrategy.h"
-
-class ThixotropyNoSlipBCStrategy : public BCStrategy
-{
-public:
-	ThixotropyNoSlipBCStrategy();
-	virtual ~ThixotropyNoSlipBCStrategy();
-	SPtr<BCStrategy> clone();
-	void addDistributions(SPtr<DistributionArray3D> distributions);
-	//void addDistributionsF(DistributionArray3DPtr distributions);
-	void addDistributionsH(SPtr<DistributionArray3D> distributions);
-	void applyBC();
-protected:
-	SPtr<DistributionArray3D> distributionsH;
-private:
-
-};
-#endif // ThixotropyNoSlipBCStrategy_h__
-
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp
deleted file mode 100644
index 668ee0419d2169de588b69153a8e76c2bb7b9377..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp
+++ /dev/null
@@ -1,374 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ThixotropyNonReflectingOutflowBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#include "ThixotropyNonReflectingOutflowBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BoundaryConditions.h"
-
-ThixotropyNonReflectingOutflowBCStrategy::ThixotropyNonReflectingOutflowBCStrategy()
-{
-	BCStrategy::type = BCStrategy::ThixotropyNonReflectingOutflowBCStrategy;
-	BCStrategy::preCollision = true;
-	BCStrategy::thixotropy = true;
-}
-//////////////////////////////////////////////////////////////////////////
-ThixotropyNonReflectingOutflowBCStrategy::~ThixotropyNonReflectingOutflowBCStrategy()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> ThixotropyNonReflectingOutflowBCStrategy::clone()
-{
-	SPtr<BCStrategy> bc(new ThixotropyNonReflectingOutflowBCStrategy());
-	return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyNonReflectingOutflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-	this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-//void ThixotropyNonReflectingOutflowBCStrategy::addDistributionsF(DistributionArray3DPtr distributions)
-//{
-//	this->distributionsf = distributions;
-//}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyNonReflectingOutflowBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributions)
-{
-	this->distributionsH = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyNonReflectingOutflowBCStrategy::applyBC()
-{
-   using namespace vf::lbm::dir;
-   using namespace D3Q27System;
-   using namespace vf::basics::constant;
-
-   real f[ENDF + 1];
-   real ftemp[ENDF + 1];
-
-   int nx1 = x1;
-   int nx2 = x2;
-   int nx3 = x3;
-   int direction = -1;
-
-   //flag points in direction of fluid
-   if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 += 1; direction = dP00; }
-   else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 -= 1; direction = dM00; }
-   else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 += 1; direction = d0P0; }
-   else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 -= 1; direction = d0M0; }
-   else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 += 1; direction = d00P; }
-   else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 -= 1; direction = d00M; }
-   else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
-
-   distributions->getPreCollisionDistribution(f, x1, x2, x3);
-   distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3);
-
-   real rho, vx1, vx2, vx3;
-   calcMacrosFct(f, rho, vx1, vx2, vx3);
-
-   switch (direction)
-   {
-      case dP00:
-      f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00];
-      f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0];
-      f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0];
-      f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P];
-      f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M];
-      f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP];
-      f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP];
-      f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM];
-      f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM];
-
-      distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
-      distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
-      distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
-      distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
-      distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
-      distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-      distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-      distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-      distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-      break;
-   case dM00:
-      f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00];
-      f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0];
-      f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0];
-      f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P];
-      f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M];
-      f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP];
-      f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP];
-      f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM];
-      f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM];
-
-      distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
-      distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
-      distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
-      distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
-      distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
-      distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-      distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-      distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-      distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-      break;
-   case d0P0:
-      f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0];
-      f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0];
-      f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0];
-      f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP];
-      f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM];
-      f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP];
-      f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP];
-      f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM];
-      f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM];
-
-      distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
-      distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
-      distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
-      distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
-      distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
-      distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-      distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-      distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-      distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-      break;
-   case d0M0:
-      f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0];
-      f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0];
-      f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0];
-      f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP];
-      f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM];
-      f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP];
-      f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP];
-      f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM];
-      f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM];
-
-      distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
-      distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
-      distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
-      distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
-      distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
-      distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-      distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-      distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-      distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-      break;
-   case d00P:
-      f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P];
-      f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P];
-      f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P];
-      f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP];
-      f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP];
-      f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP];
-      f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP];
-      f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP];
-      f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP];
-
-      distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
-      distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
-      distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
-      distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
-      distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
-      distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-      distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-      distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-      distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-      break;
-   case d00M:
-      f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M];
-      f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M];
-      f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M];
-      f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM];
-      f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM];
-      f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM];
-      f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM];
-      f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM];
-      f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM];
-
-      distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
-      distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
-      distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
-      distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
-      distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
-      distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-      distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-      distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-      distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-      break;
-   default:
-      UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
-   }
-   real h[D3Q27System::ENDF + 1];
-   real htemp[ENDF + 1];
-
-   distributionsH->getPreCollisionDistribution(h, x1, x2, x3);
-   distributionsH->getPreCollisionDistribution(htemp, nx1, nx2, nx3);
-
-   vx1 = 0.0;
-   vx2 = 0.0;
-   vx3 = 0.0;
-
-   //LBMReal rho, vx1, vx2, vx3;
-   //calcMacrosFct(f, rho, vx1, vx2, vx3);
-
-   switch (direction)
-   {
-   case dP00:
-      h[dP00]  = htemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP00];
-      h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPP0];
-      h[dPM0] = htemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPM0];
-      h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0P];
-      h[dP0M] = htemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0M];
-      h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPP];
-      h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMP];
-      h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPM];
-      h[dPMM] = htemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMM];
-
-      distributionsH->setPreCollisionDistributionForDirection(h[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
-      distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
-      distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-      break;
-   case dM00:
-      h[dM00] = htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM00];
-      h[dMP0] = htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMP0];
-      h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMM0];
-      h[dM0P] = htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0P];
-      h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0M];
-      h[dMPP] = htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPP];
-      h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMP];
-      h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPM];
-      h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMM];
-
-      distributionsH->setPreCollisionDistributionForDirection(h[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
-      distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
-      distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-      break;
-   case d0P0:
-      h[d0P0] = htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0P0];
-      h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPP0];
-      h[dMP0] = htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMP0];
-      h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PP];
-      h[d0PM] = htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PM];
-      h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPP];
-      h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPP];
-      h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPM];
-      h[dMPM] = htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPM];
-
-      distributionsH->setPreCollisionDistributionForDirection(h[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0);
-      distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
-      distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-      break;
-   case d0M0:
-      h[d0M0] = htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0M0];
-      h[dPM0] = htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPM0];
-      h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMM0];
-      h[d0MP] = htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MP];
-      h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MM];
-      h[dPMP] = htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMP];
-      h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMP];
-      h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMM];
-      h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMM];
-
-      distributionsH->setPreCollisionDistributionForDirection(h[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0);
-      distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
-      distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-      break;
-   case d00P:
-      h[d00P] = htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d00P];
-      h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dP0P];
-      h[dM0P] = htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dM0P];
-      h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0PP];
-      h[d0MP] = htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0MP];
-      h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPPP];
-      h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMPP];
-      h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPMP];
-      h[dMMP] = htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMMP];
-
-      distributionsH->setPreCollisionDistributionForDirection(h[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M);
-      distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M);
-      distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M);
-      distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM);
-      distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM);
-      break;
-   case d00M:
-      h[d00M] = htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d00M];
-      h[dP0M] = htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dP0M];
-      h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dM0M];
-      h[d0PM] = htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0PM];
-      h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0MM];
-      h[dPPM] = htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPPM];
-      h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMPM];
-      h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPMM];
-      h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMMM];
-
-      distributionsH->setPreCollisionDistributionForDirection(h[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P);
-      distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P);
-      distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P);
-      distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP);
-      distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP);
-      distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP);
-      distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP);
-      break;
-   default:
-      UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
-   }
-}
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h
deleted file mode 100644
index 7ae90994a13ab1a0842a0abbad596d1762bd4927..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ThixotropyNonReflectingOutflowBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef ThixotropyNonReflectingOutflowBCStrategy_h__
-#define ThixotropyNonReflectingOutflowBCStrategy_h__
-
-#include "BCStrategy.h"
-
-
-class ThixotropyNonReflectingOutflowBCStrategy : public BCStrategy
-{
-public:
-	ThixotropyNonReflectingOutflowBCStrategy();
-	virtual ~ThixotropyNonReflectingOutflowBCStrategy();
-	SPtr<BCStrategy> clone();
-	void addDistributions(SPtr<DistributionArray3D> distributions);
-	//void addDistributionsF(SPtr<DistributionArray3D> distributions);
-	void addDistributionsH(SPtr<DistributionArray3D> distributions);
-	void applyBC();
-	//void setLambdaBC(LBMReal lambda) { this->lambdaBC = lambda; }
-	//LBMReal getLambdaBC() { return this->lambdaBC; }
-protected:
-	SPtr<DistributionArray3D> distributionsH;
-private:
-	//LBMReal lambdaBC;
-};
-#endif // ThixotropyNonReflectingOutflowBCStrategy_h__
-
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp
deleted file mode 100644
index 2a772def0572e982a60edba7d5c2d94251ab3fad..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ThixotropyVelocityBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#include "ThixotropyVelocityBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BoundaryConditions.h"
-
-ThixotropyVelocityBCStrategy::ThixotropyVelocityBCStrategy()
-{
-	BCStrategy::type = BCStrategy::ThixotropyVelocityBCStrategy;
-	BCStrategy::preCollision = false;
-	BCStrategy::thixotropy = true;
-	lambdaBC = vf::basics::constant::c0o1;
-}
-//////////////////////////////////////////////////////////////////////////
-ThixotropyVelocityBCStrategy::~ThixotropyVelocityBCStrategy()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> ThixotropyVelocityBCStrategy::clone()
-{
-	SPtr<BCStrategy> bc(new ThixotropyVelocityBCStrategy());
-	dynamicPointerCast<ThixotropyVelocityBCStrategy>(bc)->setLambdaBC(lambdaBC);
-	return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyVelocityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-	this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-//void ThixotropyVelocityBCStrategy::addDistributionsF(DistributionArray3DPtr distributions)
-//{
-//	this->distributionsf = distributions;
-//}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyVelocityBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributions)
-{
-	this->distributionsH = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyVelocityBCStrategy::applyBC()
-{
-	using namespace vf::lbm::dir;
-
-	real f[D3Q27System::ENDF + 1];
-	real feq[D3Q27System::ENDF + 1];
-	real h[D3Q27System::ENDF + 1];
-
-	distributions->getPostCollisionDistribution(f, x1, x2, x3);
-	distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
-	
-	real rho, vx1, vx2, vx3, drho;
-	calcMacrosFct(f, drho, vx1, vx2, vx3);
-	calcFeqFct(feq, drho, vx1, vx2, vx3);
-
-	rho = vf::basics::constant::c1o1 + drho * compressibleFactor;
-
-	//calcDiffusionMacrosFctPost(h, concentration, fl1, fl2, fl3, m100, collFactor);
-	real lambda = D3Q27System::getDensity(h);
-
-	int nx1 = x1;
-	int nx2 = x2;
-	int nx3 = x3;
-
-	//flag points in direction of fluid
-	if (bcPtr->hasVelocityBoundaryFlag(dP00)) { nx1 -= 1; }
-	else if (bcPtr->hasVelocityBoundaryFlag(dM00)) { nx1 += 1; }
-	else if (bcPtr->hasVelocityBoundaryFlag(d0P0)) { nx2 -= 1; }
-	else if (bcPtr->hasVelocityBoundaryFlag(d0M0)) { nx2 += 1; }
-	else if (bcPtr->hasVelocityBoundaryFlag(d00P)) { nx3 -= 1; }
-	else if (bcPtr->hasVelocityBoundaryFlag(d00M)) { nx3 += 1; }
-	else	 UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary..."));
-
-	//lambdaBC = bcPtr->getBoundaryThixotropy();
-
-	//LBMReal rhoBC = bcPtr->getBoundaryDensity();
-
-	//for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++)
-	//{
-	//	if (bcPtr->hasDensityBoundaryFlag(fdir))
-	//	{
-	//		LBMReal ftemp = calcFeqsForDirFct(fdir, rho, vx1, vx2, vx3);
-	//		ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3) + f[fdir] - ftemp;
-	//		distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
-
-	//		LBMReal htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3);
-	//		htemp = D3Q27System::getCompFeqForDirection(fdir,lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp;
-	//		distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
-	//	}
-	//}
-
-	for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++)
-	{
-		if (bcPtr->hasVelocityBoundaryFlag(fdir))
-		{
-			const int invDir = D3Q27System::INVDIR[fdir];
-			real q = bcPtr->getQ(invDir);// m+m q=0 stabiler
-			real velocity = bcPtr->getBoundaryVelocity(invDir);
-			real fReturn = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q)) * ((f[invDir] - feq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + feq[invDir]) + ((q * (f[invDir] + f[fdir]) - velocity * rho) / (vf::basics::constant::c1o1 + q));
-			distributions->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
-
-			real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3);
-			htemp = D3Q27System::getCompFeqForDirection(fdir, lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp;
-			distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
-		}
-	}
-}
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h
deleted file mode 100644
index 93cf6d2206efe942c57024e979ef9a4f970c2807..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h
+++ /dev/null
@@ -1,56 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ThixotropyVelocityBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef ThixotropyVelocityBCStrategy_h__
-#define ThixotropyVelocityBCStrategy_h__
-
-#include "BCStrategy.h"
-
-
-class ThixotropyVelocityBCStrategy : public BCStrategy
-{
-public:
-	ThixotropyVelocityBCStrategy();
-	virtual ~ThixotropyVelocityBCStrategy();
-	SPtr<BCStrategy> clone();
-	void addDistributions(SPtr<DistributionArray3D> distributions);
-	void addDistributionsH(SPtr<DistributionArray3D> distributions);
-	void applyBC();
-	void setLambdaBC(real lambda) { this->lambdaBC = lambda; }
-	real getLambdaBC() { return this->lambdaBC; }
-protected:
-	SPtr<DistributionArray3D> distributionsH;
-private:
-	real lambdaBC;
-};
-#endif // ThixotropyVelocityBCStrategy_h__
-
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp
deleted file mode 100644
index 529b1bb2c55f74c82690f6696d11050fbd8f687e..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ThixotropyVelocityWithDensityBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#include "ThixotropyVelocityWithDensityBCStrategy.h"
-#include "DistributionArray3D.h"
-#include "BCArray3D.h"
-
-ThixotropyVelocityWithDensityBCStrategy::ThixotropyVelocityWithDensityBCStrategy()
-{
-   BCStrategy::type = BCStrategy::ThixotropyVelocityWithDensityBCStrategy;
-   BCStrategy::preCollision = false;
-}
-//////////////////////////////////////////////////////////////////////////
-ThixotropyVelocityWithDensityBCStrategy::~ThixotropyVelocityWithDensityBCStrategy()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> ThixotropyVelocityWithDensityBCStrategy::clone()
-{
-   SPtr<BCStrategy> bc(new ThixotropyVelocityWithDensityBCStrategy());
-   dynamicPointerCast<ThixotropyVelocityWithDensityBCStrategy>(bc)->setLambdaBC(lambdaBC);
-   return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyVelocityWithDensityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-   this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyVelocityWithDensityBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributions)
-{
-   this->distributionsH = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyVelocityWithDensityBCStrategy::applyBC()
-{
-    using namespace vf::lbm::dir;
-
-   //velocity bc for non reflecting pressure bc
-   real f[D3Q27System::ENDF+1];
-   distributions->getPostCollisionDistribution(f, x1, x2, x3);
-   
-   real h[D3Q27System::ENDF + 1];
-   distributionsH->getPostCollisionDistribution(h, x1, x2, x3);
-
-   real rho, vx1, vx2, vx3, drho;
-   calcMacrosFct(f, drho, vx1, vx2, vx3);
-   
-   rho = vf::basics::constant::c1o1+drho*compressibleFactor;
-  
-   ///////////////////////////////////////////////////////////////////
-   // Rheology
-   real lambda = D3Q27System::getDensity(h);
-
-   int nx1 = x1;
-   int nx2 = x2;
-   int nx3 = x3;
-
-   //flag points in direction of fluid
-   if (bcPtr->hasVelocityBoundaryFlag(dP00)) { nx1 -= 1; }
-   else if (bcPtr->hasVelocityBoundaryFlag(dM00)) { nx1 += 1; }
-   else if (bcPtr->hasVelocityBoundaryFlag(d0P0)) { nx2 -= 1; }
-   else if (bcPtr->hasVelocityBoundaryFlag(d0M0)) { nx2 += 1; }
-   else if (bcPtr->hasVelocityBoundaryFlag(d00P)) { nx3 -= 1; }
-   else if (bcPtr->hasVelocityBoundaryFlag(d00M)) { nx3 += 1; }
-   else	 UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary..."));
-
-   for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++)
-   {
-      int nX1 = x1 + D3Q27System::DX1[fdir];
-      int nX2 = x2 + D3Q27System::DX2[fdir];
-      int nX3 = x3 + D3Q27System::DX3[fdir];
-
-      int minX1 = 0;
-      int minX2 = 0;
-      int minX3 = 0;
-
-      int maxX1 = (int)bcArray->getNX1();
-      int maxX2 = (int)bcArray->getNX2();
-      int maxX3 = (int)bcArray->getNX3();
-
-      if (minX1 <= nX1 && maxX1 > nX1 && minX2 <= nX2 && maxX2 > nX2 && minX3 <= nX3 && maxX3 > nX3)
-      {
-         if (bcArray->isSolid(nX1,nX2,nX3))
-         {
-            const int invDir = D3Q27System::INVDIR[fdir];
-            real velocity = bcPtr->getBoundaryVelocity(fdir);
-
-            real fReturn = (f[fdir] + f[invDir] - velocity*rho) / vf::basics::constant::c2o1 - drho*D3Q27System::WEIGTH[invDir];
-            distributions->setPostCollisionDistributionForDirection(fReturn, nX1, nX2, nX3, invDir);
-         }
-      }
-      
-      if (bcPtr->hasVelocityBoundaryFlag(fdir))
-      {
-         real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3);
-         htemp = D3Q27System::getCompFeqForDirection(fdir, lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp;
-         distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir);
-      }
-   }
-}
diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h
deleted file mode 100644
index 74d33efc0a1dbb693280665d0d27e541081b2fd3..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h
+++ /dev/null
@@ -1,60 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ThixotropyVelocityWithDensityBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef ThixotropyVelocityWithDensityBCStrategy_h__
-#define ThixotropyVelocityWithDensityBCStrategy_h__
-
-#include "BCStrategy.h"
-#include <PointerDefinitions.h>
-
-class DistributionArray3D;
-
-//!  \brief Class implements Dirichlet boundary condition for velocity. Set density in system. It is used together with non reflecting outflow.  
-
-class ThixotropyVelocityWithDensityBCStrategy : public BCStrategy
-{
-public:
-   ThixotropyVelocityWithDensityBCStrategy();
-   ~ThixotropyVelocityWithDensityBCStrategy();
-   SPtr<BCStrategy> clone();
-   void addDistributions(SPtr<DistributionArray3D> distributions);
-   void addDistributionsH(SPtr<DistributionArray3D> distributions);
-   void applyBC();
-   void setLambdaBC(real lambda) { this->lambdaBC = lambda; }
-   real getLambdaBC() { return this->lambdaBC; }
-protected:
-   SPtr<DistributionArray3D> distributionsH;
-private:
-   real lambdaBC;
-};
-#endif // ThixotropyVelocityWithDensityBCStrategy_h__
diff --git a/src/cpu/NonNewtonianFluids/CMakeLists.txt b/src/cpu/NonNewtonianFluids/CMakeLists.txt
deleted file mode 100644
index 261919282ce830bfcf1e364443c439338b642d88..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/CMakeLists.txt
+++ /dev/null
@@ -1 +0,0 @@
-vf_add_library(PUBLIC_LINK cpu_core)
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/LBM/Rheology.cpp b/src/cpu/NonNewtonianFluids/LBM/Rheology.cpp
deleted file mode 100644
index 79d2c26cc865ac08549a5b85bc996c0c4e9df51d..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/Rheology.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file Rheology.cpp
-//! \ingroup LBM
-//! \author Konstantin Kutscher, Martin Geier
-//=======================================================================================
-#include "Rheology.h"
-
-SPtr<Rheology> Rheology::instance = SPtr<Rheology>();
-real Rheology::tau0 = 0;
-real Rheology::k = 0;
-real Rheology::n = 1;
-real Rheology::omegaMin = 0;
-real Rheology::beta = 0;
-real Rheology::c = 0;
-real Rheology::mu0 = 0;
-
-//////////////////////////////////////////////////////////////////////////
-SPtr<Rheology> Rheology::getInstance()
-{
-   if (!instance)
-      instance = SPtr<Rheology>(new Rheology());
-   return instance;
-}
-
-void Rheology::setYieldStress(real yieldStress)
-{
-	tau0 = yieldStress;
-}
-real Rheology::getYieldStress() const
-{
-	return tau0;
-}
-void Rheology::setViscosityParameter(real kParameter)
-{
-	k = kParameter;
-}
-real Rheology::getViscosityParameter() const
-{
-	return k;
-}
-void Rheology::setPowerIndex(real index)
-{
-	n = index;
-}
-real Rheology::getPowerIndex() const
-{
-	return n;
-}
-
-void Rheology::setOmegaMin(real omega)
-{
-	omegaMin = omega;
-}
-real Rheology::getOmegaMin() const
-{
-	return omegaMin;
-}
-
-void Rheology::setBeta(real PowellEyringBeta)
-{
-	beta = PowellEyringBeta;
-}
-
-real Rheology::getBeta() const
-{
-	return beta;
-}
-
-void Rheology::setC(real PowellEyringC)
-{
-	c = PowellEyringC;
-}
-
-real Rheology::getC() const
-{
-	return c;
-}
-
-void Rheology::setMu0(real mu)
-{
-	mu0 = mu;
-}
-
-real Rheology::getMu0() const
-{
-	return mu0;
-}
-
-Rheology::Rheology()
-{
-}
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/LBM/Rheology.h b/src/cpu/NonNewtonianFluids/LBM/Rheology.h
deleted file mode 100644
index 54e375de60951129af1e37a9fb1569e2fd4bab4c..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/Rheology.h
+++ /dev/null
@@ -1,199 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file Rheology.h
-//! \ingroup LBM
-//! \author Konstantin Kutscher, Martin Geier
-//=======================================================================================
-
-#ifndef Rheology_H
-#define Rheology_H
-
-#include <PointerDefinitions.h>
-#include <LBMSystem.h>
-#include <UbMath.h>
-#include <math.h> 
-#include "basics/constants/NumericConstants.h"
-
-class Rheology
-{
-public:
-	Rheology(Rheology const&) = delete;
-	Rheology& operator=(Rheology const&) = delete;
-	static SPtr<Rheology> getInstance();
-	void setYieldStress(real tau0);
-	real getYieldStress() const;
-	
-	void setViscosityParameter(real k);
-	real getViscosityParameter() const;
-
-	void setPowerIndex(real n);
-	real getPowerIndex() const;
-
-	void setOmegaMin(real omegaMin);
-	real getOmegaMin() const;
-
-	void setBeta(real PowellEyringBeta);
-	real getBeta() const;
-
-	void setC(real PowellEyringC);
-	real getC() const;
-
-	void setMu0(real mu);
-	real getMu0() const;
-
-	static real getBinghamCollFactorOld(real omegaInf, real shearRate, real drho);
-	static real getBinghamCollFactor(real omegaInf, real shearRate, real drho);
-	static real getHerschelBulkleyCollFactor(real omegaInf, real shearRate, real drho);
-	static real getHerschelBulkleyCollFactorBackward(real shearRate, real drho);
-	static real getPowellEyringCollFactor(real omegaInf, real shearRate, real drho);
-private:
-	Rheology();
-	
-	static SPtr<Rheology> instance;
-
-	static real tau0;
-	static real k;
-	static real n;
-	static real omegaMin;
-	static real beta;
-	static real c;
-	static real mu0;
-};
-
-//////////////////////////////////////////////////////////////////////////
-inline real Rheology::getBinghamCollFactor(real omegaInf, real shearRate, real drho)
-{
-	real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3;
-	real rho = vf::basics::constant::c1o1 + drho;
-	//analytical solution
-	real omega = omegaInf * (vf::basics::constant::c1o1 - (omegaInf * tau0) / (shearRate * cs2 * rho + UbMath::Epsilon<real>::val()));
-	
-	//LBMReal omega = cs2 * cs2 * shearRate * shearRate * omegaInf * rho * rho / (cs2 * cs2 * shearRate * shearRate * rho * rho + cs2 * shearRate * omegaInf * rho * tau0+omegaInf*omegaInf*tau0*tau0);
-	
-	// LBMReal a = omegaInf * tau0 / (cs2 * shearRate * rho);
-	//10 iterations
-	//LBMReal omega = omegaInf / (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a))))))))));
-	
-	//20 iterations
-	////LBMReal omega = omegaInf / (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a))))))))))))))))))));
-	//
-	//LBMReal omega = omegaInf*cs2 * shearRate * rho / (cs2 * shearRate * rho + omegaInf * tau0);
-	//LBMReal shearRateNew = shearRate * (omega / omegaInf);
-
-	//for (int i = 0; i < 20; i++)
-	//{
-	//	omega = omegaInf * cs2 * shearRateNew * rho / (cs2 * shearRateNew * rho + omegaInf * tau0);
-	//	shearRateNew = shearRate * (omega / omegaInf);
-	//}
-	//omega = omegaInf * cs2 * shearRateNew * rho / (cs2 * shearRateNew * rho + omegaInf * tau0);
-	//
-	////if (omega < 0.2)
-	////	omega = 0.2;
-	return omega;
-}
-
-inline real Rheology::getBinghamCollFactorOld(real omegaInf, real shearRate, real drho)
-{
-	const real cs2 = vf::basics::constant::c1o3; // UbMath::c1oSqrt3* UbMath::c1oSqrt3;
-	real rho = vf::basics::constant::c1o1 + drho;
-
-	if (rho * cs2 * (vf::basics::constant::c1o1 / omegaInf - vf::basics::constant::c1o2) * shearRate < tau0)
-		return 0.0;
-	else
-		return omegaInf;
-}
-//////////////////////////////////////////////////////////////////////////
-inline real Rheology::getHerschelBulkleyCollFactor(real omegaInf, real shearRate, real drho)
-{
-	real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3;
-	real rho = vf::basics::constant::c1o1 + drho;
-	real gammaDot = shearRate;
-	real omega = omegaInf;
-	real epsilon = 1;
-	real gammaDotPowN = std::pow(gammaDot, n);
-
-	while (epsilon > 1e-10)
-	{
-		real omegaOld = omega;
-		real omegaByOmegaInfPowN = std::pow(omega / omegaInf, n);/*
-		LBMReal gammaDotPowOneMinusN = std::pow(gammaDot,1- n);
-		LBMReal omegaByOmegaInfPowOneMinusN = std::pow(omega / omegaInf, 1-n);
-		LBMReal numeratorA = (2.0* k *  omegaInf + cs2 * gammaDotPowOneMinusN * omegaByOmegaInfPowOneMinusN *omegaInf* rho );
-		LBMReal numeratorB = ( cs2 * gammaDot * ( - 2.0) * rho + 2.0 * omegaInf * tau0);
-		LBMReal denominatorA = (2.0 * k * n * omegaInf + cs2 * gammaDot * rho * omegaInf* gammaDotPowOneMinusN * omegaByOmegaInfPowOneMinusN) + UbMath::Epsilon<LBMReal>::val();
-		LBMReal denominatorB = (2.0 * k * n * gammaDotPowN * omegaByOmegaInfPowN * omegaInf + cs2 * gammaDot * rho * omega) + UbMath::Epsilon<LBMReal>::val();
-		omega = omega - omega *( numeratorA / denominatorA+ numeratorB / denominatorB);*/
-		real numerator = (2.0 * gammaDotPowN * k * omegaByOmegaInfPowN * omegaInf + cs2 * gammaDot * (omega - 2.0) * rho + 2.0 * omegaInf * tau0);
-		real denominator = (2.0 * k * n * gammaDotPowN * omegaByOmegaInfPowN * omegaInf + cs2 * gammaDot * rho * omega) + UbMath::Epsilon<real>::val();
-		omega = omega - omega * numerator / denominator;
-		omega = (omega < vf::basics::constant::c0o1) ? vf::basics::constant::c1o2 * omegaOld : omega;
-        //omega = (omega < omegaMin) ? UbMath::c1o2 * (omegaOld-omegaMin)+omegaMin : omega;
-		epsilon = std::abs(omega - omegaOld);
-	}
-
-	return omega;
-}
-//////////////////////////////////////////////////////////////////////////
-inline real Rheology::getHerschelBulkleyCollFactorBackward(real shearRate, real drho)
-{
-	real rho = vf::basics::constant::c1o1 + drho;
-	real gamma = shearRate + UbMath::Epsilon<real>::val();
-	real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3;
-
-	return 1.0 / ((tau0 + k * std::pow(gamma, n)) / (cs2 * rho * gamma) + vf::basics::constant::c1o2);
-}
-//////////////////////////////////////////////////////////////////////////
-inline real Rheology::getPowellEyringCollFactor(real omegaInf, real shearRate, real drho)
-{
-//	using namespace UbMath;
-	using namespace vf::basics::constant;
-
-	real cs2 = c1o3; // UbMath::c1oSqrt3* UbMath::c1oSqrt3;
-	real rho = c1o1 + drho;
-	real gammaDot = shearRate;
-	real omega = omegaInf;
-	real epsilon = 1;
-
-	while (epsilon > 1e-10)
-	{
-		real omegaOld = omega;
-		epsilon = std::abs(omega - omegaOld);
-
-		real numerator = c*sqrt(c1o1+(gammaDot*gammaDot*omega*omega)/(c*c*omegaInf*omegaInf))*(beta*(c2o1*gammaDot*mu0*omega+cs2*gammaDot*(omega-c2o1)*rho+c2o1*omegaInf*tau0)+c2o1*omegaInf*(asinh((gammaDot*omega)/(c*omegaInf))));
-
-		real denominator = gammaDot*(c2o1+beta*c*sqrt(c1o1+(gammaDot*gammaDot*omega*omega)/(c*c*omegaInf*omegaInf))*(c2o1*mu0+cs2*rho)) + UbMath::Epsilon<real>::val();
-
-		omega = omega - numerator / denominator;
-
-		omega = (omega < c0o1) ? c1o2 * omegaOld : omega;
-	}
-
-	return omega;
-}
-#endif
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyBinghamModelLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/RheologyBinghamModelLBMKernel.h
deleted file mode 100644
index 61ff8c86d65db9d36b0a6919927704ffc2618716..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyBinghamModelLBMKernel.h
+++ /dev/null
@@ -1,71 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyBinghamModelLBMKernel.h
-//! \ingroup LBM
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef RheologyBinghamModelLBMKernel_H
-#define RheologyBinghamModelLBMKernel_H
-
-#include "RheologyK17LBMKernel.h"
-#include "Rheology.h"
-
-//! \brief    Cumulant LBM kernel + Bingham plastic model 
-
-class RheologyBinghamModelLBMKernel : public RheologyK17LBMKernel
-{
-public:
-	RheologyBinghamModelLBMKernel() {};
-	~RheologyBinghamModelLBMKernel() {};
-	SPtr<LBMKernel> clone() override
-	{
-		SPtr<LBMKernel> kernel(new RheologyBinghamModelLBMKernel());
-		kernel->setNX(nx);
-		kernel->setCollisionFactor(collFactor);
-		dynamicPointerCast<RheologyBinghamModelLBMKernel>(kernel)->initDataSet();
-		kernel->setBCSet(bcSet->clone(kernel));
-		kernel->setWithForcing(withForcing);
-		kernel->setForcingX1(muForcingX1);
-		kernel->setForcingX2(muForcingX2);
-		kernel->setForcingX3(muForcingX3);
-		kernel->setIndex(ix1, ix2, ix3);
-		kernel->setDeltaT(deltaT);
-
-		return kernel;
-	}
-protected:	
-	real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override
-	{
-		return Rheology::getBinghamCollFactor(omegaInf, shearRate, drho);
-	}
-};
-
-
-#endif
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyHerschelBulkleyModelLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/RheologyHerschelBulkleyModelLBMKernel.h
deleted file mode 100644
index 55435e1b4c1243aaefd5f7f141ec2da84c594116..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyHerschelBulkleyModelLBMKernel.h
+++ /dev/null
@@ -1,70 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyHerschelBulkleyModelLBMKernel.h
-//! \ingroup LBM
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef RheologyHerschelBulkleyModelLBMKernel_H
-#define RheologyHerschelBulkleyModelLBMKernel_H
-
-#include "RheologyK17LBMKernel.h"
-#include "Rheology.h"
-
-//! \brief    Cumulant LBM kernel + Herschel-Bulkley plastic model 
-
-class RheologyHerschelBulkleyModelLBMKernel : public RheologyK17LBMKernel
-{
-public:
-	RheologyHerschelBulkleyModelLBMKernel() {};
-	~RheologyHerschelBulkleyModelLBMKernel() {};
-	SPtr<LBMKernel> clone() override
-	{
-		SPtr<LBMKernel> kernel(new RheologyHerschelBulkleyModelLBMKernel());
-		kernel->setNX(nx);
-		kernel->setCollisionFactor(collFactor);
-		dynamicPointerCast<RheologyHerschelBulkleyModelLBMKernel>(kernel)->initDataSet();
-		kernel->setBCSet(bcSet->clone(kernel));
-		kernel->setWithForcing(withForcing);
-		kernel->setForcingX1(muForcingX1);
-		kernel->setForcingX2(muForcingX2);
-		kernel->setForcingX3(muForcingX3);
-		kernel->setIndex(ix1, ix2, ix3);
-		kernel->setDeltaT(deltaT);
-
-		return kernel;
-	}
-protected:
-	real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override
-	{
-		return Rheology::getHerschelBulkleyCollFactor(omegaInf, shearRate, drho);
-	}
-};
-
-
-#endif
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp b/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp
deleted file mode 100644
index d33bbef61f8731302b8c7b8ba0ce8b17a7bd9703..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp
+++ /dev/null
@@ -1,677 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __         
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |        
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |        
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |        
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____    
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|   
-//      \    \  |    |   ________________________________________________________________    
-//       \    \ |    |  |  ______________________________________________________________|   
-//        \    \|    |  |  |         __          __     __     __     ______      _______    
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)   
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______    
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |   
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/   
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can 
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of 
-//  the License, or (at your option) any later version.
-//  
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT 
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
-//  for more details.
-//  
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyInterpolator.cpp
-//! \ingroup LBM
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include "RheologyInterpolator.h"
-#include "D3Q27System.h"
-#include "Rheology.h"
-
-
-RheologyInterpolator::RheologyInterpolator()
-   : omegaC(0.0), omegaF(0.0), omegaMin(0.0)
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-RheologyInterpolator::RheologyInterpolator(real omegaC, real omegaF, real omegaMin)
-   : omegaC(omegaC), omegaF(omegaF), omegaMin(omegaMin)
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-InterpolationProcessorPtr RheologyInterpolator::clone()
-{
-   InterpolationProcessorPtr iproc = std::make_shared<RheologyInterpolator>(this->omegaC, this->omegaF, this->omegaMin);
-   return iproc;
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyInterpolator::setOmegas( real omegaC, real omegaF )
-{
-   this->omegaC = omegaC;
-   this->omegaF = omegaF;
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyInterpolator::setOmegaMin( real omegaMin )
-{
-   this->omegaMin = omegaMin;
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyInterpolator::setOffsets(real xoff, real yoff, real zoff)
-{
-   this->xoff = xoff;
-   this->yoff = yoff;
-   this->zoff = zoff;     
-   this->xoff_sq = xoff * xoff;
-   this->yoff_sq = yoff * yoff;
-   this->zoff_sq = zoff * zoff;
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyInterpolator::interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF, real xoff, real yoff, real zoff)
-{
-    setOffsets(xoff, yoff, zoff);
-    calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, 0.25, -0.25, -0.25, -1, -1, -1);
-    calcInterpolatedNode(icellF.BSW, /*omegaF,*/ -0.25, -0.25, -0.25, calcPressBSW(), -1, -1, -1);
-    calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, 0.25, 0.25, -0.25, 1, 1, -1);
-    calcInterpolatedNode(icellF.BNE, /*omegaF,*/  0.25,  0.25, -0.25, calcPressBNE(),  1,  1, -1);
-    calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, -0.25, 0.25, 0.25, -1, 1, 1);
-    calcInterpolatedNode(icellF.TNW, /*omegaF,*/ -0.25,  0.25,  0.25, calcPressTNW(), -1,  1,  1);
-    calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, 0.25, -0.25, 0.25, 1, -1, 1);
-    calcInterpolatedNode(icellF.TSE, /*omegaF,*/  0.25, -0.25,  0.25, calcPressTSE(),  1, -1,  1);
-    calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, -0.25, 0.25, -0.25, -1, 1, -1);
-    calcInterpolatedNode(icellF.BNW, /*omegaF,*/ -0.25,  0.25, -0.25, calcPressBNW(), -1,  1, -1);
-    calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, 0.25, -0.25, -0.25, 1, -1, -1);
-    calcInterpolatedNode(icellF.BSE, /*omegaF,*/  0.25, -0.25, -0.25, calcPressBSE(),  1, -1, -1);
-    calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, -0.25, -0.25, 0.25, -1, -1, 1);
-    calcInterpolatedNode(icellF.TSW, /*omegaF,*/ -0.25, -0.25,  0.25, calcPressTSW(), -1, -1,  1);
-    calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, 0.25, 0.25, 0.25, 1, 1, 1);
-    calcInterpolatedNode(icellF.TNE, /*omegaF,*/  0.25,  0.25,  0.25, calcPressTNE(),  1,  1,  1);
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyInterpolator::interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC, real xoff, real yoff, real zoff)
-{
-   setOffsets(xoff, yoff, zoff);
-    calcInterpolatedCoefficiets_intern(icellF, omegaF, 2.0, 0, 0, 0, 0, 0, 0);
-   calcInterpolatedNodeFC(icellC, omegaC);
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyInterpolator::calcMoments(const real* const f, real omegaInf, real& press, real& vx1, real& vx2, real& vx3, real& kxy, real& kyz, real& kxz, real& kxxMyy, real& kxxMzz)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   rho = 0.0;
-   D3Q27System::calcIncompMacroscopicValues(f,rho,vx1,vx2,vx3);
-
-   shearRate = D3Q27System::getShearRate(f, omegaInf);
-
-   real omega = Rheology::getHerschelBulkleyCollFactor(omegaInf, shearRate, rho);
-
-   press = rho; //interpolate rho!
-
-   kxy   = -3.*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))-(vx1*vx2));// might not be optimal MG 25.2.13
-   kyz   = -3.*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))-(vx2*vx3));
-   kxz   = -3.*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))-(vx1*vx3));
-   kxxMyy = -3./2.*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))-(vx1*vx1-vx2*vx2));
-   kxxMzz = -3./2.*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))-(vx1*vx1-vx3*vx3));
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyInterpolator::calcInterpolatedCoefficiets_intern(const D3Q27ICell& icell,
-                                                                          real omega,
-                                                                          real eps_new,
-                                                                          real x,
-                                                                          real y,
-                                                                          real z,
-                                                                          real xs,
-                                                                          real ys,
-                                                                          real zs)
-{
-   real        vx1_SWT,vx2_SWT,vx3_SWT;
-   real        vx1_NWT,vx2_NWT,vx3_NWT;
-   real        vx1_NET,vx2_NET,vx3_NET;
-   real        vx1_SET,vx2_SET,vx3_SET;
-   real        vx1_SWB,vx2_SWB,vx3_SWB;
-   real        vx1_NWB,vx2_NWB,vx3_NWB;
-   real        vx1_NEB,vx2_NEB,vx3_NEB;
-   real        vx1_SEB,vx2_SEB,vx3_SEB;
-
-   real        kxyFromfcNEQ_SWT, kyzFromfcNEQ_SWT, kxzFromfcNEQ_SWT, kxxMyyFromfcNEQ_SWT, kxxMzzFromfcNEQ_SWT;
-   real        kxyFromfcNEQ_NWT, kyzFromfcNEQ_NWT, kxzFromfcNEQ_NWT, kxxMyyFromfcNEQ_NWT, kxxMzzFromfcNEQ_NWT;
-   real        kxyFromfcNEQ_NET, kyzFromfcNEQ_NET, kxzFromfcNEQ_NET, kxxMyyFromfcNEQ_NET, kxxMzzFromfcNEQ_NET;
-   real        kxyFromfcNEQ_SET, kyzFromfcNEQ_SET, kxzFromfcNEQ_SET, kxxMyyFromfcNEQ_SET, kxxMzzFromfcNEQ_SET;
-   real        kxyFromfcNEQ_SWB, kyzFromfcNEQ_SWB, kxzFromfcNEQ_SWB, kxxMyyFromfcNEQ_SWB, kxxMzzFromfcNEQ_SWB;
-   real        kxyFromfcNEQ_NWB, kyzFromfcNEQ_NWB, kxzFromfcNEQ_NWB, kxxMyyFromfcNEQ_NWB, kxxMzzFromfcNEQ_NWB;
-   real        kxyFromfcNEQ_NEB, kyzFromfcNEQ_NEB, kxzFromfcNEQ_NEB, kxxMyyFromfcNEQ_NEB, kxxMzzFromfcNEQ_NEB;
-   real        kxyFromfcNEQ_SEB, kyzFromfcNEQ_SEB, kxzFromfcNEQ_SEB, kxxMyyFromfcNEQ_SEB, kxxMzzFromfcNEQ_SEB;
-
-   calcMoments(icell.TSW,omega,press_SWT,vx1_SWT,vx2_SWT,vx3_SWT, kxyFromfcNEQ_SWT, kyzFromfcNEQ_SWT, kxzFromfcNEQ_SWT, kxxMyyFromfcNEQ_SWT, kxxMzzFromfcNEQ_SWT);
-   calcMoments(icell.TNW,omega,press_NWT,vx1_NWT,vx2_NWT,vx3_NWT, kxyFromfcNEQ_NWT, kyzFromfcNEQ_NWT, kxzFromfcNEQ_NWT, kxxMyyFromfcNEQ_NWT, kxxMzzFromfcNEQ_NWT);
-   calcMoments(icell.TNE,omega,press_NET,vx1_NET,vx2_NET,vx3_NET, kxyFromfcNEQ_NET, kyzFromfcNEQ_NET, kxzFromfcNEQ_NET, kxxMyyFromfcNEQ_NET, kxxMzzFromfcNEQ_NET);
-   calcMoments(icell.TSE,omega,press_SET,vx1_SET,vx2_SET,vx3_SET, kxyFromfcNEQ_SET, kyzFromfcNEQ_SET, kxzFromfcNEQ_SET, kxxMyyFromfcNEQ_SET, kxxMzzFromfcNEQ_SET);
-   calcMoments(icell.BSW,omega,press_SWB,vx1_SWB,vx2_SWB,vx3_SWB, kxyFromfcNEQ_SWB, kyzFromfcNEQ_SWB, kxzFromfcNEQ_SWB, kxxMyyFromfcNEQ_SWB, kxxMzzFromfcNEQ_SWB);
-   calcMoments(icell.BNW,omega,press_NWB,vx1_NWB,vx2_NWB,vx3_NWB, kxyFromfcNEQ_NWB, kyzFromfcNEQ_NWB, kxzFromfcNEQ_NWB, kxxMyyFromfcNEQ_NWB, kxxMzzFromfcNEQ_NWB);
-   calcMoments(icell.BNE,omega,press_NEB,vx1_NEB,vx2_NEB,vx3_NEB, kxyFromfcNEQ_NEB, kyzFromfcNEQ_NEB, kxzFromfcNEQ_NEB, kxxMyyFromfcNEQ_NEB, kxxMzzFromfcNEQ_NEB);
-   calcMoments(icell.BSE,omega,press_SEB,vx1_SEB,vx2_SEB,vx3_SEB, kxyFromfcNEQ_SEB, kyzFromfcNEQ_SEB, kxzFromfcNEQ_SEB, kxxMyyFromfcNEQ_SEB, kxxMzzFromfcNEQ_SEB);
-
-   a0 = (-kxxMyyFromfcNEQ_NEB - kxxMyyFromfcNEQ_NET + kxxMyyFromfcNEQ_NWB + kxxMyyFromfcNEQ_NWT -
-      kxxMyyFromfcNEQ_SEB - kxxMyyFromfcNEQ_SET + kxxMyyFromfcNEQ_SWB + kxxMyyFromfcNEQ_SWT -
-      kxxMzzFromfcNEQ_NEB - kxxMzzFromfcNEQ_NET + kxxMzzFromfcNEQ_NWB + kxxMzzFromfcNEQ_NWT -
-      kxxMzzFromfcNEQ_SEB - kxxMzzFromfcNEQ_SET + kxxMzzFromfcNEQ_SWB + kxxMzzFromfcNEQ_SWT -
-      2.*kxyFromfcNEQ_NEB - 2.*kxyFromfcNEQ_NET - 2.*kxyFromfcNEQ_NWB - 2.*kxyFromfcNEQ_NWT +
-      2.*kxyFromfcNEQ_SEB + 2.*kxyFromfcNEQ_SET + 2.*kxyFromfcNEQ_SWB + 2.*kxyFromfcNEQ_SWT +
-      2.*kxzFromfcNEQ_NEB - 2.*kxzFromfcNEQ_NET + 2.*kxzFromfcNEQ_NWB - 2.*kxzFromfcNEQ_NWT +
-      2.*kxzFromfcNEQ_SEB - 2.*kxzFromfcNEQ_SET + 2.*kxzFromfcNEQ_SWB - 2.*kxzFromfcNEQ_SWT +
-      8.*vx1_NEB + 8.*vx1_NET + 8.*vx1_NWB + 8.*vx1_NWT + 8.*vx1_SEB +
-      8.*vx1_SET + 8.*vx1_SWB + 8.*vx1_SWT + 2.*vx2_NEB + 2.*vx2_NET -
-      2.*vx2_NWB - 2.*vx2_NWT - 2.*vx2_SEB - 2.*vx2_SET + 2.*vx2_SWB +
-      2.*vx2_SWT - 2.*vx3_NEB + 2.*vx3_NET + 2.*vx3_NWB - 2.*vx3_NWT -
-      2.*vx3_SEB + 2.*vx3_SET + 2.*vx3_SWB - 2.*vx3_SWT)/64.;
-   b0 = (2.*kxxMyyFromfcNEQ_NEB + 2.*kxxMyyFromfcNEQ_NET + 2.*kxxMyyFromfcNEQ_NWB + 2.*kxxMyyFromfcNEQ_NWT -
-      2.*kxxMyyFromfcNEQ_SEB - 2.*kxxMyyFromfcNEQ_SET - 2.*kxxMyyFromfcNEQ_SWB - 2.*kxxMyyFromfcNEQ_SWT -
-      kxxMzzFromfcNEQ_NEB - kxxMzzFromfcNEQ_NET - kxxMzzFromfcNEQ_NWB - kxxMzzFromfcNEQ_NWT +
-      kxxMzzFromfcNEQ_SEB + kxxMzzFromfcNEQ_SET + kxxMzzFromfcNEQ_SWB + kxxMzzFromfcNEQ_SWT -
-      2.*kxyFromfcNEQ_NEB - 2.*kxyFromfcNEQ_NET + 2.*kxyFromfcNEQ_NWB + 2.*kxyFromfcNEQ_NWT -
-      2.*kxyFromfcNEQ_SEB - 2.*kxyFromfcNEQ_SET + 2.*kxyFromfcNEQ_SWB + 2.*kxyFromfcNEQ_SWT +
-      2.*kyzFromfcNEQ_NEB - 2.*kyzFromfcNEQ_NET + 2.*kyzFromfcNEQ_NWB - 2.*kyzFromfcNEQ_NWT +
-      2.*kyzFromfcNEQ_SEB - 2.*kyzFromfcNEQ_SET + 2.*kyzFromfcNEQ_SWB - 2.*kyzFromfcNEQ_SWT +
-      2.*vx1_NEB + 2.*vx1_NET - 2.*vx1_NWB - 2.*vx1_NWT -
-      2.*vx1_SEB - 2.*vx1_SET + 2.*vx1_SWB + 2.*vx1_SWT +
-      8.*vx2_NEB + 8.*vx2_NET + 8.*vx2_NWB + 8.*vx2_NWT +
-      8.*vx2_SEB + 8.*vx2_SET + 8.*vx2_SWB + 8.*vx2_SWT -
-      2.*vx3_NEB + 2.*vx3_NET - 2.*vx3_NWB + 2.*vx3_NWT +
-      2.*vx3_SEB - 2.*vx3_SET + 2.*vx3_SWB - 2.*vx3_SWT)/64.;
-   c0 = (kxxMyyFromfcNEQ_NEB - kxxMyyFromfcNEQ_NET + kxxMyyFromfcNEQ_NWB - kxxMyyFromfcNEQ_NWT +
-      kxxMyyFromfcNEQ_SEB - kxxMyyFromfcNEQ_SET + kxxMyyFromfcNEQ_SWB - kxxMyyFromfcNEQ_SWT -
-      2.*kxxMzzFromfcNEQ_NEB + 2.*kxxMzzFromfcNEQ_NET - 2.*kxxMzzFromfcNEQ_NWB + 2.*kxxMzzFromfcNEQ_NWT -
-      2.*kxxMzzFromfcNEQ_SEB + 2.*kxxMzzFromfcNEQ_SET - 2.*kxxMzzFromfcNEQ_SWB + 2.*kxxMzzFromfcNEQ_SWT -
-      2.*kxzFromfcNEQ_NEB - 2.*kxzFromfcNEQ_NET + 2.*kxzFromfcNEQ_NWB + 2.*kxzFromfcNEQ_NWT -
-      2.*kxzFromfcNEQ_SEB - 2.*kxzFromfcNEQ_SET + 2.*kxzFromfcNEQ_SWB + 2.*kxzFromfcNEQ_SWT -
-      2.*kyzFromfcNEQ_NEB - 2.*kyzFromfcNEQ_NET - 2.*kyzFromfcNEQ_NWB - 2.*kyzFromfcNEQ_NWT +
-      2.*kyzFromfcNEQ_SEB + 2.*kyzFromfcNEQ_SET + 2.*kyzFromfcNEQ_SWB + 2.*kyzFromfcNEQ_SWT -
-      2.*vx1_NEB + 2.*vx1_NET + 2.*vx1_NWB - 2.*vx1_NWT -
-      2.*vx1_SEB + 2.*vx1_SET + 2.*vx1_SWB - 2.*vx1_SWT -
-      2.*vx2_NEB + 2.*vx2_NET - 2.*vx2_NWB + 2.*vx2_NWT +
-      2.*vx2_SEB - 2.*vx2_SET + 2.*vx2_SWB - 2.*vx2_SWT +
-      8.*vx3_NEB + 8.*vx3_NET + 8.*vx3_NWB + 8.*vx3_NWT +
-      8.*vx3_SEB + 8.*vx3_SET + 8.*vx3_SWB + 8.*vx3_SWT)/64.;
-   ax = (vx1_NEB + vx1_NET - vx1_NWB - vx1_NWT + vx1_SEB + vx1_SET - vx1_SWB - vx1_SWT)/4.;
-   bx = (vx2_NEB + vx2_NET - vx2_NWB - vx2_NWT + vx2_SEB + vx2_SET - vx2_SWB - vx2_SWT)/4.;
-   cx = (vx3_NEB + vx3_NET - vx3_NWB - vx3_NWT + vx3_SEB + vx3_SET - vx3_SWB - vx3_SWT)/4.;
-   axx= (kxxMyyFromfcNEQ_NEB + kxxMyyFromfcNEQ_NET - kxxMyyFromfcNEQ_NWB - kxxMyyFromfcNEQ_NWT +
-      kxxMyyFromfcNEQ_SEB + kxxMyyFromfcNEQ_SET - kxxMyyFromfcNEQ_SWB - kxxMyyFromfcNEQ_SWT +
-      kxxMzzFromfcNEQ_NEB + kxxMzzFromfcNEQ_NET - kxxMzzFromfcNEQ_NWB - kxxMzzFromfcNEQ_NWT +
-      kxxMzzFromfcNEQ_SEB + kxxMzzFromfcNEQ_SET - kxxMzzFromfcNEQ_SWB - kxxMzzFromfcNEQ_SWT +
-      2.*vx2_NEB + 2.*vx2_NET - 2.*vx2_NWB - 2.*vx2_NWT -
-      2.*vx2_SEB - 2.*vx2_SET + 2.*vx2_SWB + 2.*vx2_SWT -
-      2.*vx3_NEB + 2.*vx3_NET + 2.*vx3_NWB - 2.*vx3_NWT -
-      2.*vx3_SEB + 2.*vx3_SET + 2.*vx3_SWB - 2.*vx3_SWT)/16.;
-   bxx= (kxyFromfcNEQ_NEB + kxyFromfcNEQ_NET - kxyFromfcNEQ_NWB - kxyFromfcNEQ_NWT +
-      kxyFromfcNEQ_SEB + kxyFromfcNEQ_SET - kxyFromfcNEQ_SWB - kxyFromfcNEQ_SWT -
-      2.*vx1_NEB - 2.*vx1_NET + 2.*vx1_NWB + 2.*vx1_NWT +
-      2.*vx1_SEB + 2.*vx1_SET - 2.*vx1_SWB - 2.*vx1_SWT)/8.;
-   cxx= (kxzFromfcNEQ_NEB + kxzFromfcNEQ_NET - kxzFromfcNEQ_NWB - kxzFromfcNEQ_NWT +
-      kxzFromfcNEQ_SEB + kxzFromfcNEQ_SET - kxzFromfcNEQ_SWB - kxzFromfcNEQ_SWT +
-      2.*vx1_NEB - 2.*vx1_NET - 2.*vx1_NWB + 2.*vx1_NWT +
-      2.*vx1_SEB - 2.*vx1_SET - 2.*vx1_SWB + 2.*vx1_SWT)/8.;
-   ay = (vx1_NEB + vx1_NET + vx1_NWB + vx1_NWT - vx1_SEB - vx1_SET - vx1_SWB - vx1_SWT)/4.;
-   by = (vx2_NEB + vx2_NET + vx2_NWB + vx2_NWT - vx2_SEB - vx2_SET - vx2_SWB - vx2_SWT)/4.;
-   cy = (vx3_NEB + vx3_NET + vx3_NWB + vx3_NWT - vx3_SEB - vx3_SET - vx3_SWB - vx3_SWT)/4.;
-   ayy= (kxyFromfcNEQ_NEB + kxyFromfcNEQ_NET + kxyFromfcNEQ_NWB + kxyFromfcNEQ_NWT -
-      kxyFromfcNEQ_SEB - kxyFromfcNEQ_SET - kxyFromfcNEQ_SWB - kxyFromfcNEQ_SWT -
-      2.*vx2_NEB - 2.*vx2_NET + 2.*vx2_NWB + 2.*vx2_NWT +
-      2.*vx2_SEB + 2.*vx2_SET - 2.*vx2_SWB - 2.*vx2_SWT)/8.;
-   byy= (-2.*kxxMyyFromfcNEQ_NEB - 2.*kxxMyyFromfcNEQ_NET - 2.*kxxMyyFromfcNEQ_NWB - 2.*kxxMyyFromfcNEQ_NWT +
-      2.*kxxMyyFromfcNEQ_SEB + 2.*kxxMyyFromfcNEQ_SET + 2.*kxxMyyFromfcNEQ_SWB + 2.*kxxMyyFromfcNEQ_SWT +
-      kxxMzzFromfcNEQ_NEB + kxxMzzFromfcNEQ_NET + kxxMzzFromfcNEQ_NWB + kxxMzzFromfcNEQ_NWT -
-      kxxMzzFromfcNEQ_SEB - kxxMzzFromfcNEQ_SET - kxxMzzFromfcNEQ_SWB - kxxMzzFromfcNEQ_SWT +
-      2.*vx1_NEB + 2.*vx1_NET - 2.*vx1_NWB - 2.*vx1_NWT -
-      2.*vx1_SEB - 2.*vx1_SET + 2.*vx1_SWB + 2.*vx1_SWT -
-      2.*vx3_NEB + 2.*vx3_NET - 2.*vx3_NWB + 2.*vx3_NWT +
-      2.*vx3_SEB - 2.*vx3_SET + 2.*vx3_SWB - 2.*vx3_SWT)/16.;
-   cyy= (kyzFromfcNEQ_NEB + kyzFromfcNEQ_NET + kyzFromfcNEQ_NWB + kyzFromfcNEQ_NWT -
-      kyzFromfcNEQ_SEB - kyzFromfcNEQ_SET - kyzFromfcNEQ_SWB - kyzFromfcNEQ_SWT +
-      2.*vx2_NEB - 2.*vx2_NET + 2.*vx2_NWB - 2.*vx2_NWT -
-      2.*vx2_SEB + 2.*vx2_SET - 2.*vx2_SWB + 2.*vx2_SWT)/8.;
-   az = (-vx1_NEB + vx1_NET - vx1_NWB + vx1_NWT - vx1_SEB + vx1_SET - vx1_SWB + vx1_SWT)/4.;
-   bz = (-vx2_NEB + vx2_NET - vx2_NWB + vx2_NWT - vx2_SEB + vx2_SET - vx2_SWB + vx2_SWT)/4.;
-   cz = (-vx3_NEB + vx3_NET - vx3_NWB + vx3_NWT - vx3_SEB + vx3_SET - vx3_SWB + vx3_SWT)/4.;
-   azz= (-kxzFromfcNEQ_NEB + kxzFromfcNEQ_NET - kxzFromfcNEQ_NWB + kxzFromfcNEQ_NWT -
-      kxzFromfcNEQ_SEB + kxzFromfcNEQ_SET - kxzFromfcNEQ_SWB + kxzFromfcNEQ_SWT +
-      2.*vx3_NEB - 2.*vx3_NET - 2.*vx3_NWB + 2.*vx3_NWT +
-      2.*vx3_SEB - 2.*vx3_SET - 2.*vx3_SWB + 2.*vx3_SWT)/8.;
-   bzz= (-kyzFromfcNEQ_NEB + kyzFromfcNEQ_NET - kyzFromfcNEQ_NWB + kyzFromfcNEQ_NWT -
-      kyzFromfcNEQ_SEB + kyzFromfcNEQ_SET - kyzFromfcNEQ_SWB + kyzFromfcNEQ_SWT +
-      2.*vx3_NEB - 2.*vx3_NET + 2.*vx3_NWB - 2.*vx3_NWT -
-      2.*vx3_SEB + 2.*vx3_SET - 2.*vx3_SWB + 2.*vx3_SWT)/8.;
-   czz= (-kxxMyyFromfcNEQ_NEB + kxxMyyFromfcNEQ_NET - kxxMyyFromfcNEQ_NWB + kxxMyyFromfcNEQ_NWT -
-      kxxMyyFromfcNEQ_SEB + kxxMyyFromfcNEQ_SET - kxxMyyFromfcNEQ_SWB + kxxMyyFromfcNEQ_SWT +
-      2.*kxxMzzFromfcNEQ_NEB - 2.*kxxMzzFromfcNEQ_NET + 2.*kxxMzzFromfcNEQ_NWB - 2.*kxxMzzFromfcNEQ_NWT +
-      2.*kxxMzzFromfcNEQ_SEB - 2.*kxxMzzFromfcNEQ_SET + 2.*kxxMzzFromfcNEQ_SWB - 2.*kxxMzzFromfcNEQ_SWT -
-      2.*vx1_NEB + 2.*vx1_NET + 2.*vx1_NWB - 2.*vx1_NWT -
-      2.*vx1_SEB + 2.*vx1_SET + 2.*vx1_SWB - 2.*vx1_SWT -
-      2.*vx2_NEB + 2.*vx2_NET - 2.*vx2_NWB + 2.*vx2_NWT +
-      2.*vx2_SEB - 2.*vx2_SET + 2.*vx2_SWB - 2.*vx2_SWT)/16.;
-   axy= (vx1_NEB + vx1_NET - vx1_NWB - vx1_NWT - vx1_SEB - vx1_SET + vx1_SWB + vx1_SWT)/2.;
-   bxy= (vx2_NEB + vx2_NET - vx2_NWB - vx2_NWT - vx2_SEB - vx2_SET + vx2_SWB + vx2_SWT)/2.;
-   cxy= (vx3_NEB + vx3_NET - vx3_NWB - vx3_NWT - vx3_SEB - vx3_SET + vx3_SWB + vx3_SWT)/2.;
-   axz= (-vx1_NEB + vx1_NET + vx1_NWB - vx1_NWT - vx1_SEB + vx1_SET + vx1_SWB - vx1_SWT)/2.;
-   bxz= (-vx2_NEB + vx2_NET + vx2_NWB - vx2_NWT - vx2_SEB + vx2_SET + vx2_SWB - vx2_SWT)/2.;
-   cxz= (-vx3_NEB + vx3_NET + vx3_NWB - vx3_NWT - vx3_SEB + vx3_SET + vx3_SWB - vx3_SWT)/2.;
-   ayz= (-vx1_NEB + vx1_NET - vx1_NWB + vx1_NWT + vx1_SEB - vx1_SET + vx1_SWB - vx1_SWT)/2.;
-   byz= (-vx2_NEB + vx2_NET - vx2_NWB + vx2_NWT + vx2_SEB - vx2_SET + vx2_SWB - vx2_SWT)/2.;
-   cyz= (-vx3_NEB + vx3_NET - vx3_NWB + vx3_NWT + vx3_SEB - vx3_SET + vx3_SWB - vx3_SWT)/2.;
-   axyz=-vx1_NEB + vx1_NET + vx1_NWB - vx1_NWT + vx1_SEB - vx1_SET - vx1_SWB + vx1_SWT;
-   bxyz=-vx2_NEB + vx2_NET + vx2_NWB - vx2_NWT + vx2_SEB - vx2_SET - vx2_SWB + vx2_SWT;
-   cxyz=-vx3_NEB + vx3_NET + vx3_NWB - vx3_NWT + vx3_SEB - vx3_SET - vx3_SWB + vx3_SWT;
-
-   kxyAverage       =0;
-   kyzAverage       =0;
-   kxzAverage       =0;
-   kxxMyyAverage    =0;
-   kxxMzzAverage    =0;
-   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //
-   // Bernd das Brot
-   //
-   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   a0 = a0 + xoff * ax + yoff * ay + zoff * az + xoff_sq * axx + yoff_sq * ayy + zoff_sq * azz + xoff*yoff*axy + xoff*zoff*axz + yoff*zoff*ayz + xoff*yoff*zoff*axyz ;
-   ax = ax + 2. * xoff * axx + yoff * axy + zoff * axz + yoff*zoff*axyz;
-   ay = ay + 2. * yoff * ayy + xoff * axy + zoff * ayz + xoff*zoff*axyz;
-   az = az + 2. * zoff * azz + xoff * axz + yoff * ayz + xoff*yoff*axyz;
-   b0 = b0 + xoff * bx + yoff * by + zoff * bz + xoff_sq * bxx + yoff_sq * byy + zoff_sq * bzz + xoff*yoff*bxy + xoff*zoff*bxz + yoff*zoff*byz + xoff*yoff*zoff*bxyz;
-   bx = bx + 2. * xoff * bxx + yoff * bxy + zoff * bxz + yoff*zoff*bxyz;
-   by = by + 2. * yoff * byy + xoff * bxy + zoff * byz + xoff*zoff*bxyz;
-   bz = bz + 2. * zoff * bzz + xoff * bxz + yoff * byz + xoff*yoff*bxyz;
-   c0 = c0 + xoff * cx + yoff * cy + zoff * cz + xoff_sq * cxx + yoff_sq * cyy + zoff_sq * czz + xoff*yoff*cxy + xoff*zoff*cxz + yoff*zoff*cyz + xoff*yoff*zoff*cxyz;
-   cx = cx + 2. * xoff * cxx + yoff * cxy + zoff * cxz + yoff*zoff*cxyz;
-   cy = cy + 2. * yoff * cyy + xoff * cxy + zoff * cyz + xoff*zoff*cxyz;
-   cz = cz + 2. * zoff * czz + xoff * cxz + yoff * cyz + xoff*yoff*cxyz;
-   axy= axy + zoff*axyz;
-   axz= axz + yoff*axyz;
-   ayz= ayz + xoff*axyz;
-   bxy= bxy + zoff*bxyz;
-   bxz= bxz + yoff*bxyz;
-   byz= byz + xoff*bxyz;
-   cxy= cxy + zoff*cxyz;
-   cxz= cxz + yoff*cxyz;
-   cyz= cyz + xoff*cxyz;
-   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-   real dxux = ax + 0.5*axx*xs+ 0.25*(axy*ys+axz*zs)+0.0625*axyz*ys*zs;
-   real dyuy = by + 0.5 * byy * ys + 0.25 * (bxy * xs + byz * zs) + 0.0625 * bxyz * xs * zs;
-   real dzuz = cz + 0.5 * czz * zs + 0.25 * (cxz * xs + cyz * ys) + 0.0625 * cxyz * xs * ys;
-
-   real Dxy = bx + 0.5 * bxx * xs + 0.25 * (bxy * ys + bxz * zs) + 0.0625 * bxyz * ys * zs + ay + 0.5 * ayy * ys + 0.25 * (axy * xs + ayz * zs) + 0.0625 * axyz * xs * zs;
-   real Dxz = cx + 0.5 * cxx * xs + 0.25 * (cxy * ys + cxz * zs) + 0.0625 * cxyz * ys * zs + az + 0.5 * azz * zs + 0.25 * (axz * xs + ayz * ys) + 0.0625 * axyz * xs * ys;
-   real Dyz = cy + 0.5 * cyy * ys + 0.25 * (cxy * xs + cyz * zs) + 0.0625 * cxyz * xs * zs + bz + 0.5 * bzz * zs + 0.25 * (bxz * xs + byz * ys) + 0.0625 * bxyz * xs * ys;
-
-   shearRate = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz);
-
-
-   real o = Rheology::getHerschelBulkleyCollFactorBackward(shearRate, rho); //omega;
-
-   if (o < omegaMin)
-      o = omegaMin;
-
-   f_E = eps_new*((2*(-2*ax + by + cz-kxxMzzAverage-kxxMyyAverage))/(27.*o));
-   f_N = eps_new*((2*(ax - 2*by + cz+2*kxxMyyAverage-kxxMzzAverage))/(27.*o));
-   f_T = eps_new*((2*(ax + by - 2*cz-kxxMyyAverage+2*kxxMzzAverage))/(27.*o));
-   f_NE = eps_new*(-(ax + 3*ay + 3*bx + by - 2*cz+2*kxxMyyAverage-kxxMyyAverage+3*kxyAverage)/(54.*o));
-   f_SE = eps_new*(-(ax - 3*ay - 3*bx + by - 2*cz+2*kxxMyyAverage-kxxMyyAverage-3*kxyAverage)/(54.*o));
-   f_TE = eps_new*(-(ax + 3*az - 2*by + 3*cx + cz+2*kxxMyyAverage-kxxMzzAverage+3*kxzAverage)/(54.*o));
-   f_BE = eps_new*(-(ax - 3*az - 2*by - 3*cx + cz+2*kxxMyyAverage-kxxMzzAverage-3*kxzAverage)/(54.*o));
-   f_TN = eps_new*(-(-2*ax + by + 3*bz + 3*cy + cz-kxxMyyAverage-kxxMzzAverage+3*kyzAverage)/(54.*o));
-   f_BN = eps_new*(-(-2*ax + by - 3*bz - 3*cy + cz-kxxMyyAverage-kxxMzzAverage-3*kyzAverage)/(54.*o));
-   f_ZERO = 0.;
-   f_TNE = eps_new*(-(ay + az + bx + bz + cx + cy+kxyAverage+kxzAverage+kyzAverage)/(72.*o));
-   f_TSW = eps_new*((-ay + az - bx + bz + cx + cy-kxyAverage+kxzAverage+kyzAverage)/(72.*o));
-   f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(72.*o));
-   f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(72.*o));
-
-   x_E = 0.25*eps_new*((2*(-4*axx + bxy + cxz))/(27.*o));
-   x_N = 0.25*eps_new*((2*(2*axx - 2*bxy + cxz))/(27.*o));
-   x_T = 0.25*eps_new*((2*(2*axx + bxy - 2*cxz))/(27.*o));
-   x_NE = 0.25*eps_new*(-((2*axx + 3*axy + 6*bxx + bxy - 2*cxz))/(54.*o));
-   x_SE = 0.25*eps_new*(-((2*axx - 3*axy - 6*bxx + bxy - 2*cxz))/(54.*o));
-   x_TE = 0.25*eps_new*(-((2*axx + 3*axz - 2*bxy + 6*cxx + cxz))/(54.*o));
-   x_BE = 0.25*eps_new*(-((2*axx - 3*axz - 2*bxy - 6*cxx + cxz))/(54.*o));
-   x_TN = 0.25*eps_new*(-((-4*axx + bxy + 3*bxz + 3*cxy + cxz))/(54.*o));
-   x_BN = 0.25*eps_new*(-((-4*axx + bxy - 3*bxz - 3*cxy + cxz))/(54.*o));
-   x_ZERO = 0.;
-   x_TNE = 0.25*eps_new*(-((axy + axz + 2*bxx + bxz + 2*cxx + cxy))/(72.*o));
-   x_TSW = 0.25*eps_new*(((-axy + axz - 2*bxx + bxz + 2*cxx + cxy))/(72.*o));
-   x_TSE = 0.25*eps_new*(((axy - axz + 2*bxx + bxz - 2*cxx + cxy))/(72.*o));
-   x_TNW = 0.25*eps_new*(((axy + axz + 2*bxx - bxz + 2*cxx - cxy))/(72.*o));
-
-   y_E = 0.25*eps_new*(2*(-2*axy + 2*byy + cyz))/(27.*o);
-   y_N = 0.25*eps_new*(2*(axy - 4*byy + cyz))/(27.*o);
-   y_T = 0.25*eps_new*(2*(axy + 2*byy - 2*cyz))/(27.*o);
-   y_NE = 0.25*eps_new*(-((axy + 6*ayy + 3*bxy + 2*byy - 2*cyz))/(54.*o));
-   y_SE = 0.25*eps_new*(-((axy - 6*ayy - 3*bxy + 2*byy - 2*cyz))/(54.*o));
-   y_TE = 0.25*eps_new*(-((axy + 3*ayz - 4*byy + 3*cxy + cyz))/(54.*o));
-   y_BE = 0.25*eps_new*(-((axy - 3*ayz - 4*byy - 3*cxy + cyz))/(54.*o));
-   y_TN = 0.25*eps_new*(-((-2*axy + 2*byy + 3*byz + 6*cyy + cyz))/(54.*o));
-   y_BN = 0.25*eps_new*(-((-2*axy + 2*byy - 3*byz - 6*cyy + cyz))/(54.*o));
-   y_ZERO = 0.;
-   y_TNE = 0.25*eps_new*(-((2*ayy + ayz + bxy + byz + cxy + 2*cyy))/(72.*o));
-   y_TSW = 0.25*eps_new*(((-2*ayy + ayz - bxy + byz + cxy + 2*cyy))/(72.*o));
-   y_TSE = 0.25*eps_new*(((2*ayy - ayz + bxy + byz - cxy + 2*cyy))/(72.*o));
-   y_TNW = 0.25*eps_new*(((2*ayy + ayz + bxy - byz + cxy - 2*cyy))/(72.*o));
-
-   z_E = 0.25*eps_new*((2*(-2*axz + byz + 2*czz))/(27.*o));
-   z_N = 0.25*eps_new*((2*(axz - 2*byz + 2*czz))/(27.*o));
-   z_T = 0.25*eps_new*((2*(axz + byz - 4*czz))/(27.*o));
-   z_NE = 0.25*eps_new*(-((axz + 3*ayz + 3*bxz + byz - 4*czz))/(54.*o));
-   z_SE = 0.25*eps_new*(-((axz - 3*ayz - 3*bxz + byz - 4*czz))/(54.*o));
-   z_TE = 0.25*eps_new*(-((axz + 6*azz - 2*byz + 3*cxz + 2*czz))/(54.*o));
-   z_BE = 0.25*eps_new*(-((axz - 6*azz - 2*byz - 3*cxz + 2*czz))/(54.*o));
-   z_TN = 0.25*eps_new*(-((-2*axz + byz + 6*bzz + 3*cyz + 2*czz))/(54.*o));
-   z_BN = 0.25*eps_new*(-((-2*axz + byz - 6*bzz - 3*cyz + 2*czz))/(54.*o));
-   z_ZERO = 0.;
-   z_TNE = 0.25*eps_new*(-((ayz + 2*azz + bxz + 2*bzz + cxz + cyz))/(72.*o));
-   z_TSW = 0.25*eps_new*(((-ayz + 2*azz - bxz + 2*bzz + cxz + cyz))/(72.*o));
-   z_TSE = 0.25*eps_new*(((ayz - 2*azz + bxz + 2*bzz - cxz + cyz))/(72.*o));
-   z_TNW = 0.25*eps_new*(((ayz + 2*azz + bxz - 2*bzz + cxz - cyz))/(72.*o));
-
-   xy_E   =   0.0625*eps_new *((                       2.*cxyz)/(27.*o));
-   xy_N   =   0.0625*eps_new *((                       2.*cxyz)/(27.*o));
-   xy_T   = -(0.0625*eps_new *((                       4.*cxyz)/(27.*o)));
-   xy_NE  =   0.0625*eps_new *(                            cxyz /(27.*o));
-   xy_SE  =   0.0625*eps_new *(                            cxyz /(27.*o));
-   xy_TE  = -(0.0625*eps_new *(( 3.*axyz            +     cxyz)/(54.*o)));
-   xy_BE  = -(0.0625*eps_new *((-3.*axyz            +     cxyz)/(54.*o)));
-   xy_TN  = -(0.0625*eps_new *((            3.*bxyz +     cxyz)/(54.*o)));
-   xy_BN  = -(0.0625*eps_new *((          - 3.*bxyz +     cxyz)/(54.*o)));
-
-   xy_TNE = -(0.0625*eps_new *((     axyz +     bxyz           )/(72.*o)));
-   xy_TSW =   0.0625*eps_new *((     axyz +     bxyz           )/(72.*o));
-   xy_TSE =   0.0625*eps_new *((-    axyz +     bxyz           )/(72.*o));
-   xy_TNW =   0.0625*eps_new *((     axyz -     bxyz           )/(72.*o));
-
-   xz_E   =   0.0625*eps_new *((            2.*bxyz           )/(27.*o));
-   xz_N   = -(0.0625*eps_new *((            4.*bxyz           )/(27.*o)));
-   xz_T   =   0.0625*eps_new *((            2.*bxyz           )/(27.*o));
-   xz_NE  = -(0.0625*eps_new *(( 3.*axyz +     bxyz           )/(54.*o)));
-   xz_SE  = -(0.0625*eps_new *((-3.*axyz +     bxyz           )/(54.*o)));
-   xz_TE  =   0.0625*eps_new *((                bxyz           )/(27.*o));
-   xz_BE  =   0.0625*eps_new *((                bxyz           )/(27.*o));
-   xz_TN  = -(0.0625*eps_new *((                bxyz + 3.*cxyz)/(54.*o)));
-   xz_BN  = -(0.0625*eps_new *((                bxyz - 3.*cxyz)/(54.*o)));
-
-   xz_TNE = -(0.0625*eps_new *((     axyz            +     cxyz)/(72.*o)));
-   xz_TSW =   0.0625*eps_new *((-    axyz            +     cxyz)/(72.*o));
-   xz_TSE =   0.0625*eps_new *((     axyz            +     cxyz)/(72.*o));
-   xz_TNW =   0.0625*eps_new *((     axyz            -     cxyz)/(72.*o));
-
-   yz_E   = -(0.0625*eps_new *(( 4.*axyz                      )/(27.*o)));
-   yz_N   =   0.0625*eps_new *(( 2.*axyz                      )/(27.*o));
-   yz_T   =   0.0625*eps_new *(( 2.*axyz                      )/(27.*o));
-   yz_NE  = -(0.0625*eps_new *((     axyz + 3.*bxyz           )/(54.*o)));
-   yz_SE  = -(0.0625*eps_new *((     axyz - 3.*bxyz           )/(54.*o)));
-   yz_TE  = -(0.0625*eps_new *((     axyz            + 3.*cxyz)/(54.*o)));
-   yz_BE  = -(0.0625*eps_new *((     axyz            - 3.*cxyz)/(54.*o)));
-   yz_TN  =   0.0625*eps_new *((     axyz                      )/(27.*o));
-   yz_BN  =   0.0625*eps_new *((     axyz                      )/(27.*o));
-
-   yz_TNE = -(0.0625*eps_new *((                bxyz +     cxyz)/(72.*o)));
-   yz_TSW =   0.0625*eps_new *((          -     bxyz +     cxyz)/(72.*o));
-   yz_TSE =   0.0625*eps_new *((                bxyz -     cxyz)/(72.*o));
-   yz_TNW =   0.0625*eps_new *((                bxyz +     cxyz)/(72.*o));
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyInterpolator::calcInterpolatedNode(real* f, /*real omega,*/ real x, real y, real z, real press, real xs, real ys, real zs)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   real rho  = press ;
-   real vx1  = a0 + 0.25*( xs*ax + ys*ay + zs*az) + 0.0625*(axx + xs*ys*axy + xs*zs*axz + ayy + ys*zs*ayz + azz) + 0.015625*(xs*ys*zs*axyz);
-   real vx2  = b0 + 0.25*( xs*bx + ys*by + zs*bz) + 0.0625*(bxx + xs*ys*bxy + xs*zs*bxz + byy + ys*zs*byz + bzz) + 0.015625*(xs*ys*zs*bxyz);
-   real vx3  = c0 + 0.25*( xs*cx + ys*cy + zs*cz) + 0.0625*(cxx + xs*ys*cxy + xs*zs*cxz + cyy + ys*zs*cyz + czz) + 0.015625*(xs*ys*zs*cxyz);
-
-   real feq[ENDF+1];
-   D3Q27System::calcIncompFeq(feq,rho,vx1,vx2,vx3);
-
-   f[dP00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[dP00];
-   f[dM00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[dM00];
-   f[d0P0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[d0P0];
-   f[d0M0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[d0M0];
-   f[d00P]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[d00P];
-   f[d00M]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[d00M];
-   f[dPP0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[dPP0];
-   f[dMM0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[dMM0];
-   f[dPM0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[dPM0];
-   f[dMP0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[dMP0];
-   f[dP0P]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[dP0P];
-   f[dM0M]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[dM0M];
-   f[dP0M]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[dP0M];
-   f[dM0P]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[dM0P];
-   f[d0PP]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[d0PP];
-   f[d0MM]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[d0MM];
-   f[d0PM]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[d0PM];
-   f[d0MP]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[d0MP];
-   f[dPPP]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[dPPP];
-   f[dMMP]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[dMMP];
-   f[dPMP]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[dPMP];
-   f[dMPP]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[dMPP];
-   f[dPPM]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[dPPM];
-   f[dMMM]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[dMMM];
-   f[dPMM]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[dPMM];
-   f[dMPM]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[dMPM];
-   f[d000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO                                                 + feq[d000];
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SWB -0.25, -0.25, -0.25
-real RheologyInterpolator::calcPressBSW()
-{
-   return   press_SWT * (0.140625 + 0.1875 * xoff + 0.1875 * yoff - 0.5625 * zoff) +
-      press_NWT * (0.046875 + 0.0625 * xoff - 0.1875 * yoff - 0.1875 * zoff) +
-      press_SET * (0.046875 - 0.1875 * xoff + 0.0625 * yoff - 0.1875 * zoff) +
-      press_NET * (0.015625 - 0.0625 * xoff - 0.0625 * yoff - 0.0625 * zoff) +
-      press_NEB * (0.046875 - 0.1875 * xoff - 0.1875 * yoff + 0.0625 * zoff) +
-      press_NWB * (0.140625 + 0.1875 * xoff - 0.5625 * yoff + 0.1875 * zoff) +
-      press_SEB * (0.140625 - 0.5625 * xoff + 0.1875 * yoff + 0.1875 * zoff) +
-      press_SWB * (0.421875 + 0.5625 * xoff + 0.5625 * yoff + 0.5625 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SWT -0.25, -0.25, 0.25
-real RheologyInterpolator::calcPressTSW()
-{
-   return   press_SWT * (0.421875 + 0.5625 * xoff + 0.5625 * yoff - 0.5625 * zoff) +
-      press_NWT * (0.140625 + 0.1875 * xoff - 0.5625 * yoff - 0.1875 * zoff) +
-      press_SET * (0.140625 - 0.5625 * xoff + 0.1875 * yoff - 0.1875 * zoff) +
-      press_NET * (0.046875 - 0.1875 * xoff - 0.1875 * yoff - 0.0625 * zoff) +
-      press_NEB * (0.015625 - 0.0625 * xoff - 0.0625 * yoff + 0.0625 * zoff) +
-      press_NWB * (0.046875 + 0.0625 * xoff - 0.1875 * yoff + 0.1875 * zoff) +
-      press_SEB * (0.046875 - 0.1875 * xoff + 0.0625 * yoff + 0.1875 * zoff) +
-      press_SWB * (0.140625 + 0.1875 * xoff + 0.1875 * yoff + 0.5625 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SET 0.25, -0.25, 0.25
-real RheologyInterpolator::calcPressTSE()
-{
-   return   press_SET * (0.421875 - 0.5625 * xoff + 0.5625 * yoff - 0.5625 * zoff) +
-      press_NET * (0.140625 - 0.1875 * xoff - 0.5625 * yoff - 0.1875 * zoff) +
-      press_SWT * (0.140625 + 0.5625 * xoff + 0.1875 * yoff - 0.1875 * zoff) +
-      press_NWT * (0.046875 + 0.1875 * xoff - 0.1875 * yoff - 0.0625 * zoff) +
-      press_NWB * (0.015625 + 0.0625 * xoff - 0.0625 * yoff + 0.0625 * zoff) +
-      press_NEB * (0.046875 - 0.0625 * xoff - 0.1875 * yoff + 0.1875 * zoff) +
-      press_SWB * (0.046875 + 0.1875 * xoff + 0.0625 * yoff + 0.1875 * zoff) +
-      press_SEB * (0.140625 - 0.1875 * xoff + 0.1875 * yoff + 0.5625 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SEB 0.25, -0.25, -0.25
-real RheologyInterpolator::calcPressBSE()
-{
-   return   press_SET * (0.140625 - 0.1875 * xoff + 0.1875 * yoff - 0.5625 * zoff) +
-      press_NET * (0.046875 - 0.0625 * xoff - 0.1875 * yoff - 0.1875 * zoff) +
-      press_SWT * (0.046875 + 0.1875 * xoff + 0.0625 * yoff - 0.1875 * zoff) +
-      press_NWT * (0.015625 + 0.0625 * xoff - 0.0625 * yoff - 0.0625 * zoff) +
-      press_NWB * (0.046875 + 0.1875 * xoff - 0.1875 * yoff + 0.0625 * zoff) +
-      press_NEB * (0.140625 - 0.1875 * xoff - 0.5625 * yoff + 0.1875 * zoff) +
-      press_SWB * (0.140625 + 0.5625 * xoff + 0.1875 * yoff + 0.1875 * zoff) +
-      press_SEB * (0.421875 - 0.5625 * xoff + 0.5625 * yoff + 0.5625 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NWB -0.25, 0.25, -0.25
-real RheologyInterpolator::calcPressBNW()
-{
-   return   press_NWT * (0.140625 + 0.1875 * xoff - 0.1875 * yoff - 0.5625 * zoff) +
-      press_NET * (0.046875 - 0.1875 * xoff - 0.0625 * yoff - 0.1875 * zoff) +
-      press_SWT * (0.046875 + 0.0625 * xoff + 0.1875 * yoff - 0.1875 * zoff) +
-      press_SET * (0.015625 - 0.0625 * xoff + 0.0625 * yoff - 0.0625 * zoff) +
-      press_SEB * (0.046875 - 0.1875 * xoff + 0.1875 * yoff + 0.0625 * zoff) +
-      press_NEB * (0.140625 - 0.5625 * xoff - 0.1875 * yoff + 0.1875 * zoff) +
-      press_SWB * (0.140625 + 0.1875 * xoff + 0.5625 * yoff + 0.1875 * zoff) +
-      press_NWB * (0.421875 + 0.5625 * xoff - 0.5625 * yoff + 0.5625 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NWT -0.25, 0.25, 0.25
-real RheologyInterpolator::calcPressTNW()
-{
-   return   press_NWT * (0.421875 + 0.5625 * xoff - 0.5625 * yoff - 0.5625 * zoff) +
-      press_NET * (0.140625 - 0.5625 * xoff - 0.1875 * yoff - 0.1875 * zoff) +
-      press_SWT * (0.140625 + 0.1875 * xoff + 0.5625 * yoff - 0.1875 * zoff) +
-      press_SET * (0.046875 - 0.1875 * xoff + 0.1875 * yoff - 0.0625 * zoff) +
-      press_SEB * (0.015625 - 0.0625 * xoff + 0.0625 * yoff + 0.0625 * zoff) +
-      press_NEB * (0.046875 - 0.1875 * xoff - 0.0625 * yoff + 0.1875 * zoff) +
-      press_SWB * (0.046875 + 0.0625 * xoff + 0.1875 * yoff + 0.1875 * zoff) +
-      press_NWB * (0.140625 + 0.1875 * xoff - 0.1875 * yoff + 0.5625 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NET 0.25, 0.25, 0.25
-real RheologyInterpolator::calcPressTNE()
-{
-   return   press_NET * (0.421875 - 0.5625 * xoff - 0.5625 * yoff - 0.5625 * zoff) +
-      press_NWT * (0.140625 + 0.5625 * xoff - 0.1875 * yoff - 0.1875 * zoff) +
-      press_SET * (0.140625 - 0.1875 * xoff + 0.5625 * yoff - 0.1875 * zoff) +
-      press_SWT * (0.046875 + 0.1875 * xoff + 0.1875 * yoff - 0.0625 * zoff) +
-      press_SWB * (0.015625 + 0.0625 * xoff + 0.0625 * yoff + 0.0625 * zoff) +
-      press_NWB * (0.046875 + 0.1875 * xoff - 0.0625 * yoff + 0.1875 * zoff) +
-      press_SEB * (0.046875 - 0.0625 * xoff + 0.1875 * yoff + 0.1875 * zoff) +
-      press_NEB * (0.140625 - 0.1875 * xoff - 0.1875 * yoff + 0.5625 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NEB 0.25, 0.25, -0.25
-real RheologyInterpolator::calcPressBNE()
-{
-   return   press_NET * (0.140625 - 0.1875 * xoff - 0.1875 * yoff - 0.5625 * zoff) +
-      press_NWT * (0.046875 + 0.1875 * xoff - 0.0625 * yoff - 0.1875 * zoff) +
-      press_SET * (0.046875 - 0.0625 * xoff + 0.1875 * yoff - 0.1875 * zoff) +
-      press_SWT * (0.015625 + 0.0625 * xoff + 0.0625 * yoff - 0.0625 * zoff) +
-      press_SWB * (0.046875 + 0.1875 * xoff + 0.1875 * yoff + 0.0625 * zoff) +
-      press_NWB * (0.140625 + 0.5625 * xoff - 0.1875 * yoff + 0.1875 * zoff) +
-      press_SEB * (0.140625 - 0.1875 * xoff + 0.5625 * yoff + 0.1875 * zoff) +
-      press_NEB * (0.421875 - 0.5625 * xoff - 0.5625 * yoff + 0.5625 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position C 0.0, 0.0, 0.0
-void RheologyInterpolator::calcInterpolatedNodeFC(real* f, real omega)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   real press  =  press_NET * (0.125 - 0.25 * xoff - 0.25 * yoff - 0.25 * zoff) +
-      press_NWT * (0.125 + 0.25 * xoff - 0.25 * yoff - 0.25 * zoff) +
-      press_SET * (0.125 - 0.25 * xoff + 0.25 * yoff - 0.25 * zoff) +
-      press_SWT * (0.125 + 0.25 * xoff + 0.25 * yoff - 0.25 * zoff) +
-      press_NEB * (0.125 - 0.25 * xoff - 0.25 * yoff + 0.25 * zoff) +
-      press_NWB * (0.125 + 0.25 * xoff - 0.25 * yoff + 0.25 * zoff) +
-      press_SEB * (0.125 - 0.25 * xoff + 0.25 * yoff + 0.25 * zoff) +
-      press_SWB * (0.125 + 0.25 * xoff + 0.25 * yoff + 0.25 * zoff);
-   real vx1  = a0;
-   real vx2  = b0;
-   real vx3  = c0;
-
-   real rho = press ;
-
-   real feq[ENDF+1];
-   D3Q27System::calcIncompFeq(feq,rho,vx1,vx2,vx3);
-
-   real eps_new = 2.;
-   
-
-   real dxux = ax;
-   real dyuy = by;
-   real dzuz = cz;
-
-   real Dxy = bx + ay;
-   real Dxz = cx + az;
-   real Dyz = cy + bz;
-
-   shearRate = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz);
-
-
-   real o = Rheology::getHerschelBulkleyCollFactorBackward(shearRate, rho); //omega;
-
-   if (o < omegaMin)
-      o = omegaMin;
-
-   f_E = eps_new*((2*(-2*ax + by + cz-kxxMzzAverage-kxxMyyAverage))/(27.*o));
-   f_N = eps_new*((2*(ax - 2*by + cz+2*kxxMyyAverage-kxxMzzAverage))/(27.*o));
-   f_T = eps_new*((2*(ax + by - 2*cz-kxxMyyAverage+2*kxxMzzAverage))/(27.*o));
-   f_NE = eps_new*(-(ax + 3*ay + 3*bx + by - 2*cz+2*kxxMyyAverage-kxxMyyAverage+3*kxyAverage)/(54.*o));
-   f_SE = eps_new*(-(ax - 3*ay - 3*bx + by - 2*cz+2*kxxMyyAverage-kxxMyyAverage-3*kxyAverage)/(54.*o));
-   f_TE = eps_new*(-(ax + 3*az - 2*by + 3*cx + cz+2*kxxMyyAverage-kxxMzzAverage+3*kxzAverage)/(54.*o));
-   f_BE = eps_new*(-(ax - 3*az - 2*by - 3*cx + cz+2*kxxMyyAverage-kxxMzzAverage-3*kxzAverage)/(54.*o));
-   f_TN = eps_new*(-(-2*ax + by + 3*bz + 3*cy + cz-kxxMyyAverage-kxxMzzAverage+3*kyzAverage)/(54.*o));
-   f_BN = eps_new*(-(-2*ax + by - 3*bz - 3*cy + cz-kxxMyyAverage-kxxMzzAverage-3*kyzAverage)/(54.*o));
-   f_ZERO = 0.;
-   f_TNE = eps_new*(-(ay + az + bx + bz + cx + cy+kxyAverage+kxzAverage+kyzAverage)/(72.*o));
-   f_TSW = eps_new*((-ay + az - bx + bz + cx + cy-kxyAverage+kxzAverage+kyzAverage)/(72.*o));
-   f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(72.*o));
-   f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(72.*o));
-
-   f[dP00]    = f_E    + feq[dP00];
-   f[dM00]    = f_E    + feq[dM00];
-   f[d0P0]    = f_N    + feq[d0P0];
-   f[d0M0]    = f_N    + feq[d0M0];
-   f[d00P]    = f_T    + feq[d00P];
-   f[d00M]    = f_T    + feq[d00M];
-   f[dPP0]   = f_NE   + feq[dPP0];
-   f[dMM0]   = f_NE   + feq[dMM0];
-   f[dPM0]   = f_SE   + feq[dPM0];
-   f[dMP0]   = f_SE   + feq[dMP0];
-   f[dP0P]   = f_TE   + feq[dP0P];
-   f[dM0M]   = f_TE   + feq[dM0M];
-   f[dP0M]   = f_BE   + feq[dP0M];
-   f[dM0P]   = f_BE   + feq[dM0P];
-   f[d0PP]   = f_TN   + feq[d0PP];
-   f[d0MM]   = f_TN   + feq[d0MM];
-   f[d0PM]   = f_BN   + feq[d0PM];
-   f[d0MP]   = f_BN   + feq[d0MP];
-   f[dPPP]  = f_TNE  + feq[dPPP];
-   f[dMPP]  = f_TNW  + feq[dMPP];
-   f[dPMP]  = f_TSE  + feq[dPMP];
-   f[dMMP]  = f_TSW  + feq[dMMP];
-   f[dPPM]  = f_TSW  + feq[dPPM];
-   f[dMPM]  = f_TSE  + feq[dMPM];
-   f[dPMM]  = f_TNW  + feq[dPMM];
-   f[dMMM]  = f_TNE  + feq[dMMM];
-   f[d000] = f_ZERO + feq[d000];
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3)
-{
-	vx1  = a0 + ax*x + ay*y + az*z + axx*x*x + ayy*y*y + azz*z*z + axy*x*y + axz*x*z + ayz*y*z+axyz*x*y*z;
-	vx2  = b0 + bx*x + by*y + bz*z + bxx*x*x + byy*y*y + bzz*z*z + bxy*x*y + bxz*x*z + byz*y*z+bxyz*x*y*z;
-	vx3  = c0 + cx*x + cy*y + cz*z + cxx*x*x + cyy*y*y + czz*z*z + cxy*x*y + cxz*x*z + cyz*y*z+cxyz*x*y*z;
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyInterpolator::calcInterpolatedShearStress(real x, real y, real z,real& tauxx, real& tauyy, real& tauzz,real& tauxy, real& tauxz, real& tauyz)
-{
-	tauxx=ax+2*axx*x+axy*y+axz*z+axyz*y*z;
-	tauyy=by+2*byy*y+bxy*x+byz*z+bxyz*x*z;
-	tauzz=cz+2*czz*z+cxz*x+cyz*y+cxyz*x*y;
-	tauxy=0.5*((ay+2.0*ayy*y+axy*x+ayz*z+axyz*x*z)+(bx+2.0*bxx*x+bxy*y+bxz*z+bxyz*y*z));
-	tauxz=0.5*((az+2.0*azz*z+axz*x+ayz*y+axyz*x*y)+(cx+2.0*cxx*x+cxy*y+cxz*z+cxyz*y*z));
-	tauyz=0.5*((bz+2.0*bzz*z+bxz*x+byz*y+bxyz*x*y)+(cy+2.0*cyy*y+cxy*x+cyz*z+cxyz*x*z));
-}
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.h b/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.h
deleted file mode 100644
index 4b9391df278dc3e69a08df8a1400e3871ca7f067..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.h
+++ /dev/null
@@ -1,106 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __         
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |        
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |        
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |        
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____    
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|   
-//      \    \  |    |   ________________________________________________________________    
-//       \    \ |    |  |  ______________________________________________________________|   
-//        \    \|    |  |  |         __          __     __     __     ______      _______    
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)   
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______    
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |   
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/   
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can 
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of 
-//  the License, or (at your option) any later version.
-//  
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT 
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
-//  for more details.
-//  
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyInterpolator.h
-//! \ingroup LBM
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef RheologyInterpolator_H_
-#define RheologyInterpolator_H_
-
-#include "Interpolation/Interpolator.h"
-#include "D3Q27System.h"
-
-//! \brief A class implements an interpolation function of grid refinement for thixotropic fluid.
-
-class RheologyInterpolator : public Interpolator
-{
-public:
-   RheologyInterpolator();
-   RheologyInterpolator(real omegaC, real omegaF, real omegaMin);
-   InterpolationProcessorPtr clone();
-   void setOmegas(real omegaC, real omegaF);
-   void setOmegaMin(real omegaMin);
-   void interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF);
-   void interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF, real xoff, real yoff, real zoff);
-   void interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC); 
-   void interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC, real xoff, real yoff, real zoff); 
-   //real forcingC, forcingF;
-protected:   
-private:
-   real omegaC, omegaF;
-   real a0, ax, ay, az, axx, ayy, azz, axy, axz, ayz, b0, bx, by, bz, bxx, byy, bzz, bxy, bxz, byz, c0, cx, cy, cz, cxx, cyy, czz, cxy, cxz, cyz, axyz, bxyz, cxyz;
-   real xoff,    yoff,    zoff;
-   real xoff_sq, yoff_sq, zoff_sq;
-   real press_SWT, press_NWT, press_NET, press_SET, press_SWB, press_NWB, press_NEB, press_SEB;
-
-   real  f_E,  f_N,  f_T,  f_NE,  f_SE,  f_BE,  f_TE,  f_TN,  f_BN,  f_TNE,  f_TNW,  f_TSE,  f_TSW,  f_ZERO;
-   real  x_E,  x_N,  x_T,  x_NE,  x_SE,  x_BE,  x_TE,  x_TN,  x_BN,  x_TNE,  x_TNW,  x_TSE,  x_TSW,  x_ZERO;
-   real  y_E,  y_N,  y_T,  y_NE,  y_SE,  y_BE,  y_TE,  y_TN,  y_BN,  y_TNE,  y_TNW,  y_TSE,  y_TSW,  y_ZERO;
-   real  z_E,  z_N,  z_T,  z_NE,  z_SE,  z_BE,  z_TE,  z_TN,  z_BN,  z_TNE,  z_TNW,  z_TSE,  z_TSW,  z_ZERO;
-   real xy_E, xy_N, xy_T, xy_NE, xy_SE, xy_BE, xy_TE, xy_TN, xy_BN, xy_TNE, xy_TNW, xy_TSE, xy_TSW/*, xy_ZERO*/;
-   real xz_E, xz_N, xz_T, xz_NE, xz_SE, xz_BE, xz_TE, xz_TN, xz_BN, xz_TNE, xz_TNW, xz_TSE, xz_TSW/*, xz_ZERO*/;
-   real yz_E, yz_N, yz_T, yz_NE, yz_SE, yz_BE, yz_TE, yz_TN, yz_BN, yz_TNE, yz_TNW, yz_TSE, yz_TSW/*, yz_ZERO*/;
-
-   real kxyAverage, kyzAverage, kxzAverage, kxxMyyAverage, kxxMzzAverage; 
-
-   real rho;
-   real shearRate;
-
-   real omegaMin;
-
-   void setOffsets(real xoff, real yoff, real zoff);
-   void calcMoments(const real* const f, real omegaInf, real& rho, real& vx1, real& vx2, real& vx3,
-      real& kxy, real& kyz, real& kxz, real& kxxMyy, real& kxxMzz);
-   void calcInterpolatedCoefficiets_intern(const D3Q27ICell& icell, real omega, real eps_new, real x, real y, real z, real xs, real ys, real zs);
-   void calcInterpolatedNode(real* f, /*real omega,*/ real x, real y, real z, real press, real xs, real ys, real zs);
-   real calcPressBSW();
-   real calcPressTSW();
-   real calcPressTSE();
-   real calcPressBSE();
-   real calcPressBNW();
-   real calcPressTNW();
-   real calcPressTNE();
-   real calcPressBNE();
-   void calcInterpolatedNodeFC(real* f, real omega);
-   void calcInterpolatedVelocity(real x, real y, real z,real& vx1, real& vx2, real& vx3);
-   void calcInterpolatedShearStress(real x, real y, real z,real& tauxx, real& tauyy, real& tauzz,real& tauxy, real& tauxz, real& tauyz);
-};
-
-//////////////////////////////////////////////////////////////////////////
-inline void RheologyInterpolator::interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF)
-{
-   this->interpolateCoarseToFine(icellC, icellF, 0.0, 0.0, 0.0);
-}
-//////////////////////////////////////////////////////////////////////////
-inline void RheologyInterpolator::interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC)
-{
-   this->interpolateFineToCoarse(icellF, icellC, 0.0, 0.0, 0.0);
-}
-
-#endif
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.cpp b/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.cpp
deleted file mode 100644
index 2981156c4a5f6acc0df336d9d66cc9a9e97d8c1a..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.cpp
+++ /dev/null
@@ -1,1155 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyK17LBMKernel.cpp
-//! \ingroup LBM
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include "RheologyK17LBMKernel.h"
-#include "D3Q27System.h"
-#include "Interpolator.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <math.h>
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include "Block3D.h"
-#include "Rheology.h"
-
-#define PROOF_CORRECTNESS
-
-//using namespace UbMath;
-using namespace vf::basics::constant;
-
-//////////////////////////////////////////////////////////////////////////
-RheologyK17LBMKernel::RheologyK17LBMKernel()
-{
-   this->compressible = true;
-   this->bulkViscosity = 0;
-   this->OxxPyyPzz = 1.0;
-}
-//////////////////////////////////////////////////////////////////////////
-RheologyK17LBMKernel::~RheologyK17LBMKernel(void)
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyK17LBMKernel::initDataSet()
-{
-   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
-   dataSet->setFdistributions(d);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> RheologyK17LBMKernel::clone()
-{
-   SPtr<LBMKernel> kernel(new RheologyK17LBMKernel());
-   kernel->setNX(nx);
-   dynamicPointerCast<RheologyK17LBMKernel>(kernel)->initDataSet();
-   kernel->setCollisionFactor(this->collFactor);
-   kernel->setBCSet(bcSet->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   kernel->setDeltaT(deltaT);
-   kernel->setBlock(block.lock());
-
-   if (bulkViscosity != 0)
-   {
-      OxxPyyPzz = LBMSystem::calcOmega2(bulkViscosity, block.lock()->getLevel());
-   } 
-   else
-   {
-      OxxPyyPzz = c1o1;
-   }
-
-   dynamicPointerCast<RheologyK17LBMKernel>(kernel)->OxxPyyPzz = this->OxxPyyPzz;
-
-   return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyK17LBMKernel::calculate(int step)
-{
-   using namespace D3Q27System;
-   using namespace std;
-   
-   //timer.resetAndStart();
-   
-   //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 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-   ////magic parameter for rheology
-   //LBMReal a = 10;
-   //OxxPyyPzz = c1 / (a * ((c1 / omega) - c1o2) + c1o2);
-   //OxxPyyPzz = (OxxPyyPzz > c1) ? c1 : OxxPyyPzz;
-
-   ////LBMReal OxyyPxzz  = eight*(-two+omega)*(one+two*omega)/(-eight-fourteen*omega+seven*omega*omega);//one;
-   ////LBMReal OxyyMxzz  = eight*(-two+omega)*(-seven+four*omega)/(fiftysix-fifty*omega+nine*omega*omega);//one;
-   ////LBMReal Oxyz      = twentyfour*(-two+omega)*(-two-seven*omega+three*omega*omega)/(fourtyeight+c152*omega-c130*omega*omega+twentynine*omega*omega*omega);
-   //LBMReal OxyyPxzz  = 8.0*(omega-2.0)*(OxxPyyPzz*(3.0*omega-1.0)-5.0*omega)/(8.0*(5.0-2.0*omega)*omega+OxxPyyPzz*(8.0+omega*(9.0*omega-26.0)));
-   //LBMReal OxyyMxzz  = 8.0*(omega-2.0)*(omega+OxxPyyPzz*(3.0*omega-7.0))/(OxxPyyPzz*(56.0-42.0*omega+9.0*omega*omega)-8.0*omega);
-   //LBMReal Oxyz      = 24.0*(omega-2.0)*(4.0*omega*omega+omega*OxxPyyPzz*(18.0-13.0*omega)+OxxPyyPzz*OxxPyyPzz*(2.0+omega*(6.0*omega-11.0)))/(16.0*omega*omega*(omega-6.0)-2.0*omega*OxxPyyPzz*(216.0+5.0*omega*(9.0*omega-46.0))+OxxPyyPzz*OxxPyyPzz*(omega*(3.0*omega-10.0)*(15.0*omega-28.0)-48.0));
-
-   ////LBMReal A = (four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega);
-   ////LBMReal B = (four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega);
-
-   //LBMReal A = (4.0*omega*omega+2.0*omega*OxxPyyPzz*(omega-6.0)+OxxPyyPzz*OxxPyyPzz*(omega*(10.0-3.0*omega)-4.0))/((omega-OxxPyyPzz)*(OxxPyyPzz*(2.0+3.0*omega)-8.0*omega));
-   //LBMReal B = (4.0*omega*OxxPyyPzz*(9.0*omega-16.0)-4.0*omega*omega-2.0*OxxPyyPzz*OxxPyyPzz*(2.0+9.0*omega*(omega-2.0)))/(3.0*(omega-OxxPyyPzz)*(OxxPyyPzz*(2.0+3.0*omega)-8.0*omega));
-
-   for (int x3 = minX3; x3 < maxX3; x3++)
-   {
-      for (int x2 = minX2; x2 < maxX2; x2++)
-      {
-         for (int x1 = minX1; x1 < maxX1; x1++)
-         {
-            if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3))
-            {
-               int x1p = x1 + 1;
-               int x2p = x2 + 1;
-               int x3p = x3 + 1;
-               //////////////////////////////////////////////////////////////////////////
-               //read distribution
-               ////////////////////////////////////////////////////////////////////////////
-               //////////////////////////////////////////////////////////////////////////
-
-               //E   N  T
-               //c   c  c
-               //////////
-               //W   S  B
-               //a   a  a
-
-               //Rest ist b
-
-               //mfxyz
-               //a - negative
-               //b - null
-               //c - positive
-
-               // a b c
-               //-1 0 1
-
-               real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-               real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-               real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-               real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-               real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-               real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-               real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-               real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-               real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-               real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-               real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-               real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-               real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-               real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-               real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-               real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-               real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-               real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-               real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-               real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-               real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-               real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-               real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-               real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-               real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-               real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-               real mfbbb = (*this->zeroDistributions)(x1, x2, x3);
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               real 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;
-
-               real rho = c1o1+drho;
-               ////////////////////////////////////////////////////////////////////////////////////
-               real vvx = ((((mfccc-mfaaa)+(mfcac-mfaca))+((mfcaa-mfacc)+(mfcca-mfaac)))+
-                  (((mfcba-mfabc)+(mfcbc-mfaba))+((mfcab-mfacb)+(mfccb-mfaab)))+
-                  (mfcbb-mfabb))/rho;
-               real vvy = ((((mfccc-mfaaa)+(mfaca-mfcac))+((mfacc-mfcaa)+(mfcca-mfaac)))+
-                  (((mfbca-mfbac)+(mfbcc-mfbaa))+((mfacb-mfcab)+(mfccb-mfaab)))+
-                  (mfbcb-mfbab))/rho;
-               real vvz = ((((mfccc-mfaaa)+(mfcac-mfaca))+((mfacc-mfcaa)+(mfaac-mfcca)))+
-                  (((mfbac-mfbca)+(mfbcc-mfbaa))+((mfabc-mfcba)+(mfcbc-mfaba)))+
-                  (mfbbc-mfbba))/rho;
-               ////////////////////////////////////////////////////////////////////////////////////
-
-               real omega = collFactor;
-
-               //forcing 
-               ///////////////////////////////////////////////////////////////////////////////////////////
-               if (withForcing)
-               {
-                  muX1 = static_cast<real>(x1-1+ix1*maxX1);
-                  muX2 = static_cast<real>(x2-1+ix2*maxX2);
-                  muX3 = static_cast<real>(x3-1+ix3*maxX3);
-
-                  forcingX1 = muForcingX1.Eval();
-                  forcingX2 = muForcingX2.Eval();
-                  forcingX3 = muForcingX3.Eval();
-
-                  vvx += forcingX1*deltaT*0.5; // X
-                  vvy += forcingX2*deltaT*0.5; // Y
-                  vvz += forcingX3*deltaT*0.5; // Z
-               }
-               ///////////////////////////////////////////////////////////////////////////////////////////               
-         ////////////////////////////////////////////////////////////////////////////////////
-               real oMdrho = c1o1; // comp special
-               ////////////////////////////////////////////////////////////////////////////////////
-               real m0, m1, m2;
-               real vx2;
-               real vy2;
-               real vz2;
-               vx2 = vvx*vvx;
-               vy2 = vvy*vvy;
-               vz2 = vvz*vvz;
-               ////////////////////////////////////////////////////////////////////////////////////
-               real wadjust;
-               real qudricLimitP = 0.01;// * 0.0001f;
-               real qudricLimitM = 0.01;// * 0.0001f;
-               real qudricLimitD = 0.01;// * 0.001f;
-               //LBMReal s9 = minusomega;
-               //test
-               //s9 = 0.;
-               ////////////////////////////////////////////////////////////////////////////////////
-               //Hin
-               ////////////////////////////////////////////////////////////////////////////////////
-               // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Z - Dir
-               m2 = mfaaa+mfaac;
-               m1 = mfaac-mfaaa;
-               m0 = m2+mfaab;
-               mfaaa = m0;
-               m0 += c1o36 * oMdrho;
-               mfaab = m1-m0 * vvz;
-               mfaac = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaba+mfabc;
-               m1 = mfabc-mfaba;
-               m0 = m2+mfabb;
-               mfaba = m0;
-               m0 += c1o9 * oMdrho;
-               mfabb = m1-m0 * vvz;
-               mfabc = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaca+mfacc;
-               m1 = mfacc-mfaca;
-               m0 = m2+mfacb;
-               mfaca = m0;
-               m0 += c1o36 * oMdrho;
-               mfacb = m1-m0 * vvz;
-               mfacc = m2- c2o1 *	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbaa+mfbac;
-               m1 = mfbac-mfbaa;
-               m0 = m2+mfbab;
-               mfbaa = m0;
-               m0 += c1o9 * oMdrho;
-               mfbab = m1-m0 * vvz;
-               mfbac = m2- c2o1 *	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbba+mfbbc;
-               m1 = mfbbc-mfbba;
-               m0 = m2+mfbbb;
-               mfbba = m0;
-               m0 += c4o9 * oMdrho;
-               mfbbb = m1-m0 * vvz;
-               mfbbc = m2- c2o1 *	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbca+mfbcc;
-               m1 = mfbcc-mfbca;
-               m0 = m2+mfbcb;
-               mfbca = m0;
-               m0 += c1o9 * oMdrho;
-               mfbcb = m1-m0 * vvz;
-               mfbcc = m2- c2o1 *	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcaa+mfcac;
-               m1 = mfcac-mfcaa;
-               m0 = m2+mfcab;
-               mfcaa = m0;
-               m0 += c1o36 * oMdrho;
-               mfcab = m1-m0 * vvz;
-               mfcac = m2- c2o1 *	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcba+mfcbc;
-               m1 = mfcbc-mfcba;
-               m0 = m2+mfcbb;
-               mfcba = m0;
-               m0 += c1o9 * oMdrho;
-               mfcbb = m1-m0 * vvz;
-               mfcbc = m2- c2o1 *	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcca+mfccc;
-               m1 = mfccc-mfcca;
-               m0 = m2+mfccb;
-               mfcca = m0;
-               m0 += c1o36 * oMdrho;
-               mfccb = m1-m0 * vvz;
-               mfccc = m2- c2o1 *	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               m2 = mfaaa+mfaca;
-               m1 = mfaca-mfaaa;
-               m0 = m2+mfaba;
-               mfaaa = m0;
-               m0 += c1o6 * oMdrho;
-               mfaba = m1-m0 * vvy;
-               mfaca = m2- c2o1 *	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaab+mfacb;
-               m1 = mfacb-mfaab;
-               m0 = m2+mfabb;
-               mfaab = m0;
-               mfabb = m1-m0 * vvy;
-               mfacb = m2- c2o1 *	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaac+mfacc;
-               m1 = mfacc-mfaac;
-               m0 = m2+mfabc;
-               mfaac = m0;
-               m0 += c1o18 * oMdrho;
-               mfabc = m1-m0 * vvy;
-               mfacc = m2- c2o1 *	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbaa+mfbca;
-               m1 = mfbca-mfbaa;
-               m0 = m2+mfbba;
-               mfbaa = m0;
-               m0 += c2o3 * oMdrho;
-               mfbba = m1-m0 * vvy;
-               mfbca = m2- c2o1 *	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbab+mfbcb;
-               m1 = mfbcb-mfbab;
-               m0 = m2+mfbbb;
-               mfbab = m0;
-               mfbbb = m1-m0 * vvy;
-               mfbcb = m2- c2o1 *	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbac+mfbcc;
-               m1 = mfbcc-mfbac;
-               m0 = m2+mfbbc;
-               mfbac = m0;
-               m0 += c2o9 * oMdrho;
-               mfbbc = m1-m0 * vvy;
-               mfbcc = m2- c2o1 *	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcaa+mfcca;
-               m1 = mfcca-mfcaa;
-               m0 = m2+mfcba;
-               mfcaa = m0;
-               m0 += c1o6 * oMdrho;
-               mfcba = m1-m0 * vvy;
-               mfcca = m2- c2o1 *	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcab+mfccb;
-               m1 = mfccb-mfcab;
-               m0 = m2+mfcbb;
-               mfcab = m0;
-               mfcbb = m1-m0 * vvy;
-               mfccb = m2- c2o1 *	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcac+mfccc;
-               m1 = mfccc-mfcac;
-               m0 = m2+mfcbc;
-               mfcac = m0;
-               m0 += c1o18 * oMdrho;
-               mfcbc = m1-m0 * vvy;
-               mfccc = m2- c2o1 *	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 += c1o1 * oMdrho;
-               mfbaa = m1-m0 * vvx;
-               mfcaa = m2- c2o1 *	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaba+mfcba;
-               m1 = mfcba-mfaba;
-               m0 = m2+mfbba;
-               mfaba = m0;
-               mfbba = m1-m0 * vvx;
-               mfcba = m2- c2o1 *	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaca+mfcca;
-               m1 = mfcca-mfaca;
-               m0 = m2+mfbca;
-               mfaca = m0;
-               m0 += c1o3 * oMdrho;
-               mfbca = m1-m0 * vvx;
-               mfcca = m2- c2o1 *	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaab+mfcab;
-               m1 = mfcab-mfaab;
-               m0 = m2+mfbab;
-               mfaab = m0;
-               mfbab = m1-m0 * vvx;
-               mfcab = m2- c2o1 *	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfabb+mfcbb;
-               m1 = mfcbb-mfabb;
-               m0 = m2+mfbbb;
-               mfabb = m0;
-               mfbbb = m1-m0 * vvx;
-               mfcbb = m2- c2o1 *	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfacb+mfccb;
-               m1 = mfccb-mfacb;
-               m0 = m2+mfbcb;
-               mfacb = m0;
-               mfbcb = m1-m0 * vvx;
-               mfccb = m2- c2o1 *	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaac+mfcac;
-               m1 = mfcac-mfaac;
-               m0 = m2+mfbac;
-               mfaac = m0;
-               m0 += c1o3 * oMdrho;
-               mfbac = m1-m0 * vvx;
-               mfcac = m2- c2o1 *	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfabc+mfcbc;
-               m1 = mfcbc-mfabc;
-               m0 = m2+mfbbc;
-               mfabc = m0;
-               mfbbc = m1-m0 * vvx;
-               mfcbc = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfacc+mfccc;
-               m1 = mfccc-mfacc;
-               m0 = m2+mfbcc;
-               mfacc = m0;
-               m0 += c1o9 * oMdrho;
-               mfbcc = m1-m0 * vvx;
-               mfccc = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Cumulants
-               ////////////////////////////////////////////////////////////////////////////////////
-
-               //LBMReal OxxPyyPzz = one; // bulk viscosity
-
-               ////////////////////////////////////////////////////////////
-               //3.
-               //////////////////////////////
-               //LBMReal OxyyPxzz = one;//three  * (two - omega) / (three  - omega);//
-               //LBMReal OxyyMxzz = one;//six    * (two - omega) / (six    - omega);//
-               //LBMReal Oxyz = one;//twelve * (two - omega) / (twelve + omega);//
-
-               //LBMReal OxyyPxzz  = eight*(-two+omega)*(one+two*omega)/(-eight-fourteen*omega+seven*omega*omega);//one;
-
-               //LBMReal OxyyMxzz  = eight*(-two+omega)*(-seven+four*omega)/(fiftysix-fifty*omega+nine*omega*omega);//one;
-
-               //LBMReal Oxyz      = twentyfour*(-two+omega)*(-two-seven*omega+three*omega*omega)/(fourtyeight+c152*omega-c130*omega*omega+twentynine*omega*omega*omega);
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = two-omega;//
-               //LBMReal OxyyMxzz  = two-omega;//
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = (eight * (omega - two)) / (omega - eight);//Ginzburg
-               //LBMReal OxyyMxzz  = (eight * (omega - two)) / (omega - eight);//Ginzburg
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = omega;//BGK
-               //LBMReal OxyyMxzz  = omega;//BGK
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = (one + omega) / two;//1P5
-               //LBMReal OxyyMxzz  = (one + omega) / two;//1P5
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = (three - omega) / two;//0P5
-               //LBMReal OxyyMxzz  = (three - omega) / two;//0P5
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car
-               //LBMReal OxyyMxzz  = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car
-               ////////////////////////////////////////////////////////////
-               //4.
-               //////////////////////////////
-               real O4 = c1o1;
-               //////////////////////////////
-               //LBMReal O4        = omega;//TRT
-               ////////////////////////////////////////////////////////////
-               //5.
-               //////////////////////////////
-               real O5 = c1o1;
-               ////////////////////////////////////////////////////////////
-               //6.
-               //////////////////////////////
-               real O6 = c1o1;
-               ////////////////////////////////////////////////////////////
-
-
-               //central moments to cumulants
-               //4.
-               real CUMcbb = mfcbb-((mfcaa+c1o3) * mfabb+ c2o1 * mfbba * mfbab)/rho;	//ab 15.05.2015 verwendet
-               real CUMbcb = mfbcb-((mfaca+c1o3) * mfbab+ c2o1 * mfbba * mfabb)/rho; //ab 15.05.2015 verwendet
-               real CUMbbc = mfbbc-((mfaac+c1o3) * mfbba+ c2o1 * mfbab * mfabb)/rho; //ab 15.05.2015 verwendet
-
-               real CUMcca = mfcca-(((mfcaa * mfaca+ c2o1 * mfbba * mfbba)+c1o3 * (mfcaa+mfaca))/rho-c1o9*(drho/rho));
-               real CUMcac = mfcac-(((mfcaa * mfaac+ c2o1 * mfbab * mfbab)+c1o3 * (mfcaa+mfaac))/rho-c1o9*(drho/rho));
-               real CUMacc = mfacc-(((mfaac * mfaca+ c2o1 * mfabb * mfabb)+c1o3 * (mfaac+mfaca))/rho-c1o9*(drho/rho));
-
-               //5.
-               real CUMbcc = mfbcc-((mfaac * mfbca+mfaca * mfbac+ c4o1 * mfabb * mfbbb+ c2o1 * (mfbab * mfacb+mfbba * mfabc))+c1o3 * (mfbca+mfbac))/rho;
-               real CUMcbc = mfcbc-((mfaac * mfcba+mfcaa * mfabc+ c4o1 * mfbab * mfbbb+ c2o1 * (mfabb * mfcab+mfbba * mfbac))+c1o3 * (mfcba+mfabc))/rho;
-               real CUMccb = mfccb-((mfcaa * mfacb+mfaca * mfcab+ c4o1 * mfbba * mfbbb+ c2o1 * (mfbab * mfbca+mfabb * mfcba))+c1o3 * (mfacb+mfcab))/rho;
-
-               //6.
-
-               real CUMccc = mfccc+((-c4o1 *  mfbbb * mfbbb
-                  -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca)
-                  - c4o1 * (mfabb * mfcbb+mfbab * mfbcb+mfbba * mfbbc)
-                  - c2o1 * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb))/rho
-                  +(c4o1 * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac)
-                     + c2o1 * (mfcaa * mfaca * mfaac)
-                     + c16o1 *  mfbba * mfbab * mfabb)/(rho * rho)
-                  -c1o3 * (mfacc+mfcac+mfcca)/rho
-                  -c1o9 * (mfcaa+mfaca+mfaac)/rho
-                  +(c2o1 * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba)
-                     +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)+c1o3 *(mfaac+mfaca+mfcaa))/(rho * rho) * c2o3
-                  +c1o27*((drho * drho-drho)/(rho*rho)));
-               //+ c1o27*(one -three/rho +two/(rho*rho)));
-
-
-
-
-   //2.
-   // linear combinations
-               real mxxPyyPzz = mfcaa+mfaca+mfaac;
-               real mxxMyy = mfcaa-mfaca;
-               real mxxMzz = mfcaa-mfaac;
-
-               //////////////////////////////////////////////////////////////////////////
-      // 			LBMReal magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.;
-
-               //////////////////////////////////////////////////////////////////////////
-               //limiter-Scheise Teil 1
-               //LBMReal oxxyy,oxxzz,oxy,oxz,oyz;
-               //LBMReal smag=0.001;
-               //oxxyy    = omega+(one-omega)*fabs(mxxMyy)/(fabs(mxxMyy)+smag);
-               //oxxzz    = omega+(one-omega)*fabs(mxxMzz)/(fabs(mxxMzz)+smag);
-               //oxy      = omega+(one-omega)*fabs(mfbba)/(fabs(mfbba)+smag);
-               //oxz      = omega+(one-omega)*fabs(mfbab)/(fabs(mfbab)+smag);
-               //oyz      = omega+(one-omega)*fabs(mfabb)/(fabs(mfabb)+smag);
-
-               ////////////////////////////////////////////////////////////////////////////
-               ////Teil 1b
-               //LBMReal constante = 1000.0;
-               //LBMReal nuEddi = constante * fabs(mxxPyyPzz);
-               //LBMReal omegaLimit = one / (one / omega + three * nuEddi);
-
-               //{
-               //	LBMReal dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) +  OxxPyyPzz * (mfaaa - mxxPyyPzz);
-               //	LBMReal dyuy = dxux + omegaLimit * c3o2 * mxxMyy;
-               //	LBMReal dzuz = dxux + omegaLimit * c3o2 * mxxMzz;
-
-                  ////relax
-                  //mxxPyyPzz += OxxPyyPzz*(mfaaa  - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-                  //mxxMyy    += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy);
-                  //mxxMzz    += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz);
-
-               //}
-               //mfabb     += omegaLimit * (-mfabb);
-               //mfbab     += omegaLimit * (-mfbab);
-               //mfbba     += omegaLimit * (-mfbba);
-               ////////////////////////////////////////////////////////////////////////////
-
-               ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //incl. correction		(hat noch nicht so gut funktioniert...Optimierungsbedarf??)
-
-               real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz);// +c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-               real dyuy = dxux+omega * c3o2 * mxxMyy;
-               real dzuz = dxux+omega * c3o2 * mxxMzz;
-
-               real Dxy =-c3o1 *omega*mfbba;
-               real Dxz =-c3o1 *omega*mfbab;
-               real Dyz =-c3o1 *omega*mfabb;
-
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //non Newtonian fluid collision factor
-               real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (drho + c1o1);
-               omega = getRheologyCollFactor(omega, shearRate, rho);
-               //omega = Rheology::getHerschelBulkleyCollFactor(omega, shearRate, drho);
-               //omega = Rheology::getBinghamCollFactor(omega, shearRate, drho);
-               ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-               dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz);// +c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-               dyuy = dxux + omega * c3o2 * mxxMyy;
-               dzuz = dxux + omega * c3o2 * mxxMzz;
-
-               Dxy = -c3o1 * omega * mfbba;
-               Dxz = -c3o1 * omega * mfbab;
-               Dyz = -c3o1 * omega * mfabb;
-
-               mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy);
-               mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz);
-
-               mfabb += omega * (-mfabb);
-               mfbab += omega * (-mfbab);
-               mfbba += omega * (-mfbba);
-
-               if(omega < c1o1) { omega = c1o1; } //arbitrary limit (24.09.2020)
-
-               //omega = collFactorc1o1
-
-               //magic parameter for rheology
-               real a = 10;
-               OxxPyyPzz = c1o1 / (a * ((c1o1 / omega) - c1o2) + c1o2);
-               OxxPyyPzz = (OxxPyyPzz > c1o1) ? c1o1 : OxxPyyPzz;
-
-               real OxyyPxzz = 8.0 * (omega - 2.0) * (OxxPyyPzz * (3.0 * omega - 1.0) - 5.0 * omega) / (8.0 * (5.0 - 2.0 * omega) * omega + OxxPyyPzz * (8.0 + omega * (9.0 * omega - 26.0)));
-               real OxyyMxzz = 8.0 * (omega - 2.0) * (omega + OxxPyyPzz * (3.0 * omega - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * omega + 9.0 * omega * omega) - 8.0 * omega);
-               real Oxyz = 24.0 * (omega - 2.0) * (4.0 * omega * omega + omega * OxxPyyPzz * (18.0 - 13.0 * omega) + OxxPyyPzz * OxxPyyPzz * (2.0 + omega * (6.0 * omega - 11.0))) / (16.0 * omega * omega * (omega - 6.0) - 2.0 * omega * OxxPyyPzz * (216.0 + 5.0 * omega * (9.0 * omega - 46.0)) + OxxPyyPzz * OxxPyyPzz * (omega * (3.0 * omega - 10.0) * (15.0 * omega - 28.0) - 48.0));
-
-               real A_ = (4.0 * omega * omega + 2.0 * omega * OxxPyyPzz * (omega - 6.0) + OxxPyyPzz * OxxPyyPzz * (omega * (10.0 - 3.0 * omega) - 4.0)) / ((omega - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * omega) - 8.0 * omega));
-               real B_ = (4.0 * omega * OxxPyyPzz * (9.0 * omega - 16.0) - 4.0 * omega * omega - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * omega * (omega - 2.0))) / (3.0 * (omega - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * omega) - 8.0 * omega));
-
-
-               //relax
-
-               //wadjust = OxxPyyPzz+(one-OxxPyyPzz)*fabs((mfaaa-mxxPyyPzz))/(fabs((mfaaa-mxxPyyPzz))+qudricLimitD);
-               //mxxPyyPzz += wadjust*(mfaaa-mxxPyyPzz)-three * (one-c1o2 * OxxPyyPzz) * (vx2 * dxux+vy2 * dyuy+vz2 * dzuz);
-               mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-
-              // mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz)-three * (one-c1o2 * OxxPyyPzz) * (vx2 * dxux+vy2 * dyuy+vz2 * dzuz);//-magicBulk*OxxPyyPzz;
-               //mxxMyy += omega * (-mxxMyy)-three * (one+c1o2 * (-omega)) * (vx2 * dxux-vy2 * dyuy);
-               //mxxMzz += omega * (-mxxMzz)-three * (one+c1o2 * (-omega)) * (vx2 * dxux-vz2 * dzuz);
-
-               //////////////////////////////////////////////////////////////////////////
-               //limiter-Scheise Teil 2
-               //mxxMyy    += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy);
-               //mxxMzz    += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz);
-               //////////////////////////////////////////////////////////////////////////
-
-
-            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            ////no correction
-            //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz;
-            //mxxMyy    += -(-omega) * (-mxxMyy);
-            //mxxMzz    += -(-omega) * (-mxxMzz);
-            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //mfabb += omega * (-mfabb);
-               //mfbab += omega * (-mfbab);
-               //mfbba += omega * (-mfbba);
-
-               //////////////////////////////////////////////////////////////////////////
-               //limiter-Scheise Teil 3
-               //mfabb     += oyz * (-mfabb);
-               //mfbab     += oxz * (-mfbab);
-               //mfbba     += oxy * (-mfbba);
-               //////////////////////////////////////////////////////////////////////////
-
-               // linear combinations back
-               mfcaa = c1o3 * (mxxMyy+mxxMzz+mxxPyyPzz);
-               mfaca = c1o3 * (-c2o1 *  mxxMyy+mxxMzz+mxxPyyPzz);
-               mfaac = c1o3 * (mxxMyy- c2o1 * mxxMzz+mxxPyyPzz);
-
-               //3.
-               // linear combinations
-
-               real mxxyPyzz = mfcba+mfabc;
-               real mxxyMyzz = mfcba-mfabc;
-
-               real mxxzPyyz = mfcab+mfacb;
-               real mxxzMyyz = mfcab-mfacb;
-
-               real mxyyPxzz = mfbca+mfbac;
-               real mxyyMxzz = mfbca-mfbac;
-
-               //relax
-               //////////////////////////////////////////////////////////////////////////
-               //das ist der limiter
-               wadjust = Oxyz+(c1o1-Oxyz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimitD);
-               mfbbb += wadjust * (-mfbbb);
-               wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimitP);
-               mxxyPyzz += wadjust * (-mxxyPyzz);
-               wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimitM);
-               mxxyMyzz += wadjust * (-mxxyMyzz);
-               wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimitP);
-               mxxzPyyz += wadjust * (-mxxzPyyz);
-               wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimitM);
-               mxxzMyyz += wadjust * (-mxxzMyyz);
-               wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimitP);
-               mxyyPxzz += wadjust * (-mxyyPxzz);
-               wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimitM);
-               mxyyMxzz += wadjust * (-mxyyMxzz);
-               //////////////////////////////////////////////////////////////////////////
-               //ohne limiter
-               //mfbbb     += OxyyMxzz * (-mfbbb);
-               //mxxyPyzz  += OxyyPxzz * (-mxxyPyzz);
-               //mxxyMyzz  += OxyyMxzz * (-mxxyMyzz);
-               //mxxzPyyz  += OxyyPxzz * (-mxxzPyyz);
-               //mxxzMyyz  += OxyyMxzz * (-mxxzMyyz);
-               //mxyyPxzz  += OxyyPxzz * (-mxyyPxzz);
-               //mxyyMxzz  += OxyyMxzz * (-mxyyMxzz);
-               //////////////////////////////////////////////////////////////////////////
-
-               //// linear combinations back
-               mfcba = (mxxyMyzz+mxxyPyzz) * c1o2;
-               mfabc = (-mxxyMyzz+mxxyPyzz) * c1o2;
-               mfcab = (mxxzMyyz+mxxzPyyz) * c1o2;
-               mfacb = (-mxxzMyyz+mxxzPyyz) * c1o2;
-               mfbca = (mxyyMxzz+mxyyPxzz) * c1o2;
-               mfbac = (-mxyyMxzz+mxyyPxzz) * c1o2;
-
-               //4.
-               //////////////////////////////////////////////////////////////////////////
-               //mit limiter
-            //	wadjust    = O4+(one-O4)*fabs(CUMacc)/(fabs(CUMacc)+qudricLimit);
-               //CUMacc    += wadjust * (-CUMacc);
-            //	wadjust    = O4+(one-O4)*fabs(CUMcac)/(fabs(CUMcac)+qudricLimit);
-               //CUMcac    += wadjust * (-CUMcac); 
-            //	wadjust    = O4+(one-O4)*fabs(CUMcca)/(fabs(CUMcca)+qudricLimit);
-               //CUMcca    += wadjust * (-CUMcca); 
-
-            //	wadjust    = O4+(one-O4)*fabs(CUMbbc)/(fabs(CUMbbc)+qudricLimit);
-               //CUMbbc    += wadjust * (-CUMbbc); 
-            //	wadjust    = O4+(one-O4)*fabs(CUMbcb)/(fabs(CUMbcb)+qudricLimit);
-               //CUMbcb    += wadjust * (-CUMbcb); 
-            //	wadjust    = O4+(one-O4)*fabs(CUMcbb)/(fabs(CUMcbb)+qudricLimit);
-               //CUMcbb    += wadjust * (-CUMcbb); 
-               //////////////////////////////////////////////////////////////////////////
-               //////////////////////////////////////////////////////////////////////////
-
-               //////////////////////////////////////////////////////////////////////////
-
-
-               //ohne limiter
-               //CUMacc += O4 * (-CUMacc);
-               //CUMcac += O4 * (-CUMcac);
-               //CUMcca += O4 * (-CUMcca);
-
-               //CUMbbc += O4 * (-CUMbbc);
-               //CUMbcb += O4 * (-CUMbcb);
-               //CUMcbb += O4 * (-CUMcbb);
-               CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A_ + (c1o1 - O4) * (CUMacc);
-               CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A_ + (c1o1 - O4) * (CUMcac);
-               CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A_ + (c1o1 - O4) * (CUMcca);
-               CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy           * c1o3 * B_ + (c1o1 - O4) * (CUMbbc);
-               CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz           * c1o3 * B_ + (c1o1 - O4) * (CUMbcb);
-               CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz           * c1o3 * B_ + (c1o1 - O4) * (CUMcbb);
-               //////////////////////////////////////////////////////////////////////////
-
-
-               //5.
-               CUMbcc += O5 * (-CUMbcc);
-               CUMcbc += O5 * (-CUMcbc);
-               CUMccb += O5 * (-CUMccb);
-
-               //6.
-               CUMccc += O6 * (-CUMccc);
-
-
-
-               //back cumulants to central moments
-               //4.
-               mfcbb = CUMcbb+((mfcaa+c1o3) * mfabb+ c2o1 * mfbba * mfbab)/rho;
-               mfbcb = CUMbcb+((mfaca+c1o3) * mfbab+ c2o1 * mfbba * mfabb)/rho;
-               mfbbc = CUMbbc+((mfaac+c1o3) * mfbba+ c2o1 * mfbab * mfabb)/rho;
-
-               mfcca = CUMcca+(((mfcaa * mfaca+ c2o1 * mfbba * mfbba)+c1o3 * (mfcaa+mfaca))/rho-c1o9*(drho/rho));//(one/rho-one));
-               mfcac = CUMcac+(((mfcaa * mfaac+ c2o1 * mfbab * mfbab)+c1o3 * (mfcaa+mfaac))/rho-c1o9*(drho/rho));//(one/rho-one));
-               mfacc = CUMacc+(((mfaac * mfaca+ c2o1 * mfabb * mfabb)+c1o3 * (mfaac+mfaca))/rho-c1o9*(drho/rho));//(one/rho-one));
-
-               //5.
-               mfbcc = CUMbcc+((mfaac * mfbca+mfaca * mfbac+ c4o1 * mfabb * mfbbb+ c2o1 * (mfbab * mfacb+mfbba * mfabc))+c1o3 * (mfbca+mfbac))/rho;
-               mfcbc = CUMcbc+((mfaac * mfcba+mfcaa * mfabc+ c4o1 * mfbab * mfbbb+ c2o1 * (mfabb * mfcab+mfbba * mfbac))+c1o3 * (mfcba+mfabc))/rho;
-               mfccb = CUMccb+((mfcaa * mfacb+mfaca * mfcab+ c4o1 * mfbba * mfbbb+ c2o1 * (mfbab * mfbca+mfabb * mfcba))+c1o3 * (mfacb+mfcab))/rho;
-
-               //6.
-
-               mfccc = CUMccc-((-c4o1 *  mfbbb * mfbbb
-                  -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca)
-                  - c4o1 * (mfabb * mfcbb+mfbab * mfbcb+mfbba * mfbbc)
-                  - c2o1 * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb))/rho
-                  +(c4o1 * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac)
-                     + c2o1 * (mfcaa * mfaca * mfaac)
-                     + c16o1 *  mfbba * mfbab * mfabb)/(rho * rho)
-                  -c1o3 * (mfacc+mfcac+mfcca)/rho
-                  -c1o9 * (mfcaa+mfaca+mfaac)/rho
-                  +(c2o1 * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba)
-                     +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)+c1o3 *(mfaac+mfaca+mfcaa))/(rho * rho) * c2o3
-                  +c1o27*((drho * drho-drho)/(rho*rho)));
-               ////////////////////////////////////////////////////////////////////////////////////
-               //forcing
-               mfbaa=-mfbaa;
-               mfaba=-mfaba;
-               mfaab=-mfaab;
-               //////////////////////////////////////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////////////////
-         //back
-         ////////////////////////////////////////////////////////////////////////////////////
-         //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-         ////////////////////////////////////////////////////////////////////////////////////
-         // Z - Dir
-               m0 = mfaac * c1o2+mfaab * (vvz-c1o2)+(mfaaa+ c1o1 * oMdrho) * (vz2-vvz) * c1o2;
-               m1 = -mfaac- c2o1 * mfaab *  vvz+mfaaa                * (c1o1 -vz2)- c1o1 * oMdrho * vz2;
-               m2 = mfaac * c1o2+mfaab * (vvz+c1o2)+(mfaaa+ c1o1 * oMdrho) * (vz2+vvz) * c1o2;
-               mfaaa = m0;
-               mfaab = m1;
-               mfaac = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfabc * c1o2+mfabb * (vvz-c1o2)+mfaba * (vz2-vvz) * c1o2;
-               m1 = -mfabc- c2o1 * mfabb *  vvz+mfaba * (c1o1 -vz2);
-               m2 = mfabc * c1o2+mfabb * (vvz+c1o2)+mfaba * (vz2+vvz) * c1o2;
-               mfaba = m0;
-               mfabb = m1;
-               mfabc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfacc * c1o2+mfacb * (vvz-c1o2)+(mfaca+c1o3 * oMdrho) * (vz2-vvz) * c1o2;
-               m1 = -mfacc- c2o1 * mfacb *  vvz+mfaca                  * (c1o1 -vz2)-c1o3 * oMdrho * vz2;
-               m2 = mfacc * c1o2+mfacb * (vvz+c1o2)+(mfaca+c1o3 * oMdrho) * (vz2+vvz) * c1o2;
-               mfaca = m0;
-               mfacb = m1;
-               mfacc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfbac * c1o2+mfbab * (vvz-c1o2)+mfbaa * (vz2-vvz) * c1o2;
-               m1 = -mfbac- c2o1 * mfbab *  vvz+mfbaa * (c1o1 -vz2);
-               m2 = mfbac * c1o2+mfbab * (vvz+c1o2)+mfbaa * (vz2+vvz) * c1o2;
-               mfbaa = m0;
-               mfbab = m1;
-               mfbac = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 = mfbbc * c1o2+mfbbb * (vvz-c1o2)+mfbba * (vz2-vvz) * c1o2;
-               m1 = -mfbbc- c2o1 * mfbbb *  vvz+mfbba * (c1o1 -vz2);
-               m2 = mfbbc * c1o2+mfbbb * (vvz+c1o2)+mfbba * (vz2+vvz) * c1o2;
-               mfbba = m0;
-               mfbbb = m1;
-               mfbbc = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 = mfbcc * c1o2+mfbcb * (vvz-c1o2)+mfbca * (vz2-vvz) * c1o2;
-               m1 = -mfbcc- c2o1 * mfbcb *  vvz+mfbca * (c1o1 -vz2);
-               m2 = mfbcc * c1o2+mfbcb * (vvz+c1o2)+mfbca * (vz2+vvz) * c1o2;
-               mfbca = m0;
-               mfbcb = m1;
-               mfbcc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcac * c1o2+mfcab * (vvz-c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2-vvz) * c1o2;
-               m1 = -mfcac- c2o1 * mfcab *  vvz+mfcaa                  * (c1o1 -vz2)-c1o3 * oMdrho * vz2;
-               m2 = mfcac * c1o2+mfcab * (vvz+c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2+vvz) * c1o2;
-               mfcaa = m0;
-               mfcab = m1;
-               mfcac = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 = mfcbc * c1o2+mfcbb * (vvz-c1o2)+mfcba * (vz2-vvz) * c1o2;
-               m1 = -mfcbc- c2o1 * mfcbb *  vvz+mfcba * (c1o1 -vz2);
-               m2 = mfcbc * c1o2+mfcbb * (vvz+c1o2)+mfcba * (vz2+vvz) * c1o2;
-               mfcba = m0;
-               mfcbb = m1;
-               mfcbc = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 = mfccc * c1o2+mfccb * (vvz-c1o2)+(mfcca+c1o9 * oMdrho) * (vz2-vvz) * c1o2;
-               m1 = -mfccc- c2o1 * mfccb *  vvz+mfcca                  * (c1o1 -vz2)-c1o9 * oMdrho * vz2;
-               m2 = mfccc * c1o2+mfccb * (vvz+c1o2)+(mfcca+c1o9 * oMdrho) * (vz2+vvz) * c1o2;
-               mfcca = m0;
-               mfccb = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               m0 = mfaca * c1o2+mfaba * (vvy-c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfaca- c2o1 * mfaba *  vvy+mfaaa                  * (c1o1 -vy2)-c1o6 * oMdrho * vy2;
-               m2 = mfaca * c1o2+mfaba * (vvy+c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2+vvy) * c1o2;
-               mfaaa = m0;
-               mfaba = m1;
-               mfaca = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfacb * c1o2+mfabb * (vvy-c1o2)+(mfaab+c2o3 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfacb- c2o1 * mfabb *  vvy+mfaab                  * (c1o1 -vy2)-c2o3 * oMdrho * vy2;
-               m2 = mfacb * c1o2+mfabb * (vvy+c1o2)+(mfaab+c2o3 * oMdrho) * (vy2+vvy) * c1o2;
-               mfaab = m0;
-               mfabb = m1;
-               mfacb = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfacc * c1o2+mfabc * (vvy-c1o2)+(mfaac+c1o6 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfacc- c2o1 * mfabc *  vvy+mfaac                  * (c1o1 -vy2)-c1o6 * oMdrho * vy2;
-               m2 = mfacc * c1o2+mfabc * (vvy+c1o2)+(mfaac+c1o6 * oMdrho) * (vy2+vvy) * c1o2;
-               mfaac = m0;
-               mfabc = m1;
-               mfacc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfbca * c1o2+mfbba * (vvy-c1o2)+mfbaa * (vy2-vvy) * c1o2;
-               m1 = -mfbca- c2o1 * mfbba *  vvy+mfbaa * (c1o1 -vy2);
-               m2 = mfbca * c1o2+mfbba * (vvy+c1o2)+mfbaa * (vy2+vvy) * c1o2;
-               mfbaa = m0;
-               mfbba = m1;
-               mfbca = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 = mfbcb * c1o2+mfbbb * (vvy-c1o2)+mfbab * (vy2-vvy) * c1o2;
-               m1 = -mfbcb- c2o1 * mfbbb *  vvy+mfbab * (c1o1 -vy2);
-               m2 = mfbcb * c1o2+mfbbb * (vvy+c1o2)+mfbab * (vy2+vvy) * c1o2;
-               mfbab = m0;
-               mfbbb = m1;
-               mfbcb = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 = mfbcc * c1o2+mfbbc * (vvy-c1o2)+mfbac * (vy2-vvy) * c1o2;
-               m1 = -mfbcc- c2o1 * mfbbc *  vvy+mfbac * (c1o1 -vy2);
-               m2 = mfbcc * c1o2+mfbbc * (vvy+c1o2)+mfbac * (vy2+vvy) * c1o2;
-               mfbac = m0;
-               mfbbc = m1;
-               mfbcc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcca * c1o2+mfcba * (vvy-c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfcca- c2o1 * mfcba *  vvy+mfcaa                   * (c1o1 -vy2)-c1o18 * oMdrho * vy2;
-               m2 = mfcca * c1o2+mfcba * (vvy+c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2+vvy) * c1o2;
-               mfcaa = m0;
-               mfcba = m1;
-               mfcca = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 = mfccb * c1o2+mfcbb * (vvy-c1o2)+(mfcab+c2o9 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfccb- c2o1 * mfcbb *  vvy+mfcab                  * (c1o1 -vy2)-c2o9 * oMdrho * vy2;
-               m2 = mfccb * c1o2+mfcbb * (vvy+c1o2)+(mfcab+c2o9 * oMdrho) * (vy2+vvy) * c1o2;
-               mfcab = m0;
-               mfcbb = m1;
-               mfccb = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 = mfccc * c1o2+mfcbc * (vvy-c1o2)+(mfcac+c1o18 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfccc- c2o1 * mfcbc *  vvy+mfcac                   * (c1o1 -vy2)-c1o18 * oMdrho * vy2;
-               m2 = mfccc * c1o2+mfcbc * (vvy+c1o2)+(mfcac+c1o18 * oMdrho) * (vy2+vvy) * c1o2;
-               mfcac = m0;
-               mfcbc = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // X - Dir
-               m0 = mfcaa * c1o2+mfbaa * (vvx-c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcaa- c2o1 * mfbaa *  vvx+mfaaa                   * (c1o1 -vx2)-c1o36 * oMdrho * vx2;
-               m2 = mfcaa * c1o2+mfbaa * (vvx+c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-               mfaaa = m0;
-               mfbaa = m1;
-               mfcaa = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcba * c1o2+mfbba * (vvx-c1o2)+(mfaba+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcba- c2o1 * mfbba *  vvx+mfaba                  * (c1o1 -vx2)-c1o9 * oMdrho * vx2;
-               m2 = mfcba * c1o2+mfbba * (vvx+c1o2)+(mfaba+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-               mfaba = m0;
-               mfbba = m1;
-               mfcba = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcca * c1o2+mfbca * (vvx-c1o2)+(mfaca+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcca- c2o1 * mfbca *  vvx+mfaca                   * (c1o1 -vx2)-c1o36 * oMdrho * vx2;
-               m2 = mfcca * c1o2+mfbca * (vvx+c1o2)+(mfaca+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-               mfaca = m0;
-               mfbca = m1;
-               mfcca = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcab * c1o2+mfbab * (vvx-c1o2)+(mfaab+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcab- c2o1 * mfbab *  vvx+mfaab                  * (c1o1 -vx2)-c1o9 * oMdrho * vx2;
-               m2 = mfcab * c1o2+mfbab * (vvx+c1o2)+(mfaab+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-               mfaab = m0;
-               mfbab = m1;
-               mfcab = m2;
-               ///////////b////////////////////////////////////////////////////////////////////////
-               m0 = mfcbb * c1o2+mfbbb * (vvx-c1o2)+(mfabb+c4o9 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcbb- c2o1 * mfbbb *  vvx+mfabb                  * (c1o1 -vx2)-c4o9 * oMdrho * vx2;
-               m2 = mfcbb * c1o2+mfbbb * (vvx+c1o2)+(mfabb+c4o9 * oMdrho) * (vx2+vvx) * c1o2;
-               mfabb = m0;
-               mfbbb = m1;
-               mfcbb = m2;
-               ///////////b////////////////////////////////////////////////////////////////////////
-               m0 = mfccb * c1o2+mfbcb * (vvx-c1o2)+(mfacb+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfccb- c2o1 * mfbcb *  vvx+mfacb                  * (c1o1 -vx2)-c1o9 * oMdrho * vx2;
-               m2 = mfccb * c1o2+mfbcb * (vvx+c1o2)+(mfacb+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-               mfacb = m0;
-               mfbcb = m1;
-               mfccb = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcac * c1o2+mfbac * (vvx-c1o2)+(mfaac+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcac- c2o1 * mfbac *  vvx+mfaac                   * (c1o1 -vx2)-c1o36 * oMdrho * vx2;
-               m2 = mfcac * c1o2+mfbac * (vvx+c1o2)+(mfaac+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-               mfaac = m0;
-               mfbac = m1;
-               mfcac = m2;
-               ///////////c////////////////////////////////////////////////////////////////////////
-               m0 = mfcbc * c1o2+mfbbc * (vvx-c1o2)+(mfabc+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcbc- c2o1 * mfbbc *  vvx+mfabc                  * (c1o1 -vx2)-c1o9 * oMdrho * vx2;
-               m2 = mfcbc * c1o2+mfbbc * (vvx+c1o2)+(mfabc+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-               mfabc = m0;
-               mfbbc = m1;
-               mfcbc = m2;
-               ///////////c////////////////////////////////////////////////////////////////////////
-               m0 = mfccc * c1o2+mfbcc * (vvx-c1o2)+(mfacc+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfccc- c2o1 * mfbcc *  vvx+mfacc                   * (c1o1 -vx2)-c1o36 * oMdrho * vx2;
-               m2 = mfccc * c1o2+mfbcc * (vvx+c1o2)+(mfacc+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-               mfacc = m0;
-               mfbcc = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-
-               //////////////////////////////////////////////////////////////////////////
-               //proof correctness
-               //////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-               real 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 = fabs(rho - rho_post);
-               real dif = drho - drho_post;
-#ifdef SINGLEPRECISION
-               if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-               if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-               {
-                  UB_THROW(UbException(UB_EXARGS, "rho="+UbSystem::toString(drho)+", rho_post="+UbSystem::toString(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 distribution
-               //////////////////////////////////////////////////////////////////////////
-               (*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->zeroDistributions)(x1, x2, x3) = mfbbb;
-               //////////////////////////////////////////////////////////////////////////
-
-            }
-         }
-      }
-   }
-   //timer.stop();
-}
-//////////////////////////////////////////////////////////////////////////
-real RheologyK17LBMKernel::getCalculationTime()
-{
-   //return timer.getDuration();
-   return timer.getTotalTime();
-}
-//////////////////////////////////////////////////////////////////////////
-void RheologyK17LBMKernel::setBulkViscosity(real value)
-{
-   bulkViscosity = value;
-}
-
-//////////////////////////////////////////////////////////////////////////
-//void RheologyK17LBMKernel::setBulkOmegaToOmega(bool value)
-//{
-//   bulkOmegaToOmega = value;
-//}
-
-//void RheologyK17LBMKernel::setViscosityFlag(bool vf)
-//{
-//   viscosityFlag = vf;
-//}
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.h
deleted file mode 100644
index 1244bb031c1dffda3ea369739a5e9436238e1e0a..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.h
+++ /dev/null
@@ -1,90 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyK17LBMKernel.h
-//! \ingroup LBM
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef RheologyK17LBMKernel_h__
-#define RheologyK17LBMKernel_h__
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief   compressible cumulant LBM kernel with rheological properties of shear and bulk viscosity for non-Newtonian fluids.
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  K. Kutscher, M. Geier
-class RheologyK17LBMKernel :  public LBMKernel
-{
-public:
-   //! This option set relaxation parameter: NORMAL  
-   enum Parameter{NORMAL, MAGIC};
-public:
-   RheologyK17LBMKernel();
-   virtual ~RheologyK17LBMKernel(void);
-   virtual void calculate(int step) override;
-   virtual SPtr<LBMKernel> clone() override;
-   real getCalculationTime() override;
-   //! The value should not be equal to a shear viscosity
-   void setBulkViscosity(real value);
-protected:
-   virtual void initDataSet();
-
-   virtual real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const
-   {
-       UB_THROW(UbException("real getRheologyCollFactor() - belongs in the derived class"));
-   }
-
-   real f[D3Q27System::ENDF+1];
-
-   UbTimer timer;
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributions;
-
-   mu::value_type muX1,muX2,muX3;
-   mu::value_type muDeltaT;
-   mu::value_type muNu;
-   real forcingX1;
-   real forcingX2;
-   real forcingX3;
-   
-   // bulk viscosity
-   real OxxPyyPzz; //omega2 (bulk viscosity)
-   real bulkViscosity;
-
-};
-#endif // RheologyK17LBMKernel_h__
-
-
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.cpp b/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.cpp
deleted file mode 100644
index 7f1c8c884d4cf3b4a174f7d2c58e2f070c459b6b..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.cpp
+++ /dev/null
@@ -1,931 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyModelLBMKernel.cpp
-//! \ingroup LBM
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include "RheologyModelLBMKernel.h"
-#include "D3Q27System.h"
-#include "BCArray3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <math.h>
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-
-#define PROOF_CORRECTNESS
-
-//using namespace UbMath;
-using namespace vf::basics::constant;
-
-RheologyModelLBMKernel::RheologyModelLBMKernel() : forcingX1(0), forcingX2(0), forcingX3(0)
-{
-   compressible = false;
-	OxyyMxzz = 1.0;
-}
-
-RheologyModelLBMKernel::~RheologyModelLBMKernel()
-{
-}
-
-void RheologyModelLBMKernel::calculate(int step)
-{
-	using namespace D3Q27System;
-
-	//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);
-	}
-	/////////////////////////////////////
-
-	localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-	zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-
-	{
-		for (int x3 = minX3; x3 < maxX3; x3++)
-		{
-			for (int x2 = minX2; x2 < maxX2; x2++)
-			{
-				for (int x1 = minX1; x1 < maxX1; x1++)
-				{
-					if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3))
-					{
-						int x1p = x1 + 1;
-						int x2p = x2 + 1;
-						int x3p = x3 + 1;
-						//////////////////////////////////////////////////////////////////////////
-						//read distribution
-						// Cumulant (NSE part) 
-						////////////////////////////////////////////////////////////////////////////
-						//////////////////////////////////////////////////////////////////////////
-
-						//E   N  T
-						//c   c  c
-						//////////
-						//W   S  B
-						//a   a  a
-
-						//Rest ist b
-
-						//mfxyz
-						//a - negative
-						//b - null
-						//c - positive
-
-						// a b c
-						//-1 0 1
-
-						real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-						real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-						real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-						real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-						real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-						real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-						real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-						real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-						real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-						real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-						real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-						real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-						real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-						real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-						real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-						real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-						real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-						real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-						real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-						real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-						real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-						real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-						real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-						real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-						real m0, m1, m2;
-
-						real 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;
-
-						real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-							(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-							(mfcbb - mfabb));
-						real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-							(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-							(mfbcb - mfbab));
-						real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-							(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-							(mfbbc - mfbba));
-
-						real collFactorF = collFactor;
-
-						//forcing 
-						///////////////////////////////////////////////////////////////////////////////////////////
-						if (withForcing)
-						{
-							muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1);
-							muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2);
-							muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3);
-
-							forcingX1 = muForcingX1.Eval();
-							forcingX2 = muForcingX2.Eval();
-							forcingX3 = muForcingX3.Eval();
-
-							vvx += forcingX1 * deltaT * 0.5; // X
-							vvy += forcingX2 * deltaT * 0.5; // Y
-							vvz += forcingX3 * deltaT * 0.5; // Z
-						}
-						///////////////////////////////////////////////////////////////////////////////////////////               
-						real 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);
-
-						real vx2;
-						real vy2;
-						real vz2;
-						vx2 = vvx * vvx;
-						vy2 = vvy * vvy;
-						vz2 = vvz * vvz;
-						////////////////////////////////////////////////////////////////////////////////////
-						real wadjust;
-						real qudricLimit = 0.01;
-						////////////////////////////////////////////////////////////////////////////////////
-						//Hin
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						m2 = mfaaa + mfaac;
-						m1 = mfaac - mfaaa;
-						m0 = m2 + mfaab;
-						mfaaa = m0;
-						m0 += c1o36 * oMdrho;
-						mfaab = m1 - m0 * vvz;
-						mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaba + mfabc;
-						m1 = mfabc - mfaba;
-						m0 = m2 + mfabb;
-						mfaba = m0;
-						m0 += c1o9 * oMdrho;
-						mfabb = m1 - m0 * vvz;
-						mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaca + mfacc;
-						m1 = mfacc - mfaca;
-						m0 = m2 + mfacb;
-						mfaca = m0;
-						m0 += c1o36 * oMdrho;
-						mfacb = m1 - m0 * vvz;
-						mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbaa + mfbac;
-						m1 = mfbac - mfbaa;
-						m0 = m2 + mfbab;
-						mfbaa = m0;
-						m0 += c1o9 * oMdrho;
-						mfbab = m1 - m0 * vvz;
-						mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbba + mfbbc;
-						m1 = mfbbc - mfbba;
-						m0 = m2 + mfbbb;
-						mfbba = m0;
-						m0 += c4o9 * oMdrho;
-						mfbbb = m1 - m0 * vvz;
-						mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbca + mfbcc;
-						m1 = mfbcc - mfbca;
-						m0 = m2 + mfbcb;
-						mfbca = m0;
-						m0 += c1o9 * oMdrho;
-						mfbcb = m1 - m0 * vvz;
-						mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcaa + mfcac;
-						m1 = mfcac - mfcaa;
-						m0 = m2 + mfcab;
-						mfcaa = m0;
-						m0 += c1o36 * oMdrho;
-						mfcab = m1 - m0 * vvz;
-						mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcba + mfcbc;
-						m1 = mfcbc - mfcba;
-						m0 = m2 + mfcbb;
-						mfcba = m0;
-						m0 += c1o9 * oMdrho;
-						mfcbb = m1 - m0 * vvz;
-						mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcca + mfccc;
-						m1 = mfccc - mfcca;
-						m0 = m2 + mfccb;
-						mfcca = m0;
-						m0 += c1o36 * oMdrho;
-						mfccb = m1 - m0 * vvz;
-						mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						m2 = mfaaa + mfaca;
-						m1 = mfaca - mfaaa;
-						m0 = m2 + mfaba;
-						mfaaa = m0;
-						m0 += c1o6 * oMdrho;
-						mfaba = m1 - m0 * vvy;
-						mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaab + mfacb;
-						m1 = mfacb - mfaab;
-						m0 = m2 + mfabb;
-						mfaab = m0;
-						mfabb = m1 - m0 * vvy;
-						mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaac + mfacc;
-						m1 = mfacc - mfaac;
-						m0 = m2 + mfabc;
-						mfaac = m0;
-						m0 += c1o18 * oMdrho;
-						mfabc = m1 - m0 * vvy;
-						mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbaa + mfbca;
-						m1 = mfbca - mfbaa;
-						m0 = m2 + mfbba;
-						mfbaa = m0;
-						m0 += c2o3 * oMdrho;
-						mfbba = m1 - m0 * vvy;
-						mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbab + mfbcb;
-						m1 = mfbcb - mfbab;
-						m0 = m2 + mfbbb;
-						mfbab = m0;
-						mfbbb = m1 - m0 * vvy;
-						mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbac + mfbcc;
-						m1 = mfbcc - mfbac;
-						m0 = m2 + mfbbc;
-						mfbac = m0;
-						m0 += c2o9 * oMdrho;
-						mfbbc = m1 - m0 * vvy;
-						mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcaa + mfcca;
-						m1 = mfcca - mfcaa;
-						m0 = m2 + mfcba;
-						mfcaa = m0;
-						m0 += c1o6 * oMdrho;
-						mfcba = m1 - m0 * vvy;
-						mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcab + mfccb;
-						m1 = mfccb - mfcab;
-						m0 = m2 + mfcbb;
-						mfcab = m0;
-						mfcbb = m1 - m0 * vvy;
-						mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcac + mfccc;
-						m1 = mfccc - mfcac;
-						m0 = m2 + mfcbc;
-						mfcac = m0;
-						m0 += c1o18 * oMdrho;
-						mfcbc = m1 - m0 * vvy;
-						mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						m2 = mfaaa + mfcaa;
-						m1 = mfcaa - mfaaa;
-						m0 = m2 + mfbaa;
-						mfaaa = m0;
-						m0 += 1. * oMdrho;
-						mfbaa = m1 - m0 * vvx;
-						mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaba + mfcba;
-						m1 = mfcba - mfaba;
-						m0 = m2 + mfbba;
-						mfaba = m0;
-						mfbba = m1 - m0 * vvx;
-						mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaca + mfcca;
-						m1 = mfcca - mfaca;
-						m0 = m2 + mfbca;
-						mfaca = m0;
-						m0 += c1o3 * oMdrho;
-						mfbca = m1 - m0 * vvx;
-						mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaab + mfcab;
-						m1 = mfcab - mfaab;
-						m0 = m2 + mfbab;
-						mfaab = m0;
-						mfbab = m1 - m0 * vvx;
-						mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfabb + mfcbb;
-						m1 = mfcbb - mfabb;
-						m0 = m2 + mfbbb;
-						mfabb = m0;
-						mfbbb = m1 - m0 * vvx;
-						mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfacb + mfccb;
-						m1 = mfccb - mfacb;
-						m0 = m2 + mfbcb;
-						mfacb = m0;
-						mfbcb = m1 - m0 * vvx;
-						mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaac + mfcac;
-						m1 = mfcac - mfaac;
-						m0 = m2 + mfbac;
-						mfaac = m0;
-						m0 += c1o3 * oMdrho;
-						mfbac = m1 - m0 * vvx;
-						mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfabc + mfcbc;
-						m1 = mfcbc - mfabc;
-						m0 = m2 + mfbbc;
-						mfabc = m0;
-						mfbbc = m1 - m0 * vvx;
-						mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfacc + mfccc;
-						m1 = mfccc - mfacc;
-						m0 = m2 + mfbcc;
-						mfacc = m0;
-						m0 += c1o9 * oMdrho;
-						mfbcc = m1 - m0 * vvx;
-						mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						// Cumulants
-						////////////////////////////////////////////////////////////////////////////////////
-						real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-						real OxyyPxzz = 1.;//-s9;//2+s9;//
-											  //LBMReal OxyyMxzz  = 1.;//2+s9;//
-						real O4 = 1.;
-						real O5 = 1.;
-						real O6 = 1.;
-
-						//Cum 4.
-						//LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-						//LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-						//LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-						real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-						real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-						real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-						real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-						real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-						real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-
-						//Cum 5.
-						real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-						real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-						real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-						//Cum 6.
-						real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-							- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-							- 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-							- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-							+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-								+ 2. * (mfcaa * mfaca * mfaac)
-								+ 16. * mfbba * mfbab * mfabb)
-							- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-							- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-							+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-								+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-						//2.
-						// linear combinations
-						real mxxPyyPzz = mfcaa + mfaca + mfaac;
-						real mxxMyy = mfcaa - mfaca;
-						real mxxMzz = mfcaa - mfaac;
-
-						real dxux = -c1o2 * collFactorF * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-						real dyuy = dxux + collFactorF * c3o2 * mxxMyy;
-						real dzuz = dxux + collFactorF * c3o2 * mxxMzz;
-
-						real Dxy = -c3o1 * collFactorF * mfbba;
-						real Dxz = -c3o1 * collFactorF * mfbab;
-						real Dyz = -c3o1 * collFactorF * mfabb;
-						////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-						//non Newtonian fluid collision factor
-						real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + c1o1);
-						collFactorF = getRheologyCollFactor(collFactorF, shearRate, rho);
-						////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-						//relax
-						mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-						mxxMyy += collFactorF * (-mxxMyy) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vy2 * dyuy);
-						mxxMzz += collFactorF * (-mxxMzz) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vz2 * dzuz);
-
-						mfabb += collFactorF * (-mfabb);
-						mfbab += collFactorF * (-mfbab);
-						mfbba += collFactorF * (-mfbba);
-
-						// linear combinations back
-						mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-						mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-						mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-						//3.
-						// linear combinations
-						real mxxyPyzz = mfcba + mfabc;
-						real mxxyMyzz = mfcba - mfabc;
-
-						real mxxzPyyz = mfcab + mfacb;
-						real mxxzMyyz = mfcab - mfacb;
-
-						real mxyyPxzz = mfbca + mfbac;
-						real mxyyMxzz = mfbca - mfbac;
-
-						//relax
-						wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-						mfbbb += wadjust * (-mfbbb);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-						mxxyPyzz += wadjust * (-mxxyPyzz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-						mxxyMyzz += wadjust * (-mxxyMyzz);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-						mxxzPyyz += wadjust * (-mxxzPyyz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-						mxxzMyyz += wadjust * (-mxxzMyyz);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-						mxyyPxzz += wadjust * (-mxyyPxzz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-						mxyyMxzz += wadjust * (-mxyyMxzz);
-
-						// linear combinations back
-						mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-						mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-						mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-						mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-						mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-						mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-						//4.
-						CUMacc += O4 * (-CUMacc);
-						CUMcac += O4 * (-CUMcac);
-						CUMcca += O4 * (-CUMcca);
-
-						CUMbbc += O4 * (-CUMbbc);
-						CUMbcb += O4 * (-CUMbcb);
-						CUMcbb += O4 * (-CUMcbb);
-
-						//5.
-						CUMbcc += O5 * (-CUMbcc);
-						CUMcbc += O5 * (-CUMcbc);
-						CUMccb += O5 * (-CUMccb);
-
-						//6.
-						CUMccc += O6 * (-CUMccc);
-
-						//back cumulants to central moments
-						//4.
-						//mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-						//mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-						//mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-						mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-						mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-						mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-						mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
-						mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
-						mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
-
-						//5.
-						mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-						mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-						mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-						//6.
-						mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-							- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-							- 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-							- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-							+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-								+ 2. * (mfcaa * mfaca * mfaac)
-								+ 16. * mfbba * mfbab * mfabb)
-							- c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-							- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-							+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-								+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//forcing
-						mfbaa = -mfbaa;
-						mfaba = -mfaba;
-						mfaab = -mfaab;
-						//////////////////////////////////////////////////////////////////////////////////////
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//back
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
-						m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-						mfaaa = m0;
-						mfaab = m1;
-						mfaac = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-						m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
-						m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-						mfaba = m0;
-						mfabb = m1;
-						mfabc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2;
-						m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfaca = m0;
-						mfacb = m1;
-						mfacc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-						m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
-						m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-						mfbaa = m0;
-						mfbab = m1;
-						mfbac = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-						m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
-						m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-						mfbba = m0;
-						mfbbb = m1;
-						mfbbc = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-						m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
-						m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-						mfbca = m0;
-						mfbcb = m1;
-						mfbcc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2;
-						m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfcaa = m0;
-						mfcab = m1;
-						mfcac = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-						m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
-						m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-						mfcba = m0;
-						mfcbb = m1;
-						mfcbc = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
-						m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfcca = m0;
-						mfccb = m1;
-						mfccc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
-						m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaaa = m0;
-						mfaba = m1;
-						mfaca = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
-						m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaab = m0;
-						mfabb = m1;
-						mfacb = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
-						m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaac = m0;
-						mfabc = m1;
-						mfacc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-						m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
-						m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-						mfbaa = m0;
-						mfbba = m1;
-						mfbca = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-						m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
-						m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-						mfbab = m0;
-						mfbbb = m1;
-						mfbcb = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-						m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
-						m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-						mfbac = m0;
-						mfbbc = m1;
-						mfbcc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
-						m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcaa = m0;
-						mfcba = m1;
-						mfcca = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
-						m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcab = m0;
-						mfcbb = m1;
-						mfccb = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
-						m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcac = m0;
-						mfcbc = m1;
-						mfccc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaaa = m0;
-						mfbaa = m1;
-						mfcaa = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaba = m0;
-						mfbba = m1;
-						mfcba = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaca = m0;
-						mfbca = m1;
-						mfcca = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaab = m0;
-						mfbab = m1;
-						mfcab = m2;
-						///////////b////////////////////////////////////////////////////////////////////////
-						m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
-						m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfabb = m0;
-						mfbbb = m1;
-						mfcbb = m2;
-						///////////b////////////////////////////////////////////////////////////////////////
-						m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfacb = m0;
-						mfbcb = m1;
-						mfccb = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaac = m0;
-						mfbac = m1;
-						mfcac = m2;
-						///////////c////////////////////////////////////////////////////////////////////////
-						m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfabc = m0;
-						mfbbc = m1;
-						mfcbc = m2;
-						///////////c////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfacc = m0;
-						mfbcc = m1;
-						mfccc = m2;
-
-						//////////////////////////////////////////////////////////////////////////
-						//proof correctness
-						//////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-						real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-							+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-							+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-						//LBMReal dif = fabs(rho - rho_post);
-						real dif = rho - rho_post;
-#ifdef SINGLEPRECISION
-						if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-						if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif					
-						{
-							UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post)
-								+ " dif=" + UbSystem::toString(dif)
-								+ " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-							//UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-							//exit(EXIT_FAILURE);
-						}
-#endif
-						//////////////////////////////////////////////////////////////////////////
-						//write distribution
-						//////////////////////////////////////////////////////////////////////////
-						(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-						(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-						(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-						(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-						(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-						(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-						(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-						(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-						(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-						(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-						(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
-					}
-				}
-			}
-		}
-
-	}
-}
-
-//SPtr<LBMKernel> RheologyModelLBMKernel::clone()
-//{
-//	SPtr<LBMKernel> kernel(new RheologyModelLBMKernel());
-//	kernel->setNX(nx);
-//	kernel->setCollisionFactor(collFactor);
-//	collFactorF = collFactor;
-//	dynamicPointerCast<RheologyModelLBMKernel>(kernel)->initDataSet();
-//	kernel->setBCSet(bcSet->clone(kernel));
-//	kernel->setWithForcing(withForcing);
-//	kernel->setForcingX1(muForcingX1);
-//	kernel->setForcingX2(muForcingX2);
-//	kernel->setForcingX3(muForcingX3);
-//	kernel->setIndex(ix1, ix2, ix3);
-//	kernel->setDeltaT(deltaT);
-//
-//	return kernel;
-//}
-
-real RheologyModelLBMKernel::getCalculationTime()
-{
-   return timer.getTotalTime();
-}
-
-void RheologyModelLBMKernel::swapDistributions()
-{
-   LBMKernel::swapDistributions();
-}
-
-void RheologyModelLBMKernel::initDataSet()
-{
-   SPtr<DistributionArray3D> df(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.0));
-   dataSet->setFdistributions(df);
-}
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.h
deleted file mode 100644
index 4ff3bb9f7b679c4f97b2a685b2d1bbe64912d892..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.h
+++ /dev/null
@@ -1,83 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyModelLBMKernel.h
-//! \ingroup LBM
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef RheologyModelLBMKernel_H
-#define RheologyModelLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-class RheologyModelLBMKernel;
-
-//! \brief Base class for model of thixotropy based on K16. Use Template Method design pattern for Implementation of different models. 
-//! \author K. Kutscher, M. Geier
-class RheologyModelLBMKernel : public LBMKernel
-{
-public:
-	RheologyModelLBMKernel();
-	virtual ~RheologyModelLBMKernel();
-	void calculate(int step);
-	virtual SPtr<LBMKernel> clone() { UB_THROW(UbException("SPtr<LBMKernel> clone() - belongs in the derived class")); };
-	real getCalculationTime();
-
-	void swapDistributions();
-
-protected:
-	void initDataSet();
-
-	virtual real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const { UB_THROW(UbException("real getRheologyCollFactor() - belongs in the derived class")); }
-
-	real f[D3Q27System::ENDF + 1];
-
-	UbTimer timer;
-
-	real OxyyMxzz;
-	
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-	mu::value_type muX1, muX2, muX3;
-	mu::value_type muDeltaT;
-	mu::value_type muNu;
-	real forcingX1;
-	real forcingX2;
-	real forcingX3;
-
-	bool test;
-};
-
-#endif
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.cpp b/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.cpp
deleted file mode 100644
index 380bb9861343803b3ec2165af96c684ac4722c47..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.cpp
+++ /dev/null
@@ -1,930 +0,0 @@
-#include "RheologyModelLBMKernel2.h"
-#include "D3Q27System.h"
-#include "BCArray3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <math.h>
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include "Rheology.h"
-#include "UbMath.h"
-
-#define PROOF_CORRECTNESS
-
-using namespace UbMath;
-using namespace vf::basics::constant;
-
-
-RheologyModelLBMKernel2::RheologyModelLBMKernel2() : forcingX1(0), forcingX2(0), forcingX3(0)
-{
-   compressible = false;
-	OxyyMxzz = 1.0;
-}
-
-RheologyModelLBMKernel2::~RheologyModelLBMKernel2()
-{
-}
-
-void RheologyModelLBMKernel2::calculate(int step)
-{
-	using namespace D3Q27System;
-
-	//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);
-	}
-	/////////////////////////////////////
-
-	localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-	zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-
-	{
-		for (int x3 = minX3; x3 < maxX3; x3++)
-		{
-			for (int x2 = minX2; x2 < maxX2; x2++)
-			{
-				for (int x1 = minX1; x1 < maxX1; x1++)
-				{
-					if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3))
-					{
-						int x1p = x1 + 1;
-						int x2p = x2 + 1;
-						int x3p = x3 + 1;
-						//////////////////////////////////////////////////////////////////////////
-						//read distribution
-						// Cumulant (NSE part) 
-						////////////////////////////////////////////////////////////////////////////
-						//////////////////////////////////////////////////////////////////////////
-
-						//E   N  T
-						//c   c  c
-						//////////
-						//W   S  B
-						//a   a  a
-
-						//Rest ist b
-
-						//mfxyz
-						//a - negative
-						//b - null
-						//c - positive
-
-						// a b c
-						//-1 0 1
-
-						real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-						real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-						real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-						real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-						real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-						real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-						real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-						real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-						real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-						real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-						real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-						real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-						real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-						real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-						real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-						real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-						real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-						real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-						real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-						real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-						real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-						real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-						real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-						real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-						real m0, m1, m2;
-
-						real 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;
-
-						real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-							(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-							(mfcbb - mfabb));
-						real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-							(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-							(mfbcb - mfbab));
-						real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-							(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-							(mfbbc - mfbba));
-
-						real collFactorF = collFactor;
-
-						//forcing 
-						///////////////////////////////////////////////////////////////////////////////////////////
-						if (withForcing)
-						{
-							muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1);
-							muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2);
-							muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3);
-
-							forcingX1 = muForcingX1.Eval();
-							forcingX2 = muForcingX2.Eval();
-							forcingX3 = muForcingX3.Eval();
-
-							vvx += forcingX1 * deltaT * 0.5; // X
-							vvy += forcingX2 * deltaT * 0.5; // Y
-							vvz += forcingX3 * deltaT * 0.5; // Z
-						}
-						///////////////////////////////////////////////////////////////////////////////////////////               
-						real 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);
-
-						real vx2;
-						real vy2;
-						real vz2;
-						vx2 = vvx * vvx;
-						vy2 = vvy * vvy;
-						vz2 = vvz * vvz;
-						////////////////////////////////////////////////////////////////////////////////////
-						real wadjust;
-						real qudricLimit = 0.01;
-						////////////////////////////////////////////////////////////////////////////////////
-						//Hin
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						m2 = mfaaa + mfaac;
-						m1 = mfaac - mfaaa;
-						m0 = m2 + mfaab;
-						mfaaa = m0;
-						m0 += c1o36 * oMdrho;
-						mfaab = m1 - m0 * vvz;
-						mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaba + mfabc;
-						m1 = mfabc - mfaba;
-						m0 = m2 + mfabb;
-						mfaba = m0;
-						m0 += c1o9 * oMdrho;
-						mfabb = m1 - m0 * vvz;
-						mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaca + mfacc;
-						m1 = mfacc - mfaca;
-						m0 = m2 + mfacb;
-						mfaca = m0;
-						m0 += c1o36 * oMdrho;
-						mfacb = m1 - m0 * vvz;
-						mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbaa + mfbac;
-						m1 = mfbac - mfbaa;
-						m0 = m2 + mfbab;
-						mfbaa = m0;
-						m0 += c1o9 * oMdrho;
-						mfbab = m1 - m0 * vvz;
-						mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbba + mfbbc;
-						m1 = mfbbc - mfbba;
-						m0 = m2 + mfbbb;
-						mfbba = m0;
-						m0 += c4o9 * oMdrho;
-						mfbbb = m1 - m0 * vvz;
-						mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbca + mfbcc;
-						m1 = mfbcc - mfbca;
-						m0 = m2 + mfbcb;
-						mfbca = m0;
-						m0 += c1o9 * oMdrho;
-						mfbcb = m1 - m0 * vvz;
-						mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcaa + mfcac;
-						m1 = mfcac - mfcaa;
-						m0 = m2 + mfcab;
-						mfcaa = m0;
-						m0 += c1o36 * oMdrho;
-						mfcab = m1 - m0 * vvz;
-						mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcba + mfcbc;
-						m1 = mfcbc - mfcba;
-						m0 = m2 + mfcbb;
-						mfcba = m0;
-						m0 += c1o9 * oMdrho;
-						mfcbb = m1 - m0 * vvz;
-						mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcca + mfccc;
-						m1 = mfccc - mfcca;
-						m0 = m2 + mfccb;
-						mfcca = m0;
-						m0 += c1o36 * oMdrho;
-						mfccb = m1 - m0 * vvz;
-						mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						m2 = mfaaa + mfaca;
-						m1 = mfaca - mfaaa;
-						m0 = m2 + mfaba;
-						mfaaa = m0;
-						m0 += c1o6 * oMdrho;
-						mfaba = m1 - m0 * vvy;
-						mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaab + mfacb;
-						m1 = mfacb - mfaab;
-						m0 = m2 + mfabb;
-						mfaab = m0;
-						mfabb = m1 - m0 * vvy;
-						mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaac + mfacc;
-						m1 = mfacc - mfaac;
-						m0 = m2 + mfabc;
-						mfaac = m0;
-						m0 += c1o18 * oMdrho;
-						mfabc = m1 - m0 * vvy;
-						mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbaa + mfbca;
-						m1 = mfbca - mfbaa;
-						m0 = m2 + mfbba;
-						mfbaa = m0;
-						m0 += c2o3 * oMdrho;
-						mfbba = m1 - m0 * vvy;
-						mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbab + mfbcb;
-						m1 = mfbcb - mfbab;
-						m0 = m2 + mfbbb;
-						mfbab = m0;
-						mfbbb = m1 - m0 * vvy;
-						mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbac + mfbcc;
-						m1 = mfbcc - mfbac;
-						m0 = m2 + mfbbc;
-						mfbac = m0;
-						m0 += c2o9 * oMdrho;
-						mfbbc = m1 - m0 * vvy;
-						mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcaa + mfcca;
-						m1 = mfcca - mfcaa;
-						m0 = m2 + mfcba;
-						mfcaa = m0;
-						m0 += c1o6 * oMdrho;
-						mfcba = m1 - m0 * vvy;
-						mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcab + mfccb;
-						m1 = mfccb - mfcab;
-						m0 = m2 + mfcbb;
-						mfcab = m0;
-						mfcbb = m1 - m0 * vvy;
-						mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcac + mfccc;
-						m1 = mfccc - mfcac;
-						m0 = m2 + mfcbc;
-						mfcac = m0;
-						m0 += c1o18 * oMdrho;
-						mfcbc = m1 - m0 * vvy;
-						mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						m2 = mfaaa + mfcaa;
-						m1 = mfcaa - mfaaa;
-						m0 = m2 + mfbaa;
-						mfaaa = m0;
-						m0 += 1. * oMdrho;
-						mfbaa = m1 - m0 * vvx;
-						mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaba + mfcba;
-						m1 = mfcba - mfaba;
-						m0 = m2 + mfbba;
-						mfaba = m0;
-						mfbba = m1 - m0 * vvx;
-						mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaca + mfcca;
-						m1 = mfcca - mfaca;
-						m0 = m2 + mfbca;
-						mfaca = m0;
-						m0 += vf::basics::constant::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 += vf::basics::constant::c1o3 * oMdrho;
-						mfbac = m1 - m0 * vvx;
-						mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfabc + mfcbc;
-						m1 = mfcbc - mfabc;
-						m0 = m2 + mfbbc;
-						mfabc = m0;
-						mfbbc = m1 - m0 * vvx;
-						mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfacc + mfccc;
-						m1 = mfccc - mfacc;
-						m0 = m2 + mfbcc;
-						mfacc = m0;
-						m0 += c1o9 * oMdrho;
-						mfbcc = m1 - m0 * vvx;
-						mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						// Cumulants
-						////////////////////////////////////////////////////////////////////////////////////
-						real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-						real OxyyPxzz = 1.;//-s9;//2+s9;//
-											  //real OxyyMxzz  = 1.;//2+s9;//
-						real O4 = 1.;
-						real O5 = 1.;
-						real O6 = 1.;
-
-						//Cum 4.
-						//LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-						//LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-						//LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-						real CUMcbb = mfcbb - ((mfcaa + vf::basics::constant::c1o3) * mfabb + 2. * mfbba * mfbab);
-						real CUMbcb = mfbcb - ((mfaca + vf::basics::constant::c1o3) * mfbab + 2. * mfbba * mfabb);
-						real CUMbbc = mfbbc - ((mfaac + vf::basics::constant::c1o3) * mfbba + 2. * mfbab * mfabb);
-
-						real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + vf::basics::constant::c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-						real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + vf::basics::constant::c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-						real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + vf::basics::constant::c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
-
-						//Cum 5.
-						real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - vf::basics::constant::c1o3 * (mfbca + mfbac) * oMdrho;
-						real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - vf::basics::constant::c1o3 * (mfcba + mfabc) * oMdrho;
-						real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - vf::basics::constant::c1o3 * (mfacb + mfcab) * oMdrho;
-
-						//Cum 6.
-						real CUMccc = mfccc + ((-4. * mfbbb * mfbbb
-							- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-							- 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-							- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-							+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-								+ 2. * (mfcaa * mfaca * mfaac)
-								+ 16. * mfbba * mfbab * mfabb)
-							- vf::basics::constant::c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-							- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-							+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-								+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
-
-						//2.
-						// linear combinations
-						real mxxPyyPzz = mfcaa + mfaca + mfaac;
-						real mxxMyy = mfcaa - mfaca;
-						real mxxMzz = mfcaa - mfaac;
-
-						real dxux = -c1o2 * collFactorF * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-						real dyuy = dxux + collFactorF * c3o2 * mxxMyy;
-						real dzuz = dxux + collFactorF * c3o2 * mxxMzz;
-
-//						LBMReal Dxy = -three * collFactorF * mfbba;
-//						LBMReal Dxz = -three * collFactorF * mfbab;
-//						LBMReal Dyz = -three * collFactorF * mfabb;
-						////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-						//non Newtonian fluid collision factor
-//						LBMReal shearRate = sqrt(c2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + one);
-
-						real shearFactor = sqrt(c1o2 * ((mfcaa - mfaaa * vf::basics::constant::c1o3) * (mfcaa - mfaaa * vf::basics::constant::c1o3) + (mfaca - mfaaa * vf::basics::constant::c1o3) * (mfaca - mfaaa * vf::basics::constant::c1o3) + (mfaac - mfaaa * vf::basics::constant::c1o3) * (mfaac - mfaaa * vf::basics::constant::c1o3)) + mfbba * mfbba + mfbab * mfbab + mfabb * mfabb) + UbMath::Epsilon<real>::val();
-
-						//collFactorF = getRheologyCollFactor(collFactorF, shearRate, rho);
-						////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-						//relax
-						//mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-						//
-						//LBMReal collFactorFyy = getRheologyCollFactor(collFactorF, std::sqrt(dxux*dxux + dyuy*dyuy) / (rho + one), rho);
-						//mxxMyy += collFactorFyy * (-mxxMyy) - 3. * (1. - c1o2 * collFactorFyy) * (vx2 * dxux - vy2 * dyuy);
-						//
-						//LBMReal collFactorFzz = getRheologyCollFactor(collFactorF, std::sqrt(dxux*dxux + dzuz*dzuz) / (rho + one), rho);
-						//mxxMzz += collFactorFzz * (-mxxMzz) - 3. * (1. - c1o2 * collFactorFzz) * (vx2 * dxux - vz2 * dzuz);
-
-						//mfabb += getRheologyCollFactor(collFactorF, std::abs(Dyz) / (rho + one), rho) * (-mfabb);
-						//mfbab += getRheologyCollFactor(collFactorF, std::abs(Dxz) / (rho + one), rho) * (-mfbab);
-						//mfbba += getRheologyCollFactor(collFactorF, std::abs(Dxy) / (rho + one), rho) * (-mfbba);
-
-						SPtr<Rheology> thix = Rheology::getInstance();
-						real tau0 = thix->getYieldStress();
-
-						mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz /*+ ((mxxPyyPzz-mfaaa)/shearFactor*tau0)*/) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-						//mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-						//mxxMyy += collFactorF * (-mxxMyy + mxxMyy/shearFactor*tau0) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vy2 * dyuy);
-						//mxxMzz += collFactorF * (-mxxMzz + mxxMzz/shearFactor*tau0) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vz2 * dzuz);
-
-						//mfabb += collFactorF * (-mfabb + mfabb/shearFactor*tau0);
-						//mfbab += collFactorF * (-mfbab + mfbab/shearFactor*tau0);
-						//mfbba += collFactorF * (-mfbba + mfbba/shearFactor*tau0);
-
-						collFactorF = collFactor * (c1o1 - tau0 / shearFactor);
-
-						mxxMyy += collFactorF * (-mxxMyy/* + mxxMyy / shearFactor * tau0*/) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vy2 * dyuy);
-						mxxMzz += collFactorF * (-mxxMzz/* + mxxMzz / shearFactor * tau0*/) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vz2 * dzuz);
-
-						mfabb += collFactorF * (-mfabb/* + mfabb / shearFactor * tau0*/);
-						mfbab += collFactorF * (-mfbab/* + mfbab / shearFactor * tau0*/);
-						mfbba += collFactorF * (-mfbba/* + mfbba / shearFactor * tau0*/);
-
-
-						// linear combinations back
-						mfcaa = vf::basics::constant::c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-						mfaca = vf::basics::constant::c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
-						mfaac = vf::basics::constant::c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-						//3.
-						// linear combinations
-						real mxxyPyzz = mfcba + mfabc;
-						real mxxyMyzz = mfcba - mfabc;
-
-						real mxxzPyyz = mfcab + mfacb;
-						real mxxzMyyz = mfcab - mfacb;
-
-						real mxyyPxzz = mfbca + mfbac;
-						real mxyyMxzz = mfbca - mfbac;
-
-						//relax
-						wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-						mfbbb += wadjust * (-mfbbb);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-						mxxyPyzz += wadjust * (-mxxyPyzz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-						mxxyMyzz += wadjust * (-mxxyMyzz);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-						mxxzPyyz += wadjust * (-mxxzPyyz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-						mxxzMyyz += wadjust * (-mxxzMyyz);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-						mxyyPxzz += wadjust * (-mxyyPxzz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-						mxyyMxzz += wadjust * (-mxyyMxzz);
-
-						// linear combinations back
-						mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-						mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-						mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-						mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-						mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-						mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-						//4.
-						CUMacc += O4 * (-CUMacc);
-						CUMcac += O4 * (-CUMcac);
-						CUMcca += O4 * (-CUMcca);
-
-						CUMbbc += O4 * (-CUMbbc);
-						CUMbcb += O4 * (-CUMbcb);
-						CUMcbb += O4 * (-CUMcbb);
-
-						//5.
-						CUMbcc += O5 * (-CUMbcc);
-						CUMcbc += O5 * (-CUMcbc);
-						CUMccb += O5 * (-CUMccb);
-
-						//6.
-						CUMccc += O6 * (-CUMccc);
-
-						//back cumulants to central moments
-						//4.
-						//mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-						//mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-						//mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-						mfcbb = CUMcbb + ((mfcaa + vf::basics::constant::c1o3) * mfabb + 2. * mfbba * mfbab);
-						mfbcb = CUMbcb + ((mfaca + vf::basics::constant::c1o3) * mfbab + 2. * mfbba * mfabb);
-						mfbbc = CUMbbc + ((mfaac + vf::basics::constant::c1o3) * mfbba + 2. * mfbab * mfabb);
-
-						mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + vf::basics::constant::c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
-						mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + vf::basics::constant::c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
-						mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + vf::basics::constant::c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
-
-						//5.
-						mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + vf::basics::constant::c1o3 * (mfbca + mfbac) * oMdrho;
-						mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + vf::basics::constant::c1o3 * (mfcba + mfabc) * oMdrho;
-						mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + vf::basics::constant::c1o3 * (mfacb + mfcab) * oMdrho;
-
-						//6.
-						mfccc = CUMccc - ((-4. * mfbbb * mfbbb
-							- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-							- 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-							- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-							+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-								+ 2. * (mfcaa * mfaca * mfaac)
-								+ 16. * mfbba * mfbab * mfabb)
-							- vf::basics::constant::c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
-							- c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
-							+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-								+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//forcing
-						mfbaa = -mfbaa;
-						mfaba = -mfaba;
-						mfaab = -mfaab;
-						//////////////////////////////////////////////////////////////////////////////////////
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//back
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
-						m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-						mfaaa = m0;
-						mfaab = m1;
-						mfaac = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-						m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
-						m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-						mfaba = m0;
-						mfabb = m1;
-						mfabc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + vf::basics::constant::c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - vf::basics::constant::c1o3 * oMdrho * vz2;
-						m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + vf::basics::constant::c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfaca = m0;
-						mfacb = m1;
-						mfacc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-						m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
-						m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-						mfbaa = m0;
-						mfbab = m1;
-						mfbac = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-						m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
-						m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-						mfbba = m0;
-						mfbbb = m1;
-						mfbbc = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-						m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
-						m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-						mfbca = m0;
-						mfbcb = m1;
-						mfbcc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + vf::basics::constant::c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - vf::basics::constant::c1o3 * oMdrho * vz2;
-						m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + vf::basics::constant::c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfcaa = m0;
-						mfcab = m1;
-						mfcac = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-						m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
-						m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-						mfcba = m0;
-						mfcbb = m1;
-						mfcbc = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
-						m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfcca = m0;
-						mfccb = m1;
-						mfccc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
-						m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaaa = m0;
-						mfaba = m1;
-						mfaca = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
-						m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaab = m0;
-						mfabb = m1;
-						mfacb = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
-						m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaac = m0;
-						mfabc = m1;
-						mfacc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-						m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
-						m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-						mfbaa = m0;
-						mfbba = m1;
-						mfbca = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-						m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
-						m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-						mfbab = m0;
-						mfbbb = m1;
-						mfbcb = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-						m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
-						m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-						mfbac = m0;
-						mfbbc = m1;
-						mfbcc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
-						m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcaa = m0;
-						mfcba = m1;
-						mfcca = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
-						m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcab = m0;
-						mfcbb = m1;
-						mfccb = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
-						m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcac = m0;
-						mfcbc = m1;
-						mfccc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaaa = m0;
-						mfbaa = m1;
-						mfcaa = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaba = m0;
-						mfbba = m1;
-						mfcba = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaca = m0;
-						mfbca = m1;
-						mfcca = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaab = m0;
-						mfbab = m1;
-						mfcab = m2;
-						///////////b////////////////////////////////////////////////////////////////////////
-						m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
-						m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfabb = m0;
-						mfbbb = m1;
-						mfcbb = m2;
-						///////////b////////////////////////////////////////////////////////////////////////
-						m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfacb = m0;
-						mfbcb = m1;
-						mfccb = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaac = m0;
-						mfbac = m1;
-						mfcac = m2;
-						///////////c////////////////////////////////////////////////////////////////////////
-						m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfabc = m0;
-						mfbbc = m1;
-						mfcbc = m2;
-						///////////c////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfacc = m0;
-						mfbcc = m1;
-						mfccc = m2;
-
-						//////////////////////////////////////////////////////////////////////////
-						//proof correctness
-						//////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-						real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-							+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-							+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-						//LBMReal dif = fabs(rho - rho_post);
-						real dif = rho - rho_post;
-#ifdef SINGLEPRECISION
-						if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-						if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif					
-						{
-							UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post)
-								+ " dif=" + UbSystem::toString(dif)
-								+ " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-							//UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-							//exit(EXIT_FAILURE);
-						}
-#endif
-						//////////////////////////////////////////////////////////////////////////
-						//write distribution
-						//////////////////////////////////////////////////////////////////////////
-						(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-						(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-						(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-						(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-						(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-						(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-						(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-						(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-						(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-						(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-						(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
-					}
-				}
-			}
-		}
-
-	}
-}
-
-//SPtr<LBMKernel> RheologyModelLBMKernel2::clone()
-//{
-//	SPtr<LBMKernel> kernel(new RheologyModelLBMKernel2());
-//	kernel->setNX(nx);
-//	kernel->setCollisionFactor(collFactor);
-//	collFactorF = collFactor;
-//	dynamicPointerCast<RheologyModelLBMKernel2>(kernel)->initDataSet();
-//	kernel->setBCSet(bcSet->clone(kernel));
-//	kernel->setWithForcing(withForcing);
-//	kernel->setForcingX1(muForcingX1);
-//	kernel->setForcingX2(muForcingX2);
-//	kernel->setForcingX3(muForcingX3);
-//	kernel->setIndex(ix1, ix2, ix3);
-//	kernel->setDeltaT(deltaT);
-//
-//	return kernel;
-//}
-
-real RheologyModelLBMKernel2::getCalculationTime()
-{
-   return timer.getTotalTime();
-}
-
-void RheologyModelLBMKernel2::swapDistributions()
-{
-   LBMKernel::swapDistributions();
-}
-
-void RheologyModelLBMKernel2::initDataSet()
-{
-   SPtr<DistributionArray3D> df(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.0));
-   dataSet->setFdistributions(df);
-}
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.h b/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.h
deleted file mode 100644
index ca97551c849d2b3315ff1813ecb0b3936a451a5b..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef RheologyModelLBMKernel2_H
-#define RheologyModelLBMKernel2_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-class RheologyModelLBMKernel2;
-
-//! \brief Base class for model of thixotropy based on K16. Use Template Method design pattern for Implementation of different models. 
-//! \author K. Kutscher, M. Geier
-class RheologyModelLBMKernel2 : public LBMKernel
-{
-public:
-	RheologyModelLBMKernel2();
-	virtual ~RheologyModelLBMKernel2();
-	void calculate(int step);
-	virtual SPtr<LBMKernel> clone() { UB_THROW(UbException("SPtr<LBMKernel> clone() - belongs in the derived class")); };
-	real getCalculationTime();
-
-	void swapDistributions();
-
-protected:
-	void initDataSet();
-
-	virtual real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const { UB_THROW(UbException("real getRheologyCollFactor() - belongs in the derived class")); }
-
-	real f[D3Q27System::ENDF + 1];
-
-	UbTimer timer;
-
-	real OxyyMxzz;
-	
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-	mu::value_type muX1, muX2, muX3;
-	mu::value_type muDeltaT;
-	mu::value_type muNu;
-	real forcingX1;
-	real forcingX2;
-	real forcingX3;
-
-	bool test;
-};
-
-#endif
diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyPowellEyringModelLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/RheologyPowellEyringModelLBMKernel.h
deleted file mode 100644
index 5cf0533f96b1c1df10ea8843196e15064044cbb9..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/RheologyPowellEyringModelLBMKernel.h
+++ /dev/null
@@ -1,70 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file RheologyPowellEyringModelLBMKernel.h
-//! \ingroup LBM
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef RheologyPowellEyringModelLBMKernel_H
-#define RheologyPowellEyringModelLBMKernel_H
-
-#include "RheologyK17LBMKernel.h"
-#include "Rheology.h"
-
-//! \brief    Cumulant LBM kernel + Herschel-Bulkley plastic model 
-//! \author K. Kutscher, M. Geier
-class RheologyPowellEyringModelLBMKernel : public RheologyK17LBMKernel
-{
-public:
-	RheologyPowellEyringModelLBMKernel() {};
-	~RheologyPowellEyringModelLBMKernel() {};
-	SPtr<LBMKernel> clone() override
-	{
-		SPtr<LBMKernel> kernel(new RheologyPowellEyringModelLBMKernel());
-		kernel->setNX(nx);
-		kernel->setCollisionFactor(collFactor);
-		dynamicPointerCast<RheologyPowellEyringModelLBMKernel>(kernel)->initDataSet();
-		kernel->setBCSet(bcSet->clone(kernel));
-		kernel->setWithForcing(withForcing);
-		kernel->setForcingX1(muForcingX1);
-		kernel->setForcingX2(muForcingX2);
-		kernel->setForcingX3(muForcingX3);
-		kernel->setIndex(ix1, ix2, ix3);
-		kernel->setDeltaT(deltaT);
-
-		return kernel;
-	}
-protected:
-	real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override
-	{
-		return Rheology::getPowellEyringCollFactor(omegaInf, shearRate, drho);
-	}
-};
-
-
-#endif
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.cpp b/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.cpp
deleted file mode 100644
index a55ee9a28740843a4bf3c8587b3afb5f348c2759..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.cpp
+++ /dev/null
@@ -1,1873 +0,0 @@
-#include "ThixotropyExpLBMKernel.h"
-#include "D3Q27System.h"
-#include "Interpolator.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <math.h>
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-
-#define PROOF_CORRECTNESS
-
-//using namespace UbMath; 
-using namespace vf::basics::constant;
-
-//////////////////////////////////////////////////////////////////////////
-ThixotropyExpLBMKernel::ThixotropyExpLBMKernel()
-{
-   this->parameter = ThixotropyExpLBMKernel::NORMAL;
-	this->compressible = false;
-	//this->TwoDistributions = true;
-}
-//////////////////////////////////////////////////////////////////////////
-ThixotropyExpLBMKernel::~ThixotropyExpLBMKernel(void)
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyExpLBMKernel::initDataSet()
-{
-	//DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0));
-	SPtr<DistributionArray3D> df(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.0));
-	SPtr<DistributionArray3D> dh(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.0));
-	dataSet->setFdistributions(df);
-	dataSet->setHdistributions(dh);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> ThixotropyExpLBMKernel::clone()
-{
-	SPtr<LBMKernel> kernel(new ThixotropyExpLBMKernel());
-	kernel->setNX(nx);
-	kernel->setCollisionFactor(collFactor);
-	collFactorF = collFactor;
-	collFactorH = collFactor;
-	dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->initDataSet();
-	dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->setCollisionFactorF(this->collFactorF);
-	dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->setCollisionFactorH(this->collFactorH);
-	dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->setAlpha(this->alpha);
-	dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->setTheta(this->theta);
-	kernel->setBCSet(bcSet->clone(kernel));
-	kernel->setWithForcing(withForcing);
-	kernel->setForcingX1(muForcingX1);
-	kernel->setForcingX2(muForcingX2);
-	kernel->setForcingX3(muForcingX3);
-	kernel->setIndex(ix1, ix2, ix3);
-	kernel->setDeltaT(deltaT);
-
-	switch (parameter)
-	{
-	case NORMAL:
-		dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->OxyyMxzz = 1.0;
-		break;
-	case MAGIC:
-		dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->OxyyMxzz = 2.0 + (-collFactorF);
-		break;
-	}
-	return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyExpLBMKernel::calculate(int step)
-{
-	using namespace D3Q27System;
-
-	//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);
-	}
-	/////////////////////////////////////
-
-	localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-	zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-	localDistributionsH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-	nonLocalDistributionsH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-	zeroDistributionsH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-
-	//#pragma omp parallel num_threads(8)
-	{
-		//   int i = omp_get_thread_num();
-		//   printf_s("Hello from thread %d\n", i);
-		//}
-		//#pragma omp for 
-		for (int x3 = minX3; x3 < maxX3; x3++)
-		{
-			for (int x2 = minX2; x2 < maxX2; x2++)
-			{
-				for (int x1 = minX1; x1 < maxX1; x1++)
-				{
-					if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3))
-					{
-						int x1p = x1 + 1;
-						int x2p = x2 + 1;
-						int x3p = x3 + 1;
-						//////////////////////////////////////////////////////////////////////////
-						//read distribution
-						// Cumulant (NSE part) 
-						////////////////////////////////////////////////////////////////////////////
-						//////////////////////////////////////////////////////////////////////////
-
-						real mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-						real mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-						real mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-						real mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-						real mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-						real mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-						real mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-						real mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-						real mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-						real mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-						real mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-						real mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-						real mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-								  
-						real mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-						real mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-						real mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-						real mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-						real mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-						real mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-						real mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-						real mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-						real mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-						real mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						real mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						real mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						real mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-								  
-						real mfbbb = (*this->zeroDistributionsH)(x1, x2, x3);
-
-						real lambda = (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;
-
-						//E   N  T
-						//c   c  c
-						//////////
-						//W   S  B
-						//a   a  a
-
-						//Rest ist b
-
-						//mfxyz
-						//a - negative
-						//b - null
-						//c - positive
-
-						// a b c
-						//-1 0 1
-
-						mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-						mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-						mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-						mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-						mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-						mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-						mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-						mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-						mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-						mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-						mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-						mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-						mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-						mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-						mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-						mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-						mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-						mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-						mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-						mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-						mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-						mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-						mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-						mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-						real m0, m1, m2;
-
-						real 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;
-
-						real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-							(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-							(mfcbb - mfabb));
-						real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-							(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-							(mfbcb - mfbab));
-						real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-							(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-							(mfbbc - mfbba));
-						
-
-//						LBMReal eta0 = (1/collFactor-c1o2)*c1o3;
-//						LBMReal eta = (1 + lambda)* eta0;
-						//collFactorF = one/(3*eta/(rho+one)+c1o2);
-						collFactorF = collFactor;
-
-						//forcing 
-						///////////////////////////////////////////////////////////////////////////////////////////
-						if (withForcing)
-						{
-							muX1 = static_cast<real>(x1 - 1 + ix1*maxX1);
-							muX2 = static_cast<real>(x2 - 1 + ix2*maxX2);
-							muX3 = static_cast<real>(x3 - 1 + ix3*maxX3);
-
-							forcingX1 = muForcingX1.Eval();
-							forcingX2 = muForcingX2.Eval();
-							forcingX3 = muForcingX3.Eval();
-
-							vvx += forcingX1*deltaT*0.5; // X
-							vvy += forcingX2*deltaT*0.5; // Y
-							vvz += forcingX3*deltaT*0.5; // Z
-						}
-						///////////////////////////////////////////////////////////////////////////////////////////               
-						real 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);
-
-						real vx2;
-						real vy2;
-						real vz2;
-						vx2 = vvx*vvx;
-						vy2 = vvy*vvy;
-						vz2 = vvz*vvz;
-						////////////////////////////////////////////////////////////////////////////////////
-						real wadjust;
-						real qudricLimit = 0.01;
-						////////////////////////////////////////////////////////////////////////////////////
-						//Hin
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						m2 = mfaaa + mfaac;
-						m1 = mfaac - mfaaa;
-						m0 = m2 + mfaab;
-						mfaaa = m0;
-						m0 += c1o36 * oMdrho;
-						mfaab = m1 - m0 * vvz;
-						mfaac = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaba + mfabc;
-						m1 = mfabc - mfaba;
-						m0 = m2 + mfabb;
-						mfaba = m0;
-						m0 += c1o9 * oMdrho;
-						mfabb = m1 - m0 * vvz;
-						mfabc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaca + mfacc;
-						m1 = mfacc - mfaca;
-						m0 = m2 + mfacb;
-						mfaca = m0;
-						m0 += c1o36 * oMdrho;
-						mfacb = m1 - m0 * vvz;
-						mfacc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbaa + mfbac;
-						m1 = mfbac - mfbaa;
-						m0 = m2 + mfbab;
-						mfbaa = m0;
-						m0 += c1o9 * oMdrho;
-						mfbab = m1 - m0 * vvz;
-						mfbac = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbba + mfbbc;
-						m1 = mfbbc - mfbba;
-						m0 = m2 + mfbbb;
-						mfbba = m0;
-						m0 += c4o9 * oMdrho;
-						mfbbb = m1 - m0 * vvz;
-						mfbbc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbca + mfbcc;
-						m1 = mfbcc - mfbca;
-						m0 = m2 + mfbcb;
-						mfbca = m0;
-						m0 += c1o9 * oMdrho;
-						mfbcb = m1 - m0 * vvz;
-						mfbcc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcaa + mfcac;
-						m1 = mfcac - mfcaa;
-						m0 = m2 + mfcab;
-						mfcaa = m0;
-						m0 += c1o36 * oMdrho;
-						mfcab = m1 - m0 * vvz;
-						mfcac = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcba + mfcbc;
-						m1 = mfcbc - mfcba;
-						m0 = m2 + mfcbb;
-						mfcba = m0;
-						m0 += c1o9 * oMdrho;
-						mfcbb = m1 - m0 * vvz;
-						mfcbc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcca + mfccc;
-						m1 = mfccc - mfcca;
-						m0 = m2 + mfccb;
-						mfcca = m0;
-						m0 += c1o36 * oMdrho;
-						mfccb = m1 - m0 * vvz;
-						mfccc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						m2 = mfaaa + mfaca;
-						m1 = mfaca - mfaaa;
-						m0 = m2 + mfaba;
-						mfaaa = m0;
-						m0 += c1o6 * oMdrho;
-						mfaba = m1 - m0 * vvy;
-						mfaca = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaab + mfacb;
-						m1 = mfacb - mfaab;
-						m0 = m2 + mfabb;
-						mfaab = m0;
-						mfabb = m1 - m0 * vvy;
-						mfacb = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaac + mfacc;
-						m1 = mfacc - mfaac;
-						m0 = m2 + mfabc;
-						mfaac = m0;
-						m0 += c1o18 * oMdrho;
-						mfabc = m1 - m0 * vvy;
-						mfacc = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbaa + mfbca;
-						m1 = mfbca - mfbaa;
-						m0 = m2 + mfbba;
-						mfbaa = m0;
-						m0 += c2o3 * oMdrho;
-						mfbba = m1 - m0 * vvy;
-						mfbca = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbab + mfbcb;
-						m1 = mfbcb - mfbab;
-						m0 = m2 + mfbbb;
-						mfbab = m0;
-						mfbbb = m1 - m0 * vvy;
-						mfbcb = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbac + mfbcc;
-						m1 = mfbcc - mfbac;
-						m0 = m2 + mfbbc;
-						mfbac = m0;
-						m0 += c2o9 * oMdrho;
-						mfbbc = m1 - m0 * vvy;
-						mfbcc = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcaa + mfcca;
-						m1 = mfcca - mfcaa;
-						m0 = m2 + mfcba;
-						mfcaa = m0;
-						m0 += c1o6 * oMdrho;
-						mfcba = m1 - m0 * vvy;
-						mfcca = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcab + mfccb;
-						m1 = mfccb - mfcab;
-						m0 = m2 + mfcbb;
-						mfcab = m0;
-						mfcbb = m1 - m0 * vvy;
-						mfccb = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcac + mfccc;
-						m1 = mfccc - mfcac;
-						m0 = m2 + mfcbc;
-						mfcac = m0;
-						m0 += c1o18 * oMdrho;
-						mfcbc = m1 - m0 * vvy;
-						mfccc = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						m2 = mfaaa + mfcaa;
-						m1 = mfcaa - mfaaa;
-						m0 = m2 + mfbaa;
-						mfaaa = m0;
-						m0 += 1. * oMdrho;
-						mfbaa = m1 - m0 * vvx;
-						mfcaa = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaba + mfcba;
-						m1 = mfcba - mfaba;
-						m0 = m2 + mfbba;
-						mfaba = m0;
-						mfbba = m1 - m0 * vvx;
-						mfcba = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaca + mfcca;
-						m1 = mfcca - mfaca;
-						m0 = m2 + mfbca;
-						mfaca = m0;
-						m0 += c1o3 * oMdrho;
-						mfbca = m1 - m0 * vvx;
-						mfcca = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaab + mfcab;
-						m1 = mfcab - mfaab;
-						m0 = m2 + mfbab;
-						mfaab = m0;
-						mfbab = m1 - m0 * vvx;
-						mfcab = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfabb + mfcbb;
-						m1 = mfcbb - mfabb;
-						m0 = m2 + mfbbb;
-						mfabb = m0;
-						mfbbb = m1 - m0 * vvx;
-						mfcbb = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfacb + mfccb;
-						m1 = mfccb - mfacb;
-						m0 = m2 + mfbcb;
-						mfacb = m0;
-						mfbcb = m1 - m0 * vvx;
-						mfccb = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaac + mfcac;
-						m1 = mfcac - mfaac;
-						m0 = m2 + mfbac;
-						mfaac = m0;
-						m0 += c1o3 * oMdrho;
-						mfbac = m1 - m0 * vvx;
-						mfcac = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfabc + mfcbc;
-						m1 = mfcbc - mfabc;
-						m0 = m2 + mfbbc;
-						mfabc = m0;
-						mfbbc = m1 - m0 * vvx;
-						mfcbc = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfacc + mfccc;
-						m1 = mfccc - mfacc;
-						m0 = m2 + mfbcc;
-						mfacc = m0;
-						m0 += c1o9 * oMdrho;
-						mfbcc = m1 - m0 * vvx;
-						mfccc = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						// Cumulants
-						////////////////////////////////////////////////////////////////////////////////////
-						real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-						real OxyyPxzz = 1.;//-s9;//2+s9;//
-											  //LBMReal OxyyMxzz  = 1.;//2+s9;//
-						real O4 = 1.;
-						real O5 = 1.;
-						real O6 = 1.;
-
-						//Cum 4.
-						//LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-						//LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-						//LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-						real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-						real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-						real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-						real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho);
-						real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - 1)*oMdrho);
-						real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho);
-
-						//Cum 5.
-						real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-						real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-						real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-						//Cum 6.
-						real CUMccc = mfccc + ((-4. *  mfbbb * mfbbb
-							- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-							- 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-							- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-							+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-								+ 2. * (mfcaa * mfaca * mfaac)
-								+ 16. *  mfbba * mfbab * mfabb)
-							- c1o3* (mfacc + mfcac + mfcca) * oMdrho - c1o9*oMdrho*oMdrho
-							- c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1. - 2.* oMdrho) - c1o27* oMdrho * oMdrho*(-2.* oMdrho)
-							+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-								+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) + c1o27*oMdrho;
-
-						//2.
-						// linear combinations
-						real mxxPyyPzz = mfcaa + mfaca + mfaac;
-						real mxxMyy = mfcaa - mfaca;
-						real mxxMzz = mfcaa - mfaac;
-
-						real dxux = -c1o2 * collFactorF *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz);
-						real dyuy = dxux + collFactorF * c3o2 * mxxMyy;
-						real dzuz = dxux + collFactorF * c3o2 * mxxMzz;
-
-						real Dxy =-c3o1*collFactorF*mfbba;
-						real Dxz =-c3o1*collFactorF*mfbab;
-						real Dyz =-c3o1*collFactorF*mfabb;
-
-						real gammaDot = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + c1o1);
-						//collFactorF = BinghamModel::getBinghamCollFactor(collFactorF, gammaDot, rho);
-
-						//relax
-						mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-						mxxMyy += collFactorF * (-mxxMyy) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vy2 * dyuy);
-						mxxMzz += collFactorF * (-mxxMzz) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vz2 * dzuz);
-
-						mfabb += collFactorF * (-mfabb);
-						mfbab += collFactorF * (-mfbab);
-						mfbba += collFactorF * (-mfbba);
-
-						// linear combinations back
-						mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-						mfaca = c1o3 * (-2. *  mxxMyy + mxxMzz + mxxPyyPzz);
-						mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-						//3.
-						// linear combinations
-						real mxxyPyzz = mfcba + mfabc;
-						real mxxyMyzz = mfcba - mfabc;
-
-						real mxxzPyyz = mfcab + mfacb;
-						real mxxzMyyz = mfcab - mfacb;
-
-						real mxyyPxzz = mfbca + mfbac;
-						real mxyyMxzz = mfbca - mfbac;
-
-						//relax
-						wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-						mfbbb += wadjust * (-mfbbb);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-						mxxyPyzz += wadjust * (-mxxyPyzz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-						mxxyMyzz += wadjust * (-mxxyMyzz);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-						mxxzPyyz += wadjust * (-mxxzPyyz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-						mxxzMyyz += wadjust * (-mxxzMyyz);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-						mxyyPxzz += wadjust * (-mxyyPxzz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-						mxyyMxzz += wadjust * (-mxyyMxzz);
-
-						// linear combinations back
-						mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-						mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-						mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-						mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-						mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-						mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-						//4.
-						CUMacc += O4 * (-CUMacc);
-						CUMcac += O4 * (-CUMcac);
-						CUMcca += O4 * (-CUMcca);
-
-						CUMbbc += O4 * (-CUMbbc);
-						CUMbcb += O4 * (-CUMbcb);
-						CUMcbb += O4 * (-CUMcbb);
-
-						//5.
-						CUMbcc += O5 * (-CUMbcc);
-						CUMcbc += O5 * (-CUMcbc);
-						CUMccb += O5 * (-CUMccb);
-
-						//6.
-						CUMccc += O6 * (-CUMccc);
-
-						//back cumulants to central moments
-						//4.
-						//mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-						//mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-						//mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-						mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-						mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-						mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-						mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho;
-						mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - 1)*oMdrho;
-						mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho;
-
-						//5.
-						mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-						mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-						mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-						//6.
-						mfccc = CUMccc - ((-4. *  mfbbb * mfbbb
-							- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-							- 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-							- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-							+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-								+ 2. * (mfcaa * mfaca * mfaac)
-								+ 16. *  mfbba * mfbab * mfabb)
-							- c1o3* (mfacc + mfcac + mfcca) * oMdrho - c1o9*oMdrho*oMdrho
-							- c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1. - 2.* oMdrho) - c1o27* oMdrho * oMdrho*(-2.* oMdrho)
-							+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-								+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) - c1o27*oMdrho;
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//forcing
-						mfbaa = -mfbaa;
-						mfaba = -mfaba;
-						mfaab = -mfaab;
-						//////////////////////////////////////////////////////////////////////////////////////
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//back
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfaac - 2. * mfaab *  vvz + mfaaa                * (1. - vz2) - 1. * oMdrho * vz2;
-						m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-						mfaaa = m0;
-						mfaab = m1;
-						mfaac = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-						m1 = -mfabc - 2. * mfabb *  vvz + mfaba * (1. - vz2);
-						m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-						mfaba = m0;
-						mfabb = m1;
-						mfabc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfacc - 2. * mfacb *  vvz + mfaca                  * (1. - vz2) - c1o3 * oMdrho * vz2;
-						m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfaca = m0;
-						mfacb = m1;
-						mfacc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-						m1 = -mfbac - 2. * mfbab *  vvz + mfbaa * (1. - vz2);
-						m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-						mfbaa = m0;
-						mfbab = m1;
-						mfbac = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-						m1 = -mfbbc - 2. * mfbbb *  vvz + mfbba * (1. - vz2);
-						m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-						mfbba = m0;
-						mfbbb = m1;
-						mfbbc = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-						m1 = -mfbcc - 2. * mfbcb *  vvz + mfbca * (1. - vz2);
-						m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-						mfbca = m0;
-						mfbcb = m1;
-						mfbcc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfcac - 2. * mfcab *  vvz + mfcaa                  * (1. - vz2) - c1o3 * oMdrho * vz2;
-						m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfcaa = m0;
-						mfcab = m1;
-						mfcac = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-						m1 = -mfcbc - 2. * mfcbb *  vvz + mfcba * (1. - vz2);
-						m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-						mfcba = m0;
-						mfcbb = m1;
-						mfcbc = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfccc - 2. * mfccb *  vvz + mfcca                  * (1. - vz2) - c1o9 * oMdrho * vz2;
-						m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfcca = m0;
-						mfccb = m1;
-						mfccc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfaca - 2. * mfaba *  vvy + mfaaa                  * (1. - vy2) - c1o6 * oMdrho * vy2;
-						m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaaa = m0;
-						mfaba = m1;
-						mfaca = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfacb - 2. * mfabb *  vvy + mfaab                  * (1. - vy2) - c2o3 * oMdrho * vy2;
-						m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaab = m0;
-						mfabb = m1;
-						mfacb = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfacc - 2. * mfabc *  vvy + mfaac                  * (1. - vy2) - c1o6 * oMdrho * vy2;
-						m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaac = m0;
-						mfabc = m1;
-						mfacc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-						m1 = -mfbca - 2. * mfbba *  vvy + mfbaa * (1. - vy2);
-						m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-						mfbaa = m0;
-						mfbba = m1;
-						mfbca = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-						m1 = -mfbcb - 2. * mfbbb *  vvy + mfbab * (1. - vy2);
-						m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-						mfbab = m0;
-						mfbbb = m1;
-						mfbcb = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-						m1 = -mfbcc - 2. * mfbbc *  vvy + mfbac * (1. - vy2);
-						m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-						mfbac = m0;
-						mfbbc = m1;
-						mfbcc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfcca - 2. * mfcba *  vvy + mfcaa                   * (1. - vy2) - c1o18 * oMdrho * vy2;
-						m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcaa = m0;
-						mfcba = m1;
-						mfcca = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfccb - 2. * mfcbb *  vvy + mfcab                  * (1. - vy2) - c2o9 * oMdrho * vy2;
-						m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcab = m0;
-						mfcbb = m1;
-						mfccb = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfccc - 2. * mfcbc *  vvy + mfcac                   * (1. - vy2) - c1o18 * oMdrho * vy2;
-						m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcac = m0;
-						mfcbc = m1;
-						mfccc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcaa - 2. * mfbaa *  vvx + mfaaa                   * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaaa = m0;
-						mfbaa = m1;
-						mfcaa = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcba - 2. * mfbba *  vvx + mfaba                  * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaba = m0;
-						mfbba = m1;
-						mfcba = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcca - 2. * mfbca *  vvx + mfaca                   * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaca = m0;
-						mfbca = m1;
-						mfcca = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcab - 2. * mfbab *  vvx + mfaab                  * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaab = m0;
-						mfbab = m1;
-						mfcab = m2;
-						///////////b////////////////////////////////////////////////////////////////////////
-						m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcbb - 2. * mfbbb *  vvx + mfabb                  * (1. - vx2) - c4o9 * oMdrho * vx2;
-						m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfabb = m0;
-						mfbbb = m1;
-						mfcbb = m2;
-						///////////b////////////////////////////////////////////////////////////////////////
-						m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfccb - 2. * mfbcb *  vvx + mfacb                  * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfacb = m0;
-						mfbcb = m1;
-						mfccb = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcac - 2. * mfbac *  vvx + mfaac                   * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaac = m0;
-						mfbac = m1;
-						mfcac = m2;
-						///////////c////////////////////////////////////////////////////////////////////////
-						m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcbc - 2. * mfbbc *  vvx + mfabc                  * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfabc = m0;
-						mfbbc = m1;
-						mfcbc = m2;
-						///////////c////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfccc - 2. * mfbcc *  vvx + mfacc                   * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfacc = m0;
-						mfbcc = m1;
-						mfccc = m2;
-
-						//////////////////////////////////////////////////////////////////////////
-						//proof correctness
-						//////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-						real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-							+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-							+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-						//LBMReal dif = fabs(rho - rho_post);
-						real dif = rho - rho_post;
-#ifdef SINGLEPRECISION
-						if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-						if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif					
-						{
-							UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post)
-								+ " dif=" + UbSystem::toString(dif)
-								+ " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-							//UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-							//exit(EXIT_FAILURE);
-						}
-#endif
-						//////////////////////////////////////////////////////////////////////////
-						//write distribution
-						//////////////////////////////////////////////////////////////////////////
-						(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-						(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-						(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-						(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-						(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-						(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-						(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-						(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-						(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-						(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-						(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-						real ux, uy, uz;
-
-						ux = vvx;						
-						uy = vvy;
-						uz = vvz;
-							
-							
-
-				
-						////////////////////////////////////////////////////////////////////////////
-						// Central Factorized Moment (advection diffusion part) 
-						//////////////////////////////////////////////////////////////////////////
-						//////////////////////////////////////////////////////////////////////////
-						//read distribution
-
-						mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-						mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-						mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-						mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-						mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-						mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-						mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-						mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-						mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-						mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-						mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-						mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-						mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-						mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-						mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-						mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-						mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-						mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-						mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-						mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-						mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-						mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-						mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-						mfbbb = (*this->zeroDistributionsH)(x1, x2, x3);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						real 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;
-					
-						//flocculation
-						//LBMReal lambda = drho;
-
-						//LBMReal theta = 60 * 1.28172e+06;
-						//LBMReal alpha = 0.005;// *10.0;
-
-						//LBMReal gammaDot = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + one);
-
-						//collFactorF = collFactorF - 1e-4 / (gammaDot + one * 1e-9);
-
-						//collFactorF = (collFactorF < 0.5) ? 0.5 : collFactorF;
-
-						real dlambda = c1o1 / theta - alpha * lambda * gammaDot;
-
-
-						//////////////////////////////////////////////////////////////////////////
-						//collision Factorized Central moment Kernel Geier 2015
-						//////////////////////////////////////////////////////////////////////////               
-						real Mom000 = mfaaa + mfaab + mfaac + mfaba + mfabb + mfabc + mfaca +
-							mfacb + mfacc + mfbaa + mfbab + mfbac + mfbba + mfbbb + mfbbc + mfbca +
-							mfbcb + mfbcc + mfcaa + mfcab + mfcac + mfcba + mfcbb + mfcbc + mfcca + mfccb + mfccc;
-						
-						Mom000 += dlambda*c1o2;  //1
-
-																												   //(100)//
-						real Mom100 = mfaaa*(-1 - ux) + mfaab*(-1 - ux) + mfaac*(-1 - ux) + mfaba*(-1 - ux) + mfabb*(-1 - ux) + mfabc*(-1 - ux) + mfaca*(-1 - ux) +
-							mfacb*(-1 - ux) + mfacc*(-1 - ux) + mfcaa*(1 - ux) + mfcab*(1 - ux) + mfcac*(1 - ux) + mfcba*(1 - ux) + mfcbb*(1 - ux) +
-							mfcbc*(1 - ux) + mfcca*(1 - ux) + mfccb*(1 - ux) + mfccc*(1 - ux) - mfbaa*ux - mfbab*ux - mfbac*ux - mfbba*ux - mfbbb*ux -
-							mfbbc*ux - mfbca*ux - mfbcb*ux - mfbcc*ux;
-
-						real Mom010 = mfaaa*(-1 - uy) + mfaab*(-1 - uy) + mfaac*(-1 - uy) + mfbaa*(-1 - uy) + mfbab*(-1 - uy) + mfbac*(-1 - uy) + mfcaa*(-1 - uy) +
-							mfcab*(-1 - uy) + mfcac*(-1 - uy) + mfaca*(1 - uy) + mfacb*(1 - uy) + mfacc*(1 - uy) + mfbca*(1 - uy) + mfbcb*(1 - uy) +
-							mfbcc*(1 - uy) + mfcca*(1 - uy) + mfccb*(1 - uy) + mfccc*(1 - uy) - mfaba*uy - mfabb*uy - mfabc*uy - mfbba*uy - mfbbb*uy -
-							mfbbc*uy - mfcba*uy - mfcbb*uy - mfcbc*uy;
-
-						real Mom001 = mfaaa*(-1 - uz) + mfaba*(-1 - uz) + mfaca*(-1 - uz) + mfbaa*(-1 - uz) + mfbba*(-1 - uz) + mfbca*(-1 - uz) + mfcaa*(-1 - uz) +
-							mfcba*(-1 - uz) + mfcca*(-1 - uz) + mfaac*(1 - uz) + mfabc*(1 - uz) + mfacc*(1 - uz) + mfbac*(1 - uz) + mfbbc*(1 - uz) +
-							mfbcc*(1 - uz) + mfcac*(1 - uz) + mfcbc*(1 - uz) + mfccc*(1 - uz) - mfaab*uz - mfabb*uz - mfacb*uz - mfbab*uz - mfbbb*uz -
-							mfbcb*uz - mfcab*uz - mfcbb*uz - mfccb*uz;
-						////
-
-						//(110)//
-						real Mom110 = mfaaa*(-1 - ux)*(-1 - uy) + mfaab*(-1 - ux)*(-1 - uy) + mfaac*(-1 - ux)*(-1 - uy) + mfcaa*(1 - ux)*(-1 - uy) +
-							mfcab*(1 - ux)*(-1 - uy) + mfcac*(1 - ux)*(-1 - uy) - mfbaa*ux*(-1 - uy) - mfbab*ux*(-1 - uy) - mfbac*ux*(-1 - uy) +
-							mfaca*(-1 - ux)*(1 - uy) + mfacb*(-1 - ux)*(1 - uy) + mfacc*(-1 - ux)*(1 - uy) + mfcca*(1 - ux)*(1 - uy) + mfccb*(1 - ux)*(1 - uy) +
-							mfccc*(1 - ux)*(1 - uy) - mfbca*ux*(1 - uy) - mfbcb*ux*(1 - uy) - mfbcc*ux*(1 - uy) - mfaba*(-1 - ux)*uy - mfabb*(-1 - ux)*uy -
-							mfabc*(-1 - ux)*uy - mfcba*(1 - ux)*uy - mfcbb*(1 - ux)*uy - mfcbc*(1 - ux)*uy + mfbba*ux*uy + mfbbb*ux*uy + mfbbc*ux*uy;
-
-						real Mom101 = mfaaa*(-1 - ux)*(-1 - uz) + mfaba*(-1 - ux)*(-1 - uz) + mfaca*(-1 - ux)*(-1 - uz) + mfcaa*(1 - ux)*(-1 - uz) +
-							mfcba*(1 - ux)*(-1 - uz) + mfcca*(1 - ux)*(-1 - uz) - mfbaa*ux*(-1 - uz) - mfbba*ux*(-1 - uz) - mfbca*ux*(-1 - uz) +
-							mfaac*(-1 - ux)*(1 - uz) + mfabc*(-1 - ux)*(1 - uz) + mfacc*(-1 - ux)*(1 - uz) + mfcac*(1 - ux)*(1 - uz) + mfcbc*(1 - ux)*(1 - uz) +
-							mfccc*(1 - ux)*(1 - uz) - mfbac*ux*(1 - uz) - mfbbc*ux*(1 - uz) - mfbcc*ux*(1 - uz) - mfaab*(-1 - ux)*uz - mfabb*(-1 - ux)*uz -
-							mfacb*(-1 - ux)*uz - mfcab*(1 - ux)*uz - mfcbb*(1 - ux)*uz - mfccb*(1 - ux)*uz + mfbab*ux*uz + mfbbb*ux*uz + mfbcb*ux*uz;
-
-						real Mom011 = mfaaa*(-1 - uy)*(-1 - uz) + mfbaa*(-1 - uy)*(-1 - uz) + mfcaa*(-1 - uy)*(-1 - uz) + mfaca*(1 - uy)*(-1 - uz) +
-							mfbca*(1 - uy)*(-1 - uz) + mfcca*(1 - uy)*(-1 - uz) - mfaba*uy*(-1 - uz) - mfbba*uy*(-1 - uz) - mfcba*uy*(-1 - uz) +
-							mfaac*(-1 - uy)*(1 - uz) + mfbac*(-1 - uy)*(1 - uz) + mfcac*(-1 - uy)*(1 - uz) + mfacc*(1 - uy)*(1 - uz) + mfbcc*(1 - uy)*(1 - uz) +
-							mfccc*(1 - uy)*(1 - uz) - mfabc*uy*(1 - uz) - mfbbc*uy*(1 - uz) - mfcbc*uy*(1 - uz) - mfaab*(-1 - uy)*uz - mfbab*(-1 - uy)*uz -
-							mfcab*(-1 - uy)*uz - mfacb*(1 - uy)*uz - mfbcb*(1 - uy)*uz - mfccb*(1 - uy)*uz + mfabb*uy*uz + mfbbb*uy*uz + mfcbb*uy*uz;
-						////
-
-						real Mom111 = mfaaa*(-1 - ux)*(-1 - uy)*(-1 - uz) + mfcaa*(1 - ux)*(-1 - uy)*(-1 - uz) - mfbaa*ux*(-1 - uy)*(-1 - uz) +
-							mfaca*(-1 - ux)*(1 - uy)*(-1 - uz) + mfcca*(1 - ux)*(1 - uy)*(-1 - uz) - mfbca*ux*(1 - uy)*(-1 - uz) -
-							mfaba*(-1 - ux)*uy*(-1 - uz) - mfcba*(1 - ux)*uy*(-1 - uz) + mfbba*ux*uy*(-1 - uz) + mfaac*(-1 - ux)*(-1 - uy)*(1 - uz) +
-							mfcac*(1 - ux)*(-1 - uy)*(1 - uz) - mfbac*ux*(-1 - uy)*(1 - uz) + mfacc*(-1 - ux)*(1 - uy)*(1 - uz) +
-							mfccc*(1 - ux)*(1 - uy)*(1 - uz) - mfbcc*ux*(1 - uy)*(1 - uz) - mfabc*(-1 - ux)*uy*(1 - uz) - mfcbc*(1 - ux)*uy*(1 - uz) +
-							mfbbc*ux*uy*(1 - uz) - mfaab*(-1 - ux)*(-1 - uy)*uz - mfcab*(1 - ux)*(-1 - uy)*uz + mfbab*ux*(-1 - uy)*uz -
-							mfacb*(-1 - ux)*(1 - uy)*uz - mfccb*(1 - ux)*(1 - uy)*uz + mfbcb*ux*(1 - uy)*uz + mfabb*(-1 - ux)*uy*uz + mfcbb*(1 - ux)*uy*uz -
-							mfbbb*ux*uy*uz;
-
-						//(200)//
-						real Mom200 = ((mfcaa + mfcab + mfcac + mfcba + mfcbb + mfcbc + mfcca + mfccb +
-							mfccc)*pow(-1 + ux, 2) +
-							(mfbaa + mfbab + mfbac + mfbba + mfbbb + mfbbc + mfbca +
-								mfbcb + mfbcc)*pow(ux, 2) +
-								(mfaaa + mfaab + mfaac + mfaba + mfabb + mfabc + mfaca +
-									mfacb + mfacc)*pow(1 + ux, 2)) - Mom000 / 3;
-
-						real Mom020 = ((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) +
-							(mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) +
-							(mfcca + mfccb + mfccc)*pow(-1 + uy, 2) +
-							(mfaba + mfabb + mfabc)*pow(uy, 2) +
-							(mfbba + mfbbb + mfbbc)*pow(uy, 2) +
-							(mfcba + mfcbb + mfcbc)*pow(uy, 2) +
-							(mfaaa + mfaab + mfaac)*pow(1 + uy, 2) +
-							(mfbaa + mfbab + mfbac)*pow(1 + uy, 2) +
-							(mfcaa + mfcab + mfcac)*pow(1 + uy, 2)) - Mom000 / 3;
-
-						real Mom002 = (mfaba + mfabc + mfaca + mfacc + mfbba + mfbbc + mfbca + mfbcc +
-							mfcba + mfcbc + mfcca + mfccc + mfaac*pow(-1 + uz, 2) +
-							mfbac*pow(-1 + uz, 2) + mfcac*pow(-1 + uz, 2) +
-							2 * mfaba*uz - 2 * mfabc*uz + 2 * mfaca*uz - 2 * mfacc*uz +
-							2 * mfbba*uz - 2 * mfbbc*uz + 2 * mfbca*uz - 2 * mfbcc*uz +
-							2 * mfcba*uz - 2 * mfcbc*uz + 2 * mfcca*uz - 2 * mfccc*uz +
-							mfaab*pow(uz, 2) + mfaba*pow(uz, 2) + mfabb*pow(uz, 2) +
-							mfabc*pow(uz, 2) + mfaca*pow(uz, 2) + mfacb*pow(uz, 2) +
-							mfacc*pow(uz, 2) + mfbab*pow(uz, 2) + mfbba*pow(uz, 2) +
-							mfbbb*pow(uz, 2) + mfbbc*pow(uz, 2) + mfbca*pow(uz, 2) +
-							mfbcb*pow(uz, 2) + mfbcc*pow(uz, 2) + mfcab*pow(uz, 2) +
-							mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) + mfcbc*pow(uz, 2) +
-							mfcca*pow(uz, 2) + mfccb*pow(uz, 2) + mfccc*pow(uz, 2) +
-							mfaaa*pow(1 + uz, 2) + mfbaa*pow(1 + uz, 2) +
-							mfcaa*pow(1 + uz, 2)) - Mom000 / 3;
-						////
-
-						//(210)//
-						real Mom210 = (pow(1 + ux, 2)*(-((mfaca + mfacb + mfacc)*(-1 + uy)) -
-							(mfaba + mfabb + mfabc)*uy -
-							(mfaaa + mfaab + mfaac)*(1 + uy)) +
-							pow(ux, 2)*(-((mfbca + mfbcb + mfbcc)*(-1 + uy)) -
-							(mfbba + mfbbb + mfbbc)*uy -
-								(mfbaa + mfbab + mfbac)*(1 + uy)) +
-							pow(-1 + ux, 2)*(-((mfcca + mfccb + mfccc)*(-1 + uy)) -
-							(mfcba + mfcbb + mfcbc)*uy -
-								(mfcaa + mfcab + mfcac)*(1 + uy))) - Mom010 / 3;
-
-						real Mom201 = (-(pow(1 + ux, 2)*(mfaba - mfabc + mfaca - mfacc +
-							mfaac*(-1 + uz) + mfaab*uz + mfaba*uz + mfabb*uz +
-							mfabc*uz + mfaca*uz + mfacb*uz + mfacc*uz +
-							mfaaa*(1 + uz))) -
-							pow(ux, 2)*(mfbba - mfbbc + mfbca - mfbcc +
-								mfbac*(-1 + uz) + mfbab*uz + mfbba*uz + mfbbb*uz +
-								mfbbc*uz + mfbca*uz + mfbcb*uz + mfbcc*uz + mfbaa*(1 + uz))
-							- pow(-1 + ux, 2)*(mfcba - mfcbc + mfcca - mfccc +
-								mfcac*(-1 + uz) + mfcab*uz + mfcba*uz + mfcbb*uz +
-								mfcbc*uz + mfcca*uz + mfccb*uz + mfccc*uz + mfcaa*(1 + uz))) - Mom001 / 3;
-
-						real Mom120 = ((-1 - ux)*((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) +
-							(mfaba + mfabb + mfabc)*pow(uy, 2) +
-							(mfaaa + mfaab + mfaac)*pow(1 + uy, 2)) -
-							ux*((mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) +
-							(mfbba + mfbbb + mfbbc)*pow(uy, 2) +
-								(mfbaa + mfbab + mfbac)*pow(1 + uy, 2)) +
-								(1 - ux)*((mfcca + mfccb + mfccc)*pow(-1 + uy, 2) +
-							(mfcba + mfcbb + mfcbc)*pow(uy, 2) +
-									(mfcaa + mfcab + mfcac)*pow(1 + uy, 2))) - Mom100 / 3;
-
-
-						real Mom102 = (-((1 + ux)*(mfaba + mfabc + mfaca + mfacc +
-							mfaac*pow(-1 + uz, 2) + 2 * mfaba*uz - 2 * mfabc*uz +
-							2 * mfaca*uz - 2 * mfacc*uz + mfaab*pow(uz, 2) +
-							mfaba*pow(uz, 2) + mfabb*pow(uz, 2) +
-							mfabc*pow(uz, 2) + mfaca*pow(uz, 2) +
-							mfacb*pow(uz, 2) + mfacc*pow(uz, 2) +
-							mfaaa*pow(1 + uz, 2))) -
-							ux*(mfbba + mfbbc + mfbca + mfbcc + mfbac*pow(-1 + uz, 2) +
-								2 * mfbba*uz - 2 * mfbbc*uz + 2 * mfbca*uz - 2 * mfbcc*uz +
-								mfbab*pow(uz, 2) + mfbba*pow(uz, 2) +
-								mfbbb*pow(uz, 2) + mfbbc*pow(uz, 2) +
-								mfbca*pow(uz, 2) + mfbcb*pow(uz, 2) +
-								mfbcc*pow(uz, 2) + mfbaa*pow(1 + uz, 2)) -
-								(-1 + ux)*(mfcba + mfcbc + mfcca + mfccc +
-									mfcac*pow(-1 + uz, 2) + 2 * mfcba*uz - 2 * mfcbc*uz +
-									2 * mfcca*uz - 2 * mfccc*uz + mfcab*pow(uz, 2) +
-									mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) +
-									mfcbc*pow(uz, 2) + mfcca*pow(uz, 2) +
-									mfccb*pow(uz, 2) + mfccc*pow(uz, 2) +
-									mfcaa*pow(1 + uz, 2))) - Mom100 / 3;
-
-						real Mom021 = (-(pow(1 + uy, 2)*(mfaac*(-1 + uz) + mfaab*uz +
-							mfaaa*(1 + uz))) -
-							pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz + mfaba*(1 + uz)) -
-							pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz +
-								mfaca*(1 + uz)) - pow(1 + uy, 2)*
-								(mfbac*(-1 + uz) + mfbab*uz + mfbaa*(1 + uz)) -
-							pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz + mfbba*(1 + uz)) -
-							pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz +
-								mfbca*(1 + uz)) - pow(1 + uy, 2)*
-								(mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz)) -
-							pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz + mfcba*(1 + uz)) -
-							pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz + mfcca*(1 + uz))) - Mom001 / 3;
-
-						real Mom012 = (-((1 + uy)*(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) +
-							mfaaa*pow(1 + uz, 2))) -
-							uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) -
-								(-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) +
-									mfaca*pow(1 + uz, 2)) -
-									(1 + uy)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) +
-										mfbaa*pow(1 + uz, 2)) -
-							uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-								mfbba*pow(1 + uz, 2)) -
-								(-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) +
-									mfbca*pow(1 + uz, 2)) -
-									(1 + uy)*(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) +
-										mfcaa*pow(1 + uz, 2)) -
-							uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-								mfcba*pow(1 + uz, 2)) -
-								(-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) +
-									mfcca*pow(1 + uz, 2))) - Mom010 / 3;
-						////
-
-
-						//(220)//
-						real Mom220 = (pow(1 + ux, 2)*((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) +
-							(mfaba + mfabb + mfabc)*pow(uy, 2) +
-							(mfaaa + mfaab + mfaac)*pow(1 + uy, 2)) +
-							pow(ux, 2)*((mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) +
-							(mfbba + mfbbb + mfbbc)*pow(uy, 2) +
-								(mfbaa + mfbab + mfbac)*pow(1 + uy, 2)) +
-							pow(-1 + ux, 2)*((mfcca + mfccb + mfccc)*pow(-1 + uy, 2) +
-							(mfcba + mfcbb + mfcbc)*pow(uy, 2) +
-								(mfcaa + mfcab + mfcac)*pow(1 + uy, 2))) - Mom000 / 9;
-
-						real Mom202 = (pow(1 + ux, 2)*(mfaba + mfabc + mfaca + mfacc +
-							mfaac*pow(-1 + uz, 2) + 2 * mfaba*uz - 2 * mfabc*uz +
-							2 * mfaca*uz - 2 * mfacc*uz + mfaab*pow(uz, 2) +
-							mfaba*pow(uz, 2) + mfabb*pow(uz, 2) +
-							mfabc*pow(uz, 2) + mfaca*pow(uz, 2) +
-							mfacb*pow(uz, 2) + mfacc*pow(uz, 2) +
-							mfaaa*pow(1 + uz, 2)) +
-							pow(ux, 2)*(mfbba + mfbbc + mfbca + mfbcc +
-								mfbac*pow(-1 + uz, 2) + 2 * mfbba*uz - 2 * mfbbc*uz +
-								2 * mfbca*uz - 2 * mfbcc*uz + mfbab*pow(uz, 2) +
-								mfbba*pow(uz, 2) + mfbbb*pow(uz, 2) +
-								mfbbc*pow(uz, 2) + mfbca*pow(uz, 2) +
-								mfbcb*pow(uz, 2) + mfbcc*pow(uz, 2) +
-								mfbaa*pow(1 + uz, 2)) +
-							pow(-1 + ux, 2)*(mfcba + mfcbc + mfcca + mfccc +
-								mfcac*pow(-1 + uz, 2) + 2 * mfcba*uz - 2 * mfcbc*uz +
-								2 * mfcca*uz - 2 * mfccc*uz + mfcab*pow(uz, 2) +
-								mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) +
-								mfcbc*pow(uz, 2) + mfcca*pow(uz, 2) +
-								mfccb*pow(uz, 2) + mfccc*pow(uz, 2) +
-								mfcaa*pow(1 + uz, 2))) - Mom000 / 9;
-
-						real Mom022 = (pow(1 + uy, 2)*(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) +
-							mfaaa*pow(1 + uz, 2)) +
-							pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) +
-							pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) +
-								mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2)) +
-							pow(1 + uy, 2)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) +
-								mfbaa*pow(1 + uz, 2)) +
-							pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-								mfbba*pow(1 + uz, 2)) +
-							pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) +
-								mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2)) +
-							pow(1 + uy, 2)*(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) +
-								mfcaa*pow(1 + uz, 2)) +
-							pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-								mfcba*pow(1 + uz, 2)) +
-							pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) +
-								mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2))) - Mom000 / 9;
-						////
-
-						//(221)//
-						real Mom221 = (pow(1 + ux, 2)*(-(pow(1 + uy, 2)*
-							(mfaac*(-1 + uz) + mfaab*uz + mfaaa*(1 + uz))) -
-							pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz +
-								mfaba*(1 + uz)) -
-							pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz +
-								mfaca*(1 + uz))) +
-							pow(ux, 2)*(-(pow(1 + uy, 2)*
-							(mfbac*(-1 + uz) + mfbab*uz + mfbaa*(1 + uz))) -
-								pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz +
-									mfbba*(1 + uz)) -
-								pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz +
-									mfbca*(1 + uz))) +
-							pow(-1 + ux, 2)*(-(pow(1 + uy, 2)*
-							(mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz))) -
-								pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz +
-									mfcba*(1 + uz)) -
-								pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz +
-									mfcca*(1 + uz)))) - Mom001 / 9;
-
-						real Mom212 = (pow(1 + ux, 2)*(-((1 + uy)*
-							(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) +
-								mfaaa*pow(1 + uz, 2))) -
-							uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) -
-								(-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) +
-									mfaca*pow(1 + uz, 2))) +
-							pow(ux, 2)*(-((1 + uy)*
-							(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) +
-								mfbaa*pow(1 + uz, 2))) -
-								uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-									mfbba*pow(1 + uz, 2)) -
-									(-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) +
-										mfbca*pow(1 + uz, 2))) +
-							pow(-1 + ux, 2)*(-((1 + uy)*
-							(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) +
-								mfcaa*pow(1 + uz, 2))) -
-								uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-									mfcba*pow(1 + uz, 2)) -
-									(-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) +
-										mfcca*pow(1 + uz, 2)))) - Mom010 / 9;
-
-						real Mom122 = ((-1 - ux)*(pow(1 + uy, 2)*
-							(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) +
-								mfaaa*pow(1 + uz, 2)) +
-							pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) +
-							pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) +
-								mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2))) -
-							ux*(pow(1 + uy, 2)*(mfbac*pow(-1 + uz, 2) +
-								mfbab*pow(uz, 2) + mfbaa*pow(1 + uz, 2)) +
-								pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-									mfbba*pow(1 + uz, 2)) +
-								pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) +
-									mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2))) +
-									(1 - ux)*(pow(1 + uy, 2)*
-							(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) +
-								mfcaa*pow(1 + uz, 2)) +
-										pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-											mfcba*pow(1 + uz, 2)) +
-										pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) +
-											mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2)))) - Mom100 / 9;
-						////
-
-						//(211)//
-						real Mom211 = (pow(1 + ux, 2)*((1 + uy)*(mfaac*(-1 + uz) + mfaab*uz +
-							mfaaa*(1 + uz)) +
-							uy*(mfabc*(-1 + uz) + mfabb*uz + mfaba*(1 + uz)) +
-							(-1 + uy)*(mfacc*(-1 + uz) + mfacb*uz + mfaca*(1 + uz))) +
-							pow(ux, 2)*((1 + uy)*(mfbac*(-1 + uz) + mfbab*uz +
-								mfbaa*(1 + uz)) +
-								uy*(mfbbc*(-1 + uz) + mfbbb*uz + mfbba*(1 + uz)) +
-								(-1 + uy)*(mfbcc*(-1 + uz) + mfbcb*uz + mfbca*(1 + uz))) +
-							pow(-1 + ux, 2)*((1 + uy)*
-							(mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz)) +
-								uy*(mfcbc*(-1 + uz) + mfcbb*uz + mfcba*(1 + uz)) +
-								(-1 + uy)*(mfccc*(-1 + uz) + mfccb*uz + mfcca*(1 + uz)))) - Mom011 / 3;
-
-						real Mom121 = ((-1 - ux)*(-(pow(1 + uy, 2)*
-							(mfaac*(-1 + uz) + mfaab*uz + mfaaa*(1 + uz))) -
-							pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz +
-								mfaba*(1 + uz)) -
-							pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz +
-								mfaca*(1 + uz))) -
-							ux*(-(pow(1 + uy, 2)*(mfbac*(-1 + uz) + mfbab*uz +
-								mfbaa*(1 + uz))) -
-								pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz +
-									mfbba*(1 + uz)) -
-								pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz +
-									mfbca*(1 + uz))) +
-									(1 - ux)*(-(pow(1 + uy, 2)*
-							(mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz))) -
-										pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz +
-											mfcba*(1 + uz)) -
-										pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz +
-											mfcca*(1 + uz)))) - Mom101 / 3;
-
-						real Mom112 = ((-1 - ux)*(-((1 + uy)*(mfaac*pow(-1 + uz, 2) +
-							mfaab*pow(uz, 2) + mfaaa*pow(1 + uz, 2))) -
-							uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) -
-								(-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) +
-									mfaca*pow(1 + uz, 2))) -
-							ux*(-((1 + uy)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) +
-								mfbaa*pow(1 + uz, 2))) -
-								uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-									mfbba*pow(1 + uz, 2)) -
-									(-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) +
-										mfbca*pow(1 + uz, 2))) +
-										(1 - ux)*(-((1 + uy)*(mfcac*pow(-1 + uz, 2) +
-											mfcab*pow(uz, 2) + mfcaa*pow(1 + uz, 2))) -
-											uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-												mfcba*pow(1 + uz, 2)) -
-												(-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) +
-													mfcca*pow(1 + uz, 2)))) - Mom110 / 3;
-						////
-
-						//(222)//
-						real Mom222 = (pow(1 + ux, 2)*(pow(1 + uy, 2)*
-							(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) +
-								mfaaa*pow(1 + uz, 2)) +
-							pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) +
-							pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) +
-								mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2))) +
-							pow(ux, 2)*(pow(1 + uy, 2)*
-							(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) +
-								mfbaa*pow(1 + uz, 2)) +
-								pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-									mfbba*pow(1 + uz, 2)) +
-								pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) +
-									mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2))) +
-							pow(-1 + ux, 2)*(pow(1 + uy, 2)*
-							(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) +
-								mfcaa*pow(1 + uz, 2)) +
-								pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-									mfcba*pow(1 + uz, 2)) +
-								pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) +
-									mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2)))) - Mom000 / 27;
-						////
-
-
-
-
-
-						real Meq000 = drho+dlambda*c1o2;
-
-
-						// relaxation Central Moment MRT
-
-						Mom000 = Meq000;
-
-						Mom000 += dlambda*c1o2;
-
-						Mom100 = (1 - collFactorH) * Mom100;
-						Mom010 = (1 - collFactorH) * Mom010;
-						Mom001 = (1 - collFactorH) * Mom001;
-
-						Mom110 = 0;
-						Mom101 = 0;
-						Mom011 = 0;
-
-						Mom111 = 0;
-
-						//(200)//
-						Mom200 = Mom000 / 3;
-						Mom020 = Mom000 / 3;
-						Mom002 = Mom000 / 3;
-						////
-
-						//(210)//
-						Mom210 = Mom010 / 3;
-						Mom201 = Mom001 / 3;
-						Mom120 = Mom100 / 3;
-
-
-						Mom102 = Mom100 / 3;
-						Mom021 = Mom001 / 3;
-						Mom012 = Mom010 / 3;
-						////
-
-
-						//(220)//
-						Mom220 = Mom000 / 9;
-						Mom202 = Mom000 / 9;
-						Mom022 = Mom000 / 9;
-						////
-
-						//(221)//
-						Mom221 = Mom001 / 9;
-						Mom212 = Mom010 / 9;
-						Mom122 = Mom100 / 9;
-						////
-
-						//(211)//
-						Mom211 = Mom011 / 3;
-						Mom121 = Mom101 / 3;
-						Mom112 = Mom110 / 3;
-						////
-
-						//(222)//
-						Mom222 = Mom000 / 27;
-						////
-						
-
-
-						//Back transformation to distributions
-
-						mfcbb = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) +
-							2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy +
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*
-							(-1 + pow(uy, 2)) -
-							2 * (-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) -
-								2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*
-								uy - (Mom101 + Mom201 + 2 * Mom101*ux +
-									Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*uz +
-									(-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) -
-										2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*
-										uy - (Mom100 + Mom200 + 2 * Mom100*ux +
-											Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))*
-											(1 - pow(uz, 2))) / 2.;
-						mfbcb = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) +
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy*
-							(1 + uy) + (Mom212 + 2 * Mom112*ux +
-								Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) -
-							2 * (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy*
-								(1 + uy) - (Mom211 + 2 * Mom111*ux +
-									Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*uz +
-									(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy*
-										(1 + uy) - (Mom210 + 2 * Mom110*ux +
-											Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))*
-											(1 - pow(uz, 2))) / 2.;
-						mfbbc = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) +
-							2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy +
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*
-							(-1 + pow(uy, 2)) +
-							(Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) +
-								2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*
-								uy + (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*
-								(-1 + pow(uy, 2)))*uz*(1 + uz) +
-								(Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) +
-									2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*
-									uy + (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*
-									(-1 + pow(uy, 2)))*(1 + 2 * uz)) / 2.;
-						mfccb = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) -
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy*
-							(1 + uy) - (Mom112 + Mom212 + 2 * Mom112*ux +
-								Mom012*ux*(1 + ux))*(1 + 2 * uy) -
-							2 * (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy*
-								(1 + uy) + (Mom111 + Mom211 + 2 * Mom111*ux +
-									Mom011*ux*(1 + ux))*(1 + 2 * uy))*uz +
-									(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy*
-										(1 + uy) + (Mom110 + Mom210 + 2 * Mom110*ux +
-											Mom010*ux*(1 + ux))*(1 + 2 * uy))*(1 - pow(uz, 2))) / 4.;
-						mfacb = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux -
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy*
-							(1 + uy) - (Mom212 + Mom012*(-1 + ux)*ux +
-								Mom112*(-1 + 2 * ux))*(1 + 2 * uy) -
-							2 * (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy*
-								(1 + uy) + (Mom211 + Mom011*(-1 + ux)*ux +
-									Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*uz +
-									(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy*
-										(1 + uy) + (Mom210 + Mom010*(-1 + ux)*ux +
-											Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*(1 - pow(uz, 2))) / 4.;
-						mfcbc = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) -
-							2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy -
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*
-							(-1 + pow(uy, 2)) +
-							(-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) -
-								2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*
-								uy - (Mom100 + Mom200 + 2 * Mom100*ux +
-									Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))*uz*(1 + uz) +
-									(-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) -
-										2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*
-										uy - (Mom101 + Mom201 + 2 * Mom101*ux +
-											Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*(1 + 2 * uz)) / 4.;
-						mfabc = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux -
-							2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy -
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*
-							(-1 + pow(uy, 2)) +
-							(Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux -
-								2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*
-								uy - (Mom200 + Mom000*(-1 + ux)*ux +
-									Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*uz*(1 + uz) +
-									(Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux -
-										2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*
-										uy - (Mom201 + Mom001*(-1 + ux)*ux +
-											Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(1 + 2 * uz)) / 4.;
-						mfbcc = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) -
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy*
-							(1 + uy) - (Mom212 + 2 * Mom112*ux +
-								Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) +
-								(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy*
-									(1 + uy) - (Mom210 + 2 * Mom110*ux +
-										Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))*uz*(1 + uz) +
-										(Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy*
-											(1 + uy) - (Mom211 + 2 * Mom111*ux +
-												Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(1 + 2 * uz)) / 4.;
-						mfbac = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) -
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*
-							(-1 + uy)*uy - (Mom212 + 2 * Mom112*ux +
-								Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) +
-								(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*
-									(-1 + uy)*uy - (Mom210 + 2 * Mom110*ux +
-										Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*uz*(1 + uz) +
-										(Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*
-											(-1 + uy)*uy - (Mom211 + 2 * Mom111*ux +
-												Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(1 + 2 * uz)) / 4.;
-						mfccc = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) +
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy*
-							(1 + uy) + (Mom112 + Mom212 + 2 * Mom112*ux +
-								Mom012*ux*(1 + ux))*(1 + 2 * uy) +
-								(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy*
-									(1 + uy) + (Mom110 + Mom210 + 2 * Mom110*ux +
-										Mom010*ux*(1 + ux))*(1 + 2 * uy))*uz*(1 + uz) +
-										(Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy*
-											(1 + uy) + (Mom111 + Mom211 + 2 * Mom111*ux +
-												Mom011*ux*(1 + ux))*(1 + 2 * uy))*(1 + 2 * uz)) / 8.;
-						mfacc = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) +
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy*
-							(1 + uy) + (Mom212 + Mom012*(-1 + ux)*ux +
-								Mom112*(-1 + 2 * ux))*(1 + 2 * uy) +
-								(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy*
-									(1 + uy) + (Mom210 + Mom010*(-1 + ux)*ux +
-										Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*uz*(1 + uz) +
-										(Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy*
-											(1 + uy) + (Mom211 + Mom011*(-1 + ux)*ux +
-												Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*(1 + 2 * uz)) / 8.;
-						mfcac = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) +
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*
-							(-1 + uy)*uy + (Mom112 + Mom212 + 2 * Mom112*ux +
-								Mom012*ux*(1 + ux))*(-1 + 2 * uy) +
-								(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*
-									(-1 + uy)*uy + (Mom110 + Mom210 + 2 * Mom110*ux +
-										Mom010*ux*(1 + ux))*(-1 + 2 * uy))*uz*(1 + uz) +
-										(Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*
-											(-1 + uy)*uy + (Mom111 + Mom211 + 2 * Mom111*ux +
-												Mom011*ux*(1 + ux))*(-1 + 2 * uy))*(1 + 2 * uz)) / 8.;
-						mfaac = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) +
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*
-							(-1 + uy)*uy + (Mom212 + Mom012*(-1 + ux)*ux +
-								Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) +
-								(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*
-									(-1 + uy)*uy + (Mom210 + Mom010*(-1 + ux)*ux +
-										Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*uz*(1 + uz) +
-										(Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*
-											(-1 + uy)*uy + (Mom211 + Mom011*(-1 + ux)*ux +
-												Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*(1 + 2 * uz)) / 8.;
-
-						mfabb = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) +
-							2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy +
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*
-							(-1 + pow(uy, 2)) -
-							2 * (Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux -
-								2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*
-								uy - (Mom201 + Mom001*(-1 + ux)*ux +
-									Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*uz +
-									(Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux -
-										2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*
-										uy - (Mom200 + Mom000*(-1 + ux)*ux +
-											Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*
-											(1 - pow(uz, 2))) / 2.;
-						mfbab = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) +
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*
-							(-1 + uy)*uy + (Mom212 + 2 * Mom112*ux +
-								Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) -
-							2 * (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*
-								(-1 + uy)*uy - (Mom211 + 2 * Mom111*ux +
-									Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*uz +
-									(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*
-										(-1 + uy)*uy - (Mom210 + 2 * Mom110*ux +
-											Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*
-											(1 - pow(uz, 2))) / 2.;
-						mfbba = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) +
-							2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy +
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*
-							(-1 + pow(uy, 2)) +
-							(Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) +
-								2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*
-								uy + (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*
-								(-1 + pow(uy, 2)))*(-1 + uz)*uz +
-								(Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) +
-									2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*
-									uy + (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*
-									(-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 2.;
-						mfaab = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux -
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*
-							(-1 + uy)*uy - (Mom212 + Mom012*(-1 + ux)*ux +
-								Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) -
-							2 * (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*
-								(-1 + uy)*uy + (Mom211 + Mom011*(-1 + ux)*ux +
-									Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*uz +
-									(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*
-										(-1 + uy)*uy + (Mom210 + Mom010*(-1 + ux)*ux +
-											Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*(1 - pow(uz, 2))) / 4.;
-						mfcab = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) -
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*
-							(-1 + uy)*uy - (Mom112 + Mom212 + 2 * Mom112*ux +
-								Mom012*ux*(1 + ux))*(-1 + 2 * uy) -
-							2 * (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*
-								(-1 + uy)*uy + (Mom111 + Mom211 + 2 * Mom111*ux +
-									Mom011*ux*(1 + ux))*(-1 + 2 * uy))*uz +
-									(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*
-										(-1 + uy)*uy + (Mom110 + Mom210 + 2 * Mom110*ux +
-											Mom010*ux*(1 + ux))*(-1 + 2 * uy))*(1 - pow(uz, 2))) / 4.;
-						mfaba = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux - 2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy -
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*(-1 + pow(uy, 2)) +
-							(Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux - 2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*uy -
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(-1 + uz)*uz +
-								(Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux - 2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*uy -
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 4.;
-						mfcba = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) - 2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy -
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*(-1 + pow(uy, 2)) +
-							(-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) - 2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*uy -
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))*(-1 + uz)*uz +
-								(-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) - 2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*uy -
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 4.;
-						mfbaa = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*(-1 + uy)*uy -
-							(Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) +
-							(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*(-1 + uy)*uy -
-								(Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*(-1 + uy)*uy -
-									(Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 4.;
-						mfbca = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy*(1 + uy) -
-							(Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) +
-							(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy*(1 + uy) -
-								(Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy*(1 + uy) -
-									(Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(-1 + 2 * uz)) / 4.;
-						mfaaa = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*(-1 + uy)*uy +
-							(Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) +
-							(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*(-1 + uy)*uy +
-								(Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*(-1 + uy)*uy +
-									(Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 8.;
-						mfcaa = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) +
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*(-1 + uy)*uy +
-							(Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*(-1 + 2 * uy) +
-							(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*(-1 + uy)*uy +
-								(Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*(-1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*(-1 + uy)*uy +
-									(Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 8.;
-						mfaca = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy*(1 + uy) +
-							(Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*(1 + 2 * uy) +
-							(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy*(1 + uy) +
-								(Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy*(1 + uy) +
-									(Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*(-1 + 2 * uz)) / 8.;
-						mfcca = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy*(1 + uy) +
-							(Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*(1 + 2 * uy) +
-							(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy*(1 + uy) +
-								(Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*(1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy*(1 + uy) +
-									(Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*(1 + 2 * uy))*(-1 + 2 * uz)) / 8.;
-
-						mfbbb = Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - 2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy -
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)) -
-							2 * (Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) + 2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*uy +
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)))*uz +
-								(Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) + 2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*uy +
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)))*(1 - pow(uz, 2));
-
-						////////////////////////////////////////////////////////////////////////////////////
-
-						//////////////////////////////////////////////////////////////////////////
-						//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;
-						//UBLOG(logINFO, "lambda ="<<drho_post);
-//						//LBMReal dif = fabs(rho - rho_post);
-//						dif = drho - drho_post;
-//#ifdef SINGLEPRECISION
-//						if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//						if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//						{
-//							UB_THROW(UbException(UB_EXARGS, "Flocculation=" + UbSystem::toString(drho) + ", flocculation post=" + UbSystem::toString(drho_post)
-//								+ " dif=" + UbSystem::toString(dif)
-//								+ " Flocculation is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-//							//UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-//							//exit(EXIT_FAILURE);
-//						}
-//#endif
-						//////////////////////////////////////////////////////////////////////////
-						//write distribution
-						//////////////////////////////////////////////////////////////////////////
-						(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-						(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-						(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-						(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-						(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-						(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-						(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-						(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-						(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-						(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-						(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-						(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-						(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-						(*this->zeroDistributionsH)(x1, x2, x3) = mfbbb;
-						//////////////////////////////////////////////////////////////////////////
-
-
-					}
-				}
-			}
-		}
-
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-real ThixotropyExpLBMKernel::getCalculationTime()
-{
-	//return timer.getDuration();
-	return timer.getTotalTime();
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyExpLBMKernel::setCollisionFactorF(real collFactor)
-{
-	setCollisionFactor(collFactor);
-	this->collFactorF = collFactor;
-
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyExpLBMKernel::setCollisionFactorH(real collFactor)
-{
-	this->collFactorH = collFactor;
-}
-//////////////////////////////////////////////////////////////////////////
-real ThixotropyExpLBMKernel::getCollisionFactorF() const
-{
-	return this->collFactorF;
-}
-//////////////////////////////////////////////////////////////////////////
-real ThixotropyExpLBMKernel::getCollisionFactorH() const
-{
-	return this->collFactorH;
-}
-void ThixotropyExpLBMKernel::setAlpha(real alpha)
-{
-	this->alpha = alpha;
-}
-real ThixotropyExpLBMKernel::getAlpha() const
-{
-	return this->alpha;
-}
-void ThixotropyExpLBMKernel::setTheta(real theta)
-{
-	this->theta = theta;
-}
-real ThixotropyExpLBMKernel::getTheta() const
-{
-	return this->theta;
-}
-void ThixotropyExpLBMKernel::swapDistributions()
-{
-	LBMKernel::swapDistributions();
-	dataSet->getHdistributions()->swap();
-}
-//////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.h
deleted file mode 100644
index 754dd0ae09129455331c5a55b3b4d640350f33db..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.h
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef ThixotropyExpLBMKernel_H
-#define ThixotropyExpLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-class ThixotropyExpLBMKernel;
-
-//! \brief    Cumulant + Fact. Central LBM kernel. 
-//! \author Hussein
-class ThixotropyExpLBMKernel : public LBMKernel
-{
-public:
-	//! This option set relaxation parameter: NORMAL  
-	enum Parameter { NORMAL, MAGIC };
-public:
-	ThixotropyExpLBMKernel();
-	virtual ~ThixotropyExpLBMKernel(void);
-	virtual void calculate(int step);
-	virtual SPtr<LBMKernel> clone();
-	real getCalculationTime();
- 
-	void setCollisionFactorF(real collFactor);
-   void setCollisionFactorH(real collFactor);
-   real getCollisionFactorF() const;
-   real getCollisionFactorH() const;
-
-	void setAlpha(real alpha);
-	real getAlpha() const;
-
-	void setTheta(real theta);
-	real getTheta() const;
-
-	void swapDistributions();
-
-protected:
-	virtual void initDataSet();
-	real f[D3Q27System::ENDF + 1];
-
-	UbTimer timer;
-
-	real OxyyMxzz;
-	Parameter parameter;
-
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH;
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH;
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH;
-
-	mu::value_type muX1, muX2, muX3;
-	mu::value_type muDeltaT;
-	mu::value_type muNu;
-	real forcingX1;
-	real forcingX2;
-	real forcingX3;
-
-	real collFactorF;
-   real collFactorH;
-
-	real theta;
-	real alpha;
-};
-
-#endif
-
diff --git a/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.cpp b/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.cpp
deleted file mode 100644
index f764af6f5cd75b67ce51f8644d9f1839894fcdc3..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.cpp
+++ /dev/null
@@ -1,1867 +0,0 @@
-#include "ThixotropyLBMKernel.h"
-#include "D3Q27System.h"
-#include "Interpolator.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <math.h>
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-
-#define PROOF_CORRECTNESS
-
-//using namespace UbMath;
-using namespace vf::basics::constant;
-
-//////////////////////////////////////////////////////////////////////////
-ThixotropyLBMKernel::ThixotropyLBMKernel()
-{
-   this->parameter = ThixotropyLBMKernel::NORMAL;
-	this->compressible = false;
-	//this->TwoDistributions = true;
-}
-//////////////////////////////////////////////////////////////////////////
-ThixotropyLBMKernel::~ThixotropyLBMKernel(void)
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyLBMKernel::initDataSet()
-{
-	//DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0));
-	SPtr<DistributionArray3D> df(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.0));
-	SPtr<DistributionArray3D> dh(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.0));
-	dataSet->setFdistributions(df);
-	dataSet->setHdistributions(dh);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> ThixotropyLBMKernel::clone()
-{
-	SPtr<LBMKernel> kernel(new ThixotropyLBMKernel());
-	kernel->setNX(nx);
-	kernel->setCollisionFactor(collFactor);
-	collFactorF = collFactor;
-	collFactorH = collFactor;
-	dynamicPointerCast<ThixotropyLBMKernel>(kernel)->initDataSet();
-	dynamicPointerCast<ThixotropyLBMKernel>(kernel)->setCollisionFactorF(this->collFactorF);
-	dynamicPointerCast<ThixotropyLBMKernel>(kernel)->setCollisionFactorH(this->collFactorH);
-	dynamicPointerCast<ThixotropyLBMKernel>(kernel)->setAlpha(this->alpha);
-	dynamicPointerCast<ThixotropyLBMKernel>(kernel)->setTheta(this->theta);
-	kernel->setBCSet(bcSet->clone(kernel));
-	kernel->setWithForcing(withForcing);
-	kernel->setForcingX1(muForcingX1);
-	kernel->setForcingX2(muForcingX2);
-	kernel->setForcingX3(muForcingX3);
-	kernel->setIndex(ix1, ix2, ix3);
-	kernel->setDeltaT(deltaT);
-
-	switch (parameter)
-	{
-	case NORMAL:
-		dynamicPointerCast<ThixotropyLBMKernel>(kernel)->OxyyMxzz = 1.0;
-		break;
-	case MAGIC:
-		dynamicPointerCast<ThixotropyLBMKernel>(kernel)->OxyyMxzz = 2.0 + (-collFactorF);
-		break;
-	}
-	return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyLBMKernel::calculate(int step)
-{
-	using namespace D3Q27System;
-
-	//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 / collFactorF - 1.0 / 2.0);
-
-		muForcingX1.DefineVar("nu", &muNu);
-		muForcingX2.DefineVar("nu", &muNu);
-		muForcingX3.DefineVar("nu", &muNu);
-	}
-	/////////////////////////////////////
-
-	localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-	zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-	localDistributionsH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
-	nonLocalDistributionsH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
-	zeroDistributionsH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
-
-	SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-
-	//#pragma omp parallel num_threads(8)
-	{
-		//   int i = omp_get_thread_num();
-		//   printf_s("Hello from thread %d\n", i);
-		//}
-		//#pragma omp for 
-		for (int x3 = minX3; x3 < maxX3; x3++)
-		{
-			for (int x2 = minX2; x2 < maxX2; x2++)
-			{
-				for (int x1 = minX1; x1 < maxX1; x1++)
-				{
-					if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3))
-					{
-						int x1p = x1 + 1;
-						int x2p = x2 + 1;
-						int x3p = x3 + 1;
-						//////////////////////////////////////////////////////////////////////////
-						//read distribution
-						// Cumulant (NSE part) 
-						////////////////////////////////////////////////////////////////////////////
-						//////////////////////////////////////////////////////////////////////////
-
-						real mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-						real mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-						real mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-						real mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-						real mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-						real mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-						real mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-						real mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-						real mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-						real mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-						real mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-						real mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-						real mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-								  
-						real mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-						real mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-						real mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-						real mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-						real mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-						real mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-						real mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-						real mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-						real mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-						real mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						real mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						real mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						real mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-								  
-						real mfbbb = (*this->zeroDistributionsH)(x1, x2, x3);
-
-						real lambda = (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;
-
-						//E   N  T
-						//c   c  c
-						//////////
-						//W   S  B
-						//a   a  a
-
-						//Rest ist b
-
-						//mfxyz
-						//a - negative
-						//b - null
-						//c - positive
-
-						// a b c
-						//-1 0 1
-
-						mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
-						mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
-						mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
-						mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
-						mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
-						mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
-						mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
-						mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
-						mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
-						mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
-						mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
-						mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
-						mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-						mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
-						mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
-						mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
-						mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
-						mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
-						mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
-						mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
-						mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
-						mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
-						mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-						mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
-
-						real m0, m1, m2;
-
-						real 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;
-
-						real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-							(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-							(mfcbb - mfabb));
-						real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-							(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-							(mfbcb - mfbab));
-						real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-							(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-							(mfbbc - mfbba));
-						
-
-						real eta0 = (1/collFactor-c1o2)*c1o3;
-						real eta = (1 + lambda)* eta0;
-						collFactorF = c1o1 /(3*eta/(rho+ c1o1)+c1o2);
-						//collFactorF = collFactor;
-
-						//forcing 
-						///////////////////////////////////////////////////////////////////////////////////////////
-						if (withForcing)
-						{
-							muX1 = static_cast<real>(x1 - 1 + ix1*maxX1);
-							muX2 = static_cast<real>(x2 - 1 + ix2*maxX2);
-							muX3 = static_cast<real>(x3 - 1 + ix3*maxX3);
-
-							forcingX1 = muForcingX1.Eval();
-							forcingX2 = muForcingX2.Eval();
-							forcingX3 = muForcingX3.Eval();
-
-							vvx += forcingX1*deltaT*0.5; // X
-							vvy += forcingX2*deltaT*0.5; // Y
-							vvz += forcingX3*deltaT*0.5; // Z
-						}
-						///////////////////////////////////////////////////////////////////////////////////////////               
-						real 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);
-
-						real vx2;
-						real vy2;
-						real vz2;
-						vx2 = vvx*vvx;
-						vy2 = vvy*vvy;
-						vz2 = vvz*vvz;
-						////////////////////////////////////////////////////////////////////////////////////
-						real wadjust;
-						real qudricLimit = 0.01;
-						////////////////////////////////////////////////////////////////////////////////////
-						//Hin
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						m2 = mfaaa + mfaac;
-						m1 = mfaac - mfaaa;
-						m0 = m2 + mfaab;
-						mfaaa = m0;
-						m0 += c1o36 * oMdrho;
-						mfaab = m1 - m0 * vvz;
-						mfaac = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaba + mfabc;
-						m1 = mfabc - mfaba;
-						m0 = m2 + mfabb;
-						mfaba = m0;
-						m0 += c1o9 * oMdrho;
-						mfabb = m1 - m0 * vvz;
-						mfabc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaca + mfacc;
-						m1 = mfacc - mfaca;
-						m0 = m2 + mfacb;
-						mfaca = m0;
-						m0 += c1o36 * oMdrho;
-						mfacb = m1 - m0 * vvz;
-						mfacc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbaa + mfbac;
-						m1 = mfbac - mfbaa;
-						m0 = m2 + mfbab;
-						mfbaa = m0;
-						m0 += c1o9 * oMdrho;
-						mfbab = m1 - m0 * vvz;
-						mfbac = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbba + mfbbc;
-						m1 = mfbbc - mfbba;
-						m0 = m2 + mfbbb;
-						mfbba = m0;
-						m0 += c4o9 * oMdrho;
-						mfbbb = m1 - m0 * vvz;
-						mfbbc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbca + mfbcc;
-						m1 = mfbcc - mfbca;
-						m0 = m2 + mfbcb;
-						mfbca = m0;
-						m0 += c1o9 * oMdrho;
-						mfbcb = m1 - m0 * vvz;
-						mfbcc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcaa + mfcac;
-						m1 = mfcac - mfcaa;
-						m0 = m2 + mfcab;
-						mfcaa = m0;
-						m0 += c1o36 * oMdrho;
-						mfcab = m1 - m0 * vvz;
-						mfcac = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcba + mfcbc;
-						m1 = mfcbc - mfcba;
-						m0 = m2 + mfcbb;
-						mfcba = m0;
-						m0 += c1o9 * oMdrho;
-						mfcbb = m1 - m0 * vvz;
-						mfcbc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcca + mfccc;
-						m1 = mfccc - mfcca;
-						m0 = m2 + mfccb;
-						mfcca = m0;
-						m0 += c1o36 * oMdrho;
-						mfccb = m1 - m0 * vvz;
-						mfccc = m2 - 2. *   m1 * vvz + vz2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						m2 = mfaaa + mfaca;
-						m1 = mfaca - mfaaa;
-						m0 = m2 + mfaba;
-						mfaaa = m0;
-						m0 += c1o6 * oMdrho;
-						mfaba = m1 - m0 * vvy;
-						mfaca = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaab + mfacb;
-						m1 = mfacb - mfaab;
-						m0 = m2 + mfabb;
-						mfaab = m0;
-						mfabb = m1 - m0 * vvy;
-						mfacb = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaac + mfacc;
-						m1 = mfacc - mfaac;
-						m0 = m2 + mfabc;
-						mfaac = m0;
-						m0 += c1o18 * oMdrho;
-						mfabc = m1 - m0 * vvy;
-						mfacc = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbaa + mfbca;
-						m1 = mfbca - mfbaa;
-						m0 = m2 + mfbba;
-						mfbaa = m0;
-						m0 += c2o3 * oMdrho;
-						mfbba = m1 - m0 * vvy;
-						mfbca = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbab + mfbcb;
-						m1 = mfbcb - mfbab;
-						m0 = m2 + mfbbb;
-						mfbab = m0;
-						mfbbb = m1 - m0 * vvy;
-						mfbcb = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfbac + mfbcc;
-						m1 = mfbcc - mfbac;
-						m0 = m2 + mfbbc;
-						mfbac = m0;
-						m0 += c2o9 * oMdrho;
-						mfbbc = m1 - m0 * vvy;
-						mfbcc = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcaa + mfcca;
-						m1 = mfcca - mfcaa;
-						m0 = m2 + mfcba;
-						mfcaa = m0;
-						m0 += c1o6 * oMdrho;
-						mfcba = m1 - m0 * vvy;
-						mfcca = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcab + mfccb;
-						m1 = mfccb - mfcab;
-						m0 = m2 + mfcbb;
-						mfcab = m0;
-						mfcbb = m1 - m0 * vvy;
-						mfccb = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfcac + mfccc;
-						m1 = mfccc - mfcac;
-						m0 = m2 + mfcbc;
-						mfcac = m0;
-						m0 += c1o18 * oMdrho;
-						mfcbc = m1 - m0 * vvy;
-						mfccc = m2 - 2. *   m1 * vvy + vy2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						// mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						m2 = mfaaa + mfcaa;
-						m1 = mfcaa - mfaaa;
-						m0 = m2 + mfbaa;
-						mfaaa = m0;
-						m0 += 1. * oMdrho;
-						mfbaa = m1 - m0 * vvx;
-						mfcaa = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaba + mfcba;
-						m1 = mfcba - mfaba;
-						m0 = m2 + mfbba;
-						mfaba = m0;
-						mfbba = m1 - m0 * vvx;
-						mfcba = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaca + mfcca;
-						m1 = mfcca - mfaca;
-						m0 = m2 + mfbca;
-						mfaca = m0;
-						m0 += c1o3 * oMdrho;
-						mfbca = m1 - m0 * vvx;
-						mfcca = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaab + mfcab;
-						m1 = mfcab - mfaab;
-						m0 = m2 + mfbab;
-						mfaab = m0;
-						mfbab = m1 - m0 * vvx;
-						mfcab = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfabb + mfcbb;
-						m1 = mfcbb - mfabb;
-						m0 = m2 + mfbbb;
-						mfabb = m0;
-						mfbbb = m1 - m0 * vvx;
-						mfcbb = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfacb + mfccb;
-						m1 = mfccb - mfacb;
-						m0 = m2 + mfbcb;
-						mfacb = m0;
-						mfbcb = m1 - m0 * vvx;
-						mfccb = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfaac + mfcac;
-						m1 = mfcac - mfaac;
-						m0 = m2 + mfbac;
-						mfaac = m0;
-						m0 += c1o3 * oMdrho;
-						mfbac = m1 - m0 * vvx;
-						mfcac = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfabc + mfcbc;
-						m1 = mfcbc - mfabc;
-						m0 = m2 + mfbbc;
-						mfabc = m0;
-						mfbbc = m1 - m0 * vvx;
-						mfcbc = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						m2 = mfacc + mfccc;
-						m1 = mfccc - mfacc;
-						m0 = m2 + mfbcc;
-						mfacc = m0;
-						m0 += c1o9 * oMdrho;
-						mfbcc = m1 - m0 * vvx;
-						mfccc = m2 - 2. *   m1 * vvx + vx2 * m0;
-						////////////////////////////////////////////////////////////////////////////////////
-						// Cumulants
-						////////////////////////////////////////////////////////////////////////////////////
-						real OxxPyyPzz = 1.; //omega2 or bulk viscosity
-						real OxyyPxzz = 1.;//-s9;//2+s9;//
-											  //real OxyyMxzz  = 1.;//2+s9;//
-						real O4 = 1.;
-						real O5 = 1.;
-						real O6 = 1.;
-
-						//Cum 4.
-						//LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-						//LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-						//LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-						real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-						real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-						real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-						real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho);
-						real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - 1)*oMdrho);
-						real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho);
-
-						//Cum 5.
-						real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-						real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-						real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-						//Cum 6.
-						real CUMccc = mfccc + ((-4. *  mfbbb * mfbbb
-							- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-							- 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-							- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-							+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-								+ 2. * (mfcaa * mfaca * mfaac)
-								+ 16. *  mfbba * mfbab * mfabb)
-							- c1o3* (mfacc + mfcac + mfcca) * oMdrho - c1o9*oMdrho*oMdrho
-							- c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1. - 2.* oMdrho) - c1o27* oMdrho * oMdrho*(-2.* oMdrho)
-							+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-								+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) + c1o27*oMdrho;
-
-						//2.
-						// linear combinations
-						real mxxPyyPzz = mfcaa + mfaca + mfaac;
-						real mxxMyy = mfcaa - mfaca;
-						real mxxMzz = mfcaa - mfaac;
-
-						real dxux = -c1o2 * collFactorF *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz);
-						real dyuy = dxux + collFactorF * c3o2 * mxxMyy;
-						real dzuz = dxux + collFactorF * c3o2 * mxxMzz;
-
-						real Dxy =-c3o1 *collFactorF*mfbba;
-						real Dxz =-c3o1*collFactorF*mfbab;
-						real Dyz =-c3o1*collFactorF*mfabb;
-
-						//relax
-						mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-						mxxMyy += collFactorF * (-mxxMyy) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vy2 * dyuy);
-						mxxMzz += collFactorF * (-mxxMzz) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vz2 * dzuz);
-
-						mfabb += collFactorF * (-mfabb);
-						mfbab += collFactorF * (-mfbab);
-						mfbba += collFactorF * (-mfbba);
-
-						// linear combinations back
-						mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-						mfaca = c1o3 * (-2. *  mxxMyy + mxxMzz + mxxPyyPzz);
-						mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
-
-						//3.
-						// linear combinations
-						real mxxyPyzz = mfcba + mfabc;
-						real mxxyMyzz = mfcba - mfabc;
-
-						real mxxzPyyz = mfcab + mfacb;
-						real mxxzMyyz = mfcab - mfacb;
-
-						real mxyyPxzz = mfbca + mfbac;
-						real mxyyMxzz = mfbca - mfbac;
-
-						//relax
-						wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
-						mfbbb += wadjust * (-mfbbb);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
-						mxxyPyzz += wadjust * (-mxxyPyzz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
-						mxxyMyzz += wadjust * (-mxxyMyzz);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
-						mxxzPyyz += wadjust * (-mxxzPyyz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
-						mxxzMyyz += wadjust * (-mxxzMyyz);
-						wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
-						mxyyPxzz += wadjust * (-mxyyPxzz);
-						wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
-						mxyyMxzz += wadjust * (-mxyyMxzz);
-
-						// linear combinations back
-						mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-						mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-						mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-						mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-						mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-						mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-						//4.
-						CUMacc += O4 * (-CUMacc);
-						CUMcac += O4 * (-CUMcac);
-						CUMcca += O4 * (-CUMcca);
-
-						CUMbbc += O4 * (-CUMbbc);
-						CUMbcb += O4 * (-CUMbcb);
-						CUMcbb += O4 * (-CUMcbb);
-
-						//5.
-						CUMbcc += O5 * (-CUMbcc);
-						CUMcbc += O5 * (-CUMcbc);
-						CUMccb += O5 * (-CUMccb);
-
-						//6.
-						CUMccc += O6 * (-CUMccc);
-
-						//back cumulants to central moments
-						//4.
-						//mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-						//mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-						//mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-
-						mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
-						mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
-						mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
-
-						mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho;
-						mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - 1)*oMdrho;
-						mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho;
-
-						//5.
-						mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-						mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-						mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-						//6.
-						mfccc = CUMccc - ((-4. *  mfbbb * mfbbb
-							- (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-							- 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-							- 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-							+ (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-								+ 2. * (mfcaa * mfaca * mfaac)
-								+ 16. *  mfbba * mfbab * mfabb)
-							- c1o3* (mfacc + mfcac + mfcca) * oMdrho - c1o9*oMdrho*oMdrho
-							- c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1. - 2.* oMdrho) - c1o27* oMdrho * oMdrho*(-2.* oMdrho)
-							+ (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-								+ (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) - c1o27*oMdrho;
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//forcing
-						mfbaa = -mfbaa;
-						mfaba = -mfaba;
-						mfaab = -mfaab;
-						//////////////////////////////////////////////////////////////////////////////////////
-
-						////////////////////////////////////////////////////////////////////////////////////
-						//back
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Z - Dir
-						m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfaac - 2. * mfaab *  vvz + mfaaa                * (1. - vz2) - 1. * oMdrho * vz2;
-						m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
-						mfaaa = m0;
-						mfaab = m1;
-						mfaac = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-						m1 = -mfabc - 2. * mfabb *  vvz + mfaba * (1. - vz2);
-						m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-						mfaba = m0;
-						mfabb = m1;
-						mfabc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfacc - 2. * mfacb *  vvz + mfaca                  * (1. - vz2) - c1o3 * oMdrho * vz2;
-						m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfaca = m0;
-						mfacb = m1;
-						mfacc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-						m1 = -mfbac - 2. * mfbab *  vvz + mfbaa * (1. - vz2);
-						m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-						mfbaa = m0;
-						mfbab = m1;
-						mfbac = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-						m1 = -mfbbc - 2. * mfbbb *  vvz + mfbba * (1. - vz2);
-						m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-						mfbba = m0;
-						mfbbb = m1;
-						mfbbc = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-						m1 = -mfbcc - 2. * mfbcb *  vvz + mfbca * (1. - vz2);
-						m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-						mfbca = m0;
-						mfbcb = m1;
-						mfbcc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfcac - 2. * mfcab *  vvz + mfcaa                  * (1. - vz2) - c1o3 * oMdrho * vz2;
-						m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfcaa = m0;
-						mfcab = m1;
-						mfcac = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-						m1 = -mfcbc - 2. * mfcbb *  vvz + mfcba * (1. - vz2);
-						m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-						mfcba = m0;
-						mfcbb = m1;
-						mfcbc = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-						m1 = -mfccc - 2. * mfccb *  vvz + mfcca                  * (1. - vz2) - c1o9 * oMdrho * vz2;
-						m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-						mfcca = m0;
-						mfccb = m1;
-						mfccc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// Y - Dir
-						m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfaca - 2. * mfaba *  vvy + mfaaa                  * (1. - vy2) - c1o6 * oMdrho * vy2;
-						m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaaa = m0;
-						mfaba = m1;
-						mfaca = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfacb - 2. * mfabb *  vvy + mfaab                  * (1. - vy2) - c2o3 * oMdrho * vy2;
-						m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaab = m0;
-						mfabb = m1;
-						mfacb = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfacc - 2. * mfabc *  vvy + mfaac                  * (1. - vy2) - c1o6 * oMdrho * vy2;
-						m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfaac = m0;
-						mfabc = m1;
-						mfacc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-						m1 = -mfbca - 2. * mfbba *  vvy + mfbaa * (1. - vy2);
-						m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-						mfbaa = m0;
-						mfbba = m1;
-						mfbca = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-						m1 = -mfbcb - 2. * mfbbb *  vvy + mfbab * (1. - vy2);
-						m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-						mfbab = m0;
-						mfbbb = m1;
-						mfbcb = m2;
-						/////////b//////////////////////////////////////////////////////////////////////////
-						m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-						m1 = -mfbcc - 2. * mfbbc *  vvy + mfbac * (1. - vy2);
-						m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-						mfbac = m0;
-						mfbbc = m1;
-						mfbcc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfcca - 2. * mfcba *  vvy + mfcaa                   * (1. - vy2) - c1o18 * oMdrho * vy2;
-						m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcaa = m0;
-						mfcba = m1;
-						mfcca = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfccb - 2. * mfcbb *  vvy + mfcab                  * (1. - vy2) - c2o9 * oMdrho * vy2;
-						m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcab = m0;
-						mfcbb = m1;
-						mfccb = m2;
-						/////////c//////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-						m1 = -mfccc - 2. * mfcbc *  vvy + mfcac                   * (1. - vy2) - c1o18 * oMdrho * vy2;
-						m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-						mfcac = m0;
-						mfcbc = m1;
-						mfccc = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						//mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-						////////////////////////////////////////////////////////////////////////////////////
-						// X - Dir
-						m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcaa - 2. * mfbaa *  vvx + mfaaa                   * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaaa = m0;
-						mfbaa = m1;
-						mfcaa = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcba - 2. * mfbba *  vvx + mfaba                  * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaba = m0;
-						mfbba = m1;
-						mfcba = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcca - 2. * mfbca *  vvx + mfaca                   * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaca = m0;
-						mfbca = m1;
-						mfcca = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcab - 2. * mfbab *  vvx + mfaab                  * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaab = m0;
-						mfbab = m1;
-						mfcab = m2;
-						///////////b////////////////////////////////////////////////////////////////////////
-						m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcbb - 2. * mfbbb *  vvx + mfabb                  * (1. - vx2) - c4o9 * oMdrho * vx2;
-						m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfabb = m0;
-						mfbbb = m1;
-						mfcbb = m2;
-						///////////b////////////////////////////////////////////////////////////////////////
-						m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfccb - 2. * mfbcb *  vvx + mfacb                  * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfacb = m0;
-						mfbcb = m1;
-						mfccb = m2;
-						////////////////////////////////////////////////////////////////////////////////////
-						////////////////////////////////////////////////////////////////////////////////////
-						m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcac - 2. * mfbac *  vvx + mfaac                   * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfaac = m0;
-						mfbac = m1;
-						mfcac = m2;
-						///////////c////////////////////////////////////////////////////////////////////////
-						m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfcbc - 2. * mfbbc *  vvx + mfabc                  * (1. - vx2) - c1o9 * oMdrho * vx2;
-						m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfabc = m0;
-						mfbbc = m1;
-						mfcbc = m2;
-						///////////c////////////////////////////////////////////////////////////////////////
-						m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-						m1 = -mfccc - 2. * mfbcc *  vvx + mfacc                   * (1. - vx2) - c1o36 * oMdrho * vx2;
-						m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-						mfacc = m0;
-						mfbcc = m1;
-						mfccc = m2;
-
-						//////////////////////////////////////////////////////////////////////////
-						//proof correctness
-						//////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-						real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
-							+ (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
-							+ (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
-						//LBMReal dif = fabs(rho - rho_post);
-						real dif = rho - rho_post;
-#ifdef SINGLEPRECISION
-						if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-						if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif					
-						{
-							UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post)
-								+ " dif=" + UbSystem::toString(dif)
-								+ " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-							//UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-							//exit(EXIT_FAILURE);
-						}
-#endif
-						//////////////////////////////////////////////////////////////////////////
-						//write distribution
-						//////////////////////////////////////////////////////////////////////////
-						(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-						(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-						(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-						(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-						(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-						(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-						(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-						(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-						(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-						(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-						(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-						(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-						(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-						real ux, uy, uz;
-
-						ux = vvx;						
-						uy = vvy;
-						uz = vvz;
-							
-							
-
-				
-						////////////////////////////////////////////////////////////////////////////
-						// Central Factorized Moment (advection diffusion part) 
-						//////////////////////////////////////////////////////////////////////////
-						//////////////////////////////////////////////////////////////////////////
-						//read distribution
-
-						mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-						mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-						mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-						mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-						mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-						mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-						mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-						mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-						mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-						mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-						mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-						mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-						mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-						mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-						mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-						mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-						mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-						mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-						mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-						mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-						mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-						mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-						mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-						mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-						mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-						mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-						mfbbb = (*this->zeroDistributionsH)(x1, x2, x3);
-
-						////////////////////////////////////////////////////////////////////////////////////
-						real 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;
-					
-						//flocculation
-						//LBMReal lambda = drho;
-
-						//LBMReal theta = 60 * 1.28172e+06;
-						//LBMReal alpha = 0.005;// *10.0;
-
-						real gammaDot = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + c1o1);
-
-						real dlambda = c1o1 / theta - alpha * lambda * gammaDot;
-
-						//LBMReal dlambda = one / (T*pow(lambda,m)) - alpha * lambda * gammaDot;
-
-						//////////////////////////////////////////////////////////////////////////
-						//collision Factorized Central moment Kernel Geier 2015
-						//////////////////////////////////////////////////////////////////////////               
-						real Mom000 = mfaaa + mfaab + mfaac + mfaba + mfabb + mfabc + mfaca +
-							mfacb + mfacc + mfbaa + mfbab + mfbac + mfbba + mfbbb + mfbbc + mfbca +
-							mfbcb + mfbcc + mfcaa + mfcab + mfcac + mfcba + mfcbb + mfcbc + mfcca + mfccb + mfccc;
-						
-						Mom000 += dlambda*c1o2;  //1
-
-																												   //(100)//
-						real Mom100 = mfaaa*(-1 - ux) + mfaab*(-1 - ux) + mfaac*(-1 - ux) + mfaba*(-1 - ux) + mfabb*(-1 - ux) + mfabc*(-1 - ux) + mfaca*(-1 - ux) +
-							mfacb*(-1 - ux) + mfacc*(-1 - ux) + mfcaa*(1 - ux) + mfcab*(1 - ux) + mfcac*(1 - ux) + mfcba*(1 - ux) + mfcbb*(1 - ux) +
-							mfcbc*(1 - ux) + mfcca*(1 - ux) + mfccb*(1 - ux) + mfccc*(1 - ux) - mfbaa*ux - mfbab*ux - mfbac*ux - mfbba*ux - mfbbb*ux -
-							mfbbc*ux - mfbca*ux - mfbcb*ux - mfbcc*ux;
-
-						real Mom010 = mfaaa*(-1 - uy) + mfaab*(-1 - uy) + mfaac*(-1 - uy) + mfbaa*(-1 - uy) + mfbab*(-1 - uy) + mfbac*(-1 - uy) + mfcaa*(-1 - uy) +
-							mfcab*(-1 - uy) + mfcac*(-1 - uy) + mfaca*(1 - uy) + mfacb*(1 - uy) + mfacc*(1 - uy) + mfbca*(1 - uy) + mfbcb*(1 - uy) +
-							mfbcc*(1 - uy) + mfcca*(1 - uy) + mfccb*(1 - uy) + mfccc*(1 - uy) - mfaba*uy - mfabb*uy - mfabc*uy - mfbba*uy - mfbbb*uy -
-							mfbbc*uy - mfcba*uy - mfcbb*uy - mfcbc*uy;
-
-						real Mom001 = mfaaa*(-1 - uz) + mfaba*(-1 - uz) + mfaca*(-1 - uz) + mfbaa*(-1 - uz) + mfbba*(-1 - uz) + mfbca*(-1 - uz) + mfcaa*(-1 - uz) +
-							mfcba*(-1 - uz) + mfcca*(-1 - uz) + mfaac*(1 - uz) + mfabc*(1 - uz) + mfacc*(1 - uz) + mfbac*(1 - uz) + mfbbc*(1 - uz) +
-							mfbcc*(1 - uz) + mfcac*(1 - uz) + mfcbc*(1 - uz) + mfccc*(1 - uz) - mfaab*uz - mfabb*uz - mfacb*uz - mfbab*uz - mfbbb*uz -
-							mfbcb*uz - mfcab*uz - mfcbb*uz - mfccb*uz;
-						////
-
-						//(110)//
-						real Mom110 = mfaaa*(-1 - ux)*(-1 - uy) + mfaab*(-1 - ux)*(-1 - uy) + mfaac*(-1 - ux)*(-1 - uy) + mfcaa*(1 - ux)*(-1 - uy) +
-							mfcab*(1 - ux)*(-1 - uy) + mfcac*(1 - ux)*(-1 - uy) - mfbaa*ux*(-1 - uy) - mfbab*ux*(-1 - uy) - mfbac*ux*(-1 - uy) +
-							mfaca*(-1 - ux)*(1 - uy) + mfacb*(-1 - ux)*(1 - uy) + mfacc*(-1 - ux)*(1 - uy) + mfcca*(1 - ux)*(1 - uy) + mfccb*(1 - ux)*(1 - uy) +
-							mfccc*(1 - ux)*(1 - uy) - mfbca*ux*(1 - uy) - mfbcb*ux*(1 - uy) - mfbcc*ux*(1 - uy) - mfaba*(-1 - ux)*uy - mfabb*(-1 - ux)*uy -
-							mfabc*(-1 - ux)*uy - mfcba*(1 - ux)*uy - mfcbb*(1 - ux)*uy - mfcbc*(1 - ux)*uy + mfbba*ux*uy + mfbbb*ux*uy + mfbbc*ux*uy;
-
-						real Mom101 = mfaaa*(-1 - ux)*(-1 - uz) + mfaba*(-1 - ux)*(-1 - uz) + mfaca*(-1 - ux)*(-1 - uz) + mfcaa*(1 - ux)*(-1 - uz) +
-							mfcba*(1 - ux)*(-1 - uz) + mfcca*(1 - ux)*(-1 - uz) - mfbaa*ux*(-1 - uz) - mfbba*ux*(-1 - uz) - mfbca*ux*(-1 - uz) +
-							mfaac*(-1 - ux)*(1 - uz) + mfabc*(-1 - ux)*(1 - uz) + mfacc*(-1 - ux)*(1 - uz) + mfcac*(1 - ux)*(1 - uz) + mfcbc*(1 - ux)*(1 - uz) +
-							mfccc*(1 - ux)*(1 - uz) - mfbac*ux*(1 - uz) - mfbbc*ux*(1 - uz) - mfbcc*ux*(1 - uz) - mfaab*(-1 - ux)*uz - mfabb*(-1 - ux)*uz -
-							mfacb*(-1 - ux)*uz - mfcab*(1 - ux)*uz - mfcbb*(1 - ux)*uz - mfccb*(1 - ux)*uz + mfbab*ux*uz + mfbbb*ux*uz + mfbcb*ux*uz;
-
-						real Mom011 = mfaaa*(-1 - uy)*(-1 - uz) + mfbaa*(-1 - uy)*(-1 - uz) + mfcaa*(-1 - uy)*(-1 - uz) + mfaca*(1 - uy)*(-1 - uz) +
-							mfbca*(1 - uy)*(-1 - uz) + mfcca*(1 - uy)*(-1 - uz) - mfaba*uy*(-1 - uz) - mfbba*uy*(-1 - uz) - mfcba*uy*(-1 - uz) +
-							mfaac*(-1 - uy)*(1 - uz) + mfbac*(-1 - uy)*(1 - uz) + mfcac*(-1 - uy)*(1 - uz) + mfacc*(1 - uy)*(1 - uz) + mfbcc*(1 - uy)*(1 - uz) +
-							mfccc*(1 - uy)*(1 - uz) - mfabc*uy*(1 - uz) - mfbbc*uy*(1 - uz) - mfcbc*uy*(1 - uz) - mfaab*(-1 - uy)*uz - mfbab*(-1 - uy)*uz -
-							mfcab*(-1 - uy)*uz - mfacb*(1 - uy)*uz - mfbcb*(1 - uy)*uz - mfccb*(1 - uy)*uz + mfabb*uy*uz + mfbbb*uy*uz + mfcbb*uy*uz;
-						////
-
-						real Mom111 = mfaaa*(-1 - ux)*(-1 - uy)*(-1 - uz) + mfcaa*(1 - ux)*(-1 - uy)*(-1 - uz) - mfbaa*ux*(-1 - uy)*(-1 - uz) +
-							mfaca*(-1 - ux)*(1 - uy)*(-1 - uz) + mfcca*(1 - ux)*(1 - uy)*(-1 - uz) - mfbca*ux*(1 - uy)*(-1 - uz) -
-							mfaba*(-1 - ux)*uy*(-1 - uz) - mfcba*(1 - ux)*uy*(-1 - uz) + mfbba*ux*uy*(-1 - uz) + mfaac*(-1 - ux)*(-1 - uy)*(1 - uz) +
-							mfcac*(1 - ux)*(-1 - uy)*(1 - uz) - mfbac*ux*(-1 - uy)*(1 - uz) + mfacc*(-1 - ux)*(1 - uy)*(1 - uz) +
-							mfccc*(1 - ux)*(1 - uy)*(1 - uz) - mfbcc*ux*(1 - uy)*(1 - uz) - mfabc*(-1 - ux)*uy*(1 - uz) - mfcbc*(1 - ux)*uy*(1 - uz) +
-							mfbbc*ux*uy*(1 - uz) - mfaab*(-1 - ux)*(-1 - uy)*uz - mfcab*(1 - ux)*(-1 - uy)*uz + mfbab*ux*(-1 - uy)*uz -
-							mfacb*(-1 - ux)*(1 - uy)*uz - mfccb*(1 - ux)*(1 - uy)*uz + mfbcb*ux*(1 - uy)*uz + mfabb*(-1 - ux)*uy*uz + mfcbb*(1 - ux)*uy*uz -
-							mfbbb*ux*uy*uz;
-
-						//(200)//
-						real Mom200 = ((mfcaa + mfcab + mfcac + mfcba + mfcbb + mfcbc + mfcca + mfccb +
-							mfccc)*pow(-1 + ux, 2) +
-							(mfbaa + mfbab + mfbac + mfbba + mfbbb + mfbbc + mfbca +
-								mfbcb + mfbcc)*pow(ux, 2) +
-								(mfaaa + mfaab + mfaac + mfaba + mfabb + mfabc + mfaca +
-									mfacb + mfacc)*pow(1 + ux, 2)) - Mom000 / 3;
-
-						real Mom020 = ((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) +
-							(mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) +
-							(mfcca + mfccb + mfccc)*pow(-1 + uy, 2) +
-							(mfaba + mfabb + mfabc)*pow(uy, 2) +
-							(mfbba + mfbbb + mfbbc)*pow(uy, 2) +
-							(mfcba + mfcbb + mfcbc)*pow(uy, 2) +
-							(mfaaa + mfaab + mfaac)*pow(1 + uy, 2) +
-							(mfbaa + mfbab + mfbac)*pow(1 + uy, 2) +
-							(mfcaa + mfcab + mfcac)*pow(1 + uy, 2)) - Mom000 / 3;
-
-						real Mom002 = (mfaba + mfabc + mfaca + mfacc + mfbba + mfbbc + mfbca + mfbcc +
-							mfcba + mfcbc + mfcca + mfccc + mfaac*pow(-1 + uz, 2) +
-							mfbac*pow(-1 + uz, 2) + mfcac*pow(-1 + uz, 2) +
-							2 * mfaba*uz - 2 * mfabc*uz + 2 * mfaca*uz - 2 * mfacc*uz +
-							2 * mfbba*uz - 2 * mfbbc*uz + 2 * mfbca*uz - 2 * mfbcc*uz +
-							2 * mfcba*uz - 2 * mfcbc*uz + 2 * mfcca*uz - 2 * mfccc*uz +
-							mfaab*pow(uz, 2) + mfaba*pow(uz, 2) + mfabb*pow(uz, 2) +
-							mfabc*pow(uz, 2) + mfaca*pow(uz, 2) + mfacb*pow(uz, 2) +
-							mfacc*pow(uz, 2) + mfbab*pow(uz, 2) + mfbba*pow(uz, 2) +
-							mfbbb*pow(uz, 2) + mfbbc*pow(uz, 2) + mfbca*pow(uz, 2) +
-							mfbcb*pow(uz, 2) + mfbcc*pow(uz, 2) + mfcab*pow(uz, 2) +
-							mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) + mfcbc*pow(uz, 2) +
-							mfcca*pow(uz, 2) + mfccb*pow(uz, 2) + mfccc*pow(uz, 2) +
-							mfaaa*pow(1 + uz, 2) + mfbaa*pow(1 + uz, 2) +
-							mfcaa*pow(1 + uz, 2)) - Mom000 / 3;
-						////
-
-						//(210)//
-						real Mom210 = (pow(1 + ux, 2)*(-((mfaca + mfacb + mfacc)*(-1 + uy)) -
-							(mfaba + mfabb + mfabc)*uy -
-							(mfaaa + mfaab + mfaac)*(1 + uy)) +
-							pow(ux, 2)*(-((mfbca + mfbcb + mfbcc)*(-1 + uy)) -
-							(mfbba + mfbbb + mfbbc)*uy -
-								(mfbaa + mfbab + mfbac)*(1 + uy)) +
-							pow(-1 + ux, 2)*(-((mfcca + mfccb + mfccc)*(-1 + uy)) -
-							(mfcba + mfcbb + mfcbc)*uy -
-								(mfcaa + mfcab + mfcac)*(1 + uy))) - Mom010 / 3;
-
-						real Mom201 = (-(pow(1 + ux, 2)*(mfaba - mfabc + mfaca - mfacc +
-							mfaac*(-1 + uz) + mfaab*uz + mfaba*uz + mfabb*uz +
-							mfabc*uz + mfaca*uz + mfacb*uz + mfacc*uz +
-							mfaaa*(1 + uz))) -
-							pow(ux, 2)*(mfbba - mfbbc + mfbca - mfbcc +
-								mfbac*(-1 + uz) + mfbab*uz + mfbba*uz + mfbbb*uz +
-								mfbbc*uz + mfbca*uz + mfbcb*uz + mfbcc*uz + mfbaa*(1 + uz))
-							- pow(-1 + ux, 2)*(mfcba - mfcbc + mfcca - mfccc +
-								mfcac*(-1 + uz) + mfcab*uz + mfcba*uz + mfcbb*uz +
-								mfcbc*uz + mfcca*uz + mfccb*uz + mfccc*uz + mfcaa*(1 + uz))) - Mom001 / 3;
-
-						real Mom120 = ((-1 - ux)*((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) +
-							(mfaba + mfabb + mfabc)*pow(uy, 2) +
-							(mfaaa + mfaab + mfaac)*pow(1 + uy, 2)) -
-							ux*((mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) +
-							(mfbba + mfbbb + mfbbc)*pow(uy, 2) +
-								(mfbaa + mfbab + mfbac)*pow(1 + uy, 2)) +
-								(1 - ux)*((mfcca + mfccb + mfccc)*pow(-1 + uy, 2) +
-							(mfcba + mfcbb + mfcbc)*pow(uy, 2) +
-									(mfcaa + mfcab + mfcac)*pow(1 + uy, 2))) - Mom100 / 3;
-
-
-						real Mom102 = (-((1 + ux)*(mfaba + mfabc + mfaca + mfacc +
-							mfaac*pow(-1 + uz, 2) + 2 * mfaba*uz - 2 * mfabc*uz +
-							2 * mfaca*uz - 2 * mfacc*uz + mfaab*pow(uz, 2) +
-							mfaba*pow(uz, 2) + mfabb*pow(uz, 2) +
-							mfabc*pow(uz, 2) + mfaca*pow(uz, 2) +
-							mfacb*pow(uz, 2) + mfacc*pow(uz, 2) +
-							mfaaa*pow(1 + uz, 2))) -
-							ux*(mfbba + mfbbc + mfbca + mfbcc + mfbac*pow(-1 + uz, 2) +
-								2 * mfbba*uz - 2 * mfbbc*uz + 2 * mfbca*uz - 2 * mfbcc*uz +
-								mfbab*pow(uz, 2) + mfbba*pow(uz, 2) +
-								mfbbb*pow(uz, 2) + mfbbc*pow(uz, 2) +
-								mfbca*pow(uz, 2) + mfbcb*pow(uz, 2) +
-								mfbcc*pow(uz, 2) + mfbaa*pow(1 + uz, 2)) -
-								(-1 + ux)*(mfcba + mfcbc + mfcca + mfccc +
-									mfcac*pow(-1 + uz, 2) + 2 * mfcba*uz - 2 * mfcbc*uz +
-									2 * mfcca*uz - 2 * mfccc*uz + mfcab*pow(uz, 2) +
-									mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) +
-									mfcbc*pow(uz, 2) + mfcca*pow(uz, 2) +
-									mfccb*pow(uz, 2) + mfccc*pow(uz, 2) +
-									mfcaa*pow(1 + uz, 2))) - Mom100 / 3;
-
-						real Mom021 = (-(pow(1 + uy, 2)*(mfaac*(-1 + uz) + mfaab*uz +
-							mfaaa*(1 + uz))) -
-							pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz + mfaba*(1 + uz)) -
-							pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz +
-								mfaca*(1 + uz)) - pow(1 + uy, 2)*
-								(mfbac*(-1 + uz) + mfbab*uz + mfbaa*(1 + uz)) -
-							pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz + mfbba*(1 + uz)) -
-							pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz +
-								mfbca*(1 + uz)) - pow(1 + uy, 2)*
-								(mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz)) -
-							pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz + mfcba*(1 + uz)) -
-							pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz + mfcca*(1 + uz))) - Mom001 / 3;
-
-						real Mom012 = (-((1 + uy)*(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) +
-							mfaaa*pow(1 + uz, 2))) -
-							uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) -
-								(-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) +
-									mfaca*pow(1 + uz, 2)) -
-									(1 + uy)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) +
-										mfbaa*pow(1 + uz, 2)) -
-							uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-								mfbba*pow(1 + uz, 2)) -
-								(-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) +
-									mfbca*pow(1 + uz, 2)) -
-									(1 + uy)*(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) +
-										mfcaa*pow(1 + uz, 2)) -
-							uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-								mfcba*pow(1 + uz, 2)) -
-								(-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) +
-									mfcca*pow(1 + uz, 2))) - Mom010 / 3;
-						////
-
-
-						//(220)//
-						real Mom220 = (pow(1 + ux, 2)*((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) +
-							(mfaba + mfabb + mfabc)*pow(uy, 2) +
-							(mfaaa + mfaab + mfaac)*pow(1 + uy, 2)) +
-							pow(ux, 2)*((mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) +
-							(mfbba + mfbbb + mfbbc)*pow(uy, 2) +
-								(mfbaa + mfbab + mfbac)*pow(1 + uy, 2)) +
-							pow(-1 + ux, 2)*((mfcca + mfccb + mfccc)*pow(-1 + uy, 2) +
-							(mfcba + mfcbb + mfcbc)*pow(uy, 2) +
-								(mfcaa + mfcab + mfcac)*pow(1 + uy, 2))) - Mom000 / 9;
-
-						real Mom202 = (pow(1 + ux, 2)*(mfaba + mfabc + mfaca + mfacc +
-							mfaac*pow(-1 + uz, 2) + 2 * mfaba*uz - 2 * mfabc*uz +
-							2 * mfaca*uz - 2 * mfacc*uz + mfaab*pow(uz, 2) +
-							mfaba*pow(uz, 2) + mfabb*pow(uz, 2) +
-							mfabc*pow(uz, 2) + mfaca*pow(uz, 2) +
-							mfacb*pow(uz, 2) + mfacc*pow(uz, 2) +
-							mfaaa*pow(1 + uz, 2)) +
-							pow(ux, 2)*(mfbba + mfbbc + mfbca + mfbcc +
-								mfbac*pow(-1 + uz, 2) + 2 * mfbba*uz - 2 * mfbbc*uz +
-								2 * mfbca*uz - 2 * mfbcc*uz + mfbab*pow(uz, 2) +
-								mfbba*pow(uz, 2) + mfbbb*pow(uz, 2) +
-								mfbbc*pow(uz, 2) + mfbca*pow(uz, 2) +
-								mfbcb*pow(uz, 2) + mfbcc*pow(uz, 2) +
-								mfbaa*pow(1 + uz, 2)) +
-							pow(-1 + ux, 2)*(mfcba + mfcbc + mfcca + mfccc +
-								mfcac*pow(-1 + uz, 2) + 2 * mfcba*uz - 2 * mfcbc*uz +
-								2 * mfcca*uz - 2 * mfccc*uz + mfcab*pow(uz, 2) +
-								mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) +
-								mfcbc*pow(uz, 2) + mfcca*pow(uz, 2) +
-								mfccb*pow(uz, 2) + mfccc*pow(uz, 2) +
-								mfcaa*pow(1 + uz, 2))) - Mom000 / 9;
-
-						real Mom022 = (pow(1 + uy, 2)*(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) +
-							mfaaa*pow(1 + uz, 2)) +
-							pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) +
-							pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) +
-								mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2)) +
-							pow(1 + uy, 2)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) +
-								mfbaa*pow(1 + uz, 2)) +
-							pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-								mfbba*pow(1 + uz, 2)) +
-							pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) +
-								mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2)) +
-							pow(1 + uy, 2)*(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) +
-								mfcaa*pow(1 + uz, 2)) +
-							pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-								mfcba*pow(1 + uz, 2)) +
-							pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) +
-								mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2))) - Mom000 / 9;
-						////
-
-						//(221)//
-						real Mom221 = (pow(1 + ux, 2)*(-(pow(1 + uy, 2)*
-							(mfaac*(-1 + uz) + mfaab*uz + mfaaa*(1 + uz))) -
-							pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz +
-								mfaba*(1 + uz)) -
-							pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz +
-								mfaca*(1 + uz))) +
-							pow(ux, 2)*(-(pow(1 + uy, 2)*
-							(mfbac*(-1 + uz) + mfbab*uz + mfbaa*(1 + uz))) -
-								pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz +
-									mfbba*(1 + uz)) -
-								pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz +
-									mfbca*(1 + uz))) +
-							pow(-1 + ux, 2)*(-(pow(1 + uy, 2)*
-							(mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz))) -
-								pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz +
-									mfcba*(1 + uz)) -
-								pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz +
-									mfcca*(1 + uz)))) - Mom001 / 9;
-
-						real Mom212 = (pow(1 + ux, 2)*(-((1 + uy)*
-							(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) +
-								mfaaa*pow(1 + uz, 2))) -
-							uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) -
-								(-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) +
-									mfaca*pow(1 + uz, 2))) +
-							pow(ux, 2)*(-((1 + uy)*
-							(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) +
-								mfbaa*pow(1 + uz, 2))) -
-								uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-									mfbba*pow(1 + uz, 2)) -
-									(-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) +
-										mfbca*pow(1 + uz, 2))) +
-							pow(-1 + ux, 2)*(-((1 + uy)*
-							(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) +
-								mfcaa*pow(1 + uz, 2))) -
-								uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-									mfcba*pow(1 + uz, 2)) -
-									(-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) +
-										mfcca*pow(1 + uz, 2)))) - Mom010 / 9;
-
-						real Mom122 = ((-1 - ux)*(pow(1 + uy, 2)*
-							(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) +
-								mfaaa*pow(1 + uz, 2)) +
-							pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) +
-							pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) +
-								mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2))) -
-							ux*(pow(1 + uy, 2)*(mfbac*pow(-1 + uz, 2) +
-								mfbab*pow(uz, 2) + mfbaa*pow(1 + uz, 2)) +
-								pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-									mfbba*pow(1 + uz, 2)) +
-								pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) +
-									mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2))) +
-									(1 - ux)*(pow(1 + uy, 2)*
-							(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) +
-								mfcaa*pow(1 + uz, 2)) +
-										pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-											mfcba*pow(1 + uz, 2)) +
-										pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) +
-											mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2)))) - Mom100 / 9;
-						////
-
-						//(211)//
-						real Mom211 = (pow(1 + ux, 2)*((1 + uy)*(mfaac*(-1 + uz) + mfaab*uz +
-							mfaaa*(1 + uz)) +
-							uy*(mfabc*(-1 + uz) + mfabb*uz + mfaba*(1 + uz)) +
-							(-1 + uy)*(mfacc*(-1 + uz) + mfacb*uz + mfaca*(1 + uz))) +
-							pow(ux, 2)*((1 + uy)*(mfbac*(-1 + uz) + mfbab*uz +
-								mfbaa*(1 + uz)) +
-								uy*(mfbbc*(-1 + uz) + mfbbb*uz + mfbba*(1 + uz)) +
-								(-1 + uy)*(mfbcc*(-1 + uz) + mfbcb*uz + mfbca*(1 + uz))) +
-							pow(-1 + ux, 2)*((1 + uy)*
-							(mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz)) +
-								uy*(mfcbc*(-1 + uz) + mfcbb*uz + mfcba*(1 + uz)) +
-								(-1 + uy)*(mfccc*(-1 + uz) + mfccb*uz + mfcca*(1 + uz)))) - Mom011 / 3;
-
-						real Mom121 = ((-1 - ux)*(-(pow(1 + uy, 2)*
-							(mfaac*(-1 + uz) + mfaab*uz + mfaaa*(1 + uz))) -
-							pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz +
-								mfaba*(1 + uz)) -
-							pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz +
-								mfaca*(1 + uz))) -
-							ux*(-(pow(1 + uy, 2)*(mfbac*(-1 + uz) + mfbab*uz +
-								mfbaa*(1 + uz))) -
-								pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz +
-									mfbba*(1 + uz)) -
-								pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz +
-									mfbca*(1 + uz))) +
-									(1 - ux)*(-(pow(1 + uy, 2)*
-							(mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz))) -
-										pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz +
-											mfcba*(1 + uz)) -
-										pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz +
-											mfcca*(1 + uz)))) - Mom101 / 3;
-
-						real Mom112 = ((-1 - ux)*(-((1 + uy)*(mfaac*pow(-1 + uz, 2) +
-							mfaab*pow(uz, 2) + mfaaa*pow(1 + uz, 2))) -
-							uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) -
-								(-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) +
-									mfaca*pow(1 + uz, 2))) -
-							ux*(-((1 + uy)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) +
-								mfbaa*pow(1 + uz, 2))) -
-								uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-									mfbba*pow(1 + uz, 2)) -
-									(-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) +
-										mfbca*pow(1 + uz, 2))) +
-										(1 - ux)*(-((1 + uy)*(mfcac*pow(-1 + uz, 2) +
-											mfcab*pow(uz, 2) + mfcaa*pow(1 + uz, 2))) -
-											uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-												mfcba*pow(1 + uz, 2)) -
-												(-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) +
-													mfcca*pow(1 + uz, 2)))) - Mom110 / 3;
-						////
-
-						//(222)//
-						real Mom222 = (pow(1 + ux, 2)*(pow(1 + uy, 2)*
-							(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) +
-								mfaaa*pow(1 + uz, 2)) +
-							pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) +
-								mfaba*pow(1 + uz, 2)) +
-							pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) +
-								mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2))) +
-							pow(ux, 2)*(pow(1 + uy, 2)*
-							(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) +
-								mfbaa*pow(1 + uz, 2)) +
-								pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) +
-									mfbba*pow(1 + uz, 2)) +
-								pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) +
-									mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2))) +
-							pow(-1 + ux, 2)*(pow(1 + uy, 2)*
-							(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) +
-								mfcaa*pow(1 + uz, 2)) +
-								pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) +
-									mfcba*pow(1 + uz, 2)) +
-								pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) +
-									mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2)))) - Mom000 / 27;
-						////
-
-
-
-
-
-						real Meq000 = drho+dlambda*c1o2;
-
-
-						// relaxation Central Moment MRT
-
-						Mom000 = Meq000;
-
-						Mom000 += dlambda*c1o2;
-
-						Mom100 = (1 - collFactorH) * Mom100;
-						Mom010 = (1 - collFactorH) * Mom010;
-						Mom001 = (1 - collFactorH) * Mom001;
-
-						Mom110 = 0;
-						Mom101 = 0;
-						Mom011 = 0;
-
-						Mom111 = 0;
-
-						//(200)//
-						Mom200 = Mom000 / 3;
-						Mom020 = Mom000 / 3;
-						Mom002 = Mom000 / 3;
-						////
-
-						//(210)//
-						Mom210 = Mom010 / 3;
-						Mom201 = Mom001 / 3;
-						Mom120 = Mom100 / 3;
-
-
-						Mom102 = Mom100 / 3;
-						Mom021 = Mom001 / 3;
-						Mom012 = Mom010 / 3;
-						////
-
-
-						//(220)//
-						Mom220 = Mom000 / 9;
-						Mom202 = Mom000 / 9;
-						Mom022 = Mom000 / 9;
-						////
-
-						//(221)//
-						Mom221 = Mom001 / 9;
-						Mom212 = Mom010 / 9;
-						Mom122 = Mom100 / 9;
-						////
-
-						//(211)//
-						Mom211 = Mom011 / 3;
-						Mom121 = Mom101 / 3;
-						Mom112 = Mom110 / 3;
-						////
-
-						//(222)//
-						Mom222 = Mom000 / 27;
-						////
-						
-
-
-						//Back transformation to distributions
-
-						mfcbb = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) +
-							2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy +
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*
-							(-1 + pow(uy, 2)) -
-							2 * (-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) -
-								2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*
-								uy - (Mom101 + Mom201 + 2 * Mom101*ux +
-									Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*uz +
-									(-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) -
-										2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*
-										uy - (Mom100 + Mom200 + 2 * Mom100*ux +
-											Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))*
-											(1 - pow(uz, 2))) / 2.;
-						mfbcb = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) +
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy*
-							(1 + uy) + (Mom212 + 2 * Mom112*ux +
-								Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) -
-							2 * (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy*
-								(1 + uy) - (Mom211 + 2 * Mom111*ux +
-									Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*uz +
-									(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy*
-										(1 + uy) - (Mom210 + 2 * Mom110*ux +
-											Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))*
-											(1 - pow(uz, 2))) / 2.;
-						mfbbc = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) +
-							2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy +
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*
-							(-1 + pow(uy, 2)) +
-							(Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) +
-								2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*
-								uy + (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*
-								(-1 + pow(uy, 2)))*uz*(1 + uz) +
-								(Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) +
-									2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*
-									uy + (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*
-									(-1 + pow(uy, 2)))*(1 + 2 * uz)) / 2.;
-						mfccb = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) -
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy*
-							(1 + uy) - (Mom112 + Mom212 + 2 * Mom112*ux +
-								Mom012*ux*(1 + ux))*(1 + 2 * uy) -
-							2 * (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy*
-								(1 + uy) + (Mom111 + Mom211 + 2 * Mom111*ux +
-									Mom011*ux*(1 + ux))*(1 + 2 * uy))*uz +
-									(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy*
-										(1 + uy) + (Mom110 + Mom210 + 2 * Mom110*ux +
-											Mom010*ux*(1 + ux))*(1 + 2 * uy))*(1 - pow(uz, 2))) / 4.;
-						mfacb = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux -
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy*
-							(1 + uy) - (Mom212 + Mom012*(-1 + ux)*ux +
-								Mom112*(-1 + 2 * ux))*(1 + 2 * uy) -
-							2 * (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy*
-								(1 + uy) + (Mom211 + Mom011*(-1 + ux)*ux +
-									Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*uz +
-									(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy*
-										(1 + uy) + (Mom210 + Mom010*(-1 + ux)*ux +
-											Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*(1 - pow(uz, 2))) / 4.;
-						mfcbc = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) -
-							2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy -
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*
-							(-1 + pow(uy, 2)) +
-							(-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) -
-								2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*
-								uy - (Mom100 + Mom200 + 2 * Mom100*ux +
-									Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))*uz*(1 + uz) +
-									(-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) -
-										2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*
-										uy - (Mom101 + Mom201 + 2 * Mom101*ux +
-											Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*(1 + 2 * uz)) / 4.;
-						mfabc = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux -
-							2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy -
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*
-							(-1 + pow(uy, 2)) +
-							(Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux -
-								2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*
-								uy - (Mom200 + Mom000*(-1 + ux)*ux +
-									Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*uz*(1 + uz) +
-									(Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux -
-										2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*
-										uy - (Mom201 + Mom001*(-1 + ux)*ux +
-											Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(1 + 2 * uz)) / 4.;
-						mfbcc = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) -
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy*
-							(1 + uy) - (Mom212 + 2 * Mom112*ux +
-								Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) +
-								(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy*
-									(1 + uy) - (Mom210 + 2 * Mom110*ux +
-										Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))*uz*(1 + uz) +
-										(Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy*
-											(1 + uy) - (Mom211 + 2 * Mom111*ux +
-												Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(1 + 2 * uz)) / 4.;
-						mfbac = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) -
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*
-							(-1 + uy)*uy - (Mom212 + 2 * Mom112*ux +
-								Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) +
-								(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*
-									(-1 + uy)*uy - (Mom210 + 2 * Mom110*ux +
-										Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*uz*(1 + uz) +
-										(Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*
-											(-1 + uy)*uy - (Mom211 + 2 * Mom111*ux +
-												Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(1 + 2 * uz)) / 4.;
-						mfccc = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) +
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy*
-							(1 + uy) + (Mom112 + Mom212 + 2 * Mom112*ux +
-								Mom012*ux*(1 + ux))*(1 + 2 * uy) +
-								(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy*
-									(1 + uy) + (Mom110 + Mom210 + 2 * Mom110*ux +
-										Mom010*ux*(1 + ux))*(1 + 2 * uy))*uz*(1 + uz) +
-										(Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy*
-											(1 + uy) + (Mom111 + Mom211 + 2 * Mom111*ux +
-												Mom011*ux*(1 + ux))*(1 + 2 * uy))*(1 + 2 * uz)) / 8.;
-						mfacc = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) +
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy*
-							(1 + uy) + (Mom212 + Mom012*(-1 + ux)*ux +
-								Mom112*(-1 + 2 * ux))*(1 + 2 * uy) +
-								(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy*
-									(1 + uy) + (Mom210 + Mom010*(-1 + ux)*ux +
-										Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*uz*(1 + uz) +
-										(Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy*
-											(1 + uy) + (Mom211 + Mom011*(-1 + ux)*ux +
-												Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*(1 + 2 * uz)) / 8.;
-						mfcac = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) +
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*
-							(-1 + uy)*uy + (Mom112 + Mom212 + 2 * Mom112*ux +
-								Mom012*ux*(1 + ux))*(-1 + 2 * uy) +
-								(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*
-									(-1 + uy)*uy + (Mom110 + Mom210 + 2 * Mom110*ux +
-										Mom010*ux*(1 + ux))*(-1 + 2 * uy))*uz*(1 + uz) +
-										(Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*
-											(-1 + uy)*uy + (Mom111 + Mom211 + 2 * Mom111*ux +
-												Mom011*ux*(1 + ux))*(-1 + 2 * uy))*(1 + 2 * uz)) / 8.;
-						mfaac = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) +
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*
-							(-1 + uy)*uy + (Mom212 + Mom012*(-1 + ux)*ux +
-								Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) +
-								(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*
-									(-1 + uy)*uy + (Mom210 + Mom010*(-1 + ux)*ux +
-										Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*uz*(1 + uz) +
-										(Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*
-											(-1 + uy)*uy + (Mom211 + Mom011*(-1 + ux)*ux +
-												Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*(1 + 2 * uz)) / 8.;
-
-						mfabb = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) +
-							2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy +
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*
-							(-1 + pow(uy, 2)) -
-							2 * (Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux -
-								2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*
-								uy - (Mom201 + Mom001*(-1 + ux)*ux +
-									Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*uz +
-									(Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux -
-										2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*
-										uy - (Mom200 + Mom000*(-1 + ux)*ux +
-											Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*
-											(1 - pow(uz, 2))) / 2.;
-						mfbab = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) +
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*
-							(-1 + uy)*uy + (Mom212 + 2 * Mom112*ux +
-								Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) -
-							2 * (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*
-								(-1 + uy)*uy - (Mom211 + 2 * Mom111*ux +
-									Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*uz +
-									(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*
-										(-1 + uy)*uy - (Mom210 + 2 * Mom110*ux +
-											Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*
-											(1 - pow(uz, 2))) / 2.;
-						mfbba = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) +
-							2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy +
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*
-							(-1 + pow(uy, 2)) +
-							(Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) +
-								2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*
-								uy + (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*
-								(-1 + pow(uy, 2)))*(-1 + uz)*uz +
-								(Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) +
-									2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*
-									uy + (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*
-									(-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 2.;
-						mfaab = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux -
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*
-							(-1 + uy)*uy - (Mom212 + Mom012*(-1 + ux)*ux +
-								Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) -
-							2 * (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*
-								(-1 + uy)*uy + (Mom211 + Mom011*(-1 + ux)*ux +
-									Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*uz +
-									(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*
-										(-1 + uy)*uy + (Mom210 + Mom010*(-1 + ux)*ux +
-											Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*(1 - pow(uz, 2))) / 4.;
-						mfcab = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) -
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*
-							(-1 + uy)*uy - (Mom112 + Mom212 + 2 * Mom112*ux +
-								Mom012*ux*(1 + ux))*(-1 + 2 * uy) -
-							2 * (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*
-								(-1 + uy)*uy + (Mom111 + Mom211 + 2 * Mom111*ux +
-									Mom011*ux*(1 + ux))*(-1 + 2 * uy))*uz +
-									(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*
-										(-1 + uy)*uy + (Mom110 + Mom210 + 2 * Mom110*ux +
-											Mom010*ux*(1 + ux))*(-1 + 2 * uy))*(1 - pow(uz, 2))) / 4.;
-						mfaba = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux - 2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy -
-							(Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*(-1 + pow(uy, 2)) +
-							(Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux - 2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*uy -
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(-1 + uz)*uz +
-								(Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux - 2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*uy -
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 4.;
-						mfcba = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) - 2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy -
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*(-1 + pow(uy, 2)) +
-							(-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) - 2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*uy -
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))*(-1 + uz)*uz +
-								(-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) - 2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*uy -
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 4.;
-						mfbaa = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*(-1 + uy)*uy -
-							(Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) +
-							(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*(-1 + uy)*uy -
-								(Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*(-1 + uy)*uy -
-									(Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 4.;
-						mfbca = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy*(1 + uy) -
-							(Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) +
-							(Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) -
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy*(1 + uy) -
-								(Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) -
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy*(1 + uy) -
-									(Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(-1 + 2 * uz)) / 4.;
-						mfaaa = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*(-1 + uy)*uy +
-							(Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) +
-							(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*(-1 + uy)*uy +
-								(Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*(-1 + uy)*uy +
-									(Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 8.;
-						mfcaa = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) +
-							(Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*(-1 + uy)*uy +
-							(Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*(-1 + 2 * uy) +
-							(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*(-1 + uy)*uy +
-								(Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*(-1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*(-1 + uy)*uy +
-									(Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 8.;
-						mfaca = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy*(1 + uy) +
-							(Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*(1 + 2 * uy) +
-							(Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) +
-							(Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy*(1 + uy) +
-								(Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) +
-							(Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy*(1 + uy) +
-									(Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*(-1 + 2 * uz)) / 8.;
-						mfcca = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy*(1 + uy) +
-							(Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*(1 + 2 * uy) +
-							(Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) +
-							(Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy*(1 + uy) +
-								(Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*(1 + 2 * uy))*(-1 + uz)*uz +
-								(Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) +
-							(Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy*(1 + uy) +
-									(Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*(1 + 2 * uy))*(-1 + 2 * uz)) / 8.;
-
-						mfbbb = Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - 2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy -
-							(Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)) -
-							2 * (Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) + 2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*uy +
-							(Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)))*uz +
-								(Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) + 2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*uy +
-							(Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)))*(1 - pow(uz, 2));
-
-						////////////////////////////////////////////////////////////////////////////////////
-
-						//////////////////////////////////////////////////////////////////////////
-						//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;
-						//UBLOG(logINFO, "lambda ="<<drho_post);
-//						//LBMReal dif = fabs(rho - rho_post);
-//						dif = drho - drho_post;
-//#ifdef SINGLEPRECISION
-//						if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//						if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//						{
-//							UB_THROW(UbException(UB_EXARGS, "Flocculation=" + UbSystem::toString(drho) + ", flocculation post=" + UbSystem::toString(drho_post)
-//								+ " dif=" + UbSystem::toString(dif)
-//								+ " Flocculation is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
-//							//UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-//							//exit(EXIT_FAILURE);
-//						}
-//#endif
-						//////////////////////////////////////////////////////////////////////////
-						//write distribution
-						//////////////////////////////////////////////////////////////////////////
-						(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
-						(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
-						(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
-						(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
-						(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
-						(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
-						(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
-						(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
-						(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
-						(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
-						(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
-						(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
-						(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
-
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
-						(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
-
-						(*this->zeroDistributionsH)(x1, x2, x3) = mfbbb;
-						//////////////////////////////////////////////////////////////////////////
-
-
-					}
-				}
-			}
-		}
-
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-real ThixotropyLBMKernel::getCalculationTime()
-{
-	//return timer.getDuration();
-	return timer.getTotalTime();
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyLBMKernel::setCollisionFactorF(real collFactor)
-{
-	setCollisionFactor(collFactor);
-	this->collFactorF = collFactor;
-
-}
-//////////////////////////////////////////////////////////////////////////
-void ThixotropyLBMKernel::setCollisionFactorH(real collFactor)
-{
-	this->collFactorH = collFactor;
-}
-//////////////////////////////////////////////////////////////////////////
-real ThixotropyLBMKernel::getCollisionFactorF() const
-{
-	return this->collFactorF;
-}
-//////////////////////////////////////////////////////////////////////////
-real ThixotropyLBMKernel::getCollisionFactorH() const
-{
-	return this->collFactorH;
-}
-void ThixotropyLBMKernel::setAlpha(real alpha)
-{
-	this->alpha = alpha;
-}
-real ThixotropyLBMKernel::getAlpha() const
-{
-	return this->alpha;
-}
-void ThixotropyLBMKernel::setTheta(real theta)
-{
-	this->theta = theta;
-}
-real ThixotropyLBMKernel::getTheta() const
-{
-	return this->theta;
-}
-void ThixotropyLBMKernel::swapDistributions()
-{
-	LBMKernel::swapDistributions();
-	dataSet->getHdistributions()->swap();
-}
-//////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.h
deleted file mode 100644
index 00b374ed133f58878ed8e1cf541c3fad79ea7c5e..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.h
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef ThixotropyLBMKernel_H
-#define ThixotropyLBMKernel_H
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-class ThixotropyLBMKernel;
-
-//! \brief    Cumulant + Fact. Central LBM kernel. 
-//! \author Hussein
-class ThixotropyLBMKernel : public LBMKernel
-{
-public:
-	//! This option set relaxation parameter: NORMAL  
-	enum Parameter { NORMAL, MAGIC };
-public:
-	ThixotropyLBMKernel();
-	virtual ~ThixotropyLBMKernel(void);
-	virtual void calculate(int step);
-	virtual SPtr<LBMKernel> clone();
-	real getCalculationTime();
- 
-	void setCollisionFactorF(real collFactor);
-   void setCollisionFactorH(real collFactor);
-   real getCollisionFactorF() const;
-   real getCollisionFactorH() const;
-
-	void setAlpha(real alpha);
-	real getAlpha() const;
-
-	void setTheta(real theta);
-	real getTheta() const;
-
-	void swapDistributions();
-
-protected:
-	virtual void initDataSet();
-	real f[D3Q27System::ENDF + 1];
-
-	UbTimer timer;
-
-	real OxyyMxzz;
-	Parameter parameter;
-
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
-
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH;
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH;
-	CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH;
-
-	mu::value_type muX1, muX2, muX3;
-	mu::value_type muDeltaT;
-	mu::value_type muNu;
-	real forcingX1;
-	real forcingX2;
-	real forcingX3;
-
-	real collFactorF;
-   real collFactorH;
-
-	real theta;
-	real alpha;
-};
-
-#endif
-
diff --git a/src/cpu/NonNewtonianFluids/NonNewtonianFluids.h b/src/cpu/NonNewtonianFluids/NonNewtonianFluids.h
deleted file mode 100644
index 705a07af12b8ad8d32632d28dde5f4cd4b127173..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/NonNewtonianFluids.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file NonNewtonianFluids.h
-//! \ingroup NonNewtonianFluids
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef NonNewtonianFluids_h
-#define NonNewtonianFluids_h
-
-#include "NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h"
-
-#include "NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.h"
-#include "NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.h"
-
-#include "NonNewtonianFluids/LBM/ThixotropyLBMKernel.h"
-#include "NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.h"
-#include "NonNewtonianFluids/LBM/RheologyBinghamModelLBMKernel.h"
-#include "NonNewtonianFluids/LBM/RheologyHerschelBulkleyModelLBMKernel.h"
-#include "NonNewtonianFluids/LBM/RheologyInterpolator.h"
-#include "NonNewtonianFluids/LBM/Rheology.h"
-#include "NonNewtonianFluids/LBM/RheologyK17LBMKernel.h"
-#include "NonNewtonianFluids/LBM/RheologyPowellEyringModelLBMKernel.h"
-
-#endif
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp b/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp
deleted file mode 100644
index fc120348cd9a1b1fc2f58139d200dabd4709bd26..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp
+++ /dev/null
@@ -1,294 +0,0 @@
-#include "CalculateTorqueSimulationObserver.h"
-#include "BCSet.h"
-
-#include <parallel/Communicator.h>
-#include "D3Q27Interactor.h"
-#include "UbScheduler.h"
-#include "Grid3D.h"
-#include "BoundaryConditions.h"
-#include "DataSet3D.h"
-#include "Block3D.h"
-#include "LBMKernel.h"
-#include "BCArray3D.h"
-#include "EsoTwist3D.h"
-#include "DistributionArray3D.h"
-#include "NonNewtonianFluids/LBM/Rheology.h"
-
-CalculateTorqueSimulationObserver::CalculateTorqueSimulationObserver( SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path_, std::shared_ptr<vf::parallel::Communicator> comm) : SimulationObserver(grid, s), path(path_), comm(comm), torqueX1global(0), torqueX2global(0), torqueX3global(0)
-{
-   if (comm->getProcessID() == comm->getRoot())
-   {
-      std::ofstream ostr;
-       std::string fname = path_;
-      ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);
-      if(!ostr)
-      { 
-         ostr.clear();
-         const std::string path = UbSystem::getPathFromString(fname);
-         if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);}
-         if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname);
-      }
-
-      ostr << "step;";
-      ostr << "Tx;";
-      ostr << "Ty;";
-      ostr << "Tz" << std::endl;
-      ostr.close();
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-CalculateTorqueSimulationObserver::~CalculateTorqueSimulationObserver()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void CalculateTorqueSimulationObserver::update( real step )
-{
-   if(scheduler->isDue(step) )
-      collectData(step);
-
-   UBLOG(logDEBUG3, "D3Q27ForcesSimulationObserver::update:" << step);
-}
-//////////////////////////////////////////////////////////////////////////
-void CalculateTorqueSimulationObserver::collectData( real step )
-{
-   calculateForces();
-
-   if (comm->getProcessID() == comm->getRoot())
-   {
-      int istep = static_cast<int>(step);
-      std::ofstream ostr;
-      std::string fname = path;
-      ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);
-      if(!ostr)
-      { 
-         ostr.clear();
-         std::string path = UbSystem::getPathFromString(fname);
-         if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);}
-         if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname);
-      }
-
-      ostr << istep << ";";
-      ostr << torqueX1global << ";";
-      ostr << torqueX2global << ";";
-      ostr << torqueX3global << ";";
-      ostr << Fx << ";";
-      ostr << Fy << ";";
-      ostr << Fz;
-      ostr << std::endl;
-      ostr.close();
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void CalculateTorqueSimulationObserver::calculateForces()
-{
-   torqueX1global = 0.0;
-   torqueX2global = 0.0;
-   torqueX3global = 0.0;
-
-   for(SPtr<D3Q27Interactor> interactor : interactors)
-   {
-      real x1Centre = interactor->getGbObject3D()->getX1Centroid();
-      real x2Centre = interactor->getGbObject3D()->getX2Centroid();
-      real x3Centre = interactor->getGbObject3D()->getX3Centroid();
-
-      for(BcNodeIndicesMap::value_type t : interactor->getBcNodeIndicesMap())
-      {
-         real torqueX1 = 0.0;
-         real torqueX2 = 0.0;
-         real torqueX3 = 0.0;
-
-         SPtr<Block3D> block = t.first;
-         std::set< std::vector<int> >& transNodeIndicesSet = t.second;
-
-         real deltaX = grid->getDeltaX(block);
-
-         SPtr<ILBMKernel> kernel = block->getKernel();
-
-         SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray();          
-         SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); 
-
-         int ghostLayerWidth = kernel->getGhostLayerWidth();
-         int minX1 = ghostLayerWidth;
-         int maxX1 = (int)bcArray->getNX1() - 1 - ghostLayerWidth;
-         int minX2 = ghostLayerWidth;
-         int maxX2 = (int)bcArray->getNX2() - 1 - ghostLayerWidth;
-         int minX3 = ghostLayerWidth;
-         int maxX3 = (int)bcArray->getNX3() - 1 - ghostLayerWidth;
-
-         for(std::vector<int> node : transNodeIndicesSet)
-         {
-            int x1 = node[0];
-            int x2 = node[1];
-            int x3 = node[2];
-
-            //without ghost nodes
-            if (x1 < minX1 || x1 > maxX1 || x2 < minX2 || x2 > maxX2 ||x3 < minX3 || x3 > maxX3 ) continue;
-
-            if(bcArray->isFluid(x1,x2,x3)) //es kann sein, dass der node von einem anderen interactor z.B. als solid gemarkt wurde!!!
-            {
-               SPtr<BoundaryConditions> bc = bcArray->getBC(x1,x2,x3);
-               
-               Vector3D worldCoordinates = grid->getNodeCoordinates(block, x1, x2, x3);
-               real rx = (worldCoordinates[0] - x1Centre) / deltaX;
-               real ry = (worldCoordinates[1] - x2Centre) / deltaX;
-               real rz = (worldCoordinates[2] - x3Centre) / deltaX;
-
-               // real nx = rx / sqrt(rx * rx + ry * ry + rz * rz);
-               // real ny = ry / sqrt(rx * rx + ry * ry + rz * rz);
-               // real nz = rz / sqrt(rx * rx + ry * ry + rz * rz);
-
-               UbTupleDouble3 forceVec = getForces(x1, x2, x3, distributions, bc);
-               //UbTupleDouble3 forceVec = getForcesFromMoments(x1, x2, x3, kernel, distributions, bc, nx, ny, nz);
-               //UbTupleDouble3 forceVec = getForcesFromStressTensor(x1, x2, x3, kernel, distributions, bc, nx, ny, nz);
-               /*real*/ Fx                   = val<1>(forceVec);
-               /*real*/ Fy                   = val<2>(forceVec);
-               /*real*/ Fz                   = val<3>(forceVec);
-              
-
-
-               torqueX1 += ry * Fz - rz * Fy;
-               torqueX2 += rz * Fx - rx * Fz;
-               torqueX3 += rx * Fy - ry * Fx;
-            }
-         }
-
-         torqueX1global += torqueX1;
-         torqueX2global += torqueX2;
-         torqueX3global += torqueX3;
-      }
-   }
-   std::vector<real> values;
-   std::vector<real> rvalues;
-   values.push_back(torqueX1global);
-   values.push_back(torqueX2global);
-   values.push_back(torqueX3global);
-
-   rvalues = comm->gather(values);
-   if (comm->getProcessID() == comm->getRoot())
-   {
-      torqueX1global = 0.0;
-      torqueX2global = 0.0;
-      torqueX3global = 0.0;
-      
-      for (int i = 0; i < (int)rvalues.size(); i+=3)
-      {
-         torqueX1global += rvalues[i];
-         torqueX2global += rvalues[i+1];
-         torqueX3global += rvalues[i+2];
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-UbTupleDouble3 CalculateTorqueSimulationObserver::getForces(int x1, int x2, int x3,  SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc)
-{
-   UbTupleDouble3 force(0.0,0.0,0.0);
-
-   if(bc)
-   {
-      //references to tuple "force"
-      real& forceX1 = val<1>(force);
-      real& forceX2 = val<2>(force);
-      real& forceX3 = val<3>(force);
-      real f,  fnbr;
-
-      dynamicPointerCast<EsoTwist3D>(distributions)->swap();
-
-      for(int fdir=D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
-      {
-         if(bc->hasNoSlipBoundaryFlag(fdir) || bc->hasVelocityBoundaryFlag(fdir))
-         {
-            const int invDir = D3Q27System::INVDIR[fdir];
-            f = dynamicPointerCast<EsoTwist3D>(distributions)->getDistributionInvForDirection(x1, x2, x3, invDir);
-            fnbr = dynamicPointerCast<EsoTwist3D>(distributions)->getDistributionInvForDirection(x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-
-            forceX1 += (f + fnbr) * D3Q27System::DX1[invDir];
-            forceX2 += (f + fnbr) * D3Q27System::DX2[invDir];
-            forceX3 += (f + fnbr) * D3Q27System::DX3[invDir];
-         }
-      }
-
-      dynamicPointerCast<EsoTwist3D>(distributions)->swap();
-   }
-
-   return force;
-}
-//////////////////////////////////////////////////////////////////////////
-UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromMoments(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz)
-{
-   using namespace vf::basics::constant;
-   UbTupleDouble3 force(0.0, 0.0, 0.0);
-
-
-   if (bc) {
-      real f[D3Q27System::ENDF + 1];
-      distributions->getPreCollisionDistribution(f, x1, x2, x3);
-      real collFactor = kernel->getCollisionFactor();
-      real shearRate = D3Q27System::getShearRate(f, collFactor);
-      real rho = D3Q27System::getDensity(f);
-      real omega = Rheology::getBinghamCollFactor(collFactor, shearRate, rho);
-      std::array<real, 6> moments = D3Q27System::getSecondMoments(f, omega);
-
-      // references to tuple "force"
-      real &forceX1 = val<1>(force);
-      real &forceX2 = val<2>(force);
-      real &forceX3 = val<3>(force);
-
-      real mxx = (moments[0] + moments[1] + moments[2])*c1o3;
-      real myy = (-c2o1 * moments[1] + moments[2] + moments[0]) * c1o3; 
-      real mzz = (-c2o1 * moments[2] + moments[1] + moments[0]) * c1o3;
-      real mxy = moments[3];
-      real mxz = moments[4];
-      real myz = moments[5];
-      
-      forceX1 = mxx *nx + mxy*ny + mxz*nz;
-      forceX2 = mxy *nx + myy*ny + myz*nz;
-      forceX3 = mxz *nx + myz*ny + mzz*nz;
-   }
-
-   return force;
-}
-//////////////////////////////////////////////////////////////////////////
-UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromStressTensor(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz)
-{
-   using namespace vf::basics::constant;
-   UbTupleDouble3 force(0.0, 0.0, 0.0);
-
-   if (bc) {
-      real f[D3Q27System::ENDF + 1];
-      distributions->getPreCollisionDistribution(f, x1, x2, x3);
-      real collFactor = kernel->getCollisionFactor();
-      real shearRate = D3Q27System::getShearRate(f, collFactor);
-      real rho = D3Q27System::getDensity(f);
-      real omega = Rheology::getBinghamCollFactor(collFactor, shearRate, rho);
-      std::array<real, 6> stress = D3Q27System::getStressTensor(f, omega);
-
-      // references to tuple "force"
-      real &forceX1 = val<1>(force);
-      real &forceX2 = val<2>(force);
-      real &forceX3 = val<3>(force);
-
-      real &tauXX = stress[0];
-      real &tauYY = stress[1];
-      real &tauZZ = stress[2];
-      real &tauXY = stress[3];
-      real &tauXZ = stress[4];
-      real &tauYZ = stress[5];
-
-      //https: // journals.aps.org/pre/pdf/10.1103/PhysRevE.88.013303
-
-      forceX1 = tauXX * nx + tauXY * ny + tauXZ * nz;
-      forceX2 = tauXY * nx + tauYY * ny + tauYZ * nz;
-      forceX3 = tauXZ * nx + tauYZ * ny + tauZZ * nz;
-   }
-
-   return force;
-}
-//////////////////////////////////////////////////////////////////////////
-void CalculateTorqueSimulationObserver::addInteractor( SPtr<D3Q27Interactor> interactor )
-{
-   interactors.push_back(interactor);
-}
-
-
-
diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.h b/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.h
deleted file mode 100644
index e1948d95f69daa795fe8ea5e1733b5b8be1f2754..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  D3Q27ForcesSimulationObserver.h
- *
- *  Created on: 29.09.2012
- *  Author: K. Kucher
- */
-
-#ifndef CalculateTorqueSimulationObserver_H
-#define CalculateTorqueSimulationObserver_H
-
-#include <PointerDefinitions.h>
-#include <string>
-#include <vector>
-
-#include "SimulationObserver.h"
-#include "UbTuple.h"
-#include "D3Q27System.h"
-
-class ForceCalculator;
-namespace vf::parallel {class Communicator;}
-class Grid3D;
-class UbScheduler;
-class D3Q27Interactor;
-class DistributionArray3D;
-class BoundaryConditions;
-class ILBMKernel;
-
-class CalculateTorqueSimulationObserver: public SimulationObserver 
-{
-public:
-   //! Constructor
-   CalculateTorqueSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path, std::shared_ptr<vf::parallel::Communicator> comm);
-	virtual ~CalculateTorqueSimulationObserver();             
-	void update(real step); 
-   void addInteractor(SPtr<D3Q27Interactor> interactor);
-protected:
-	void collectData(real step);
-   void calculateForces();
-    UbTupleDouble3 getForces(int x1, int x2, int x3, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc);
-    UbTupleDouble3 getForcesFromMoments(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz);
-    UbTupleDouble3 getForcesFromStressTensor(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz);
-
-private:
-   std::string path;
-   std::shared_ptr<vf::parallel::Communicator> comm;
-   std::vector<SPtr<D3Q27Interactor> > interactors;
-   real torqueX1global;
-   real torqueX2global;
-   real torqueX3global;
-
-   real Fx, Fy, Fz;
-};
-
-
-#endif /* D3Q27ForcesSimulationObserver_H */
diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp b/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp
deleted file mode 100644
index 4eb5c20109baa9d2368201bf96b7807de0f5cb41..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file WriteMultiphaseQuantitiesCoProcessor.h
-//! \ingroup CoProcessors
-//! \author Konstantin Kutscher
-//=======================================================================================
-#include "WriteThixotropyQuantitiesSimulationObserver.h"
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "UbScheduler.h"
-#include "DataSet3D.h"
-#include "D3Q27System.h"
-#include "BCArray3D.h"
-#include <vector>
-#include <string>
-#include <algorithm> 
-#include <numeric>
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-#include "LBM/ThixotropyExpLBMKernel.h"
-#include "LBM/Rheology.h"
-
-using namespace std;
-
-WriteThixotropyQuantitiesSimulationObserver::WriteThixotropyQuantitiesSimulationObserver() = default;
-//////////////////////////////////////////////////////////////////////////
-WriteThixotropyQuantitiesSimulationObserver::WriteThixotropyQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string& path, WbWriter* const writer, SPtr<LBMUnitConverter> conv, std::shared_ptr<vf::parallel::Communicator> comm) : SimulationObserver(grid, s), path(path), writer(writer),	conv(conv),	comm(comm)
-{
-	gridRank = comm->getProcessID();
-	minInitLevel = this->grid->getCoarsestInitializedLevel();
-	maxInitLevel = this->grid->getFinestInitializedLevel();
-
-	blockVector.resize(maxInitLevel + 1);
-
-	for (int level = minInitLevel; level <= maxInitLevel; level++)
-	{
-		grid->getBlocks(level, gridRank, true, blockVector[level]);
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-void WriteThixotropyQuantitiesSimulationObserver::init()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void WriteThixotropyQuantitiesSimulationObserver::update(real step)
-{
-	if (scheduler->isDue(step))
-		collectData(step);
-
-	UBLOG(logDEBUG3, "WriteThixotropyQuantitiesSimulationObserver::update:" << step);
-}
-//////////////////////////////////////////////////////////////////////////
-void WriteThixotropyQuantitiesSimulationObserver::collectData(real step)
-{
-	int istep = static_cast<int>(step);
-	//ConcentrationSum = 0;
-	for (int level = minInitLevel; level <= maxInitLevel; level++)
-	{
-		for(SPtr<Block3D> block : blockVector[level])
-		{
-			if (block)
-			{
-				addDataMQ(block);
-			}
-		}
-	}
-	//cout <<"at step = "<< step << ", the sum of Concentration in the domain = "<<ConcentrationSum << endl;
-	string pfilePath, partPath, subfolder, cfilePath;
-
-	subfolder = "thyxotropy" + UbSystem::toString(istep);
-	pfilePath = path + "/thyxotropy/" + subfolder;
-	cfilePath = path + "/thyxotropy/thyxotropy_collection";
-	partPath = pfilePath + "/thyxotropy" + UbSystem::toString(gridRank) + "_" + UbSystem::toString(istep);
-
-
-	string partName = writer->writeOctsWithNodeData(partPath, nodes, cells, datanames, data);
-
-	size_t found = partName.find_last_of("/");
-	string piece = partName.substr(found + 1);
-	piece = subfolder + "/" + piece;
-
-	vector<string> cellDataNames;
-	vector<string> pieces = comm->gather(piece);
-	if (comm->getProcessID() == comm->getRoot())
-	{
-		string pname = WbWriterVtkXmlASCII::getInstance()->writeParallelFile(pfilePath, pieces, datanames, cellDataNames);
-		found = pname.find_last_of("/");
-		piece = pname.substr(found + 1);
-
-		vector<string> filenames;
-		filenames.push_back(piece);
-		if (step == SimulationObserver::scheduler->getMinBegin())
-		{
-			WbWriterVtkXmlASCII::getInstance()->writeCollection(cfilePath, filenames, istep, false);
-		}
-		else
-		{
-			WbWriterVtkXmlASCII::getInstance()->addFilesToCollection(cfilePath, filenames, istep, false);
-		}
-		UBLOG(logINFO, "WriteThixotropyQuantitiesSimulationObserver step: " << istep);
-	}
-
-	clearData();
-}
-//////////////////////////////////////////////////////////////////////////
-void WriteThixotropyQuantitiesSimulationObserver::clearData()
-{
-	nodes.clear();
-	cells.clear();
-	datanames.clear();
-	data.clear();
-}
-//////////////////////////////////////////////////////////////////////////
-void WriteThixotropyQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block)
-{
-	UbTupleDouble3 org = grid->getBlockWorldCoordinates(block);;
-	UbTupleDouble3 nodeOffset = grid->getNodeOffset(block);
-	real         dx = grid->getDeltaX(block);
-
-	//double level = (double)block->getLevel();
-	//double blockID = (double)block->getGlobalID();
-
-	//Diese Daten werden geschrieben:
-	datanames.resize(0);
-	datanames.push_back("viscosity");
-	//datanames.push_back("lambda");
-	//datanames.push_back("ShearRate");
-	datanames.push_back("omega");
-	//datanames.push_back("Fluxx");
-	//datanames.push_back("Fluxy");
-	//datanames.push_back("Fluxz");
-	//datanames.push_back("delC");
-	//datanames.push_back("diff");
-	//datanames.push_back("AccumulatedConcentration");
-	//datanames.push_back("m100");
-	//datanames.push_back("Level");
-	//datanames.push_back("BlockID");
-
-
-
-	data.resize(datanames.size());
-
-   SPtr<ILBMKernel> kernel = block->getKernel();
-   SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray();          
-   SPtr<DistributionArray3D> distributionsF = kernel->getDataSet()->getFdistributions(); 
-	//SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions();
-	//LBMReal collFactorF = staticPointerCast<ThixotropyExpLBMKernel>(kernel)->getCollisionFactorF();
-	real collFactor = kernel->getCollisionFactor();
-	real f[D3Q27System::ENDF + 1];
-	//LBMReal h[D3Q27System::ENDF + 1];
-	//LBMReal viscosity=0; // lambda, gammaDot;
-	
-	//knotennummerierung faengt immer bei 0 an!
-	int SWB, SEB, NEB, NWB, SWT, SET, NET, NWT;
-
-	int minX1 = 0;
-	int minX2 = 0;
-	int minX3 = 0;
-
-	int maxX1 = (int)(distributionsF->getNX1());
-	int maxX2 = (int)(distributionsF->getNX2());
-	int maxX3 = (int)(distributionsF->getNX3());
-
-	//int minX1 = 1;
-	//int minX2 = 1;
-	//int minX3 = 1;
-
-	//int maxX1 = (int)(distributions->getNX1());
-	//int maxX2 = (int)(distributions->getNX2());
-	//int maxX3 = (int)(distributions->getNX3());
-
-	//nummern vergeben und node vector erstellen + daten sammeln
-	CbArray3D<int> nodeNumbers((int)maxX1, (int)maxX2, (int)maxX3, -1);
-	maxX1 -= 2;
-	maxX2 -= 2;
-	maxX3 -= 2;
-	//D3Q27BoundaryConditionPtr bcPtr;
-	int nr = (int)nodes.size();
-
-	for (int ix3 = minX3; ix3 <= maxX3; ix3++)
-	{
-		for (int ix2 = minX2; ix2 <= maxX2; ix2++)
-		{
-			for (int ix1 = minX1; ix1 <= maxX1; ix1++)
-			{
-				if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3))
-				{
-					int index = 0;
-					nodeNumbers(ix1, ix2, ix3) = nr++;
-					nodes.push_back(makeUbTuple(float(val<1>(org) - val<1>(nodeOffset) + ix1*dx),
-						float(val<2>(org) - val<2>(nodeOffset) + ix2*dx),
-						float(val<3>(org) - val<3>(nodeOffset) + ix3*dx)));
-
-					//distributionsH->getDistribution(h, ix1, ix2, ix3);
-
-					//lambda = D3Q27System::getDensity(h);
-
-					//if (UbMath::isNaN(lambda) || UbMath::isInfinity(lambda) )
-					//	UB_THROW(UbException(UB_EXARGS, "lambda is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + block->toString() +
-					//		", node=" + UbSystem::toString(ix1) + "," + UbSystem::toString(ix2) + "," + UbSystem::toString(ix3)));
-
-					//distributionsF->getDistribution(f, ix1, ix2, ix3);
-					//LBMReal rho = D3Q27System::getDensity(f);
-					
-					//LBMReal gammaDot = D3Q27System::getShearRate(f, collFactor);
-
-					//LBMReal collFactorF = collFactor - 1e-6 / (gammaDot + one * 1e-9);
-					//collFactorF = (collFactorF < 0.5) ? 0.5 : collFactorF;
-
-					//LBMReal collFactorF = Rheology::getBinghamCollFactor(collFactor, gammaDot, rho);
-
-					//data[index++].push_back(lambda);
-					//data[index++].push_back(gammaDot);
-					//data[index++].push_back(collFactorF);
-
-					distributionsF->getPreCollisionDistribution(f, ix1, ix2, ix3);
-					real rho = D3Q27System::getDensity(f);
-					real shearRate = D3Q27System::getShearRate(f, collFactor);
-					//LBMReal omega = Rheology::getHerschelBulkleyCollFactor(collFactor, shearRate, rho);
-					//LBMReal omega = Rheology::getPowellEyringCollFactor(collFactor, shearRate, rho);
-					real omega = Rheology::getBinghamCollFactor(collFactor, shearRate, rho);
-					real viscosity = (omega == 0) ? 0 : vf::basics::constant::c1o3 * (vf::basics::constant::c1o1/omega- vf::basics::constant::c1o2);
-
-					
-					data[index++].push_back(viscosity);
-					data[index++].push_back(omega);
-				}
-			}
-		}
-	}
-	maxX1 -= 1;
-	maxX2 -= 1;
-	maxX3 -= 1;
-	//cell vector erstellen
-	for (int ix3 = minX3; ix3 <= maxX3; ix3++)
-	{
-		for (int ix2 = minX2; ix2 <= maxX2; ix2++)
-		{
-			for (int ix1 = minX1; ix1 <= maxX1; ix1++)
-			{
-				if ((SWB = nodeNumbers(ix1, ix2, ix3)) >= 0
-					&& (SEB = nodeNumbers(ix1 + 1, ix2, ix3)) >= 0
-					&& (NEB = nodeNumbers(ix1 + 1, ix2 + 1, ix3)) >= 0
-					&& (NWB = nodeNumbers(ix1, ix2 + 1, ix3)) >= 0
-					&& (SWT = nodeNumbers(ix1, ix2, ix3 + 1)) >= 0
-					&& (SET = nodeNumbers(ix1 + 1, ix2, ix3 + 1)) >= 0
-					&& (NET = nodeNumbers(ix1 + 1, ix2 + 1, ix3 + 1)) >= 0
-					&& (NWT = nodeNumbers(ix1, ix2 + 1, ix3 + 1)) >= 0)
-				{
-					cells.push_back(makeUbTuple((unsigned int)SWB, (unsigned int)SEB, (unsigned int)NEB, (unsigned int)NWB, (unsigned int)SWT, (unsigned int)SET, (unsigned int)NET, (unsigned int)NWT));
-				}
-			}
-		}
-	}
-}
diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.h b/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.h
deleted file mode 100644
index 5ef994a08fe36812361903fb02e83be510faa13e..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.h
+++ /dev/null
@@ -1,75 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file WriteMultiphaseQuantitiesSimulationObserver.h
-//! \ingroup SimulationObservers
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef WriteThixotropyQuantitiesSimulationObserver_H
-#define WriteThixotropyQuantitiesSimulationObserver_H
-
-#include "SimulationObserver.h"
-#include "Grid3D.h"
-#include "Block3D.h"
-#include "LBMUnitConverter.h"
-#include <parallel/Communicator.h>
-#include "WbWriter.h"
-
-class WriteThixotropyQuantitiesSimulationObserver : public  SimulationObserver
-{
-public:
-	WriteThixotropyQuantitiesSimulationObserver();
-	WriteThixotropyQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string& path, WbWriter* const writer, SPtr<LBMUnitConverter> conv, std::shared_ptr<vf::parallel::Communicator> comm);
-	~WriteThixotropyQuantitiesSimulationObserver() = default;
-
-   void update(real step) override;
-
-protected:
-   void collectData(real step);
-   void addDataMQ(SPtr<Block3D> block);
-   void clearData();
-
-private:
-   void init();
-   std::vector<UbTupleFloat3> nodes;
-   std::vector<UbTupleUInt8> cells;
-   std::vector<std::string> datanames;
-   std::vector<std::vector<real> > data; 
-   std::string path;
-   WbWriter* writer;
-   SPtr<LBMUnitConverter> conv;
-//   bool bcInformation;
-   std::vector<std::vector<SPtr<Block3D> > > blockVector;
-   int minInitLevel;
-   int maxInitLevel;
-   int gridRank;
-   std::shared_ptr<vf::parallel::Communicator> comm;
-//	double ConcentrationSum;
-};
-#endif
diff --git a/src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.cpp b/src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.cpp
deleted file mode 100644
index 69c65b6ecb26953e45671023af3c3a3407c40640..0000000000000000000000000000000000000000
--- a/src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file BoundaryConditionsBlockVisitor.cpp
-//! \ingroup Visitors
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include "BoundaryConditionsBlockVisitor.h"
-#include "BC.h"
-#include "BCArray3D.h"
-#include "BCSet.h"
-#include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "DataSet3D.h"
-#include "Grid3D.h"
-#include "D3Q27System.h"
-#include "BC.h"
-#include "Block3D.h"
-#include "BCArray3D.h"
-#include "ILBMKernel.h"
-
-#include "NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h"
-#include "NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h"
-
-
-BoundaryConditionsBlockVisitor::BoundaryConditionsBlockVisitor() : Block3DVisitor(0, D3Q27System::MAXLEVEL)
-{
-}
-//////////////////////////////////////////////////////////////////////////
-BoundaryConditionsBlockVisitor::~BoundaryConditionsBlockVisitor() = default;
-//////////////////////////////////////////////////////////////////////////
-void BoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block)
-{
-    if (block->getRank() == grid->getRank()) {
-        SPtr<ILBMKernel> kernel = block->getKernel();
-
-        if (!kernel) {
-            throw UbException(UB_EXARGS, "LBMKernel in " + block->toString() + "is not exist!");
-        }
-
-        SPtr<BCSet> bcSet = kernel->getBCSet();
-
-        if (!bcSet) {
-            throw UbException(UB_EXARGS, "Boundary Conditions Processor is not exist!");
-        }
-
-        SPtr<BCArray3D> bcArray = bcSet->getBCArray();
-
-        bool compressible = kernel->getCompressible();
-        real collFactor = kernel->getCollisionFactor();
-
-        int minX1 = 0;
-        int minX2 = 0;
-        int minX3 = 0;
-        int maxX1 = (int)bcArray->getNX1();
-        int maxX2 = (int)bcArray->getNX2();
-        int maxX3 = (int)bcArray->getNX3();
-        SPtr<BoundaryConditions> bcPtr;
-
-        bcSet->clearBC();
-
-        SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions();
-
-        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)) {
-                        if ((bcPtr = bcArray->getBC(x1, x2, x3)) != NULL) {
-                            char alg              = bcPtr->getBCStrategyType();
-                            SPtr<BCStrategy> bca = bcMap[alg];
-
-                            if (bca) {
-                                bca = bca->clone();
-                                bca->setBlock(block);
-                                bca->setNodeIndex(x1, x2, x3);
-                                bca->setBcPointer(bcPtr);
-                                bca->addDistributions(distributions);
-
-                                if (alg == BCStrategy::ThixotropyVelocityBCStrategy)
-                                    std::static_pointer_cast<ThixotropyVelocityBCStrategy>(bca)->addDistributionsH(
-                                        kernel->getDataSet()->getHdistributions());
-                                if (alg == BCStrategy::ThixotropyDensityBCStrategy)
-                                    std::static_pointer_cast<ThixotropyDensityBCStrategy>(bca)->addDistributionsH(
-                                        kernel->getDataSet()->getHdistributions());
-                                if (alg == BCStrategy::ThixotropyNoSlipBCStrategy)
-                                    std::static_pointer_cast<ThixotropyNoSlipBCStrategy>(bca)->addDistributionsH(
-                                        kernel->getDataSet()->getHdistributions());
-                                if (alg == BCStrategy::ThixotropyNonReflectingOutflowBCStrategy)
-                                    std::static_pointer_cast<ThixotropyNonReflectingOutflowBCStrategy>(bca)
-                                        ->addDistributionsH(kernel->getDataSet()->getHdistributions());
-                                if (alg == BCStrategy::ThixotropyVelocityWithDensityBCStrategy)
-                                    std::static_pointer_cast<ThixotropyVelocityWithDensityBCStrategy>(bca)
-                                        ->addDistributionsH(kernel->getDataSet()->getHdistributions());
-
-                                bca->setCollFactor(collFactor);
-                                bca->setCompressible(compressible);
-                                bca->setBcArray(bcArray);
-                                bcSet->addBC(bca);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-void BoundaryConditionsBlockVisitor::addBC(SPtr<BC> bc)
-{
-    bcMap.insert(std::make_pair(bc->getBCStrategyType(), bc->getAlgorithm()));
-}
diff --git a/src/cpu/VirtualFluids.h b/src/cpu/VirtualFluids.h
index 97929a60a9ecf6fa6fffb1520f3991e8a6443555..aa5d45f444211cb2c39c8101747fd858c7e55abc 100644
--- a/src/cpu/VirtualFluids.h
+++ b/src/cpu/VirtualFluids.h
@@ -43,6 +43,9 @@
 #include <parallel/Communicator.h>
 #include <parallel/MPICommunicator.h>
 #include <parallel/NullCommunicator.h>
+#include <parallel/transmitter/TbTransmitter.h>
+#include <parallel/transmitter/TbTransmitterLocal.h>
+#include <parallel/transmitter/TbTransmitterMpiPool.h>
 
 #include <basics/PointerDefinitions.h>
 
@@ -57,9 +60,6 @@
 #include <basics/memory/MbSmartPtr.h>
 #include <basics/memory/MbSmartPtrBase.h>
 #include <basics/objects/ObObject.h>
-#include <basics/transmitter/TbTransmitter.h>
-#include <basics/transmitter/TbTransmitterLocal.h>
-#include <basics/transmitter/TbTransmitterMpiPool.h>
 #include <basics/utilities/UbComparators.h>
 #include <basics/utilities/UbEqual.h>
 #include <basics/utilities/UbException.h>
@@ -74,14 +74,12 @@
 #include <basics/utilities/UbLimits.h>
 #include <basics/utilities/UbLogger.h>
 #include <basics/utilities/UbMath.h>
-#include <basics/utilities/UbNupsTimer.h>
 #include <basics/utilities/UbObservable.h>
 #include <basics/utilities/UbObserver.h>
 #include <basics/utilities/UbRandom.h>
 #include <basics/utilities/UbScheduler.h>
 #include <basics/utilities/UbStringInputASCII.h>
 #include <basics/utilities/UbSystem.h>
-#include <basics/utilities/UbTiming.h>
 #include <basics/utilities/UbTuple.h>
 #include <basics/writer/WbWriter.h>
 #include <basics/writer/WbWriterAvsASCII.h>
@@ -114,24 +112,22 @@
 #include <BoundaryConditions/BCFunction.h>
 #include <BoundaryConditions/BCSet.h>
 #include <BoundaryConditions/BoundaryConditions.h>
-#include <BoundaryConditions/DensityBC.h>
-#include <BoundaryConditions/EqDensityBCStrategy.h>
-#include <BoundaryConditions/HighViscosityNoSlipBCStrategy.h>
+#include <BoundaryConditions/PressureBC.h>
 #include <BoundaryConditions/NoSlipBC.h>
-#include <BoundaryConditions/NoSlipBCStrategy.h>
-#include <BoundaryConditions/NonEqDensityBCStrategy.h>
-#include <BoundaryConditions/NonReflectingOutflowBCStrategy.h>
-#include <BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h>
-#include <BoundaryConditions/NonReflectingInflowBCStrategy.h>
+#include <BoundaryConditions/NoSlipInterpolated.h>
+#include <BoundaryConditions/PressureNonEquilibrium.h>
+#include <BoundaryConditions/OutflowNonReflecting.h>
+#include <BoundaryConditions/OutflowNonReflectingWithPressure.h>
+#include <BoundaryConditions/VelocityNonReflecting.h>
 #include <BoundaryConditions/SlipBC.h>
-#include <BoundaryConditions/SlipBCStrategy.h>
+#include <BoundaryConditions/SlipInterpolated.h>
 #include <BoundaryConditions/ThinWallBCSet.h>
-#include <BoundaryConditions/ThinWallNoSlipBCStrategy.h>
+#include <BoundaryConditions/ThinWallNoSlip.h>
 #include <BoundaryConditions/VelocityBC.h>
-#include <BoundaryConditions/VelocityBCStrategy.h>
-#include <BoundaryConditions/VelocityWithDensityBCStrategy.h>
-#include <BoundaryConditions/SimpleVelocityBCStrategy.h>
-#include <BoundaryConditions/SimpleSlipBCStrategy.h>
+#include <BoundaryConditions/VelocityInterpolated.h>
+#include <BoundaryConditions/VelocityWithPressureInterpolated.h>
+#include <BoundaryConditions/VelocityBounceBack.h>
+#include <BoundaryConditions/SlipBounceBack.h>
 
 
 
@@ -154,13 +150,12 @@
 #include <Connectors/TwoDistributionsFullVectorConnector.h>
 
 
-#include <Data/D3Q27EsoTwist3DSplittedVector.h>
-#include <Data/D3Q27EsoTwist3DSplittedVectorEx.h>
+#include <Data/EsoSplit.h>
+
 #include <Data/DataSet3D.h>
 #include <Data/DistributionArray3D.h>
 #include <Data/EsoTwist3D.h>
-#include <Data/EsoTwistD3Q27System.h>
-#include <Data/VoidData3D.h>
+
 
 #include <Simulation/Block3D.h>
 #include <Simulation/Simulation.h>
@@ -208,26 +203,20 @@
 #include <TimeDependentBCSimulationObserver.h>
 
 #include <IntegrateValuesHelper.h>
-#include <LBM/Interpolation/CompressibleOffsetInterpolator.h>
 #include <LBM/Interpolation/CompressibleOffsetMomentsInterpolator.h>
-#include <LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h>
 #include <LBM/Interpolation/IncompressibleOffsetInterpolator.h>
 #include <LBM/Interpolation/Interpolator.h>
-#include <IncompressibleCumulantWithSpongeLayerLBMKernel.h>
-#include <LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h>
-#include <LBM/CompressibleCumulantLBMKernel.h>
 #include <LBM/D3Q27System.h>
-#include <LBM/ICell.h>
-#include <LBM/IncompressibleCumulantLBMKernel.h>
-#include <LBM/InitDensityLBMKernel.h>
+#include <LBM/Interpolation/ICell.h>
 #include <LBM/LBMKernel.h>
-#include <LBM/LBMKernelETD3Q27BGK.h>
 #include <LBM/LBMSystem.h>
 #include <LBM/LBMUnitConverter.h>
-#include <LBM/BGKLBMKernel.h>
 
-#include <LBM/CumulantLBMKernel.h>
-#include <LBM/CumulantK17LBMKernel.h>
+
+#include <LBM/B92IncompressibleNavierStokes.h>
+#include <LBM/K15CompressibleNavierStokes.h>
+#include <LBM/K16IncompressibleNavierStokes.h>
+#include <LBM/K17CompressibleNavierStokes.h>
 
 
 #include <geometry3d/CoordinateTransformation3D.h>
@@ -278,7 +267,6 @@
 #include <Utilities/VoxelMatrixUtil.hpp>
 
 #include <CheckRatioBlockVisitor.h>
-#include <InitDistributionsFromFileBlockVisitor.h>
 #include <InitDistributionsWithInterpolationGridVisitor.h>
 #include <SpongeLayerBlockVisitor.h>
 #include <Visitors/Block3DVisitor.h>
@@ -310,7 +298,6 @@
 #include <Visitors/BoundaryConditionsBlockVisitor.h>
 #include <Visitors/BoundaryConditionsBlockVisitor.h>
 #include <Visitors/ChangeBoundaryDensityBlockVisitor.h>
-#include <InitDistributionsFromFileBlockVisitor.h>
 #include <InitDistributionsWithInterpolationGridVisitor.h>
 #include <InitThixotropyBlockVisitor.h>
 #include <CheckRatioBlockVisitor.h>
diff --git a/src/cpu/core/BoundaryConditions/BC.cpp b/src/cpu/core/BoundaryConditions/BC.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f6bc5c635736d6faa7652303187899cee76349ea
--- /dev/null
+++ b/src/cpu/core/BoundaryConditions/BC.cpp
@@ -0,0 +1,3 @@
+#include "BC.h"
+
+char BC::keyCounter = 0;
\ No newline at end of file
diff --git a/src/cpu/core/BoundaryConditions/BC.h b/src/cpu/core/BoundaryConditions/BC.h
index 7dc4e4d4146231db144717bdc16b70b01bf59a8b..dd94bb8ca2cfada4b2742ab9907c8f732e8d5965 100644
--- a/src/cpu/core/BoundaryConditions/BC.h
+++ b/src/cpu/core/BoundaryConditions/BC.h
@@ -37,6 +37,7 @@
 
 #include "BCStrategy.h"
 #include "BoundaryConditions.h"
+#include "BCStrategyRegistry.h"
 
 class D3Q27Interactor;
 
@@ -66,24 +67,27 @@ public:
                                      const real &worldX1, const real &worldX2, const real &worldX3,
                                      const real &q, const int &fdirection, const real &time = 0) = 0;
 
-    void setBCStrategy(SPtr<BCStrategy> alg)
+    void setBCStrategy(SPtr<BCStrategy> bcStrategy)
     {
-        algorithmType = alg->getType();
-        algorithm     = alg;
+        bcStrategyKey = keyCounter++; 
+        BCStrategyRegistry::getInstance()->setBCStrategy(bcStrategyKey, bcStrategy);
     }
-    SPtr<BCStrategy> getAlgorithm() { return algorithm; }
-    char getBCStrategyType() { return algorithmType; }
+    //SPtr<BCStrategy> getBCStrategy() { return bcStrategy; }
+    //char getBCStrategyKey() { return bcStrategyKey; }
 
 protected:
     short secondaryBcOption{ 0 };
 
     char type{ 0 };
 
-    SPtr<BCStrategy> algorithm;
-    char algorithmType{ -1 };
+    char bcStrategyKey{ -1 };
 
     static const char TIMEDEPENDENT = 1 << 0; //'1';
     static const char TIMEPERIODIC  = 1 << 1; //'2';
+
+    static char keyCounter;
 };
 
+
+
 #endif // D3Q27BOUNDARYCONDITIONADAPTER_H
diff --git a/src/cpu/core/BoundaryConditions/BCSet.cpp b/src/cpu/core/BoundaryConditions/BCSet.cpp
index ca8bcadd14040219ced9e519e04a947bd3b8efdc..c9939eea1adae1a806b0e82339cbaf7b7b3552f0 100644
--- a/src/cpu/core/BoundaryConditions/BCSet.cpp
+++ b/src/cpu/core/BoundaryConditions/BCSet.cpp
@@ -34,7 +34,7 @@
 #include "BCSet.h"
 #include "BCStrategy.h"
 #include "BCArray3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "DataSet3D.h"
 #include "ILBMKernel.h"
 
diff --git a/src/cpu/core/BoundaryConditions/BCStrategy.cpp b/src/cpu/core/BoundaryConditions/BCStrategy.cpp
index 5458fa09c1e98a35d65a4c37a2d760a9188e188b..7308548c3e94ce1fc2354f2f211307f4b96688da 100644
--- a/src/cpu/core/BoundaryConditions/BCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/BCStrategy.cpp
@@ -73,22 +73,6 @@ void BCStrategy::setCompressible(bool c)
 //////////////////////////////////////////////////////////////////////////
 void BCStrategy::setCollFactor(real cf) { collFactor = cf; }
 //////////////////////////////////////////////////////////////////////////
-void BCStrategy::setCollFactorL(real cf) { collFactorL = cf; }
-//////////////////////////////////////////////////////////////////////////
-void BCStrategy::setCollFactorG(real cf) { collFactorG = cf; }
-//////////////////////////////////////////////////////////////////////////
-void BCStrategy::setCollFactorPh(real cf) { collFactorPh = cf; }
-//////////////////////////////////////////////////////////////////////////
-void BCStrategy::setDensityRatio(real dr) { densityRatio = dr; }
-//////////////////////////////////////////////////////////////////////////
-void BCStrategy::setPhiBound(real phiL, real phiH)
-{
-    this->phiL = phiL;
-    this->phiH = phiH;
-}
-//////////////////////////////////////////////////////////////////////////
-char BCStrategy::getType() { return type; }
-//////////////////////////////////////////////////////////////////////////
 bool BCStrategy::isPreCollision() { return preCollision; }
 //////////////////////////////////////////////////////////////////////////
 SPtr<BCArray3D> BCStrategy::getBcArray() { return bcArray; }
diff --git a/src/cpu/core/BoundaryConditions/BCStrategy.h b/src/cpu/core/BoundaryConditions/BCStrategy.h
index 3cc53172a8291961cd5871458efe6869d79f8d00..6d91cfebbcd95be3d6a7d49ef000642d704c52c7 100644
--- a/src/cpu/core/BoundaryConditions/BCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/BCStrategy.h
@@ -31,8 +31,8 @@
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#ifndef BOUNDARYCONDITIONS_H
-#define BOUNDARYCONDITIONS_H
+#ifndef BCStrategy_H
+#define BCStrategy_H
 
 #include <PointerDefinitions.h>
 
@@ -43,81 +43,37 @@ class BCArray3D;
 class BoundaryConditions;
 class Block3D;
 
-//! \brief Abstract class of baundary conditions algorithm
+//! \brief Abstract class of baundary conditions strategy
 //! \details  BCStrategy provides interface for implementation of diferent boundary conditions
 class BCStrategy
 {
-public:
-    static const char VelocityBCStrategy                           = 0;
-    static const char EqDensityBCStrategy                          = 1;
-    static const char NonEqDensityBCStrategy                       = 2;
-    static const char NoSlipBCStrategy                             = 3;
-    static const char SlipBCStrategy                               = 4;
-    static const char HighViscosityNoSlipBCStrategy                = 5;
-    static const char ThinWallNoSlipBCStrategy                     = 6;
-    static const char VelocityWithDensityBCStrategy                = 7;
-    static const char NonReflectingOutflowBCStrategy               = 8;
-    static const char ThixotropyVelocityBCStrategy                 = 9;
-    static const char ThixotropyDensityBCStrategy                  = 10;
-    static const char ThixotropyNoSlipBCStrategy                   = 11;
-    static const char ThixotropyNonReflectingOutflowBCStrategy     = 12;
-    static const char ThixotropyVelocityWithDensityBCStrategy      = 13;
-    static const char RheologyBinghamModelNoSlipBCStrategy         = 14;
-    static const char RheologyHerschelBulkleyModelNoSlipBCStrategy = 15;
-    static const char SimpleVelocityBCStrategy                     = 16;
-    static const char SimpleSlipBCStrategy                         = 17;
-    static const char RheologyPowellEyringModelNoSlipBCStrategy    = 18;
-    static const char RheologyBinghamModelVelocityBCStrategy       = 19;
-    static const char MultiphaseNoSlipBCStrategy                   = 20;
-    static const char MultiphaseVelocityBCStrategy                 = 21;
-    static const char NonReflectingInflowBCStrategy                = 22;
-    static const char NonReflectingOutflowWithRelaxationBCStrategy = 23;
-    static const char MultiphasePressureBCStrategy                 = 24;
-
 public:
     BCStrategy() = default;
     virtual ~BCStrategy() = default;
 
     virtual void addDistributions(SPtr<DistributionArray3D> distributions)   = 0;
-    virtual void addDistributionsH(SPtr<DistributionArray3D> distributionsH) {}
-    virtual void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) {}
     void setBlock(SPtr<Block3D> block);
     void setNodeIndex(int x1, int x2, int x3);
     void setBcPointer(SPtr<BoundaryConditions> bcPtr);
     void setCompressible(bool c);
     void setCollFactor(real cf);
 
-    void setCollFactorL(real cf);
-    void setCollFactorG(real cf);
-    void setCollFactorPh(real cf);
-    void setDensityRatio(real dr);
-    void setPhiBound(real phiL, real phiH);
-
-    char getType();
     bool isPreCollision();
     virtual SPtr<BCStrategy> clone() = 0;
     SPtr<BCArray3D> getBcArray();
     void setBcArray(SPtr<BCArray3D> bcarray);
     virtual void applyBC() = 0;
-    bool getThixotropy(){ return thixotropy; };
 
 protected:
     bool compressible { false };
-    char type;
     bool preCollision;
-    bool thixotropy { false };
 
     SPtr<BoundaryConditions> bcPtr;
     SPtr<DistributionArray3D> distributions;
-    SPtr<DistributionArray3D> distributionsH;
-    SPtr<DistributionArray3D> distributionsH2;
     SPtr<BCArray3D> bcArray;
     SPtr<Block3D> block;
 
     real collFactor;
-    real collFactorL, collFactorG, collFactorPh;
-    real densityRatio;
-    real phiL, phiH;
     int x1, x2, x3;
 
     real compressibleFactor;
diff --git a/src/cpu/core/BoundaryConditions/BCStrategyRegistry.cpp b/src/cpu/core/BoundaryConditions/BCStrategyRegistry.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4742753d0b19a117a8d50dce0243c07df0d92bc0
--- /dev/null
+++ b/src/cpu/core/BoundaryConditions/BCStrategyRegistry.cpp
@@ -0,0 +1,30 @@
+#include "BCStrategyRegistry.h"
+#include "BC.h"
+#include "BCStrategy.h"
+
+std::mutex BCStrategyRegistry::instantiation_mutex = std::mutex();
+std::shared_ptr<BCStrategyRegistry> BCStrategyRegistry::instance = std::shared_ptr<BCStrategyRegistry>();
+
+std::shared_ptr<BCStrategyRegistry> BCStrategyRegistry::getInstance()
+{
+    std::lock_guard<std::mutex> myLock(instantiation_mutex);
+    if (!instance) {
+        instance = std::shared_ptr<BCStrategyRegistry>(new BCStrategyRegistry);
+    }
+    return instance;
+}
+
+void BCStrategyRegistry::setBCStrategy(char strategyKey, std::shared_ptr<BCStrategy> bcStrategy)
+{
+    bcMap.insert(std::make_pair(strategyKey, bcStrategy));
+}
+
+std::shared_ptr<BCStrategy> BCStrategyRegistry::getBCStrategy(char strategyKey)
+{
+    return bcMap[strategyKey];
+}
+
+void BCStrategyRegistry::clear()
+{
+    bcMap.clear();
+}
\ No newline at end of file
diff --git a/src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.h b/src/cpu/core/BoundaryConditions/BCStrategyRegistry.h
similarity index 73%
rename from src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.h
rename to src/cpu/core/BoundaryConditions/BCStrategyRegistry.h
index 8954bf73a6a459a795e916f24192f5db698b1426..b91a6c433108c51a2049961d0f59fc8fd72c3fc2 100644
--- a/src/cpu/NonNewtonianFluids/Visitors/RheologyBoundaryConditionsBlockVisitor.h
+++ b/src/cpu/core/BoundaryConditions/BCStrategyRegistry.h
@@ -26,36 +26,41 @@
 //  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 BoundaryConditionsBlockVisitor.h
-//! \ingroup Visitors
+//! \file BCStrategyRegistry.h
+//! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#ifndef BoundaryConditionBlockVisitor_h__
-#define BoundaryConditionBlockVisitor_h__
+#ifndef BCStrategyRegistry_H
+#define BCStrategyRegistry_H
 
-#include <PointerDefinitions.h>
+#include <memory>
 #include <map>
+#include <mutex>
 
-#include "Block3DVisitor.h"
-
-class Grid3D;
-class Block3D;
-class BCStrategy;
 class BC;
+class BCStrategy;
 
-//! \brief set boundary conditions
-class BoundaryConditionsBlockVisitor : public Block3DVisitor
+class BCStrategyRegistry
 {
 public:
-    BoundaryConditionsBlockVisitor();
-    ~BoundaryConditionsBlockVisitor() override;
+    BCStrategyRegistry(const BCStrategyRegistry &) = delete;
+    BCStrategyRegistry &operator=(const BCStrategyRegistry &rhs) = delete;
+    static std::shared_ptr<BCStrategyRegistry> getInstance();
 
-    void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
-    void addBC(SPtr<BC> bc);
+    virtual ~BCStrategyRegistry() = default;
+
+    void setBCStrategy(char bcStrategyKey, std::shared_ptr<BCStrategy> bcStrategy);
+    std::shared_ptr<BCStrategy> getBCStrategy(char strategyKey);
+
+    void clear();
 
-protected:
 private:
-    std::map<char, SPtr<BCStrategy>> bcMap;
+    BCStrategyRegistry() = default;
+
+    static std::mutex instantiation_mutex;
+    static std::shared_ptr<BCStrategyRegistry> instance;
+  
+    std::map<char, std::shared_ptr<BCStrategy>> bcMap;
 };
-#endif // BoundaryConditionBlockVisitor_h__
+#endif
\ No newline at end of file
diff --git a/src/cpu/core/BoundaryConditions/BoundaryConditions.h b/src/cpu/core/BoundaryConditions/BoundaryConditions.h
index df5be0429d4f850f3c1caa2c411a586a020e51e7..917f5c6f38cb9af76ee5bbb535eb850ac9878570 100644
--- a/src/cpu/core/BoundaryConditions/BoundaryConditions.h
+++ b/src/cpu/core/BoundaryConditions/BoundaryConditions.h
@@ -311,8 +311,8 @@ public:
         return (((flag >> (optionDigits * direction)) & maxOptionVal) != 0);
     }
 
-    void setBCStrategyType(char alg) { algorithmType = alg; }
-    char getBCStrategyType() { return algorithmType; }
+    void setBCStrategyKey(char key) { bcStrategyKey = key; }
+    char getBCStrategyKey() { return bcStrategyKey; }
 
 public:
     static const int optionDigits = 2;   //--> 2 bits for secondary Option --> maxOptionVal = 7
@@ -327,15 +327,15 @@ protected:
     long long densityBoundaryFlags{ 0 };
     long long wallModelBoundaryFlags{ 0 };
 
-    float bcVelocityX1{ vf::basics::constant::c0o1 };
-    float bcVelocityX2{ vf::basics::constant::c0o1 };
-    float bcVelocityX3{ vf::basics::constant::c0o1 };
-    float bcDensity{ vf::basics::constant::c0o1 };
-    float bcPhaseField{ vf::basics::constant::c0o1 };
+    float bcVelocityX1{ 0.0 };
+    float bcVelocityX2{ 0.0 };
+    float bcVelocityX3{ 0.0 };
+    float bcDensity{ 0.0 };
+    float bcPhaseField{ 0.0 };
 
     float nx1{ vf::basics::constant::c0o1 }, nx2{ vf::basics::constant::c0o1 }, nx3{ vf::basics::constant::c0o1 };
 
-    char algorithmType { -1 };
+    char bcStrategyKey { -1 };
 
 private:
     friend class MPIIORestartSimulationObserver;
diff --git a/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.cpp
deleted file mode 100644
index 89dd9a09468102f0845b18f2a14919741c9b0e1d..0000000000000000000000000000000000000000
--- a/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file EqDensityBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#include "EqDensityBCStrategy.h"
-#include "BoundaryConditions.h"
-#include "DistributionArray3D.h"
-
-EqDensityBCStrategy::EqDensityBCStrategy()
-{
-    BCStrategy::type         = BCStrategy::EqDensityBCStrategy;
-    BCStrategy::preCollision = false;
-}
-//////////////////////////////////////////////////////////////////////////
-EqDensityBCStrategy::~EqDensityBCStrategy() = default;
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> EqDensityBCStrategy::clone()
-{
-    SPtr<BCStrategy> bc(new EqDensityBCStrategy());
-    return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void EqDensityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-    this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void EqDensityBCStrategy::applyBC()
-{
-    using namespace vf::lbm::dir;
-
-    real f[D3Q27System::ENDF + 1];
-
-    distributions->getPostCollisionDistribution(f, x1, x2, x3);
-    int nx1 = x1;
-    int nx2 = x2;
-    int nx3 = x3;
-
-    // flag points in direction of fluid
-    if (bcPtr->hasDensityBoundaryFlag(dP00)) {
-        nx1 -= 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(dM00)) {
-        nx1 += 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) {
-        nx2 -= 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) {
-        nx2 += 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(d00P)) {
-        nx3 -= 1;
-    } else if (bcPtr->hasDensityBoundaryFlag(d00M)) {
-        nx3 += 1;
-    } else
-        UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
-
-    real rho, vx1, vx2, vx3;
-    calcMacrosFct(f, rho, vx1, vx2, vx3);
-    real rhoBC = bcPtr->getBoundaryDensity();
-    for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {
-        if (bcPtr->hasDensityBoundaryFlag(fdir)) {
-            // Ehsan: 15.2.2013:
-            real ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3);
-            distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir);
-        }
-    }
-}
diff --git a/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp
deleted file mode 100644
index 85d9fda90b69f68d8703b4835e10a0367fe91d29..0000000000000000000000000000000000000000
--- a/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file HighViscosityNoSlipBCStrategy.cpp
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#include "HighViscosityNoSlipBCStrategy.h"
-#include "BoundaryConditions.h"
-#include "DistributionArray3D.h"
-
-HighViscosityNoSlipBCStrategy::HighViscosityNoSlipBCStrategy()
-{
-    BCStrategy::type         = BCStrategy::HighViscosityNoSlipBCStrategy;
-    BCStrategy::preCollision = true;
-}
-//////////////////////////////////////////////////////////////////////////
-HighViscosityNoSlipBCStrategy::~HighViscosityNoSlipBCStrategy() = default;
-//////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> HighViscosityNoSlipBCStrategy::clone()
-{
-    SPtr<BCStrategy> bc(new HighViscosityNoSlipBCStrategy());
-    return bc;
-}
-//////////////////////////////////////////////////////////////////////////
-void HighViscosityNoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
-{
-    this->distributions = distributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void HighViscosityNoSlipBCStrategy::applyBC()
-{
-    real f[D3Q27System::ENDF + 1];
-    real feq[D3Q27System::ENDF + 1];
-    distributions->getPreCollisionDistribution(f, x1, x2, x3);
-    real rho, vx1, vx2, vx3;
-    calcMacrosFct(f, rho, vx1, vx2, vx3);
-    calcFeqFct(feq, rho, vx1, vx2, vx3);
-
-    for (int fDir = D3Q27System::FSTARTDIR; fDir <= D3Q27System::FENDDIR; fDir++) {
-        if (bcPtr->hasNoSlipBoundaryFlag(fDir)) {
-            // quadratic bounce back
-            const int invDir = D3Q27System::INVDIR[fDir];
-            real q        = bcPtr->getQ(invDir);
-            real fReturn =
-                (f[invDir] + q * f[fDir] + q * collFactor * (feq[invDir] - f[invDir] + feq[fDir] - f[fDir])) /
-                (vf::basics::constant::c1o1 + q);
-            distributions->setPreCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir],
-                                                          x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir],
-                                                          invDir);
-        }
-    }
-}
diff --git a/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.h
deleted file mode 100644
index e153a67e644530f52977f1644c30426acce44843..0000000000000000000000000000000000000000
--- a/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file HighViscosityNoSlipBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
-//=======================================================================================
-#ifndef HighViscosityNoSlipBCStrategy_h__
-#define HighViscosityNoSlipBCStrategy_h__
-
-#include "BCStrategy.h"
-#include <PointerDefinitions.h>
-
-class DistributionArray3D;
-
-class HighViscosityNoSlipBCStrategy : public BCStrategy
-{
-public:
-    HighViscosityNoSlipBCStrategy();
-    ~HighViscosityNoSlipBCStrategy() override;
-    SPtr<BCStrategy> clone() override;
-    void addDistributions(SPtr<DistributionArray3D> distributions) override;
-    void applyBC() override;
-};
-#endif // HighViscosityNoSlipBCStrategy_h__
diff --git a/src/cpu/core/BoundaryConditions/NoSlipBC.h b/src/cpu/core/BoundaryConditions/NoSlipBC.h
index fe7eecebb9960107793f7bf034de5dd436d58613..28c1f2ed132b6c144f317044e021cf909e81efd8 100644
--- a/src/cpu/core/BoundaryConditions/NoSlipBC.h
+++ b/src/cpu/core/BoundaryConditions/NoSlipBC.h
@@ -56,7 +56,7 @@ public:
     void adaptBC(const D3Q27Interactor & /*interactor*/, SPtr<BoundaryConditions> bc, const real & /*worldX1*/,
                  const real & /*worldX2*/, const real & /*worldX3*/, const real & /*time*/ = 0) override
     {
-        bc->setBCStrategyType(algorithmType);
+        bc->setBCStrategyKey(bcStrategyKey);
     }
 
 private:
diff --git a/src/cpu/core/BoundaryConditions/NoSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NoSlipInterpolated.cpp
similarity index 90%
rename from src/cpu/core/BoundaryConditions/NoSlipBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/NoSlipInterpolated.cpp
index 3fd5e214302af1cd7729fdddcdbd077ff826503e..3e6fa54da04cbec6c59aa1ecb7f2c6730e1f6f62 100644
--- a/src/cpu/core/BoundaryConditions/NoSlipBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/NoSlipInterpolated.cpp
@@ -26,33 +26,32 @@
 //  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 NoSlipBCStrategy.cpp
+//! \file NoSlipInterpolated.cpp
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#include "NoSlipBCStrategy.h"
+#include "NoSlipInterpolated.h"
 #include "BoundaryConditions.h"
 #include "DistributionArray3D.h"
 
-NoSlipBCStrategy::NoSlipBCStrategy()
+NoSlipInterpolated::NoSlipInterpolated()
 {
-    BCStrategy::type         = BCStrategy::NoSlipBCStrategy;
     BCStrategy::preCollision = false;
 }
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> NoSlipBCStrategy::clone()
+SPtr<BCStrategy> NoSlipInterpolated::clone()
 {
-    SPtr<BCStrategy> bc(new NoSlipBCStrategy());
+    SPtr<BCStrategy> bc(new NoSlipInterpolated());
     return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void NoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+void NoSlipInterpolated::addDistributions(SPtr<DistributionArray3D> distributions)
 {
     this->distributions = distributions;
 }
 //////////////////////////////////////////////////////////////////////////
-void NoSlipBCStrategy::applyBC()
+void NoSlipInterpolated::applyBC()
 {
     using namespace vf::basics::constant;
     using namespace D3Q27System;
diff --git a/src/cpu/core/BoundaryConditions/NoSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/NoSlipInterpolated.h
similarity index 93%
rename from src/cpu/core/BoundaryConditions/NoSlipBCStrategy.h
rename to src/cpu/core/BoundaryConditions/NoSlipInterpolated.h
index d45526f373816f38a85ede287ffe975150bd96af..86c2df3a92e1e9dfceebb1caf400695922bfde1d 100644
--- a/src/cpu/core/BoundaryConditions/NoSlipBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/NoSlipInterpolated.h
@@ -26,13 +26,13 @@
 //  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 NoSlipBCStrategy.h
+//! \file NoSlipInterpolated.h
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#ifndef NoSlipBCStrategy_h__
-#define NoSlipBCStrategy_h__
+#ifndef NoSlipInterpolated_h__
+#define NoSlipInterpolated_h__
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
@@ -40,10 +40,10 @@
 class DistributionArray3D;
 
 //! A class implements no-slip boundary condition
-class NoSlipBCStrategy : public BCStrategy
+class NoSlipInterpolated : public BCStrategy
 {
 public:
-    NoSlipBCStrategy();
+    NoSlipInterpolated();
     SPtr<BCStrategy> clone() override;
     void addDistributions(SPtr<DistributionArray3D> distributions) override;
     void applyBC() override;
diff --git a/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h b/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h
deleted file mode 100644
index e8179c706f204494ac383b519fa22ef78de5d5ac..0000000000000000000000000000000000000000
--- a/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file NonReflectingOutflowWithRelaxationBCStrategy.h
-//! \ingroup BoundarConditions
-//! \author Konstantin Kutscher, Hussein Alihussein
-//=======================================================================================
-#ifndef NonReflectingOutflowWithRelaxationBCStrategy_h__
-#define NonReflectingOutflowWithRelaxationBCStrategy_h__
-
-#include "BCStrategy.h"
-#include <PointerDefinitions.h>
-
-class DistributionArray3D;
-
-class NonReflectingOutflowWithRelaxationBCStrategy : public BCStrategy
-{
-public:
-    NonReflectingOutflowWithRelaxationBCStrategy();
-    ~NonReflectingOutflowWithRelaxationBCStrategy() override;
-    SPtr<BCStrategy> clone() override;
-    void addDistributions(SPtr<DistributionArray3D> distributions) override;
-    void applyBC() override;
-};
-#endif // NonReflectingDensityBCStrategy_h__
diff --git a/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp b/src/cpu/core/BoundaryConditions/OutflowNonReflecting.cpp
similarity index 96%
rename from src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/OutflowNonReflecting.cpp
index fe8407bc5e36a6dbec4a914058fa206fe6a8dfad..c2b49dad8e82c594c45e07c23e30884a72adc72d 100644
--- a/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/OutflowNonReflecting.cpp
@@ -26,36 +26,35 @@
 //  You should have received a copy of the GNU General Public License along
 //  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
 //
-//! \file NonReflectingOutflowBCStrategy.cpp
+//! \file OutflowNonReflecting.cpp
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
-#include "NonReflectingOutflowBCStrategy.h"
+#include "OutflowNonReflecting.h"
 
 #include "BoundaryConditions.h"
 #include "D3Q27System.h"
 #include "DistributionArray3D.h"
 
-NonReflectingOutflowBCStrategy::NonReflectingOutflowBCStrategy()
+OutflowNonReflecting::OutflowNonReflecting()
 {
-    BCStrategy::type         = BCStrategy::NonReflectingOutflowBCStrategy;
     BCStrategy::preCollision = true;
 }
 //////////////////////////////////////////////////////////////////////////
-NonReflectingOutflowBCStrategy::~NonReflectingOutflowBCStrategy() = default;
+OutflowNonReflecting::~OutflowNonReflecting() = default;
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> NonReflectingOutflowBCStrategy::clone()
+SPtr<BCStrategy> OutflowNonReflecting::clone()
 {
-    SPtr<BCStrategy> bc(new NonReflectingOutflowBCStrategy());
+    SPtr<BCStrategy> bc(new OutflowNonReflecting());
     return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void NonReflectingOutflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+void OutflowNonReflecting::addDistributions(SPtr<DistributionArray3D> distributions)
 {
     this->distributions = distributions;
 }
 //////////////////////////////////////////////////////////////////////////
-void NonReflectingOutflowBCStrategy::applyBC()
+void OutflowNonReflecting::applyBC()
 {
     using namespace vf::lbm::dir;
 
diff --git a/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.h b/src/cpu/core/BoundaryConditions/OutflowNonReflecting.h
similarity index 90%
rename from src/cpu/core/BoundaryConditions/EqDensityBCStrategy.h
rename to src/cpu/core/BoundaryConditions/OutflowNonReflecting.h
index 2de16acdd11665f1535611d3820f8f4909f5fc97..94b09350e3c3556e332c7b68c02660ee6c37c565 100644
--- a/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/OutflowNonReflecting.h
@@ -26,25 +26,25 @@
 //  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 EqDensityBCStrategy.h
+//! \file OutflowNonReflecting.h
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
-#ifndef EqDensityBCStrategy_h__
-#define EqDensityBCStrategy_h__
+#ifndef OutflowNonReflecting_h__
+#define OutflowNonReflecting_h__
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
 
 class DistributionArray3D;
 
-class EqDensityBCStrategy : public BCStrategy
+class OutflowNonReflecting : public BCStrategy
 {
 public:
-    EqDensityBCStrategy();
-    ~EqDensityBCStrategy() override;
+    OutflowNonReflecting();
+    ~OutflowNonReflecting() override;
     SPtr<BCStrategy> clone() override;
     void addDistributions(SPtr<DistributionArray3D> distributions) override;
     void applyBC() override;
 };
-#endif // EqDensityBCStrategy_h__
+#endif // NonReflectingDensityBCStrategy_h__
diff --git a/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp b/src/cpu/core/BoundaryConditions/OutflowNonReflectingWithPressure.cpp
similarity index 95%
rename from src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/OutflowNonReflectingWithPressure.cpp
index a80a2d4e2c089c749b3bafac2c1f4461d88ede82..5fd757d42d6e114921094c51283fbc99f06abebf 100644
--- a/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/OutflowNonReflectingWithPressure.cpp
@@ -26,36 +26,35 @@
 //  You should have received a copy of the GNU General Public License along
 //  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
 //
-//! \file NonReflectingOutflowWithRelaxationBCStrategy.cpp
+//! \file OutflowNonReflectingWithPressure.cpp
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher, Hussein Alihussein
 //=======================================================================================
-#include "NonReflectingOutflowWithRelaxationBCStrategy.h"
+#include "OutflowNonReflectingWithPressure.h"
 
 #include "BoundaryConditions.h"
 #include "D3Q27System.h"
 #include "DistributionArray3D.h"
 
-NonReflectingOutflowWithRelaxationBCStrategy::NonReflectingOutflowWithRelaxationBCStrategy()
+OutflowNonReflectingWithPressure::OutflowNonReflectingWithPressure()
 {
-    BCStrategy::type         = BCStrategy::NonReflectingOutflowWithRelaxationBCStrategy;
     BCStrategy::preCollision = true;
 }
 //////////////////////////////////////////////////////////////////////////
-NonReflectingOutflowWithRelaxationBCStrategy::~NonReflectingOutflowWithRelaxationBCStrategy() = default;
+OutflowNonReflectingWithPressure::~OutflowNonReflectingWithPressure() = default;
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> NonReflectingOutflowWithRelaxationBCStrategy::clone()
+SPtr<BCStrategy> OutflowNonReflectingWithPressure::clone()
 {
-    SPtr<BCStrategy> bc(new NonReflectingOutflowWithRelaxationBCStrategy());
+    SPtr<BCStrategy> bc(new OutflowNonReflectingWithPressure());
     return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void NonReflectingOutflowWithRelaxationBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+void OutflowNonReflectingWithPressure::addDistributions(SPtr<DistributionArray3D> distributions)
 {
     this->distributions = distributions;
 }
 //////////////////////////////////////////////////////////////////////////
-void NonReflectingOutflowWithRelaxationBCStrategy::applyBC()
+void OutflowNonReflectingWithPressure::applyBC()
 {
     using namespace vf::lbm::dir;
 
@@ -63,8 +62,8 @@ void NonReflectingOutflowWithRelaxationBCStrategy::applyBC()
  //   using namespace UbMath;
     using namespace vf::basics::constant;
 
-    LBMReal f[ENDF + 1];
-    LBMReal ftemp[ENDF + 1];
+    real f[ENDF + 1];
+    real ftemp[ENDF + 1];
 
     int nx1       = x1;
     int nx2       = x2;
@@ -96,9 +95,9 @@ void NonReflectingOutflowWithRelaxationBCStrategy::applyBC()
     distributions->getPreCollisionDistribution(f, x1, x2, x3);
     distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3);
 
-    LBMReal rho, vx1, vx2, vx3;
+    real rho, vx1, vx2, vx3;
     calcMacrosFct(f, rho, vx1, vx2, vx3);
-    LBMReal delf = rho* c1o100;
+    real delf = rho* c1o100;
     switch (direction) {
         case dP00:
             f[dP00]   = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00] - delf* WEIGTH[dP00];
diff --git a/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.h b/src/cpu/core/BoundaryConditions/OutflowNonReflectingWithPressure.h
similarity index 87%
rename from src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.h
rename to src/cpu/core/BoundaryConditions/OutflowNonReflectingWithPressure.h
index 7fca99885755f78ca4088dd031511d774bfc4115..af4dcaa7fac973abe4e5334dfa7b99e1346ae9d5 100644
--- a/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/OutflowNonReflectingWithPressure.h
@@ -26,23 +26,23 @@
 //  You should have received a copy of the GNU General Public License along
 //  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
 //
-//! \file NonReflectingOutflowBCStrategy.h
+//! \file OutflowNonReflectingWithPressure.h
 //! \ingroup BoundarConditions
-//! \author Konstantin Kutscher
+//! \author Konstantin Kutscher, Hussein Alihussein
 //=======================================================================================
-#ifndef NonReflectingOutflowBCStrategy_h__
-#define NonReflectingOutflowBCStrategy_h__
+#ifndef OutflowNonReflectingWithPressure_h__
+#define OutflowNonReflectingWithPressure_h__
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
 
 class DistributionArray3D;
 
-class NonReflectingOutflowBCStrategy : public BCStrategy
+class OutflowNonReflectingWithPressure : public BCStrategy
 {
 public:
-    NonReflectingOutflowBCStrategy();
-    ~NonReflectingOutflowBCStrategy() override;
+    OutflowNonReflectingWithPressure();
+    ~OutflowNonReflectingWithPressure() override;
     SPtr<BCStrategy> clone() override;
     void addDistributions(SPtr<DistributionArray3D> distributions) override;
     void applyBC() override;
diff --git a/src/cpu/core/BoundaryConditions/DensityBC.cpp b/src/cpu/core/BoundaryConditions/PressureBC.cpp
similarity index 88%
rename from src/cpu/core/BoundaryConditions/DensityBC.cpp
rename to src/cpu/core/BoundaryConditions/PressureBC.cpp
index ecfeff73bf83b94c4b61af8dc5e946bd3de3a81a..5d356e3897e7a84f6fcc95f4160b04045d9afd81 100644
--- a/src/cpu/core/BoundaryConditions/DensityBC.cpp
+++ b/src/cpu/core/BoundaryConditions/PressureBC.cpp
@@ -26,42 +26,42 @@
 //  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 DensityBC.cpp
+//! \file PressureBC.cpp
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
-#include "DensityBC.h"
+#include "PressureBC.h"
 #include "basics/utilities/UbInfinity.h"
 #include "basics/utilities/UbLogger.h"
 #include "basics/constants/NumericConstants.h"
 
 using namespace std;
 /*==========================================================*/
-DensityBC::DensityBC(const real &dens, const real &startTime, const real &endTime)
+PressureBC::PressureBC(const real &dens, const real &startTime, const real &endTime)
 {
     this->densBCs.emplace_back(dens, startTime, endTime);
     this->init();
 }
 /*==========================================================*/
-DensityBC::DensityBC(const BCFunction &densBC)
+PressureBC::PressureBC(const BCFunction &densBC)
 {
     this->densBCs.push_back(densBC);
     this->init();
 }
 /*==========================================================*/
-DensityBC::DensityBC(const std::vector<BCFunction> &densBCs)
+PressureBC::PressureBC(const std::vector<BCFunction> &densBCs)
 {
     this->densBCs = densBCs;
     this->init();
 }
 /*==========================================================*/
-DensityBC::DensityBC(const mu::Parser &function, const real &startTime, const real &endTime)
+PressureBC::PressureBC(const mu::Parser &function, const real &startTime, const real &endTime)
 {
     this->densBCs.emplace_back(function, startTime, endTime);
     this->init();
 }
 /*==========================================================*/
-void DensityBC::init()
+void PressureBC::init()
 {
     this->timeStep = vf::basics::constant::c0o1;
 
@@ -97,7 +97,7 @@ void DensityBC::init()
     }
 }
 /*==========================================================*/
-void DensityBC::init(const D3Q27Interactor *const & /*interactor*/, const real &time)
+void PressureBC::init(const D3Q27Interactor *const & /*interactor*/, const real &time)
 {
     this->timeStep           = time;
     this->tmpDensityFunction = NULL;
@@ -131,12 +131,12 @@ void DensityBC::init(const D3Q27Interactor *const & /*interactor*/, const real &
                          << "\", timedependant=" << (this->isTimeDependent() ? "true" : "false"));
 }
 /*==========================================================*/
-void DensityBC::update(const D3Q27Interactor *const &interactor, const real &time)
+void PressureBC::update(const D3Q27Interactor *const &interactor, const real &time)
 {
     this->init(interactor, time);
 }
 /*==========================================================*/
-void DensityBC::adaptBCForDirection(const D3Q27Interactor & /*interactor*/, SPtr<BoundaryConditions> bc,
+void PressureBC::adaptBCForDirection(const D3Q27Interactor & /*interactor*/, SPtr<BoundaryConditions> bc,
                                            const real & /*worldX1*/, const real & /*worldX2*/,
                                            const real & /*worldX3*/, const real &q, const int &fdirection,
                                            const real & /*time*/)
@@ -145,14 +145,14 @@ void DensityBC::adaptBCForDirection(const D3Q27Interactor & /*interactor*/, SPtr
     bc->setQ((real)q, fdirection);
 }
 /*==========================================================*/
-void DensityBC::adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> bc, const real &worldX1,
+void PressureBC::adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> bc, const real &worldX1,
                                const real &worldX2, const real &worldX3, const real &time)
 {
     this->setNodeDensity(interactor, bc, worldX1, worldX2, worldX3, time);
-    bc->setBCStrategyType(algorithmType);
+    bc->setBCStrategyKey(bcStrategyKey);
 }
 /*==========================================================*/
-void DensityBC::setNodeDensity(const D3Q27Interactor & /*interactor*/, SPtr<BoundaryConditions> bc,
+void PressureBC::setNodeDensity(const D3Q27Interactor & /*interactor*/, SPtr<BoundaryConditions> bc,
                                       const real &worldX1, const real &worldX2, const real &worldX3,
                                       const real &timestep)
 {
@@ -177,7 +177,7 @@ void DensityBC::setNodeDensity(const D3Q27Interactor & /*interactor*/, SPtr<Boun
     }
 }
 /*==========================================================*/
-real DensityBC::getDensity(const real &x1, const real &x2, const real &x3, const real &timeStep)
+real PressureBC::getDensity(const real &x1, const real &x2, const real &x3, const real &timeStep)
 {
     this->x1       = x1;
     this->x2       = x2;
@@ -190,7 +190,7 @@ real DensityBC::getDensity(const real &x1, const real &x2, const real &x3, const
     return tmpDensityFunction->Eval();
 }
 /*==========================================================*/
-string DensityBC::toString()
+string PressureBC::toString()
 {
     stringstream info;
     info << "D3Q27DensityBC:\n";
diff --git a/src/cpu/core/BoundaryConditions/DensityBC.h b/src/cpu/core/BoundaryConditions/PressureBC.h
similarity index 85%
rename from src/cpu/core/BoundaryConditions/DensityBC.h
rename to src/cpu/core/BoundaryConditions/PressureBC.h
index b51fb984a7b5ea1e463e06a43ff4d2691d444341..d0f67ee4a012c24d015c61e81d4cff2e2147d8b1 100644
--- a/src/cpu/core/BoundaryConditions/DensityBC.h
+++ b/src/cpu/core/BoundaryConditions/PressureBC.h
@@ -26,13 +26,13 @@
 //  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 DensityBC.h
+//! \file PressureBC.h
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#ifndef DensityBC_H
-#define DensityBC_H
+#ifndef PressureBC_H
+#define PressureBC_H
 
 #include <iostream>
 #include <sstream>
@@ -45,27 +45,15 @@
 #include "BC.h"
 #include "BCFunction.h"
 
-//*  DensityBC                                                            */
-//*                                                                         */
-//**
-//<BR><BR>
-//@author <A HREF="mailto:muffmolch@gmx.de">S. Freudiger</A>
-//@version 1.0 - 06.09.06
-//*/
-//
-//*
-// usage: ...
-//*/
-
-class DensityBC : public BC
+class PressureBC : public BC
 {
 public:
     // constructors
-    DensityBC() { this->init(); }
-    DensityBC(const real &dens, const real &startTime = 0.0, const real &endTime = BCFunction::INFCONST);
-    DensityBC(const BCFunction &densBC);
-    DensityBC(const std::vector<BCFunction> &densBCs);
-    DensityBC(const mu::Parser &function, const real &startTime = 0.0,
+    PressureBC() { this->init(); }
+    PressureBC(const real &dens, const real &startTime = 0.0, const real &endTime = BCFunction::INFCONST);
+    PressureBC(const BCFunction &densBC);
+    PressureBC(const std::vector<BCFunction> &densBCs);
+    PressureBC(const mu::Parser &function, const real &startTime = 0.0,
                      const real &endTime = BCFunction::INFCONST);
 
     //------------- implements D3Q27BoundaryConditionAdapter ----- start
diff --git a/src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/PressureNonEquilibrium.cpp
similarity index 89%
rename from src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/PressureNonEquilibrium.cpp
index d1c4e43ca7005dae4072a3d134052da8090c41d8..7c1a32b4618c1f01c8a74a2738314ece4ed7cc94 100644
--- a/src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/PressureNonEquilibrium.cpp
@@ -26,35 +26,34 @@
 //  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 NonEqDensityBCStrategy.cpp
+//! \file PressureNonEquilibrium.cpp
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
-#include "NonEqDensityBCStrategy.h"
+#include "PressureNonEquilibrium.h"
 
 #include "BoundaryConditions.h"
 #include "DistributionArray3D.h"
 
-NonEqDensityBCStrategy::NonEqDensityBCStrategy()
+PressureNonEquilibrium::PressureNonEquilibrium()
 {
-    BCStrategy::type         = BCStrategy::NonEqDensityBCStrategy;
     BCStrategy::preCollision = false;
 }
 //////////////////////////////////////////////////////////////////////////
-NonEqDensityBCStrategy::~NonEqDensityBCStrategy() = default;
+PressureNonEquilibrium::~PressureNonEquilibrium() = default;
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> NonEqDensityBCStrategy::clone()
+SPtr<BCStrategy> PressureNonEquilibrium::clone()
 {
-    SPtr<BCStrategy> bc(new NonEqDensityBCStrategy());
+    SPtr<BCStrategy> bc(new PressureNonEquilibrium());
     return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void NonEqDensityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+void PressureNonEquilibrium::addDistributions(SPtr<DistributionArray3D> distributions)
 {
     this->distributions = distributions;
 }
 //////////////////////////////////////////////////////////////////////////
-void NonEqDensityBCStrategy::applyBC()
+void PressureNonEquilibrium::applyBC()
 {
     using namespace vf::lbm::dir;
 
@@ -82,7 +81,7 @@ void NonEqDensityBCStrategy::applyBC()
 
     real rho, vx1, vx2, vx3;
     calcMacrosFct(f, rho, vx1, vx2, vx3);
-    // LBMReal vlimit=0.01;
+    // real vlimit=0.01;
     // vx1=(fabs(vx1)>vlimit) ? vx1/fabs(vx1)*vlimit : vx1;
     // vx2=(fabs(vx2)>vlimit) ? vx2/fabs(vx2)*vlimit : vx2;
     // vx3=(fabs(vx3)>vlimit) ? vx3/fabs(vx3)*vlimit : vx3;
diff --git a/src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.h b/src/cpu/core/BoundaryConditions/PressureNonEquilibrium.h
similarity index 90%
rename from src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.h
rename to src/cpu/core/BoundaryConditions/PressureNonEquilibrium.h
index d919a673e9cb344b51e826addf9b1fafe56b41f4..4b59a53564095d1af027abb23fb420eda2b2640b 100644
--- a/src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/PressureNonEquilibrium.h
@@ -26,25 +26,25 @@
 //  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 NonEqDensityBCStrategy.h
+//! \file PressureNonEquilibrium.h
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
-#ifndef NonEqDensityBCStrategy_h__
-#define NonEqDensityBCStrategy_h__
+#ifndef PressureNonEquilibrium_h__
+#define PressureNonEquilibrium_h__
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
 
 class DistributionArray3D;
 
-class NonEqDensityBCStrategy : public BCStrategy
+class PressureNonEquilibrium : public BCStrategy
 {
 public:
-    NonEqDensityBCStrategy();
-    ~NonEqDensityBCStrategy() override;
+    PressureNonEquilibrium();
+    ~PressureNonEquilibrium() override;
     SPtr<BCStrategy> clone() override;
     void addDistributions(SPtr<DistributionArray3D> distributions) override;
     void applyBC() override;
 };
-#endif // NonEqDensityBCStrategy_h__
+#endif // PressureNonEquilibirum_h__
diff --git a/src/cpu/core/BoundaryConditions/SlipBC.cpp b/src/cpu/core/BoundaryConditions/SlipBC.cpp
index a97fc89fd233197c4286ed14a22a6e4256417ea2..50b0cbc390cd99b77faa435cba30d8afde88d22c 100644
--- a/src/cpu/core/BoundaryConditions/SlipBC.cpp
+++ b/src/cpu/core/BoundaryConditions/SlipBC.cpp
@@ -71,5 +71,5 @@ void SlipBC::adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditions>
     else if (bc->hasSlipBoundaryFlag(d00M))
         bc->setNormalVector(vf::basics::constant::c0o1, vf::basics::constant::c0o1, -vf::basics::constant::c1o1);
 
-    bc->setBCStrategyType(algorithmType);
+    bc->setBCStrategyKey(bcStrategyKey);
 }
diff --git a/src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/SlipBounceBack.cpp
similarity index 93%
rename from src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/SlipBounceBack.cpp
index 0c1693613baaa27be10f9cb90f2049902accdacb..033b5fff35d73e27fe8e9c86e4549fc2ae022286 100644
--- a/src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/SlipBounceBack.cpp
@@ -26,37 +26,36 @@
 //  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 SimpleSlipBCStrategy.cpp
+//! \file SlipBounceBack.cpp
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
-#include "SimpleSlipBCStrategy.h"
+#include "SlipBounceBack.h"
 #include "DistributionArray3D.h"
 #include "BoundaryConditions.h"
 
-SimpleSlipBCStrategy::SimpleSlipBCStrategy()
+SlipBounceBack::SlipBounceBack()
 {
-   BCStrategy::type = BCStrategy::SimpleSlipBCStrategy;
    BCStrategy::preCollision = false;
 }
 //////////////////////////////////////////////////////////////////////////
-SimpleSlipBCStrategy::~SimpleSlipBCStrategy()
+SlipBounceBack::~SlipBounceBack()
 {
 
 }
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> SimpleSlipBCStrategy::clone()
+SPtr<BCStrategy> SlipBounceBack::clone()
 {
-   SPtr<BCStrategy> bc(new SimpleSlipBCStrategy());
+   SPtr<BCStrategy> bc(new SlipBounceBack());
    return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void SimpleSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+void SlipBounceBack::addDistributions(SPtr<DistributionArray3D> distributions)
 {
    this->distributions = distributions;
 }
 //////////////////////////////////////////////////////////////////////////
-void SimpleSlipBCStrategy::applyBC()
+void SlipBounceBack::applyBC()
 {
     using namespace vf::lbm::dir;
 
diff --git a/src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/SlipBounceBack.h
similarity index 92%
rename from src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.h
rename to src/cpu/core/BoundaryConditions/SlipBounceBack.h
index 294c7fdf648603359f14aa1a0bf4f769d6672f05..923ab2002f396396bf2d97722f9a37e6e2cc1989 100644
--- a/src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/SlipBounceBack.h
@@ -26,12 +26,12 @@
 //  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 SimpleVelocityBCStrategy.h
+//! \file VelocityBounceBack.h
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
-#ifndef SimpleSlipBCStrategy_h__
-#define SimpleSlipBCStrategy_h__
+#ifndef SlipBounceBack_h__
+#define SlipBounceBack_h__
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
@@ -39,11 +39,11 @@
 class DistributionArray3D;
 
 //! \brief A class implements slip boundary condition by using simple bounce back
-class SimpleSlipBCStrategy : public BCStrategy
+class SlipBounceBack : public BCStrategy
 {
 public:
-   SimpleSlipBCStrategy();
-   virtual ~SimpleSlipBCStrategy();
+   SlipBounceBack();
+   virtual ~SlipBounceBack();
    SPtr<BCStrategy> clone() override;
    void addDistributions(SPtr<DistributionArray3D> distributions) override;
    void applyBC() override;
diff --git a/src/cpu/core/BoundaryConditions/SlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/SlipInterpolated.cpp
similarity index 91%
rename from src/cpu/core/BoundaryConditions/SlipBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/SlipInterpolated.cpp
index 5245de010674522f8e7a95b2c5f39b0036dea7a6..81978d610e1599397b70e3caa7d2055e4f91c01f 100644
--- a/src/cpu/core/BoundaryConditions/SlipBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/SlipInterpolated.cpp
@@ -1,24 +1,23 @@
-#include "SlipBCStrategy.h"
+#include "SlipInterpolated.h"
 #include "BoundaryConditions.h"
 #include "DistributionArray3D.h"
 
-SlipBCStrategy::SlipBCStrategy()
+SlipInterpolated::SlipInterpolated()
 {
-    BCStrategy::type         = BCStrategy::SlipBCStrategy;
     BCStrategy::preCollision = false;
 }
 //////////////////////////////////////////////////////////////////////////
-SlipBCStrategy::~SlipBCStrategy() = default;
+SlipInterpolated::~SlipInterpolated() = default;
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> SlipBCStrategy::clone()
+SPtr<BCStrategy> SlipInterpolated::clone()
 {
-    SPtr<BCStrategy> bc(new SlipBCStrategy());
+    SPtr<BCStrategy> bc(new SlipInterpolated());
     return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void SlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) { this->distributions = distributions; }
+void SlipInterpolated::addDistributions(SPtr<DistributionArray3D> distributions) { this->distributions = distributions; }
 //////////////////////////////////////////////////////////////////////////
-void SlipBCStrategy::applyBC()
+void SlipInterpolated::applyBC()
 {
     using namespace vf::lbm::dir;
 
diff --git a/src/cpu/core/BoundaryConditions/SlipBCStrategy.h b/src/cpu/core/BoundaryConditions/SlipInterpolated.h
similarity index 63%
rename from src/cpu/core/BoundaryConditions/SlipBCStrategy.h
rename to src/cpu/core/BoundaryConditions/SlipInterpolated.h
index 6eeb43a9022737637c1fa8dd7b7a557af067eda8..54f7406cc6fbb53250a175aa0bc936ea07e36887 100644
--- a/src/cpu/core/BoundaryConditions/SlipBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/SlipInterpolated.h
@@ -1,16 +1,16 @@
-#ifndef SlipBCStrategy_h__
-#define SlipBCStrategy_h__
+#ifndef SlipInterpolated_h__
+#define SlipInterpolated_h__
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
 
 class DistributionArray3D;
 
-class SlipBCStrategy : public BCStrategy
+class SlipInterpolated : public BCStrategy
 {
 public:
-    SlipBCStrategy();
-    ~SlipBCStrategy() override;
+    SlipInterpolated();
+    ~SlipInterpolated() override;
     SPtr<BCStrategy> clone() override;
     void addDistributions(SPtr<DistributionArray3D> distributions) override;
     void applyBC() override;
diff --git a/src/cpu/core/BoundaryConditions/ThinWallBCSet.cpp b/src/cpu/core/BoundaryConditions/ThinWallBCSet.cpp
index aefbd97f1fc7cae230af6632432b1efce41829cd..1d41ca4f455c07108399586abf6128e4df0706f3 100644
--- a/src/cpu/core/BoundaryConditions/ThinWallBCSet.cpp
+++ b/src/cpu/core/BoundaryConditions/ThinWallBCSet.cpp
@@ -32,7 +32,7 @@
 //=======================================================================================
 #include "ThinWallBCSet.h"
 
-#include "ThinWallNoSlipBCStrategy.h"
+#include "ThinWallNoSlip.h"
 
 #include "LBMKernel.h"
 
@@ -50,10 +50,10 @@ void ThinWallBCSet::applyPostCollisionBC()
     BCSet::applyPostCollisionBC();
 
     for (SPtr<BCStrategy> bc : postBC) {
-        if (bc->getType() == BCStrategy::ThinWallNoSlipBCStrategy) {
-            dynamicPointerCast<ThinWallNoSlipBCStrategy>(bc)->setPass(2);
+        if (dynamicPointerCast<ThinWallNoSlip>(bc)->isThinWallNoSlipBCStrategy()) {
+            dynamicPointerCast<ThinWallNoSlip>(bc)->setPass(2);
             bc->applyBC();
-            dynamicPointerCast<ThinWallNoSlipBCStrategy>(bc)->setPass(1);
+            dynamicPointerCast<ThinWallNoSlip>(bc)->setPass(1);
         }
     }
 }
diff --git a/src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/ThinWallNoSlip.cpp
similarity index 85%
rename from src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/ThinWallNoSlip.cpp
index 5cb6f4a13cece782370931e01415347a54fa87bd..e9702dcf2e33ce370a4a2a24299761c4e63affde 100644
--- a/src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/ThinWallNoSlip.cpp
@@ -26,31 +26,30 @@
 //  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 ThinWallNoSlipBCStrategy.cpp
+//! \file ThinWallNoSlip.cpp
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
-#include "ThinWallNoSlipBCStrategy.h"
+#include "ThinWallNoSlip.h"
 
 #include "BoundaryConditions.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 
-ThinWallNoSlipBCStrategy::ThinWallNoSlipBCStrategy()
+ThinWallNoSlip::ThinWallNoSlip()
 {
-    BCStrategy::type         = BCStrategy::ThinWallNoSlipBCStrategy;
     BCStrategy::preCollision = false;
     pass                      = 1;
 }
 //////////////////////////////////////////////////////////////////////////
-ThinWallNoSlipBCStrategy::~ThinWallNoSlipBCStrategy() = default;
+ThinWallNoSlip::~ThinWallNoSlip() = default;
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> ThinWallNoSlipBCStrategy::clone()
+SPtr<BCStrategy> ThinWallNoSlip::clone()
 {
-    SPtr<BCStrategy> bc(new ThinWallNoSlipBCStrategy());
+    SPtr<BCStrategy> bc(new ThinWallNoSlip());
     return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void ThinWallNoSlipBCStrategy::applyBC()
+void ThinWallNoSlip::applyBC()
 {
     real f[D3Q27System::ENDF + 1];
     real feq[D3Q27System::ENDF + 1];
@@ -74,7 +73,7 @@ void ThinWallNoSlipBCStrategy::applyBC()
                 fTemp[fdir] = fReturn;
             } else {
                 // quadratic bounce back with for thin walls
-                // fReturn = distributionsTemp->getDistributionInvForDirection(x1 + D3Q27System::DX1[invDir], x2 +
+                // fReturn = distributionsTemp->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[invDir], x2 +
                 // D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
                 fReturn = fTemp[fdir];
                 distributions->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir],
@@ -85,9 +84,17 @@ void ThinWallNoSlipBCStrategy::applyBC()
     }
 }
 //////////////////////////////////////////////////////////////////////////
-void ThinWallNoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+void ThinWallNoSlip::addDistributions(SPtr<DistributionArray3D> distributions)
 {
     this->distributions = distributions;
 }
 //////////////////////////////////////////////////////////////////////////
-void ThinWallNoSlipBCStrategy::setPass(int pass) { this->pass = pass; }
+void ThinWallNoSlip::setPass(int pass)
+{
+    this->pass = pass;
+}
+
+bool ThinWallNoSlip::isThinWallNoSlipBCStrategy()
+{
+    return true;
+}
diff --git a/src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/ThinWallNoSlip.h
similarity index 91%
rename from src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.h
rename to src/cpu/core/BoundaryConditions/ThinWallNoSlip.h
index deba685a3b2a4d28f32406c4f5048520a2c46959..aeeb09664da78f6aeb06d8d7872c2c70574b504b 100644
--- a/src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/ThinWallNoSlip.h
@@ -26,26 +26,27 @@
 //  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 ThinWallNoSlipBCStrategy.h
+//! \file ThinWallNoSlip.h
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
-#ifndef ThinWallNoSlipBCStrategy_h__
-#define ThinWallNoSlipBCStrategy_h__
+#ifndef ThinWallNoSlip_h__
+#define ThinWallNoSlip_h__
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
 
 class DistributionArray3D;
 
-class ThinWallNoSlipBCStrategy : public BCStrategy
+class ThinWallNoSlip : public BCStrategy
 {
 public:
-    ThinWallNoSlipBCStrategy();
-    ~ThinWallNoSlipBCStrategy() override;
+    ThinWallNoSlip();
+    ~ThinWallNoSlip() override;
     SPtr<BCStrategy> clone() override;
     void addDistributions(SPtr<DistributionArray3D> distributions) override;
     void setPass(int pass);
+    bool isThinWallNoSlipBCStrategy();
     void applyBC() override;
 
 protected:
diff --git a/src/cpu/core/BoundaryConditions/VelocityBC.cpp b/src/cpu/core/BoundaryConditions/VelocityBC.cpp
index 1ffc4470032f6212db1e5f52195235b5b6100cc9..d88ab8934ce1ed10efe68efc6ebf89bb92ac009f 100644
--- a/src/cpu/core/BoundaryConditions/VelocityBC.cpp
+++ b/src/cpu/core/BoundaryConditions/VelocityBC.cpp
@@ -302,7 +302,7 @@ void VelocityBC::adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditi
                                 const real &worldX2, const real &worldX3, const real &time)
 {
     this->setNodeVelocity(interactor, bc, worldX1, worldX2, worldX3, time);
-    bc->setBCStrategyType(algorithmType);
+    bc->setBCStrategyKey(bcStrategyKey);
 }
 /*==========================================================*/
 void VelocityBC::setNodeVelocity(const D3Q27Interactor & /*interactor*/, SPtr<BoundaryConditions> bc,
diff --git a/src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/VelocityBounceBack.cpp
similarity index 87%
rename from src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/VelocityBounceBack.cpp
index 95cc73900df9a4da5daeb8ee2611cd8af300cb24..3ef332578c15939b0e8d7857cdb104bff5c10fef 100644
--- a/src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/VelocityBounceBack.cpp
@@ -26,37 +26,36 @@
 //  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 SimpleVelocityBCStrategy.cpp
+//! \file VelocityBounceBack.cpp
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#include "SimpleVelocityBCStrategy.h"
+#include "VelocityBounceBack.h"
 #include "DistributionArray3D.h"
 #include "BoundaryConditions.h"
 
-SimpleVelocityBCStrategy::SimpleVelocityBCStrategy()
+VelocityBounceBack::VelocityBounceBack()
 {
-   BCStrategy::type = BCStrategy::SimpleVelocityBCStrategy;
    BCStrategy::preCollision = false;
 }
 //////////////////////////////////////////////////////////////////////////
-SimpleVelocityBCStrategy::~SimpleVelocityBCStrategy()
+VelocityBounceBack::~VelocityBounceBack()
 {
 }
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> SimpleVelocityBCStrategy::clone()
+SPtr<BCStrategy> VelocityBounceBack::clone()
 {
-   SPtr<BCStrategy> bc(new SimpleVelocityBCStrategy());
+   SPtr<BCStrategy> bc(new VelocityBounceBack());
    return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void SimpleVelocityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+void VelocityBounceBack::addDistributions(SPtr<DistributionArray3D> distributions)
 {
    this->distributions = distributions;
 }
 //////////////////////////////////////////////////////////////////////////
-void SimpleVelocityBCStrategy::applyBC()
+void VelocityBounceBack::applyBC()
 {
    real f[D3Q27System::ENDF+1];
    real feq[D3Q27System::ENDF+1];
diff --git a/src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.h b/src/cpu/core/BoundaryConditions/VelocityBounceBack.h
similarity index 91%
rename from src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.h
rename to src/cpu/core/BoundaryConditions/VelocityBounceBack.h
index 597e69a386ad03c0eb29ea62a77563b84c72435c..37d91a1e42947e89addde467c440c54be24d0a90 100644
--- a/src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/VelocityBounceBack.h
@@ -26,13 +26,13 @@
 //  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 SimpleVelocityBCStrategy.h
+//! \file VelocityBounceBack.h
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#ifndef SimpleVelocityBCStrategy_H
-#define SimpleVelocityBCStrategy_H
+#ifndef VelocityBounceBack_H
+#define VelocityBounceBack_H
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
@@ -40,11 +40,11 @@
 class DistributionArray3D;
 
 //! \brief A class implements velocyty boundary condition
-class SimpleVelocityBCStrategy : public BCStrategy
+class VelocityBounceBack : public BCStrategy
 {
 public:
-   SimpleVelocityBCStrategy();
-   ~SimpleVelocityBCStrategy();
+   VelocityBounceBack();
+   ~VelocityBounceBack();
    SPtr<BCStrategy> clone() override;
    void addDistributions(SPtr<DistributionArray3D> distributions) override;
    void applyBC() override;
diff --git a/src/cpu/core/BoundaryConditions/VelocityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/VelocityInterpolated.cpp
similarity index 90%
rename from src/cpu/core/BoundaryConditions/VelocityBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/VelocityInterpolated.cpp
index 2cab5d9d321e52ac23fc7bd2c78a4b648966b619..d8ec11ea5ea3a83ce74cf033c94361cf42f4f7d3 100644
--- a/src/cpu/core/BoundaryConditions/VelocityBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/VelocityInterpolated.cpp
@@ -26,34 +26,33 @@
 //  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 VelocityBCStrategy.cpp
+//! \file VelocityInterpolated.cpp
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#include "VelocityBCStrategy.h"
+#include "VelocityInterpolated.h"
 #include "BoundaryConditions.h"
 #include "DistributionArray3D.h"
 #include "Block3D.h"
 
-VelocityBCStrategy::VelocityBCStrategy()
+VelocityInterpolated::VelocityInterpolated()
 {
-    BCStrategy::type         = BCStrategy::VelocityBCStrategy;
     BCStrategy::preCollision = false;
 }
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> VelocityBCStrategy::clone()
+SPtr<BCStrategy> VelocityInterpolated::clone()
 {
-    SPtr<BCStrategy> bc(new VelocityBCStrategy());
+    SPtr<BCStrategy> bc(new VelocityInterpolated());
     return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void VelocityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+void VelocityInterpolated::addDistributions(SPtr<DistributionArray3D> distributions)
 {
     this->distributions = distributions;
 }
 //////////////////////////////////////////////////////////////////////////
-void VelocityBCStrategy::applyBC()
+void VelocityInterpolated::applyBC()
 {
     real f[D3Q27System::ENDF + 1];
     real feq[D3Q27System::ENDF + 1];
diff --git a/src/cpu/core/BoundaryConditions/VelocityBCStrategy.h b/src/cpu/core/BoundaryConditions/VelocityInterpolated.h
similarity index 93%
rename from src/cpu/core/BoundaryConditions/VelocityBCStrategy.h
rename to src/cpu/core/BoundaryConditions/VelocityInterpolated.h
index bc12cf937471726454c0de7b22d531a227d75696..0168a964035b4a21a58f7cd0609b641fc4ca8a42 100644
--- a/src/cpu/core/BoundaryConditions/VelocityBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/VelocityInterpolated.h
@@ -26,13 +26,13 @@
 //  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 VelocityBCStrategy.h
+//! \file VelocityInterpolated.h
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#ifndef VelocityBCStrategy_H
-#define VelocityBCStrategy_H
+#ifndef VelocityInterpolated_H
+#define VelocityInterpolated_H
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
@@ -40,10 +40,10 @@
 class DistributionArray3D;
 
 //! \brief A class implements velocyty boundary condition
-class VelocityBCStrategy : public BCStrategy
+class VelocityInterpolated : public BCStrategy
 {
 public:
-    VelocityBCStrategy();
+    VelocityInterpolated();
     SPtr<BCStrategy> clone() override;
     void addDistributions(SPtr<DistributionArray3D> distributions) override;
     void applyBC() override;
diff --git a/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.cpp b/src/cpu/core/BoundaryConditions/VelocityNonReflecting.cpp
similarity index 92%
rename from src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/VelocityNonReflecting.cpp
index 21340d08bbad1f96670b0184cd74a2efbe711938..02b96ee04a09eb9ab5ba0760e01f30c7c1fc3adc 100644
--- a/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/VelocityNonReflecting.cpp
@@ -26,53 +26,49 @@
 //  You should have received a copy of the GNU General Public License along
 //  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
 //
-//! \file NonReflectingInflowBCStrategy.cpp
+//! \file VelocityNonReflecting.cpp
 //! \ingroup BoundarConditions
 //! \author Hussein Alihussein
 //=======================================================================================
-#include "NonReflectingInflowBCStrategy.h"
+#include "VelocityNonReflecting.h"
 
 #include "BoundaryConditions.h"
 #include "D3Q27System.h"
 #include "DistributionArray3D.h"
 
-NonReflectingInflowBCStrategy::NonReflectingInflowBCStrategy()
+VelocityNonReflecting::VelocityNonReflecting()
 {
-    BCStrategy::type         = BCStrategy::NonReflectingInflowBCStrategy;
     BCStrategy::preCollision = true;
 }
 //////////////////////////////////////////////////////////////////////////
-NonReflectingInflowBCStrategy::NonReflectingInflowBCStrategy(LBMReal velocity, LBMReal relaxationRate)
+VelocityNonReflecting::VelocityNonReflecting(real relaxationRate)
 {
-    BCStrategy::type         = BCStrategy::NonReflectingInflowBCStrategy;
     BCStrategy::preCollision = true;
-    this->BCVeloWeight=relaxationRate;
-    this->velocity=velocity;
-
+    this->BCVeloWeight = relaxationRate;
 }
 //////////////////////////////////////////////////////////////////////////
-NonReflectingInflowBCStrategy::~NonReflectingInflowBCStrategy() = default;
+VelocityNonReflecting::~VelocityNonReflecting() = default;
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> NonReflectingInflowBCStrategy::clone()
+SPtr<BCStrategy> VelocityNonReflecting::clone()
 {
-    SPtr<BCStrategy> bc(new NonReflectingInflowBCStrategy());
+    SPtr<BCStrategy> bc(new VelocityNonReflecting(this->BCVeloWeight));
     return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void NonReflectingInflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+void VelocityNonReflecting::addDistributions(SPtr<DistributionArray3D> distributions)
 {
     this->distributions = distributions;
 }
 //////////////////////////////////////////////////////////////////////////
-void NonReflectingInflowBCStrategy::applyBC()
+void VelocityNonReflecting::applyBC()
 {
     using namespace vf::lbm::dir;
     using namespace D3Q27System;
  //   using namespace UbMath;
     using namespace vf::basics::constant;
 
-    LBMReal f[ENDF + 1];
-    LBMReal ftemp[ENDF + 1];
+    real f[ENDF + 1];
+    real ftemp[ENDF + 1];
 
     int nx1       = x1;
     int nx2       = x2;
@@ -80,46 +76,50 @@ void NonReflectingInflowBCStrategy::applyBC()
     int direction = -1;
 
     // flag points in direction of fluid
-    if (bcPtr->hasDensityBoundaryFlag(dP00)) {
+    if (bcPtr->hasVelocityBoundaryFlag(dP00)) {
         nx1 += 1;
         direction = dP00;
-    } else if (bcPtr->hasDensityBoundaryFlag(dM00)) {
+        this->velocity = bcPtr->getBoundaryVelocityX1();
+    } else if (bcPtr->hasVelocityBoundaryFlag(dM00)) {
         nx1 -= 1;
         direction = dM00;
-    } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) {
+        this->velocity = bcPtr->getBoundaryVelocityX1();
+    } else if (bcPtr->hasVelocityBoundaryFlag(d0P0)) {
         nx2 += 1;
         direction = d0P0;
-    } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) {
+        this->velocity = bcPtr->getBoundaryVelocityX2();
+    } else if (bcPtr->hasVelocityBoundaryFlag(d0M0)) {
         nx2 -= 1;
         direction = d0M0;
-    } else if (bcPtr->hasDensityBoundaryFlag(d00P)) {
+        this->velocity = bcPtr->getBoundaryVelocityX2();
+    } else if (bcPtr->hasVelocityBoundaryFlag(d00P)) {
         nx3 += 1;
         direction = d00P;
-    } else if (bcPtr->hasDensityBoundaryFlag(d00M)) {
+        this->velocity = bcPtr->getBoundaryVelocityX3();
+    } else if (bcPtr->hasVelocityBoundaryFlag(d00M)) {
         nx3 -= 1;
         direction = d00M;
+        this->velocity = bcPtr->getBoundaryVelocityX3();
     } else
         UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary..."));
 
     distributions->getPreCollisionDistribution(f, x1, x2, x3);
     distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3);
 
-    LBMReal rho, vx1, vx2, vx3;
+    real rho, vx1, vx2, vx3;
     calcMacrosFct(f, rho, vx1, vx2, vx3);
     //vx1                  = 0.;
-    //LBMReal BCVeloWeight = c1o2;
-     LBMReal BCVeloWeight =this->BCVeloWeight;
-    // LBMReal velocity     = 0.004814077025232405; 
-     // LBMReal velocity     = 0.00057735;
-    //LBMReal velocity = 0.04; 
-      // LBMReal velocity = 0.01; 
-     // LBMReal velocity = 1./112.; 
-    // LBMReal velocity = 1./126.; 
-     //LBMReal velocity = c1o100/2;
-     LBMReal velocity = this->velocity;
-     // LBMReal velocity = 0.005; 
-    //LBMReal delf         =(-velocity+vx1)*0.5 ;
-    LBMReal delf; 
+    real BCVeloWeight = c1o2;
+    // real velocity     = 0.004814077025232405; 
+     // real velocity     = 0.00057735;
+    //real velocity = 0.04; 
+      // real velocity = 0.01; 
+     // real velocity = 1./112.; 
+    // real velocity = 1./126.; 
+     real velocity = c1o100/2;
+     // real velocity = 0.005; 
+    //real delf         =(-velocity+vx1)*0.5 ;
+    real delf; 
 
     switch (direction) {
         case dP00:
diff --git a/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.h b/src/cpu/core/BoundaryConditions/VelocityNonReflecting.h
similarity index 86%
rename from src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.h
rename to src/cpu/core/BoundaryConditions/VelocityNonReflecting.h
index 2019335b75f484451a33eda186a4b09a3fdae888..ccebf6305733439a5e667393f10a3c0bfdb35a41 100644
--- a/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/VelocityNonReflecting.h
@@ -26,29 +26,29 @@
 //  You should have received a copy of the GNU General Public License along
 //  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
 //
-//! \file NonReflectingInflowBCStrategy.h
+//! \file VelocityNonReflecting.h
 //! \ingroup BoundarConditions
 //! \author Hussein Alihussein
 //=======================================================================================
-#ifndef NonReflectingInflowBCStrategy_h__
-#define NonReflectingInflowBCStrategy_h__
+#ifndef VelocityNonReflecting_h__
+#define VelocityNonReflecting_h__
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
 
 class DistributionArray3D;
 
-class NonReflectingInflowBCStrategy : public BCStrategy
+class VelocityNonReflecting : public BCStrategy
 {
 public:
-    NonReflectingInflowBCStrategy();
-    NonReflectingInflowBCStrategy(LBMReal velocity, LBMReal relaxationRate);
-    ~NonReflectingInflowBCStrategy() override;
+    VelocityNonReflecting();
+    VelocityNonReflecting(real relaxationRate);
+    ~VelocityNonReflecting() override;
     SPtr<BCStrategy> clone() override;
     void addDistributions(SPtr<DistributionArray3D> distributions) override;
     void applyBC() override;
 private:
-LBMReal velocity;
-LBMReal BCVeloWeight;    
+real velocity;
+real BCVeloWeight;    
 };
 #endif // NonReflectingDensityBCStrategy_h__
diff --git a/src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/VelocityWithPressureInterpolated.cpp
similarity index 83%
rename from src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.cpp
rename to src/cpu/core/BoundaryConditions/VelocityWithPressureInterpolated.cpp
index 5ef3bea739ec38e211a4ef649574ccd1c59fe6a4..520b2006c1ecbc297b48646cdbf2a836197c2d4b 100644
--- a/src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.cpp
+++ b/src/cpu/core/BoundaryConditions/VelocityWithPressureInterpolated.cpp
@@ -26,34 +26,33 @@
 //  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 VelocityWithDensityBCStrategy.cpp
+//! \file VelocityWithPressureInterpolated.cpp
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
-#include "VelocityWithDensityBCStrategy.h"
+#include "VelocityWithPressureInterpolated.h"
 #include "BCArray3D.h"
 #include "DistributionArray3D.h"
 
-VelocityWithDensityBCStrategy::VelocityWithDensityBCStrategy()
+VelocityWithPressureInterpolated::VelocityWithPressureInterpolated()
 {
-    BCStrategy::type         = BCStrategy::VelocityWithDensityBCStrategy;
     BCStrategy::preCollision = false;
 }
 //////////////////////////////////////////////////////////////////////////
-VelocityWithDensityBCStrategy::~VelocityWithDensityBCStrategy() = default;
+VelocityWithPressureInterpolated::~VelocityWithPressureInterpolated() = default;
 //////////////////////////////////////////////////////////////////////////
-SPtr<BCStrategy> VelocityWithDensityBCStrategy::clone()
+SPtr<BCStrategy> VelocityWithPressureInterpolated::clone()
 {
-    SPtr<BCStrategy> bc(new VelocityWithDensityBCStrategy());
+    SPtr<BCStrategy> bc(new VelocityWithPressureInterpolated());
     return bc;
 }
 //////////////////////////////////////////////////////////////////////////
-void VelocityWithDensityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions)
+void VelocityWithPressureInterpolated::addDistributions(SPtr<DistributionArray3D> distributions)
 {
     this->distributions = distributions;
 }
 //////////////////////////////////////////////////////////////////////////
-void VelocityWithDensityBCStrategy::applyBC()
+void VelocityWithPressureInterpolated::applyBC()
 {
     using namespace vf::basics::constant;
 
@@ -84,15 +83,15 @@ void VelocityWithDensityBCStrategy::applyBC()
         if (minX1 <= nX1 && maxX1 > nX1 && minX2 <= nX2 && maxX2 > nX2 && minX3 <= nX3 && maxX3 > nX3) {
             if (bcArray->isSolid(nX1, nX2, nX3)) {
                 const int invDir = D3Q27System::INVDIR[fdir];
-                //LBMReal q =1.0;// bcPtr->getQ(invDir);// m+m q=0 stabiler
+                //real q =1.0;// bcPtr->getQ(invDir);// m+m q=0 stabiler
                 real velocity = bcPtr->getBoundaryVelocity(fdir);
                 
-                //LBMReal fReturn = ((1.0 - q) / (1.0 + q))*((f[fdir] - feq[fdir]*collFactor) / (1.0 -
+                //real fReturn = ((1.0 - q) / (1.0 + q))*((f[fdir] - feq[fdir]*collFactor) / (1.0 -
                 //collFactor)) + ((q*(f[fdir] + f[invDir]) - velocity*rho) / (1.0 +
                 //q))-drho*D3Q27System::WEIGTH[invDir];
 
                 // if q=1
-                // LBMReal fReturn = ((q*(f[fdir] + f[invDir]) - velocity*rho) / (1.0 +
+                // real fReturn = ((q*(f[fdir] + f[invDir]) - velocity*rho) / (1.0 +
                 // q))-drho*D3Q27System::WEIGTH[invDir];
                 real fReturn = (f[fdir] + f[invDir] - velocity * rho) / vf::basics::constant::c2o1 - drho * D3Q27System::WEIGTH[invDir];
 
diff --git a/src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.h b/src/cpu/core/BoundaryConditions/VelocityWithPressureInterpolated.h
similarity index 90%
rename from src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.h
rename to src/cpu/core/BoundaryConditions/VelocityWithPressureInterpolated.h
index 6d91f2ced18e647449c7ba732aa09c4f5fe25f8d..236a1fadb151fcfb044a6d9b6a3f07f6be00cb4b 100644
--- a/src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.h
+++ b/src/cpu/core/BoundaryConditions/VelocityWithPressureInterpolated.h
@@ -26,13 +26,13 @@
 //  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 VelocityWithDensityBCStrategy.h
+//! \file VelocityWithPressureInterpolated.h
 //! \ingroup BoundarConditions
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#ifndef VelocityWithDensityBCStrategy_h__
-#define VelocityWithDensityBCStrategy_h__
+#ifndef VelocityWithPressureInterpolated_h__
+#define VelocityWithPressureInterpolated_h__
 
 #include "BCStrategy.h"
 #include <PointerDefinitions.h>
@@ -42,11 +42,11 @@ class DistributionArray3D;
 //!  \brief Class implements Dirichlet boundary condition for velocity. Set density in system. It is used together with
 //!  non reflecting outflow.
 
-class VelocityWithDensityBCStrategy : public BCStrategy
+class VelocityWithPressureInterpolated : public BCStrategy
 {
 public:
-    VelocityWithDensityBCStrategy();
-    ~VelocityWithDensityBCStrategy() override;
+    VelocityWithPressureInterpolated();
+    ~VelocityWithPressureInterpolated() override;
     SPtr<BCStrategy> clone() override;
     void addDistributions(SPtr<DistributionArray3D> distributions) override;
     void applyBC() override;
diff --git a/src/cpu/core/CMakeLists.txt b/src/cpu/core/CMakeLists.txt
index ee8f4ed209673acfc4bbfbd8bff39379e28d5255..4a596797e30f7bcad82f6054558f92e60857fe58 100644
--- a/src/cpu/core/CMakeLists.txt
+++ b/src/cpu/core/CMakeLists.txt
@@ -48,3 +48,9 @@ IF(${VFCPU_USE_VTK})
    target_include_directories(${library_name} PRIVATE ${VTK_INCLUDE_DIRS})
 ENDIF()
 
+# TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/139
+# if(BUILD_USE_MPI)
+    target_link_libraries(${library_name} PRIVATE MPI::MPI_CXX)
+# endif()
+
+
diff --git a/src/cpu/core/Connectors/CoarseToFineVectorConnector.h b/src/cpu/core/Connectors/CoarseToFineVectorConnector.h
index 9a0612f2afa4d226341ea4ab8132566203454226..af198b441db0aee4ded44f729439f972b0d6f08a 100644
--- a/src/cpu/core/Connectors/CoarseToFineVectorConnector.h
+++ b/src/cpu/core/Connectors/CoarseToFineVectorConnector.h
@@ -44,8 +44,8 @@
 #include "LBMKernel.h"
 #include "MathUtil.hpp"
 #include "basics/container/CbVector.h"
-#include "basics/transmitter/TbTransmitter.h"
-#include "basics/transmitter/TbTransmitterLocal.h"
+#include "parallel/transmitter/TbTransmitter.h"
+#include "parallel/transmitter/TbTransmitterLocal.h"
 #include <PointerDefinitions.h>
 #include "basics/constants/NumericConstants.h"
 
@@ -1059,7 +1059,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd);
             break;
 
-            //	/////E-W-N-S
+            //    /////E-W-N-S
         case dPP0:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
@@ -1167,7 +1167,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdEv, indexOdEv);
 
             break;
-            //		/////T-B-E-W
+            //        /////T-B-E-W
         case dP0P:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
@@ -1699,7 +1699,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
             maxX2 -= 2;
     }
 
-    //	////T-B-E-W
+    //    ////T-B-E-W
     if (block.lock()->hasInterpolationFlagCF(dP0P) && !block.lock()->hasInterpolationFlagCF(dP00) &&
         !block.lock()->hasInterpolationFlagCF(d00P)) {
         if (maxX1 == TmaxX1)
@@ -1841,7 +1841,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1,
             maxX2 -= 2;
     }
 
-    //	////T-B-E-W
+    //    ////T-B-E-W
     if (block.lock()->hasInterpolationFlagCF(dP0P) && !block.lock()->hasInterpolationFlagCF(dP00) &&
         !block.lock()->hasInterpolationFlagCF(d00P)) {
         if (maxX1 == TmaxX1)
diff --git a/src/cpu/core/Connectors/FineToCoarseVectorConnector.h b/src/cpu/core/Connectors/FineToCoarseVectorConnector.h
index 7b92bac07e2cd606fcf4f5531c6992e442bf4ee1..9d448fb7a5d9a3e04f8a14837fc2695757bfcf2b 100644
--- a/src/cpu/core/Connectors/FineToCoarseVectorConnector.h
+++ b/src/cpu/core/Connectors/FineToCoarseVectorConnector.h
@@ -43,7 +43,7 @@
 #include "Interpolator.h"
 #include "LBMKernel.h"
 #include "MathUtil.hpp"
-#include "basics/transmitter/TbTransmitter.h"
+#include "parallel/transmitter/TbTransmitter.h"
 #include <PointerDefinitions.h>
 #include "basics/constants/NumericConstants.h"
 
@@ -370,7 +370,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors()
             fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        //	////N-S-E-W
+        //    ////N-S-E-W
         case dPP0:
             getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3);
             getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3);
@@ -958,7 +958,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
         //
-        //	/////T-B-E-W
+        //    /////T-B-E-W
         case dP0P:
             lMinX1 = maxX1 - 4;
             lMaxX1 = lMinX1 + 3;
@@ -995,7 +995,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors()
             distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index);
             break;
 
-        //	////////////////T-B-N-S
+        //    ////////////////T-B-N-S
         //
         case d0PP:
             lMinX2 = maxX2 - 4;
@@ -1518,16 +1518,16 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in
         case dP0M:
         case dM0P:
             if (connType == OddEvenSE)
-                //		minX1 += oMinX1;
+                //        minX1 += oMinX1;
                 if (connType == OddOddNE) {
-                    //		minX1 += oMinX1;
+                    //        minX1 += oMinX1;
                     minX2 += oMinX2;
                 }
             if (connType == EvenOddNW)
                 minX2 += oMinX2;
             break;
 
-        //	//////
+        //    //////
         case d0PP:
         case d0MM:
         case d0PM:
@@ -1542,18 +1542,18 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in
                 // minX3 += oMinX3;
                 break;
 
-            //	/////
-            //	case TNE: case TNW: case TSE: case TSW: case BNE: case BNW: case BSE: case BSW:
-            //	if(connType == OddEvenSE)
-            //	//	minX1 += oMinX1;
-            //	if(connType == OddOddNE)
-            //	{
-            //		//minX1 += oMinX1;
-            //		//minX3 += oMinX3;
-            //	}
-            //	if(connType == EvenOddNW)
-            //		//minX3 += oMinX3;
-            //	break;
+            //    /////
+            //    case TNE: case TNW: case TSE: case TSW: case BNE: case BNW: case BSE: case BSW:
+            //    if(connType == OddEvenSE)
+            //    //    minX1 += oMinX1;
+            //    if(connType == OddOddNE)
+            //    {
+            //        //minX1 += oMinX1;
+            //        //minX3 += oMinX3;
+            //    }
+            //    if(connType == EvenOddNW)
+            //        //minX3 += oMinX3;
+            //    break;
     }
 }
 //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/core/Connectors/FullDirectConnector.cpp b/src/cpu/core/Connectors/FullDirectConnector.cpp
index d40fc36cb9a15e1b7d1664be2ab2beeee74df394..14a8d3e4e795c270c8bebcb40907b578b00b60ae 100644
--- a/src/cpu/core/Connectors/FullDirectConnector.cpp
+++ b/src/cpu/core/Connectors/FullDirectConnector.cpp
@@ -32,7 +32,7 @@
 //=======================================================================================
 
 #include "FullDirectConnector.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "DataSet3D.h"
 #include "LBMKernel.h"
 
diff --git a/src/cpu/core/Connectors/FullVectorConnector.cpp b/src/cpu/core/Connectors/FullVectorConnector.cpp
index ff501a8ecfc123ffba8eb1a0906126281b22ead8..91c4c11090936a107de3fe7722a5af7ff1acfe74 100644
--- a/src/cpu/core/Connectors/FullVectorConnector.cpp
+++ b/src/cpu/core/Connectors/FullVectorConnector.cpp
@@ -32,7 +32,7 @@
 //=======================================================================================
 
 #include "FullVectorConnector.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "DataSet3D.h"
 #include "LBMKernel.h"
 //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/core/Connectors/OneDistributionFullDirectConnector.h b/src/cpu/core/Connectors/OneDistributionFullDirectConnector.h
index 44d3f9fc251d12c9c621193d326cbc751921d957..e83c19bde64eb4a6e1998d7fcb2dfba45677129a 100644
--- a/src/cpu/core/Connectors/OneDistributionFullDirectConnector.h
+++ b/src/cpu/core/Connectors/OneDistributionFullDirectConnector.h
@@ -37,7 +37,7 @@
 #include "Block3D.h"
 #include "D3Q27System.h"
 #include "FullDirectConnector.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 
@@ -68,70 +68,72 @@ private:
 //////////////////////////////////////////////////////////////////////////
 inline void OneDistributionFullDirectConnector::updatePointers()
 {
-    localDistributionsFrom = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getLocalDistributions();
-    nonLocalDistributionsFrom = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getNonLocalDistributions();
-    zeroDistributionsFrom = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getZeroDistributions();
+    localDistributionsFrom = dynamicPointerCast<EsoSplit>(this->fFrom)->getLocalDistributions();
+    nonLocalDistributionsFrom = dynamicPointerCast<EsoSplit>(this->fFrom)->getNonLocalDistributions();
+    zeroDistributionsFrom = dynamicPointerCast<EsoSplit>(this->fFrom)->getZeroDistributions();
 
-    localDistributionsTo = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getLocalDistributions();
-    nonLocalDistributionsTo = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getNonLocalDistributions();
-    zeroDistributionsTo     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getZeroDistributions();
+    localDistributionsTo = dynamicPointerCast<EsoSplit>(this->fTo)->getLocalDistributions();
+    nonLocalDistributionsTo = dynamicPointerCast<EsoSplit>(this->fTo)->getNonLocalDistributions();
+    zeroDistributionsTo     = dynamicPointerCast<EsoSplit>(this->fTo)->getZeroDistributions();
 }
 //////////////////////////////////////////////////////////////////////////
 inline void OneDistributionFullDirectConnector::exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To)
 {
-    (*this->localDistributionsTo)(D3Q27System::ET_E, x1To, x2To, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_E, x1From, x2From, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_N, x1To, x2To, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_N, x1From, x2From, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_T, x1To, x2To, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_T, x1From, x2From, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_NE, x1To, x2To, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_NE, x1From, x2From, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_TE, x1To, x2To, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_TE, x1From, x2From, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_TN, x1To, x2To, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_TN, x1From, x2From, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_TNE, x1To, x2To, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-    (*this->localDistributionsTo)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) =
-        (*this->localDistributionsFrom)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
+    using namespace vf::lbm::dir;
 
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_W, x1To + 1, x2To, x3To) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_S, x1To, x2To + 1, x3To) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_B, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-    (*this->nonLocalDistributionsTo)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFrom)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
+    (*this->localDistributionsTo)(eP00, x1To, x2To, x3To) =
+        (*this->localDistributionsFrom)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsTo)(e0P0, x1To, x2To, x3To) =
+        (*this->localDistributionsFrom)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsTo)(e00P, x1To, x2To, x3To) =
+        (*this->localDistributionsFrom)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsTo)(ePP0, x1To, x2To, x3To) =
+        (*this->localDistributionsFrom)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsTo)(eMP0, x1To + 1, x2To, x3To) =
+        (*this->localDistributionsFrom)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTo)(eP0P, x1To, x2To, x3To) =
+        (*this->localDistributionsFrom)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsTo)(eM0P, x1To + 1, x2To, x3To) =
+        (*this->localDistributionsFrom)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTo)(e0PP, x1To, x2To, x3To) =
+        (*this->localDistributionsFrom)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsTo)(e0MP, x1To, x2To + 1, x3To) =
+        (*this->localDistributionsFrom)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsTo)(ePPP, x1To, x2To, x3To) =
+        (*this->localDistributionsFrom)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsTo)(eMPP, x1To + 1, x2To, x3To) =
+        (*this->localDistributionsFrom)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTo)(ePMP, x1To, x2To + 1, x3To) =
+        (*this->localDistributionsFrom)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsTo)(eMMP, x1To + 1, x2To + 1, x3To) =
+        (*this->localDistributionsFrom)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsTo)(eM00, x1To + 1, x2To, x3To) =
+        (*this->nonLocalDistributionsFrom)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsTo)(e0M0, x1To, x2To + 1, x3To) =
+        (*this->nonLocalDistributionsFrom)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTo)(e00M, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFrom)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTo)(eMM0, x1To + 1, x2To + 1, x3To) =
+        (*this->nonLocalDistributionsFrom)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTo)(ePM0, x1To, x2To + 1, x3To) =
+        (*this->nonLocalDistributionsFrom)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTo)(eM0M, x1To + 1, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFrom)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTo)(eP0M, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFrom)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTo)(e0MM, x1To, x2To + 1, x3To + 1) =
+        (*this->nonLocalDistributionsFrom)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTo)(e0PM, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFrom)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTo)(eMMM, x1To + 1, x2To + 1, x3To + 1) =
+        (*this->nonLocalDistributionsFrom)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTo)(ePMM, x1To, x2To + 1, x3To + 1) =
+        (*this->nonLocalDistributionsFrom)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTo)(eMPM, x1To + 1, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFrom)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTo)(ePPM, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFrom)(ePPM, x1From, x2From, x3From + 1);
 
     (*this->zeroDistributionsTo)(x1To, x2To, x3To) = (*this->zeroDistributionsFrom)(x1From, x2From, x3From);
 }
diff --git a/src/cpu/core/Connectors/OneDistributionFullVectorConnector.h b/src/cpu/core/Connectors/OneDistributionFullVectorConnector.h
index a9a53455c934fa68663ac6f3ff0722cdb45f689b..fa0b95f7a90d6da23ee36bae4c7f27b12951cdba 100644
--- a/src/cpu/core/Connectors/OneDistributionFullVectorConnector.h
+++ b/src/cpu/core/Connectors/OneDistributionFullVectorConnector.h
@@ -9,7 +9,7 @@
 //#include "EsoTwistD3Q27System.h"
 #include "LBMKernel.h"
 #include "FullVectorConnector.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 
@@ -40,73 +40,77 @@ private:
 //////////////////////////////////////////////////////////////////////////
 inline void OneDistributionFullVectorConnector::updatePointers()
 {
-    localDistributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getLocalDistributions();
-    nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getNonLocalDistributions();
-    zeroDistributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getZeroDistributions();
+    localDistributions    = dynamicPointerCast<EsoSplit>(this->fDis)->getLocalDistributions();
+    nonLocalDistributions = dynamicPointerCast<EsoSplit>(this->fDis)->getNonLocalDistributions();
+    zeroDistributions     = dynamicPointerCast<EsoSplit>(this->fDis)->getZeroDistributions();
 }
 //////////////////////////////////////////////////////////////////////////
 inline void OneDistributionFullVectorConnector::fillData(vector_type &sdata, int &index, int x1, int x2, int x3)
 {
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-    sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
+    using namespace vf::lbm::dir;
 
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-    sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+    sdata[index++] = (*this->localDistributions)(eP00, x1, x2, x3);
+    sdata[index++] = (*this->localDistributions)(e0P0, x1, x2, x3);
+    sdata[index++] = (*this->localDistributions)(e00P, x1, x2, x3);
+    sdata[index++] = (*this->localDistributions)(ePP0, x1, x2, x3);
+    sdata[index++] = (*this->localDistributions)(eMP0, x1 + 1, x2, x3);
+    sdata[index++] = (*this->localDistributions)(eP0P, x1, x2, x3);
+    sdata[index++] = (*this->localDistributions)(eM0P, x1 + 1, x2, x3);
+    sdata[index++] = (*this->localDistributions)(e0PP, x1, x2, x3);
+    sdata[index++] = (*this->localDistributions)(e0MP, x1, x2 + 1, x3);
+    sdata[index++] = (*this->localDistributions)(ePPP, x1, x2, x3);
+    sdata[index++] = (*this->localDistributions)(eMPP, x1 + 1, x2, x3);
+    sdata[index++] = (*this->localDistributions)(ePMP, x1, x2 + 1, x3);
+    sdata[index++] = (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+    sdata[index++] = (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3);
+    sdata[index++] = (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3);
+    sdata[index++] = (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1);
+    sdata[index++] = (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3);
+    sdata[index++] = (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3);
+    sdata[index++] = (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1);
+    sdata[index++] = (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1);
+    sdata[index++] = (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1);
+    sdata[index++] = (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1);
+    sdata[index++] = (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+    sdata[index++] = (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1);
+    sdata[index++] = (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1);
+    sdata[index++] = (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1);
 
     sdata[index++] = (*this->zeroDistributions)(x1, x2, x3);
 }
 //////////////////////////////////////////////////////////////////////////
 inline void OneDistributionFullVectorConnector::distributeData(vector_type &rdata, int &index, int x1, int x2, int x3)
 {
-    (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3)           = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3)           = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3)           = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3)          = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3)      = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3)          = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3)      = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3)          = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3)      = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3)         = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3)     = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3)     = rdata[index++];
-    (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
+    using namespace vf::lbm::dir;
+
+    (*this->localDistributions)(eP00, x1, x2, x3)           = rdata[index++];
+    (*this->localDistributions)(e0P0, x1, x2, x3)           = rdata[index++];
+    (*this->localDistributions)(e00P, x1, x2, x3)           = rdata[index++];
+    (*this->localDistributions)(ePP0, x1, x2, x3)          = rdata[index++];
+    (*this->localDistributions)(eMP0, x1 + 1, x2, x3)      = rdata[index++];
+    (*this->localDistributions)(eP0P, x1, x2, x3)          = rdata[index++];
+    (*this->localDistributions)(eM0P, x1 + 1, x2, x3)      = rdata[index++];
+    (*this->localDistributions)(e0PP, x1, x2, x3)          = rdata[index++];
+    (*this->localDistributions)(e0MP, x1, x2 + 1, x3)      = rdata[index++];
+    (*this->localDistributions)(ePPP, x1, x2, x3)         = rdata[index++];
+    (*this->localDistributions)(eMPP, x1 + 1, x2, x3)     = rdata[index++];
+    (*this->localDistributions)(ePMP, x1, x2 + 1, x3)     = rdata[index++];
+    (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
 
-    (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3)           = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3)           = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1)           = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3)      = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3)          = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1)      = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1)          = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1)      = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1)          = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1)     = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1)     = rdata[index++];
-    (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1)         = rdata[index++];
+    (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3)           = rdata[index++];
+    (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3)           = rdata[index++];
+    (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1)           = rdata[index++];
+    (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3)      = rdata[index++];
+    (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3)          = rdata[index++];
+    (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1)      = rdata[index++];
+    (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1)          = rdata[index++];
+    (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1)      = rdata[index++];
+    (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1)          = rdata[index++];
+    (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+    (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1)     = rdata[index++];
+    (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1)     = rdata[index++];
+    (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1)         = rdata[index++];
 
     (*this->zeroDistributions)(x1, x2, x3) = rdata[index++];
 }
diff --git a/src/cpu/core/Connectors/RemoteBlock3DConnector.h b/src/cpu/core/Connectors/RemoteBlock3DConnector.h
index 2c27eea33a01b7b680c645c4e143639f779bf4d6..acaac4c8cdd122c72ec8eb407bbe8cebf4712d5e 100644
--- a/src/cpu/core/Connectors/RemoteBlock3DConnector.h
+++ b/src/cpu/core/Connectors/RemoteBlock3DConnector.h
@@ -38,7 +38,6 @@
 #include "Block3D.h"
 #include "Block3DConnector.h"
 #include "D3Q27System.h"
-#include "EsoTwistD3Q27System.h"
 #include "LBMKernel.h"
 #include "TransmitterType.h"
 
diff --git a/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp
index ce4f88cb7760c412a27fa53e9823353bcfa1f494..9dffa624cae9768ed36ab47c87d3c4bf8fac65af 100644
--- a/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp
+++ b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp
@@ -45,10 +45,10 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::init()
 {
     FullDirectConnector::init();
 
-	fFrom =dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getFdistributions());
-	fTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getFdistributions());
-	hFrom = dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getHdistributions());
-	hTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getHdistributions());
+    fFrom =dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getFdistributions());
+    fTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getFdistributions());
+    hFrom = dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getHdistributions());
+    hTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getHdistributions());
     hFrom2 = dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getH2distributions());
     hTo2  = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getH2distributions());
     pressureFrom = from.lock()->getKernel()->getDataSet()->getPressureField();
diff --git a/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h
index 21a37e3427747d0c813c34b6fcf14b18ff3e1a76..9ffbe9182bcae74c6e2c45bc06e8a3ec3b05a1a2 100644
--- a/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h
+++ b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h
@@ -37,7 +37,7 @@
 #include "FullDirectConnector.h"
 #include "Block3D.h"
 #include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 #include "DataSet3D.h"
@@ -48,7 +48,7 @@
 class ThreeDistributionsDoubleGhostLayerFullDirectConnector : public FullDirectConnector
 {
 public:
-	ThreeDistributionsDoubleGhostLayerFullDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to, int sendDir);
+    ThreeDistributionsDoubleGhostLayerFullDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to, int sendDir);
     void init() override;
     void sendVectors() override;
 
@@ -58,23 +58,23 @@ protected:
     inline void exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To) override;
 
 private:
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromf;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromf;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromf;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromf;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromf;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromf;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsTof;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsTof;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsTof;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsTof;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsTof;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsTof;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromh;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromh;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromh;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsToh;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsToh;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsToh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsToh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsToh;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsToh;
 
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh2;
+    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh2;
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromh2;
     CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsFromh2;
 
@@ -82,7 +82,7 @@ private:
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsToh2;
     CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsToh2;
 
-	SPtr<EsoTwist3D> fFrom, hFrom, hFrom2;
+    SPtr<EsoTwist3D> fFrom, hFrom, hFrom2;
     SPtr<EsoTwist3D> fTo, hTo, hTo2;
 
     SPtr<PressureFieldArray3D> pressureFrom, pressureTo;
@@ -90,147 +90,149 @@ private:
 //////////////////////////////////////////////////////////////////////////
 inline void ThreeDistributionsDoubleGhostLayerFullDirectConnector::updatePointers()
 {
-    localDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getLocalDistributions();
-    nonLocalDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getNonLocalDistributions();
-    zeroDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getZeroDistributions();
+    localDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getLocalDistributions();
+    nonLocalDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getNonLocalDistributions();
+    zeroDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getZeroDistributions();
 
-    localDistributionsTof    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getLocalDistributions();
-    nonLocalDistributionsTof = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getNonLocalDistributions();
-    zeroDistributionsTof     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getZeroDistributions();
+    localDistributionsTof    = dynamicPointerCast<EsoSplit>(this->fTo)->getLocalDistributions();
+    nonLocalDistributionsTof = dynamicPointerCast<EsoSplit>(this->fTo)->getNonLocalDistributions();
+    zeroDistributionsTof     = dynamicPointerCast<EsoSplit>(this->fTo)->getZeroDistributions();
 
-    localDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getLocalDistributions();
-    nonLocalDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getNonLocalDistributions();
-    zeroDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getZeroDistributions();
+    localDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getLocalDistributions();
+    nonLocalDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getNonLocalDistributions();
+    zeroDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getZeroDistributions();
 
-    localDistributionsToh    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getLocalDistributions();
-    nonLocalDistributionsToh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getNonLocalDistributions();
-    zeroDistributionsToh     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getZeroDistributions();
+    localDistributionsToh    = dynamicPointerCast<EsoSplit>(this->hTo)->getLocalDistributions();
+    nonLocalDistributionsToh = dynamicPointerCast<EsoSplit>(this->hTo)->getNonLocalDistributions();
+    zeroDistributionsToh     = dynamicPointerCast<EsoSplit>(this->hTo)->getZeroDistributions();
 
-    localDistributionsFromh2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom2)->getLocalDistributions();
-    nonLocalDistributionsFromh2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom2)->getNonLocalDistributions();
-    zeroDistributionsFromh2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom2)->getZeroDistributions();
+    localDistributionsFromh2 = dynamicPointerCast<EsoSplit>(this->hFrom2)->getLocalDistributions();
+    nonLocalDistributionsFromh2 = dynamicPointerCast<EsoSplit>(this->hFrom2)->getNonLocalDistributions();
+    zeroDistributionsFromh2 = dynamicPointerCast<EsoSplit>(this->hFrom2)->getZeroDistributions();
 
-    localDistributionsToh2    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo2)->getLocalDistributions();
-    nonLocalDistributionsToh2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo2)->getNonLocalDistributions();
-    zeroDistributionsToh2     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo2)->getZeroDistributions();
+    localDistributionsToh2    = dynamicPointerCast<EsoSplit>(this->hTo2)->getLocalDistributions();
+    nonLocalDistributionsToh2 = dynamicPointerCast<EsoSplit>(this->hTo2)->getNonLocalDistributions();
+    zeroDistributionsToh2     = dynamicPointerCast<EsoSplit>(this->hTo2)->getZeroDistributions();
 }
 //////////////////////////////////////////////////////////////////////////
 inline void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To)
 {
-	(*this->localDistributionsTof)(D3Q27System::ET_E, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_E, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_N, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_N, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_T, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_T, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_NE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_NE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TN, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TN, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TNE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
-
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_W, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_S, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_B, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
-
-	(*this->zeroDistributionsTof)(x1To, x2To, x3To) = (*this->zeroDistributionsFromf)(x1From, x2From, x3From);
-
-
-	(*this->localDistributionsToh)(D3Q27System::ET_E, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_E, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_N, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_N, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_T, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_T, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_NE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_NE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TN, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TN, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TNE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
-
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_W, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_S, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_B, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
-
-	(*this->zeroDistributionsToh)(x1To, x2To, x3To) = (*this->zeroDistributionsFromh)(x1From, x2From, x3From);
-
-	(*this->localDistributionsToh2)(D3Q27System::ET_E, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_E, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_N, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_N, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_T, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_T, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_NE, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_NE, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TE, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TE, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TN, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TN, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TNE, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
-
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_W, x1To + 1, x2To, x3To) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_S, x1To, x2To + 1, x3To) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_B, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
+    using namespace vf::lbm::dir;
+
+    (*this->localDistributionsTof)(eP00, x1To, x2To, x3To) = (*this->localDistributionsFromf)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e0P0, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e00P, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(ePP0, x1To, x2To, x3To) = (*this->localDistributionsFromf)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eMP0, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(eP0P, x1To, x2To, x3To) = (*this->localDistributionsFromf)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eM0P, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(e0PP, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e0MP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsTof)(ePPP, x1To, x2To, x3To) = (*this->localDistributionsFromf)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eMPP, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(ePMP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsTof)(eMMP, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromf)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsTof)(eM00, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromf)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsTof)(e0M0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(e00M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMM0, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(ePM0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(eM0M, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eP0M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(e0MM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(e0PM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMMM, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(ePMM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMPM, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(ePPM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(ePPM, x1From, x2From, x3From + 1);
+
+    (*this->zeroDistributionsTof)(x1To, x2To, x3To) = (*this->zeroDistributionsFromf)(x1From, x2From, x3From);
+
+
+    (*this->localDistributionsToh)(eP00, x1To, x2To, x3To) = (*this->localDistributionsFromh)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e0P0, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e00P, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(ePP0, x1To, x2To, x3To) = (*this->localDistributionsFromh)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eMP0, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(eP0P, x1To, x2To, x3To) = (*this->localDistributionsFromh)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eM0P, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(e0PP, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e0MP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh)(ePPP, x1To, x2To, x3To) = (*this->localDistributionsFromh)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eMPP, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(ePMP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh)(eMMP, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromh)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsToh)(eM00, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromh)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsToh)(e0M0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(e00M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMM0, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(ePM0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(eM0M, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eP0M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(e0MM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(e0PM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMMM, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(ePMM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMPM, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(ePPM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(ePPM, x1From, x2From, x3From + 1);
+
+    (*this->zeroDistributionsToh)(x1To, x2To, x3To) = (*this->zeroDistributionsFromh)(x1From, x2From, x3From);
+
+    (*this->localDistributionsToh2)(eP00, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(e0P0, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(e00P, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(ePP0, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(eMP0, x1To + 1, x2To, x3To) =
+        (*this->localDistributionsFromh2)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh2)(eP0P, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(eM0P, x1To + 1, x2To, x3To) =
+        (*this->localDistributionsFromh2)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh2)(e0PP, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(e0MP, x1To, x2To + 1, x3To) =
+        (*this->localDistributionsFromh2)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh2)(ePPP, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(eMPP, x1To + 1, x2To, x3To) =
+        (*this->localDistributionsFromh2)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh2)(ePMP, x1To, x2To + 1, x3To) =
+        (*this->localDistributionsFromh2)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh2)(eMMP, x1To + 1, x2To + 1, x3To) =
+        (*this->localDistributionsFromh2)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsToh2)(eM00, x1To + 1, x2To, x3To) =
+        (*this->nonLocalDistributionsFromh2)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsToh2)(e0M0, x1To, x2To + 1, x3To) =
+        (*this->nonLocalDistributionsFromh2)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh2)(e00M, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(eMM0, x1To + 1, x2To + 1, x3To) =
+        (*this->nonLocalDistributionsFromh2)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh2)(ePM0, x1To, x2To + 1, x3To) =
+        (*this->nonLocalDistributionsFromh2)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh2)(eM0M, x1To + 1, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(eP0M, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(e0MM, x1To, x2To + 1, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(e0PM, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(eMMM, x1To + 1, x2To + 1, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(ePMM, x1To, x2To + 1, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(eMPM, x1To + 1, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(ePPM, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(ePPM, x1From, x2From, x3From + 1);
 
     (*this->zeroDistributionsToh2)(x1To, x2To, x3To) = (*this->zeroDistributionsFromh2)(x1From, x2From, x3From);
 
diff --git a/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h
index c91103481e71979d93830573fe3a27a80c77a337..891536fe66624e85915be768527cd9e4454b3147 100644
--- a/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h
+++ b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h
@@ -38,7 +38,7 @@
 
 #include "FullVectorConnector.h"
 #include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 #include "DataSet3D.h"
@@ -92,109 +92,111 @@ private:
 //////////////////////////////////////////////////////////////////////////
 inline void ThreeDistributionsDoubleGhostLayerFullVectorConnector::updatePointers()
 {
-    localDistributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getLocalDistributions();
-    nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getNonLocalDistributions();
-    zeroDistributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getZeroDistributions();
+    localDistributions    = dynamicPointerCast<EsoSplit>(this->fDis)->getLocalDistributions();
+    nonLocalDistributions = dynamicPointerCast<EsoSplit>(this->fDis)->getNonLocalDistributions();
+    zeroDistributions     = dynamicPointerCast<EsoSplit>(this->fDis)->getZeroDistributions();
 
-    localHdistributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getLocalDistributions();
-    nonLocalHdistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getNonLocalDistributions();
-    zeroHdistributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getZeroDistributions();
+    localHdistributions    = dynamicPointerCast<EsoSplit>(this->hDis)->getLocalDistributions();
+    nonLocalHdistributions = dynamicPointerCast<EsoSplit>(this->hDis)->getNonLocalDistributions();
+    zeroHdistributions     = dynamicPointerCast<EsoSplit>(this->hDis)->getZeroDistributions();
 
-    localH2distributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->h2Dis)->getLocalDistributions();
-    nonLocalH2distributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->h2Dis)->getNonLocalDistributions();
-    zeroH2distributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->h2Dis)->getZeroDistributions();
+    localH2distributions    = dynamicPointerCast<EsoSplit>(this->h2Dis)->getLocalDistributions();
+    nonLocalH2distributions = dynamicPointerCast<EsoSplit>(this->h2Dis)->getNonLocalDistributions();
+    zeroH2distributions     = dynamicPointerCast<EsoSplit>(this->h2Dis)->getZeroDistributions();
 }
 //////////////////////////////////////////////////////////////////////////
 inline void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData(vector_type& sdata, int& index, int x1, int x2, int x3)
 {
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+   using namespace vf::lbm::dir;
+
+   sdata[index++] = (*this->localDistributions)(eP00, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0P0, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e00P, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(ePP0, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eMP0, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eP0P, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eM0P, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0PP, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0MP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localDistributions)(ePPP, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eMPP, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(ePMP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+   sdata[index++] = (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1);
 
    sdata[index++] = (*this->zeroDistributions)(x1, x2, x3);
 
 
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_E, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_N, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_T, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_NE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TN, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+   sdata[index++] = (*this->localHdistributions)(eP00, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0P0, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e00P, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(ePP0, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eMP0, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eP0P, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eM0P, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0PP, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0MP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localHdistributions)(ePPP, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eMPP, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(ePMP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localHdistributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+   sdata[index++] = (*this->nonLocalHdistributions)(eM00, x1 + 1, x2, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0M0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(e00M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMM0, x1 + 1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePM0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(eM0M, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eP0M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0MM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0PM, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePMM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMPM, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePPM, x1, x2, x3 + 1);
 
    sdata[index++] = (*this->zeroHdistributions)(x1, x2, x3);
 
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_E, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_N, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_T, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_NE, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TE, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TN, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+   sdata[index++] = (*this->localH2distributions)(eP00, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(e0P0, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(e00P, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(ePP0, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(eMP0, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(eP0P, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(eM0P, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(e0PP, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(e0MP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localH2distributions)(ePPP, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(eMPP, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(ePMP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localH2distributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+   sdata[index++] = (*this->nonLocalH2distributions)(eM00, x1 + 1, x2, x3);
+   sdata[index++] = (*this->nonLocalH2distributions)(e0M0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalH2distributions)(e00M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(eMM0, x1 + 1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalH2distributions)(ePM0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalH2distributions)(eM0M, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(eP0M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(e0MM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(e0PM, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(ePMM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(eMPM, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(ePPM, x1, x2, x3 + 1);
 
    sdata[index++] = (*this->zeroH2distributions)(x1, x2, x3);
 
@@ -204,94 +206,96 @@ inline void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData(vect
 //////////////////////////////////////////////////////////////////////////
 inline void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData(vector_type& rdata, int& index, int x1, int x2, int x3)
 {
-   (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
-
-   (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = rdata[index++];
+   using namespace vf::lbm::dir;
+
+   (*this->localDistributions)(eP00, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0P0, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e00P, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(ePP0, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eMP0, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eP0P, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eM0P, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0PP, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0MP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localDistributions)(ePPP, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eMPP, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(ePMP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
+
+   (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1) = rdata[index++];
 
    (*this->zeroDistributions)(x1, x2, x3) = rdata[index++];
 
    
-   (*this->localHdistributions)(D3Q27System::ET_E, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_N, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_T, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_NE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TN, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TNE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
-
-   (*this->nonLocalHdistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = rdata[index++];
+   (*this->localHdistributions)(eP00, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0P0, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e00P, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(ePP0, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eMP0, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eP0P, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eM0P, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0PP, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0MP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localHdistributions)(ePPP, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eMPP, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(ePMP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localHdistributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
+
+   (*this->nonLocalHdistributions)(eM00, x1 + 1, x2, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0M0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(e00M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMM0, x1 + 1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePM0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(eM0M, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eP0M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0MM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0PM, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePMM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMPM, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePPM, x1, x2, x3 + 1) = rdata[index++];
 
    (*this->zeroHdistributions)(x1, x2, x3) = rdata[index++];
 
-   (*this->localH2distributions)(D3Q27System::ET_E, x1, x2, x3)           = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_N, x1, x2, x3)           = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_T, x1, x2, x3)           = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_NE, x1, x2, x3)          = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_NW, x1 + 1, x2, x3)      = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TE, x1, x2, x3)          = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TW, x1 + 1, x2, x3)      = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TN, x1, x2, x3)          = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TS, x1, x2 + 1, x3)      = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TNE, x1, x2, x3)         = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3)     = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3)     = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
-
-   (*this->nonLocalH2distributions)(D3Q27System::ET_W, x1 + 1, x2, x3)           = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_S, x1, x2 + 1, x3)           = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_B, x1, x2, x3 + 1)           = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3)      = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_SE, x1, x2 + 1, x3)          = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1)      = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BE, x1, x2, x3 + 1)          = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1)      = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BN, x1, x2, x3 + 1)          = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1)     = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1)     = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1)         = rdata[index++];
+   (*this->localH2distributions)(eP00, x1, x2, x3)           = rdata[index++];
+   (*this->localH2distributions)(e0P0, x1, x2, x3)           = rdata[index++];
+   (*this->localH2distributions)(e00P, x1, x2, x3)           = rdata[index++];
+   (*this->localH2distributions)(ePP0, x1, x2, x3)          = rdata[index++];
+   (*this->localH2distributions)(eMP0, x1 + 1, x2, x3)      = rdata[index++];
+   (*this->localH2distributions)(eP0P, x1, x2, x3)          = rdata[index++];
+   (*this->localH2distributions)(eM0P, x1 + 1, x2, x3)      = rdata[index++];
+   (*this->localH2distributions)(e0PP, x1, x2, x3)          = rdata[index++];
+   (*this->localH2distributions)(e0MP, x1, x2 + 1, x3)      = rdata[index++];
+   (*this->localH2distributions)(ePPP, x1, x2, x3)         = rdata[index++];
+   (*this->localH2distributions)(eMPP, x1 + 1, x2, x3)     = rdata[index++];
+   (*this->localH2distributions)(ePMP, x1, x2 + 1, x3)     = rdata[index++];
+   (*this->localH2distributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
+
+   (*this->nonLocalH2distributions)(eM00, x1 + 1, x2, x3)           = rdata[index++];
+   (*this->nonLocalH2distributions)(e0M0, x1, x2 + 1, x3)           = rdata[index++];
+   (*this->nonLocalH2distributions)(e00M, x1, x2, x3 + 1)           = rdata[index++];
+   (*this->nonLocalH2distributions)(eMM0, x1 + 1, x2 + 1, x3)      = rdata[index++];
+   (*this->nonLocalH2distributions)(ePM0, x1, x2 + 1, x3)          = rdata[index++];
+   (*this->nonLocalH2distributions)(eM0M, x1 + 1, x2, x3 + 1)      = rdata[index++];
+   (*this->nonLocalH2distributions)(eP0M, x1, x2, x3 + 1)          = rdata[index++];
+   (*this->nonLocalH2distributions)(e0MM, x1, x2 + 1, x3 + 1)      = rdata[index++];
+   (*this->nonLocalH2distributions)(e0PM, x1, x2, x3 + 1)          = rdata[index++];
+   (*this->nonLocalH2distributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalH2distributions)(ePMM, x1, x2 + 1, x3 + 1)     = rdata[index++];
+   (*this->nonLocalH2distributions)(eMPM, x1 + 1, x2, x3 + 1)     = rdata[index++];
+   (*this->nonLocalH2distributions)(ePPM, x1, x2, x3 + 1)         = rdata[index++];
 
    (*this->zeroH2distributions)(x1, x2, x3) = rdata[index++];
 
diff --git a/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.cpp b/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.cpp
index 727ed79ebb8e5a71fd625c77fb436db2c29b302c..b01920e867b7b45f4cf0027b42c0d0ef01e97183 100644
--- a/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.cpp
+++ b/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.cpp
@@ -45,10 +45,10 @@ void ThreeDistributionsFullDirectConnector::init()
 {
     FullDirectConnector::init();
 
-	fFrom =dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getFdistributions());
-	fTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getFdistributions());
-	hFrom = dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getHdistributions());
-	hTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getHdistributions());
+    fFrom =dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getFdistributions());
+    fTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getFdistributions());
+    hFrom = dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getHdistributions());
+    hTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getHdistributions());
     hFrom2 = dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getH2distributions());
     hTo2  = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getH2distributions());
 }
diff --git a/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.h b/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.h
index 3cb443a474d373552125ddd2626a4f797d040429..32caaf40263515514ef1912effdf389a42d6930e 100644
--- a/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.h
+++ b/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.h
@@ -37,7 +37,7 @@
 #include "FullDirectConnector.h"
 #include "Block3D.h"
 #include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 
@@ -47,7 +47,7 @@
 class ThreeDistributionsFullDirectConnector : public FullDirectConnector
 {
 public:
-	ThreeDistributionsFullDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to, int sendDir);
+    ThreeDistributionsFullDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to, int sendDir);
     void init() override;
 
 protected:
@@ -55,23 +55,23 @@ protected:
     inline void exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To) override;
 
 private:
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromf;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromf;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromf;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromf;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromf;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromf;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsTof;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsTof;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsTof;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsTof;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsTof;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsTof;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromh;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromh;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromh;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsToh;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsToh;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsToh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsToh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsToh;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsToh;
 
-	CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh2;
+    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh2;
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromh2;
     CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsFromh2;
 
@@ -79,153 +79,155 @@ private:
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsToh2;
     CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsToh2;
 
-	SPtr<EsoTwist3D> fFrom, hFrom, hFrom2;
+    SPtr<EsoTwist3D> fFrom, hFrom, hFrom2;
     SPtr<EsoTwist3D> fTo, hTo, hTo2;
 };
 //////////////////////////////////////////////////////////////////////////
 inline void ThreeDistributionsFullDirectConnector::updatePointers()
 {
-    localDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getLocalDistributions();
-    nonLocalDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getNonLocalDistributions();
-    zeroDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getZeroDistributions();
+    localDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getLocalDistributions();
+    nonLocalDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getNonLocalDistributions();
+    zeroDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getZeroDistributions();
 
-    localDistributionsTof    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getLocalDistributions();
-    nonLocalDistributionsTof = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getNonLocalDistributions();
-    zeroDistributionsTof     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getZeroDistributions();
+    localDistributionsTof    = dynamicPointerCast<EsoSplit>(this->fTo)->getLocalDistributions();
+    nonLocalDistributionsTof = dynamicPointerCast<EsoSplit>(this->fTo)->getNonLocalDistributions();
+    zeroDistributionsTof     = dynamicPointerCast<EsoSplit>(this->fTo)->getZeroDistributions();
 
-    localDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getLocalDistributions();
-    nonLocalDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getNonLocalDistributions();
-    zeroDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getZeroDistributions();
+    localDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getLocalDistributions();
+    nonLocalDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getNonLocalDistributions();
+    zeroDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getZeroDistributions();
 
-    localDistributionsToh    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getLocalDistributions();
-    nonLocalDistributionsToh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getNonLocalDistributions();
-    zeroDistributionsToh     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getZeroDistributions();
+    localDistributionsToh    = dynamicPointerCast<EsoSplit>(this->hTo)->getLocalDistributions();
+    nonLocalDistributionsToh = dynamicPointerCast<EsoSplit>(this->hTo)->getNonLocalDistributions();
+    zeroDistributionsToh     = dynamicPointerCast<EsoSplit>(this->hTo)->getZeroDistributions();
 
-    localDistributionsFromh2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom2)->getLocalDistributions();
-    nonLocalDistributionsFromh2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom2)->getNonLocalDistributions();
-    zeroDistributionsFromh2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom2)->getZeroDistributions();
+    localDistributionsFromh2 = dynamicPointerCast<EsoSplit>(this->hFrom2)->getLocalDistributions();
+    nonLocalDistributionsFromh2 = dynamicPointerCast<EsoSplit>(this->hFrom2)->getNonLocalDistributions();
+    zeroDistributionsFromh2 = dynamicPointerCast<EsoSplit>(this->hFrom2)->getZeroDistributions();
 
-    localDistributionsToh2    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo2)->getLocalDistributions();
-    nonLocalDistributionsToh2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo2)->getNonLocalDistributions();
-    zeroDistributionsToh2     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo2)->getZeroDistributions();
+    localDistributionsToh2    = dynamicPointerCast<EsoSplit>(this->hTo2)->getLocalDistributions();
+    nonLocalDistributionsToh2 = dynamicPointerCast<EsoSplit>(this->hTo2)->getNonLocalDistributions();
+    zeroDistributionsToh2     = dynamicPointerCast<EsoSplit>(this->hTo2)->getZeroDistributions();
 }
 //////////////////////////////////////////////////////////////////////////
 inline void ThreeDistributionsFullDirectConnector::exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To)
 {
-	(*this->localDistributionsTof)(D3Q27System::ET_E, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_E, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_N, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_N, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_T, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_T, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_NE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_NE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TN, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TN, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TNE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
-
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_W, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_S, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_B, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
-
-	(*this->zeroDistributionsTof)(x1To, x2To, x3To) = (*this->zeroDistributionsFromf)(x1From, x2From, x3From);
-
-
-	(*this->localDistributionsToh)(D3Q27System::ET_E, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_E, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_N, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_N, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_T, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_T, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_NE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_NE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TN, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TN, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TNE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
-
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_W, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_S, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_B, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
-
-	(*this->zeroDistributionsToh)(x1To, x2To, x3To) = (*this->zeroDistributionsFromh)(x1From, x2From, x3From);
-
-	(*this->localDistributionsToh2)(D3Q27System::ET_E, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_E, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_N, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_N, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_T, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_T, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_NE, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_NE, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TE, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TE, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TN, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TN, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TNE, x1To, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-    (*this->localDistributionsToh2)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) =
-        (*this->localDistributionsFromh2)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
-
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_W, x1To + 1, x2To, x3To) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_S, x1To, x2To + 1, x3To) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_B, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-    (*this->nonLocalDistributionsToh2)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) =
-        (*this->nonLocalDistributionsFromh2)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
+    using namespace vf::lbm::dir;
+
+    (*this->localDistributionsTof)(eP00, x1To, x2To, x3To) = (*this->localDistributionsFromf)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e0P0, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e00P, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(ePP0, x1To, x2To, x3To) = (*this->localDistributionsFromf)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eMP0, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(eP0P, x1To, x2To, x3To) = (*this->localDistributionsFromf)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eM0P, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(e0PP, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e0MP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsTof)(ePPP, x1To, x2To, x3To) = (*this->localDistributionsFromf)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eMPP, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(ePMP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsTof)(eMMP, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromf)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsTof)(eM00, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromf)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsTof)(e0M0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(e00M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMM0, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(ePM0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(eM0M, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eP0M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(e0MM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(e0PM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMMM, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(ePMM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMPM, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(ePPM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(ePPM, x1From, x2From, x3From + 1);
+
+    (*this->zeroDistributionsTof)(x1To, x2To, x3To) = (*this->zeroDistributionsFromf)(x1From, x2From, x3From);
+
+
+    (*this->localDistributionsToh)(eP00, x1To, x2To, x3To) = (*this->localDistributionsFromh)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e0P0, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e00P, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(ePP0, x1To, x2To, x3To) = (*this->localDistributionsFromh)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eMP0, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(eP0P, x1To, x2To, x3To) = (*this->localDistributionsFromh)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eM0P, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(e0PP, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e0MP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh)(ePPP, x1To, x2To, x3To) = (*this->localDistributionsFromh)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eMPP, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(ePMP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh)(eMMP, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromh)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsToh)(eM00, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromh)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsToh)(e0M0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(e00M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMM0, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(ePM0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(eM0M, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eP0M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(e0MM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(e0PM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMMM, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(ePMM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMPM, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(ePPM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(ePPM, x1From, x2From, x3From + 1);
+
+    (*this->zeroDistributionsToh)(x1To, x2To, x3To) = (*this->zeroDistributionsFromh)(x1From, x2From, x3From);
+
+    (*this->localDistributionsToh2)(eP00, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(e0P0, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(e00P, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(ePP0, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(eMP0, x1To + 1, x2To, x3To) =
+        (*this->localDistributionsFromh2)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh2)(eP0P, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(eM0P, x1To + 1, x2To, x3To) =
+        (*this->localDistributionsFromh2)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh2)(e0PP, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(e0MP, x1To, x2To + 1, x3To) =
+        (*this->localDistributionsFromh2)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh2)(ePPP, x1To, x2To, x3To) =
+        (*this->localDistributionsFromh2)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsToh2)(eMPP, x1To + 1, x2To, x3To) =
+        (*this->localDistributionsFromh2)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh2)(ePMP, x1To, x2To + 1, x3To) =
+        (*this->localDistributionsFromh2)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh2)(eMMP, x1To + 1, x2To + 1, x3To) =
+        (*this->localDistributionsFromh2)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsToh2)(eM00, x1To + 1, x2To, x3To) =
+        (*this->nonLocalDistributionsFromh2)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsToh2)(e0M0, x1To, x2To + 1, x3To) =
+        (*this->nonLocalDistributionsFromh2)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh2)(e00M, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(eMM0, x1To + 1, x2To + 1, x3To) =
+        (*this->nonLocalDistributionsFromh2)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh2)(ePM0, x1To, x2To + 1, x3To) =
+        (*this->nonLocalDistributionsFromh2)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh2)(eM0M, x1To + 1, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(eP0M, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(e0MM, x1To, x2To + 1, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(e0PM, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(eMMM, x1To + 1, x2To + 1, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(ePMM, x1To, x2To + 1, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(eMPM, x1To + 1, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh2)(ePPM, x1To, x2To, x3To + 1) =
+        (*this->nonLocalDistributionsFromh2)(ePPM, x1From, x2From, x3From + 1);
 
     (*this->zeroDistributionsToh2)(x1To, x2To, x3To) = (*this->zeroDistributionsFromh2)(x1From, x2From, x3From);
 }
diff --git a/src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.h b/src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.h
index 794ba2d01d8015b347e8a1712da943b82d80b83c..36a698d60aed924bda94fcb772a444e2081b080e 100644
--- a/src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.h
+++ b/src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.h
@@ -38,7 +38,7 @@
 
 #include "FullVectorConnector.h"
 #include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 
@@ -84,203 +84,207 @@ private:
 //////////////////////////////////////////////////////////////////////////
 inline void ThreeDistributionsFullVectorConnector::updatePointers()
 {
-    localDistributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getLocalDistributions();
-    nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getNonLocalDistributions();
-    zeroDistributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getZeroDistributions();
+    localDistributions    = dynamicPointerCast<EsoSplit>(this->fDis)->getLocalDistributions();
+    nonLocalDistributions = dynamicPointerCast<EsoSplit>(this->fDis)->getNonLocalDistributions();
+    zeroDistributions     = dynamicPointerCast<EsoSplit>(this->fDis)->getZeroDistributions();
 
-    localHdistributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getLocalDistributions();
-    nonLocalHdistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getNonLocalDistributions();
-    zeroHdistributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getZeroDistributions();
+    localHdistributions    = dynamicPointerCast<EsoSplit>(this->hDis)->getLocalDistributions();
+    nonLocalHdistributions = dynamicPointerCast<EsoSplit>(this->hDis)->getNonLocalDistributions();
+    zeroHdistributions     = dynamicPointerCast<EsoSplit>(this->hDis)->getZeroDistributions();
 
-    localH2distributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->h2Dis)->getLocalDistributions();
-    nonLocalH2distributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->h2Dis)->getNonLocalDistributions();
-    zeroH2distributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->h2Dis)->getZeroDistributions();
+    localH2distributions    = dynamicPointerCast<EsoSplit>(this->h2Dis)->getLocalDistributions();
+    nonLocalH2distributions = dynamicPointerCast<EsoSplit>(this->h2Dis)->getNonLocalDistributions();
+    zeroH2distributions     = dynamicPointerCast<EsoSplit>(this->h2Dis)->getZeroDistributions();
 }
 //////////////////////////////////////////////////////////////////////////
 inline void ThreeDistributionsFullVectorConnector::fillData(vector_type& sdata, int& index, int x1, int x2, int x3)
 {
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+   using namespace vf::lbm::dir;
+
+   sdata[index++] = (*this->localDistributions)(eP00, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0P0, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e00P, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(ePP0, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eMP0, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eP0P, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eM0P, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0PP, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0MP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localDistributions)(ePPP, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eMPP, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(ePMP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+   sdata[index++] = (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1);
 
    sdata[index++] = (*this->zeroDistributions)(x1, x2, x3);
 
 
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_E, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_N, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_T, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_NE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TN, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+   sdata[index++] = (*this->localHdistributions)(eP00, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0P0, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e00P, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(ePP0, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eMP0, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eP0P, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eM0P, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0PP, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0MP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localHdistributions)(ePPP, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eMPP, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(ePMP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localHdistributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+   sdata[index++] = (*this->nonLocalHdistributions)(eM00, x1 + 1, x2, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0M0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(e00M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMM0, x1 + 1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePM0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(eM0M, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eP0M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0MM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0PM, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePMM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMPM, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePPM, x1, x2, x3 + 1);
 
    sdata[index++] = (*this->zeroHdistributions)(x1, x2, x3);
 
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_E, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_N, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_T, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_NE, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TE, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TN, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localH2distributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalH2distributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+   sdata[index++] = (*this->localH2distributions)(eP00, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(e0P0, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(e00P, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(ePP0, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(eMP0, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(eP0P, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(eM0P, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(e0PP, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(e0MP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localH2distributions)(ePPP, x1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(eMPP, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localH2distributions)(ePMP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localH2distributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+   sdata[index++] = (*this->nonLocalH2distributions)(eM00, x1 + 1, x2, x3);
+   sdata[index++] = (*this->nonLocalH2distributions)(e0M0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalH2distributions)(e00M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(eMM0, x1 + 1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalH2distributions)(ePM0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalH2distributions)(eM0M, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(eP0M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(e0MM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(e0PM, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(ePMM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(eMPM, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalH2distributions)(ePPM, x1, x2, x3 + 1);
 
    sdata[index++] = (*this->zeroH2distributions)(x1, x2, x3);
 }
 //////////////////////////////////////////////////////////////////////////
 inline void ThreeDistributionsFullVectorConnector::distributeData(vector_type& rdata, int& index, int x1, int x2, int x3)
 {
-   (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
-
-   (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = rdata[index++];
+   using namespace vf::lbm::dir;
+
+   (*this->localDistributions)(eP00, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0P0, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e00P, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(ePP0, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eMP0, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eP0P, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eM0P, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0PP, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0MP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localDistributions)(ePPP, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eMPP, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(ePMP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
+
+   (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1) = rdata[index++];
 
    (*this->zeroDistributions)(x1, x2, x3) = rdata[index++];
 
    
-   (*this->localHdistributions)(D3Q27System::ET_E, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_N, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_T, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_NE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TN, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TNE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
-
-   (*this->nonLocalHdistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = rdata[index++];
+   (*this->localHdistributions)(eP00, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0P0, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e00P, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(ePP0, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eMP0, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eP0P, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eM0P, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0PP, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0MP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localHdistributions)(ePPP, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eMPP, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(ePMP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localHdistributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
+
+   (*this->nonLocalHdistributions)(eM00, x1 + 1, x2, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0M0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(e00M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMM0, x1 + 1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePM0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(eM0M, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eP0M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0MM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0PM, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePMM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMPM, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePPM, x1, x2, x3 + 1) = rdata[index++];
 
    (*this->zeroHdistributions)(x1, x2, x3) = rdata[index++];
 
-   (*this->localH2distributions)(D3Q27System::ET_E, x1, x2, x3)           = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_N, x1, x2, x3)           = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_T, x1, x2, x3)           = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_NE, x1, x2, x3)          = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_NW, x1 + 1, x2, x3)      = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TE, x1, x2, x3)          = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TW, x1 + 1, x2, x3)      = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TN, x1, x2, x3)          = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TS, x1, x2 + 1, x3)      = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TNE, x1, x2, x3)         = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3)     = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3)     = rdata[index++];
-   (*this->localH2distributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
-
-   (*this->nonLocalH2distributions)(D3Q27System::ET_W, x1 + 1, x2, x3)           = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_S, x1, x2 + 1, x3)           = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_B, x1, x2, x3 + 1)           = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3)      = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_SE, x1, x2 + 1, x3)          = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1)      = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BE, x1, x2, x3 + 1)          = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1)      = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BN, x1, x2, x3 + 1)          = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1)     = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1)     = rdata[index++];
-   (*this->nonLocalH2distributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1)         = rdata[index++];
+   (*this->localH2distributions)(eP00, x1, x2, x3)           = rdata[index++];
+   (*this->localH2distributions)(e0P0, x1, x2, x3)           = rdata[index++];
+   (*this->localH2distributions)(e00P, x1, x2, x3)           = rdata[index++];
+   (*this->localH2distributions)(ePP0, x1, x2, x3)          = rdata[index++];
+   (*this->localH2distributions)(eMP0, x1 + 1, x2, x3)      = rdata[index++];
+   (*this->localH2distributions)(eP0P, x1, x2, x3)          = rdata[index++];
+   (*this->localH2distributions)(eM0P, x1 + 1, x2, x3)      = rdata[index++];
+   (*this->localH2distributions)(e0PP, x1, x2, x3)          = rdata[index++];
+   (*this->localH2distributions)(e0MP, x1, x2 + 1, x3)      = rdata[index++];
+   (*this->localH2distributions)(ePPP, x1, x2, x3)         = rdata[index++];
+   (*this->localH2distributions)(eMPP, x1 + 1, x2, x3)     = rdata[index++];
+   (*this->localH2distributions)(ePMP, x1, x2 + 1, x3)     = rdata[index++];
+   (*this->localH2distributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
+
+   (*this->nonLocalH2distributions)(eM00, x1 + 1, x2, x3)           = rdata[index++];
+   (*this->nonLocalH2distributions)(e0M0, x1, x2 + 1, x3)           = rdata[index++];
+   (*this->nonLocalH2distributions)(e00M, x1, x2, x3 + 1)           = rdata[index++];
+   (*this->nonLocalH2distributions)(eMM0, x1 + 1, x2 + 1, x3)      = rdata[index++];
+   (*this->nonLocalH2distributions)(ePM0, x1, x2 + 1, x3)          = rdata[index++];
+   (*this->nonLocalH2distributions)(eM0M, x1 + 1, x2, x3 + 1)      = rdata[index++];
+   (*this->nonLocalH2distributions)(eP0M, x1, x2, x3 + 1)          = rdata[index++];
+   (*this->nonLocalH2distributions)(e0MM, x1, x2 + 1, x3 + 1)      = rdata[index++];
+   (*this->nonLocalH2distributions)(e0PM, x1, x2, x3 + 1)          = rdata[index++];
+   (*this->nonLocalH2distributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalH2distributions)(ePMM, x1, x2 + 1, x3 + 1)     = rdata[index++];
+   (*this->nonLocalH2distributions)(eMPM, x1 + 1, x2, x3 + 1)     = rdata[index++];
+   (*this->nonLocalH2distributions)(ePPM, x1, x2, x3 + 1)         = rdata[index++];
 
    (*this->zeroH2distributions)(x1, x2, x3) = rdata[index++];
 }
diff --git a/src/cpu/core/Connectors/TransmitterType.h b/src/cpu/core/Connectors/TransmitterType.h
index f300f005e9e52e398b0d2131ad4cbba027170ede..7e729a7a09aa042779beea61ae7d3ed167295947 100644
--- a/src/cpu/core/Connectors/TransmitterType.h
+++ b/src/cpu/core/Connectors/TransmitterType.h
@@ -34,10 +34,12 @@
 #define TransmitterType_h__
 
 #include "D3Q27System.h"
-#include "basics/container/CbVector.h"
-#include "basics/transmitter/TbTransmitter.h"
-#include "basics/transmitter/TbTransmitterLocal.h"
-#include <PointerDefinitions.h>
+
+#include <basics/PointerDefinitions.h>
+#include <basics/container/CbVector.h>
+
+#include <parallel/transmitter/TbTransmitter.h>
+#include <parallel/transmitter/TbTransmitterLocal.h>
 
 using VectorTransmitter    = TbTransmitter<CbVector<real>>;
 using vector_type          = VectorTransmitter::value_type;
diff --git a/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp
index 7413f237ecc603a73ad6d39a61689b0f9785b042..4e21297a92acb071db16f1a0f8cdea78a2cb5eee 100644
--- a/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp
+++ b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp
@@ -45,10 +45,10 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::init()
 {
     FullDirectConnector::init();
 
-	fFrom =dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getFdistributions());
-	fTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getFdistributions());
-	hFrom = dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getHdistributions());
-	hTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getHdistributions());
+    fFrom =dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getFdistributions());
+    fTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getFdistributions());
+    hFrom = dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getHdistributions());
+    hTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getHdistributions());
     pressureFrom = from.lock()->getKernel()->getDataSet()->getPressureField();
     pressureTo   = to.lock()->getKernel()->getDataSet()->getPressureField();
 }
diff --git a/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h
index 40f119cd61a80126cf80853ab9f7511d38132215..53c429e196b5230530e51f2c2aa6ac67ad0d2283 100644
--- a/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h
+++ b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h
@@ -37,7 +37,7 @@
 #include "FullDirectConnector.h"
 #include "Block3D.h"
 #include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 #include "DataSet3D.h"
@@ -48,7 +48,7 @@
 class TwoDistributionsDoubleGhostLayerFullDirectConnector : public FullDirectConnector
 {
 public:
-	TwoDistributionsDoubleGhostLayerFullDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to, int sendDir);
+    TwoDistributionsDoubleGhostLayerFullDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to, int sendDir);
     void init() override;
     void sendVectors() override;
 
@@ -58,23 +58,23 @@ protected:
     inline void exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To) override;
 
 private:
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromf;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromf;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromf;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromf;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromf;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromf;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsTof;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsTof;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsTof;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsTof;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsTof;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsTof;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromh;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromh;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromh;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsToh;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsToh;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsToh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsToh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsToh;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsToh;
 
-	SPtr<EsoTwist3D> fFrom, hFrom;
+    SPtr<EsoTwist3D> fFrom, hFrom;
     SPtr<EsoTwist3D> fTo, hTo;
 
     SPtr<PressureFieldArray3D> pressureFrom, pressureTo;
@@ -82,87 +82,89 @@ private:
 //////////////////////////////////////////////////////////////////////////
 inline void TwoDistributionsDoubleGhostLayerFullDirectConnector::updatePointers()
 {
-    localDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getLocalDistributions();
-    nonLocalDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getNonLocalDistributions();
-    zeroDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getZeroDistributions();
+    localDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getLocalDistributions();
+    nonLocalDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getNonLocalDistributions();
+    zeroDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getZeroDistributions();
 
-    localDistributionsTof    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getLocalDistributions();
-    nonLocalDistributionsTof = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getNonLocalDistributions();
-    zeroDistributionsTof     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getZeroDistributions();
+    localDistributionsTof    = dynamicPointerCast<EsoSplit>(this->fTo)->getLocalDistributions();
+    nonLocalDistributionsTof = dynamicPointerCast<EsoSplit>(this->fTo)->getNonLocalDistributions();
+    zeroDistributionsTof     = dynamicPointerCast<EsoSplit>(this->fTo)->getZeroDistributions();
 
-    localDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getLocalDistributions();
-    nonLocalDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getNonLocalDistributions();
-    zeroDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getZeroDistributions();
+    localDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getLocalDistributions();
+    nonLocalDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getNonLocalDistributions();
+    zeroDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getZeroDistributions();
 
-    localDistributionsToh    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getLocalDistributions();
-    nonLocalDistributionsToh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getNonLocalDistributions();
-    zeroDistributionsToh     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getZeroDistributions();
+    localDistributionsToh    = dynamicPointerCast<EsoSplit>(this->hTo)->getLocalDistributions();
+    nonLocalDistributionsToh = dynamicPointerCast<EsoSplit>(this->hTo)->getNonLocalDistributions();
+    zeroDistributionsToh     = dynamicPointerCast<EsoSplit>(this->hTo)->getZeroDistributions();
 }
 //////////////////////////////////////////////////////////////////////////
 inline void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To)
 {
-	(*this->localDistributionsTof)(D3Q27System::ET_E, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_E, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_N, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_N, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_T, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_T, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_NE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_NE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TN, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TN, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TNE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
-
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_W, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_S, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_B, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
-
-	(*this->zeroDistributionsTof)(x1To, x2To, x3To) = (*this->zeroDistributionsFromf)(x1From, x2From, x3From);
-
-
-	(*this->localDistributionsToh)(D3Q27System::ET_E, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_E, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_N, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_N, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_T, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_T, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_NE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_NE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TN, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TN, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TNE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
-
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_W, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_S, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_B, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
-
-	(*this->zeroDistributionsToh)(x1To, x2To, x3To) = (*this->zeroDistributionsFromh)(x1From, x2From, x3From);
+    using namespace vf::lbm::dir;
+
+    (*this->localDistributionsTof)(eP00, x1To, x2To, x3To) = (*this->localDistributionsFromf)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e0P0, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e00P, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(ePP0, x1To, x2To, x3To) = (*this->localDistributionsFromf)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eMP0, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(eP0P, x1To, x2To, x3To) = (*this->localDistributionsFromf)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eM0P, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(e0PP, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e0MP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsTof)(ePPP, x1To, x2To, x3To) = (*this->localDistributionsFromf)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eMPP, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(ePMP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsTof)(eMMP, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromf)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsTof)(eM00, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromf)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsTof)(e0M0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(e00M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMM0, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(ePM0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(eM0M, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eP0M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(e0MM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(e0PM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMMM, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(ePMM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMPM, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(ePPM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(ePPM, x1From, x2From, x3From + 1);
+
+    (*this->zeroDistributionsTof)(x1To, x2To, x3To) = (*this->zeroDistributionsFromf)(x1From, x2From, x3From);
+
+
+    (*this->localDistributionsToh)(eP00, x1To, x2To, x3To) = (*this->localDistributionsFromh)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e0P0, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e00P, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(ePP0, x1To, x2To, x3To) = (*this->localDistributionsFromh)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eMP0, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(eP0P, x1To, x2To, x3To) = (*this->localDistributionsFromh)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eM0P, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(e0PP, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e0MP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh)(ePPP, x1To, x2To, x3To) = (*this->localDistributionsFromh)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eMPP, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(ePMP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh)(eMMP, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromh)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsToh)(eM00, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromh)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsToh)(e0M0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(e00M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMM0, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(ePM0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(eM0M, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eP0M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(e0MM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(e0PM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMMM, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(ePMM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMPM, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(ePPM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(ePPM, x1From, x2From, x3From + 1);
+
+    (*this->zeroDistributionsToh)(x1To, x2To, x3To) = (*this->zeroDistributionsFromh)(x1From, x2From, x3From);
 
     if (this->pressureTo) 
-		(*this->pressureTo)(x1To, x2To, x3To) = (*this->pressureFrom)(x1From, x2From, x3From);
+        (*this->pressureTo)(x1To, x2To, x3To) = (*this->pressureFrom)(x1From, x2From, x3From);
 }
 #endif
\ No newline at end of file
diff --git a/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h
index 67f896af34c8b7e7d7fa9c918236b5a435156c62..3944f09d6ca9379d1ff3cec9da4945e1579dfb09 100644
--- a/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h
+++ b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h
@@ -38,7 +38,7 @@
 
 #include "FullVectorConnector.h"
 #include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 #include "DataSet3D.h"
@@ -86,75 +86,77 @@ private:
 //////////////////////////////////////////////////////////////////////////
 inline void TwoDistributionsDoubleGhostLayerFullVectorConnector::updatePointers()
 {
-    localDistributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getLocalDistributions();
-    nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getNonLocalDistributions();
-    zeroDistributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getZeroDistributions();
+    localDistributions    = dynamicPointerCast<EsoSplit>(this->fDis)->getLocalDistributions();
+    nonLocalDistributions = dynamicPointerCast<EsoSplit>(this->fDis)->getNonLocalDistributions();
+    zeroDistributions     = dynamicPointerCast<EsoSplit>(this->fDis)->getZeroDistributions();
 
-    localHdistributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getLocalDistributions();
-    nonLocalHdistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getNonLocalDistributions();
-    zeroHdistributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getZeroDistributions();
+    localHdistributions    = dynamicPointerCast<EsoSplit>(this->hDis)->getLocalDistributions();
+    nonLocalHdistributions = dynamicPointerCast<EsoSplit>(this->hDis)->getNonLocalDistributions();
+    zeroHdistributions     = dynamicPointerCast<EsoSplit>(this->hDis)->getZeroDistributions();
 }
 //////////////////////////////////////////////////////////////////////////
 inline void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData(vector_type& sdata, int& index, int x1, int x2, int x3)
 {
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+   using namespace vf::lbm::dir;
+
+   sdata[index++] = (*this->localDistributions)(eP00, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0P0, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e00P, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(ePP0, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eMP0, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eP0P, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eM0P, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0PP, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0MP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localDistributions)(ePPP, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eMPP, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(ePMP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+   sdata[index++] = (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1);
 
    sdata[index++] = (*this->zeroDistributions)(x1, x2, x3);
 
 
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_E, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_N, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_T, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_NE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TN, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+   sdata[index++] = (*this->localHdistributions)(eP00, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0P0, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e00P, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(ePP0, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eMP0, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eP0P, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eM0P, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0PP, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0MP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localHdistributions)(ePPP, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eMPP, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(ePMP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localHdistributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+   sdata[index++] = (*this->nonLocalHdistributions)(eM00, x1 + 1, x2, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0M0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(e00M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMM0, x1 + 1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePM0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(eM0M, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eP0M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0MM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0PM, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePMM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMPM, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePPM, x1, x2, x3 + 1);
 
    sdata[index++] = (*this->zeroHdistributions)(x1, x2, x3);
 
@@ -164,64 +166,66 @@ inline void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData(vector
 //////////////////////////////////////////////////////////////////////////
 inline void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData(vector_type& rdata, int& index, int x1, int x2, int x3)
 {
-   (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
-
-   (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = rdata[index++];
+   using namespace vf::lbm::dir;
+
+   (*this->localDistributions)(eP00, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0P0, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e00P, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(ePP0, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eMP0, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eP0P, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eM0P, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0PP, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0MP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localDistributions)(ePPP, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eMPP, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(ePMP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
+
+   (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1) = rdata[index++];
 
    (*this->zeroDistributions)(x1, x2, x3) = rdata[index++];
 
    
-   (*this->localHdistributions)(D3Q27System::ET_E, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_N, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_T, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_NE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TN, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TNE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
-
-   (*this->nonLocalHdistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = rdata[index++];
+   (*this->localHdistributions)(eP00, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0P0, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e00P, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(ePP0, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eMP0, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eP0P, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eM0P, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0PP, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0MP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localHdistributions)(ePPP, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eMPP, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(ePMP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localHdistributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
+
+   (*this->nonLocalHdistributions)(eM00, x1 + 1, x2, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0M0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(e00M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMM0, x1 + 1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePM0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(eM0M, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eP0M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0MM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0PM, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePMM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMPM, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePPM, x1, x2, x3 + 1) = rdata[index++];
 
    (*this->zeroHdistributions)(x1, x2, x3) = rdata[index++];
 
diff --git a/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.cpp b/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.cpp
index 55c3ffd41a948255c33ce3711e7ed52b7ba823cc..85aff835ca5f9e63fe6a2398ff339ba323a4b224 100644
--- a/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.cpp
+++ b/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.cpp
@@ -45,8 +45,8 @@ void TwoDistributionsFullDirectConnector::init()
 {
     FullDirectConnector::init();
 
-	fFrom =dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getFdistributions());
-	fTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getFdistributions());
-	hFrom = dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getHdistributions());
-	hTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getHdistributions());
+    fFrom =dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getFdistributions());
+    fTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getFdistributions());
+    hFrom = dynamicPointerCast<EsoTwist3D>(from.lock()->getKernel()->getDataSet()->getHdistributions());
+    hTo = dynamicPointerCast<EsoTwist3D>(to.lock()->getKernel()->getDataSet()->getHdistributions());
 }
diff --git a/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.h b/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.h
index 625b8f6e3292cf4f56eab91536e5e9c8069b238d..e7e5e406660f9f2c7668f3d221a56d06753f6d19 100644
--- a/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.h
+++ b/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.h
@@ -37,7 +37,7 @@
 #include "FullDirectConnector.h"
 #include "Block3D.h"
 #include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 
@@ -47,7 +47,7 @@
 class TwoDistributionsFullDirectConnector : public FullDirectConnector
 {
 public:
-	TwoDistributionsFullDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to, int sendDir);
+    TwoDistributionsFullDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to, int sendDir);
     void init() override;
 
 protected:
@@ -55,106 +55,108 @@ protected:
     inline void exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To) override;
 
 private:
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromf;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromf;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromf;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromf;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromf;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromf;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsTof;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsTof;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsTof;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsTof;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsTof;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsTof;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromh;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsFromh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsFromh;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsFromh;
 
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsToh;
-	CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsToh;
-	CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsToh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsToh;
+    CbArray4D <real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsToh;
+    CbArray3D <real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsToh;
 
-	SPtr<EsoTwist3D>  fFrom, hFrom;
-	SPtr<EsoTwist3D>  fTo, hTo;
+    SPtr<EsoTwist3D>  fFrom, hFrom;
+    SPtr<EsoTwist3D>  fTo, hTo;
 };
 //////////////////////////////////////////////////////////////////////////
 inline void TwoDistributionsFullDirectConnector::updatePointers()
 {
-    localDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getLocalDistributions();
-    nonLocalDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getNonLocalDistributions();
-    zeroDistributionsFromf = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fFrom)->getZeroDistributions();
+    localDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getLocalDistributions();
+    nonLocalDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getNonLocalDistributions();
+    zeroDistributionsFromf = dynamicPointerCast<EsoSplit>(this->fFrom)->getZeroDistributions();
 
-    localDistributionsTof    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getLocalDistributions();
-    nonLocalDistributionsTof = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getNonLocalDistributions();
-    zeroDistributionsTof     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fTo)->getZeroDistributions();
+    localDistributionsTof    = dynamicPointerCast<EsoSplit>(this->fTo)->getLocalDistributions();
+    nonLocalDistributionsTof = dynamicPointerCast<EsoSplit>(this->fTo)->getNonLocalDistributions();
+    zeroDistributionsTof     = dynamicPointerCast<EsoSplit>(this->fTo)->getZeroDistributions();
 
-    localDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getLocalDistributions();
-    nonLocalDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getNonLocalDistributions();
-    zeroDistributionsFromh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hFrom)->getZeroDistributions();
+    localDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getLocalDistributions();
+    nonLocalDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getNonLocalDistributions();
+    zeroDistributionsFromh = dynamicPointerCast<EsoSplit>(this->hFrom)->getZeroDistributions();
 
-    localDistributionsToh    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getLocalDistributions();
-    nonLocalDistributionsToh = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getNonLocalDistributions();
-    zeroDistributionsToh     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hTo)->getZeroDistributions();
+    localDistributionsToh    = dynamicPointerCast<EsoSplit>(this->hTo)->getLocalDistributions();
+    nonLocalDistributionsToh = dynamicPointerCast<EsoSplit>(this->hTo)->getNonLocalDistributions();
+    zeroDistributionsToh     = dynamicPointerCast<EsoSplit>(this->hTo)->getZeroDistributions();
 }
 //////////////////////////////////////////////////////////////////////////
 inline void TwoDistributionsFullDirectConnector::exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To)
 {
-	(*this->localDistributionsTof)(D3Q27System::ET_E, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_E, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_N, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_N, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_T, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_T, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_NE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_NE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TN, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TN, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TNE, x1To, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-	(*this->localDistributionsTof)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromf)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
-
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_W, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_S, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_B, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsTof)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
-
-	(*this->zeroDistributionsTof)(x1To, x2To, x3To) = (*this->zeroDistributionsFromf)(x1From, x2From, x3From);
-
-
-	(*this->localDistributionsToh)(D3Q27System::ET_E, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_E, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_N, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_N, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_T, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_T, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_NE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_NE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_NW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_NW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TN, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TN, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TS, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TS, x1From, x2From + 1, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TNE, x1To, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TNE, x1From, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TNW, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TNW, x1From + 1, x2From, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TSE, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TSE, x1From, x2From + 1, x3From);
-	(*this->localDistributionsToh)(D3Q27System::ET_TSW, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromh)(D3Q27System::ET_TSW, x1From + 1, x2From + 1, x3From);
-
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_W, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_W, x1From + 1, x2From, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_S, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_S, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_B, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_B, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_SW, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_SW, x1From + 1, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_SE, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_SE, x1From, x2From + 1, x3From);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BE, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BS, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BS, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BN, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BN, x1From, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BSW, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BSW, x1From + 1, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BSE, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BSE, x1From, x2From + 1, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BNW, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BNW, x1From + 1, x2From, x3From + 1);
-	(*this->nonLocalDistributionsToh)(D3Q27System::ET_BNE, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(D3Q27System::ET_BNE, x1From, x2From, x3From + 1);
-
-	(*this->zeroDistributionsToh)(x1To, x2To, x3To) = (*this->zeroDistributionsFromh)(x1From, x2From, x3From);
+    using namespace vf::lbm::dir;
+
+    (*this->localDistributionsTof)(eP00, x1To, x2To, x3To) = (*this->localDistributionsFromf)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e0P0, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e00P, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(ePP0, x1To, x2To, x3To) = (*this->localDistributionsFromf)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eMP0, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(eP0P, x1To, x2To, x3To) = (*this->localDistributionsFromf)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eM0P, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(e0PP, x1To, x2To, x3To) = (*this->localDistributionsFromf)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(e0MP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsTof)(ePPP, x1To, x2To, x3To) = (*this->localDistributionsFromf)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsTof)(eMPP, x1To + 1, x2To, x3To) = (*this->localDistributionsFromf)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsTof)(ePMP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromf)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsTof)(eMMP, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromf)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsTof)(eM00, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromf)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsTof)(e0M0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(e00M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMM0, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(ePM0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromf)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsTof)(eM0M, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eP0M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(e0MM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(e0PM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMMM, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(ePMM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromf)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsTof)(eMPM, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsTof)(ePPM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromf)(ePPM, x1From, x2From, x3From + 1);
+
+    (*this->zeroDistributionsTof)(x1To, x2To, x3To) = (*this->zeroDistributionsFromf)(x1From, x2From, x3From);
+
+
+    (*this->localDistributionsToh)(eP00, x1To, x2To, x3To) = (*this->localDistributionsFromh)(eP00, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e0P0, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e0P0, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e00P, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e00P, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(ePP0, x1To, x2To, x3To) = (*this->localDistributionsFromh)(ePP0, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eMP0, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eMP0, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(eP0P, x1To, x2To, x3To) = (*this->localDistributionsFromh)(eP0P, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eM0P, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eM0P, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(e0PP, x1To, x2To, x3To) = (*this->localDistributionsFromh)(e0PP, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(e0MP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(e0MP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh)(ePPP, x1To, x2To, x3To) = (*this->localDistributionsFromh)(ePPP, x1From, x2From, x3From);
+    (*this->localDistributionsToh)(eMPP, x1To + 1, x2To, x3To) = (*this->localDistributionsFromh)(eMPP, x1From + 1, x2From, x3From);
+    (*this->localDistributionsToh)(ePMP, x1To, x2To + 1, x3To) = (*this->localDistributionsFromh)(ePMP, x1From, x2From + 1, x3From);
+    (*this->localDistributionsToh)(eMMP, x1To + 1, x2To + 1, x3To) = (*this->localDistributionsFromh)(eMMP, x1From + 1, x2From + 1, x3From);
+
+    (*this->nonLocalDistributionsToh)(eM00, x1To + 1, x2To, x3To) = (*this->nonLocalDistributionsFromh)(eM00, x1From + 1, x2From, x3From);
+    (*this->nonLocalDistributionsToh)(e0M0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(e0M0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(e00M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(e00M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMM0, x1To + 1, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(eMM0, x1From + 1, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(ePM0, x1To, x2To + 1, x3To) = (*this->nonLocalDistributionsFromh)(ePM0, x1From, x2From + 1, x3From);
+    (*this->nonLocalDistributionsToh)(eM0M, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eM0M, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eP0M, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eP0M, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(e0MM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(e0MM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(e0PM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(e0PM, x1From, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMMM, x1To + 1, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(eMMM, x1From + 1, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(ePMM, x1To, x2To + 1, x3To + 1) = (*this->nonLocalDistributionsFromh)(ePMM, x1From, x2From + 1, x3From + 1);
+    (*this->nonLocalDistributionsToh)(eMPM, x1To + 1, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(eMPM, x1From + 1, x2From, x3From + 1);
+    (*this->nonLocalDistributionsToh)(ePPM, x1To, x2To, x3To + 1) = (*this->nonLocalDistributionsFromh)(ePPM, x1From, x2From, x3From + 1);
+
+    (*this->zeroDistributionsToh)(x1To, x2To, x3To) = (*this->zeroDistributionsFromh)(x1From, x2From, x3From);
 }
 #endif
\ No newline at end of file
diff --git a/src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.h b/src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.h
index b2cb384d652273aee82c992c50d4df9b1e46a4e9..81c3e9950cac0e4f20525c8f8756a55888181362 100644
--- a/src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.h
+++ b/src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.h
@@ -38,7 +38,7 @@
 
 #include "FullVectorConnector.h"
 #include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 
@@ -79,75 +79,77 @@ private:
 //////////////////////////////////////////////////////////////////////////
 inline void TwoDistributionsFullVectorConnector::updatePointers()
 {
-    localDistributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getLocalDistributions();
-    nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getNonLocalDistributions();
-    zeroDistributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->fDis)->getZeroDistributions();
+    localDistributions    = dynamicPointerCast<EsoSplit>(this->fDis)->getLocalDistributions();
+    nonLocalDistributions = dynamicPointerCast<EsoSplit>(this->fDis)->getNonLocalDistributions();
+    zeroDistributions     = dynamicPointerCast<EsoSplit>(this->fDis)->getZeroDistributions();
 
-    localHdistributions    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getLocalDistributions();
-    nonLocalHdistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getNonLocalDistributions();
-    zeroHdistributions     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(this->hDis)->getZeroDistributions();
+    localHdistributions    = dynamicPointerCast<EsoSplit>(this->hDis)->getLocalDistributions();
+    nonLocalHdistributions = dynamicPointerCast<EsoSplit>(this->hDis)->getNonLocalDistributions();
+    zeroHdistributions     = dynamicPointerCast<EsoSplit>(this->hDis)->getZeroDistributions();
 }
 //////////////////////////////////////////////////////////////////////////
 inline void TwoDistributionsFullVectorConnector::fillData(vector_type& sdata, int& index, int x1, int x2, int x3)
 {
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+   using namespace vf::lbm::dir;
+
+   sdata[index++] = (*this->localDistributions)(eP00, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0P0, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e00P, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(ePP0, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eMP0, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eP0P, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eM0P, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0PP, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(e0MP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localDistributions)(ePPP, x1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(eMPP, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localDistributions)(ePMP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+   sdata[index++] = (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1);
 
    sdata[index++] = (*this->zeroDistributions)(x1, x2, x3);
 
 
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_E, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_N, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_T, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_NE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TN, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->localHdistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-   sdata[index++] = (*this->nonLocalHdistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
+   sdata[index++] = (*this->localHdistributions)(eP00, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0P0, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e00P, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(ePP0, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eMP0, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eP0P, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eM0P, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0PP, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(e0MP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localHdistributions)(ePPP, x1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(eMPP, x1 + 1, x2, x3);
+   sdata[index++] = (*this->localHdistributions)(ePMP, x1, x2 + 1, x3);
+   sdata[index++] = (*this->localHdistributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+   sdata[index++] = (*this->nonLocalHdistributions)(eM00, x1 + 1, x2, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0M0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(e00M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMM0, x1 + 1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePM0, x1, x2 + 1, x3);
+   sdata[index++] = (*this->nonLocalHdistributions)(eM0M, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eP0M, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0MM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(e0PM, x1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePMM, x1, x2 + 1, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(eMPM, x1 + 1, x2, x3 + 1);
+   sdata[index++] = (*this->nonLocalHdistributions)(ePPM, x1, x2, x3 + 1);
 
    sdata[index++] = (*this->zeroHdistributions)(x1, x2, x3);
 
@@ -155,64 +157,66 @@ inline void TwoDistributionsFullVectorConnector::fillData(vector_type& sdata, in
 //////////////////////////////////////////////////////////////////////////
 inline void TwoDistributionsFullVectorConnector::distributeData(vector_type& rdata, int& index, int x1, int x2, int x3)
 {
-   (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
-
-   (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = rdata[index++];
+   using namespace vf::lbm::dir;
+
+   (*this->localDistributions)(eP00, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0P0, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e00P, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(ePP0, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eMP0, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eP0P, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eM0P, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0PP, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(e0MP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localDistributions)(ePPP, x1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(eMPP, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localDistributions)(ePMP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
+
+   (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1) = rdata[index++];
 
    (*this->zeroDistributions)(x1, x2, x3) = rdata[index++];
 
    
-   (*this->localHdistributions)(D3Q27System::ET_E, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_N, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_T, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_NE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TN, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TNE, x1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->localHdistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = rdata[index++];
-
-   (*this->nonLocalHdistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = rdata[index++];
-   (*this->nonLocalHdistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = rdata[index++];
+   (*this->localHdistributions)(eP00, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0P0, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e00P, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(ePP0, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eMP0, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eP0P, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eM0P, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0PP, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(e0MP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localHdistributions)(ePPP, x1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(eMPP, x1 + 1, x2, x3) = rdata[index++];
+   (*this->localHdistributions)(ePMP, x1, x2 + 1, x3) = rdata[index++];
+   (*this->localHdistributions)(eMMP, x1 + 1, x2 + 1, x3) = rdata[index++];
+
+   (*this->nonLocalHdistributions)(eM00, x1 + 1, x2, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0M0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(e00M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMM0, x1 + 1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePM0, x1, x2 + 1, x3) = rdata[index++];
+   (*this->nonLocalHdistributions)(eM0M, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eP0M, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0MM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(e0PM, x1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePMM, x1, x2 + 1, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(eMPM, x1 + 1, x2, x3 + 1) = rdata[index++];
+   (*this->nonLocalHdistributions)(ePPM, x1, x2, x3 + 1) = rdata[index++];
 
    (*this->zeroHdistributions)(x1, x2, x3) = rdata[index++];
 }
diff --git a/src/cpu/core/Data/D3Q27EsoTwist3DSoA.cpp b/src/cpu/core/Data/D3Q27EsoTwist3DSoA.cpp
deleted file mode 100644
index 14d5904ebbf30dd6b3d5694cd89c6753357536f6..0000000000000000000000000000000000000000
--- a/src/cpu/core/Data/D3Q27EsoTwist3DSoA.cpp
+++ /dev/null
@@ -1,616 +0,0 @@
-#include "D3Q27EsoTwist3DSoA.h"
-#include "EsoTwistD3Q27System.h"
-#include <D3Q27System.h>
-
-D3Q27EsoTwist3DSoA::D3Q27EsoTwist3DSoA() = default;
-//////////////////////////////////////////////////////////////////////////
-D3Q27EsoTwist3DSoA::D3Q27EsoTwist3DSoA(const size_t &nx1, const size_t &nx2, const size_t &nx3, real value)
-{
-    this->NX1 = nx1;
-    this->NX2 = nx2;
-    this->NX3 = nx3;
-
-    d.E = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.W = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.N = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.S = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.T = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.B = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.NE = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.SW = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.SE = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.NW = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.TE = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.BW = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.BE = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.TW = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.TN = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.BS = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.BN = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.TS = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.TNE = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.TNW = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.TSE = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.TSW = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.BNE = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.BNW = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.BSE = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.BSW = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(
-        new CbArray3D<real, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value));
-    d.REST =
-        CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx1, nx2, nx3, value));
-}
-//////////////////////////////////////////////////////////////////////////
-D3Q27EsoTwist3DSoA::~D3Q27EsoTwist3DSoA() = default;
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::swap()
-{
-    std::swap(d.E, d.W);
-    std::swap(d.N, d.S);
-    std::swap(d.T, d.B);
-    std::swap(d.NE, d.SW);
-    std::swap(d.NW, d.SE);
-    std::swap(d.TE, d.BW);
-    std::swap(d.TW, d.BE);
-    std::swap(d.TN, d.BS);
-    std::swap(d.TS, d.BN);
-    std::swap(d.TNE, d.BSW);
-    std::swap(d.TNW, d.BSE);
-    std::swap(d.TSE, d.BNW);
-    std::swap(d.TSW, d.BNE);
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3)
-{
-    using namespace vf::lbm::dir;
-
-    size_t x1p = x1 + 1;
-    size_t x2p = x2 + 1;
-    size_t x3p = x3 + 1;
-
-    f[dP00]   = (*d.E)(x1, x2, x3);
-    f[d0P0]   = (*d.N)(x1, x2, x3);
-    f[d00P]   = (*d.T)(x1, x2, x3);
-    f[dPP0]  = (*d.NE)(x1, x2, x3);
-    f[dMP0]  = (*d.NW)(x1p, x2, x3);
-    f[dP0P]  = (*d.TE)(x1, x2, x3);
-    f[dM0P]  = (*d.TW)(x1p, x2, x3);
-    f[d0PP]  = (*d.TN)(x1, x2, x3);
-    f[d0MP]  = (*d.TS)(x1, x2p, x3);
-    f[dPPP] = (*d.TNE)(x1, x2, x3);
-    f[dMPP] = (*d.TNW)(x1p, x2, x3);
-    f[dPMP] = (*d.TSE)(x1, x2p, x3);
-    f[dMMP] = (*d.TSW)(x1p, x2p, x3);
-
-    f[dM00]   = (*d.W)(x1p, x2, x3);
-    f[d0M0]   = (*d.S)(x1, x2p, x3);
-    f[d00M]   = (*d.B)(x1, x2, x3p);
-    f[dMM0]  = (*d.SW)(x1p, x2p, x3);
-    f[dPM0]  = (*d.SE)(x1, x2p, x3);
-    f[dM0M]  = (*d.BW)(x1p, x2, x3p);
-    f[dP0M]  = (*d.BE)(x1, x2, x3p);
-    f[d0MM]  = (*d.BS)(x1, x2p, x3p);
-    f[d0PM]  = (*d.BN)(x1, x2, x3p);
-    f[dMMM] = (*d.BSW)(x1p, x2p, x3p);
-    f[dPMM] = (*d.BSE)(x1, x2p, x3p);
-    f[dMPM] = (*d.BNW)(x1p, x2, x3p);
-    f[dPPM] = (*d.BNE)(x1, x2, x3p);
-
-    f[d000] = (*d.REST)(x1, x2, x3);
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
-{
-    using namespace vf::lbm::dir;
-
-    size_t x1p = x1 + 1;
-    size_t x2p = x2 + 1;
-    size_t x3p = x3 + 1;
-
-    (*d.E)(x1, x2, x3)     = f[iP00];
-    (*d.N)(x1, x2, x3)     = f[i0P0];
-    (*d.T)(x1, x2, x3)     = f[i00P];
-    (*d.NE)(x1, x2, x3)    = f[iPP0];
-    (*d.NW)(x1p, x2, x3)   = f[iMP0];
-    (*d.TE)(x1, x2, x3)    = f[iP0P];
-    (*d.TW)(x1p, x2, x3)   = f[iM0P];
-    (*d.TN)(x1, x2, x3)    = f[i0PP];
-    (*d.TS)(x1, x2p, x3)   = f[i0MP];
-    (*d.TNE)(x1, x2, x3)   = f[iPPP];
-    (*d.TNW)(x1p, x2, x3)  = f[iMPP];
-    (*d.TSE)(x1, x2p, x3)  = f[iPMP];
-    (*d.TSW)(x1p, x2p, x3) = f[iMMP];
-
-    (*d.W)(x1p, x2, x3)     = f[iM00];
-    (*d.S)(x1, x2p, x3)     = f[i0M0];
-    (*d.B)(x1, x2, x3p)     = f[i00M];
-    (*d.SW)(x1p, x2p, x3)   = f[iMM0];
-    (*d.SE)(x1, x2p, x3)    = f[iPM0];
-    (*d.BW)(x1p, x2, x3p)   = f[iM0M];
-    (*d.BE)(x1, x2, x3p)    = f[iP0M];
-    (*d.BS)(x1, x2p, x3p)   = f[i0MM];
-    (*d.BN)(x1, x2, x3p)    = f[i0PM];
-    (*d.BSW)(x1p, x2p, x3p) = f[iMMM];
-    (*d.BSE)(x1, x2p, x3p)  = f[iPMM];
-    (*d.BNW)(x1p, x2, x3p)  = f[iMPM];
-    (*d.BNE)(x1, x2, x3p)   = f[iPPM];
-
-    (*d.REST)(x1, x2, x3) = f[d000];
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3)
-{
-    using namespace vf::lbm::dir;
-
-    f[iP00]   = (*d.E)(x1, x2, x3);
-    f[i0P0]   = (*d.N)(x1, x2, x3);
-    f[i00P]   = (*d.T)(x1, x2, x3);
-    f[iPP0]  = (*d.NE)(x1, x2, x3);
-    f[iMP0]  = (*d.NW)(x1 + 1, x2, x3);
-    f[iP0P]  = (*d.TE)(x1, x2, x3);
-    f[iM0P]  = (*d.TW)(x1 + 1, x2, x3);
-    f[i0PP]  = (*d.TN)(x1, x2, x3);
-    f[i0MP]  = (*d.TS)(x1, x2 + 1, x3);
-    f[iPPP] = (*d.TNE)(x1, x2, x3);
-    f[iMPP] = (*d.TNW)(x1 + 1, x2, x3);
-    f[iPMP] = (*d.TSE)(x1, x2 + 1, x3);
-    f[iMMP] = (*d.TSW)(x1 + 1, x2 + 1, x3);
-
-    f[iM00]   = (*d.W)(x1 + 1, x2, x3);
-    f[i0M0]   = (*d.S)(x1, x2 + 1, x3);
-    f[i00M]   = (*d.B)(x1, x2, x3 + 1);
-    f[iMM0]  = (*d.SW)(x1 + 1, x2 + 1, x3);
-    f[iPM0]  = (*d.SE)(x1, x2 + 1, x3);
-    f[iM0M]  = (*d.BW)(x1 + 1, x2, x3 + 1);
-    f[iP0M]  = (*d.BE)(x1, x2, x3 + 1);
-    f[i0MM]  = (*d.BS)(x1, x2 + 1, x3 + 1);
-    f[i0PM]  = (*d.BN)(x1, x2, x3 + 1);
-    f[iMMM] = (*d.BSW)(x1 + 1, x2 + 1, x3 + 1);
-    f[iPMM] = (*d.BSE)(x1, x2 + 1, x3 + 1);
-    f[iMPM] = (*d.BNW)(x1 + 1, x2, x3 + 1);
-    f[iPPM] = (*d.BNE)(x1, x2, x3 + 1);
-
-    f[d000] = (*d.REST)(x1, x2, x3);
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
-{
-    //(*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[D3Q27System::dP00];
-    //(*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[D3Q27System::d0P0];
-    //(*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[D3Q27System::d00P];
-    //(*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[D3Q27System::dPP0];
-    //(*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f[D3Q27System::dMP0];
-    //(*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[D3Q27System::dP0P];
-    //(*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f[D3Q27System::dM0P];
-    //(*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[D3Q27System::d0PP];
-    //(*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f[D3Q27System::d0MP];
-    //(*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[D3Q27System::dPPP];
-    //(*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f[D3Q27System::dMPP];
-    //(*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f[D3Q27System::dPMP];
-    //(*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::dMMP];
-
-    //(*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f[D3Q27System::dM00 ];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f[D3Q27System::d0M0 ];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f[D3Q27System::d00M ];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f[D3Q27System::dMM0];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f[D3Q27System::dPM0];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f[D3Q27System::dM0M];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f[D3Q27System::dP0M];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f[D3Q27System::d0MM];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f[D3Q27System::d0PM];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::BSW];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f[D3Q27System::BSE];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f[D3Q27System::BNW];
-    //(*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1) = f[D3Q27System::DIR_DIR_PPM];
-
-    //(*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST];
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
-                                                     unsigned long int direction)
-{
-    // bool directionFlag = false;
-    // if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f[D3Q27System::dP00]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW)
-    //   (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[D3Q27System::dM00]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS)
-    //   (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[D3Q27System::d0M0]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f[D3Q27System::d0P0]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB)
-    //   (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[D3Q27System::d00M]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f[D3Q27System::d00P]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW)
-    //   (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[D3Q27System::dMM0]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f[D3Q27System::dPP0]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f[D3Q27System::dMP0]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE)
-    //   (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f[D3Q27System::dPM0]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW)
-    //   (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[D3Q27System::dM0M]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f[D3Q27System::dP0P]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f[D3Q27System::dM0P]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE)
-    //   (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f[D3Q27System::dP0M]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS)
-    //   (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[D3Q27System::d0MM]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f[D3Q27System::d0PP]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f[D3Q27System::d0MP]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN)
-    //   (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f[D3Q27System::d0PM]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW)
-    //   (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[D3Q27System::BSW]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::dPPP]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE)
-    //   (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f[D3Q27System::BSE]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f[D3Q27System::dMPP]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW)
-    //   (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f[D3Q27System::BNW]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f[D3Q27System::dPMP]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE)
-    //   (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::DIR_DIR_PPM]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW)
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1) = f[D3Q27System::dMMP]; directionFlag=true;
-    // if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST)
-    //   (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; directionFlag=true;
-    //#ifdef _DEBUG
-    //   if(!directionFlag)UB_THROW( UbException(UB_EXARGS, "Direction didn't find") );
-    //#endif //DEBUG
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction)
-{
-    // switch (direction)
-    //{
-    // case D3Q27System::dP00 :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f;
-    //   break;
-    // case D3Q27System::dM00 :
-    //   (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::d0M0 :
-    //   (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::d0P0 :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f;
-    //   break;
-    // case D3Q27System::d00M :
-    //   (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::d00P :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f;
-    //   break;
-    // case D3Q27System::dMM0 :
-    //   (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dPP0 :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f;
-    //   break;
-    // case D3Q27System::dMP0 :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f;
-    //   break;
-    // case D3Q27System::dPM0 :
-    //   (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dM0M :
-    //   (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dP0P :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f;
-    //   break;
-    // case D3Q27System::dM0P :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f;
-    //   break;
-    // case D3Q27System::dP0M :
-    //   (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f;
-    //   break;
-    // case D3Q27System::d0MM :
-    //   (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::d0PP :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f;
-    //   break;
-    // case D3Q27System::d0MP :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f;
-    //   break;
-    // case D3Q27System::d0PM :
-    //   (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f;
-    //   break;
-    // case D3Q27System::BSW :
-    //   (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dPPP :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f;
-    //   break;
-    // case D3Q27System::BSE :
-    //   (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dMPP :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f;
-    //   break;
-    // case D3Q27System::BNW :
-    //   (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f;
-    //   break;
-    // case D3Q27System::dPMP :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f;
-    //   break;
-    // case D3Q27System::DIR_DIR_PPM :
-    //   (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f;
-    //   break;
-    // case D3Q27System::dMMP :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1) = f;
-    //   break;
-    // case D3Q27System::REST :
-    //   (*this->zeroDistributions)(x1,x2,x3) = f;
-    //   break;
-    // default:
-    //   UB_THROW( UbException(UB_EXARGS, "Direction didn't find") );
-    //}
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
-                                                        unsigned long int direction)
-{
-    //   bool directionFlag = false;
-    //   if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE)
-    //      (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[D3Q27System::dP00]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f[D3Q27System::dM00]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f[D3Q27System::d0M0]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN)
-    //      (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[D3Q27System::d0P0]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f[D3Q27System::d00M]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT)
-    //      (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[D3Q27System::d00P]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f[D3Q27System::dMM0]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE)
-    //      (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[D3Q27System::dPP0]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW)
-    //      (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f[D3Q27System::dMP0]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f[D3Q27System::dPM0]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f[D3Q27System::dM0M]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE)
-    //      (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[D3Q27System::dP0P]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW)
-    //      (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f[D3Q27System::dM0P]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f[D3Q27System::dP0M]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f[D3Q27System::d0MM]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN)
-    //      (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[D3Q27System::d0PP]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS)
-    //      (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f[D3Q27System::d0MP]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f[D3Q27System::d0PM]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::BSW];
-    //      directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE)
-    //      (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[D3Q27System::dPPP]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f[D3Q27System::BSE];
-    //      directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW)
-    //      (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f[D3Q27System::dMPP]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f[D3Q27System::BNW];
-    //      directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE)
-    //      (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f[D3Q27System::dPMP]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE)
-    //      (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1)= f[D3Q27System::DIR_DIR_PPM]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW)
-    //      (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::dMMP]; directionFlag=true;
-    //   if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST)
-    //      (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; directionFlag=true;
-    //#ifdef _DEBUG
-    //   if(!directionFlag)UB_THROW( UbException(UB_EXARGS, "Direction didn't find") );
-    //#endif //DEBUG
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSoA::setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
-                                                        unsigned long int direction)
-{
-    // switch (direction)
-    //{
-    // case D3Q27System::dP00 :
-    //   (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dM00 :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    ) = f;
-    //   break;
-    // case D3Q27System::d0M0 :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    ) = f;
-    //   break;
-    // case D3Q27System::d0P0 :
-    //   (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::d00M :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  ) = f;
-    //   break;
-    // case D3Q27System::d00P :
-    //   (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dMM0 :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   ) = f;
-    //   break;
-    // case D3Q27System::dPP0 :
-    //   (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dMP0 :
-    //   (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dPM0 :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   ) = f;
-    //   break;
-    // case D3Q27System::dM0M :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 ) = f;
-    //   break;
-    // case D3Q27System::dP0P :
-    //   (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dM0P :
-    //   (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3) = f;
-    //   break;
-    // case D3Q27System::dP0M :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 ) = f;
-    //   break;
-    // case D3Q27System::d0MM :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 ) = f;
-    //   break;
-    // case D3Q27System::d0PP :
-    //   (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::d0MP :
-    //   (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3) = f;
-    //   break;
-    // case D3Q27System::d0PM :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 ) = f;
-    //   break;
-    // case D3Q27System::BSW :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f;
-    //   break;
-    // case D3Q27System::dPPP :
-    //   (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f;
-    //   break;
-    // case D3Q27System::BSE :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1) = f;
-    //   break;
-    // case D3Q27System::dMPP :
-    //   (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3) = f;
-    //   break;
-    // case D3Q27System::BNW :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1) = f;
-    //   break;
-    // case D3Q27System::dPMP :
-    //   (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3) = f;
-    //   break;
-    // case D3Q27System::DIR_DIR_PPM :
-    //   (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1) = f;
-    //   break;
-    // case D3Q27System::dMMP :
-    //   (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f;
-    //   break;
-    // case D3Q27System::REST :
-    //   (*this->zeroDistributions)(x1,x2,x3) = f;
-    //   break;
-    // default:
-    //   UB_THROW( UbException(UB_EXARGS, "Direction didn't find") );
-    //}
-}
-//////////////////////////////////////////////////////////////////////////
-real D3Q27EsoTwist3DSoA::getDistributionInvForDirection(size_t /*x1*/, size_t /*x2*/, size_t /*x3*/,
-                                                           int /*direction*/)
-{
-    // switch (direction)
-    //{
-    // case D3Q27System::dP00 :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2,  x3    );
-    // case D3Q27System::dM00 :
-    //   return (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3);
-    // case D3Q27System::d0M0 :
-    //   return (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3);
-    // case D3Q27System::d0P0 :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2+1,x3    );
-    // case D3Q27System::d00M :
-    //   return (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3);
-    // case D3Q27System::d00P :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3+1  );
-    // case D3Q27System::dMM0 :
-    //   return (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3);
-    // case D3Q27System::dPP0 :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3   );
-    // case D3Q27System::dMP0 :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2+1,x3   );
-    // case D3Q27System::dPM0 :
-    //   return (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2,  x3);
-    // case D3Q27System::dM0M :
-    //   return (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3);
-    // case D3Q27System::dP0P :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2,  x3+1 );
-    // case D3Q27System::dM0P :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3+1 );
-    // case D3Q27System::dP0M :
-    //   return (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2,  x3);
-    // case D3Q27System::d0MM :
-    //   return (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3);
-    // case D3Q27System::d0PP :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2+1,x3+1 );
-    // case D3Q27System::d0MP :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3+1 );
-    // case D3Q27System::d0PM :
-    //   return (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2+1,x3);
-    // case D3Q27System::BSW :
-    //   return (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3);
-    // case D3Q27System::dPPP :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1);
-    // case D3Q27System::BSE :
-    //   return (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2,  x3);
-    // case D3Q27System::dMPP :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2+1,x3+1);
-    // case D3Q27System::BNW :
-    //   return (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2+1,x3);
-    // case D3Q27System::dPMP :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2,  x3+1);
-    // case D3Q27System::DIR_DIR_PPM :
-    //   return (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3);
-    // case D3Q27System::dMMP :
-    //   return (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3+1);
-    // case D3Q27System::REST :
-    //   return (*this->zeroDistributions)(x1,x2,x3);
-    // default:
-    //   UB_THROW( UbException(UB_EXARGS, "Direction didn't find") );
-    //}
-    return 0;
-}
-//////////////////////////////////////////////////////////////////////////
-size_t D3Q27EsoTwist3DSoA::getNX1() const { return NX1; }
-//////////////////////////////////////////////////////////////////////////
-size_t D3Q27EsoTwist3DSoA::getNX2() const { return NX2; }
-//////////////////////////////////////////////////////////////////////////
-size_t D3Q27EsoTwist3DSoA::getNX3() const { return NX3; }
-//////////////////////////////////////////////////////////////////////////
-Distributions D3Q27EsoTwist3DSoA::getDistributions() { return d; }
-//////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/core/Data/D3Q27EsoTwist3DSoA.h b/src/cpu/core/Data/D3Q27EsoTwist3DSoA.h
deleted file mode 100644
index 503054373c0ef6cf7fbbc4bd24cf1d06c769995a..0000000000000000000000000000000000000000
--- a/src/cpu/core/Data/D3Q27EsoTwist3DSoA.h
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef D3Q27EsoTwist3DSoA_h
-#define D3Q27EsoTwist3DSoA_h
-
-#include "EsoTwist3D.h"
-//#include "D3Q27System.h"
-//#include "basics/container/CbArray4D.h"
-#include <basics/container/CbArray3D.h>
-//#include <boost/serialization/serialization.hpp>
-//#include <boost/serialization/base_object.hpp>
-
-struct Distributions {
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr E;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr W;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr N;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr S;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr T;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr B;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr NE;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr SW;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr SE;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr NW;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr TE;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr BW;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr BE;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr TW;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr TN;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr BS;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr BN;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr TS;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr TNE;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr TNW;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr TSE;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr TSW;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr BNE;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr BNW;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr BSE;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr BSW;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr REST;
-};
-
-class D3Q27EsoTwist3DSoA : public EsoTwist3D
-{
-public:
-    D3Q27EsoTwist3DSoA();
-    D3Q27EsoTwist3DSoA(const size_t &nx1, const size_t &nx2, const size_t &nx3, real value);
-    //////////////////////////////////////////////////////////////////////////
-    ~D3Q27EsoTwist3DSoA() override;
-    //////////////////////////////////////////////////////////////////////////
-    void swap() override;
-    //////////////////////////////////////////////////////////////////////////
-    void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override;
-    //////////////////////////////////////////////////////////////////////////
-    void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override;
-    ////////////////////////////////////////////////////////////////////////
-    void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override;
-    //////////////////////////////////////////////////////////////////////////
-    void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override;
-    //////////////////////////////////////////////////////////////////////////
-    void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
-                                     unsigned long int direction) override;
-    //////////////////////////////////////////////////////////////////////////
-    void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override;
-    //////////////////////////////////////////////////////////////////////////
-    real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
-    //////////////////////////////////////////////////////////////////////////
-    void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
-                                        unsigned long int direction) override;
-    //////////////////////////////////////////////////////////////////////////
-    void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
-                                        unsigned long int direction) override;
-    //////////////////////////////////////////////////////////////////////////
-    real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
-    //////////////////////////////////////////////////////////////////////////
-    size_t getNX1() const override;
-    //////////////////////////////////////////////////////////////////////////
-    size_t getNX2() const override;
-    //////////////////////////////////////////////////////////////////////////
-    size_t getNX3() const override;
-    //////////////////////////////////////////////////////////////////////////
-    Distributions getDistributions();
-    //////////////////////////////////////////////////////////////////////////
-    void getDistributionAfterLastStep(real *const f, size_t x1, size_t x2, size_t x3);
-
-protected:
-    Distributions d;
-    size_t NX1, NX2, NX3;
-};
-
-#endif
diff --git a/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp
deleted file mode 100644
index f40adc2eab55c3292faaec698ff0bdb666adf13c..0000000000000000000000000000000000000000
--- a/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp
+++ /dev/null
@@ -1,675 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file D3Q27EsoTwist3DSplittedVector.cpp
-//! \ingroup Data
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "EsoTwistD3Q27System.h"
-
-D3Q27EsoTwist3DSplittedVector::D3Q27EsoTwist3DSplittedVector() = default;
-//////////////////////////////////////////////////////////////////////////
-D3Q27EsoTwist3DSplittedVector::D3Q27EsoTwist3DSplittedVector(size_t nx1, size_t nx2, size_t nx3, real value)
-{
-    this->NX1 = nx1;
-    this->NX2 = nx2;
-    this->NX3 = nx3;
-
-    this->localDistributions =
-        std::make_shared<CbArray4D<real, IndexerX4X3X2X1>>(13, nx1 + 1, nx2 + 1, nx3 + 1, value);
-    this->nonLocalDistributions =
-        std::make_shared<CbArray4D<real, IndexerX4X3X2X1>>(13, nx1 + 1, nx2 + 1, nx3 + 1, value);
-
-    this->zeroDistributions = std::make_shared<CbArray3D<real, IndexerX3X2X1>>(nx1, nx2, nx3, value);
-}
-//////////////////////////////////////////////////////////////////////////
-D3Q27EsoTwist3DSplittedVector::~D3Q27EsoTwist3DSplittedVector() = default;
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::swap() { std::swap(this->localDistributions, this->nonLocalDistributions); }
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3)
-{
-    const size_t x1p = x1 + 1;
-    const size_t x2p = x2 + 1;
-    const size_t x3p = x3 + 1;
-
-    f[vf::lbm::dir::dP00] = (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3);
-    f[vf::lbm::dir::d0P0] = (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3);
-    f[vf::lbm::dir::d00P] = (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3);
-    f[vf::lbm::dir::dPP0] = (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3);
-    f[vf::lbm::dir::dMP0] = (*this->localDistributions)(D3Q27System::ET_MP0, x1p, x2, x3);
-    f[vf::lbm::dir::dP0P] = (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3);
-    f[vf::lbm::dir::dM0P] = (*this->localDistributions)(D3Q27System::ET_M0P, x1p, x2, x3);
-    f[vf::lbm::dir::d0PP] = (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3);
-    f[vf::lbm::dir::d0MP] = (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2p, x3);
-    f[vf::lbm::dir::dPPP] = (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3);
-    f[vf::lbm::dir::dMPP] = (*this->localDistributions)(D3Q27System::ET_MPP, x1p, x2, x3);
-    f[vf::lbm::dir::dPMP] = (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2p, x3);
-    f[vf::lbm::dir::dMMP] = (*this->localDistributions)(D3Q27System::ET_MMP, x1p, x2p, x3);
-
-    f[vf::lbm::dir::dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1p, x2, x3);
-    f[vf::lbm::dir::d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2p, x3);
-    f[vf::lbm::dir::d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3p);
-    f[vf::lbm::dir::dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1p, x2p, x3);
-    f[vf::lbm::dir::dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2p, x3);
-    f[vf::lbm::dir::dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1p, x2, x3p);
-    f[vf::lbm::dir::dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3p);
-    f[vf::lbm::dir::d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2p, x3p);
-    f[vf::lbm::dir::d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3p);
-    f[vf::lbm::dir::dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1p, x2p, x3p);
-    f[vf::lbm::dir::dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2p, x3p);
-    f[vf::lbm::dir::dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1p, x2, x3p);
-    f[vf::lbm::dir::dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3p);
-
-    f[vf::lbm::dir::d000] = (*this->zeroDistributions)(x1, x2, x3);
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
-{
-    using namespace vf::lbm::dir;
-
-    (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3) = f[iP00];
-    (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3) = f[i0P0];
-    (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3) = f[i00P];
-    (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3) = f[iPP0];
-    (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3) = f[iMP0];
-    (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3) = f[iP0P];
-    (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3) = f[iM0P];
-    (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3) = f[i0PP];
-    (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3) = f[i0MP];
-    (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3) = f[iPPP];
-    (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3) = f[iMPP];
-    (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3) = f[iPMP];
-    (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3) = f[iMMP];
-
-    (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3) = f[iM00];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3) = f[i0M0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1) = f[i00M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3) = f[iMM0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3) = f[iPM0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1) = f[iM0M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1) = f[iP0M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1) = f[i0MM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1) = f[i0PM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1) = f[iMMM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1) = f[iPMM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1) = f[iMPM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1) = f[iPPM];
-
-    (*this->zeroDistributions)(x1, x2, x3) = f[d000];
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3)
-{
-    using namespace vf::lbm::dir;
-
-    f[iP00] = (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3);
-    f[i0P0] = (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3);
-    f[i00P] = (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3);
-    f[iPP0] = (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3);
-    f[iMP0] = (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3);
-    f[iP0P] = (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3);
-    f[iM0P] = (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3);
-    f[i0PP] = (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3);
-    f[i0MP] = (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3);
-    f[iPPP] = (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3);
-    f[iMPP] = (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3);
-    f[iPMP] = (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3);
-    f[iMMP] = (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3);
-
-    f[iM00] = (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3);
-    f[i0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3);
-    f[i00M] = (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1);
-    f[iMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3);
-    f[iPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3);
-    f[iM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1);
-    f[iP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1);
-    f[i0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1);
-    f[i0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1);
-    f[iMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1);
-    f[iPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1);
-    f[iMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1);
-    f[iPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1);
-
-    f[d000] = (*this->zeroDistributions)(x1, x2, x3);
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
-{
-    using namespace vf::lbm::dir;
-
-    (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3) = f[dP00];
-    (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3) = f[d0P0];
-    (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3) = f[d00P];
-    (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3) = f[dPP0];
-    (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3) = f[dMP0];
-    (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3) = f[dP0P];
-    (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3) = f[dM0P];
-    (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3) = f[d0PP];
-    (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3) = f[d0MP];
-    (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3) = f[dPPP];
-    (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3) = f[dMPP];
-    (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3) = f[dPMP];
-    (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3) = f[dMMP];
-
-    (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3) = f[dM00];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3) = f[d0M0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1) = f[d00M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3) = f[dMM0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3) = f[dPM0];
-    (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1) = f[dM0M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1) = f[dP0M];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1) = f[d0MM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1) = f[d0PM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1) = f[dMMM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1) = f[dPMM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1) = f[dMPM];
-    (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1) = f[dPPM];
-
-    (*this->zeroDistributions)(x1, x2, x3) = f[d000];
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
-                                                                unsigned long int direction)
-{
-    using namespace vf::lbm::dir;
-
-    if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[dP00];
-    if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW)
-        (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[dM00];
-    if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS)
-        (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[d0M0];
-    if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN)
-        (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[d0P0];
-    if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB)
-        (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[d00M];
-    if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT)
-        (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[d00P];
-    if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW)
-        (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[dMM0];
-    if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[dPP0];
-    if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[dMP0];
-    if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE)
-        (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[dPM0];
-    if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW)
-        (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[dM0M];
-    if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[dP0P];
-    if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[dM0P];
-    if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE)
-        (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[dP0M];
-    if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS)
-        (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[d0MM];
-    if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[d0PP];
-    if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[d0MP];
-    if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN)
-        (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[d0PM];
-    if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW)
-        (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[dMMM];
-    if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[dPPP];
-    if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE)
-        (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[dPMM];
-    if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[dMPP];
-    if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW)
-        (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[dMPM];
-    if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[dPMP];
-    if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE)
-        (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[dPPM];
-    if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[dMMP];
-    if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST)
-        (*this->zeroDistributions)(x1, x2, x3) = f[d000];
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
-                                                                int direction)
-{
-    using namespace vf::lbm::dir;
- 
-    switch (direction) {
-        case dP00:
-            (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f;
-            break;
-        case dM00:
-            (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f;
-            break;
-        case d0M0:
-            (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f;
-            break;
-        case d0P0:
-            (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f;
-            break;
-        case d00M:
-            (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f;
-            break;
-        case d00P:
-            (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f;
-            break;
-        case dMM0:
-            (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f;
-            break;
-        case dPP0:
-            (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f;
-            break;
-        case dMP0:
-            (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f;
-            break;
-        case dPM0:
-            (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f;
-            break;
-        case dM0M:
-            (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f;
-            break;
-        case dP0P:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f;
-            break;
-        case dM0P:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f;
-            break;
-        case dP0M:
-            (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f;
-            break;
-        case d0MM:
-            (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f;
-            break;
-        case d0PP:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f;
-            break;
-        case d0MP:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f;
-            break;
-        case d0PM:
-            (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f;
-            break;
-        case dMMM:
-            (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f;
-            break;
-        case dPPP:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f;
-            break;
-        case dPMM:
-            (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f;
-            break;
-        case dMPP:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f;
-            break;
-        case dMPM:
-            (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f;
-            break;
-        case dPMP:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f;
-            break;
-        case dPPM:
-            (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f;
-            break;
-        case dMMP:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f;
-            break;
-        case d000:
-            (*this->zeroDistributions)(x1, x2, x3) = f;
-            break;
-        default:
-            UB_THROW(UbException(UB_EXARGS, "Direction didn't find"));
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2,
-                                                                   size_t x3, unsigned long int direction)
-{
-    using namespace vf::lbm::dir;
-
-    if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE)
-        (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[dP00];
-    if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[dM00];
-    if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS)
-        (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[d0M0];
-    if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN)
-        (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[d0P0];
-    if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB)
-        (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[d00M];
-    if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT)
-        (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[d00P];
-    if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[dMM0];
-    if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE)
-        (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[dPP0];
-    if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW)
-        (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[dMP0];
-    if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[dPM0];
-    if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[dM0M];
-    if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE)
-        (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[dP0P];
-    if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW)
-        (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[dM0P];
-    if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[dP0M];
-    if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[d0MM];
-    if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN)
-        (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[d0PP];
-    if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS)
-        (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[d0MP];
-    if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[d0PM];
-    if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[dMMM];
-    if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE)
-        (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[dPPP];
-    if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[dPMM];
-    if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW)
-        (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[dMPP];
-    if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[dMPM];
-    if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE)
-        (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[dPMP];
-    if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE)
-        (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[dPPM];
-    if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW)
-        (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[dMMP];
-    if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST)
-        (*this->zeroDistributions)(x1, x2, x3) = f[d000];
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
-                                                                   unsigned long int direction)
-{
-    using namespace vf::lbm::dir;
-
-    switch (direction) {
-        case dP00:
-            (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f;
-            break;
-        case dM00:
-            (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f;
-            break;
-        case d0M0:
-            (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f;
-            break;
-        case d0P0:
-            (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f;
-            break;
-        case d00M:
-            (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f;
-            break;
-        case d00P:
-            (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f;
-            break;
-        case dMM0:
-            (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f;
-            break;
-        case dPP0:
-            (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f;
-            break;
-        case dMP0:
-            (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f;
-            break;
-        case dPM0:
-            (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f;
-            break;
-        case dM0M:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f;
-            break;
-        case dP0P:
-            (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f;
-            break;
-        case dM0P:
-            (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f;
-            break;
-        case dP0M:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f;
-            break;
-        case d0MM:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f;
-            break;
-        case d0PP:
-            (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f;
-            break;
-        case d0MP:
-            (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f;
-            break;
-        case d0PM:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f;
-            break;
-        case dMMM:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f;
-            break;
-        case dPPP:
-            (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f;
-            break;
-        case dPMM:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f;
-            break;
-        case dMPP:
-            (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f;
-            break;
-        case dMPM:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f;
-            break;
-        case dPMP:
-            (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f;
-            break;
-        case dPPM:
-            (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f;
-            break;
-        case dMMP:
-            (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f;
-            break;
-        case d000:
-            (*this->zeroDistributions)(x1, x2, x3) = f;
-            break;
-        default:
-            UB_THROW(UbException(UB_EXARGS, "Direction didn't find"));
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-real D3Q27EsoTwist3DSplittedVector::getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction)
-{
-    using namespace vf::lbm::dir;
-
-    switch (direction) {
-        case dM00:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-        case dP00:
-            return (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-        case d0P0:
-            return (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-        case d0M0:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-        case d00P:
-            return (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-        case d00M:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-        case dPP0:
-            return (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-        case dMM0:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-        case dPM0:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-        case dMP0:
-            return (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-        case dP0P:
-            return (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-        case dM0M:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-        case dP0M:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-        case dM0P:
-            return (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-        case d0PP:
-            return (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-        case d0MM:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-        case d0PM:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-        case d0MP:
-            return (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-        case dPPP:
-            return (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-        case dMMM:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-        case dMPP:
-            return (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-        case dPMM:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-        case dPMP:
-            return (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-        case dMPM:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-        case dMMP:
-            return (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-        case dPPM:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
-        case d000:
-            return (*this->zeroDistributions)(x1, x2, x3);
-        default:
-            UB_THROW(UbException(UB_EXARGS, "Direction didn't find"));
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-real D3Q27EsoTwist3DSplittedVector::getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction)
-{
-    using namespace vf::lbm::dir;
-
-    switch (direction) {
-        case dP00:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3);
-        case dM00:
-            return (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-        case d0M0:
-            return (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-        case d0P0:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3);
-        case d00M:
-            return (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-        case d00P:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1);
-        case dMM0:
-            return (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-        case dPP0:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3);
-        case dMP0:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3);
-        case dPM0:
-            return (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3);
-        case dM0M:
-            return (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-        case dP0P:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1);
-        case dM0P:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1);
-        case dP0M:
-            return (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3);
-        case d0MM:
-            return (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-        case d0PP:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1);
-        case d0MP:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1);
-        case d0PM:
-            return (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3);
-        case dMMM:
-            return (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-        case dPPP:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1);
-        case dPMM:
-            return (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3);
-        case dMPP:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1);
-        case dMPM:
-            return (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3);
-        case dPMP:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1);
-        case dPPM:
-            return (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3);
-        case dMMP:
-            return (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1);
-        case d000:
-            return (*this->zeroDistributions)(x1, x2, x3);
-        default:
-            UB_THROW(UbException(UB_EXARGS, "Direction didn't find"));
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-size_t D3Q27EsoTwist3DSplittedVector::getNX1() const { return NX1; }
-//////////////////////////////////////////////////////////////////////////
-size_t D3Q27EsoTwist3DSplittedVector::getNX2() const { return NX2; }
-//////////////////////////////////////////////////////////////////////////
-size_t D3Q27EsoTwist3DSplittedVector::getNX3() const { return NX3; }
-//////////////////////////////////////////////////////////////////////////
-CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr D3Q27EsoTwist3DSplittedVector::getLocalDistributions()
-{
-    return this->localDistributions;
-}
-//////////////////////////////////////////////////////////////////////////
-CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr D3Q27EsoTwist3DSplittedVector::getNonLocalDistributions()
-{
-    return this->nonLocalDistributions;
-}
-//////////////////////////////////////////////////////////////////////////
-CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr D3Q27EsoTwist3DSplittedVector::getZeroDistributions()
-{
-    return this->zeroDistributions;
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setNX1(size_t newNX1) { NX1 = newNX1; }
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setNX2(size_t newNX2) { NX2 = newNX2; }
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setNX3(size_t newNX3) { NX3 = newNX3; }
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr array)
-{
-    localDistributions = array;
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr array)
-{
-    nonLocalDistributions = array;
-}
-//////////////////////////////////////////////////////////////////////////
-void D3Q27EsoTwist3DSplittedVector::setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr array)
-{
-    zeroDistributions = array;
-}
-
-//////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp
deleted file mode 100644
index 07b0abb6aafd34510eedb2df7829d39239ecb13f..0000000000000000000000000000000000000000
--- a/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "D3Q27EsoTwist3DSplittedVectorEx.h"
-
-D3Q27EsoTwist3DSplittedVectorEx::D3Q27EsoTwist3DSplittedVectorEx(int nx1, int nx2, int nx3, real value)
-{
-    this->NX1 = nx1;
-    this->NX2 = nx2;
-    this->NX3 = nx3;
-
-    this->localDistributions = CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
-        new CbArray4D<real, IndexerX4X3X2X1>(13, nx1, nx2, nx3, value));
-    this->nonLocalDistributions = CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
-        new CbArray4D<real, IndexerX4X3X2X1>(13, nx1, nx2, nx3, value));
-
-    this->zeroDistributions =
-        CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx1, nx2, nx3, value));
-}
diff --git a/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.h b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.h
deleted file mode 100644
index e5481f4c86c80c4c9d3f6d64c404b8c279268f9b..0000000000000000000000000000000000000000
--- a/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef D3Q27EsoTwist3DSplittedVectorEx_h
-#define D3Q27EsoTwist3DSplittedVectorEx_h
-
-#include "D3Q27EsoTwist3DSplittedVector.h"
-
-class D3Q27EsoTwist3DSplittedVectorEx : public D3Q27EsoTwist3DSplittedVector
-{
-public:
-    D3Q27EsoTwist3DSplittedVectorEx(int nx1, int nx2, int nx3, real value);
-
-protected:
-private:
-};
-
-#endif
diff --git a/src/cpu/core/Data/DistributionArray3D.h b/src/cpu/core/Data/DistributionArray3D.h
index 21b9c23e998ae971130f918463cfe670f018b7a4..b6db22bfb06ee1c770962a654e8e6e29648d0b19 100644
--- a/src/cpu/core/Data/DistributionArray3D.h
+++ b/src/cpu/core/Data/DistributionArray3D.h
@@ -79,16 +79,13 @@ public:
     //! \param x1 coordinate x1
     //! \param x1 coordinate x2
     //! \param x1 coordinate x3
-    virtual void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
-                                             unsigned long int direction)                               = 0;
+    virtual void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) = 0;
     virtual void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) = 0;
-    virtual real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction)      = 0;
-    virtual void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
-                                                unsigned long int direction)                            = 0;
-    virtual void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
-                                                unsigned long int direction)                            = 0;
-    virtual real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction)         = 0;
-    virtual void swap()                                                                                 = 0;
+    virtual real getPostCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) = 0;
+    virtual void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction)  = 0;
+    virtual void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, unsigned long int direction) = 0;
+    virtual real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) = 0;
+    virtual void swap() = 0;
 
 protected:
 private:
diff --git a/src/cpu/core/Data/EsoSplit.cpp b/src/cpu/core/Data/EsoSplit.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5c24a6728255b886fc39346c0ebf50496aab2846
--- /dev/null
+++ b/src/cpu/core/Data/EsoSplit.cpp
@@ -0,0 +1,676 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 EsoSplit.cpp
+//! \ingroup Data
+//! \author Konstantin Kutscher
+//=======================================================================================
+
+#include "EsoSplit.h"
+
+EsoSplit::EsoSplit() = default;
+//////////////////////////////////////////////////////////////////////////
+EsoSplit::EsoSplit(size_t nx1, size_t nx2, size_t nx3, real value)
+{
+    this->NX1 = nx1;
+    this->NX2 = nx2;
+    this->NX3 = nx3;
+
+    this->localDistributions =
+        std::make_shared<CbArray4D<real, IndexerX4X3X2X1>>(13, nx1 + 1, nx2 + 1, nx3 + 1, value);
+    this->nonLocalDistributions =
+        std::make_shared<CbArray4D<real, IndexerX4X3X2X1>>(13, nx1 + 1, nx2 + 1, nx3 + 1, value);
+
+    this->zeroDistributions = std::make_shared<CbArray3D<real, IndexerX3X2X1>>(nx1, nx2, nx3, value);
+}
+//////////////////////////////////////////////////////////////////////////
+EsoSplit::~EsoSplit() = default;
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::swap() { std::swap(this->localDistributions, this->nonLocalDistributions); }
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3)
+{
+    using namespace vf::lbm::dir;
+
+    const size_t x1p = x1 + 1;
+    const size_t x2p = x2 + 1;
+    const size_t x3p = x3 + 1;
+
+    f[dP00] = (*this->localDistributions)(eP00, x1, x2, x3);
+    f[d0P0] = (*this->localDistributions)(e0P0, x1, x2, x3);
+    f[d00P] = (*this->localDistributions)(e00P, x1, x2, x3);
+    f[dPP0] = (*this->localDistributions)(ePP0, x1, x2, x3);
+    f[dMP0] = (*this->localDistributions)(eMP0, x1p, x2, x3);
+    f[dP0P] = (*this->localDistributions)(eP0P, x1, x2, x3);
+    f[dM0P] = (*this->localDistributions)(eM0P, x1p, x2, x3);
+    f[d0PP] = (*this->localDistributions)(e0PP, x1, x2, x3);
+    f[d0MP] = (*this->localDistributions)(e0MP, x1, x2p, x3);
+    f[dPPP] = (*this->localDistributions)(ePPP, x1, x2, x3);
+    f[dMPP] = (*this->localDistributions)(eMPP, x1p, x2, x3);
+    f[dPMP] = (*this->localDistributions)(ePMP, x1, x2p, x3);
+    f[dMMP] = (*this->localDistributions)(eMMP, x1p, x2p, x3);
+
+    f[dM00] = (*this->nonLocalDistributions)(eM00, x1p, x2, x3);
+    f[d0M0] = (*this->nonLocalDistributions)(e0M0, x1, x2p, x3);
+    f[d00M] = (*this->nonLocalDistributions)(e00M, x1, x2, x3p);
+    f[dMM0] = (*this->nonLocalDistributions)(eMM0, x1p, x2p, x3);
+    f[dPM0] = (*this->nonLocalDistributions)(ePM0, x1, x2p, x3);
+    f[dM0M] = (*this->nonLocalDistributions)(eM0M, x1p, x2, x3p);
+    f[dP0M] = (*this->nonLocalDistributions)(eP0M, x1, x2, x3p);
+    f[d0MM] = (*this->nonLocalDistributions)(e0MM, x1, x2p, x3p);
+    f[d0PM] = (*this->nonLocalDistributions)(e0PM, x1, x2, x3p);
+    f[dMMM] = (*this->nonLocalDistributions)(eMMM, x1p, x2p, x3p);
+    f[dPMM] = (*this->nonLocalDistributions)(ePMM, x1, x2p, x3p);
+    f[dMPM] = (*this->nonLocalDistributions)(eMPM, x1p, x2, x3p);
+    f[dPPM] = (*this->nonLocalDistributions)(ePPM, x1, x2, x3p);
+
+    f[d000] = (*this->zeroDistributions)(x1, x2, x3);
+}
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
+{
+    using namespace vf::lbm::dir;
+
+    (*this->localDistributions)(eP00, x1, x2, x3) = f[iP00];
+    (*this->localDistributions)(e0P0, x1, x2, x3) = f[i0P0];
+    (*this->localDistributions)(e00P, x1, x2, x3) = f[i00P];
+    (*this->localDistributions)(ePP0, x1, x2, x3) = f[iPP0];
+    (*this->localDistributions)(eMP0, x1 + 1, x2, x3) = f[iMP0];
+    (*this->localDistributions)(eP0P, x1, x2, x3) = f[iP0P];
+    (*this->localDistributions)(eM0P, x1 + 1, x2, x3) = f[iM0P];
+    (*this->localDistributions)(e0PP, x1, x2, x3) = f[i0PP];
+    (*this->localDistributions)(e0MP, x1, x2 + 1, x3) = f[i0MP];
+    (*this->localDistributions)(ePPP, x1, x2, x3) = f[iPPP];
+    (*this->localDistributions)(eMPP, x1 + 1, x2, x3) = f[iMPP];
+    (*this->localDistributions)(ePMP, x1, x2 + 1, x3) = f[iPMP];
+    (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = f[iMMP];
+
+    (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3) = f[iM00];
+    (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3) = f[i0M0];
+    (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1) = f[i00M];
+    (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3) = f[iMM0];
+    (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3) = f[iPM0];
+    (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1) = f[iM0M];
+    (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1) = f[iP0M];
+    (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1) = f[i0MM];
+    (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1) = f[i0PM];
+    (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = f[iMMM];
+    (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1) = f[iPMM];
+    (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1) = f[iMPM];
+    (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1) = f[iPPM];
+
+    (*this->zeroDistributions)(x1, x2, x3) = f[d000];
+}
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3)
+{
+    using namespace vf::lbm::dir;
+
+    f[iP00] = (*this->localDistributions)(eP00, x1, x2, x3);
+    f[i0P0] = (*this->localDistributions)(e0P0, x1, x2, x3);
+    f[i00P] = (*this->localDistributions)(e00P, x1, x2, x3);
+    f[iPP0] = (*this->localDistributions)(ePP0, x1, x2, x3);
+    f[iMP0] = (*this->localDistributions)(eMP0, x1 + 1, x2, x3);
+    f[iP0P] = (*this->localDistributions)(eP0P, x1, x2, x3);
+    f[iM0P] = (*this->localDistributions)(eM0P, x1 + 1, x2, x3);
+    f[i0PP] = (*this->localDistributions)(e0PP, x1, x2, x3);
+    f[i0MP] = (*this->localDistributions)(e0MP, x1, x2 + 1, x3);
+    f[iPPP] = (*this->localDistributions)(ePPP, x1, x2, x3);
+    f[iMPP] = (*this->localDistributions)(eMPP, x1 + 1, x2, x3);
+    f[iPMP] = (*this->localDistributions)(ePMP, x1, x2 + 1, x3);
+    f[iMMP] = (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3);
+
+    f[iM00] = (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3);
+    f[i0M0] = (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3);
+    f[i00M] = (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1);
+    f[iMM0] = (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3);
+    f[iPM0] = (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3);
+    f[iM0M] = (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1);
+    f[iP0M] = (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1);
+    f[i0MM] = (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1);
+    f[i0PM] = (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1);
+    f[iMMM] = (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+    f[iPMM] = (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1);
+    f[iMPM] = (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1);
+    f[iPPM] = (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1);
+
+    f[d000] = (*this->zeroDistributions)(x1, x2, x3);
+}
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3)
+{
+    using namespace vf::lbm::dir;
+
+    (*this->localDistributions)(eP00, x1, x2, x3) = f[dP00];
+    (*this->localDistributions)(e0P0, x1, x2, x3) = f[d0P0];
+    (*this->localDistributions)(e00P, x1, x2, x3) = f[d00P];
+    (*this->localDistributions)(ePP0, x1, x2, x3) = f[dPP0];
+    (*this->localDistributions)(eMP0, x1 + 1, x2, x3) = f[dMP0];
+    (*this->localDistributions)(eP0P, x1, x2, x3) = f[dP0P];
+    (*this->localDistributions)(eM0P, x1 + 1, x2, x3) = f[dM0P];
+    (*this->localDistributions)(e0PP, x1, x2, x3) = f[d0PP];
+    (*this->localDistributions)(e0MP, x1, x2 + 1, x3) = f[d0MP];
+    (*this->localDistributions)(ePPP, x1, x2, x3) = f[dPPP];
+    (*this->localDistributions)(eMPP, x1 + 1, x2, x3) = f[dMPP];
+    (*this->localDistributions)(ePMP, x1, x2 + 1, x3) = f[dPMP];
+    (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = f[dMMP];
+
+    (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3) = f[dM00];
+    (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3) = f[d0M0];
+    (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1) = f[d00M];
+    (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3) = f[dMM0];
+    (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3) = f[dPM0];
+    (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1) = f[dM0M];
+    (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1) = f[dP0M];
+    (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1) = f[d0MM];
+    (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1) = f[d0PM];
+    (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = f[dMMM];
+    (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1) = f[dPMM];
+    (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1) = f[dMPM];
+    (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1) = f[dPPM];
+
+    (*this->zeroDistributions)(x1, x2, x3) = f[d000];
+}
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
+                                                                unsigned long int direction)
+{
+    using namespace vf::lbm::dir;
+
+    if ((direction & etP00) == etP00)
+        (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3) = f[dP00];
+    if ((direction & etM00) == etM00)
+        (*this->localDistributions)(eP00, x1, x2, x3) = f[dM00];
+    if ((direction & et0M0) == et0M0)
+        (*this->localDistributions)(e0P0, x1, x2, x3) = f[d0M0];
+    if ((direction & et0P0) == et0P0)
+        (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3) = f[d0P0];
+    if ((direction & et00M) == et00M)
+        (*this->localDistributions)(e00P, x1, x2, x3) = f[d00M];
+    if ((direction & et00P) == et00P)
+        (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1) = f[d00P];
+    if ((direction & etMM0) == etMM0)
+        (*this->localDistributions)(ePP0, x1, x2, x3) = f[dMM0];
+    if ((direction & etPP0) == etPP0)
+        (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3) = f[dPP0];
+    if ((direction & etMP0) == etMP0)
+        (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3) = f[dMP0];
+    if ((direction & etPM0) == etPM0)
+        (*this->localDistributions)(eMP0, x1 + 1, x2, x3) = f[dPM0];
+    if ((direction & etM0M) == etM0M)
+        (*this->localDistributions)(eP0P, x1, x2, x3) = f[dM0M];
+    if ((direction & etP0P) == etP0P)
+        (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1) = f[dP0P];
+    if ((direction & etM0P) == etM0P)
+        (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1) = f[dM0P];
+    if ((direction & etP0M) == etP0M)
+        (*this->localDistributions)(eM0P, x1 + 1, x2, x3) = f[dP0M];
+    if ((direction & et0MM) == et0MM)
+        (*this->localDistributions)(e0PP, x1, x2, x3) = f[d0MM];
+    if ((direction & et0PP) == et0PP)
+        (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1) = f[d0PP];
+    if ((direction & et0MP) == et0MP)
+        (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1) = f[d0MP];
+    if ((direction & et0PM) == et0PM)
+        (*this->localDistributions)(e0MP, x1, x2 + 1, x3) = f[d0PM];
+    if ((direction & etMMM) == etMMM)
+        (*this->localDistributions)(ePPP, x1, x2, x3) = f[dMMM];
+    if ((direction & etPPP) == etPPP)
+        (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = f[dPPP];
+    if ((direction & etPMM) == etPMM)
+        (*this->localDistributions)(eMPP, x1 + 1, x2, x3) = f[dPMM];
+    if ((direction & etMPP) == etMPP)
+        (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1) = f[dMPP];
+    if ((direction & etMPM) == etMPM)
+        (*this->localDistributions)(ePMP, x1, x2 + 1, x3) = f[dMPM];
+    if ((direction & etPMP) == etPMP)
+        (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1) = f[dPMP];
+    if ((direction & etPPM) == etPPM)
+        (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = f[dPPM];
+    if ((direction & etMMP) == etMMP)
+        (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1) = f[dMMP];
+    if ((direction & et000) == et000)
+        (*this->zeroDistributions)(x1, x2, x3) = f[d000];
+}
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
+                                                                int direction)
+{
+    using namespace vf::lbm::dir;
+ 
+    switch (direction) {
+        case dP00:
+            (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3) = f;
+            break;
+        case dM00:
+            (*this->localDistributions)(eP00, x1, x2, x3) = f;
+            break;
+        case d0M0:
+            (*this->localDistributions)(e0P0, x1, x2, x3) = f;
+            break;
+        case d0P0:
+            (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3) = f;
+            break;
+        case d00M:
+            (*this->localDistributions)(e00P, x1, x2, x3) = f;
+            break;
+        case d00P:
+            (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1) = f;
+            break;
+        case dMM0:
+            (*this->localDistributions)(ePP0, x1, x2, x3) = f;
+            break;
+        case dPP0:
+            (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3) = f;
+            break;
+        case dMP0:
+            (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3) = f;
+            break;
+        case dPM0:
+            (*this->localDistributions)(eMP0, x1 + 1, x2, x3) = f;
+            break;
+        case dM0M:
+            (*this->localDistributions)(eP0P, x1, x2, x3) = f;
+            break;
+        case dP0P:
+            (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1) = f;
+            break;
+        case dM0P:
+            (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1) = f;
+            break;
+        case dP0M:
+            (*this->localDistributions)(eM0P, x1 + 1, x2, x3) = f;
+            break;
+        case d0MM:
+            (*this->localDistributions)(e0PP, x1, x2, x3) = f;
+            break;
+        case d0PP:
+            (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1) = f;
+            break;
+        case d0MP:
+            (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1) = f;
+            break;
+        case d0PM:
+            (*this->localDistributions)(e0MP, x1, x2 + 1, x3) = f;
+            break;
+        case dMMM:
+            (*this->localDistributions)(ePPP, x1, x2, x3) = f;
+            break;
+        case dPPP:
+            (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = f;
+            break;
+        case dPMM:
+            (*this->localDistributions)(eMPP, x1 + 1, x2, x3) = f;
+            break;
+        case dMPP:
+            (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1) = f;
+            break;
+        case dMPM:
+            (*this->localDistributions)(ePMP, x1, x2 + 1, x3) = f;
+            break;
+        case dPMP:
+            (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1) = f;
+            break;
+        case dPPM:
+            (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = f;
+            break;
+        case dMMP:
+            (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1) = f;
+            break;
+        case d000:
+            (*this->zeroDistributions)(x1, x2, x3) = f;
+            break;
+        default:
+            UB_THROW(UbException(UB_EXARGS, "Direction didn't find"));
+    }
+}
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2,
+                                                                   size_t x3, unsigned long int direction)
+{
+    using namespace vf::lbm::dir;
+
+    if ((direction & etP00) == etP00)
+        (*this->localDistributions)(eP00, x1, x2, x3) = f[dP00];
+    if ((direction & etM00) == etM00)
+        (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3) = f[dM00];
+    if ((direction & et0M0) == et0M0)
+        (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3) = f[d0M0];
+    if ((direction & et0P0) == et0P0)
+        (*this->localDistributions)(e0P0, x1, x2, x3) = f[d0P0];
+    if ((direction & et00M) == et00M)
+        (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1) = f[d00M];
+    if ((direction & et00P) == et00P)
+        (*this->localDistributions)(e00P, x1, x2, x3) = f[d00P];
+    if ((direction & etMM0) == etMM0)
+        (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3) = f[dMM0];
+    if ((direction & etPP0) == etPP0)
+        (*this->localDistributions)(ePP0, x1, x2, x3) = f[dPP0];
+    if ((direction & etMP0) == etMP0)
+        (*this->localDistributions)(eMP0, x1 + 1, x2, x3) = f[dMP0];
+    if ((direction & etPM0) == etPM0)
+        (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3) = f[dPM0];
+    if ((direction & etM0M) == etM0M)
+        (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1) = f[dM0M];
+    if ((direction & etP0P) == etP0P)
+        (*this->localDistributions)(eP0P, x1, x2, x3) = f[dP0P];
+    if ((direction & etM0P) == etM0P)
+        (*this->localDistributions)(eM0P, x1 + 1, x2, x3) = f[dM0P];
+    if ((direction & etP0M) == etP0M)
+        (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1) = f[dP0M];
+    if ((direction & et0MM) == et0MM)
+        (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1) = f[d0MM];
+    if ((direction & et0PP) == et0PP)
+        (*this->localDistributions)(e0PP, x1, x2, x3) = f[d0PP];
+    if ((direction & et0MP) == et0MP)
+        (*this->localDistributions)(e0MP, x1, x2 + 1, x3) = f[d0MP];
+    if ((direction & et0PM) == et0PM)
+        (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1) = f[d0PM];
+    if ((direction & etMMM) == etMMM)
+        (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = f[dMMM];
+    if ((direction & etPPP) == etPPP)
+        (*this->localDistributions)(ePPP, x1, x2, x3) = f[dPPP];
+    if ((direction & etPMM) == etPMM)
+        (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1) = f[dPMM];
+    if ((direction & etMPP) == etMPP)
+        (*this->localDistributions)(eMPP, x1 + 1, x2, x3) = f[dMPP];
+    if ((direction & etMPM) == etMPM)
+        (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1) = f[dMPM];
+    if ((direction & etPMP) == etPMP)
+        (*this->localDistributions)(ePMP, x1, x2 + 1, x3) = f[dPMP];
+    if ((direction & etPPM) == etPPM)
+        (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1) = f[dPPM];
+    if ((direction & etMMP) == etMMP)
+        (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = f[dMMP];
+    if ((direction & et000) == et000)
+        (*this->zeroDistributions)(x1, x2, x3) = f[d000];
+}
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
+                                                                   unsigned long int direction)
+{
+    using namespace vf::lbm::dir;
+
+    switch (direction) {
+        case dP00:
+            (*this->localDistributions)(eP00, x1, x2, x3) = f;
+            break;
+        case dM00:
+            (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3) = f;
+            break;
+        case d0M0:
+            (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3) = f;
+            break;
+        case d0P0:
+            (*this->localDistributions)(e0P0, x1, x2, x3) = f;
+            break;
+        case d00M:
+            (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1) = f;
+            break;
+        case d00P:
+            (*this->localDistributions)(e00P, x1, x2, x3) = f;
+            break;
+        case dMM0:
+            (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3) = f;
+            break;
+        case dPP0:
+            (*this->localDistributions)(ePP0, x1, x2, x3) = f;
+            break;
+        case dMP0:
+            (*this->localDistributions)(eMP0, x1 + 1, x2, x3) = f;
+            break;
+        case dPM0:
+            (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3) = f;
+            break;
+        case dM0M:
+            (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1) = f;
+            break;
+        case dP0P:
+            (*this->localDistributions)(eP0P, x1, x2, x3) = f;
+            break;
+        case dM0P:
+            (*this->localDistributions)(eM0P, x1 + 1, x2, x3) = f;
+            break;
+        case dP0M:
+            (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1) = f;
+            break;
+        case d0MM:
+            (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1) = f;
+            break;
+        case d0PP:
+            (*this->localDistributions)(e0PP, x1, x2, x3) = f;
+            break;
+        case d0MP:
+            (*this->localDistributions)(e0MP, x1, x2 + 1, x3) = f;
+            break;
+        case d0PM:
+            (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1) = f;
+            break;
+        case dMMM:
+            (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1) = f;
+            break;
+        case dPPP:
+            (*this->localDistributions)(ePPP, x1, x2, x3) = f;
+            break;
+        case dPMM:
+            (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1) = f;
+            break;
+        case dMPP:
+            (*this->localDistributions)(eMPP, x1 + 1, x2, x3) = f;
+            break;
+        case dMPM:
+            (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1) = f;
+            break;
+        case dPMP:
+            (*this->localDistributions)(ePMP, x1, x2 + 1, x3) = f;
+            break;
+        case dPPM:
+            (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1) = f;
+            break;
+        case dMMP:
+            (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3) = f;
+            break;
+        case d000:
+            (*this->zeroDistributions)(x1, x2, x3) = f;
+            break;
+        default:
+            UB_THROW(UbException(UB_EXARGS, "Direction didn't find"));
+    }
+}
+//////////////////////////////////////////////////////////////////////////
+real EsoSplit::getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction)
+{
+    using namespace vf::lbm::dir;
+
+    switch (direction) {
+        case dM00:
+            return (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3);
+        case dP00:
+            return (*this->localDistributions)(eP00, x1, x2, x3);
+        case d0P0:
+            return (*this->localDistributions)(e0P0, x1, x2, x3);
+        case d0M0:
+            return (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3);
+        case d00P:
+            return (*this->localDistributions)(e00P, x1, x2, x3);
+        case d00M:
+            return (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1);
+        case dPP0:
+            return (*this->localDistributions)(ePP0, x1, x2, x3);
+        case dMM0:
+            return (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3);
+        case dPM0:
+            return (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3);
+        case dMP0:
+            return (*this->localDistributions)(eMP0, x1 + 1, x2, x3);
+        case dP0P:
+            return (*this->localDistributions)(eP0P, x1, x2, x3);
+        case dM0M:
+            return (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1);
+        case dP0M:
+            return (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1);
+        case dM0P:
+            return (*this->localDistributions)(eM0P, x1 + 1, x2, x3);
+        case d0PP:
+            return (*this->localDistributions)(e0PP, x1, x2, x3);
+        case d0MM:
+            return (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1);
+        case d0PM:
+            return (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1);
+        case d0MP:
+            return (*this->localDistributions)(e0MP, x1, x2 + 1, x3);
+        case dPPP:
+            return (*this->localDistributions)(ePPP, x1, x2, x3);
+        case dMMM:
+            return (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+        case dMPP:
+            return (*this->localDistributions)(eMPP, x1 + 1, x2, x3);
+        case dPMM:
+            return (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1);
+        case dPMP:
+            return (*this->localDistributions)(ePMP, x1, x2 + 1, x3);
+        case dMPM:
+            return (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1);
+        case dMMP:
+            return (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3);
+        case dPPM:
+            return (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1);
+        case d000:
+            return (*this->zeroDistributions)(x1, x2, x3);
+        default:
+            UB_THROW(UbException(UB_EXARGS, "Direction didn't find"));
+    }
+}
+//////////////////////////////////////////////////////////////////////////
+real EsoSplit::getPostCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction)
+{
+    using namespace vf::lbm::dir;
+
+    switch (direction) {
+        case dP00:
+            return (*this->nonLocalDistributions)(eM00, x1 + 1, x2, x3);
+        case dM00:
+            return (*this->localDistributions)(eP00, x1, x2, x3);
+        case d0M0:
+            return (*this->localDistributions)(e0P0, x1, x2, x3);
+        case d0P0:
+            return (*this->nonLocalDistributions)(e0M0, x1, x2 + 1, x3);
+        case d00M:
+            return (*this->localDistributions)(e00P, x1, x2, x3);
+        case d00P:
+            return (*this->nonLocalDistributions)(e00M, x1, x2, x3 + 1);
+        case dMM0:
+            return (*this->localDistributions)(ePP0, x1, x2, x3);
+        case dPP0:
+            return (*this->nonLocalDistributions)(eMM0, x1 + 1, x2 + 1, x3);
+        case dMP0:
+            return (*this->nonLocalDistributions)(ePM0, x1, x2 + 1, x3);
+        case dPM0:
+            return (*this->localDistributions)(eMP0, x1 + 1, x2, x3);
+        case dM0M:
+            return (*this->localDistributions)(eP0P, x1, x2, x3);
+        case dP0P:
+            return (*this->nonLocalDistributions)(eM0M, x1 + 1, x2, x3 + 1);
+        case dM0P:
+            return (*this->nonLocalDistributions)(eP0M, x1, x2, x3 + 1);
+        case dP0M:
+            return (*this->localDistributions)(eM0P, x1 + 1, x2, x3);
+        case d0MM:
+            return (*this->localDistributions)(e0PP, x1, x2, x3);
+        case d0PP:
+            return (*this->nonLocalDistributions)(e0MM, x1, x2 + 1, x3 + 1);
+        case d0MP:
+            return (*this->nonLocalDistributions)(e0PM, x1, x2, x3 + 1);
+        case d0PM:
+            return (*this->localDistributions)(e0MP, x1, x2 + 1, x3);
+        case dMMM:
+            return (*this->localDistributions)(ePPP, x1, x2, x3);
+        case dPPP:
+            return (*this->nonLocalDistributions)(eMMM, x1 + 1, x2 + 1, x3 + 1);
+        case dPMM:
+            return (*this->localDistributions)(eMPP, x1 + 1, x2, x3);
+        case dMPP:
+            return (*this->nonLocalDistributions)(ePMM, x1, x2 + 1, x3 + 1);
+        case dMPM:
+            return (*this->localDistributions)(ePMP, x1, x2 + 1, x3);
+        case dPMP:
+            return (*this->nonLocalDistributions)(eMPM, x1 + 1, x2, x3 + 1);
+        case dPPM:
+            return (*this->localDistributions)(eMMP, x1 + 1, x2 + 1, x3);
+        case dMMP:
+            return (*this->nonLocalDistributions)(ePPM, x1, x2, x3 + 1);
+        case d000:
+            return (*this->zeroDistributions)(x1, x2, x3);
+        default:
+            UB_THROW(UbException(UB_EXARGS, "Direction didn't find"));
+    }
+}
+//////////////////////////////////////////////////////////////////////////
+size_t EsoSplit::getNX1() const { return NX1; }
+//////////////////////////////////////////////////////////////////////////
+size_t EsoSplit::getNX2() const { return NX2; }
+//////////////////////////////////////////////////////////////////////////
+size_t EsoSplit::getNX3() const { return NX3; }
+//////////////////////////////////////////////////////////////////////////
+CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr EsoSplit::getLocalDistributions()
+{
+    return this->localDistributions;
+}
+//////////////////////////////////////////////////////////////////////////
+CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr EsoSplit::getNonLocalDistributions()
+{
+    return this->nonLocalDistributions;
+}
+//////////////////////////////////////////////////////////////////////////
+CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr EsoSplit::getZeroDistributions()
+{
+    return this->zeroDistributions;
+}
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setNX1(size_t newNX1) { NX1 = newNX1; }
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setNX2(size_t newNX2) { NX2 = newNX2; }
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setNX3(size_t newNX3) { NX3 = newNX3; }
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr array)
+{
+    localDistributions = array;
+}
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr array)
+{
+    nonLocalDistributions = array;
+}
+//////////////////////////////////////////////////////////////////////////
+void EsoSplit::setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr array)
+{
+    zeroDistributions = array;
+}
+
+//////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.h b/src/cpu/core/Data/EsoSplit.h
similarity index 91%
rename from src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.h
rename to src/cpu/core/Data/EsoSplit.h
index 5705df3965d6afc3218f996ae7c6164f5c3830e0..a87f629652a4b9cf8afba7e56dd70eef538c7c60 100644
--- a/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.h
+++ b/src/cpu/core/Data/EsoSplit.h
@@ -26,13 +26,13 @@
 //  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 D3Q27EsoTwist3DSplittedVector.h
+//! \file EsoSplit.h
 //! \ingroup Data
 //! \author Konstantin Kutscher
 //=======================================================================================
 
-#ifndef D3Q27EsoTwist3DSplittedVector_h
-#define D3Q27EsoTwist3DSplittedVector_h
+#ifndef EsoSplit_h
+#define EsoSplit_h
 
 #include "D3Q27System.h"
 #include "EsoTwist3D.h"
@@ -40,18 +40,18 @@
 #include "basics/container/CbArray4D.h"
 
 //! \brief Class implements EsoTwist3D
-//! \details D3Q27EsoTwist3DSplittedVector uses three vectors to implement Esoteric Twist method
-class D3Q27EsoTwist3DSplittedVector : public EsoTwist3D
+//! \details EsoSplit uses three vectors to implement Esoteric Twist method
+class EsoSplit : public EsoTwist3D
 {
 public:
-    D3Q27EsoTwist3DSplittedVector();
+    EsoSplit();
     //! \param nx1 number of nodes in x1 direction
     //! \param nx2 number of nodes in x2 direction
     //! \param nx3 number of nodes in x3 direction
     //! \param value initialisation value
-    D3Q27EsoTwist3DSplittedVector(size_t nx1, size_t nx2, size_t nx3, real value);
+    EsoSplit(size_t nx1, size_t nx2, size_t nx3, real value);
     //////////////////////////////////////////////////////////////////////////
-    ~D3Q27EsoTwist3DSplittedVector() override;
+    ~EsoSplit() override;
     //////////////////////////////////////////////////////////////////////////
     void swap() override;
     //////////////////////////////////////////////////////////////////////////
@@ -68,7 +68,7 @@ public:
     //////////////////////////////////////////////////////////////////////////
     void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override;
     //////////////////////////////////////////////////////////////////////////
-    real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
+    real getPostCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
     //////////////////////////////////////////////////////////////////////////
     void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                         unsigned long int direction) override;
diff --git a/src/cpu/core/Data/EsoTwist3D.h b/src/cpu/core/Data/EsoTwist3D.h
index 1642c09daddadb7add0e16c5c833e5cb79c21dd3..9ea3d6e4dc70d651eb6e27d60f8a246e12ad23ae 100644
--- a/src/cpu/core/Data/EsoTwist3D.h
+++ b/src/cpu/core/Data/EsoTwist3D.h
@@ -66,10 +66,10 @@ public:
     //////////////////////////////////////////////////////////////////////////
     void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override = 0;
     //////////////////////////////////////////////////////////////////////////
-    // virtual void getDistributionInvForDirection(real* const& f, const size_t& x1, const size_t& x2, const size_t&
+    // virtual void getPostCollisionDistributionForDirection(real* const& f, const size_t& x1, const size_t& x2, const size_t&
     // x3, const unsigned long int& direction) = 0;
     //////////////////////////////////////////////////////////////////////////
-    real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override = 0;
+    real getPostCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override = 0;
     //////////////////////////////////////////////////////////////////////////
     void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
                                         unsigned long int direction) override = 0;
diff --git a/src/cpu/core/Data/EsoTwistD3Q27System.cpp b/src/cpu/core/Data/EsoTwistD3Q27System.cpp
deleted file mode 100644
index 8f249ceeca6e0270a4396e6100fc1a7d0af0c3c6..0000000000000000000000000000000000000000
--- a/src/cpu/core/Data/EsoTwistD3Q27System.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file EsoTwistD3Q27System.cpp
-//! \ingroup Data
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#include "EsoTwistD3Q27System.h"
-
-// index                                                              0   1   2   3   4   5  6   7   8    9  10  11  12
-// 13  14  15  16  17  18  19  20  21  22  23  24  25  26 f: E,  W,  N,  S,  T,  B, NE, SW, SE, NW, TE, BW, BE, TW, TN,
-// BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE BSW REST
-const int EsoTwistD3Q27System::ETX1[EsoTwistD3Q27System::ENDF + 1] = { 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1,
-                                                                       0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0 };
-const int EsoTwistD3Q27System::ETX2[EsoTwistD3Q27System::ENDF + 1] = { 0, 0, 0,  1, 0, 0,  0, 1, 0, -1, 0, 0, 0, 0,
-                                                                       0, 1, -1, 0, 0, -1, 0, 1, 0, -1, 0, 1, 0 };
-const int EsoTwistD3Q27System::ETX3[EsoTwistD3Q27System::ENDF + 1] = { 0, 0, 0, 0, 0, 1,  0, 0,  0, 0, 0, 1, 0, -1,
-                                                                       0, 1, 1, 0, 0, -1, 0, -1, 0, 1, 0, 1, 0 };
-
-const int EsoTwistD3Q27System::etINVDIR[EsoTwistD3Q27System::ENDF + 1] = {
-
-    vf::lbm::dir::iP00,   vf::lbm::dir::iM00,   vf::lbm::dir::i0P0,   vf::lbm::dir::i0M0,   vf::lbm::dir::i00P,
-    vf::lbm::dir::i00M,   vf::lbm::dir::iPP0,  vf::lbm::dir::iMM0,  vf::lbm::dir::iPM0,  vf::lbm::dir::iMP0,
-    vf::lbm::dir::iP0P,  vf::lbm::dir::iM0M,  vf::lbm::dir::iP0M,  vf::lbm::dir::iM0P,  vf::lbm::dir::i0PP,
-    vf::lbm::dir::i0MM,  vf::lbm::dir::i0PM,  vf::lbm::dir::i0MP,  vf::lbm::dir::iPPP, vf::lbm::dir::iMPP,
-    vf::lbm::dir::iPMP, vf::lbm::dir::iMMP, vf::lbm::dir::iPPM, vf::lbm::dir::iMPM, vf::lbm::dir::iPMM,
-    vf::lbm::dir::iMMM, vf::lbm::dir::d000
-};
-
-const unsigned long int EsoTwistD3Q27System::etDIR[EsoTwistD3Q27System::ENDF + 1] = {
-    etE,  etW,  etN,  etS,  etT,   etB,   etNE,  etSW,  etSE,  etNW,  etTE,  etBW,  etBE,  etTW,
-    etTN, etBS, etBN, etTS, etTNE, etTNW, etTSE, etTSW, etBNE, etBNW, etBSE, etBSW, etZERO
-};
-
-const unsigned long int EsoTwistD3Q27System::etZERO = 1;      /*f0 */
-const unsigned long int EsoTwistD3Q27System::etE    = 2;      /*f1 */
-const unsigned long int EsoTwistD3Q27System::etW    = 4;      /*f2 */
-const unsigned long int EsoTwistD3Q27System::etN    = 8;      /*f3 */
-const unsigned long int EsoTwistD3Q27System::etS    = 16;     /*f4 */
-const unsigned long int EsoTwistD3Q27System::etT    = 32;     /*f5 */
-const unsigned long int EsoTwistD3Q27System::etB    = 64;     /*f6 */
-const unsigned long int EsoTwistD3Q27System::etNE   = 128;    /*f7 */
-const unsigned long int EsoTwistD3Q27System::etSW   = 256;    /*f8 */
-const unsigned long int EsoTwistD3Q27System::etSE   = 512;    /*f9 */
-const unsigned long int EsoTwistD3Q27System::etNW   = 1024;   /*f10*/
-const unsigned long int EsoTwistD3Q27System::etTE   = 2048;   /*f11*/
-const unsigned long int EsoTwistD3Q27System::etBW   = 4096;   /*f12*/
-const unsigned long int EsoTwistD3Q27System::etBE   = 8192;   /*f13*/
-const unsigned long int EsoTwistD3Q27System::etTW   = 16384;  /*f14*/
-const unsigned long int EsoTwistD3Q27System::etTN   = 32768;  /*f15*/
-const unsigned long int EsoTwistD3Q27System::etBS   = 65536;  /*f16*/
-const unsigned long int EsoTwistD3Q27System::etBN   = 131072; /*f17*/
-const unsigned long int EsoTwistD3Q27System::etTS   = 262144; /*f18*/
-const unsigned long int EsoTwistD3Q27System::etTNE  = 524288;
-const unsigned long int EsoTwistD3Q27System::etTNW  = 1048576;
-const unsigned long int EsoTwistD3Q27System::etTSE  = 2097152;
-const unsigned long int EsoTwistD3Q27System::etTSW  = 4194304;
-const unsigned long int EsoTwistD3Q27System::etBNE  = 8388608;
-const unsigned long int EsoTwistD3Q27System::etBNW  = 16777216;
-const unsigned long int EsoTwistD3Q27System::etBSE  = 33554432;
-const unsigned long int EsoTwistD3Q27System::etBSW  = 67108864;
diff --git a/src/cpu/core/Data/EsoTwistD3Q27System.h b/src/cpu/core/Data/EsoTwistD3Q27System.h
deleted file mode 100644
index 77db3dd1dc2d8406e0f0777ced845c8df54fca1a..0000000000000000000000000000000000000000
--- a/src/cpu/core/Data/EsoTwistD3Q27System.h
+++ /dev/null
@@ -1,140 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file EsoTwistD3Q27System.h
-//! \ingroup Data
-//! \author Konstantin Kutscher
-//=======================================================================================
-
-#ifndef ESOTWISTD3Q27SYSTEM_H
-#define ESOTWISTD3Q27SYSTEM_H
-
-#include "D3Q27System.h"
-
-//!
-struct EsoTwistD3Q27System {
-    const static int FSTARTDIR = D3Q27System::FSTARTDIR;
-    const static int FENDDIR = D3Q27System::FENDDIR; // gellerstyle: meint alle frichtungen OHNE f0
-
-    const static int STARTF = D3Q27System::STARTF;
-    const static int ENDF   = D3Q27System::ENDF;
-
- //   const static int STARTDIR = D3Q27System::STARTDIR;
-    const static int ENDDIR   = D3Q27System::ENDDIR;
-
-    static const int REST = vf::lbm::dir::d000; /*f0 */
-    static const int E    = vf::lbm::dir::dP00;    /*f1 */
-    static const int W    = vf::lbm::dir::dM00;    /*f2 */
-    static const int N    = vf::lbm::dir::d0P0;    /*f3 */
-    static const int S    = vf::lbm::dir::d0M0;    /*f4 */
-    static const int T    = vf::lbm::dir::d00P;    /*f5 */
-    static const int B    = vf::lbm::dir::d00M;    /*f6 */
-    static const int NE   = vf::lbm::dir::dPP0;   /*f7 */
-    static const int SW   = vf::lbm::dir::dMM0;   /*f8 */
-    static const int SE   = vf::lbm::dir::dPM0;   /*f9 */
-    static const int NW   = vf::lbm::dir::dMP0;   /*f10*/
-    static const int TE   = vf::lbm::dir::dP0P;   /*f11*/
-    static const int BW   = vf::lbm::dir::dM0M;   /*f12*/
-    static const int BE   = vf::lbm::dir::dP0M;   /*f13*/
-    static const int TW   = vf::lbm::dir::dM0P;   /*f14*/
-    static const int TN   = vf::lbm::dir::d0PP;   /*f15*/
-    static const int BS   = vf::lbm::dir::d0MM;   /*f16*/
-    static const int BN   = vf::lbm::dir::d0PM;   /*f17*/
-    static const int TS   = vf::lbm::dir::d0MP;   /*f18*/
-    static const int TNE  = vf::lbm::dir::dPPP;
-    static const int TNW  = vf::lbm::dir::dMPP;
-    static const int TSE  = vf::lbm::dir::dPMP;
-    static const int TSW  = vf::lbm::dir::dMMP;
-    static const int BNE  = vf::lbm::dir::dPPM;
-    static const int BNW  = vf::lbm::dir::dMPM;
-    static const int BSE  = vf::lbm::dir::dPMM;
-    static const int BSW  = vf::lbm::dir::dMMM;
-
-    static const int INV_E   = vf::lbm::dir::dM00;
-    static const int INV_W   = vf::lbm::dir::dP00;
-    static const int INV_N   = vf::lbm::dir::d0M0;
-    static const int INV_S   = vf::lbm::dir::d0P0;
-    static const int INV_T   = vf::lbm::dir::d00M;
-    static const int INV_B   = vf::lbm::dir::d00P;
-    static const int INV_NE  = vf::lbm::dir::dMM0;
-    static const int INV_SW  = vf::lbm::dir::dPP0;
-    static const int INV_SE  = vf::lbm::dir::dMP0;
-    static const int INV_NW  = vf::lbm::dir::dPM0;
-    static const int INV_TE  = vf::lbm::dir::dM0M;
-    static const int INV_BW  = vf::lbm::dir::dP0P;
-    static const int INV_BE  = vf::lbm::dir::dM0P;
-    static const int INV_TW  = vf::lbm::dir::dP0M;
-    static const int INV_TN  = vf::lbm::dir::d0MM;
-    static const int INV_BS  = vf::lbm::dir::d0PP;
-    static const int INV_BN  = vf::lbm::dir::d0MP;
-    static const int INV_TS  = vf::lbm::dir::d0PM;
-    static const int INV_TNE = vf::lbm::dir::dMMM;
-    static const int INV_TNW = vf::lbm::dir::dPMM;
-    static const int INV_TSE = vf::lbm::dir::dMPM;
-    static const int INV_TSW = vf::lbm::dir::dPPM;
-    static const int INV_BNE = vf::lbm::dir::dMMP;
-    static const int INV_BNW = vf::lbm::dir::dPMP;
-    static const int INV_BSE = vf::lbm::dir::dMPP;
-    static const int INV_BSW = vf::lbm::dir::dPPP;
-
-    static const unsigned long int etZERO; // 1;/*f0 */
-    static const unsigned long int etE;    //  2;    /*f1 */
-    static const unsigned long int etW;    //  4;    /*f2 */
-    static const unsigned long int etN;    //  8;    /*f3 */
-    static const unsigned long int etS;    //  16;   /*f4 */
-    static const unsigned long int etT;    //  32;    /*f5 */
-    static const unsigned long int etB;    //  64;   /*f6 */
-    static const unsigned long int etNE;   // 128;  /*f7 */
-    static const unsigned long int etSW;   // 256;  /*f8 */
-    static const unsigned long int etSE;   // 512;  /*f9 */
-    static const unsigned long int etNW;   // 1024;  /*f10*/
-    static const unsigned long int etTE;   // 2048;  /*f11*/
-    static const unsigned long int etBW;   // 4096;  /*f12*/
-    static const unsigned long int etBE;   // 8192;  /*f13*/
-    static const unsigned long int etTW;   // 16384;  /*f14*/
-    static const unsigned long int etTN;   // 32768;  /*f15*/
-    static const unsigned long int etBS;   // 65536;  /*f16*/
-    static const unsigned long int etBN;   // 131072;  /*f17*/
-    static const unsigned long int etTS;   // 262144;  /*f18*/
-    static const unsigned long int etTNE;  // 524288;
-    static const unsigned long int etTNW;  // 1048576;
-    static const unsigned long int etTSE;  // 2097152;
-    static const unsigned long int etTSW;  // 4194304;
-    static const unsigned long int etBNE;  // 8388608;
-    static const unsigned long int etBNW;  // 16777216;
-    static const unsigned long int etBSE;  // 33554432;
-    static const unsigned long int etBSW;  // = 67108864;
-
-    const static int ETX1[ENDF + 1];
-    const static int ETX2[ENDF + 1];
-    const static int ETX3[ENDF + 1];
-    const static int etINVDIR[ENDF + 1];
-    const static unsigned long int etDIR[ENDF + 1];
-};
-
-#endif
diff --git a/src/cpu/core/Data/VoidData3D.h b/src/cpu/core/Data/VoidData3D.h
deleted file mode 100644
index 2b47d397149fbc06d03045d46c95d9b3c3c7a4fc..0000000000000000000000000000000000000000
--- a/src/cpu/core/Data/VoidData3D.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef VoidData3D_H
-#define VoidData3D_H
-
-#include "EsoTwist3D.h"
-
-class VoidData3D : public EsoTwist3D
-{
-public:
-    VoidData3D() = default;
-    
-    VoidData3D(size_t nx1, size_t nx2, size_t nx3, real /*value*/)
-    {
-        this->NX1 = nx1;
-        this->NX2 = nx2;
-        this->NX3 = nx3;
-    }
-    ~VoidData3D() override = default;
-    
-    size_t getNX1() const override { return NX1; }
-    size_t getNX2() const override { return NX2; }
-    size_t getNX3() const override { return NX3; }
-    void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override {}
-    void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override {}
-    void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override {}
-    void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override {}
-    void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
-                                     unsigned long int direction) override
-    {
-    }
-    void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override {}
-    real getDistributionInvForDirection(size_t /*x1*/, size_t /*x2*/, size_t /*x3*/, int /*direction*/) override
-    {
-        return 0.0;
-    }
-    void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3,
-                                        unsigned long int direction) override
-    {
-    }
-    void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3,
-                                        unsigned long int direction) override
-    {
-    }
-    real getPreCollisionDistributionForDirection(size_t /*x1*/, size_t /*x2*/, size_t /*x3*/, int /*direction*/) override
-    {
-        return 0.0;
-    }
-    void swap() override {}
-
-protected:
-private:
-    size_t NX1, NX2, NX3;
-};
-
-#endif
diff --git a/src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp b/src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp
index f655ac84d1c12b9206dad27d53250f1ff9702f02..a503b573cc55480c1d67597692bc2e8e78c0b989 100644
--- a/src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp
+++ b/src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp
@@ -2,11 +2,13 @@
 #include <basics/utilities/UbLogger.h>
 #include <basics/utilities/UbMath.h>
 
-#include "basics/writer/WbWriterVtkXmlASCII.h"
+#include <basics/writer/WbWriterVtkXmlASCII.h>
 #include <basics/writer/WbWriterVtkASCII.h>
 #include <basics/writer/WbWriterVtkBinary.h>
 #include <basics/writer/WbWriterVtkXmlBinary.h>
 
+#include <basics/Timer/Timer.h>
+
 #include "BCArray3D.h"
 #include "BCSet.h"
 #include "Block3D.h"
@@ -14,7 +16,6 @@
 #include "Grid3D.h"
 #include "LBMKernel.h"
 #include "VelocityBC.h"
-#include "basics/utilities/UbTiming.h"
 #include <geometry3d/GbCuboid3D.h>
 #include <geometry3d/GbHalfSpace3D.h>
 #include <geometry3d/GbMeshTools3D.h>
@@ -241,7 +242,7 @@ void D3Q27TriFaceMeshInteractor::setQs(const real &timeStep)
     int onePercent = UbMath::integerRounding(triangles.size() * c1o100);
     if (onePercent == 0)
         onePercent = 1;
-    UbTimer setQTimer;
+    vf::basics::Timer setQTimer;
     setQTimer.start();
     UBLOG(logDEBUG3, " - setQs for " << (int)triangles.size() << " triangles");
 
@@ -746,7 +747,7 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep)
     int onePercent = UbMath::integerRounding(triangles.size() * c1o100);
     if (onePercent == 0)
         onePercent = 1;
-    UbTimer setQTimer;
+    vf::basics::Timer setQTimer;
     setQTimer.start();
     UBLOG(logDEBUG3, " - setQs for " << (int)triangles.size() << " triangles");
 
@@ -894,18 +895,18 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep)
                         internX2 = val<2>(coords) + nodeDx2 * ix2 - c1o2 * nodeDx2;
                         for (int ix1 = indexMinX1; ix1 < indexMaxX1; ix1++) {
 
-                            //					  int blx1 =block->getX1();
-                            //					  int blx2 = block->getX2();
-                            //					  int blx3 = block->getX3();
-
-                            //					  if (blx1==0&&blx2==1&&blx3==0)
-                            //					  {
-                            //						  //if (ix2==39&&ix3==4)
-                            //							   if (ix2==39&&ix3==4)
-                            //						  {
-                            //							 int seb=0;
-                            //						  }
-                            //					  }
+                            //                      int blx1 =block->getX1();
+                            //                      int blx2 = block->getX2();
+                            //                      int blx3 = block->getX3();
+
+                            //                      if (blx1==0&&blx2==1&&blx3==0)
+                            //                      {
+                            //                          //if (ix2==39&&ix3==4)
+                            //                               if (ix2==39&&ix3==4)
+                            //                          {
+                            //                             int seb=0;
+                            //                          }
+                            //                      }
                             // Problem: wenn voher der punkt durch eine andere geo not active gesetzt wird und
                             // dieser nun uebersprungen wird, dann hat man spaeter beim fuellalgorithmus luecken
                             // in der front und der block wird u.U. faelschlicher weise komplett solid markiert
@@ -1106,10 +1107,10 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep)
             boundingCubeTriangle.finalize();
         }
     }
-    setQTimer.stop();
+    setQTimer.end();
 
     UBLOG(logDEBUG1, " - setQs for " /*<< this->getName()*/ << " - " << (int)triangles.size()
-                                                            << " triangles: 100% done in " << setQTimer.getTotalTime()
+                                                            << " triangles: 100% done in " << setQTimer.getTimeInSeconds()
                                                             << "sec");
     UBLOG(logDEBUG1, "       * rejected blocks with tribox overlap test : " << counterTriBoxOverlap);
     UBLOG(logDEBUG1, "       * rejected nodes  with AABB           test : " << counterAABBTriFace);
@@ -1135,8 +1136,8 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep)
 
         UBLOG(logDEBUG1, " - setSolids for " << blocksForSolidCheck.size() << " blocks");
 
-        UbTimer scanLineTimer;
-        UbTimer solidTimer;
+        vf::basics::Timer scanLineTimer;
+        vf::basics::Timer solidTimer;
         solidTimer.start();
 
         for (BlockSolidCheckMethodIterator pos = blocksForSolidCheck.begin(); pos != blocksForSolidCheck.end(); ++pos) {
@@ -1208,10 +1209,10 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep)
                     for (int bx2 = 0; bx2 < blocknx2; ++bx2) {
                         for (int bx1 = 0; bx1 < blocknx1; ++bx1) {
 
-                            //					  if (bx2==9&&bx3==29)
-                            //					  {
-                            //						  int ride=0;
-                            //					  }
+                            //                      if (bx2==9&&bx3==29)
+                            //                      {
+                            //                          int ride=0;
+                            //                      }
                             if (flagField(bx1, bx2, bx3) == UNDEF_FLAG) {
                                 if (mesh->isPointInGbObject3D(val<1>(coords) + bx1 * nodeDeltaX1 - c1o2 * nodeDeltaX1,
                                                               val<2>(coords) + bx2 * nodeDeltaX2 - c1o2 * nodeDeltaX2,
@@ -1244,24 +1245,24 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep)
 
                 // block hat  in initInteractor mind eine BC erhalten -> transBlock
                 this->bcBlocks.push_back(block);
-                scanLineTimer.stop();
+                scanLineTimer.end();
 
                 //            bvd->getTimer().stop();
             } else
                 throw UbException(UB_EXARGS, "unknown option for in object test");
         }
 
-        solidTimer.stop();
+        solidTimer.end();
 
         UBLOG(logDEBUG1, " - setSolids for " << blocksForSolidCheck.size() << " blocks: 100% done in "
-                                             << solidTimer.getTotalTime() << "s");
+                                             << solidTimer.getTimeInSeconds() << "s");
         UBLOG(logDEBUG1, "       * pointInObject for " << pointInObjectCounter << " blocks in "
-                                                       << solidTimer.getTotalTime() - scanLineTimer.getTotalTime()
+                                                       << solidTimer.getTimeInSeconds() - scanLineTimer.getTimeInSeconds()
                                                        << "s");
         UBLOG(logDEBUG1, "       * flood fill    for " << scanlineCounter << " blocks in "
-                                                       << scanLineTimer.getTotalTime() << " secs");
+                                                       << scanLineTimer.getTimeInSeconds() << " secs");
         UBLOG(logDEBUG1, "LBMTriFaceMeshInteractor::initInteractor for \""
-                             << mesh->getName() << "\" done in " << setQTimer.getTotalTime() + solidTimer.getTotalTime()
+                             << mesh->getName() << "\" done in " << setQTimer.getTimeInSeconds() + solidTimer.getTimeInSeconds()
                              << "s");
     }
 
diff --git a/src/cpu/core/LBM/BGKLBMKernel.cpp b/src/cpu/core/LBM/B92IncompressibleNavierStokes.cpp
similarity index 69%
rename from src/cpu/core/LBM/BGKLBMKernel.cpp
rename to src/cpu/core/LBM/B92IncompressibleNavierStokes.cpp
index d5cae00398a4156db28feea98a616363cef0671d..a06a9a15d7e580d16d9be4763d09fad594bd56b3 100644
--- a/src/cpu/core/LBM/BGKLBMKernel.cpp
+++ b/src/cpu/core/LBM/B92IncompressibleNavierStokes.cpp
@@ -1,8 +1,7 @@
-#include "BGKLBMKernel.h"
+#include "B92IncompressibleNavierStokes.h"
 #include "BCArray3D.h"
 #include "BCSet.h"
-#include "D3Q27EsoTwist3DSoA.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "D3Q27System.h"
 #include "DataSet3D.h"
 #include "Block3D.h"
@@ -11,21 +10,21 @@
 #define PROOF_CORRECTNESS
 
 //////////////////////////////////////////////////////////////////////////
-BGKLBMKernel::BGKLBMKernel() { this->compressible = false; }
+B92IncompressibleNavierStokes::B92IncompressibleNavierStokes() { this->compressible = false; }
 //////////////////////////////////////////////////////////////////////////
-BGKLBMKernel::~BGKLBMKernel(void) = default;
+B92IncompressibleNavierStokes::~B92IncompressibleNavierStokes(void) = default;
 //////////////////////////////////////////////////////////////////////////
-void BGKLBMKernel::initDataSet()
+void B92IncompressibleNavierStokes::initDataSet()
 {
-    SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
+    SPtr<DistributionArray3D> d(new EsoSplit(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
     dataSet->setFdistributions(d);
 }
 //////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> BGKLBMKernel::clone()
+SPtr<LBMKernel> B92IncompressibleNavierStokes::clone()
 {
-    SPtr<LBMKernel> kernel(new BGKLBMKernel());
+    SPtr<LBMKernel> kernel(new B92IncompressibleNavierStokes());
     kernel->setNX(nx);
-    std::dynamic_pointer_cast<BGKLBMKernel>(kernel)->initDataSet();
+    std::dynamic_pointer_cast<B92IncompressibleNavierStokes>(kernel)->initDataSet();
     kernel->setCollisionFactor(this->collFactor);
     kernel->setBCSet(bcSet->clone(kernel));
     kernel->setWithForcing(withForcing);
@@ -38,7 +37,7 @@ SPtr<LBMKernel> BGKLBMKernel::clone()
     return kernel;
 }
 //////////////////////////////////////////////////////////////////////////
-void BGKLBMKernel::calculate(int step)
+void B92IncompressibleNavierStokes::calculate(int step)
 {
     using namespace D3Q27System;
  //   using namespace UbMath;
@@ -63,11 +62,11 @@ void BGKLBMKernel::calculate(int step)
     /////////////////////////////////////
 
     localDistributions =
-        std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-    nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())
+        std::dynamic_pointer_cast<EsoSplit>(dataSet->getFdistributions())->getLocalDistributions();
+    nonLocalDistributions = std::dynamic_pointer_cast<EsoSplit>(dataSet->getFdistributions())
                                 ->getNonLocalDistributions();
     zeroDistributions =
-        std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
+        std::dynamic_pointer_cast<EsoSplit>(dataSet->getFdistributions())->getZeroDistributions();
 
     SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
     real f[D3Q27System::ENDF + 1];
@@ -96,33 +95,33 @@ void BGKLBMKernel::calculate(int step)
                     ////////////////////////////////////////////////////////////////////////////
                     f[d000] = (*this->zeroDistributions)(x1, x2, x3);
 
-                    f[dP00]   = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-                    f[d0P0]   = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-                    f[d00P]   = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-                    f[dPP0]  = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-                    f[dMP0]  = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-                    f[dP0P]  = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-                    f[dM0P]  = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-                    f[d0PP]  = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-                    f[d0MP]  = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-                    f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-                    f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
+                    f[dP00]   = (*this->localDistributions)(eP00, x1, x2, x3);
+                    f[d0P0]   = (*this->localDistributions)(e0P0, x1, x2, x3);
+                    f[d00P]   = (*this->localDistributions)(e00P, x1, x2, x3);
+                    f[dPP0]  = (*this->localDistributions)(ePP0, x1, x2, x3);
+                    f[dMP0]  = (*this->localDistributions)(eMP0, x1p, x2, x3);
+                    f[dP0P]  = (*this->localDistributions)(eP0P, x1, x2, x3);
+                    f[dM0P]  = (*this->localDistributions)(eM0P, x1p, x2, x3);
+                    f[d0PP]  = (*this->localDistributions)(e0PP, x1, x2, x3);
+                    f[d0MP]  = (*this->localDistributions)(e0MP, x1, x2p, x3);
+                    f[dPPP] = (*this->localDistributions)(ePPP, x1, x2, x3);
+                    f[dMPP] = (*this->localDistributions)(eMPP, x1p, x2, x3);
+                    f[dPMP] = (*this->localDistributions)(ePMP, x1, x2p, x3);
+                    f[dMMP] = (*this->localDistributions)(eMMP, x1p, x2p, x3);
 
-                    f[dM00]   = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-                    f[d0M0]   = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-                    f[d00M]   = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-                    f[dMM0]  = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    f[dPM0]  = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-                    f[dM0M]  = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    f[dP0M]  = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-                    f[d0MM]  = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    f[d0PM]  = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-                    f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
+                    f[dM00]   = (*this->nonLocalDistributions)(eM00, x1p, x2, x3);
+                    f[d0M0]   = (*this->nonLocalDistributions)(e0M0, x1, x2p, x3);
+                    f[d00M]   = (*this->nonLocalDistributions)(e00M, x1, x2, x3p);
+                    f[dMM0]  = (*this->nonLocalDistributions)(eMM0, x1p, x2p, x3);
+                    f[dPM0]  = (*this->nonLocalDistributions)(ePM0, x1, x2p, x3);
+                    f[dM0M]  = (*this->nonLocalDistributions)(eM0M, x1p, x2, x3p);
+                    f[dP0M]  = (*this->nonLocalDistributions)(eP0M, x1, x2, x3p);
+                    f[d0MM]  = (*this->nonLocalDistributions)(e0MM, x1, x2p, x3p);
+                    f[d0PM]  = (*this->nonLocalDistributions)(e0PM, x1, x2, x3p);
+                    f[dMMM] = (*this->nonLocalDistributions)(eMMM, x1p, x2p, x3p);
+                    f[dPMM] = (*this->nonLocalDistributions)(ePMM, x1, x2p, x3p);
+                    f[dMPM] = (*this->nonLocalDistributions)(eMPM, x1p, x2, x3p);
+                    f[dPPM] = (*this->nonLocalDistributions)(ePPM, x1, x2, x3p);
                     //////////////////////////////////////////////////////////////////////////
 
                     drho = f[d000] + f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M] + f[dPP0] + f[dMM0] + f[dPM0] + f[dMP0] + f[dP0P] +
@@ -266,33 +265,33 @@ void BGKLBMKernel::calculate(int step)
                     //////////////////////////////////////////////////////////////////////////
                     // write distribution
                     //////////////////////////////////////////////////////////////////////////
-                    (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3)     = f[iP00];
-                    (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3)     = f[i0P0];
-                    (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3)     = f[i00P];
-                    (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3)    = f[iPP0];
-                    (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3)   = f[iMP0];
-                    (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3)    = f[iP0P];
-                    (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3)   = f[iM0P];
-                    (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3)    = f[i0PP];
-                    (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3)   = f[i0MP];
-                    (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3)   = f[iPPP];
-                    (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3)  = f[iMPP];
-                    (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3)  = f[iPMP];
-                    (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[iMMP];
+                    (*this->localDistributions)(eP00, x1, x2, x3)     = f[iP00];
+                    (*this->localDistributions)(e0P0, x1, x2, x3)     = f[i0P0];
+                    (*this->localDistributions)(e00P, x1, x2, x3)     = f[i00P];
+                    (*this->localDistributions)(ePP0, x1, x2, x3)    = f[iPP0];
+                    (*this->localDistributions)(eMP0, x1p, x2, x3)   = f[iMP0];
+                    (*this->localDistributions)(eP0P, x1, x2, x3)    = f[iP0P];
+                    (*this->localDistributions)(eM0P, x1p, x2, x3)   = f[iM0P];
+                    (*this->localDistributions)(e0PP, x1, x2, x3)    = f[i0PP];
+                    (*this->localDistributions)(e0MP, x1, x2p, x3)   = f[i0MP];
+                    (*this->localDistributions)(ePPP, x1, x2, x3)   = f[iPPP];
+                    (*this->localDistributions)(eMPP, x1p, x2, x3)  = f[iMPP];
+                    (*this->localDistributions)(ePMP, x1, x2p, x3)  = f[iPMP];
+                    (*this->localDistributions)(eMMP, x1p, x2p, x3) = f[iMMP];
 
-                    (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3)     = f[iM00];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3)     = f[i0M0];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p)     = f[i00M];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3)   = f[iMM0];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3)    = f[iPM0];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p)   = f[iM0M];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p)    = f[iP0M];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p)   = f[i0MM];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p)    = f[i0PM];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[iMMM];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p)  = f[iPMM];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p)  = f[iMPM];
-                    (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p)   = f[iPPM];
+                    (*this->nonLocalDistributions)(eM00, x1p, x2, x3)     = f[iM00];
+                    (*this->nonLocalDistributions)(e0M0, x1, x2p, x3)     = f[i0M0];
+                    (*this->nonLocalDistributions)(e00M, x1, x2, x3p)     = f[i00M];
+                    (*this->nonLocalDistributions)(eMM0, x1p, x2p, x3)   = f[iMM0];
+                    (*this->nonLocalDistributions)(ePM0, x1, x2p, x3)    = f[iPM0];
+                    (*this->nonLocalDistributions)(eM0M, x1p, x2, x3p)   = f[iM0M];
+                    (*this->nonLocalDistributions)(eP0M, x1, x2, x3p)    = f[iP0M];
+                    (*this->nonLocalDistributions)(e0MM, x1, x2p, x3p)   = f[i0MM];
+                    (*this->nonLocalDistributions)(e0PM, x1, x2, x3p)    = f[i0PM];
+                    (*this->nonLocalDistributions)(eMMM, x1p, x2p, x3p) = f[iMMM];
+                    (*this->nonLocalDistributions)(ePMM, x1, x2p, x3p)  = f[iPMM];
+                    (*this->nonLocalDistributions)(eMPM, x1p, x2, x3p)  = f[iMPM];
+                    (*this->nonLocalDistributions)(ePPM, x1, x2, x3p)   = f[iPPM];
 
                     (*this->zeroDistributions)(x1, x2, x3) = f[d000];
                     //////////////////////////////////////////////////////////////////////////
@@ -302,4 +301,4 @@ void BGKLBMKernel::calculate(int step)
     }
 }
 //////////////////////////////////////////////////////////////////////////
-real BGKLBMKernel::getCalculationTime() { return vf::basics::constant::c0o1; }
+real B92IncompressibleNavierStokes::getCalculationTime() { return vf::basics::constant::c0o1; }
diff --git a/src/cpu/core/LBM/BGKLBMKernel.h b/src/cpu/core/LBM/B92IncompressibleNavierStokes.h
similarity index 64%
rename from src/cpu/core/LBM/BGKLBMKernel.h
rename to src/cpu/core/LBM/B92IncompressibleNavierStokes.h
index 099e9c093a6681c4c511a0fb02f9f023dafa3253..90a1618bf0a69f8eb2d1fe6d0f321ba7e44c0812 100644
--- a/src/cpu/core/LBM/BGKLBMKernel.h
+++ b/src/cpu/core/LBM/B92IncompressibleNavierStokes.h
@@ -1,32 +1,30 @@
-#ifndef BGKLBMKernel_H
-#define BGKLBMKernel_H
+#ifndef B92IncompressibleNavierStokes_H
+#define B92IncompressibleNavierStokes_H
 
 #include "LBMKernel.h"
 #include "basics/container/CbArray3D.h"
 #include "basics/container/CbArray4D.h"
 
-class BGKLBMKernel : public LBMKernel
+class B92IncompressibleNavierStokes : public LBMKernel
 {
 public:
-    BGKLBMKernel();
-    ~BGKLBMKernel() override;
+    B92IncompressibleNavierStokes();
+    ~B92IncompressibleNavierStokes() override;
     void calculate(int step) override;
     SPtr<LBMKernel> clone() override;
     real getCalculationTime() override;
 
 private:
     void initDataSet();
-    // void collideAllCompressible();
-    // void collideAllIncompressible();
 
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
     CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributions;
 
     mu::value_type muX1, muX2, muX3;
-    real forcingX1;
-    real forcingX2;
-    real forcingX3;
+    real forcingX1 { 0 };
+    real forcingX2 { 0 };
+    real forcingX3 { 0 };
 };
 
 #endif
diff --git a/src/cpu/core/LBM/BasicLBMKernel.cpp b/src/cpu/core/LBM/BasicLBMKernel.cpp
deleted file mode 100644
index 97659e93ebe0970a7ffb0a01dd8c9d1b0d45721e..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/BasicLBMKernel.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "BasicLBMKernel.h"
-#include "D3Q27System.h"
-#include "BCArray3D.h"
-#include "BCSet.h"
-
-BasicLBMKernel::BasicLBMKernel()
-{
-
-}
-
-BasicLBMKernel::~BasicLBMKernel(void)
-{
-}
-
-void BasicLBMKernel::calculate(int step)
-{
-   using namespace D3Q27System;
-   using namespace std;
-
-   //timer.resetAndStart();
-
-
-   /////////////////////////////////////
-
-   //localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   //nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   //zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   initData();
-
-   SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-   const int bcArrayMaxX1 = (int)bcArray->getNX1();
-   const int bcArrayMaxX2 = (int)bcArray->getNX2();
-   const int bcArrayMaxX3 = (int)bcArray->getNX3();
-
-   minX1 = ghostLayerWidth;
-   minX2 = ghostLayerWidth;
-   minX3 = ghostLayerWidth;
-   maxX1 = bcArrayMaxX1 - ghostLayerWidth;
-   maxX2 = bcArrayMaxX2 - ghostLayerWidth;
-   maxX3 = bcArrayMaxX3 - ghostLayerWidth;
-
-   for (int x3 = minX3; x3 < maxX3; x3++)
-   {
-      for (int x2 = minX2; x2 < maxX2; x2++)
-      {
-         for (int x1 = minX1; x1 < maxX1; x1++)
-         {
-            if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3))
-            {
-               nodeCollision(step, x1, x2, x3);
-            }
-         }
-      }
-   }
-}
diff --git a/src/cpu/core/LBM/BasicLBMKernel.h b/src/cpu/core/LBM/BasicLBMKernel.h
deleted file mode 100644
index 2e8a6c5b330fd3ad3672249099096cc67a557c03..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/BasicLBMKernel.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef BasicLBMKernel_h__
-#define BasicLBMKernel_h__
-
-#include "LBMKernel.h"
-
-
-class BasicLBMKernel : public LBMKernel
-{
-public:
-	BasicLBMKernel();
-	virtual ~BasicLBMKernel(void);
-	virtual void calculate(int step);
-	virtual SPtr<LBMKernel> clone() = 0;
-protected:
-	virtual void initData(){}
-	virtual void nodeCollision(int step, int x1, int x2, int x3) {}
-	int minX1;
-	int minX2;
-	int minX3;
-	int maxX1;
-	int maxX2;
-	int maxX3;
-};
-
-#endif // BasicLBMKernel_h__
\ No newline at end of file
diff --git a/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp b/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp
deleted file mode 100644
index e4d0017015b71a465c317b1bd8ce105e24c938bb..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp
+++ /dev/null
@@ -1,1076 +0,0 @@
-#include "CompressibleCumulant4thOrderViscosityLBMKernel.h"
-#include "D3Q27System.h"
-#include "Interpolator.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <cmath>
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include "Block3D.h"
-
-#define PROOF_CORRECTNESS
-
-//using namespace UbMath;
-using namespace vf::basics::constant;
-
-//////////////////////////////////////////////////////////////////////////
-CompressibleCumulant4thOrderViscosityLBMKernel::CompressibleCumulant4thOrderViscosityLBMKernel()
-{
-   this->compressible = true;
-   this->bulkViscosity = vf::basics::constant::c0o1;
-   this->OxxPyyPzz = vf::basics::constant::c1o1;
-}
-//////////////////////////////////////////////////////////////////////////
-CompressibleCumulant4thOrderViscosityLBMKernel::~CompressibleCumulant4thOrderViscosityLBMKernel(void)
-= default;
-//////////////////////////////////////////////////////////////////////////
-void CompressibleCumulant4thOrderViscosityLBMKernel::initDataSet()
-{
-   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
-   dataSet->setFdistributions(d);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> CompressibleCumulant4thOrderViscosityLBMKernel::clone()
-{
-   SPtr<LBMKernel> kernel(new CompressibleCumulant4thOrderViscosityLBMKernel());
-   kernel->setNX(nx);
-   dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->initDataSet();
-   kernel->setCollisionFactor(this->collFactor);
-   kernel->setBCSet(bcSet->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   kernel->setDeltaT(deltaT);
-   kernel->setBlock(block.lock());
-
-   if (bulkViscosity != 0)
-   {
-      OxxPyyPzz = LBMSystem::calcOmega2(bulkViscosity, block.lock()->getLevel());
-   } 
-   else
-   {
-      OxxPyyPzz = c1o1;
-   }
-
-   dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->OxxPyyPzz = this->OxxPyyPzz;
-
-   return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleCumulant4thOrderViscosityLBMKernel::calculate(int step)
-{
-   using namespace std;
-   
-   //timer.resetAndStart();
-   
-   //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 = (c1o1/c3o1)*(c1o1/collFactor - c1o1/c2o1);
-
-      muForcingX1.DefineVar("nu", &muNu);
-      muForcingX2.DefineVar("nu", &muNu);
-      muForcingX3.DefineVar("nu", &muNu);
-
-//      LBMReal forcingX1 = 0;
-//      LBMReal forcingX2 = 0;
-//      LBMReal forcingX3 = 0;
-   }
-   /////////////////////////////////////
-
-   localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-
-   real omega = collFactor;
-   //LBMReal OxyyPxzz  = eight*(-two+omega)*(one+two*omega)/(-eight-fourteen*omega+seven*omega*omega);//one;
-   //LBMReal OxyyMxzz  = eight*(-two+omega)*(-seven+four*omega)/(fiftysix-fifty*omega+nine*omega*omega);//one;
-   //LBMReal Oxyz      = twentyfour*(-two+omega)*(-two-seven*omega+three*omega*omega)/(fourtyeight+c152*omega-c130*omega*omega+twentynine*omega*omega*omega);
-   real OxyyPxzz  = c8o1*(omega-c2o1)*(OxxPyyPzz*(c3o1*omega-c1o1)-c5o1*omega)/(c8o1 *(c5o1-c2o1*omega)*omega+OxxPyyPzz*(c8o1+omega*(c9o1*omega-c26o1)));
-   real OxyyMxzz  = c8o1*(omega-c2o1)*(omega+OxxPyyPzz*(c3o1*omega-c7o1))/(OxxPyyPzz*(c56o1-c42o1*omega+c9o1*omega*omega)-c8o1*omega);
-   real Oxyz      = c24o1*(omega-c2o1)*(c4o1*omega*omega+omega*OxxPyyPzz*(c18o1-c13o1*omega)+OxxPyyPzz*OxxPyyPzz*(c2o1+omega*(c6o1*omega-c11o1)))/(c16o1*omega*omega*(omega-c6o1)-c2o1*omega*OxxPyyPzz*(c216o1+c5o1*omega*(c9o1*omega-c46o1))+OxxPyyPzz*OxxPyyPzz*(omega*(c3o1*omega-c10o1)*(c15o1*omega-c28o1)-c48o1));
-
-   //LBMReal A = (four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega);
-   //LBMReal B = (four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega);
-
-   real A = (c4o1*omega*omega+c2o1*omega*OxxPyyPzz*(omega-c6o1)+OxxPyyPzz*OxxPyyPzz*(omega*(c10o1-c3o1*omega)-c4o1))/((omega-OxxPyyPzz)*(OxxPyyPzz*(c2o1+c3o1*omega)-c8o1*omega));
-   //FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' )
-   real B = (c4o1*omega*OxxPyyPzz*(c9o1*omega-c16o1)-c4o1*omega*omega-c2o1*OxxPyyPzz*OxxPyyPzz*(c2o1+c9o1*omega*(omega-c2o1)))/(c3o1*(omega-OxxPyyPzz)*(OxxPyyPzz*(c2o1+c3o1*omega)-c8o1*omega));
-
-   for (int x3 = minX3; x3 < maxX3; x3++)
-   {
-      for (int x2 = minX2; x2 < maxX2; x2++)
-      {
-         for (int x1 = minX1; x1 < maxX1; x1++)
-         {
-            if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3))
-            {
-               int x1p = x1 + 1;
-               int x2p = x2 + 1;
-               int x3p = x3 + 1;
-               //////////////////////////////////////////////////////////////////////////
-               //read distribution
-               ////////////////////////////////////////////////////////////////////////////
-               //////////////////////////////////////////////////////////////////////////
-
-               //E   N  T
-               //c   c  c
-               //////////
-               //W   S  B
-               //a   a  a
-
-               //Rest ist b
-
-               //mfxyz
-               //a - negative
-               //b - null
-               //c - positive
-
-               // a b c
-               //-1 0 1
-
-               real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-               real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-               real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-               real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-               real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-               real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-               real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-               real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-               real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-               real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-               real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-               real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-               real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-               real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-               real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-               real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-               real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-               real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-               real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-               real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-               real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-               real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-               real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-               real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-               real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-               real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-               real mfbbb = (*this->zeroDistributions)(x1, x2, x3);
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               real 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;
-
-               real rho = c1o1 +drho;
-               ////////////////////////////////////////////////////////////////////////////////////
-               real vvx = ((((mfccc-mfaaa)+(mfcac-mfaca))+((mfcaa-mfacc)+(mfcca-mfaac)))+
-                  (((mfcba-mfabc)+(mfcbc-mfaba))+((mfcab-mfacb)+(mfccb-mfaab)))+
-                  (mfcbb-mfabb))/rho;
-               real vvy = ((((mfccc-mfaaa)+(mfaca-mfcac))+((mfacc-mfcaa)+(mfcca-mfaac)))+
-                  (((mfbca-mfbac)+(mfbcc-mfbaa))+((mfacb-mfcab)+(mfccb-mfaab)))+
-                  (mfbcb-mfbab))/rho;
-               real vvz = ((((mfccc-mfaaa)+(mfcac-mfaca))+((mfacc-mfcaa)+(mfaac-mfcca)))+
-                  (((mfbac-mfbca)+(mfbcc-mfbaa))+((mfabc-mfcba)+(mfcbc-mfaba)))+
-                  (mfbbc-mfbba))/rho;
-               ////////////////////////////////////////////////////////////////////////////////////
-
-               //forcing 
-               ///////////////////////////////////////////////////////////////////////////////////////////
-               if (withForcing)
-               {
-                  muX1 = static_cast<real>(x1-1+ix1*maxX1);
-                  muX2 = static_cast<real>(x2-1+ix2*maxX2);
-                  muX3 = static_cast<real>(x3-1+ix3*maxX3);
-
-                  forcingX1 = muForcingX1.Eval();
-                  forcingX2 = muForcingX2.Eval();
-                  forcingX3 = muForcingX3.Eval();
-
-                  vvx += forcingX1*deltaT*c1o2; // X
-                  vvy += forcingX2*deltaT*c1o2; // Y
-                  vvz += forcingX3*deltaT*c1o2; // Z
-               }
-               ///////////////////////////////////////////////////////////////////////////////////////////               
-         ////////////////////////////////////////////////////////////////////////////////////
-               real oMdrho = c1o1; // comp special
-               ////////////////////////////////////////////////////////////////////////////////////
-               real m0, m1, m2;
-               real vx2;
-               real vy2;
-               real vz2;
-               vx2 = vvx*vvx;
-               vy2 = vvy*vvy;
-               vz2 = vvz*vvz;
-               ////////////////////////////////////////////////////////////////////////////////////
-               real wadjust;
-               real qudricLimitP = c1o100;// * 0.0001f;
-               real qudricLimitM = c1o100;// * 0.0001f;
-               real qudricLimitD = c1o100;// * 0.001f;
-               //LBMReal s9 = minusomega;
-               //test
-               //s9 = 0.;
-               ////////////////////////////////////////////////////////////////////////////////////
-               //Hin
-               ////////////////////////////////////////////////////////////////////////////////////
-               // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Z - Dir
-               m2 = mfaaa+mfaac;
-               m1 = mfaac-mfaaa;
-               m0 = m2+mfaab;
-               mfaaa = m0;
-               m0 += c1o36 * oMdrho;
-               mfaab = m1-m0 * vvz;
-               mfaac = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaba+mfabc;
-               m1 = mfabc-mfaba;
-               m0 = m2+mfabb;
-               mfaba = m0;
-               m0 += c1o9 * oMdrho;
-               mfabb = m1-m0 * vvz;
-               mfabc = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaca+mfacc;
-               m1 = mfacc-mfaca;
-               m0 = m2+mfacb;
-               mfaca = m0;
-               m0 += c1o36 * oMdrho;
-               mfacb = m1-m0 * vvz;
-               mfacc = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbaa+mfbac;
-               m1 = mfbac-mfbaa;
-               m0 = m2+mfbab;
-               mfbaa = m0;
-               m0 += c1o9 * oMdrho;
-               mfbab = m1-m0 * vvz;
-               mfbac = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbba+mfbbc;
-               m1 = mfbbc-mfbba;
-               m0 = m2+mfbbb;
-               mfbba = m0;
-               m0 += c4o9 * oMdrho;
-               mfbbb = m1-m0 * vvz;
-               mfbbc = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbca+mfbcc;
-               m1 = mfbcc-mfbca;
-               m0 = m2+mfbcb;
-               mfbca = m0;
-               m0 += c1o9 * oMdrho;
-               mfbcb = m1-m0 * vvz;
-               mfbcc = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcaa+mfcac;
-               m1 = mfcac-mfcaa;
-               m0 = m2+mfcab;
-               mfcaa = m0;
-               m0 += c1o36 * oMdrho;
-               mfcab = m1-m0 * vvz;
-               mfcac = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcba+mfcbc;
-               m1 = mfcbc-mfcba;
-               m0 = m2+mfcbb;
-               mfcba = m0;
-               m0 += c1o9 * oMdrho;
-               mfcbb = m1-m0 * vvz;
-               mfcbc = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcca+mfccc;
-               m1 = mfccc-mfcca;
-               m0 = m2+mfccb;
-               mfcca = m0;
-               m0 += c1o36 * oMdrho;
-               mfccb = m1-m0 * vvz;
-               mfccc = m2-c2o1*	m1 * vvz+vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               m2 = mfaaa+mfaca;
-               m1 = mfaca-mfaaa;
-               m0 = m2+mfaba;
-               mfaaa = m0;
-               m0 += c1o6 * oMdrho;
-               mfaba = m1-m0 * vvy;
-               mfaca = m2-c2o1*	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaab+mfacb;
-               m1 = mfacb-mfaab;
-               m0 = m2+mfabb;
-               mfaab = m0;
-               mfabb = m1-m0 * vvy;
-               mfacb = m2-c2o1*	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaac+mfacc;
-               m1 = mfacc-mfaac;
-               m0 = m2+mfabc;
-               mfaac = m0;
-               m0 += c1o18 * oMdrho;
-               mfabc = m1-m0 * vvy;
-               mfacc = m2-c2o1*	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbaa+mfbca;
-               m1 = mfbca-mfbaa;
-               m0 = m2+mfbba;
-               mfbaa = m0;
-               m0 += c2o3 * oMdrho;
-               mfbba = m1-m0 * vvy;
-               mfbca = m2-c2o1*	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbab+mfbcb;
-               m1 = mfbcb-mfbab;
-               m0 = m2+mfbbb;
-               mfbab = m0;
-               mfbbb = m1-m0 * vvy;
-               mfbcb = m2-c2o1*	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfbac+mfbcc;
-               m1 = mfbcc-mfbac;
-               m0 = m2+mfbbc;
-               mfbac = m0;
-               m0 += c2o9 * oMdrho;
-               mfbbc = m1-m0 * vvy;
-               mfbcc = m2-c2o1*	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcaa+mfcca;
-               m1 = mfcca-mfcaa;
-               m0 = m2+mfcba;
-               mfcaa = m0;
-               m0 += c1o6 * oMdrho;
-               mfcba = m1-m0 * vvy;
-               mfcca = m2-c2o1*	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcab+mfccb;
-               m1 = mfccb-mfcab;
-               m0 = m2+mfcbb;
-               mfcab = m0;
-               mfcbb = m1-m0 * vvy;
-               mfccb = m2-c2o1*	m1 * vvy+vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfcac+mfccc;
-               m1 = mfccc-mfcac;
-               m0 = m2+mfcbc;
-               mfcac = m0;
-               m0 += c1o18 * oMdrho;
-               mfcbc = m1-m0 * vvy;
-               mfccc = m2-c2o1*	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 += c1o1* oMdrho;
-               mfbaa = m1-m0 * vvx;
-               mfcaa = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaba+mfcba;
-               m1 = mfcba-mfaba;
-               m0 = m2+mfbba;
-               mfaba = m0;
-               mfbba = m1-m0 * vvx;
-               mfcba = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaca+mfcca;
-               m1 = mfcca-mfaca;
-               m0 = m2+mfbca;
-               mfaca = m0;
-               m0 += c1o3 * oMdrho;
-               mfbca = m1-m0 * vvx;
-               mfcca = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaab+mfcab;
-               m1 = mfcab-mfaab;
-               m0 = m2+mfbab;
-               mfaab = m0;
-               mfbab = m1-m0 * vvx;
-               mfcab = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfabb+mfcbb;
-               m1 = mfcbb-mfabb;
-               m0 = m2+mfbbb;
-               mfabb = m0;
-               mfbbb = m1-m0 * vvx;
-               mfcbb = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfacb+mfccb;
-               m1 = mfccb-mfacb;
-               m0 = m2+mfbcb;
-               mfacb = m0;
-               mfbcb = m1-m0 * vvx;
-               mfccb = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfaac+mfcac;
-               m1 = mfcac-mfaac;
-               m0 = m2+mfbac;
-               mfaac = m0;
-               m0 += c1o3 * oMdrho;
-               mfbac = m1-m0 * vvx;
-               mfcac = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfabc+mfcbc;
-               m1 = mfcbc-mfabc;
-               m0 = m2+mfbbc;
-               mfabc = m0;
-               mfbbc = m1-m0 * vvx;
-               mfcbc = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2 = mfacc+mfccc;
-               m1 = mfccc-mfacc;
-               m0 = m2+mfbcc;
-               mfacc = m0;
-               m0 += c1o9 * oMdrho;
-               mfbcc = m1-m0 * vvx;
-               mfccc = m2-c2o1*	m1 * vvx+vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Cumulants
-               ////////////////////////////////////////////////////////////////////////////////////
-
-               //LBMReal OxxPyyPzz = one; // bulk viscosity
-
-               ////////////////////////////////////////////////////////////
-               //3.
-               //////////////////////////////
-               //LBMReal OxyyPxzz = one;//three  * (two - omega) / (three  - omega);//
-               //LBMReal OxyyMxzz = one;//six    * (two - omega) / (six    - omega);//
-               //LBMReal Oxyz = one;//twelve * (two - omega) / (twelve + omega);//
-
-               //LBMReal OxyyPxzz  = eight*(-two+omega)*(one+two*omega)/(-eight-fourteen*omega+seven*omega*omega);//one;
-
-               //LBMReal OxyyMxzz  = eight*(-two+omega)*(-seven+four*omega)/(fiftysix-fifty*omega+nine*omega*omega);//one;
-
-               //LBMReal Oxyz      = twentyfour*(-two+omega)*(-two-seven*omega+three*omega*omega)/(fourtyeight+c152*omega-c130*omega*omega+twentynine*omega*omega*omega);
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = two-omega;//
-               //LBMReal OxyyMxzz  = two-omega;//
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = (eight * (omega - two)) / (omega - eight);//Ginzburg
-               //LBMReal OxyyMxzz  = (eight * (omega - two)) / (omega - eight);//Ginzburg
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = omega;//BGK
-               //LBMReal OxyyMxzz  = omega;//BGK
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = (one + omega) / two;//1P5
-               //LBMReal OxyyMxzz  = (one + omega) / two;//1P5
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = (three - omega) / two;//0P5
-               //LBMReal OxyyMxzz  = (three - omega) / two;//0P5
-               //////////////////////////////
-               //LBMReal OxyyPxzz  = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car
-               //LBMReal OxyyMxzz  = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car
-               ////////////////////////////////////////////////////////////
-               //4.
-               //////////////////////////////
-               real O4 = c1o1;
-               //////////////////////////////
-               //real O4        = omega;//TRT
-               ////////////////////////////////////////////////////////////
-               //5.
-               //////////////////////////////
-               real O5 = c1o1;
-               ////////////////////////////////////////////////////////////
-               //6.
-               //////////////////////////////
-               real O6 = c1o1;
-               ////////////////////////////////////////////////////////////
-
-
-               //central moments to cumulants
-               //4.
-               real CUMcbb = mfcbb-((mfcaa+c1o3) * mfabb+c2o1 * mfbba * mfbab)/rho;	//ab 15.05.2015 verwendet
-               real CUMbcb = mfbcb-((mfaca+c1o3) * mfbab+c2o1 * mfbba * mfabb)/rho; //ab 15.05.2015 verwendet
-               real CUMbbc = mfbbc-((mfaac+c1o3) * mfbba+c2o1 * mfbab * mfabb)/rho; //ab 15.05.2015 verwendet
-
-               real CUMcca = mfcca-(((mfcaa * mfaca+c2o1 * mfbba * mfbba)+c1o3 * (mfcaa+mfaca))/rho-c1o9*(drho/rho));
-               real CUMcac = mfcac-(((mfcaa * mfaac+c2o1 * mfbab * mfbab)+c1o3 * (mfcaa+mfaac))/rho-c1o9*(drho/rho));
-               real CUMacc = mfacc-(((mfaac * mfaca+c2o1 * mfabb * mfabb)+c1o3 * (mfaac+mfaca))/rho-c1o9*(drho/rho));
-
-               //5.
-               real CUMbcc = mfbcc-((mfaac * mfbca+mfaca * mfbac+c4o1 * mfabb * mfbbb+c2o1 * (mfbab * mfacb+mfbba * mfabc))+c1o3 * (mfbca+mfbac))/rho;
-               real CUMcbc = mfcbc-((mfaac * mfcba+mfcaa * mfabc+c4o1 * mfbab * mfbbb+c2o1 * (mfabb * mfcab+mfbba * mfbac))+c1o3 * (mfcba+mfabc))/rho;
-               real CUMccb = mfccb-((mfcaa * mfacb+mfaca * mfcab+c4o1 * mfbba * mfbbb+c2o1 * (mfbab * mfbca+mfabb * mfcba))+c1o3 * (mfacb+mfcab))/rho;
-
-               //6.
-
-               real CUMccc = mfccc+((-c4o1 *  mfbbb * mfbbb
-                  -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca)
-                  - c4o1 * (mfabb * mfcbb+mfbab * mfbcb+mfbba * mfbbc)
-                  - c2o1 * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb))/rho
-                  +(c4o1 * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac)
-                     + c2o1 * (mfcaa * mfaca * mfaac)
-                     + c16o1 *  mfbba * mfbab * mfabb)/(rho * rho)
-                  -c1o3 * (mfacc+mfcac+mfcca)/rho
-                  -c1o9 * (mfcaa+mfaca+mfaac)/rho
-                  +(c2o1 * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba)
-                     +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)+c1o3 *(mfaac+mfaca+mfcaa))/(rho * rho) * c2o3
-                  +c1o27*((drho * drho-drho)/(rho*rho)));
-               //+ c1o27*(one -three/rho +two/(rho*rho)));
-
-
-
-
-   //2.
-   // linear combinations
-               real mxxPyyPzz = mfcaa+mfaca+mfaac;
-               real mxxMyy = mfcaa-mfaca;
-               real mxxMzz = mfcaa-mfaac;
-
-               //////////////////////////////////////////////////////////////////////////
-      // 			LBMReal magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.;
-
-               //////////////////////////////////////////////////////////////////////////
-               //limiter-Scheise Teil 1
-               //LBMReal oxxyy,oxxzz,oxy,oxz,oyz;
-               //LBMReal smag=0.001;
-               //oxxyy    = omega+(one-omega)*fabs(mxxMyy)/(fabs(mxxMyy)+smag);
-               //oxxzz    = omega+(one-omega)*fabs(mxxMzz)/(fabs(mxxMzz)+smag);
-               //oxy      = omega+(one-omega)*fabs(mfbba)/(fabs(mfbba)+smag);
-               //oxz      = omega+(one-omega)*fabs(mfbab)/(fabs(mfbab)+smag);
-               //oyz      = omega+(one-omega)*fabs(mfabb)/(fabs(mfabb)+smag);
-
-               ////////////////////////////////////////////////////////////////////////////
-               ////Teil 1b
-               //LBMReal constante = 1000.0;
-               //LBMReal nuEddi = constante * fabs(mxxPyyPzz);
-               //LBMReal omegaLimit = one / (one / omega + three * nuEddi);
-
-               //{
-               //	LBMReal dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) +  OxxPyyPzz * (mfaaa - mxxPyyPzz);
-               //	LBMReal dyuy = dxux + omegaLimit * c3o2 * mxxMyy;
-               //	LBMReal dzuz = dxux + omegaLimit * c3o2 * mxxMzz;
-
-                  ////relax
-                  //mxxPyyPzz += OxxPyyPzz*(mfaaa  - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-                  //mxxMyy    += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy);
-                  //mxxMzz    += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz);
-
-               //}
-               //mfabb     += omegaLimit * (-mfabb);
-               //mfbab     += omegaLimit * (-mfbab);
-               //mfbba     += omegaLimit * (-mfbba);
-               ////////////////////////////////////////////////////////////////////////////
-
-               ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               //incl. correction		(hat noch nicht so gut funktioniert...Optimierungsbedarf??)
-
-               real dxux = c1o2 * (-omega) *(mxxMyy+mxxMzz)+c1o2 *  OxxPyyPzz * (mfaaa-mxxPyyPzz);
-               real dyuy = dxux+omega * c3o2 * mxxMyy;
-               real dzuz = dxux+omega * c3o2 * mxxMzz;
-
-               real Dxy =-c3o1 *omega*mfbba;
-               real Dxz =-c3o1 *omega*mfbab;
-               real Dyz =-c3o1 *omega*mfabb;
-
-
-
-               //relax
-
-               wadjust = OxxPyyPzz+(c1o1 -OxxPyyPzz)*fabs((mfaaa-mxxPyyPzz))/(fabs((mfaaa-mxxPyyPzz))+qudricLimitD);
-               mxxPyyPzz += wadjust*(mfaaa-mxxPyyPzz)- c3o1 * (c1o1 -c1o2 * OxxPyyPzz) * (vx2 * dxux+vy2 * dyuy+vz2 * dzuz);
-
-              // mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz)-three * (one-c1o2 * OxxPyyPzz) * (vx2 * dxux+vy2 * dyuy+vz2 * dzuz);//-magicBulk*OxxPyyPzz;
-               mxxMyy += omega * (-mxxMyy)-c3o1 * (c1o1 +c1o2 * (-omega)) * (vx2 * dxux-vy2 * dyuy);
-               mxxMzz += omega * (-mxxMzz)-c3o1 * (c1o1 +c1o2 * (-omega)) * (vx2 * dxux-vz2 * dzuz);
-
-               //////////////////////////////////////////////////////////////////////////
-               //limiter-Scheise Teil 2
-               //mxxMyy    += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy);
-               //mxxMzz    += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz);
-               //////////////////////////////////////////////////////////////////////////
-
-
-            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            ////no correction
-            //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz;
-            //mxxMyy    += -(-omega) * (-mxxMyy);
-            //mxxMzz    += -(-omega) * (-mxxMzz);
-            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-               mfabb += omega * (-mfabb);
-               mfbab += omega * (-mfbab);
-               mfbba += omega * (-mfbba);
-
-               //////////////////////////////////////////////////////////////////////////
-               //limiter-Scheise Teil 3
-               //mfabb     += oyz * (-mfabb);
-               //mfbab     += oxz * (-mfbab);
-               //mfbba     += oxy * (-mfbba);
-               //////////////////////////////////////////////////////////////////////////
-
-               // linear combinations back
-               mfcaa = c1o3 * (mxxMyy+mxxMzz+mxxPyyPzz);
-               mfaca = c1o3 * (-c2o1 *  mxxMyy+mxxMzz+mxxPyyPzz);
-               mfaac = c1o3 * (mxxMyy-c2o1 * mxxMzz+mxxPyyPzz);
-
-               //3.
-               // linear combinations
-
-               real mxxyPyzz = mfcba+mfabc;
-               real mxxyMyzz = mfcba-mfabc;
-
-               real mxxzPyyz = mfcab+mfacb;
-               real mxxzMyyz = mfcab-mfacb;
-
-               real mxyyPxzz = mfbca+mfbac;
-               real mxyyMxzz = mfbca-mfbac;
-
-               //relax
-               //////////////////////////////////////////////////////////////////////////
-               //das ist der limiter
-               wadjust = Oxyz+(c1o1-Oxyz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimitD);
-               mfbbb += wadjust * (-mfbbb);
-               wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimitP);
-               mxxyPyzz += wadjust * (-mxxyPyzz);
-               wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimitM);
-               mxxyMyzz += wadjust * (-mxxyMyzz);
-               wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimitP);
-               mxxzPyyz += wadjust * (-mxxzPyyz);
-               wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimitM);
-               mxxzMyyz += wadjust * (-mxxzMyyz);
-               wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimitP);
-               mxyyPxzz += wadjust * (-mxyyPxzz);
-               wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimitM);
-               mxyyMxzz += wadjust * (-mxyyMxzz);
-               //////////////////////////////////////////////////////////////////////////
-               //ohne limiter
-               //mfbbb     += OxyyMxzz * (-mfbbb);
-               //mxxyPyzz  += OxyyPxzz * (-mxxyPyzz);
-               //mxxyMyzz  += OxyyMxzz * (-mxxyMyzz);
-               //mxxzPyyz  += OxyyPxzz * (-mxxzPyyz);
-               //mxxzMyyz  += OxyyMxzz * (-mxxzMyyz);
-               //mxyyPxzz  += OxyyPxzz * (-mxyyPxzz);
-               //mxyyMxzz  += OxyyMxzz * (-mxyyMxzz);
-               //////////////////////////////////////////////////////////////////////////
-
-               //// linear combinations back
-               mfcba = (mxxyMyzz+mxxyPyzz) * c1o2;
-               mfabc = (-mxxyMyzz+mxxyPyzz) * c1o2;
-               mfcab = (mxxzMyyz+mxxzPyyz) * c1o2;
-               mfacb = (-mxxzMyyz+mxxzPyyz) * c1o2;
-               mfbca = (mxyyMxzz+mxyyPxzz) * c1o2;
-               mfbac = (-mxyyMxzz+mxyyPxzz) * c1o2;
-
-               //4.
-               //////////////////////////////////////////////////////////////////////////
-               //mit limiter
-            //	wadjust    = O4+(one-O4)*fabs(CUMacc)/(fabs(CUMacc)+qudricLimit);
-               //CUMacc    += wadjust * (-CUMacc);
-            //	wadjust    = O4+(one-O4)*fabs(CUMcac)/(fabs(CUMcac)+qudricLimit);
-               //CUMcac    += wadjust * (-CUMcac); 
-            //	wadjust    = O4+(one-O4)*fabs(CUMcca)/(fabs(CUMcca)+qudricLimit);
-               //CUMcca    += wadjust * (-CUMcca); 
-
-            //	wadjust    = O4+(one-O4)*fabs(CUMbbc)/(fabs(CUMbbc)+qudricLimit);
-               //CUMbbc    += wadjust * (-CUMbbc); 
-            //	wadjust    = O4+(one-O4)*fabs(CUMbcb)/(fabs(CUMbcb)+qudricLimit);
-               //CUMbcb    += wadjust * (-CUMbcb); 
-            //	wadjust    = O4+(one-O4)*fabs(CUMcbb)/(fabs(CUMcbb)+qudricLimit);
-               //CUMcbb    += wadjust * (-CUMcbb); 
-               //////////////////////////////////////////////////////////////////////////
-               //////////////////////////////////////////////////////////////////////////
-
-               //////////////////////////////////////////////////////////////////////////
-
-
-               //ohne limiter
-               //CUMacc += O4 * (-CUMacc);
-               //CUMcac += O4 * (-CUMcac);
-               //CUMcca += O4 * (-CUMcca);
-
-               //CUMbbc += O4 * (-CUMbbc);
-               //CUMbcb += O4 * (-CUMbcb);
-               //CUMcbb += O4 * (-CUMcbb);
-               CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-               CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-               CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-               CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy           * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-               CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz           * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-               CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz           * c1o3 * B + (c1o1 - O4) * (CUMcbb);
-               //////////////////////////////////////////////////////////////////////////
-
-
-               //5.
-               CUMbcc += O5 * (-CUMbcc);
-               CUMcbc += O5 * (-CUMcbc);
-               CUMccb += O5 * (-CUMccb);
-
-               //6.
-               CUMccc += O6 * (-CUMccc);
-
-
-
-               //back cumulants to central moments
-               //4.
-               mfcbb = CUMcbb+((mfcaa+c1o3) * mfabb+c2o1 * mfbba * mfbab)/rho;
-               mfbcb = CUMbcb+((mfaca+c1o3) * mfbab+c2o1 * mfbba * mfabb)/rho;
-               mfbbc = CUMbbc+((mfaac+c1o3) * mfbba+c2o1 * mfbab * mfabb)/rho;
-
-               mfcca = CUMcca+(((mfcaa * mfaca+c2o1 * mfbba * mfbba)+c1o3 * (mfcaa+mfaca))/rho-c1o9*(drho/rho));//(one/rho-one));
-               mfcac = CUMcac+(((mfcaa * mfaac+c2o1 * mfbab * mfbab)+c1o3 * (mfcaa+mfaac))/rho-c1o9*(drho/rho));//(one/rho-one));
-               mfacc = CUMacc+(((mfaac * mfaca+c2o1 * mfabb * mfabb)+c1o3 * (mfaac+mfaca))/rho-c1o9*(drho/rho));//(one/rho-one));
-
-               //5.
-               mfbcc = CUMbcc+((mfaac * mfbca+mfaca * mfbac+c4o1 * mfabb * mfbbb+c2o1 * (mfbab * mfacb+mfbba * mfabc))+c1o3 * (mfbca+mfbac))/rho;
-               mfcbc = CUMcbc+((mfaac * mfcba+mfcaa * mfabc+c4o1 * mfbab * mfbbb+c2o1 * (mfabb * mfcab+mfbba * mfbac))+c1o3 * (mfcba+mfabc))/rho;
-               mfccb = CUMccb+((mfcaa * mfacb+mfaca * mfcab+c4o1 * mfbba * mfbbb+c2o1 * (mfbab * mfbca+mfabb * mfcba))+c1o3 * (mfacb+mfcab))/rho;
-
-               //6.
-
-               mfccc = CUMccc-((-c4o1 *  mfbbb * mfbbb
-                  -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca)
-                  - c4o1 * (mfabb * mfcbb+mfbab * mfbcb+mfbba * mfbbc)
-                  - c2o1 * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb))/rho
-                  +(c4o1 * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac)
-                     + c2o1 * (mfcaa * mfaca * mfaac)
-                     + c16o1 *  mfbba * mfbab * mfabb)/(rho * rho)
-                  -c1o3 * (mfacc+mfcac+mfcca)/rho
-                  -c1o9 * (mfcaa+mfaca+mfaac)/rho
-                  +(c2o1 * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba)
-                     +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)+c1o3 *(mfaac+mfaca+mfcaa))/(rho * rho) * c2o3
-                  +c1o27*((drho * drho-drho)/(rho*rho)));
-               ////////////////////////////////////////////////////////////////////////////////////
-               //forcing
-               mfbaa=-mfbaa;
-               mfaba=-mfaba;
-               mfaab=-mfaab;
-               //////////////////////////////////////////////////////////////////////////////////////
-
-         ////////////////////////////////////////////////////////////////////////////////////
-         //back
-         ////////////////////////////////////////////////////////////////////////////////////
-         //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-         ////////////////////////////////////////////////////////////////////////////////////
-         // Z - Dir
-               m0 = mfaac * c1o2+mfaab * (vvz-c1o2)+(mfaaa+ c1o1 * oMdrho) * (vz2-vvz) * c1o2;
-               m1 = -mfaac-c2o1* mfaab *  vvz+mfaaa                * (c1o1-vz2)- c1o1 * oMdrho * vz2;
-               m2 = mfaac * c1o2+mfaab * (vvz+c1o2)+(mfaaa+ c1o1 * oMdrho) * (vz2+vvz) * c1o2;
-               mfaaa = m0;
-               mfaab = m1;
-               mfaac = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfabc * c1o2+mfabb * (vvz-c1o2)+mfaba * (vz2-vvz) * c1o2;
-               m1 = -mfabc-c2o1* mfabb *  vvz+mfaba * (c1o1-vz2);
-               m2 = mfabc * c1o2+mfabb * (vvz+c1o2)+mfaba * (vz2+vvz) * c1o2;
-               mfaba = m0;
-               mfabb = m1;
-               mfabc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfacc * c1o2+mfacb * (vvz-c1o2)+(mfaca+c1o3 * oMdrho) * (vz2-vvz) * c1o2;
-               m1 = -mfacc-c2o1* mfacb *  vvz+mfaca                  * (c1o1-vz2)-c1o3 * oMdrho * vz2;
-               m2 = mfacc * c1o2+mfacb * (vvz+c1o2)+(mfaca+c1o3 * oMdrho) * (vz2+vvz) * c1o2;
-               mfaca = m0;
-               mfacb = m1;
-               mfacc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfbac * c1o2+mfbab * (vvz-c1o2)+mfbaa * (vz2-vvz) * c1o2;
-               m1 = -mfbac-c2o1* mfbab *  vvz+mfbaa * (c1o1-vz2);
-               m2 = mfbac * c1o2+mfbab * (vvz+c1o2)+mfbaa * (vz2+vvz) * c1o2;
-               mfbaa = m0;
-               mfbab = m1;
-               mfbac = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 = mfbbc * c1o2+mfbbb * (vvz-c1o2)+mfbba * (vz2-vvz) * c1o2;
-               m1 = -mfbbc-c2o1* mfbbb *  vvz+mfbba * (c1o1-vz2);
-               m2 = mfbbc * c1o2+mfbbb * (vvz+c1o2)+mfbba * (vz2+vvz) * c1o2;
-               mfbba = m0;
-               mfbbb = m1;
-               mfbbc = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 = mfbcc * c1o2+mfbcb * (vvz-c1o2)+mfbca * (vz2-vvz) * c1o2;
-               m1 = -mfbcc-c2o1* mfbcb *  vvz+mfbca * (c1o1-vz2);
-               m2 = mfbcc * c1o2+mfbcb * (vvz+c1o2)+mfbca * (vz2+vvz) * c1o2;
-               mfbca = m0;
-               mfbcb = m1;
-               mfbcc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcac * c1o2+mfcab * (vvz-c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2-vvz) * c1o2;
-               m1 = -mfcac- c2o1* mfcab *  vvz+mfcaa                  * (c1o1-vz2)-c1o3 * oMdrho * vz2;
-               m2 = mfcac * c1o2+mfcab * (vvz+c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2+vvz) * c1o2;
-               mfcaa = m0;
-               mfcab = m1;
-               mfcac = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 = mfcbc * c1o2+mfcbb * (vvz-c1o2)+mfcba * (vz2-vvz) * c1o2;
-               m1 = -mfcbc-c2o1* mfcbb *  vvz+mfcba * (c1o1-vz2);
-               m2 = mfcbc * c1o2+mfcbb * (vvz+c1o2)+mfcba * (vz2+vvz) * c1o2;
-               mfcba = m0;
-               mfcbb = m1;
-               mfcbc = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 = mfccc * c1o2+mfccb * (vvz-c1o2)+(mfcca+c1o9 * oMdrho) * (vz2-vvz) * c1o2;
-               m1 = -mfccc-c2o1* mfccb *  vvz+mfcca                  * (c1o1-vz2)-c1o9 * oMdrho * vz2;
-               m2 = mfccc * c1o2+mfccb * (vvz+c1o2)+(mfcca+c1o9 * oMdrho) * (vz2+vvz) * c1o2;
-               mfcca = m0;
-               mfccb = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               m0 = mfaca * c1o2+mfaba * (vvy-c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfaca-c2o1* mfaba *  vvy+mfaaa                  * (c1o1-vy2)-c1o6 * oMdrho * vy2;
-               m2 = mfaca * c1o2+mfaba * (vvy+c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2+vvy) * c1o2;
-               mfaaa = m0;
-               mfaba = m1;
-               mfaca = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfacb * c1o2+mfabb * (vvy-c1o2)+(mfaab+c2o3 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfacb-c2o1* mfabb *  vvy+mfaab                  * (c1o1-vy2)-c2o3 * oMdrho * vy2;
-               m2 = mfacb * c1o2+mfabb * (vvy+c1o2)+(mfaab+c2o3 * oMdrho) * (vy2+vvy) * c1o2;
-               mfaab = m0;
-               mfabb = m1;
-               mfacb = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfacc * c1o2+mfabc * (vvy-c1o2)+(mfaac+c1o6 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfacc-c2o1* mfabc *  vvy+mfaac                  * (c1o1-vy2)-c1o6 * oMdrho * vy2;
-               m2 = mfacc * c1o2+mfabc * (vvy+c1o2)+(mfaac+c1o6 * oMdrho) * (vy2+vvy) * c1o2;
-               mfaac = m0;
-               mfabc = m1;
-               mfacc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfbca * c1o2+mfbba * (vvy-c1o2)+mfbaa * (vy2-vvy) * c1o2;
-               m1 = -mfbca-c2o1* mfbba *  vvy+mfbaa * (c1o1-vy2);
-               m2 = mfbca * c1o2+mfbba * (vvy+c1o2)+mfbaa * (vy2+vvy) * c1o2;
-               mfbaa = m0;
-               mfbba = m1;
-               mfbca = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 = mfbcb * c1o2+mfbbb * (vvy-c1o2)+mfbab * (vy2-vvy) * c1o2;
-               m1 = -mfbcb-c2o1* mfbbb *  vvy+mfbab * (c1o1-vy2);
-               m2 = mfbcb * c1o2+mfbbb * (vvy+c1o2)+mfbab * (vy2+vvy) * c1o2;
-               mfbab = m0;
-               mfbbb = m1;
-               mfbcb = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 = mfbcc * c1o2+mfbbc * (vvy-c1o2)+mfbac * (vy2-vvy) * c1o2;
-               m1 = -mfbcc-c2o1* mfbbc *  vvy+mfbac * (c1o1-vy2);
-               m2 = mfbcc * c1o2+mfbbc * (vvy+c1o2)+mfbac * (vy2+vvy) * c1o2;
-               mfbac = m0;
-               mfbbc = m1;
-               mfbcc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcca * c1o2+mfcba * (vvy-c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfcca-c2o1* mfcba *  vvy+mfcaa                   * (c1o1-vy2)-c1o18 * oMdrho * vy2;
-               m2 = mfcca * c1o2+mfcba * (vvy+c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2+vvy) * c1o2;
-               mfcaa = m0;
-               mfcba = m1;
-               mfcca = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 = mfccb * c1o2+mfcbb * (vvy-c1o2)+(mfcab+c2o9 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfccb-c2o1* mfcbb *  vvy+mfcab                  * (c1o1-vy2)-c2o9 * oMdrho * vy2;
-               m2 = mfccb * c1o2+mfcbb * (vvy+c1o2)+(mfcab+c2o9 * oMdrho) * (vy2+vvy) * c1o2;
-               mfcab = m0;
-               mfcbb = m1;
-               mfccb = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 = mfccc * c1o2+mfcbc * (vvy-c1o2)+(mfcac+c1o18 * oMdrho) * (vy2-vvy) * c1o2;
-               m1 = -mfccc-c2o1* mfcbc *  vvy+mfcac                   * (c1o1-vy2)-c1o18 * oMdrho * vy2;
-               m2 = mfccc * c1o2+mfcbc * (vvy+c1o2)+(mfcac+c1o18 * oMdrho) * (vy2+vvy) * c1o2;
-               mfcac = m0;
-               mfcbc = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // X - Dir
-               m0 = mfcaa * c1o2+mfbaa * (vvx-c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcaa-c2o1* mfbaa *  vvx+mfaaa                   * (c1o1-vx2)-c1o36 * oMdrho * vx2;
-               m2 = mfcaa * c1o2+mfbaa * (vvx+c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-               mfaaa = m0;
-               mfbaa = m1;
-               mfcaa = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcba * c1o2+mfbba * (vvx-c1o2)+(mfaba+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcba-c2o1* mfbba *  vvx+mfaba                  * (c1o1-vx2)-c1o9 * oMdrho * vx2;
-               m2 = mfcba * c1o2+mfbba * (vvx+c1o2)+(mfaba+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-               mfaba = m0;
-               mfbba = m1;
-               mfcba = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcca * c1o2+mfbca * (vvx-c1o2)+(mfaca+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcca-c2o1* mfbca *  vvx+mfaca                   * (c1o1-vx2)-c1o36 * oMdrho * vx2;
-               m2 = mfcca * c1o2+mfbca * (vvx+c1o2)+(mfaca+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-               mfaca = m0;
-               mfbca = m1;
-               mfcca = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcab * c1o2+mfbab * (vvx-c1o2)+(mfaab+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcab-c2o1* mfbab *  vvx+mfaab                  * (c1o1-vx2)-c1o9 * oMdrho * vx2;
-               m2 = mfcab * c1o2+mfbab * (vvx+c1o2)+(mfaab+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-               mfaab = m0;
-               mfbab = m1;
-               mfcab = m2;
-               ///////////b////////////////////////////////////////////////////////////////////////
-               m0 = mfcbb * c1o2+mfbbb * (vvx-c1o2)+(mfabb+c4o9 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcbb-c2o1* mfbbb *  vvx+mfabb                  * (c1o1-vx2)-c4o9 * oMdrho * vx2;
-               m2 = mfcbb * c1o2+mfbbb * (vvx+c1o2)+(mfabb+c4o9 * oMdrho) * (vx2+vvx) * c1o2;
-               mfabb = m0;
-               mfbbb = m1;
-               mfcbb = m2;
-               ///////////b////////////////////////////////////////////////////////////////////////
-               m0 = mfccb * c1o2+mfbcb * (vvx-c1o2)+(mfacb+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfccb-c2o1* mfbcb *  vvx+mfacb                  * (c1o1-vx2)-c1o9 * oMdrho * vx2;
-               m2 = mfccb * c1o2+mfbcb * (vvx+c1o2)+(mfacb+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-               mfacb = m0;
-               mfbcb = m1;
-               mfccb = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 = mfcac * c1o2+mfbac * (vvx-c1o2)+(mfaac+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcac-c2o1* mfbac *  vvx+mfaac                   * (c1o1-vx2)-c1o36 * oMdrho * vx2;
-               m2 = mfcac * c1o2+mfbac * (vvx+c1o2)+(mfaac+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-               mfaac = m0;
-               mfbac = m1;
-               mfcac = m2;
-               ///////////c////////////////////////////////////////////////////////////////////////
-               m0 = mfcbc * c1o2+mfbbc * (vvx-c1o2)+(mfabc+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfcbc-c2o1* mfbbc *  vvx+mfabc                  * (c1o1-vx2)-c1o9 * oMdrho * vx2;
-               m2 = mfcbc * c1o2+mfbbc * (vvx+c1o2)+(mfabc+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-               mfabc = m0;
-               mfbbc = m1;
-               mfcbc = m2;
-               ///////////c////////////////////////////////////////////////////////////////////////
-               m0 = mfccc * c1o2+mfbcc * (vvx-c1o2)+(mfacc+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-               m1 = -mfccc-c2o1* mfbcc *  vvx+mfacc                   * (c1o1-vx2)-c1o36 * oMdrho * vx2;
-               m2 = mfccc * c1o2+mfbcc * (vvx+c1o2)+(mfacc+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-               mfacc = m0;
-               mfbcc = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-
-               //////////////////////////////////////////////////////////////////////////
-               //proof correctness
-               //////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-               real 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 = fabs(rho - rho_post);
-               real dif = drho - drho_post;
-#ifdef SINGLEPRECISION
-               if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-               if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-               {
-                  UB_THROW(UbException(UB_EXARGS, "rho="+UbSystem::toString(drho)+", rho_post="+UbSystem::toString(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 distribution
-               //////////////////////////////////////////////////////////////////////////
-               (*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->zeroDistributions)(x1, x2, x3) = mfbbb;
-               //////////////////////////////////////////////////////////////////////////
-
-            }
-         }
-      }
-   }
-   //timer.stop();
-}
-//////////////////////////////////////////////////////////////////////////
-real CompressibleCumulant4thOrderViscosityLBMKernel::getCalculationTime()
-{
-   //return timer.getDuration();
-   return timer.getTotalTime();
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleCumulant4thOrderViscosityLBMKernel::setBulkViscosity(real value)
-{
-   bulkViscosity = value;
-}
-
-//////////////////////////////////////////////////////////////////////////
-//void CompressibleCumulant4thOrderViscosityLBMKernel::setBulkOmegaToOmega(bool value)
-//{
-//   bulkOmegaToOmega = value;
-//}
-
-//void CompressibleCumulant4thOrderViscosityLBMKernel::setViscosityFlag(bool vf)
-//{
-//   viscosityFlag = vf;
-//}
diff --git a/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h b/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h
deleted file mode 100644
index 3b7ee8f849187b2c40fc8f5803bdd04ad4982344..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef CompressibleCumulant4thOrderViscosityLBMKernel_h__
-#define CompressibleCumulant4thOrderViscosityLBMKernel_h__
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief   compressible cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  K. Kutscher, M. Geier
-class CompressibleCumulant4thOrderViscosityLBMKernel :  public LBMKernel
-{
-public:
-   //! This option set relaxation parameter: NORMAL  
-   enum Parameter{NORMAL, MAGIC};
-public:
-   CompressibleCumulant4thOrderViscosityLBMKernel();
-   ~CompressibleCumulant4thOrderViscosityLBMKernel() override;
-   void calculate(int step) override;
-   SPtr<LBMKernel> clone() override;
-   real getCalculationTime() override;
-   //! The value should not be equal to a shear viscosity
-   void setBulkViscosity(real value);
-protected:
-   virtual void initDataSet();
-   real f[D3Q27System::ENDF+1];
-
-   UbTimer timer;
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributions;
-
-   mu::value_type muX1,muX2,muX3;
-   mu::value_type muDeltaT;
-   mu::value_type muNu;
-   real forcingX1;
-   real forcingX2;
-   real forcingX3;
-   
-   // bulk viscosity
-   real OxxPyyPzz; //omega2 (bulk viscosity)
-   real bulkViscosity;
-
-};
-#endif // CompressibleCumulant4thOrderViscosityLBMKernel_h__
-
-
diff --git a/src/cpu/core/LBM/CumulantK17LBMKernel.cpp b/src/cpu/core/LBM/CumulantK17LBMKernel.cpp
deleted file mode 100644
index ec59cf3493c327d9b485d387cc8e2aa913fddbc9..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/CumulantK17LBMKernel.cpp
+++ /dev/null
@@ -1,639 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file CumulantK17LBMKernel.cpp
-//! \ingroup LBM
-//! \author Konstantin Kutscher, Martin Geier
-//=======================================================================================
-#include "CumulantK17LBMKernel.h"
-#include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <cmath>
-#include "DataSet3D.h"
-#include "LBMKernel.h"
-#include "Block3D.h"
-#include "BCArray3D.h"
-
-#include <lbm/ChimeraTransformation.h>
-
-#define PROOF_CORRECTNESS
-
-//using namespace UbMath;
-using namespace vf::basics::constant;
-using namespace vf::lbm;
-
-//////////////////////////////////////////////////////////////////////////
-CumulantK17LBMKernel::CumulantK17LBMKernel()
-{
-    this->compressible = true;
-}
-//////////////////////////////////////////////////////////////////////////
-void CumulantK17LBMKernel::initDataSet()
-{
-    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->setBCSet(bcSet->clone(kernel));
-    kernel->setWithForcing(withForcing);
-    kernel->setForcingX1(muForcingX1);
-    kernel->setForcingX2(muForcingX2);
-    kernel->setForcingX3(muForcingX3);
-    kernel->setIndex(ix1, ix2, ix3);
-    kernel->setDeltaT(deltaT);
-    kernel->setBlock(block.lock());
-
-    return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void 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 threadIdx, 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 = (c1o1 / c3o1) * (c1o1 / collFactor - c1o1 / c2o1);
-
-        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->getBCSet()->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;
-
-    real 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))
-                {
-                    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
-
-                    real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-                    real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-                    real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-                    real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-                    real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-                    real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-                    real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-                    real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-                    real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-                    real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-                    real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-                    real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-                    real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                    real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-                    real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-                    real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-                    real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-                    real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-                    real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-                    real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-                    real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-                    real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-                    real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                    real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                    real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                    real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                    real 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>
-                    //!
-                    real 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;
-
-                    real rho = c1o1 + drho;
-                    real OOrho = c1o1 / rho;
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-                                   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-                                   (mfcbb - mfabb)) / rho;
-                    real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-                                   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-                                   (mfbcb - mfbab)) / rho;
-                    real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-                                   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-                                   (mfbbc - mfbba)) / rho;
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    //forcing
-                    ///////////////////////////////////////////////////////////////////////////////////////////
-                    if (withForcing)
-                    {
-                        muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1);
-                        muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2);
-                        muX3 = static_cast<real>(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
-                    real vx2 = vvx * vvx;
-                    real vy2 = vvy * vvy;
-                    real 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>
-                    //!
-                    real wadjust;
-                    real qudricLimitP = c1o100;
-                    real qudricLimitM = c1o100;
-                    real 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, c36o1, c1o36);
-                    forwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9);
-                    forwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36);
-                    forwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9);
-                    forwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9);
-                    forwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9);
-                    forwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36);
-                    forwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9);
-                    forwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36);
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    // Y - Dir
-                    forwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6);
-                    forwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-                    forwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, 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, c6o1, c1o6);
-                    forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-                    forwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18);
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    // X - Dir
-                    forwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1);
-                    forwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-                    forwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, 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, c3o1, c1o3);
-                    forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-                    forwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, 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.
-                    real OxxPyyPzz = c1o1;
-                    ////////////////////////////////////////////////////////////
-                    //3.
-                    real OxyyPxzz = c8o1 * (-c2o1 + omega) * ( c1o1 + c2o1 *omega) / (-c8o1 - c14o1 *omega + c7o1 *omega*omega);
-                    real OxyyMxzz = c8o1 * (-c2o1 + omega) * (-c7o1 + c4o1 *omega) / (c56o1 - c50o1 *omega + c9o1 *omega*omega);
-                    real Oxyz     = c24o1 * (-c2o1 + omega) * (-c2o1 - c7o1 *omega + c3o1 *omega*omega) / (c48o1 + c152o1 *omega - c130o1 *omega*omega + c29o1 *omega*omega*omega);
-                    ////////////////////////////////////////////////////////////
-                    //4.
-                    real O4 = c1o1;
-                    ////////////////////////////////////////////////////////////
-                    //5.
-                    real O5 = c1o1;
-                    ////////////////////////////////////////////////////////////
-                    //6.
-                    real O6 = c1o1;
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116)
-                    //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
-                    //! with simplifications assuming \f$\omega_2 = 1.0\f$ (modify for different bulk viscosity).
-                    //!
-                    real A = (c4o1 + c2o1 *omega - c3o1 *omega*omega) / (c2o1 - c7o1 *omega + c5o1 *omega*omega);
-                    real B = (c4o1 + c28o1 *omega - c14o1 *omega*omega) / (c6o1 - c21o1 *omega + c15o1 *omega*omega);
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    //! - 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.
-                    real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) * OOrho;
-                    real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) * OOrho;
-                    real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) * OOrho;
-
-                    real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) * OOrho - c1o9 * (drho * OOrho));
-                    real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) * OOrho - c1o9 * (drho * OOrho));
-                    real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) * OOrho - c1o9 * (drho * OOrho));
-                    ////////////////////////////////////////////////////////////
-                    //5.
-                    real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) * OOrho;
-                    real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) * OOrho;
-                    real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) * OOrho;
-                    ////////////////////////////////////////////////////////////
-                    //6.
-                    real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb
-                                               - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-                                               - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-                                               - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho
-                                              + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-                                                 + c2o1 * (mfcaa * mfaca * mfaac)
-                                                 + c16o1 * mfbba * mfbab * mfabb) * OOrho * OOrho
-                                              - c1o3 * (mfacc + mfcac + mfcca) * OOrho
-                                              - c1o9 * (mfcaa + mfaca + mfaac) * OOrho
-                                              + (c2o1 * (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.
-                    real mxxPyyPzz = mfcaa + mfaca + mfaac;
-                    real mxxMyy = mfcaa - mfaca;
-                    real mxxMzz = mfcaa - mfaac;
-                    ////////////////////////////////////////////////////////////
-                    //3.
-                    real mxxyPyzz = mfcba + mfabc;
-                    real mxxyMyzz = mfcba - mfabc;
-
-                    real mxxzPyyz = mfcab + mfacb;
-                    real mxxzMyyz = mfcab - mfacb;
-
-                    real mxyyPxzz = mfbca + mfbac;
-                    real 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.
-                    //!
-                    real Dxy = -c3o1 * omega * mfbba;
-                    real Dxz = -c3o1 * omega * mfbab;
-                    real Dyz = -c3o1 * omega * mfabb;
-                    real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-                    real dyuy = dxux + omega * c3o2 * mxxMyy;
-                    real 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) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-                    mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy);
-                    mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz);
-
-                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                    ////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 + (c1o1 - Oxyz) * abs(mfbbb) / (abs(mfbbb) + qudricLimitD);
-                    mfbbb += wadjust * (-mfbbb);
-                    wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP);
-                    mxxyPyzz += wadjust * (-mxxyPyzz);
-                    wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM);
-                    mxxyMyzz += wadjust * (-mxxyMyzz);
-                    wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP);
-                    mxxzPyyz += wadjust * (-mxxzPyyz);
-                    wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM);
-                    mxxzMyyz += wadjust * (-mxxzMyyz);
-                    wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP);
-                    mxyyPxzz += wadjust * (-mxyyPxzz);
-                    wadjust = OxyyMxzz + (c1o1 - 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 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz);
-                    mfaac = c1o3 * (mxxMyy - c2o1 * 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 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-                    CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-                    CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-                    CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-                    CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-                    CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * B + (c1o1 - O4) * (CUMcbb);
-
-                    //////////////////////////////////////////////////////////////////////////
-                    //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 * ((c3o1 * mfcaa + c1o1) * mfabb + c6o1 * mfbba * mfbab) * OOrho;
-                    mfbcb = CUMbcb + c1o3 * ((c3o1 * mfaca + c1o1) * mfbab + c6o1 * mfbba * mfabb) * OOrho;
-                    mfbbc = CUMbbc + c1o3 * ((c3o1 * mfaac + c1o1) * mfbba + c6o1 * mfbab * mfabb) * OOrho;
-
-                    mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) * c9o1 + c3o1 * (mfcaa + mfaca)) * OOrho - (drho * OOrho)) * c1o9;
-                    mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) * c9o1 + c3o1 * (mfcaa + mfaac)) * OOrho - (drho * OOrho)) * c1o9;
-                    mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) * c9o1 + c3o1 * (mfaac + mfaca)) * OOrho - (drho * OOrho)) * c1o9;
-
-                    //////////////////////////////////////////////////////////////////////////
-                    //5.
-                    mfbcc = CUMbcc + c1o3 * (c3o1 * (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + (mfbca + mfbac)) * OOrho;
-                    mfcbc = CUMcbc + c1o3 * (c3o1 * (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + (mfcba + mfabc)) * OOrho;
-                    mfccb = CUMccb + c1o3 * (c3o1 * (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + (mfacb + mfcab)) * OOrho;
-
-                    //////////////////////////////////////////////////////////////////////////
-                    //6.
-                    mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb
-                                       - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-                                       - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-                                       - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho
-                                      + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-                                         + c2o1 * (mfcaa * mfaca * mfaac)
-                                         + c16o1 * mfbba * mfbab * mfabb) * OOrho * OOrho
-                                      - c1o3 * (mfacc + mfcac + mfcca) * OOrho
-                                      - c1o9 * (mfcaa + mfaca + mfaac) * OOrho
-                                      + (c2o1 * (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, c1o1, c1o1);
-                    backwardChimera(mfaba, mfbba, mfcba, vvx, vx2);
-                    backwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, 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, c3o1, c1o3);
-                    backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2);
-                    backwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9);
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    // Y - Dir
-                    backwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6);
-                    backwardChimera(mfaab, mfabb, mfacb, vvy, vy2);
-                    backwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, 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, c6o1, c1o6);
-                    backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2);
-                    backwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18);
-
-                    ////////////////////////////////////////////////////////////////////////////////////
-                    // Z - Dir
-                    backwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36);
-                    backwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9);
-                    backwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36);
-                    backwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9);
-                    backwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9);
-                    backwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9);
-                    backwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36);
-                    backwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9);
-                    backwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36);
-                    ////////////////////////////////////////////////////////////////////////////////////
-
-                    //////////////////////////////////////////////////////////////////////////
-                    //proof correctness
-                    //////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-                    real 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;
-                    real dif = drho - drho_post;
-#ifdef SINGLEPRECISION
-                    if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-                    if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-                    {
-                        UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(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;
-                    //////////////////////////////////////////////////////////////////////////
-
-                }
-            }
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
diff --git a/src/cpu/core/LBM/CumulantK17LBMKernel.h b/src/cpu/core/LBM/CumulantK17LBMKernel.h
deleted file mode 100644
index aa202d7894243cd407ec30db94e0678d72b68aea..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/CumulantK17LBMKernel.h
+++ /dev/null
@@ -1,76 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file CumulantK17LBMKernel.h
-//! \ingroup LBM
-//! \author Konstantin Kutscher, Martin Geier
-//=======================================================================================
-
-#ifndef CumulantK17LBMKernel_h__
-#define CumulantK17LBMKernel_h__
-
-#include "LBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \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>
-//!
-class CumulantK17LBMKernel : public LBMKernel
-{
-public:
-    CumulantK17LBMKernel();
-    ~CumulantK17LBMKernel() = default;
-    void calculate(int step) override;
-    SPtr<LBMKernel> clone() override;
-    real getCalculationTime() override { return .0; }
-
-protected:
-    virtual void initDataSet();
-    real f[D3Q27System::ENDF + 1];
-
-    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
-    CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
-    CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr restDistributions;
-
-    mu::value_type muX1, muX2, muX3;
-    mu::value_type muDeltaT;
-    mu::value_type muNu;
-    real forcingX1;
-    real forcingX2;
-    real forcingX3;
-};
-
-#endif // CumulantK17LBMKernel_h__
diff --git a/src/cpu/core/LBM/CumulantLBMKernel.cpp b/src/cpu/core/LBM/CumulantLBMKernel.cpp
deleted file mode 100644
index 1b8d5a230ddf7a2d9b58c9e7ca8231f5c9d3500f..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/CumulantLBMKernel.cpp
+++ /dev/null
@@ -1,1966 +0,0 @@
-#include "CumulantLBMKernel.h"
-#include "D3Q27System.h"
-#include "Interpolator.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <math.h>
-#include "DataSet3D.h"
-#include "Block3D.h"
-
-#define PROOF_CORRECTNESS
-
-//using namespace UbMath;
-using namespace vf::basics::constant;
-
-//////////////////////////////////////////////////////////////////////////
-CumulantLBMKernel::CumulantLBMKernel()
-{
-   this->compressible = true;
-   this->parameter = CumulantLBMKernel::NORMAL;
-   this->OxyyMxzz = c1o1;
-   this->bulkOmegaToOmega = false;
-   this->OxxPyyPzz = c1o1;
-}
-//////////////////////////////////////////////////////////////////////////
-void CumulantLBMKernel::initDataSet()
-{
-   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
-   dataSet->setFdistributions(d);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> CumulantLBMKernel::clone()
-{
-   SPtr<LBMKernel> kernel(new CumulantLBMKernel());
-   kernel->setNX(nx);
-   dynamicPointerCast<CumulantLBMKernel>(kernel)->initDataSet();
-   kernel->setCollisionFactor(this->collFactor);
-   kernel->setBCSet(bcSet->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   kernel->setDeltaT(deltaT);
-   kernel->setBlock(block.lock());
-
-   switch (parameter)
-   {
-   case NORMAL:
-      dynamicPointerCast<CumulantLBMKernel>(kernel)->OxyyMxzz = c1o1;
-      break;
-   case MAGIC:
-      dynamicPointerCast<CumulantLBMKernel>(kernel)->OxyyMxzz = c2o1 + (-collFactor);
-      break;
-   }
-
-   if (bulkOmegaToOmega)
-   {
-      dynamicPointerCast<CumulantLBMKernel>(kernel)->OxxPyyPzz = collFactor;
-   }
-   else
-   {
-      dynamicPointerCast<CumulantLBMKernel>(kernel)->OxxPyyPzz = c1o1;
-   }
-   return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-//void CumulantLBMKernel::calculate(int step)
-//{
-//   using namespace D3Q27System;
-//   using namespace std;
-//
-//   //timer.resetAndStart();
-//
-//   //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);
-//
-//      LBMReal forcingX1 = 0;
-//      LBMReal forcingX2 = 0;
-//      LBMReal forcingX3 = 0;
-//   }
-//   /////////////////////////////////////
-//
-//   localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-//   nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-//   zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-//
-//   SPtr<BCArray3D> bcArray = this->getBCSet()->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;
-//
-//
-//   //#pragma omp parallel num_threads(8)
-//   {
-//      //   int i = omp_get_thread_num();
-//      //   printf_s("Hello from thread %d\n", i);
-//      //}
-//   //#pragma omp for 
-//      for (int x3 = minX3; x3 < maxX3; x3++)
-//      {
-//         for (int x2 = minX2; x2 < maxX2; x2++)
-//         {
-//            for (int x1 = minX1; x1 < maxX1; x1++)
-//            {
-//               if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3))
-//               {
-//                  int x1p = x1 + 1;
-//                  int x2p = x2 + 1;
-//                  int x3p = x3 + 1;
-//                  //////////////////////////////////////////////////////////////////////////
-//                  //read distribution
-//                  ////////////////////////////////////////////////////////////////////////////
-//                  //////////////////////////////////////////////////////////////////////////
-//
-//                  //E   N  T
-//                  //c   c  c
-//                  //////////
-//                  //W   S  B
-//                  //a   a  a
-//
-//                  //Rest ist b
-//
-//                  //mfxyz
-//                  //a - negative
-//                  //b - null
-//                  //c - positive
-//
-//                  // a b c
-//                  //-1 0 1
-//
-//                  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->zeroDistributions)(x1, x2, x3);
-//
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  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 = one + drho;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  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();
-//
-//                     vvx += forcingX1 * deltaT * 0.5; // X
-//                     vvy += forcingX2 * deltaT * 0.5; // Y
-//                     vvz += forcingX3 * deltaT * 0.5; // Z
-//                  }
-//                  ///////////////////////////////////////////////////////////////////////////////////////////               
-//            ////////////////////////////////////////////////////////////////////////////////////
-//                  LBMReal oMdrho = one; // comp special
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  LBMReal m0, m1, m2;
-//                  LBMReal vx2;
-//                  LBMReal vy2;
-//                  LBMReal vz2;
-//                  vx2 = vvx * vvx;
-//                  vy2 = vvy * vvy;
-//                  vz2 = vvz * vvz;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  //LBMReal wadjust;
-//                  //LBMReal qudricLimitP = 0.01f;// * 0.0001f;
-//                  //LBMReal qudricLimitM = 0.01f;// * 0.0001f;
-//                  //LBMReal qudricLimitD = 0.01f;// * 0.001f;
-//                  //LBMReal s9 = minusomega;
-//                  //test
-//                  //s9 = 0.;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  //Hin
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  // Z - Dir
-//                  m2 = mfaaa + mfaac;
-//                  m1 = mfaac - mfaaa;
-//                  m0 = m2 + mfaab;
-//                  mfaaa = m0;
-//                  m0 += c1o36 * oMdrho;
-//                  mfaab = m1 - m0 * vvz;
-//                  mfaac = m2 - two * m1 * vvz + vz2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfaba + mfabc;
-//                  m1 = mfabc - mfaba;
-//                  m0 = m2 + mfabb;
-//                  mfaba = m0;
-//                  m0 += c1o9 * oMdrho;
-//                  mfabb = m1 - m0 * vvz;
-//                  mfabc = m2 - two * m1 * vvz + vz2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfaca + mfacc;
-//                  m1 = mfacc - mfaca;
-//                  m0 = m2 + mfacb;
-//                  mfaca = m0;
-//                  m0 += c1o36 * oMdrho;
-//                  mfacb = m1 - m0 * vvz;
-//                  mfacc = m2 - two * m1 * vvz + vz2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfbaa + mfbac;
-//                  m1 = mfbac - mfbaa;
-//                  m0 = m2 + mfbab;
-//                  mfbaa = m0;
-//                  m0 += c1o9 * oMdrho;
-//                  mfbab = m1 - m0 * vvz;
-//                  mfbac = m2 - two * m1 * vvz + vz2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfbba + mfbbc;
-//                  m1 = mfbbc - mfbba;
-//                  m0 = m2 + mfbbb;
-//                  mfbba = m0;
-//                  m0 += c4o9 * oMdrho;
-//                  mfbbb = m1 - m0 * vvz;
-//                  mfbbc = m2 - two * m1 * vvz + vz2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfbca + mfbcc;
-//                  m1 = mfbcc - mfbca;
-//                  m0 = m2 + mfbcb;
-//                  mfbca = m0;
-//                  m0 += c1o9 * oMdrho;
-//                  mfbcb = m1 - m0 * vvz;
-//                  mfbcc = m2 - two * m1 * vvz + vz2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfcaa + mfcac;
-//                  m1 = mfcac - mfcaa;
-//                  m0 = m2 + mfcab;
-//                  mfcaa = m0;
-//                  m0 += c1o36 * oMdrho;
-//                  mfcab = m1 - m0 * vvz;
-//                  mfcac = m2 - two * m1 * vvz + vz2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfcba + mfcbc;
-//                  m1 = mfcbc - mfcba;
-//                  m0 = m2 + mfcbb;
-//                  mfcba = m0;
-//                  m0 += c1o9 * oMdrho;
-//                  mfcbb = m1 - m0 * vvz;
-//                  mfcbc = m2 - two * m1 * vvz + vz2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfcca + mfccc;
-//                  m1 = mfccc - mfcca;
-//                  m0 = m2 + mfccb;
-//                  mfcca = m0;
-//                  m0 += c1o36 * oMdrho;
-//                  mfccb = m1 - m0 * vvz;
-//                  mfccc = m2 - two * m1 * vvz + vz2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  // Y - Dir
-//                  m2 = mfaaa + mfaca;
-//                  m1 = mfaca - mfaaa;
-//                  m0 = m2 + mfaba;
-//                  mfaaa = m0;
-//                  m0 += c1o6 * oMdrho;
-//                  mfaba = m1 - m0 * vvy;
-//                  mfaca = m2 - two * m1 * vvy + vy2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfaab + mfacb;
-//                  m1 = mfacb - mfaab;
-//                  m0 = m2 + mfabb;
-//                  mfaab = m0;
-//                  mfabb = m1 - m0 * vvy;
-//                  mfacb = m2 - two * m1 * vvy + vy2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfaac + mfacc;
-//                  m1 = mfacc - mfaac;
-//                  m0 = m2 + mfabc;
-//                  mfaac = m0;
-//                  m0 += c1o18 * oMdrho;
-//                  mfabc = m1 - m0 * vvy;
-//                  mfacc = m2 - two * m1 * vvy + vy2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfbaa + mfbca;
-//                  m1 = mfbca - mfbaa;
-//                  m0 = m2 + mfbba;
-//                  mfbaa = m0;
-//                  m0 += c2o3 * oMdrho;
-//                  mfbba = m1 - m0 * vvy;
-//                  mfbca = m2 - two * m1 * vvy + vy2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfbab + mfbcb;
-//                  m1 = mfbcb - mfbab;
-//                  m0 = m2 + mfbbb;
-//                  mfbab = m0;
-//                  mfbbb = m1 - m0 * vvy;
-//                  mfbcb = m2 - two * m1 * vvy + vy2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfbac + mfbcc;
-//                  m1 = mfbcc - mfbac;
-//                  m0 = m2 + mfbbc;
-//                  mfbac = m0;
-//                  m0 += c2o9 * oMdrho;
-//                  mfbbc = m1 - m0 * vvy;
-//                  mfbcc = m2 - two * m1 * vvy + vy2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfcaa + mfcca;
-//                  m1 = mfcca - mfcaa;
-//                  m0 = m2 + mfcba;
-//                  mfcaa = m0;
-//                  m0 += c1o6 * oMdrho;
-//                  mfcba = m1 - m0 * vvy;
-//                  mfcca = m2 - two * m1 * vvy + vy2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfcab + mfccb;
-//                  m1 = mfccb - mfcab;
-//                  m0 = m2 + mfcbb;
-//                  mfcab = m0;
-//                  mfcbb = m1 - m0 * vvy;
-//                  mfccb = m2 - two * m1 * vvy + vy2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfcac + mfccc;
-//                  m1 = mfccc - mfcac;
-//                  m0 = m2 + mfcbc;
-//                  mfcac = m0;
-//                  m0 += c1o18 * oMdrho;
-//                  mfcbc = m1 - m0 * vvy;
-//                  mfccc = m2 - two * 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 += one * oMdrho;
-//                  mfbaa = m1 - m0 * vvx;
-//                  mfcaa = m2 - two * m1 * vvx + vx2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfaba + mfcba;
-//                  m1 = mfcba - mfaba;
-//                  m0 = m2 + mfbba;
-//                  mfaba = m0;
-//                  mfbba = m1 - m0 * vvx;
-//                  mfcba = m2 - two * m1 * vvx + vx2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfaca + mfcca;
-//                  m1 = mfcca - mfaca;
-//                  m0 = m2 + mfbca;
-//                  mfaca = m0;
-//                  m0 += c1o3 * oMdrho;
-//                  mfbca = m1 - m0 * vvx;
-//                  mfcca = m2 - two * m1 * vvx + vx2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfaab + mfcab;
-//                  m1 = mfcab - mfaab;
-//                  m0 = m2 + mfbab;
-//                  mfaab = m0;
-//                  mfbab = m1 - m0 * vvx;
-//                  mfcab = m2 - two * m1 * vvx + vx2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfabb + mfcbb;
-//                  m1 = mfcbb - mfabb;
-//                  m0 = m2 + mfbbb;
-//                  mfabb = m0;
-//                  mfbbb = m1 - m0 * vvx;
-//                  mfcbb = m2 - two * m1 * vvx + vx2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfacb + mfccb;
-//                  m1 = mfccb - mfacb;
-//                  m0 = m2 + mfbcb;
-//                  mfacb = m0;
-//                  mfbcb = m1 - m0 * vvx;
-//                  mfccb = m2 - two * m1 * vvx + vx2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfaac + mfcac;
-//                  m1 = mfcac - mfaac;
-//                  m0 = m2 + mfbac;
-//                  mfaac = m0;
-//                  m0 += c1o3 * oMdrho;
-//                  mfbac = m1 - m0 * vvx;
-//                  mfcac = m2 - two * m1 * vvx + vx2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfabc + mfcbc;
-//                  m1 = mfcbc - mfabc;
-//                  m0 = m2 + mfbbc;
-//                  mfabc = m0;
-//                  mfbbc = m1 - m0 * vvx;
-//                  mfcbc = m2 - two * m1 * vvx + vx2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m2 = mfacc + mfccc;
-//                  m1 = mfccc - mfacc;
-//                  m0 = m2 + mfbcc;
-//                  mfacc = m0;
-//                  m0 += c1o9 * oMdrho;
-//                  mfbcc = m1 - m0 * vvx;
-//                  mfccc = m2 - two * m1 * vvx + vx2 * m0;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//
-//
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  // Cumulants
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//
-//                  //LBMReal OxxPyyPzz = one; // bulk viscosity
-//
-//                  ////////////////////////////////////////////////////////////
-//                  //3.
-//                  //////////////////////////////
-//                  LBMReal OxyyPxzz = one;//three  * (two - omega) / (three  - omega);//
-//                  //LBMReal OxyyMxzz = one;//six    * (two - omega) / (six    - omega);//
-//                  LBMReal Oxyz = one;//twelve * (two - omega) / (twelve + omega);//
-//                  //////////////////////////////
-//                  //LBMReal OxyyPxzz  = two-omega;//
-//                  //LBMReal OxyyMxzz  = two-omega;//
-//                  //////////////////////////////
-//                  //LBMReal OxyyPxzz  = (eight * (omega - two)) / (omega - eight);//Ginzburg
-//                  //LBMReal OxyyMxzz  = (eight * (omega - two)) / (omega - eight);//Ginzburg
-//                  //////////////////////////////
-//                  //LBMReal OxyyPxzz  = omega;//BGK
-//                  //LBMReal OxyyMxzz  = omega;//BGK
-//                  //////////////////////////////
-//                  //LBMReal OxyyPxzz  = (one + omega) / two;//1P5
-//                  //LBMReal OxyyMxzz  = (one + omega) / two;//1P5
-//                  //////////////////////////////
-//                  //LBMReal OxyyPxzz  = (three - omega) / two;//0P5
-//                  //LBMReal OxyyMxzz  = (three - omega) / two;//0P5
-//                  //////////////////////////////
-//                  //LBMReal OxyyPxzz  = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car
-//                  //LBMReal OxyyMxzz  = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car
-//                  ////////////////////////////////////////////////////////////
-//                  //4.
-//                  //////////////////////////////
-//                  LBMReal O4 = one;
-//                  //////////////////////////////
-//                  //LBMReal O4        = omega;//TRT
-//                  ////////////////////////////////////////////////////////////
-//                  //5.
-//                  //////////////////////////////
-//                  LBMReal O5 = one;
-//                  ////////////////////////////////////////////////////////////
-//                  //6.
-//                  //////////////////////////////
-//                  LBMReal O6 = one;
-//                  ////////////////////////////////////////////////////////////
-//
-//
-//                  //central moments to cumulants
-//                  //4.
-//                  LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + two * mfbba * mfbab) / rho;	//ab 15.05.2015 verwendet
-//                  LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + two * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet
-//                  LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + two * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet
-//
-//                  LBMReal CUMcca = mfcca - (((mfcaa * mfaca + two * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9 * (drho / rho));
-//                  LBMReal CUMcac = mfcac - (((mfcaa * mfaac + two * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9 * (drho / rho));
-//                  LBMReal CUMacc = mfacc - (((mfaac * mfaca + two * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9 * (drho / rho));
-//
-//                  //5.
-//                  LBMReal CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho;
-//                  LBMReal CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho;
-//                  LBMReal CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho;
-//
-//                  //6.
-//
-//                  LBMReal CUMccc = mfccc + ((-four * mfbbb * mfbbb
-//                     - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-//                     - four * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-//                     - two * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho
-//                     + (four * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-//                        + two * (mfcaa * mfaca * mfaac)
-//                        + sixteen * mfbba * mfbab * mfabb) / (rho * rho)
-//                     - c1o3 * (mfacc + mfcac + mfcca) / rho
-//                     - c1o9 * (mfcaa + mfaca + mfaac) / rho
-//                     + (two * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-//                        + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3
-//                     + c1o27 * ((drho * drho - drho) / (rho * rho)));
-//                  //+ c1o27*(one -three/rho +two/(rho*rho)));
-//
-//
-//
-//
-//      //2.
-//      // linear combinations
-//                  LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
-//                  LBMReal mxxMyy = mfcaa - mfaca;
-//                  LBMReal mxxMzz = mfcaa - mfaac;
-//
-//                  //////////////////////////////////////////////////////////////////////////
-//         // 			LBMReal magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.;
-//
-//                  //////////////////////////////////////////////////////////////////////////
-//                  //limiter-Scheise Teil 1
-//                  //LBMReal oxxyy,oxxzz,oxy,oxz,oyz;
-//                  //LBMReal smag=0.001;
-//                  //oxxyy    = omega+(one-omega)*fabs(mxxMyy)/(fabs(mxxMyy)+smag);
-//                  //oxxzz    = omega+(one-omega)*fabs(mxxMzz)/(fabs(mxxMzz)+smag);
-//                  //oxy      = omega+(one-omega)*fabs(mfbba)/(fabs(mfbba)+smag);
-//                  //oxz      = omega+(one-omega)*fabs(mfbab)/(fabs(mfbab)+smag);
-//                  //oyz      = omega+(one-omega)*fabs(mfabb)/(fabs(mfabb)+smag);
-//
-//                  ////////////////////////////////////////////////////////////////////////////
-//                  ////Teil 1b
-//                  //LBMReal constante = 1000.0;
-//                  //LBMReal nuEddi = constante * fabs(mxxPyyPzz);
-//                  //LBMReal omegaLimit = one / (one / omega + three * nuEddi);
-//
-//                  //{
-//                  //	LBMReal dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) +  OxxPyyPzz * (mfaaa - mxxPyyPzz);
-//                  //	LBMReal dyuy = dxux + omegaLimit * c3o2 * mxxMyy;
-//                  //	LBMReal dzuz = dxux + omegaLimit * c3o2 * mxxMzz;
-//
-//                     ////relax
-//                     //mxxPyyPzz += OxxPyyPzz*(mfaaa  - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-//                     //mxxMyy    += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy);
-//                     //mxxMzz    += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz);
-//
-//                  //}
-//                  //mfabb     += omegaLimit * (-mfabb);
-//                  //mfbab     += omegaLimit * (-mfbab);
-//                  //mfbba     += omegaLimit * (-mfbba);
-//                  ////////////////////////////////////////////////////////////////////////////
-//
-//                  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//                  //incl. correction		(hat noch nicht so gut funktioniert...Optimierungsbedarf??)
-//                  {
-//                     LBMReal dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-//                     LBMReal dyuy = dxux + omega * c3o2 * mxxMyy;
-//                     LBMReal dzuz = dxux + omega * c3o2 * mxxMzz;
-//
-//                     //relax
-//                     mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz;
-//                     mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy);
-//                     mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz);
-//
-//                     //////////////////////////////////////////////////////////////////////////
-//                     //limiter-Scheise Teil 2
-//                     //mxxMyy    += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy);
-//                     //mxxMzz    += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz);
-//                     //////////////////////////////////////////////////////////////////////////
-//
-//                  }
-//                  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-//                  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//                  ////no correction
-//                  //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz;
-//                  //mxxMyy    += -(-omega) * (-mxxMyy);
-//                  //mxxMzz    += -(-omega) * (-mxxMzz);
-//                  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//                  mfabb += omega * (-mfabb);
-//                  mfbab += omega * (-mfbab);
-//                  mfbba += omega * (-mfbba);
-//
-//                  //////////////////////////////////////////////////////////////////////////
-//                  //limiter-Scheise Teil 3
-//                  //mfabb     += oyz * (-mfabb);
-//                  //mfbab     += oxz * (-mfbab);
-//                  //mfbba     += oxy * (-mfbba);
-//                  //////////////////////////////////////////////////////////////////////////
-//
-//                  // linear combinations back
-//                  mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-//                  mfaca = c1o3 * (-two * mxxMyy + mxxMzz + mxxPyyPzz);
-//                  mfaac = c1o3 * (mxxMyy - two * mxxMzz + mxxPyyPzz);
-//
-//                  //3.
-//                  // linear combinations
-//
-//                  LBMReal mxxyPyzz = mfcba + mfabc;
-//                  LBMReal mxxyMyzz = mfcba - mfabc;
-//
-//                  LBMReal mxxzPyyz = mfcab + mfacb;
-//                  LBMReal mxxzMyyz = mfcab - mfacb;
-//
-//                  LBMReal mxyyPxzz = mfbca + mfbac;
-//                  LBMReal mxyyMxzz = mfbca - mfbac;
-//
-//                  //relax
-//                  //////////////////////////////////////////////////////////////////////////
-//                  //das ist der limiter
-//                  //wadjust = Oxyz+(one-Oxyz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimitD);
-//                  //mfbbb += wadjust * (-mfbbb);
-//                  //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimitP);
-//                  //mxxyPyzz += wadjust * (-mxxyPyzz);
-//                  //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimitM);
-//                  //mxxyMyzz += wadjust * (-mxxyMyzz);
-//                  //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimitP);
-//                  //mxxzPyyz += wadjust * (-mxxzPyyz);
-//                  //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimitM);
-//                  //mxxzMyyz += wadjust * (-mxxzMyyz);
-//                  //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimitP);
-//                  //mxyyPxzz += wadjust * (-mxyyPxzz);
-//                  //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimitM);
-//                  //mxyyMxzz += wadjust * (-mxyyMxzz);
-//                  //////////////////////////////////////////////////////////////////////////
-//                  //ohne limiter
-//                  mfbbb += OxyyMxzz * (-mfbbb);
-//                  mxxyPyzz += OxyyPxzz * (-mxxyPyzz);
-//                  mxxyMyzz += OxyyMxzz * (-mxxyMyzz);
-//                  mxxzPyyz += OxyyPxzz * (-mxxzPyyz);
-//                  mxxzMyyz += OxyyMxzz * (-mxxzMyyz);
-//                  mxyyPxzz += OxyyPxzz * (-mxyyPxzz);
-//                  mxyyMxzz += OxyyMxzz * (-mxyyMxzz);
-//                  //////////////////////////////////////////////////////////////////////////
-//
-//                  //// linear combinations back
-//                  mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-//                  mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-//                  mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-//                  mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-//                  mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-//                  mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-//
-//                  //4.
-//                  //////////////////////////////////////////////////////////////////////////
-//                  //mit limiter
-//               //	wadjust    = O4+(one-O4)*fabs(CUMacc)/(fabs(CUMacc)+qudricLimit);
-//                  //CUMacc    += wadjust * (-CUMacc);
-//               //	wadjust    = O4+(one-O4)*fabs(CUMcac)/(fabs(CUMcac)+qudricLimit);
-//                  //CUMcac    += wadjust * (-CUMcac); 
-//               //	wadjust    = O4+(one-O4)*fabs(CUMcca)/(fabs(CUMcca)+qudricLimit);
-//                  //CUMcca    += wadjust * (-CUMcca); 
-//
-//               //	wadjust    = O4+(one-O4)*fabs(CUMbbc)/(fabs(CUMbbc)+qudricLimit);
-//                  //CUMbbc    += wadjust * (-CUMbbc); 
-//               //	wadjust    = O4+(one-O4)*fabs(CUMbcb)/(fabs(CUMbcb)+qudricLimit);
-//                  //CUMbcb    += wadjust * (-CUMbcb); 
-//               //	wadjust    = O4+(one-O4)*fabs(CUMcbb)/(fabs(CUMcbb)+qudricLimit);
-//                  //CUMcbb    += wadjust * (-CUMcbb); 
-//                  //////////////////////////////////////////////////////////////////////////
-//                  //ohne limiter
-//                  CUMacc += O4 * (-CUMacc);
-//                  CUMcac += O4 * (-CUMcac);
-//                  CUMcca += O4 * (-CUMcca);
-//
-//                  CUMbbc += O4 * (-CUMbbc);
-//                  CUMbcb += O4 * (-CUMbcb);
-//                  CUMcbb += O4 * (-CUMcbb);
-//                  //////////////////////////////////////////////////////////////////////////
-//
-//
-//                  //5.
-//                  CUMbcc += O5 * (-CUMbcc);
-//                  CUMcbc += O5 * (-CUMcbc);
-//                  CUMccb += O5 * (-CUMccb);
-//
-//                  //6.
-//                  CUMccc += O6 * (-CUMccc);
-//
-//
-//
-//                  //back cumulants to central moments
-//                  //4.
-//                  mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + two * mfbba * mfbab) / rho;
-//                  mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + two * mfbba * mfabb) / rho;
-//                  mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + two * mfbab * mfabb) / rho;
-//
-//                  mfcca = CUMcca + (((mfcaa * mfaca + two * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9 * (drho / rho));//(one/rho-one));
-//                  mfcac = CUMcac + (((mfcaa * mfaac + two * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9 * (drho / rho));//(one/rho-one));
-//                  mfacc = CUMacc + (((mfaac * mfaca + two * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9 * (drho / rho));//(one/rho-one));
-//
-//                  //5.
-//                  mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho;
-//                  mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho;
-//                  mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho;
-//
-//                  //6.
-//
-//                  mfccc = CUMccc - ((-four * mfbbb * mfbbb
-//                     - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-//                     - four * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-//                     - two * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho
-//                     + (four * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-//                        + two * (mfcaa * mfaca * mfaac)
-//                        + sixteen * mfbba * mfbab * mfabb) / (rho * rho)
-//                     - c1o3 * (mfacc + mfcac + mfcca) / rho
-//                     - c1o9 * (mfcaa + mfaca + mfaac) / rho
-//                     + (two * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-//                        + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3
-//                     + c1o27 * ((drho * drho - drho) / (rho * rho)));
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  //forcing
-//                  mfbaa = -mfbaa;
-//                  mfaba = -mfaba;
-//                  mfaab = -mfaab;
-//                  //////////////////////////////////////////////////////////////////////////////////////
-//
-//            ////////////////////////////////////////////////////////////////////////////////////
-//            //back
-//            ////////////////////////////////////////////////////////////////////////////////////
-//            //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-//            ////////////////////////////////////////////////////////////////////////////////////
-//            // Z - Dir
-//                  m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + one * oMdrho) * (vz2 - vvz) * c1o2;
-//                  m1 = -mfaac - two * mfaab * vvz + mfaaa * (one - vz2) - one * oMdrho * vz2;
-//                  m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + one * oMdrho) * (vz2 + vvz) * c1o2;
-//                  mfaaa = m0;
-//                  mfaab = m1;
-//                  mfaac = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-//                  m1 = -mfabc - two * mfabb * vvz + mfaba * (one - vz2);
-//                  m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-//                  mfaba = m0;
-//                  mfabb = m1;
-//                  mfabc = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-//                  m1 = -mfacc - two * mfacb * vvz + mfaca * (one - vz2) - c1o3 * oMdrho * vz2;
-//                  m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-//                  mfaca = m0;
-//                  mfacb = m1;
-//                  mfacc = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-//                  m1 = -mfbac - two * mfbab * vvz + mfbaa * (one - vz2);
-//                  m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-//                  mfbaa = m0;
-//                  mfbab = m1;
-//                  mfbac = m2;
-//                  /////////b//////////////////////////////////////////////////////////////////////////
-//                  m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-//                  m1 = -mfbbc - two * mfbbb * vvz + mfbba * (one - vz2);
-//                  m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-//                  mfbba = m0;
-//                  mfbbb = m1;
-//                  mfbbc = m2;
-//                  /////////b//////////////////////////////////////////////////////////////////////////
-//                  m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-//                  m1 = -mfbcc - two * mfbcb * vvz + mfbca * (one - vz2);
-//                  m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-//                  mfbca = m0;
-//                  mfbcb = m1;
-//                  mfbcc = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-//                  m1 = -mfcac - two * mfcab * vvz + mfcaa * (one - vz2) - c1o3 * oMdrho * vz2;
-//                  m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-//                  mfcaa = m0;
-//                  mfcab = m1;
-//                  mfcac = m2;
-//                  /////////c//////////////////////////////////////////////////////////////////////////
-//                  m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-//                  m1 = -mfcbc - two * mfcbb * vvz + mfcba * (one - vz2);
-//                  m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-//                  mfcba = m0;
-//                  mfcbb = m1;
-//                  mfcbc = m2;
-//                  /////////c//////////////////////////////////////////////////////////////////////////
-//                  m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-//                  m1 = -mfccc - two * mfccb * vvz + mfcca * (one - vz2) - c1o9 * oMdrho * vz2;
-//                  m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-//                  mfcca = m0;
-//                  mfccb = m1;
-//                  mfccc = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  // Y - Dir
-//                  m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-//                  m1 = -mfaca - two * mfaba * vvy + mfaaa * (one - vy2) - c1o6 * oMdrho * vy2;
-//                  m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-//                  mfaaa = m0;
-//                  mfaba = m1;
-//                  mfaca = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-//                  m1 = -mfacb - two * mfabb * vvy + mfaab * (one - vy2) - c2o3 * oMdrho * vy2;
-//                  m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-//                  mfaab = m0;
-//                  mfabb = m1;
-//                  mfacb = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-//                  m1 = -mfacc - two * mfabc * vvy + mfaac * (one - vy2) - c1o6 * oMdrho * vy2;
-//                  m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-//                  mfaac = m0;
-//                  mfabc = m1;
-//                  mfacc = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-//                  m1 = -mfbca - two * mfbba * vvy + mfbaa * (one - vy2);
-//                  m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-//                  mfbaa = m0;
-//                  mfbba = m1;
-//                  mfbca = m2;
-//                  /////////b//////////////////////////////////////////////////////////////////////////
-//                  m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-//                  m1 = -mfbcb - two * mfbbb * vvy + mfbab * (one - vy2);
-//                  m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-//                  mfbab = m0;
-//                  mfbbb = m1;
-//                  mfbcb = m2;
-//                  /////////b//////////////////////////////////////////////////////////////////////////
-//                  m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-//                  m1 = -mfbcc - two * mfbbc * vvy + mfbac * (one - vy2);
-//                  m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-//                  mfbac = m0;
-//                  mfbbc = m1;
-//                  mfbcc = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-//                  m1 = -mfcca - two * mfcba * vvy + mfcaa * (one - vy2) - c1o18 * oMdrho * vy2;
-//                  m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-//                  mfcaa = m0;
-//                  mfcba = m1;
-//                  mfcca = m2;
-//                  /////////c//////////////////////////////////////////////////////////////////////////
-//                  m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-//                  m1 = -mfccb - two * mfcbb * vvy + mfcab * (one - vy2) - c2o9 * oMdrho * vy2;
-//                  m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-//                  mfcab = m0;
-//                  mfcbb = m1;
-//                  mfccb = m2;
-//                  /////////c//////////////////////////////////////////////////////////////////////////
-//                  m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-//                  m1 = -mfccc - two * mfcbc * vvy + mfcac * (one - vy2) - c1o18 * oMdrho * vy2;
-//                  m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-//                  mfcac = m0;
-//                  mfcbc = m1;
-//                  mfccc = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  // X - Dir
-//                  m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-//                  m1 = -mfcaa - two * mfbaa * vvx + mfaaa * (one - vx2) - c1o36 * oMdrho * vx2;
-//                  m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-//                  mfaaa = m0;
-//                  mfbaa = m1;
-//                  mfcaa = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-//                  m1 = -mfcba - two * mfbba * vvx + mfaba * (one - vx2) - c1o9 * oMdrho * vx2;
-//                  m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-//                  mfaba = m0;
-//                  mfbba = m1;
-//                  mfcba = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-//                  m1 = -mfcca - two * mfbca * vvx + mfaca * (one - vx2) - c1o36 * oMdrho * vx2;
-//                  m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-//                  mfaca = m0;
-//                  mfbca = m1;
-//                  mfcca = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-//                  m1 = -mfcab - two * mfbab * vvx + mfaab * (one - vx2) - c1o9 * oMdrho * vx2;
-//                  m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-//                  mfaab = m0;
-//                  mfbab = m1;
-//                  mfcab = m2;
-//                  ///////////b////////////////////////////////////////////////////////////////////////
-//                  m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-//                  m1 = -mfcbb - two * mfbbb * vvx + mfabb * (one - vx2) - c4o9 * oMdrho * vx2;
-//                  m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-//                  mfabb = m0;
-//                  mfbbb = m1;
-//                  mfcbb = m2;
-//                  ///////////b////////////////////////////////////////////////////////////////////////
-//                  m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-//                  m1 = -mfccb - two * mfbcb * vvx + mfacb * (one - vx2) - c1o9 * oMdrho * vx2;
-//                  m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-//                  mfacb = m0;
-//                  mfbcb = m1;
-//                  mfccb = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//                  m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-//                  m1 = -mfcac - two * mfbac * vvx + mfaac * (one - vx2) - c1o36 * oMdrho * vx2;
-//                  m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-//                  mfaac = m0;
-//                  mfbac = m1;
-//                  mfcac = m2;
-//                  ///////////c////////////////////////////////////////////////////////////////////////
-//                  m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-//                  m1 = -mfcbc - two * mfbbc * vvx + mfabc * (one - vx2) - c1o9 * oMdrho * vx2;
-//                  m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-//                  mfabc = m0;
-//                  mfbbc = m1;
-//                  mfcbc = m2;
-//                  ///////////c////////////////////////////////////////////////////////////////////////
-//                  m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-//                  m1 = -mfccc - two * mfbcc * vvx + mfacc * (one - vx2) - c1o36 * oMdrho * vx2;
-//                  m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-//                  mfacc = m0;
-//                  mfbcc = m1;
-//                  mfccc = m2;
-//                  ////////////////////////////////////////////////////////////////////////////////////
-//
-//                  //////////////////////////////////////////////////////////////////////////
-//                  //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 = fabs(rho - rho_post);
-//                  LBMReal dif = drho - drho_post;
-//#ifdef SINGLEPRECISION
-//                  if (dif > 10.0E-7 || dif < -10.0E-7)
-//#else
-//                  if (dif > 10.0E-15 || dif < -10.0E-15)
-//#endif
-//                  {
-//                     UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(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 distribution
-//                  //////////////////////////////////////////////////////////////////////////
-//                  (*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->zeroDistributions)(x1, x2, x3) = mfbbb;
-//                  //////////////////////////////////////////////////////////////////////////
-//
-//               }
-//            }
-//         }
-//      }
-//
-//   }
-//
-//   //timer.stop();
-//}
-//////////////////////////////////////////////////////////////////////////
-real CumulantLBMKernel::getCalculationTime()
-{
-   //return timer.getDuration();
-   return timer.getTotalTime();
-}
-//////////////////////////////////////////////////////////////////////////
-void CumulantLBMKernel::setBulkOmegaToOmega(bool value)
-{
-   bulkOmegaToOmega = value;
-}
-//////////////////////////////////////////////////////////////////////////
-void CumulantLBMKernel::setRelaxationParameter(Parameter p)
-{
-   parameter = p;
-}
-
-void CumulantLBMKernel::initData()
-{
-   //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 = (c1o1 / c3o1) * (c1o1 / collFactor - c1o1 / c2o1);
-
-      muForcingX1.DefineVar("nu", &muNu);
-      muForcingX2.DefineVar("nu", &muNu);
-      muForcingX3.DefineVar("nu", &muNu);
-   }
-   localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-   omega = collFactor;
-}
-
-void CumulantLBMKernel::nodeCollision(int step, int x1, int x2, int x3)
-{
-   int x1p = x1 + 1;
-   int x2p = x2 + 1;
-   int x3p = x3 + 1;
-   //////////////////////////////////////////////////////////////////////////
-   //read distribution
-   ////////////////////////////////////////////////////////////////////////////
-   //////////////////////////////////////////////////////////////////////////
-
-   //E   N  T
-   //c   c  c
-   //////////
-   //W   S  B
-   //a   a  a
-
-   //Rest ist b
-
-   //mfxyz
-   //a - negative
-   //b - null
-   //c - positive
-
-   // a b c
-   //-1 0 1
-
-   real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-   real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-   real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-   real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-   real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-   real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-   real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-   real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-   real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-   real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-   real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-   real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-   real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-   real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-   real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-   real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-   real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-   real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-   real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-   real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-   real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-   real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-   real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-   real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-   real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-   real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-   real mfbbb = (*this->zeroDistributions)(x1, x2, x3);
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   real 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;
-
-   real rho = c1o1 + drho;
-   ////////////////////////////////////////////////////////////////////////////////////
-   real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
-      (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
-      (mfcbb - mfabb)) / rho;
-   real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
-      (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
-      (mfbcb - mfbab)) / rho;
-   real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
-      (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
-      (mfbbc - mfbba)) / rho;
-   ////////////////////////////////////////////////////////////////////////////////////
-
-   //forcing 
-   ///////////////////////////////////////////////////////////////////////////////////////////
-   if (withForcing)
-   {
-      muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1);
-      muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2);
-      muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3);
-
-      forcingX1 = muForcingX1.Eval();
-      forcingX2 = muForcingX2.Eval();
-      forcingX3 = muForcingX3.Eval();
-
-      vvx += forcingX1 * deltaT * c1o2; // X
-      vvy += forcingX2 * deltaT * c1o2; // Y
-      vvz += forcingX3 * deltaT * c1o2; // Z
-   }
-   ///////////////////////////////////////////////////////////////////////////////////////////               
-////////////////////////////////////////////////////////////////////////////////////
-   real oMdrho = c1o1; // comp special
-   ////////////////////////////////////////////////////////////////////////////////////
-   real m0, m1, m2;
-   real vx2;
-   real vy2;
-   real vz2;
-   vx2 = vvx * vvx;
-   vy2 = vvy * vvy;
-   vz2 = vvz * vvz;
-   ////////////////////////////////////////////////////////////////////////////////////
-   //LBMReal wadjust;
-   //LBMReal qudricLimitP = 0.01f;// * 0.0001f;
-   //LBMReal qudricLimitM = 0.01f;// * 0.0001f;
-   //LBMReal qudricLimitD = 0.01f;// * 0.001f;
-   //LBMReal s9 = minusomega;
-   //test
-   //s9 = 0.;
-   ////////////////////////////////////////////////////////////////////////////////////
-   //Hin
-   ////////////////////////////////////////////////////////////////////////////////////
-   // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Z - Dir
-   m2 = mfaaa + mfaac;
-   m1 = mfaac - mfaaa;
-   m0 = m2 + mfaab;
-   mfaaa = m0;
-   m0 += c1o36 * oMdrho;
-   mfaab = m1 - m0 * vvz;
-   mfaac = m2 - c2o1 * m1 * vvz + vz2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfaba + mfabc;
-   m1 = mfabc - mfaba;
-   m0 = m2 + mfabb;
-   mfaba = m0;
-   m0 += c1o9 * oMdrho;
-   mfabb = m1 - m0 * vvz;
-   mfabc = m2 - c2o1 * m1 * vvz + vz2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfaca + mfacc;
-   m1 = mfacc - mfaca;
-   m0 = m2 + mfacb;
-   mfaca = m0;
-   m0 += c1o36 * oMdrho;
-   mfacb = m1 - m0 * vvz;
-   mfacc = m2 - c2o1 * m1 * vvz + vz2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfbaa + mfbac;
-   m1 = mfbac - mfbaa;
-   m0 = m2 + mfbab;
-   mfbaa = m0;
-   m0 += c1o9 * oMdrho;
-   mfbab = m1 - m0 * vvz;
-   mfbac = m2 - c2o1 * m1 * vvz + vz2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfbba + mfbbc;
-   m1 = mfbbc - mfbba;
-   m0 = m2 + mfbbb;
-   mfbba = m0;
-   m0 += c4o9 * oMdrho;
-   mfbbb = m1 - m0 * vvz;
-   mfbbc = m2 - c2o1 * m1 * vvz + vz2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfbca + mfbcc;
-   m1 = mfbcc - mfbca;
-   m0 = m2 + mfbcb;
-   mfbca = m0;
-   m0 += c1o9 * oMdrho;
-   mfbcb = m1 - m0 * vvz;
-   mfbcc = m2 - c2o1 * m1 * vvz + vz2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfcaa + mfcac;
-   m1 = mfcac - mfcaa;
-   m0 = m2 + mfcab;
-   mfcaa = m0;
-   m0 += c1o36 * oMdrho;
-   mfcab = m1 - m0 * vvz;
-   mfcac = m2 - c2o1 * m1 * vvz + vz2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfcba + mfcbc;
-   m1 = mfcbc - mfcba;
-   m0 = m2 + mfcbb;
-   mfcba = m0;
-   m0 += c1o9 * oMdrho;
-   mfcbb = m1 - m0 * vvz;
-   mfcbc = m2 - c2o1 * m1 * vvz + vz2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfcca + mfccc;
-   m1 = mfccc - mfcca;
-   m0 = m2 + mfccb;
-   mfcca = m0;
-   m0 += c1o36 * oMdrho;
-   mfccb = m1 - m0 * vvz;
-   mfccc = m2 - c2o1 * m1 * vvz + vz2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Y - Dir
-   m2 = mfaaa + mfaca;
-   m1 = mfaca - mfaaa;
-   m0 = m2 + mfaba;
-   mfaaa = m0;
-   m0 += c1o6 * oMdrho;
-   mfaba = m1 - m0 * vvy;
-   mfaca = m2 - c2o1 * m1 * vvy + vy2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfaab + mfacb;
-   m1 = mfacb - mfaab;
-   m0 = m2 + mfabb;
-   mfaab = m0;
-   mfabb = m1 - m0 * vvy;
-   mfacb = m2 - c2o1 * m1 * vvy + vy2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfaac + mfacc;
-   m1 = mfacc - mfaac;
-   m0 = m2 + mfabc;
-   mfaac = m0;
-   m0 += c1o18 * oMdrho;
-   mfabc = m1 - m0 * vvy;
-   mfacc = m2 - c2o1 * m1 * vvy + vy2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfbaa + mfbca;
-   m1 = mfbca - mfbaa;
-   m0 = m2 + mfbba;
-   mfbaa = m0;
-   m0 += c2o3 * oMdrho;
-   mfbba = m1 - m0 * vvy;
-   mfbca = m2 - c2o1 * m1 * vvy + vy2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfbab + mfbcb;
-   m1 = mfbcb - mfbab;
-   m0 = m2 + mfbbb;
-   mfbab = m0;
-   mfbbb = m1 - m0 * vvy;
-   mfbcb = m2 - c2o1 * m1 * vvy + vy2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfbac + mfbcc;
-   m1 = mfbcc - mfbac;
-   m0 = m2 + mfbbc;
-   mfbac = m0;
-   m0 += c2o9 * oMdrho;
-   mfbbc = m1 - m0 * vvy;
-   mfbcc = m2 - c2o1 * m1 * vvy + vy2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfcaa + mfcca;
-   m1 = mfcca - mfcaa;
-   m0 = m2 + mfcba;
-   mfcaa = m0;
-   m0 += c1o6 * oMdrho;
-   mfcba = m1 - m0 * vvy;
-   mfcca = m2 - c2o1 * m1 * vvy + vy2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfcab + mfccb;
-   m1 = mfccb - mfcab;
-   m0 = m2 + mfcbb;
-   mfcab = m0;
-   mfcbb = m1 - m0 * vvy;
-   mfccb = m2 - c2o1 * m1 * vvy + vy2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfcac + mfccc;
-   m1 = mfccc - mfcac;
-   m0 = m2 + mfcbc;
-   mfcac = m0;
-   m0 += c1o18 * oMdrho;
-   mfcbc = m1 - m0 * vvy;
-   mfccc = m2 - c2o1 * 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 += c1o1 * oMdrho;
-   mfbaa = m1 - m0 * vvx;
-   mfcaa = m2 - c2o1 * m1 * vvx + vx2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfaba + mfcba;
-   m1 = mfcba - mfaba;
-   m0 = m2 + mfbba;
-   mfaba = m0;
-   mfbba = m1 - m0 * vvx;
-   mfcba = m2 - c2o1 * m1 * vvx + vx2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfaca + mfcca;
-   m1 = mfcca - mfaca;
-   m0 = m2 + mfbca;
-   mfaca = m0;
-   m0 += c1o3 * oMdrho;
-   mfbca = m1 - m0 * vvx;
-   mfcca = m2 - c2o1 * m1 * vvx + vx2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfaab + mfcab;
-   m1 = mfcab - mfaab;
-   m0 = m2 + mfbab;
-   mfaab = m0;
-   mfbab = m1 - m0 * vvx;
-   mfcab = m2 - c2o1 * m1 * vvx + vx2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfabb + mfcbb;
-   m1 = mfcbb - mfabb;
-   m0 = m2 + mfbbb;
-   mfabb = m0;
-   mfbbb = m1 - m0 * vvx;
-   mfcbb = m2 - c2o1 * m1 * vvx + vx2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfacb + mfccb;
-   m1 = mfccb - mfacb;
-   m0 = m2 + mfbcb;
-   mfacb = m0;
-   mfbcb = m1 - m0 * vvx;
-   mfccb = m2 - c2o1 * m1 * vvx + vx2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfaac + mfcac;
-   m1 = mfcac - mfaac;
-   m0 = m2 + mfbac;
-   mfaac = m0;
-   m0 += c1o3 * oMdrho;
-   mfbac = m1 - m0 * vvx;
-   mfcac = m2 - c2o1 * m1 * vvx + vx2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfabc + mfcbc;
-   m1 = mfcbc - mfabc;
-   m0 = m2 + mfbbc;
-   mfabc = m0;
-   mfbbc = m1 - m0 * vvx;
-   mfcbc = m2 - c2o1 * m1 * vvx + vx2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m2 = mfacc + mfccc;
-   m1 = mfccc - mfacc;
-   m0 = m2 + mfbcc;
-   mfacc = m0;
-   m0 += c1o9 * oMdrho;
-   mfbcc = m1 - m0 * vvx;
-   mfccc = m2 - c2o1 * m1 * vvx + vx2 * m0;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-
-
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Cumulants
-   ////////////////////////////////////////////////////////////////////////////////////
-
-   //LBMReal OxxPyyPzz = one; // bulk viscosity
-
-   ////////////////////////////////////////////////////////////
-   //3.
-   //////////////////////////////
-   real OxyyPxzz = c1o1;//three  * (two - omega) / (three  - omega);//
-   //LBMReal OxyyMxzz = one;//six    * (two - omega) / (six    - omega);//
-   //LBMReal Oxyz = one;//twelve * (two - omega) / (twelve + omega);//
-   //////////////////////////////
-   //LBMReal OxyyPxzz  = two-omega;//
-   //LBMReal OxyyMxzz  = two-omega;//
-   //////////////////////////////
-   //LBMReal OxyyPxzz  = (eight * (omega - two)) / (omega - eight);//Ginzburg
-   //LBMReal OxyyMxzz  = (eight * (omega - two)) / (omega - eight);//Ginzburg
-   //////////////////////////////
-   //LBMReal OxyyPxzz  = omega;//BGK
-   //LBMReal OxyyMxzz  = omega;//BGK
-   //////////////////////////////
-   //LBMReal OxyyPxzz  = (one + omega) / two;//1P5
-   //LBMReal OxyyMxzz  = (one + omega) / two;//1P5
-   //////////////////////////////
-   //LBMReal OxyyPxzz  = (three - omega) / two;//0P5
-   //LBMReal OxyyMxzz  = (three - omega) / two;//0P5
-   //////////////////////////////
-   //LBMReal OxyyPxzz  = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car
-   //LBMReal OxyyMxzz  = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car
-   ////////////////////////////////////////////////////////////
-   //4.
-   //////////////////////////////
-   real O4 = c1o1;
-   //////////////////////////////
-   //real O4        = omega;//TRT
-   ////////////////////////////////////////////////////////////
-   //5.
-   //////////////////////////////
-   real O5 = c1o1;
-   ////////////////////////////////////////////////////////////
-   //6.
-   //////////////////////////////
-   real O6 = c1o1;
-   ////////////////////////////////////////////////////////////
-
-
-   //central moments to cumulants
-   //4.
-   real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho;	//ab 15.05.2015 verwendet
-   real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet
-   real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet
-
-   real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9 * (drho / rho));
-   real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9 * (drho / rho));
-   real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9 * (drho / rho));
-
-   //5.
-   real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho;
-   real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho;
-   real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho;
-
-   //6.
-
-   real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb
-      - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-      - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-      - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho
-      + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-         + c2o1 * (mfcaa * mfaca * mfaac)
-         + c16o1 * mfbba * mfbab * mfabb) / (rho * rho)
-      - c1o3 * (mfacc + mfcac + mfcca) / rho
-      - c1o9 * (mfcaa + mfaca + mfaac) / rho
-      + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-         + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3
-      + c1o27 * ((drho * drho - drho) / (rho * rho)));
-   //+ c1o27*(one -three/rho +two/(rho*rho)));
-
-
-
-
-//2.
-// linear combinations
-   real mxxPyyPzz = mfcaa + mfaca + mfaac;
-   real mxxMyy = mfcaa - mfaca;
-   real mxxMzz = mfcaa - mfaac;
-
-   //////////////////////////////////////////////////////////////////////////
-// 			LBMReal magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.;
-
-         //////////////////////////////////////////////////////////////////////////
-         //limiter-Scheise Teil 1
-         //LBMReal oxxyy,oxxzz,oxy,oxz,oyz;
-         //LBMReal smag=0.001;
-         //oxxyy    = omega+(one-omega)*fabs(mxxMyy)/(fabs(mxxMyy)+smag);
-         //oxxzz    = omega+(one-omega)*fabs(mxxMzz)/(fabs(mxxMzz)+smag);
-         //oxy      = omega+(one-omega)*fabs(mfbba)/(fabs(mfbba)+smag);
-         //oxz      = omega+(one-omega)*fabs(mfbab)/(fabs(mfbab)+smag);
-         //oyz      = omega+(one-omega)*fabs(mfabb)/(fabs(mfabb)+smag);
-
-         ////////////////////////////////////////////////////////////////////////////
-         ////Teil 1b
-         //LBMReal constante = 1000.0;
-         //LBMReal nuEddi = constante * fabs(mxxPyyPzz);
-         //LBMReal omegaLimit = one / (one / omega + three * nuEddi);
-
-         //{
-         //	LBMReal dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) +  OxxPyyPzz * (mfaaa - mxxPyyPzz);
-         //	LBMReal dyuy = dxux + omegaLimit * c3o2 * mxxMyy;
-         //	LBMReal dzuz = dxux + omegaLimit * c3o2 * mxxMzz;
-
-            ////relax
-            //mxxPyyPzz += OxxPyyPzz*(mfaaa  - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-            //mxxMyy    += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy);
-            //mxxMzz    += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz);
-
-         //}
-         //mfabb     += omegaLimit * (-mfabb);
-         //mfbab     += omegaLimit * (-mfbab);
-         //mfbba     += omegaLimit * (-mfbba);
-         ////////////////////////////////////////////////////////////////////////////
-
-         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         //incl. correction		(hat noch nicht so gut funktioniert...Optimierungsbedarf??)
-   {
-      real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
-      real dyuy = dxux + omega * c3o2 * mxxMyy;
-      real dzuz = dxux + omega * c3o2 * mxxMzz;
-
-      //relax
-      mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz;
-      mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy);
-      mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz);
-
-      //////////////////////////////////////////////////////////////////////////
-      //limiter-Scheise Teil 2
-      //mxxMyy    += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy);
-      //mxxMzz    += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz);
-      //////////////////////////////////////////////////////////////////////////
-
-   }
-   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   ////no correction
-   //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz;
-   //mxxMyy    += -(-omega) * (-mxxMyy);
-   //mxxMzz    += -(-omega) * (-mxxMzz);
-   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   mfabb += omega * (-mfabb);
-   mfbab += omega * (-mfbab);
-   mfbba += omega * (-mfbba);
-
-   //////////////////////////////////////////////////////////////////////////
-   //limiter-Scheise Teil 3
-   //mfabb     += oyz * (-mfabb);
-   //mfbab     += oxz * (-mfbab);
-   //mfbba     += oxy * (-mfbba);
-   //////////////////////////////////////////////////////////////////////////
-
-   // linear combinations back
-   mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
-   mfaca = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz);
-   mfaac = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz);
-
-   //3.
-   // linear combinations
-
-   real mxxyPyzz = mfcba + mfabc;
-   real mxxyMyzz = mfcba - mfabc;
-
-   real mxxzPyyz = mfcab + mfacb;
-   real mxxzMyyz = mfcab - mfacb;
-
-   real mxyyPxzz = mfbca + mfbac;
-   real mxyyMxzz = mfbca - mfbac;
-
-   //relax
-   //////////////////////////////////////////////////////////////////////////
-   //das ist der limiter
-   //wadjust = Oxyz+(one-Oxyz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimitD);
-   //mfbbb += wadjust * (-mfbbb);
-   //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimitP);
-   //mxxyPyzz += wadjust * (-mxxyPyzz);
-   //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimitM);
-   //mxxyMyzz += wadjust * (-mxxyMyzz);
-   //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimitP);
-   //mxxzPyyz += wadjust * (-mxxzPyyz);
-   //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimitM);
-   //mxxzMyyz += wadjust * (-mxxzMyyz);
-   //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimitP);
-   //mxyyPxzz += wadjust * (-mxyyPxzz);
-   //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimitM);
-   //mxyyMxzz += wadjust * (-mxyyMxzz);
-   //////////////////////////////////////////////////////////////////////////
-   //ohne limiter
-   mfbbb += OxyyMxzz * (-mfbbb);
-   mxxyPyzz += OxyyPxzz * (-mxxyPyzz);
-   mxxyMyzz += OxyyMxzz * (-mxxyMyzz);
-   mxxzPyyz += OxyyPxzz * (-mxxzPyyz);
-   mxxzMyyz += OxyyMxzz * (-mxxzMyyz);
-   mxyyPxzz += OxyyPxzz * (-mxyyPxzz);
-   mxyyMxzz += OxyyMxzz * (-mxyyMxzz);
-   //////////////////////////////////////////////////////////////////////////
-
-   //// linear combinations back
-   mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-   mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-   mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-   mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-   mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-   mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-   //4.
-   //////////////////////////////////////////////////////////////////////////
-   //mit limiter
-//	wadjust    = O4+(one-O4)*fabs(CUMacc)/(fabs(CUMacc)+qudricLimit);
-   //CUMacc    += wadjust * (-CUMacc);
-//	wadjust    = O4+(one-O4)*fabs(CUMcac)/(fabs(CUMcac)+qudricLimit);
-   //CUMcac    += wadjust * (-CUMcac); 
-//	wadjust    = O4+(one-O4)*fabs(CUMcca)/(fabs(CUMcca)+qudricLimit);
-   //CUMcca    += wadjust * (-CUMcca); 
-
-//	wadjust    = O4+(one-O4)*fabs(CUMbbc)/(fabs(CUMbbc)+qudricLimit);
-   //CUMbbc    += wadjust * (-CUMbbc); 
-//	wadjust    = O4+(one-O4)*fabs(CUMbcb)/(fabs(CUMbcb)+qudricLimit);
-   //CUMbcb    += wadjust * (-CUMbcb); 
-//	wadjust    = O4+(one-O4)*fabs(CUMcbb)/(fabs(CUMcbb)+qudricLimit);
-   //CUMcbb    += wadjust * (-CUMcbb); 
-   //////////////////////////////////////////////////////////////////////////
-   //ohne limiter
-   CUMacc += O4 * (-CUMacc);
-   CUMcac += O4 * (-CUMcac);
-   CUMcca += O4 * (-CUMcca);
-
-   CUMbbc += O4 * (-CUMbbc);
-   CUMbcb += O4 * (-CUMbcb);
-   CUMcbb += O4 * (-CUMcbb);
-   //////////////////////////////////////////////////////////////////////////
-
-
-   //5.
-   CUMbcc += O5 * (-CUMbcc);
-   CUMcbc += O5 * (-CUMcbc);
-   CUMccb += O5 * (-CUMccb);
-
-   //6.
-   CUMccc += O6 * (-CUMccc);
-
-
-
-   //back cumulants to central moments
-   //4.
-   mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho;
-   mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho;
-   mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho;
-
-   mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9 * (drho / rho));//(one/rho-one));
-   mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9 * (drho / rho));//(one/rho-one));
-   mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9 * (drho / rho));//(one/rho-one));
-
-   //5.
-   mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho;
-   mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho;
-   mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho;
-
-   //6.
-
-   mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb
-      - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-      - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-      - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho
-      + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-         + c2o1 * (mfcaa * mfaca * mfaac)
-         + c16o1 * mfbba * mfbab * mfabb) / (rho * rho)
-      - c1o3 * (mfacc + mfcac + mfcca) / rho
-      - c1o9 * (mfcaa + mfaca + mfaac) / rho
-      + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-         + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3
-      + c1o27 * ((drho * drho - drho) / (rho * rho)));
-   ////////////////////////////////////////////////////////////////////////////////////
-   //forcing
-   mfbaa = -mfbaa;
-   mfaba = -mfaba;
-   mfaab = -mfaab;
-   //////////////////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////////////////
-//back
-////////////////////////////////////////////////////////////////////////////////////
-//mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-////////////////////////////////////////////////////////////////////////////////////
-// Z - Dir
-   m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1 * oMdrho) * (vz2 - vvz) * c1o2;
-   m1 = -mfaac - c2o1 * mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1 * oMdrho * vz2;
-   m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1 * oMdrho) * (vz2 + vvz) * c1o2;
-   mfaaa = m0;
-   mfaab = m1;
-   mfaac = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
-   m1 = -mfabc - c2o1 * mfabb * vvz + mfaba * (c1o1 - vz2);
-   m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
-   mfaba = m0;
-   mfabb = m1;
-   mfabc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-   m1 = -mfacc - c2o1 * mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2;
-   m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-   mfaca = m0;
-   mfacb = m1;
-   mfacc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
-   m1 = -mfbac - c2o1 * mfbab * vvz + mfbaa * (c1o1 - vz2);
-   m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
-   mfbaa = m0;
-   mfbab = m1;
-   mfbac = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
-   m1 = -mfbbc - c2o1 * mfbbb * vvz + mfbba * (c1o1 - vz2);
-   m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
-   mfbba = m0;
-   mfbbb = m1;
-   mfbbc = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
-   m1 = -mfbcc - c2o1 * mfbcb * vvz + mfbca * (c1o1 - vz2);
-   m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
-   mfbca = m0;
-   mfbcb = m1;
-   mfbcc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
-   m1 = -mfcac - c2o1 * mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2;
-   m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
-   mfcaa = m0;
-   mfcab = m1;
-   mfcac = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
-   m1 = -mfcbc - c2o1 * mfcbb * vvz + mfcba * (c1o1 - vz2);
-   m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
-   mfcba = m0;
-   mfcbb = m1;
-   mfcbc = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
-   m1 = -mfccc - c2o1 * mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2;
-   m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
-   mfcca = m0;
-   mfccb = m1;
-   mfccc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Y - Dir
-   m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-   m1 = -mfaca - c2o1 * mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2;
-   m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-   mfaaa = m0;
-   mfaba = m1;
-   mfaca = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
-   m1 = -mfacb - c2o1 * mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2;
-   m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
-   mfaab = m0;
-   mfabb = m1;
-   mfacb = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
-   m1 = -mfacc - c2o1 * mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2;
-   m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
-   mfaac = m0;
-   mfabc = m1;
-   mfacc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
-   m1 = -mfbca - c2o1 * mfbba * vvy + mfbaa * (c1o1 - vy2);
-   m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
-   mfbaa = m0;
-   mfbba = m1;
-   mfbca = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
-   m1 = -mfbcb - c2o1 * mfbbb * vvy + mfbab * (c1o1 - vy2);
-   m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
-   mfbab = m0;
-   mfbbb = m1;
-   mfbcb = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
-   m1 = -mfbcc - c2o1 * mfbbc * vvy + mfbac * (c1o1 - vy2);
-   m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
-   mfbac = m0;
-   mfbbc = m1;
-   mfbcc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-   m1 = -mfcca - c2o1 * mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2;
-   m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-   mfcaa = m0;
-   mfcba = m1;
-   mfcca = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
-   m1 = -mfccb - c2o1 * mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2;
-   m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
-   mfcab = m0;
-   mfcbb = m1;
-   mfccb = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
-   m1 = -mfccc - c2o1 * mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2;
-   m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
-   mfcac = m0;
-   mfcbc = m1;
-   mfccc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-   ////////////////////////////////////////////////////////////////////////////////////
-   // X - Dir
-   m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-   m1 = -mfcaa - c2o1 * mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2;
-   m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-   mfaaa = m0;
-   mfbaa = m1;
-   mfcaa = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-   m1 = -mfcba - c2o1 * mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2;
-   m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-   mfaba = m0;
-   mfbba = m1;
-   mfcba = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-   m1 = -mfcca - c2o1 * mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2;
-   m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-   mfaca = m0;
-   mfbca = m1;
-   mfcca = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-   m1 = -mfcab - c2o1 * mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2;
-   m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-   mfaab = m0;
-   mfbab = m1;
-   mfcab = m2;
-   ///////////b////////////////////////////////////////////////////////////////////////
-   m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
-   m1 = -mfcbb - c2o1 * mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2;
-   m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
-   mfabb = m0;
-   mfbbb = m1;
-   mfcbb = m2;
-   ///////////b////////////////////////////////////////////////////////////////////////
-   m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-   m1 = -mfccb - c2o1 * mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2;
-   m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-   mfacb = m0;
-   mfbcb = m1;
-   mfccb = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-   m1 = -mfcac - c2o1 * mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2;
-   m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-   mfaac = m0;
-   mfbac = m1;
-   mfcac = m2;
-   ///////////c////////////////////////////////////////////////////////////////////////
-   m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
-   m1 = -mfcbc - c2o1 * mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2;
-   m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
-   mfabc = m0;
-   mfbbc = m1;
-   mfcbc = m2;
-   ///////////c////////////////////////////////////////////////////////////////////////
-   m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
-   m1 = -mfccc - c2o1 * mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2;
-   m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
-   mfacc = m0;
-   mfbcc = m1;
-   mfccc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-
-   //////////////////////////////////////////////////////////////////////////
-   //proof correctness
-   //////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-   real 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 = fabs(rho - rho_post);
-   real dif = drho - drho_post;
-#ifdef SINGLEPRECISION
-   if (dif > 10.0E-7 || dif < -10.0E-7)
-#else
-   if (dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-   {
-      UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(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 distribution
-   //////////////////////////////////////////////////////////////////////////
-   (*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->zeroDistributions)(x1, x2, x3) = mfbbb;
-   //////////////////////////////////////////////////////////////////////////
-}
diff --git a/src/cpu/core/LBM/CumulantLBMKernel.h b/src/cpu/core/LBM/CumulantLBMKernel.h
deleted file mode 100644
index 3ba644ccccd6d2fef780f8175b8140e9053d77e6..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/CumulantLBMKernel.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef CumulantLBMKernel_h__
-#define CumulantLBMKernel_h__
-
-#include "BasicLBMKernel.h"
-#include "BCSet.h"
-#include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-//! \brief   compressible cumulant LBM kernel. 
-//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
-//! \author  K. Kutscher, M. Geier
-class CumulantLBMKernel : public BasicLBMKernel
-{
-public:
-   //! This option set relaxation parameter: NORMAL  
-   enum Parameter { NORMAL, MAGIC };
-public:
-   CumulantLBMKernel();
-   virtual ~CumulantLBMKernel() = default;
-   //virtual void calculate(int step);
-   SPtr<LBMKernel> clone() override;
-   real getCalculationTime() override;
-   void setBulkOmegaToOmega(bool value);
-   void setRelaxationParameter(Parameter p);
-protected:
-   void initData() override;
-   void nodeCollision(int step, int x1, int x2, int x3) override;
-   void initDataSet();
-   real f[D3Q27System::ENDF + 1];
-
-   UbTimer timer;
-
-   real OxyyMxzz;
-   Parameter parameter;
-
-   CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
-   CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributions;
-
-   mu::value_type muX1, muX2, muX3;
-   mu::value_type muDeltaT;
-   mu::value_type muNu;
-   real forcingX1;
-   real forcingX2;
-   real forcingX3;
-
-   // bulk viscosity
-   bool bulkOmegaToOmega;
-   real OxxPyyPzz;
-
-   real omega;
-};
-#endif // CumulantLBMKernel_h__
\ No newline at end of file
diff --git a/src/cpu/core/LBM/D3Q27System.h b/src/cpu/core/LBM/D3Q27System.h
index 0f284a2cbe30e8c181c6de8ea7ed589c3c35bf75..bfd6c72d7e7b06a333d0e0e75c8cd446446af43f 100644
--- a/src/cpu/core/LBM/D3Q27System.h
+++ b/src/cpu/core/LBM/D3Q27System.h
@@ -75,172 +75,11 @@ extern const int EX1[ENDDIR + 1];
 extern const int EX2[ENDDIR + 1];
 extern const int EX3[ENDDIR + 1];
 
-//static const int E    = 0;
-//static const int W    = 1;
-//static const int N    = 2;
-//static const int S    = 3;
-//static const int T    = 4;
-//static const int B    = 5;
-//static const int NE   = 6;
-//static const int SW   = 7;
-//static const int SE   = 8;
-//static const int NW   = 9;
-//static const int TE   = 10;
-//static const int BW   = 11;
-//static const int BE   = 12;
-//static const int TW   = 13;
-//static const int TN   = 14;
-//static const int BS   = 15;
-//static const int BN   = 16;
-//static const int TS   = 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 REST = 26;
-
-//static constexpr int REST = 0;
-//static constexpr int E = 1;
-//static constexpr int W = 2;
-//static constexpr int N = 3;
-//static constexpr int S = 4;
-//static constexpr int T = 5;
-//static constexpr int B = 6;
-//static constexpr int NE = 7;
-//static constexpr int SW = 8;
-//static constexpr int SE = 9;
-//static constexpr int NW = 10;
-//static constexpr int TE = 11;
-//static constexpr int BW = 12;
-//static constexpr int BE = 13;
-//static constexpr int TW = 14;
-//static constexpr int TN = 15;
-//static constexpr int BS = 16;
-//static constexpr int BN = 17;
-//static constexpr int TS = 18;
-//static constexpr int TNE = 19;
-//static constexpr int TNW = 20;
-//static constexpr int TSE = 21;
-//static constexpr int TSW = 22;
-//static constexpr int BNE = 23;
-//static constexpr int BNW = 24;
-//static constexpr int BSE = 25;
-//static constexpr int BSW = 26;
-
-//static constexpr int d000 = 0;
-//static constexpr int dP00 = 1;
-//static constexpr int dM00 = 2;
-//static constexpr int d0P0 = 3;
-//static constexpr int d0M0 = 4;
-//static constexpr int d00P = 5;
-//static constexpr int d00M = 6;
-//static constexpr int dPP0 = 7;
-//static constexpr int dMM0 = 8;
-//static constexpr int dPM0 = 9;
-//static constexpr int dMP0 = 10;
-//static constexpr int dP0P = 11;
-//static constexpr int dM0M = 12;
-//static constexpr int dP0M = 13;
-//static constexpr int dM0P = 14;
-//static constexpr int d0PP = 15;
-//static constexpr int d0MM = 16;
-//static constexpr int d0PM = 17;
-//static constexpr int d0MP = 18;
-//static constexpr int dPPP = 19;
-//static constexpr int dMPP = 20;
-//static constexpr int dPMP = 21;
-//static constexpr int dMMP = 22;
-//static constexpr int dPPM = 23;
-//static constexpr int dMPM = 24;
-//static constexpr int dPMM = 25;
-//static constexpr int dMMM = 26;
-
-//static constexpr int iP00 = dM00;
-//static constexpr int iM00 = dP00;
-//static constexpr int i0P0 = d0M0;
-//static constexpr int i0M0 = d0P0;
-//static constexpr int i00P = d00M;
-//static constexpr int i00M = d00P;
-//static constexpr int iPP0 = dMM0;
-//static constexpr int iMM0 = dPP0;
-//static constexpr int iPM0 = dMP0;
-//static constexpr int iMP0 = dPM0;
-//static constexpr int iP0P = dM0M;
-//static constexpr int iM0M = dP0P;
-//static constexpr int iP0M = dM0P;
-//static constexpr int iM0P = dP0M;
-//static constexpr int i0PP = d0MM;
-//static constexpr int i0MM = d0PP;
-//static constexpr int i0PM = d0MP;
-//static constexpr int i0MP = d0PM;
-//static constexpr int iPPP = dMMM;
-//static constexpr int iMPP = dPMM;
-//static constexpr int iPMP = dMPM;
-//static constexpr int iMMP = dPPM;
-//static constexpr int iPPM = dMMP;
-//static constexpr int iMPM = dPMP;
-//static constexpr int iPMM = dMPP;
-//static constexpr int iMMM = dPPP;
+
 
 extern const int INVDIR[ENDDIR + 1];
 
-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_P00 = 0;
-static const int ET_M00 = 0;
-static const int ET_0P0 = 1;
-static const int ET_0M0 = 1;
-static const int ET_00P = 2;
-static const int ET_00M = 2;
-static const int ET_PP0 = 3;
-static const int ET_MM0 = 3;
-static const int ET_PM0 = 4;
-static const int ET_MP0 = 4;
-static const int ET_P0P = 5;
-static const int ET_M0M = 5;
-static const int ET_P0M = 6;
-static const int ET_M0P = 6;
-static const int ET_0PP = 7;
-static const int ET_0MM = 7;
-static const int ET_0PM = 8;
-static const int ET_0MP = 8;
-static const int ET_PPP = 9;
-static const int ET_MMM = 9;
-static const int ET_MPP = 10;
-static const int ET_PMM = 10;
-static const int ET_PMP = 11;
-static const int ET_MPM = 11;
-static const int ET_MMP = 12;
-static const int ET_PPM = 12;
+
 
 //////////////////////////////////////////////////////////////////////////
 inline std::string getDirectionString(int direction)
diff --git a/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp b/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp
deleted file mode 100644
index d052f4f71a4e03ad64c4bf26e9372e0b23423f00..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp
+++ /dev/null
@@ -1,1012 +0,0 @@
-#include "IncompressibleCumulantWithSpongeLayerLBMKernel.h"
-#include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include <cmath>
-#include "DataSet3D.h"
-#include "BCArray3D.h"
-#include "Block3D.h"
-
-#define PROOF_CORRECTNESS
-
-//using namespace UbMath;    
-using namespace vf::basics::constant;
-
-//////////////////////////////////////////////////////////////////////////
-IncompressibleCumulantWithSpongeLayerLBMKernel::IncompressibleCumulantWithSpongeLayerLBMKernel()
-= default;
-//////////////////////////////////////////////////////////////////////////
-IncompressibleCumulantWithSpongeLayerLBMKernel::~IncompressibleCumulantWithSpongeLayerLBMKernel(void)
-= default;
-//////////////////////////////////////////////////////////////////////////
-void IncompressibleCumulantWithSpongeLayerLBMKernel::initDataSet()
-{
-   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
-   dataSet->setFdistributions(d);
-}
-//////////////////////////////////////////////////////////////////////////
-void IncompressibleCumulantWithSpongeLayerLBMKernel::setRelaxFactorParam(int vdir, real vL1, real vdx, real vSP)
-{
-   direction = vdir;
-   L1 = vL1;
-   dx = vdx;
-   SP = vSP;
-}
-//////////////////////////////////////////////////////////////////////////
-void IncompressibleCumulantWithSpongeLayerLBMKernel::initRelaxFactor(int vdir, real vL1, real vdx, real vSP)
-{
-    using namespace vf::lbm::dir;
-
-   direction = vdir;
-   L1 = vL1;
-   dx = vdx;
-   SP = vSP;
-
-   real sizeX = L1 / dx;
-   real sizeSP = SP / dx;
-   real muX1, muX2, muX3;
-
-   real spongeFactor;
-
-   SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-
-   const int bcArrayMaxX1 = (int)bcArray->getNX1();
-   const int bcArrayMaxX2 = (int)bcArray->getNX2();
-   const int bcArrayMaxX3 = (int)bcArray->getNX3();
-
-   int minX1 = 0;
-   int minX2 = 0;
-   int minX3 = 0;
-   int maxX1 = bcArrayMaxX1 - ghostLayerWidth - 1;
-   int maxX2 = bcArrayMaxX2 - ghostLayerWidth - 1;
-   int maxX3 = bcArrayMaxX3 - ghostLayerWidth - 1;
-
-   SPtr<RelaxationFactorArray3D> relaxationFactorPtr = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(maxX1, maxX2, maxX3));
-   dataSet->setRelaxationFactor(relaxationFactorPtr);
-
-   for (int x3 = minX3; x3 < maxX3; x3++)
-   {
-      for (int x2 = minX2; x2 < maxX2; x2++)
-      {
-         for (int x1 = minX1; x1 < maxX1; x1++)
-         {
-            switch (direction)
-            {
-            case dP00:
-               muX1 = (real)(x1 + ix1 * maxX1);
-               if (muX1 >= (sizeX - sizeSP) / deltaT)
-                  spongeFactor = (sizeX - (muX1 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
-               else spongeFactor = c1o1;
-               break;
-            case dM00:
-               muX1 = (real)(x1 + ix1 * maxX1);
-               if (muX1 <= sizeSP / deltaT)
-                  spongeFactor = (sizeSP - (muX1 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
-               else spongeFactor = c1o1;
-               break;
-            case d0P0:
-               muX2 = (real)(x2 + ix2 * maxX2);
-               if (muX2 >= (sizeX - sizeSP) / deltaT)
-                  spongeFactor = (sizeX - (muX2 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
-               else spongeFactor = c1o1;
-               break;
-            case d0M0:
-               muX2 = (real)(x2 + ix2 * maxX2);
-               if (muX2 <= sizeSP / deltaT)
-                  spongeFactor = (sizeSP - (muX2 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
-               else spongeFactor = c1o1;
-               break;
-            case d00P:
-               muX3 = (real)(x3 + ix3 * maxX3);
-               if (muX3 >= (sizeX - sizeSP) / deltaT)
-                  spongeFactor = (sizeX - (muX3 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
-               else spongeFactor = c1o1;
-               break;
-            case d00M:
-               muX3 = (real)(x3 + ix3 * maxX3);
-               if (muX3 <= sizeSP / deltaT)
-                  spongeFactor = (sizeSP - (muX3 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2;
-               else spongeFactor = c1o1;
-               break;
-            default: throw UbException(UB_EXARGS, "unknown dir");
-            }
-            (*relaxationFactorPtr)(x1, x2, x3) = spongeFactor;
-         }
-      }
-   }
-}
-
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> IncompressibleCumulantWithSpongeLayerLBMKernel::clone()
-{
-   SPtr<LBMKernel> kernel(new IncompressibleCumulantWithSpongeLayerLBMKernel());
-   kernel->setNX(nx);
-   dynamicPointerCast<IncompressibleCumulantWithSpongeLayerLBMKernel>(kernel)->initDataSet();
-   kernel->setCollisionFactor(this->collFactor);
-   kernel->setBCSet(bcSet->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   kernel->setDeltaT(deltaT);
-   kernel->setBlock(block.lock());
-
-   switch (parameter)
-   {
-   case NORMAL:
-      dynamicPointerCast<IncompressibleCumulantWithSpongeLayerLBMKernel>(kernel)->OxyyMxzz = c1o1;
-      break;
-   case MAGIC:
-      dynamicPointerCast<IncompressibleCumulantWithSpongeLayerLBMKernel>(kernel)->OxyyMxzz = c2o1 +(-collFactor);
-      break;
-   }
-
-   kernel->setWithSpongeLayer(withSpongeLayer);
-   if(withSpongeLayer) kernel->setSpongeLayer(muSpongeLayer);
-   dynamicPointerCast<IncompressibleCumulantWithSpongeLayerLBMKernel>(kernel)->initRelaxFactor(direction, L1, dx, SP);
-   return kernel;
-}  
-//////////////////////////////////////////////////////////////////////////
-void IncompressibleCumulantWithSpongeLayerLBMKernel::calculate(int step)
-{
-   using namespace D3Q27System;
-   using namespace std;
-
-   if(!withSpongeLayer)
-   {
-      UB_THROW(UbException(UB_EXARGS,"Sponge layer isn't initialized!"));
-   }
-   //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("dx",&muDeltaT);
-   //   muForcingX2.DefineVar("dx",&muDeltaT);
-   //   muForcingX3.DefineVar("dx",&muDeltaT);
-
-   //   muNu = (1.0/3.0)*(1.0/collFactor - 1.0/c2o10);
-
-   //   muForcingX1.DefineVar("nu",&muNu);
-   //   muForcingX2.DefineVar("nu",&muNu);
-   //   muForcingX3.DefineVar("nu",&muNu);
-
-   //   LBMReal forcingX1 = 0;
-   //   LBMReal forcingX2 = 0;
-   //   LBMReal forcingX3 = 0;
-   //}
-   /////////////////////////////////////
-   //initialization of sponge layer variables
-   //if (withSpongeLayer)
-   //{
-      //muDeltaT = deltaT;
-      //muSpongeLayer.DefineVar("dt",&muDeltaT);
-      //muSpongeLayer.DefineVar("x1",&muX1); muSpongeLayer.DefineVar("x2",&muX2); muSpongeLayer.DefineVar("x3",&muX3);
-   //}
-   /////////////////////////////////////
-
-   localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-   SPtr<RelaxationFactorArray3D> relaxationFactorPtr = dataSet->getRelaxationFactor();
-
-   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-1;
-   int maxX2 = bcArrayMaxX2-ghostLayerWidth-1;
-   int maxX3 = bcArrayMaxX3-ghostLayerWidth-1;
-
-   real collFactor0 = collFactor;
-   real spongeFactor;
-
-   for(int x3 = minX3; x3 <= maxX3; x3++)
-   {
-      for(int x2 = minX2; x2 <= maxX2; x2++)
-      {
-         for(int x1 = minX1; x1 <= maxX1; x1++)
-         {
-            if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-            {
-               int x1p = x1 + 1;
-               int x2p = x2 + 1;
-               int x3p = x3 + 1;
-               //////////////////////////////////////////////////////////////////////////
-               //read distribution
-               ////////////////////////////////////////////////////////////////////////////
-               //////////////////////////////////////////////////////////////////////////
-
-               //E   N  T
-               //c   c  c
-               //////////
-               //W   S  B
-               //a   a  a
-
-               //Rest ist b
-
-               real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1,x2,x3);
-               real mfbcb = (*this->localDistributions)(D3Q27System::ET_N,x1,x2,x3); 
-               real mfbbc = (*this->localDistributions)(D3Q27System::ET_T,x1,x2,x3);
-               real mfccb = (*this->localDistributions)(D3Q27System::ET_NE,x1,x2,x3);
-               real mfacb = (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,x3);
-               real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE,x1,x2,x3);
-               real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p,x2,x3);
-               real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN,x1,x2,x3);
-               real mfbac = (*this->localDistributions)(D3Q27System::ET_TS,x1,x2p,x3);
-               real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE,x1,x2,x3);
-               real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,x3);
-               real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE,x1,x2p,x3);
-               real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-               real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,x3  );
-               real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,x2p,x3  );
-               real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,x2,x3p  );
-               real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 );
-               real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,x2p,x3 );
-               real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,x3p );
-               real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,x2,x3p );
-               real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,x2p,x3p );
-               real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,x2,x3p );
-               real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-               real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,x2p,x3p);
-               real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,x3p);
-               real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,x2,x3p);
-
-               real mfbbb = (*this->zeroDistributions)(x1,x2,x3);
-
-               real m0, m1, m2;
-               
-               real 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;
-
-               real vvx    =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) +
-                  (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
-                  (mfcbb-mfabb));
-               real vvy    =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) +
-                  (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) +
-                  (mfbcb-mfbab));
-               real vvz    =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) +
-                  (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) +
-                  (mfbbc-mfbba));
-               //////////////////////////////////////////////////////////////////////////
-               //forcing 
-               ///////////////////////////////////////////////////////////////////////////////////////////
-               //if (withForcing)
-               //{
-               //   muX1 = (double)(x1-1+ix1*maxX1);
-               //   muX2 = (double)(x2-1+ix2*maxX2);
-               //   muX3 = (double)(x3-1+ix3*maxX3);
-
-               //   forcingX1 = muForcingX1.Eval();
-               //   forcingX2 = muForcingX2.Eval();
-               //   forcingX3 = muForcingX3.Eval();
-
-               //   vvx += forcingX1*0.5; // X
-               //   vvy += forcingX2*0.5; // Y
-               //   vvz += forcingX3*0.5; // Z
-               //}
-               ///////////////////////////////////////////////////////////////////////////////////////////      
-               //sponge layer
-               ///////////////////////////////////////////////////////////////////////////////////////////
-               //if (withSpongeLayer)
-               //{
-                  //if (!withForcing)
-                  //{
-                    //lk// muX1 = (double)(x1-1+ix1*maxX1);
-                     //muX2 = (double)(x2-1+ix2*maxX2);
-                     //muX3 = (double)(x3-1+ix3*maxX3);
-                  //}
-                  //spongeFactor ist von Funktion in muSpongeLayer abh�ngich und variiert zwischen 1 (nix tun) und 0.5 (collFactor etwa auf 1);
-                  //lk //LBMReal spongeFactor = muSpongeLayer.Eval();
-
-                  //if (spongeFactor == 0.5)
-                  //{
-                  //   int Test=0;
-                  //}
-
-                  //if(muX3 == ix3*maxX3/2 && muX2==ix2*maxX2/2)
-                  //   UBLOG(logINFO," x1="<<muX1<<" spongeFactor = " << spongeFactor <<" collFactor="<<collFactor);
-
-                  spongeFactor = (*relaxationFactorPtr)(x1-1, x2-1, x3-1);
-                  collFactor *= spongeFactor;
-                  //if(muX3 == ix3*maxX3/2 && muX2==ix2*maxX2/2)
-                  //   UBLOG(logINFO," x1="<<muX1<<" spongeFactor = " << spongeFactor <<" collFactor="<<collFactor);
-
-               //}
-               //////////////////////////////////////////////////////////////////////////
-
-               real 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 = c1o1 - (oMdrho + m0);
-
-               real vx2;
-               real vy2;
-               real vz2;
-               vx2=vvx*vvx;
-               vy2=vvy*vvy;
-               vz2=vvz*vvz;
-               ////////////////////////////////////////////////////////////////////////////////////
-               real wadjust;
-               real qudricLimit = c1o100;
-               ////////////////////////////////////////////////////////////////////////////////////
-               //Hin
-               ////////////////////////////////////////////////////////////////////////////////////
-               // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Z - Dir
-               m2    = mfaaa + mfaac;
-               m1    = mfaac - mfaaa;
-               m0    = m2          + mfaab;
-               mfaaa = m0;
-               m0   += c1o36 * oMdrho;   
-               mfaab = m1 -        m0 * vvz;
-               mfaac = m2 - c2o1 *   m1 * vvz + vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaba  + mfabc;
-               m1    = mfabc  - mfaba;
-               m0    = m2          + mfabb;
-               mfaba = m0;
-               m0   += c1o9 * oMdrho;
-               mfabb = m1 -        m0 * vvz;
-               mfabc = m2 - c2o1 *   m1 * vvz + vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaca  + mfacc;
-               m1    = mfacc  - mfaca;
-               m0    = m2          + mfacb;
-               mfaca = m0;
-               m0   += c1o36 * oMdrho;
-               mfacb = m1 -        m0 * vvz;
-               mfacc = m2 - c2o1 *   m1 * vvz + vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbaa + mfbac;
-               m1    = mfbac - mfbaa;
-               m0    = m2          + mfbab;
-               mfbaa = m0;
-               m0   += c1o9 * oMdrho;
-               mfbab = m1 -        m0 * vvz;
-               mfbac = m2 - c2o1 *   m1 * vvz + vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbba  + mfbbc;
-               m1    = mfbbc  - mfbba;
-               m0    = m2          + mfbbb;
-               mfbba = m0;
-               m0   += c4o9 * oMdrho;
-               mfbbb = m1 -        m0 * vvz;
-               mfbbc = m2 - c2o1 *   m1 * vvz + vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbca  + mfbcc;
-               m1    = mfbcc  - mfbca;
-               m0    = m2          + mfbcb;
-               mfbca = m0;
-               m0   += c1o9 * oMdrho;
-               mfbcb = m1 -        m0 * vvz;
-               mfbcc = m2 - c2o1 *   m1 * vvz + vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcaa + mfcac;
-               m1    = mfcac - mfcaa;
-               m0    = m2          + mfcab;
-               mfcaa = m0;
-               m0   += c1o36 * oMdrho;
-               mfcab = m1 -        m0 * vvz;
-               mfcac = m2 - c2o1 *   m1 * vvz + vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcba  + mfcbc;
-               m1    = mfcbc  - mfcba;
-               m0    = m2          + mfcbb;
-               mfcba = m0;
-               m0   += c1o9 * oMdrho;
-               mfcbb = m1 -        m0 * vvz;
-               mfcbc = m2 - c2o1 *   m1 * vvz + vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcca  + mfccc;
-               m1    = mfccc  - mfcca;
-               m0    = m2          + mfccb;
-               mfcca = m0;
-               m0   += c1o36 * oMdrho;
-               mfccb = m1 -        m0 * vvz;
-               mfccc = m2 - c2o1 *   m1 * vvz + vz2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               m2    = mfaaa + mfaca;
-               m1    = mfaca - mfaaa;
-               m0    = m2          + mfaba;
-               mfaaa = m0;
-               m0   += c1o6 * oMdrho;
-               mfaba = m1 -        m0 * vvy;
-               mfaca = m2 - c2o1 *   m1 * vvy + vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaab  + mfacb;
-               m1    = mfacb  - mfaab;
-               m0    = m2          + mfabb;
-               mfaab = m0;
-               mfabb = m1 -        m0 * vvy;
-               mfacb = m2 - c2o1 *   m1 * vvy + vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaac  + mfacc;
-               m1    = mfacc  - mfaac;
-               m0    = m2          + mfabc;
-               mfaac = m0;
-               m0   += c1o18 * oMdrho;
-               mfabc = m1 -        m0 * vvy;
-               mfacc = m2 - c2o1 *   m1 * vvy + vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbaa + mfbca;
-               m1    = mfbca - mfbaa;
-               m0    = m2          + mfbba;
-               mfbaa = m0;
-               m0   += c2o3 * oMdrho;
-               mfbba = m1 -        m0 * vvy;
-               mfbca = m2 - c2o1 *   m1 * vvy + vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbab  + mfbcb;
-               m1    = mfbcb  - mfbab;
-               m0    = m2          + mfbbb;
-               mfbab = m0;
-               mfbbb = m1 -        m0 * vvy;
-               mfbcb = m2 - c2o1 *   m1 * vvy + vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfbac  + mfbcc;
-               m1    = mfbcc  - mfbac;
-               m0    = m2          + mfbbc;
-               mfbac = m0;
-               m0   += c2o9 * oMdrho;
-               mfbbc = m1 -        m0 * vvy;
-               mfbcc = m2 - c2o1 *   m1 * vvy + vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcaa + mfcca;
-               m1    = mfcca - mfcaa;
-               m0    = m2          + mfcba;
-               mfcaa = m0;
-               m0   += c1o6 * oMdrho;
-               mfcba = m1 -        m0 * vvy;
-               mfcca = m2 - c2o1 *   m1 * vvy + vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcab  + mfccb;
-               m1    = mfccb  - mfcab;
-               m0    = m2          + mfcbb;
-               mfcab = m0;
-               mfcbb = m1 -        m0 * vvy;
-               mfccb = m2 - c2o1 *   m1 * vvy + vy2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfcac  + mfccc;
-               m1    = mfccc  - mfcac;
-               m0    = m2          + mfcbc;
-               mfcac = m0;
-               m0   += c1o18 * oMdrho;
-               mfcbc = m1 -        m0 * vvy;
-               mfccc = m2 - c2o1 *   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   += c1o1 * oMdrho;
-               mfbaa = m1 -        m0 * vvx;
-               mfcaa = m2 - c2o1 *   m1 * vvx + vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaba  + mfcba;
-               m1    = mfcba  - mfaba;
-               m0    = m2          + mfbba;
-               mfaba = m0;
-               mfbba = m1 -        m0 * vvx;
-               mfcba = m2 - c2o1 *   m1 * vvx + vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaca  + mfcca;
-               m1    = mfcca  - mfaca;
-               m0    = m2          + mfbca;
-               mfaca = m0;
-               m0   += c1o3 * oMdrho;
-               mfbca = m1 -        m0 * vvx;
-               mfcca = m2 - c2o1 *   m1 * vvx + vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaab + mfcab;
-               m1    = mfcab - mfaab;
-               m0    = m2          + mfbab;
-               mfaab = m0;
-               mfbab = m1 -        m0 * vvx;
-               mfcab = m2 - c2o1 *   m1 * vvx + vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfabb  + mfcbb;
-               m1    = mfcbb  - mfabb;
-               m0    = m2          + mfbbb;
-               mfabb = m0;
-               mfbbb = m1 -        m0 * vvx;
-               mfcbb = m2 - c2o1 *   m1 * vvx + vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfacb  + mfccb;
-               m1    = mfccb  - mfacb;
-               m0    = m2          + mfbcb;
-               mfacb = m0;
-               mfbcb = m1 -        m0 * vvx;
-               mfccb = m2 - c2o1 *   m1 * vvx + vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfaac + mfcac;
-               m1    = mfcac - mfaac;
-               m0    = m2          + mfbac;
-               mfaac = m0;
-               m0   += c1o3 * oMdrho;
-               mfbac = m1 -        m0 * vvx;
-               mfcac = m2 - c2o1 *   m1 * vvx + vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfabc  + mfcbc;
-               m1    = mfcbc  - mfabc;
-               m0    = m2          + mfbbc;
-               mfabc = m0;
-               mfbbc = m1 -        m0 * vvx;
-               mfcbc = m2 - c2o1 *   m1 * vvx + vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m2    = mfacc  + mfccc;
-               m1    = mfccc  - mfacc;
-               m0    = m2          + mfbcc;
-               mfacc = m0;
-               m0   += c1o9 * oMdrho;
-               mfbcc = m1 -        m0 * vvx;
-               mfccc = m2 - c2o1 *   m1 * vvx + vx2 * m0;
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Cumulants
-               ////////////////////////////////////////////////////////////////////////////////////
-               real OxxPyyPzz = c1o1;
-               real OxyyPxzz  = c1o1;//-s9;//2+s9;//
-               //real OxyyMxzz  = c1o1;//2+s9;//
-               real O4        = c1o1;
-               real O5        = c1o1;
-               real O6        = c1o1;
-
-               //Cum c4o1
-               real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab);
-               real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb);
-               real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb);
-
-               real CUMcca = mfcca - (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-               real CUMcac = mfcac - (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-               real CUMacc = mfacc - (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-
-               //Cum 5.
-               real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
-               real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
-               real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
-
-               //Cum 6.
-               real CUMccc = mfccc  +((-c4o1 *  mfbbb * mfbbb 
-                  -       (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-                  -  c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
-                  -  c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-                  +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-                  +  c2o1 * (mfcaa * mfaca * mfaac)
-                  + c16o1 *  mfbba * mfbab * mfabb)
-                  - c1o3* (mfacc + mfcac + mfcca) * oMdrho  -c1o9*oMdrho*oMdrho
-                  - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(c1o1-c2o1* oMdrho)- c1o27* oMdrho * oMdrho*(-c2o1* oMdrho)
-                  +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-                  +       (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho;
-
-               //2.
-               // linear combinations
-               real mxxPyyPzz = mfcaa + mfaca + mfaac;
-               real mxxMyy    = mfcaa - mfaca;
-               real mxxMzz         = mfcaa - mfaac;
-
-               real dxux = -c1o2 * collFactor *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz);
-               real dyuy = dxux + collFactor * c3o2 * mxxMyy;
-               real dzuz = dxux + collFactor * c3o2 * mxxMzz;
-
-               //relax
-               mxxPyyPzz += OxxPyyPzz*(mfaaa  - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-               mxxMyy    += collFactor * (-mxxMyy) - c3o1 * (c1o1 - c1o2 * collFactor) * (vx2 * dxux - vy2 * dyuy);
-               mxxMzz    += collFactor * (-mxxMzz) - c3o1 * (c1o1 - c1o2 * collFactor) * (vx2 * dxux - vz2 * dzuz);
-
-               mfabb     += collFactor * (-mfabb);
-               mfbab     += collFactor * (-mfbab);
-               mfbba     += collFactor * (-mfbba);
-
-               // linear combinations back
-               mfcaa = c1o3 * (       mxxMyy +      mxxMzz + mxxPyyPzz);
-               mfaca = c1o3 * (-c2o1 *  mxxMyy +      mxxMzz + mxxPyyPzz);
-               mfaac = c1o3 * (       mxxMyy - c2o1 * mxxMzz + mxxPyyPzz);
-
-               //3.
-               // linear combinations
-               real mxxyPyzz = mfcba + mfabc;
-               real mxxyMyzz = mfcba - mfabc;
-
-               real mxxzPyyz = mfcab + mfacb;
-               real mxxzMyyz = mfcab - mfacb;
-
-               real mxyyPxzz = mfbca + mfbac;
-               real mxyyMxzz = mfbca - mfbac;
-
-               //relax
-               wadjust    = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimit);
-               mfbbb     += wadjust * (-mfbbb);
-               wadjust    = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimit);
-               mxxyPyzz  += wadjust * (-mxxyPyzz);
-               wadjust    = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimit);
-               mxxyMyzz  += wadjust * (-mxxyMyzz);
-               wadjust    = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimit);
-               mxxzPyyz  += wadjust * (-mxxzPyyz);
-               wadjust    = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimit);
-               mxxzMyyz  += wadjust * (-mxxzMyyz);
-               wadjust    = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimit);
-               mxyyPxzz  += wadjust * (-mxyyPxzz);
-               wadjust    = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimit);
-               mxyyMxzz  += wadjust * (-mxyyMxzz);
-
-               // linear combinations back
-               mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2;
-               mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-               mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2;
-               mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-               mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2;
-               mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-               //4.
-               CUMacc += O4 * (-CUMacc);
-               CUMcac += O4 * (-CUMcac);
-               CUMcca += O4 * (-CUMcca);
-
-               CUMbbc += O4 * (-CUMbbc);
-               CUMbcb += O4 * (-CUMbcb);
-               CUMcbb += O4 * (-CUMcbb);
-
-               //5.
-               CUMbcc += O5 * (-CUMbcc);
-               CUMcbc += O5 * (-CUMcbc);
-               CUMccb += O5 * (-CUMccb);
-
-               //6.
-               CUMccc += O6 * (-CUMccc);
-
-               //back cumulants to central moments
-               //4.
-               mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab);
-               mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb);
-               mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb);
-
-               mfcca = CUMcca + (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-               mfcac = CUMcac + (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-               mfacc = CUMacc + (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho;
-
-               //5.
-               mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
-               mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
-               mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
-
-               //6.
-               mfccc = CUMccc  -((-c4o1 *  mfbbb * mfbbb 
-                  -       (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
-                  -  c4o1 * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
-                  -  c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
-                  +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
-                  +  c2o1 * (mfcaa * mfaca * mfaac)
-                  + c16o1 *  mfbba * mfbab * mfabb)
-                  - c1o3* (mfacc + mfcac + mfcca) * oMdrho  -c1o9*oMdrho*oMdrho
-                  - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(c1o1-c2o1* oMdrho)- c1o27* oMdrho * oMdrho*(-c2o1* oMdrho)
-                  +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
-                  +       (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho;
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               //forcing
-               mfbaa=-mfbaa;
-               mfaba=-mfaba;
-               mfaab=-mfaab;
-               //////////////////////////////////////////////////////////////////////////////////////
-
-               ////////////////////////////////////////////////////////////////////////////////////
-               //back
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Z - Dir
-               m0 =  mfaac * c1o2 +      mfaab * (vvz - c1o2) + (mfaaa + c1o1 * oMdrho) * (     vz2 - vvz) * c1o2;
-               m1 = -mfaac        - c2o1 * mfaab *  vvz         +  mfaaa                * (c1o1 - vz2)              - c1o1 * oMdrho * vz2;
-               m2 =  mfaac * c1o2 +      mfaab * (vvz + c1o2) + (mfaaa + c1o1 * oMdrho) * (     vz2 + vvz) * c1o2;
-               mfaaa = m0;
-               mfaab = m1;
-               mfaac = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfabc * c1o2 +      mfabb * (vvz - c1o2) + mfaba * (     vz2 - vvz) * c1o2;
-               m1 = -mfabc        - c2o1 * mfabb *  vvz         + mfaba * (c1o1 - vz2);
-               m2 =  mfabc * c1o2 +      mfabb * (vvz + c1o2) + mfaba * (     vz2 + vvz) * c1o2;
-               mfaba = m0;
-               mfabb = m1;
-               mfabc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfacc * c1o2 +      mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (     vz2 - vvz) * c1o2;
-               m1 = -mfacc        - c2o1 * mfacb *  vvz         +  mfaca                  * (c1o1 - vz2)              - c1o3 * oMdrho * vz2;
-               m2 =  mfacc * c1o2 +      mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (     vz2 + vvz) * c1o2;
-               mfaca = m0;
-               mfacb = m1;
-               mfacc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfbac * c1o2 +      mfbab * (vvz - c1o2) + mfbaa * (     vz2 - vvz) * c1o2;
-               m1 = -mfbac        - c2o1 * mfbab *  vvz         + mfbaa * (c1o1 - vz2);
-               m2 =  mfbac * c1o2 +      mfbab * (vvz + c1o2) + mfbaa * (     vz2 + vvz) * c1o2;
-               mfbaa = m0;
-               mfbab = m1;
-               mfbac = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbbc * c1o2 +      mfbbb * (vvz - c1o2) + mfbba * (     vz2 - vvz) * c1o2;
-               m1 = -mfbbc        - c2o1 * mfbbb *  vvz         + mfbba * (c1o1 - vz2);
-               m2 =  mfbbc * c1o2 +      mfbbb * (vvz + c1o2) + mfbba * (     vz2 + vvz) * c1o2;
-               mfbba = m0;
-               mfbbb = m1;
-               mfbbc = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbcc * c1o2 +      mfbcb * (vvz - c1o2) + mfbca * (     vz2 - vvz) * c1o2;
-               m1 = -mfbcc        - c2o1 * mfbcb *  vvz         + mfbca * (c1o1 - vz2);
-               m2 =  mfbcc * c1o2 +      mfbcb * (vvz + c1o2) + mfbca * (     vz2 + vvz) * c1o2;
-               mfbca = m0;
-               mfbcb = m1;
-               mfbcc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcac * c1o2 +      mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (     vz2 - vvz) * c1o2;
-               m1 = -mfcac        - c2o1 * mfcab *  vvz         +  mfcaa                  * (c1o1 - vz2)              - c1o3 * oMdrho * vz2;
-               m2 =  mfcac * c1o2 +      mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (     vz2 + vvz) * c1o2;
-               mfcaa = m0;
-               mfcab = m1;
-               mfcac = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfcbc * c1o2 +      mfcbb * (vvz - c1o2) + mfcba * (     vz2 - vvz) * c1o2;
-               m1 = -mfcbc        - c2o1 * mfcbb *  vvz         + mfcba * (c1o1 - vz2);
-               m2 =  mfcbc * c1o2 +      mfcbb * (vvz + c1o2) + mfcba * (     vz2 + vvz) * c1o2;
-               mfcba = m0;
-               mfcbb = m1;
-               mfcbc = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfccc * c1o2 +      mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (     vz2 - vvz) * c1o2;
-               m1 = -mfccc        - c2o1 * mfccb *  vvz         +  mfcca                  * (c1o1 - vz2)              - c1o9 * oMdrho * vz2;
-               m2 =  mfccc * c1o2 +      mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (     vz2 + vvz) * c1o2;
-               mfcca = m0;
-               mfccb = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // Y - Dir
-               m0 =  mfaca * c1o2 +      mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (     vy2 - vvy) * c1o2;
-               m1 = -mfaca        - c2o1 * mfaba *  vvy         +  mfaaa                  * (c1o1 - vy2)              - c1o6 * oMdrho * vy2;
-               m2 =  mfaca * c1o2 +      mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (     vy2 + vvy) * c1o2;
-               mfaaa = m0;
-               mfaba = m1;
-               mfaca = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfacb * c1o2 +      mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (     vy2 - vvy) * c1o2;
-               m1 = -mfacb        - c2o1 * mfabb *  vvy         +  mfaab                  * (c1o1 - vy2)              - c2o3 * oMdrho * vy2;
-               m2 =  mfacb * c1o2 +      mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (     vy2 + vvy) * c1o2;
-               mfaab = m0;
-               mfabb = m1;
-               mfacb = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfacc * c1o2 +      mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (     vy2 - vvy) * c1o2;
-               m1 = -mfacc        - c2o1 * mfabc *  vvy         +  mfaac                  * (c1o1 - vy2)              - c1o6 * oMdrho * vy2;
-               m2 =  mfacc * c1o2 +      mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (     vy2 + vvy) * c1o2;
-               mfaac = m0;
-               mfabc = m1;
-               mfacc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfbca * c1o2 +      mfbba * (vvy - c1o2) + mfbaa * (     vy2 - vvy) * c1o2;
-               m1 = -mfbca        - c2o1 * mfbba *  vvy         + mfbaa * (c1o1 - vy2);
-               m2 =  mfbca * c1o2 +      mfbba * (vvy + c1o2) + mfbaa * (     vy2 + vvy) * c1o2;
-               mfbaa = m0;
-               mfbba = m1;
-               mfbca = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbcb * c1o2 +      mfbbb * (vvy - c1o2) + mfbab * (     vy2 - vvy) * c1o2;
-               m1 = -mfbcb        - c2o1 * mfbbb *  vvy         + mfbab * (c1o1 - vy2);
-               m2 =  mfbcb * c1o2 +      mfbbb * (vvy + c1o2) + mfbab * (     vy2 + vvy) * c1o2;
-               mfbab = m0;
-               mfbbb = m1;
-               mfbcb = m2;
-               /////////b//////////////////////////////////////////////////////////////////////////
-               m0 =  mfbcc * c1o2 +      mfbbc * (vvy - c1o2) + mfbac * (     vy2 - vvy) * c1o2;
-               m1 = -mfbcc        - c2o1 * mfbbc *  vvy         + mfbac * (c1o1 - vy2);
-               m2 =  mfbcc * c1o2 +      mfbbc * (vvy + c1o2) + mfbac * (     vy2 + vvy) * c1o2;
-               mfbac = m0;
-               mfbbc = m1;
-               mfbcc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcca * c1o2 +      mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (     vy2 - vvy) * c1o2;
-               m1 = -mfcca        - c2o1 * mfcba *  vvy         +  mfcaa                   * (c1o1 - vy2)              - c1o18 * oMdrho * vy2;
-               m2 =  mfcca * c1o2 +      mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (     vy2 + vvy) * c1o2;
-               mfcaa = m0;
-               mfcba = m1;
-               mfcca = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfccb * c1o2 +      mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (     vy2 - vvy) * c1o2;
-               m1 = -mfccb        - c2o1 * mfcbb *  vvy         +  mfcab                  * (c1o1 - vy2)              - c2o9 * oMdrho * vy2;
-               m2 =  mfccb * c1o2 +      mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (     vy2 + vvy) * c1o2;
-               mfcab = m0;
-               mfcbb = m1;
-               mfccb = m2;
-               /////////c//////////////////////////////////////////////////////////////////////////
-               m0 =  mfccc * c1o2 +      mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (     vy2 - vvy) * c1o2;
-               m1 = -mfccc        - c2o1 * mfcbc *  vvy         +  mfcac                   * (c1o1 - vy2)              - c1o18 * oMdrho * vy2;
-               m2 =  mfccc * c1o2 +      mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (     vy2 + vvy) * c1o2;
-               mfcac = m0;
-               mfcbc = m1;
-               mfccc = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-               ////////////////////////////////////////////////////////////////////////////////////
-               // X - Dir
-               m0 =  mfcaa * c1o2 +      mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (     vx2 - vvx) * c1o2;
-               m1 = -mfcaa        - c2o1 * mfbaa *  vvx         +  mfaaa                   * (c1o1 - vx2)              - c1o36 * oMdrho * vx2;
-               m2 =  mfcaa * c1o2 +      mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (     vx2 + vvx) * c1o2;
-               mfaaa = m0;
-               mfbaa = m1;
-               mfcaa = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcba * c1o2 +      mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (     vx2 - vvx) * c1o2;
-               m1 = -mfcba        - c2o1 * mfbba *  vvx         +  mfaba                  * (c1o1 - vx2)              - c1o9 * oMdrho * vx2;
-               m2 =  mfcba * c1o2 +      mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (     vx2 + vvx) * c1o2;
-               mfaba = m0;
-               mfbba = m1;
-               mfcba = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcca * c1o2 +      mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (     vx2 - vvx) * c1o2;
-               m1 = -mfcca        - c2o1 * mfbca *  vvx         +  mfaca                   * (c1o1 - vx2)              - c1o36 * oMdrho * vx2;
-               m2 =  mfcca * c1o2 +      mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (     vx2 + vvx) * c1o2;
-               mfaca = m0;
-               mfbca = m1;
-               mfcca = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcab * c1o2 +      mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (     vx2 - vvx) * c1o2;
-               m1 = -mfcab        - c2o1 * mfbab *  vvx         +  mfaab                  * (c1o1 - vx2)              - c1o9 * oMdrho * vx2;
-               m2 =  mfcab * c1o2 +      mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (     vx2 + vvx) * c1o2;
-               mfaab = m0;
-               mfbab = m1;
-               mfcab = m2;
-               ///////////b////////////////////////////////////////////////////////////////////////
-               m0 =  mfcbb * c1o2 +      mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (     vx2 - vvx) * c1o2;
-               m1 = -mfcbb        - c2o1 * mfbbb *  vvx         +  mfabb                  * (c1o1 - vx2)              - c4o9 * oMdrho * vx2;
-               m2 =  mfcbb * c1o2 +      mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (     vx2 + vvx) * c1o2;
-               mfabb = m0;
-               mfbbb = m1;
-               mfcbb = m2;
-               ///////////b////////////////////////////////////////////////////////////////////////
-               m0 =  mfccb * c1o2 +      mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (     vx2 - vvx) * c1o2;
-               m1 = -mfccb        - c2o1 * mfbcb *  vvx         +  mfacb                  * (c1o1 - vx2)              - c1o9 * oMdrho * vx2;
-               m2 =  mfccb * c1o2 +      mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (     vx2 + vvx) * c1o2;
-               mfacb = m0;
-               mfbcb = m1;
-               mfccb = m2;
-               ////////////////////////////////////////////////////////////////////////////////////
-               ////////////////////////////////////////////////////////////////////////////////////
-               m0 =  mfcac * c1o2 +      mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (     vx2 - vvx) * c1o2;
-               m1 = -mfcac        - c2o1 * mfbac *  vvx         +  mfaac                   * (c1o1 - vx2)              - c1o36 * oMdrho * vx2;
-               m2 =  mfcac * c1o2 +      mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (     vx2 + vvx) * c1o2;
-               mfaac = m0;
-               mfbac = m1;
-               mfcac = m2;
-               ///////////c////////////////////////////////////////////////////////////////////////
-               m0 =  mfcbc * c1o2 +      mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (     vx2 - vvx) * c1o2;
-               m1 = -mfcbc        - c2o1 * mfbbc *  vvx         +  mfabc                  * (c1o1 - vx2)              - c1o9 * oMdrho * vx2;
-               m2 =  mfcbc * c1o2 +      mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (     vx2 + vvx) * c1o2;
-               mfabc = m0;
-               mfbbc = m1;
-               mfcbc = m2;
-               ///////////c////////////////////////////////////////////////////////////////////////
-               m0 =  mfccc * c1o2 +      mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (     vx2 - vvx) * c1o2;
-               m1 = -mfccc        - c2o1 * mfbcc *  vvx         +  mfacc                   * (c1o1 - vx2)              - c1o36 * oMdrho * vx2;
-               m2 =  mfccc * c1o2 +      mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (     vx2 + vvx) * c1o2;
-               mfacc = m0;
-               mfbcc = m1;
-               mfccc = m2;
-
-               //////////////////////////////////////////////////////////////////////////
-               //proof correctness
-               //////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-               real rho_post = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca)
-                  +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc)
-                  +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; 
-               //LBMReal dif = fabs(rho - rho_post);
-               real dif = rho - rho_post;
-#ifdef SINGLEPRECISION
-               if(dif > 10.0E-7 || dif < -10.0E-7)
-#else
-               if(dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-               {
-                  UB_THROW(UbException(UB_EXARGS,"rho="+UbSystem::toString(rho)+", rho_post="+UbSystem::toString(rho_post)
-                     +" dif="+UbSystem::toString(dif)
-                     +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)
-                     +" in " + block.lock()->toString()+" step = "+UbSystem::toString(step)));
-               }
-#endif
-               //////////////////////////////////////////////////////////////////////////
-               //write distribution
-               //////////////////////////////////////////////////////////////////////////
-               (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3)    = 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->zeroDistributions)(x1,x2,x3) = mfbbb;
-               //////////////////////////////////////////////////////////////////////////
-
-               collFactor = collFactor0;
-
-            }
-         }
-      }
-   }
-}
-
diff --git a/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h b/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h
deleted file mode 100644
index 760ad30fb5abb51b2f7d21dbc23d26b3124ac934..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef IncompressibleCumulantWithSpongeLayerLBMKernel_H
-#define IncompressibleCumulantWithSpongeLayerLBMKernel_H
-
-#include "IncompressibleCumulantLBMKernel.h"
-
-//! \brief   Cascaded Cumulant LBM kernel. 
-//! \details CFD solver with sponge layer that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model <br>
-//! variable spongeFactor is depending on funktion in muSpongeLayer and varies between 1 (do nothing) und 0.5 (collFactor about 1);
-//! Initialization in test case (example): <br>
-//! \code{.cpp}
-//! int sizeSP=8; //width of sponge layer in blocks 
-//! mu::Parser spongeLayer;
-//! spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dt ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0");
-//! spongeLayer.DefineConst("sizeX", nx[0]*blocknx[0]); // width of grid for X in coarse nodes
-//! spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]); // width of sponge layer in coarse nodes
-//! kernel->setWithSpongeLayer(true);
-//! kernel->setSpongeLayer(spongeLayer);
-//! \endcode
-//! \author  K. Kucher, M. Geier, A. Karanchuk
-class IncompressibleCumulantWithSpongeLayerLBMKernel :  public IncompressibleCumulantLBMKernel
-{
-public:
-   IncompressibleCumulantWithSpongeLayerLBMKernel();
-   ~IncompressibleCumulantWithSpongeLayerLBMKernel() override;
-   SPtr<LBMKernel> clone() override;
-   void calculate(int step) override;
-   void initRelaxFactor(int vdir, real vL1, real vdx, real vSP);
-   //! \param vdir where the sponge layer is placed
-   //! \param vL1 length of simulation domain
-   //! \param vdx subgrid space 
-   //! \param vSP length of sponge layer
-   void setRelaxFactorParam(int vdir, real vL1, real vdx, real vSP);
-protected:
-  void initDataSet() override;
-  real OxyyMxzz;
-  int direction;
-  real L1;
-  real dx;
-  real SP;
-};
-
-#endif
diff --git a/src/cpu/core/LBM/InitDensityLBMKernel.cpp b/src/cpu/core/LBM/InitDensityLBMKernel.cpp
deleted file mode 100644
index 734e2e33fd478e86151309d78c24b48fc9e0a401..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/InitDensityLBMKernel.cpp
+++ /dev/null
@@ -1,1075 +0,0 @@
-#include "InitDensityLBMKernel.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "BCSet.h"
-#include "DataSet3D.h"
-#include "BCArray3D.h"
-#include "basics/constants/NumericConstants.h"
-
-//using namespace UbMath;
-using namespace vf::basics::constant;
-
-InitDensityLBMKernel::InitDensityLBMKernel()
-{
-   this->compressible = false;
-}
-
-InitDensityLBMKernel::~InitDensityLBMKernel()
-= default;
-
-void InitDensityLBMKernel::initDataSet()
-{
-   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
-   dataSet->setFdistributions(d);
-   v.resize(3, nx[0]+2, nx[1]+2, nx[2]+2);
-
-}
-
-SPtr<LBMKernel> InitDensityLBMKernel::clone()
-{
-   SPtr<LBMKernel> kernel(new InitDensityLBMKernel());
-   kernel->setNX(nx);
-   dynamicPointerCast<InitDensityLBMKernel>(kernel)->initDataSet();
-   kernel->setCollisionFactor(this->collFactor);
-   kernel->setBCSet(bcSet->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   kernel->setDeltaT(deltaT);
-//   dynamicPointerCast<InitDensityLBMKernel>(kernel)->OxyyMxzz = 1.0;
-   return kernel;
-}
-
-void InitDensityLBMKernel::setVelocity(int x1, int x2, int x3, real vvx, real vvy, real vvz)
-{
-   v(0, x1, x2, x3) = vvx;
-   v(1, x1, x2, x3) = vvy;
-   v(2, x1, x2, x3) = vvz;
-}
-
-real InitDensityLBMKernel::getCalculationTime()
-{
-   return 0;
-}
-
-//void InitDensityLBMKernel::collideAll()
-//{
-//   using namespace D3Q27System;
-//
-//   localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-//   nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-//   zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-//
-//   BCArray3D<D3Q27BoundaryCondition>& bcArray = dynamicPointerCast<D3Q27ETBCSet>(this->getBCSet())->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;
-//
-//
-//   for (int x3 = minX3; x3<maxX3; x3++)
-//   {
-//      for (int x2 = minX2; x2<maxX2; x2++)
-//      {
-//         for (int x1 = minX1; x1<maxX1; x1++)
-//         {
-//            if (!bcArray->isSolid(x1, x2, x3)&&!bcArray->isUndefined(x1, x2, x3))
-//            {
-//               int x1p = x1+1;
-//               int x2p = x2+1;
-//               int x3p = x3+1;
-//               //////////////////////////////////////////////////////////////////////////
-//               //read distribution
-//               ////////////////////////////////////////////////////////////////////////////
-//               //////////////////////////////////////////////////////////////////////////
-//
-//               //E   N  T
-//               //c   c  c
-//               //////////
-//               //W   S  B
-//               //a   a  a
-//
-//               //Rest ist b
-//
-//               //mfxyz
-//               //a - negative
-//               //b - null
-//               //c - positive
-//
-//               // a b c
-//               //-1 0 1
-//
-//               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->zeroDistributions)(x1, x2, x3);
-//
-//               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 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 = v(0,x1,x2,x3);
-//               LBMReal vvy = v(1,x1,x2,x3);
-//               LBMReal vvz = v(2,x1,x2,x3);
-//               //LBMReal rho = v(3,x1,x2,x3);
-//          
-//               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);
-//
-//               LBMReal vx2;
-//               LBMReal vy2;
-//               LBMReal vz2;
-//               vx2 = vvx*vvx;
-//               vy2 = vvy*vvy;
-//               vz2 = vvz*vvz;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               LBMReal wadjust;
-//               LBMReal qudricLimit = 0.01;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               //Hin
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               // Z - Dir
-//               m2 = mfaaa+mfaac;
-//               m1 = mfaac-mfaaa;
-//               m0 = m2+mfaab;
-//               mfaaa = m0;
-//               m0 += c1o36 * oMdrho;
-//               mfaab = m1-m0 * vvz;
-//               mfaac = m2-2. *   m1 * vvz+vz2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfaba+mfabc;
-//               m1 = mfabc-mfaba;
-//               m0 = m2+mfabb;
-//               mfaba = m0;
-//               m0 += c1o9 * oMdrho;
-//               mfabb = m1-m0 * vvz;
-//               mfabc = m2-2. *   m1 * vvz+vz2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfaca+mfacc;
-//               m1 = mfacc-mfaca;
-//               m0 = m2+mfacb;
-//               mfaca = m0;
-//               m0 += c1o36 * oMdrho;
-//               mfacb = m1-m0 * vvz;
-//               mfacc = m2-2. *   m1 * vvz+vz2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfbaa+mfbac;
-//               m1 = mfbac-mfbaa;
-//               m0 = m2+mfbab;
-//               mfbaa = m0;
-//               m0 += c1o9 * oMdrho;
-//               mfbab = m1-m0 * vvz;
-//               mfbac = m2-2. *   m1 * vvz+vz2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfbba+mfbbc;
-//               m1 = mfbbc-mfbba;
-//               m0 = m2+mfbbb;
-//               mfbba = m0;
-//               m0 += c4o9 * oMdrho;
-//               mfbbb = m1-m0 * vvz;
-//               mfbbc = m2-2. *   m1 * vvz+vz2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfbca+mfbcc;
-//               m1 = mfbcc-mfbca;
-//               m0 = m2+mfbcb;
-//               mfbca = m0;
-//               m0 += c1o9 * oMdrho;
-//               mfbcb = m1-m0 * vvz;
-//               mfbcc = m2-2. *   m1 * vvz+vz2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfcaa+mfcac;
-//               m1 = mfcac-mfcaa;
-//               m0 = m2+mfcab;
-//               mfcaa = m0;
-//               m0 += c1o36 * oMdrho;
-//               mfcab = m1-m0 * vvz;
-//               mfcac = m2-2. *   m1 * vvz+vz2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfcba+mfcbc;
-//               m1 = mfcbc-mfcba;
-//               m0 = m2+mfcbb;
-//               mfcba = m0;
-//               m0 += c1o9 * oMdrho;
-//               mfcbb = m1-m0 * vvz;
-//               mfcbc = m2-2. *   m1 * vvz+vz2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfcca+mfccc;
-//               m1 = mfccc-mfcca;
-//               m0 = m2+mfccb;
-//               mfcca = m0;
-//               m0 += c1o36 * oMdrho;
-//               mfccb = m1-m0 * vvz;
-//               mfccc = m2-2. *   m1 * vvz+vz2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               // Y - Dir
-//               m2 = mfaaa+mfaca;
-//               m1 = mfaca-mfaaa;
-//               m0 = m2+mfaba;
-//               mfaaa = m0;
-//               m0 += c1o6 * oMdrho;
-//               mfaba = m1-m0 * vvy;
-//               mfaca = m2-2. *   m1 * vvy+vy2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfaab+mfacb;
-//               m1 = mfacb-mfaab;
-//               m0 = m2+mfabb;
-//               mfaab = m0;
-//               mfabb = m1-m0 * vvy;
-//               mfacb = m2-2. *   m1 * vvy+vy2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfaac+mfacc;
-//               m1 = mfacc-mfaac;
-//               m0 = m2+mfabc;
-//               mfaac = m0;
-//               m0 += c1o18 * oMdrho;
-//               mfabc = m1-m0 * vvy;
-//               mfacc = m2-2. *   m1 * vvy+vy2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfbaa+mfbca;
-//               m1 = mfbca-mfbaa;
-//               m0 = m2+mfbba;
-//               mfbaa = m0;
-//               m0 += c2o3 * oMdrho;
-//               mfbba = m1-m0 * vvy;
-//               mfbca = m2-2. *   m1 * vvy+vy2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfbab+mfbcb;
-//               m1 = mfbcb-mfbab;
-//               m0 = m2+mfbbb;
-//               mfbab = m0;
-//               mfbbb = m1-m0 * vvy;
-//               mfbcb = m2-2. *   m1 * vvy+vy2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfbac+mfbcc;
-//               m1 = mfbcc-mfbac;
-//               m0 = m2+mfbbc;
-//               mfbac = m0;
-//               m0 += c2o9 * oMdrho;
-//               mfbbc = m1-m0 * vvy;
-//               mfbcc = m2-2. *   m1 * vvy+vy2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfcaa+mfcca;
-//               m1 = mfcca-mfcaa;
-//               m0 = m2+mfcba;
-//               mfcaa = m0;
-//               m0 += c1o6 * oMdrho;
-//               mfcba = m1-m0 * vvy;
-//               mfcca = m2-2. *   m1 * vvy+vy2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfcab+mfccb;
-//               m1 = mfccb-mfcab;
-//               m0 = m2+mfcbb;
-//               mfcab = m0;
-//               mfcbb = m1-m0 * vvy;
-//               mfccb = m2-2. *   m1 * vvy+vy2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfcac+mfccc;
-//               m1 = mfccc-mfcac;
-//               m0 = m2+mfcbc;
-//               mfcac = m0;
-//               m0 += c1o18 * oMdrho;
-//               mfcbc = m1-m0 * vvy;
-//               mfccc = m2-2. *   m1 * vvy+vy2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               // X - Dir
-//               m2 = mfaaa+mfcaa;
-//               m1 = mfcaa-mfaaa;
-//               m0 = m2+mfbaa;
-//               mfaaa = m0;
-//               m0 += 1. * oMdrho;
-//               mfbaa = m1-m0 * vvx;
-//               mfcaa = m2-2. *   m1 * vvx+vx2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfaba+mfcba;
-//               m1 = mfcba-mfaba;
-//               m0 = m2+mfbba;
-//               mfaba = m0;
-//               mfbba = m1-m0 * vvx;
-//               mfcba = m2-2. *   m1 * vvx+vx2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfaca+mfcca;
-//               m1 = mfcca-mfaca;
-//               m0 = m2+mfbca;
-//               mfaca = m0;
-//               m0 += c1o3 * oMdrho;
-//               mfbca = m1-m0 * vvx;
-//               mfcca = m2-2. *   m1 * vvx+vx2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfaab+mfcab;
-//               m1 = mfcab-mfaab;
-//               m0 = m2+mfbab;
-//               mfaab = m0;
-//               mfbab = m1-m0 * vvx;
-//               mfcab = m2-2. *   m1 * vvx+vx2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfabb+mfcbb;
-//               m1 = mfcbb-mfabb;
-//               m0 = m2+mfbbb;
-//               mfabb = m0;
-//               mfbbb = m1-m0 * vvx;
-//               mfcbb = m2-2. *   m1 * vvx+vx2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfacb+mfccb;
-//               m1 = mfccb-mfacb;
-//               m0 = m2+mfbcb;
-//               mfacb = m0;
-//               mfbcb = m1-m0 * vvx;
-//               mfccb = m2-2. *   m1 * vvx+vx2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfaac+mfcac;
-//               m1 = mfcac-mfaac;
-//               m0 = m2+mfbac;
-//               mfaac = m0;
-//               m0 += c1o3 * oMdrho;
-//               mfbac = m1-m0 * vvx;
-//               mfcac = m2-2. *   m1 * vvx+vx2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfabc+mfcbc;
-//               m1 = mfcbc-mfabc;
-//               m0 = m2+mfbbc;
-//               mfabc = m0;
-//               mfbbc = m1-m0 * vvx;
-//               mfcbc = m2-2. *   m1 * vvx+vx2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m2 = mfacc+mfccc;
-//               m1 = mfccc-mfacc;
-//               m0 = m2+mfbcc;
-//               mfacc = m0;
-//               m0 += c1o9 * oMdrho;
-//               mfbcc = m1-m0 * vvx;
-//               mfccc = m2-2. *   m1 * vvx+vx2 * m0;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               // Cumulants
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity
-//               LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
-//               //LBMReal OxyyMxzz  = 1.;//2+s9;//
-//               LBMReal O4 = 1.;
-//               LBMReal O5 = 1.;
-//               LBMReal O6 = 1.;
-//
-//               //Cum 4.
-//               //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-//               //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-//               //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-//
-//               LBMReal CUMcbb = mfcbb-((mfcaa+c1o3) * mfabb+2. * mfbba * mfbab);
-//               LBMReal CUMbcb = mfbcb-((mfaca+c1o3) * mfbab+2. * mfbba * mfabb);
-//               LBMReal CUMbbc = mfbbc-((mfaac+c1o3) * mfbba+2. * mfbab * mfabb);
-//
-//               LBMReal CUMcca = mfcca-((mfcaa * mfaca+2. * mfbba * mfbba)+c1o3 * (mfcaa+mfaca) * oMdrho+c1o9*(oMdrho-1)*oMdrho);
-//               LBMReal CUMcac = mfcac-((mfcaa * mfaac+2. * mfbab * mfbab)+c1o3 * (mfcaa+mfaac) * oMdrho+c1o9*(oMdrho-1)*oMdrho);
-//               LBMReal CUMacc = mfacc-((mfaac * mfaca+2. * mfabb * mfabb)+c1o3 * (mfaac+mfaca) * oMdrho+c1o9*(oMdrho-1)*oMdrho);
-//
-//               //Cum 5.
-//               LBMReal CUMbcc = mfbcc-(mfaac * mfbca+mfaca * mfbac+4. * mfabb * mfbbb+2. * (mfbab * mfacb+mfbba * mfabc))-c1o3 * (mfbca+mfbac) * oMdrho;
-//               LBMReal CUMcbc = mfcbc-(mfaac * mfcba+mfcaa * mfabc+4. * mfbab * mfbbb+2. * (mfabb * mfcab+mfbba * mfbac))-c1o3 * (mfcba+mfabc) * oMdrho;
-//               LBMReal CUMccb = mfccb-(mfcaa * mfacb+mfaca * mfcab+4. * mfbba * mfbbb+2. * (mfbab * mfbca+mfabb * mfcba))-c1o3 * (mfacb+mfcab) * oMdrho;
-//
-//               //Cum 6.
-//               LBMReal CUMccc = mfccc+((-4. *  mfbbb * mfbbb
-//                  -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca)
-//                  -4. * (mfabb * mfcbb+mfbab * mfbcb+mfbba * mfbbc)
-//                  -2. * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb))
-//                  +(4. * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac)
-//                     +2. * (mfcaa * mfaca * mfaac)
-//                     +16. *  mfbba * mfbab * mfabb)
-//                  -c1o3* (mfacc+mfcac+mfcca) * oMdrho-c1o9*oMdrho*oMdrho
-//                  -c1o9* (mfcaa+mfaca+mfaac) * oMdrho*(1.-2.* oMdrho)-c1o27* oMdrho * oMdrho*(-2.* oMdrho)
-//                  +(2. * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba)
-//                     +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)) * c2o3*oMdrho)+c1o27*oMdrho;
-//
-//               //2.
-//               // linear combinations
-//               LBMReal mxxPyyPzz = mfcaa+mfaca+mfaac;
-//               LBMReal mxxMyy = mfcaa-mfaca;
-//               LBMReal mxxMzz = mfcaa-mfaac;
-//
-//               LBMReal dxux = -c1o2 * collFactor *(mxxMyy+mxxMzz)+c1o2 * OxxPyyPzz*(mfaaa-mxxPyyPzz);
-//               LBMReal dyuy = dxux+collFactor * c3o2 * mxxMyy;
-//               LBMReal dzuz = dxux+collFactor * c3o2 * mxxMzz;
-//
-//               //relax
-//               mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz)-3. * (1.-c1o2 * OxxPyyPzz) * (vx2 * dxux+vy2 * dyuy+vz2 * dzuz);
-//               mxxMyy += collFactor * (-mxxMyy)-3. * (1.-c1o2 * collFactor) * (vx2 * dxux-vy2 * dyuy);
-//               mxxMzz += collFactor * (-mxxMzz)-3. * (1.-c1o2 * collFactor) * (vx2 * dxux-vz2 * dzuz);
-//
-//               mfabb += collFactor * (-mfabb);
-//               mfbab += collFactor * (-mfbab);
-//               mfbba += collFactor * (-mfbba);
-//
-//               // linear combinations back
-//               mfcaa = c1o3 * (mxxMyy+mxxMzz+mxxPyyPzz);
-//               mfaca = c1o3 * (-2. *  mxxMyy+mxxMzz+mxxPyyPzz);
-//               mfaac = c1o3 * (mxxMyy-2. * mxxMzz+mxxPyyPzz);
-//
-//               //3.
-//               // linear combinations
-//               LBMReal mxxyPyzz = mfcba+mfabc;
-//               LBMReal mxxyMyzz = mfcba-mfabc;
-//
-//               LBMReal mxxzPyyz = mfcab+mfacb;
-//               LBMReal mxxzMyyz = mfcab-mfacb;
-//
-//               LBMReal mxyyPxzz = mfbca+mfbac;
-//               LBMReal mxyyMxzz = mfbca-mfbac;
-//
-//               //relax
-//               wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimit);
-//               mfbbb += wadjust * (-mfbbb);
-//               wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimit);
-//               mxxyPyzz += wadjust * (-mxxyPyzz);
-//               wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimit);
-//               mxxyMyzz += wadjust * (-mxxyMyzz);
-//               wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimit);
-//               mxxzPyyz += wadjust * (-mxxzPyyz);
-//               wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimit);
-//               mxxzMyyz += wadjust * (-mxxzMyyz);
-//               wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimit);
-//               mxyyPxzz += wadjust * (-mxyyPxzz);
-//               wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimit);
-//               mxyyMxzz += wadjust * (-mxyyMxzz);
-//
-//               // linear combinations back
-//               mfcba = (mxxyMyzz+mxxyPyzz) * c1o2;
-//               mfabc = (-mxxyMyzz+mxxyPyzz) * c1o2;
-//               mfcab = (mxxzMyyz+mxxzPyyz) * c1o2;
-//               mfacb = (-mxxzMyyz+mxxzPyyz) * c1o2;
-//               mfbca = (mxyyMxzz+mxyyPxzz) * c1o2;
-//               mfbac = (-mxyyMxzz+mxyyPxzz) * c1o2;
-//
-//               //4.
-//               CUMacc += O4 * (-CUMacc);
-//               CUMcac += O4 * (-CUMcac);
-//               CUMcca += O4 * (-CUMcca);
-//
-//               CUMbbc += O4 * (-CUMbbc);
-//               CUMbcb += O4 * (-CUMbcb);
-//               CUMcbb += O4 * (-CUMcbb);
-//
-//               //5.
-//               CUMbcc += O5 * (-CUMbcc);
-//               CUMcbc += O5 * (-CUMcbc);
-//               CUMccb += O5 * (-CUMccb);
-//
-//               //6.
-//               CUMccc += O6 * (-CUMccc);
-//
-//               //back cumulants to central moments
-//               //4.
-//               //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-//               //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-//               //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
-//
-//               mfcbb = CUMcbb+((mfcaa+c1o3) * mfabb+2. * mfbba * mfbab);
-//               mfbcb = CUMbcb+((mfaca+c1o3) * mfbab+2. * mfbba * mfabb);
-//               mfbbc = CUMbbc+((mfaac+c1o3) * mfbba+2. * mfbab * mfabb);
-//
-//               mfcca = CUMcca+(mfcaa * mfaca+2. * mfbba * mfbba)+c1o3 * (mfcaa+mfaca) * oMdrho+c1o9*(oMdrho-1)*oMdrho;
-//               mfcac = CUMcac+(mfcaa * mfaac+2. * mfbab * mfbab)+c1o3 * (mfcaa+mfaac) * oMdrho+c1o9*(oMdrho-1)*oMdrho;
-//               mfacc = CUMacc+(mfaac * mfaca+2. * mfabb * mfabb)+c1o3 * (mfaac+mfaca) * oMdrho+c1o9*(oMdrho-1)*oMdrho;
-//
-//               //5.
-//               mfbcc = CUMbcc+(mfaac * mfbca+mfaca * mfbac+4. * mfabb * mfbbb+2. * (mfbab * mfacb+mfbba * mfabc))+c1o3 * (mfbca+mfbac) * oMdrho;
-//               mfcbc = CUMcbc+(mfaac * mfcba+mfcaa * mfabc+4. * mfbab * mfbbb+2. * (mfabb * mfcab+mfbba * mfbac))+c1o3 * (mfcba+mfabc) * oMdrho;
-//               mfccb = CUMccb+(mfcaa * mfacb+mfaca * mfcab+4. * mfbba * mfbbb+2. * (mfbab * mfbca+mfabb * mfcba))+c1o3 * (mfacb+mfcab) * oMdrho;
-//
-//               //6.
-//               mfccc = CUMccc-((-4. *  mfbbb * mfbbb
-//                  -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca)
-//                  -4. * (mfabb * mfcbb+mfbac * mfbca+mfbba * mfbbc)
-//                  -2. * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb))
-//                  +(4. * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac)
-//                     +2. * (mfcaa * mfaca * mfaac)
-//                     +16. *  mfbba * mfbab * mfabb)
-//                  -c1o3* (mfacc+mfcac+mfcca) * oMdrho-c1o9*oMdrho*oMdrho
-//                  -c1o9* (mfcaa+mfaca+mfaac) * oMdrho*(1.-2.* oMdrho)-c1o27* oMdrho * oMdrho*(-2.* oMdrho)
-//                  +(2. * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba)
-//                     +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)) * c2o3*oMdrho)-c1o27*oMdrho;
-//
-//               mfaab = 0.0;
-//               mfaba = 0.0;
-//               mfbaa = 0.0;
-//
-//               //mfaab *= -0.5;
-//               //mfaba *= -0.5;
-//               //mfbaa *= -0.5;
-//
-//
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               //back
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               // Z - Dir
-//               m0 = mfaac * c1o2+mfaab * (vvz-c1o2)+(mfaaa+1. * oMdrho) * (vz2-vvz) * c1o2;
-//               m1 = -mfaac-2. * mfaab *  vvz+mfaaa                * (1.-vz2)-1. * oMdrho * vz2;
-//               m2 = mfaac * c1o2+mfaab * (vvz+c1o2)+(mfaaa+1. * oMdrho) * (vz2+vvz) * c1o2;
-//               mfaaa = m0;
-//               mfaab = m1;
-//               mfaac = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfabc * c1o2+mfabb * (vvz-c1o2)+mfaba * (vz2-vvz) * c1o2;
-//               m1 = -mfabc-2. * mfabb *  vvz+mfaba * (1.-vz2);
-//               m2 = mfabc * c1o2+mfabb * (vvz+c1o2)+mfaba * (vz2+vvz) * c1o2;
-//               mfaba = m0;
-//               mfabb = m1;
-//               mfabc = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfacc * c1o2+mfacb * (vvz-c1o2)+(mfaca+c1o3 * oMdrho) * (vz2-vvz) * c1o2;
-//               m1 = -mfacc-2. * mfacb *  vvz+mfaca                  * (1.-vz2)-c1o3 * oMdrho * vz2;
-//               m2 = mfacc * c1o2+mfacb * (vvz+c1o2)+(mfaca+c1o3 * oMdrho) * (vz2+vvz) * c1o2;
-//               mfaca = m0;
-//               mfacb = m1;
-//               mfacc = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfbac * c1o2+mfbab * (vvz-c1o2)+mfbaa * (vz2-vvz) * c1o2;
-//               m1 = -mfbac-2. * mfbab *  vvz+mfbaa * (1.-vz2);
-//               m2 = mfbac * c1o2+mfbab * (vvz+c1o2)+mfbaa * (vz2+vvz) * c1o2;
-//               mfbaa = m0;
-//               mfbab = m1;
-//               mfbac = m2;
-//               /////////b//////////////////////////////////////////////////////////////////////////
-//               m0 = mfbbc * c1o2+mfbbb * (vvz-c1o2)+mfbba * (vz2-vvz) * c1o2;
-//               m1 = -mfbbc-2. * mfbbb *  vvz+mfbba * (1.-vz2);
-//               m2 = mfbbc * c1o2+mfbbb * (vvz+c1o2)+mfbba * (vz2+vvz) * c1o2;
-//               mfbba = m0;
-//               mfbbb = m1;
-//               mfbbc = m2;
-//               /////////b//////////////////////////////////////////////////////////////////////////
-//               m0 = mfbcc * c1o2+mfbcb * (vvz-c1o2)+mfbca * (vz2-vvz) * c1o2;
-//               m1 = -mfbcc-2. * mfbcb *  vvz+mfbca * (1.-vz2);
-//               m2 = mfbcc * c1o2+mfbcb * (vvz+c1o2)+mfbca * (vz2+vvz) * c1o2;
-//               mfbca = m0;
-//               mfbcb = m1;
-//               mfbcc = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfcac * c1o2+mfcab * (vvz-c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2-vvz) * c1o2;
-//               m1 = -mfcac-2. * mfcab *  vvz+mfcaa                  * (1.-vz2)-c1o3 * oMdrho * vz2;
-//               m2 = mfcac * c1o2+mfcab * (vvz+c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2+vvz) * c1o2;
-//               mfcaa = m0;
-//               mfcab = m1;
-//               mfcac = m2;
-//               /////////c//////////////////////////////////////////////////////////////////////////
-//               m0 = mfcbc * c1o2+mfcbb * (vvz-c1o2)+mfcba * (vz2-vvz) * c1o2;
-//               m1 = -mfcbc-2. * mfcbb *  vvz+mfcba * (1.-vz2);
-//               m2 = mfcbc * c1o2+mfcbb * (vvz+c1o2)+mfcba * (vz2+vvz) * c1o2;
-//               mfcba = m0;
-//               mfcbb = m1;
-//               mfcbc = m2;
-//               /////////c//////////////////////////////////////////////////////////////////////////
-//               m0 = mfccc * c1o2+mfccb * (vvz-c1o2)+(mfcca+c1o9 * oMdrho) * (vz2-vvz) * c1o2;
-//               m1 = -mfccc-2. * mfccb *  vvz+mfcca                  * (1.-vz2)-c1o9 * oMdrho * vz2;
-//               m2 = mfccc * c1o2+mfccb * (vvz+c1o2)+(mfcca+c1o9 * oMdrho) * (vz2+vvz) * c1o2;
-//               mfcca = m0;
-//               mfccb = m1;
-//               mfccc = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               // Y - Dir
-//               m0 = mfaca * c1o2+mfaba * (vvy-c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2-vvy) * c1o2;
-//               m1 = -mfaca-2. * mfaba *  vvy+mfaaa                  * (1.-vy2)-c1o6 * oMdrho * vy2;
-//               m2 = mfaca * c1o2+mfaba * (vvy+c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2+vvy) * c1o2;
-//               mfaaa = m0;
-//               mfaba = m1;
-//               mfaca = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfacb * c1o2+mfabb * (vvy-c1o2)+(mfaab+c2o3 * oMdrho) * (vy2-vvy) * c1o2;
-//               m1 = -mfacb-2. * mfabb *  vvy+mfaab                  * (1.-vy2)-c2o3 * oMdrho * vy2;
-//               m2 = mfacb * c1o2+mfabb * (vvy+c1o2)+(mfaab+c2o3 * oMdrho) * (vy2+vvy) * c1o2;
-//               mfaab = m0;
-//               mfabb = m1;
-//               mfacb = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfacc * c1o2+mfabc * (vvy-c1o2)+(mfaac+c1o6 * oMdrho) * (vy2-vvy) * c1o2;
-//               m1 = -mfacc-2. * mfabc *  vvy+mfaac                  * (1.-vy2)-c1o6 * oMdrho * vy2;
-//               m2 = mfacc * c1o2+mfabc * (vvy+c1o2)+(mfaac+c1o6 * oMdrho) * (vy2+vvy) * c1o2;
-//               mfaac = m0;
-//               mfabc = m1;
-//               mfacc = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfbca * c1o2+mfbba * (vvy-c1o2)+mfbaa * (vy2-vvy) * c1o2;
-//               m1 = -mfbca-2. * mfbba *  vvy+mfbaa * (1.-vy2);
-//               m2 = mfbca * c1o2+mfbba * (vvy+c1o2)+mfbaa * (vy2+vvy) * c1o2;
-//               mfbaa = m0;
-//               mfbba = m1;
-//               mfbca = m2;
-//               /////////b//////////////////////////////////////////////////////////////////////////
-//               m0 = mfbcb * c1o2+mfbbb * (vvy-c1o2)+mfbab * (vy2-vvy) * c1o2;
-//               m1 = -mfbcb-2. * mfbbb *  vvy+mfbab * (1.-vy2);
-//               m2 = mfbcb * c1o2+mfbbb * (vvy+c1o2)+mfbab * (vy2+vvy) * c1o2;
-//               mfbab = m0;
-//               mfbbb = m1;
-//               mfbcb = m2;
-//               /////////b//////////////////////////////////////////////////////////////////////////
-//               m0 = mfbcc * c1o2+mfbbc * (vvy-c1o2)+mfbac * (vy2-vvy) * c1o2;
-//               m1 = -mfbcc-2. * mfbbc *  vvy+mfbac * (1.-vy2);
-//               m2 = mfbcc * c1o2+mfbbc * (vvy+c1o2)+mfbac * (vy2+vvy) * c1o2;
-//               mfbac = m0;
-//               mfbbc = m1;
-//               mfbcc = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfcca * c1o2+mfcba * (vvy-c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2-vvy) * c1o2;
-//               m1 = -mfcca-2. * mfcba *  vvy+mfcaa                   * (1.-vy2)-c1o18 * oMdrho * vy2;
-//               m2 = mfcca * c1o2+mfcba * (vvy+c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2+vvy) * c1o2;
-//               mfcaa = m0;
-//               mfcba = m1;
-//               mfcca = m2;
-//               /////////c//////////////////////////////////////////////////////////////////////////
-//               m0 = mfccb * c1o2+mfcbb * (vvy-c1o2)+(mfcab+c2o9 * oMdrho) * (vy2-vvy) * c1o2;
-//               m1 = -mfccb-2. * mfcbb *  vvy+mfcab                  * (1.-vy2)-c2o9 * oMdrho * vy2;
-//               m2 = mfccb * c1o2+mfcbb * (vvy+c1o2)+(mfcab+c2o9 * oMdrho) * (vy2+vvy) * c1o2;
-//               mfcab = m0;
-//               mfcbb = m1;
-//               mfccb = m2;
-//               /////////c//////////////////////////////////////////////////////////////////////////
-//               m0 = mfccc * c1o2+mfcbc * (vvy-c1o2)+(mfcac+c1o18 * oMdrho) * (vy2-vvy) * c1o2;
-//               m1 = -mfccc-2. * mfcbc *  vvy+mfcac                   * (1.-vy2)-c1o18 * oMdrho * vy2;
-//               m2 = mfccc * c1o2+mfcbc * (vvy+c1o2)+(mfcac+c1o18 * oMdrho) * (vy2+vvy) * c1o2;
-//               mfcac = m0;
-//               mfcbc = m1;
-//               mfccc = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               // X - Dir
-//               m0 = mfcaa * c1o2+mfbaa * (vvx-c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-//               m1 = -mfcaa-2. * mfbaa *  vvx+mfaaa                   * (1.-vx2)-c1o36 * oMdrho * vx2;
-//               m2 = mfcaa * c1o2+mfbaa * (vvx+c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-//               mfaaa = m0;
-//               mfbaa = m1;
-//               mfcaa = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfcba * c1o2+mfbba * (vvx-c1o2)+(mfaba+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-//               m1 = -mfcba-2. * mfbba *  vvx+mfaba                  * (1.-vx2)-c1o9 * oMdrho * vx2;
-//               m2 = mfcba * c1o2+mfbba * (vvx+c1o2)+(mfaba+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-//               mfaba = m0;
-//               mfbba = m1;
-//               mfcba = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfcca * c1o2+mfbca * (vvx-c1o2)+(mfaca+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-//               m1 = -mfcca-2. * mfbca *  vvx+mfaca                   * (1.-vx2)-c1o36 * oMdrho * vx2;
-//               m2 = mfcca * c1o2+mfbca * (vvx+c1o2)+(mfaca+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-//               mfaca = m0;
-//               mfbca = m1;
-//               mfcca = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfcab * c1o2+mfbab * (vvx-c1o2)+(mfaab+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-//               m1 = -mfcab-2. * mfbab *  vvx+mfaab                  * (1.-vx2)-c1o9 * oMdrho * vx2;
-//               m2 = mfcab * c1o2+mfbab * (vvx+c1o2)+(mfaab+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-//               mfaab = m0;
-//               mfbab = m1;
-//               mfcab = m2;
-//               ///////////b////////////////////////////////////////////////////////////////////////
-//               m0 = mfcbb * c1o2+mfbbb * (vvx-c1o2)+(mfabb+c4o9 * oMdrho) * (vx2-vvx) * c1o2;
-//               m1 = -mfcbb-2. * mfbbb *  vvx+mfabb                  * (1.-vx2)-c4o9 * oMdrho * vx2;
-//               m2 = mfcbb * c1o2+mfbbb * (vvx+c1o2)+(mfabb+c4o9 * oMdrho) * (vx2+vvx) * c1o2;
-//               mfabb = m0;
-//               mfbbb = m1;
-//               mfcbb = m2;
-//               ///////////b////////////////////////////////////////////////////////////////////////
-//               m0 = mfccb * c1o2+mfbcb * (vvx-c1o2)+(mfacb+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-//               m1 = -mfccb-2. * mfbcb *  vvx+mfacb                  * (1.-vx2)-c1o9 * oMdrho * vx2;
-//               m2 = mfccb * c1o2+mfbcb * (vvx+c1o2)+(mfacb+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-//               mfacb = m0;
-//               mfbcb = m1;
-//               mfccb = m2;
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               ////////////////////////////////////////////////////////////////////////////////////
-//               m0 = mfcac * c1o2+mfbac * (vvx-c1o2)+(mfaac+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-//               m1 = -mfcac-2. * mfbac *  vvx+mfaac                   * (1.-vx2)-c1o36 * oMdrho * vx2;
-//               m2 = mfcac * c1o2+mfbac * (vvx+c1o2)+(mfaac+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-//               mfaac = m0;
-//               mfbac = m1;
-//               mfcac = m2;
-//               ///////////c////////////////////////////////////////////////////////////////////////
-//               m0 = mfcbc * c1o2+mfbbc * (vvx-c1o2)+(mfabc+c1o9 * oMdrho) * (vx2-vvx) * c1o2;
-//               m1 = -mfcbc-2. * mfbbc *  vvx+mfabc                  * (1.-vx2)-c1o9 * oMdrho * vx2;
-//               m2 = mfcbc * c1o2+mfbbc * (vvx+c1o2)+(mfabc+c1o9 * oMdrho) * (vx2+vvx) * c1o2;
-//               mfabc = m0;
-//               mfbbc = m1;
-//               mfcbc = m2;
-//               ///////////c////////////////////////////////////////////////////////////////////////
-//               m0 = mfccc * c1o2+mfbcc * (vvx-c1o2)+(mfacc+c1o36 * oMdrho) * (vx2-vvx) * c1o2;
-//               m1 = -mfccc-2. * mfbcc *  vvx+mfacc                   * (1.-vx2)-c1o36 * oMdrho * vx2;
-//               m2 = mfccc * c1o2+mfbcc * (vvx+c1o2)+(mfacc+c1o36 * oMdrho) * (vx2+vvx) * c1o2;
-//               mfacc = m0;
-//               mfbcc = m1;
-//               mfccc = m2;
-//
-//               //////////////////////////////////////////////////////////////////////////
-//               //proof correctness
-//               //////////////////////////////////////////////////////////////////////////
-//#ifdef  PROOF_CORRECTNESS
-//               LBMReal rho_post = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca)
-//                  +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc)
-//                  +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb;
-//               //LBMReal dif = fabs(rho - rho_post);
-//               LBMReal dif = rho-rho_post;
-//#ifdef SINGLEPRECISION
-//               if (dif>10.0E-7||dif<-10.0E-7)
-//#else
-//               if (dif>10.0E-15||dif<-10.0E-15)
-//#endif
-//               {
-//                  UB_THROW(UbException(UB_EXARGS, "rho="+UbSystem::toString(rho)+", rho_post="+UbSystem::toString(rho_post)
-//                     +" dif="+UbSystem::toString(dif)
-//                     +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)));
-//                  //UBLOG(logERROR,"LBMKernel3DCCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
-//                  //exit(EXIT_FAILURE);
-//               }
-//#endif
-//               ////////////////////////////////////////////////////////////////////////////
-//               ////write distribution
-//               ////////////////////////////////////////////////////////////////////////////
-//               (*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->zeroDistributions)(x1, x2, x3) = mfbbb;
-//               ////////////////////////////////////////////////////////////////////////////
-//
-//            }
-//         }
-//      }
-//   }
-//
-//}
-
-
-
-
-void InitDensityLBMKernel::calculate(int  /*step*/)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-   SPtr<BoundaryConditions> bcPtr;
-   real f[D3Q27System::ENDF+1];
-   real feq[D3Q27System::ENDF+1];
-   real drho, vx1, vx2, vx3;
-   const int bcArrayMaxX1 = (int)bcArray->getNX1();
-   const int bcArrayMaxX2 = (int)bcArray->getNX2();
-   const int bcArrayMaxX3 = (int)bcArray->getNX3();
-
-   int minX1 = ghostLayerWidth;
-   int minX2 = ghostLayerWidth;
-   int minX3 = ghostLayerWidth;
-   int maxX1 = bcArrayMaxX1-ghostLayerWidth;
-   int maxX2 = bcArrayMaxX2-ghostLayerWidth;
-   int maxX3 = bcArrayMaxX3-ghostLayerWidth;
-
-   //collFactor = 1.0/(1.0/2.0+1.0/sqrt(6.0));
-   collFactor = 1.0;
-
-   for (int x3 = minX3; x3<maxX3; x3++)
-   {
-      for (int x2 = minX2; x2<maxX2; x2++)
-      {
-         for (int x1 = minX1; x1<maxX1; x1++)
-         {
-            if (!bcArray->isSolid(x1, x2, x3)&&!bcArray->isUndefined(x1, x2, x3))
-            {
-               int x1p = x1+1;
-               int x2p = x2+1;
-               int x3p = x3+1;
-               //////////////////////////////////////////////////////////////////////////
-               //read distribution
-               ////////////////////////////////////////////////////////////////////////////
-               f[d000] = (*this->zeroDistributions)(x1, x2, x3);
-
-               f[dP00] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-               f[d0P0] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-               f[d00P] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-               f[dPP0] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-               f[dMP0] = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-               f[dP0P] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-               f[dM0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-               f[d0PP] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-               f[d0MP] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-               f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-               f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-               f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-               f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-               f[dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-               f[d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-               f[d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-               f[dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-               f[dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-               f[dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-               f[dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-               f[d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-               f[d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-               f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-               f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-               f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-               f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
-               //////////////////////////////////////////////////////////////////////////
-
-               drho = ((f[dPPP]+f[dMMM])+(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])+(f[dMMP]+f[dPPM]))
-                  +(((f[dPP0]+f[dMM0])+(f[dPM0]+f[dMP0]))+((f[dP0P]+f[dM0M])+(f[dP0M]+f[dM0P]))
-                     +((f[d0PM]+f[d0MP])+(f[d0PP]+f[d0MM])))+((f[dP00]+f[dM00])+(f[d0P0]+f[d0M0])
-                        +(f[d00P]+f[d00M]))+f[d000];
-
-               //vx1 = ((((f[TNE]-f[BSW])+(f[TSE]-f[BNW]))+((f[BSE]-f[TNW])+(f[BNE]-f[TSW])))+
-               //   (((f[BE]-f[TW])+(f[TE]-f[BW]))+((f[SE]-f[NW])+(f[NE]-f[SW])))+
-               //   (f[dP00]-f[W]));
-
-               //vx2 = ((((f[TNE]-f[BSW])+(f[BNW]-f[TSE]))+((f[TNW]-f[BSE])+(f[BNE]-f[TSW])))+
-               //   (((f[BN]-f[TS])+(f[TN]-f[BS]))+((f[NW]-f[SE])+(f[NE]-f[SW])))+
-               //   (f[N]-f[S]));
-
-               //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]));
-
-               vx1 = v(0,x1,x2,x3);
-               vx2 = v(1,x1,x2,x3);
-               vx3 = v(2,x1,x2,x3);
-
-               //LBMReal vvx = v(0,x1,x2,x3);
-               //LBMReal vvy = v(1,x1,x2,x3);
-               //LBMReal vvz = v(2,x1,x2,x3);
-
-               //vx1 = vx1+(vvx-vx1);
-               //vx2 = vx2+(vvy-vx2);
-               //vx3 = vx3+(vvz-vx3);
-
-               real cu_sq = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-               feq[d000] = c8o27*(drho-cu_sq);
-               feq[dP00] = c2o27*(drho+c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq);
-               feq[dM00] = c2o27*(drho+c3o1*(-vx1)+c9o2*(-vx1)*(-vx1)-cu_sq);
-               feq[d0P0] = c2o27*(drho+c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq);
-               feq[d0M0] = c2o27*(drho+c3o1*(-vx2)+c9o2*(-vx2)*(-vx2)-cu_sq);
-               feq[d00P] = c2o27*(drho+c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq);
-               feq[d00M] = c2o27*(drho+c3o1*(-vx3)+c9o2*(-vx3)*(-vx3)-cu_sq);
-               feq[dPP0] = c1o54*(drho+c3o1*(vx1+vx2)+c9o2*(vx1+vx2)*(vx1+vx2)-cu_sq);
-               feq[dMM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq);
-               feq[dPM0] = c1o54*(drho+c3o1*(vx1-vx2)+c9o2*(vx1-vx2)*(vx1-vx2)-cu_sq);
-               feq[dMP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq);
-               feq[dP0P] = c1o54*(drho+c3o1*(vx1+vx3)+c9o2*(vx1+vx3)*(vx1+vx3)-cu_sq);
-               feq[dM0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq);
-               feq[dP0M] = c1o54*(drho+c3o1*(vx1-vx3)+c9o2*(vx1-vx3)*(vx1-vx3)-cu_sq);
-               feq[dM0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq);
-               feq[d0PP] = c1o54*(drho+c3o1*(vx2+vx3)+c9o2*(vx2+vx3)*(vx2+vx3)-cu_sq);
-               feq[d0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq);
-               feq[d0PM] = c1o54*(drho+c3o1*(vx2-vx3)+c9o2*(vx2-vx3)*(vx2-vx3)-cu_sq);
-               feq[d0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq);
-               feq[dPPP] = c1o216*(drho+c3o1*(vx1+vx2+vx3)+c9o2*(vx1+vx2+vx3)*(vx1+vx2+vx3)-cu_sq);
-               feq[dMMM] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-               feq[dPPM] = c1o216*(drho+c3o1*(vx1+vx2-vx3)+c9o2*(vx1+vx2-vx3)*(vx1+vx2-vx3)-cu_sq);
-               feq[dMMP] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-               feq[dPMP] = c1o216*(drho+c3o1*(vx1-vx2+vx3)+c9o2*(vx1-vx2+vx3)*(vx1-vx2+vx3)-cu_sq);
-               feq[dMPM] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-               feq[dPMM] = c1o216*(drho+c3o1*(vx1-vx2-vx3)+c9o2*(vx1-vx2-vx3)*(vx1-vx2-vx3)-cu_sq);
-               feq[dMPP] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-
-               //Relaxation
-               f[d000] += (feq[d000]-f[d000])*collFactor;
-               f[dP00] += (feq[dP00]-f[dP00])*collFactor;
-               f[dM00] += (feq[dM00]-f[dM00])*collFactor;
-               f[d0P0] += (feq[d0P0]-f[d0P0])*collFactor;
-               f[d0M0] += (feq[d0M0]-f[d0M0])*collFactor;
-               f[d00P] += (feq[d00P]-f[d00P])*collFactor;
-               f[d00M] += (feq[d00M]-f[d00M])*collFactor;
-               f[dPP0] += (feq[dPP0]-f[dPP0])*collFactor;
-               f[dMM0] += (feq[dMM0]-f[dMM0])*collFactor;
-               f[dPM0] += (feq[dPM0]-f[dPM0])*collFactor;
-               f[dMP0] += (feq[dMP0]-f[dMP0])*collFactor;
-               f[dP0P] += (feq[dP0P]-f[dP0P])*collFactor;
-               f[dM0M] += (feq[dM0M]-f[dM0M])*collFactor;
-               f[dP0M] += (feq[dP0M]-f[dP0M])*collFactor;
-               f[dM0P] += (feq[dM0P]-f[dM0P])*collFactor;
-               f[d0PP] += (feq[d0PP]-f[d0PP])*collFactor;
-               f[d0MM] += (feq[d0MM]-f[d0MM])*collFactor;
-               f[d0PM] += (feq[d0PM]-f[d0PM])*collFactor;
-               f[d0MP] += (feq[d0MP]-f[d0MP])*collFactor;
-
-               f[dPPP] += (feq[dPPP]-f[dPPP])*collFactor;
-               f[dMMM] += (feq[dMMM]-f[dMMM])*collFactor;
-               f[dPPM] += (feq[dPPM]-f[dPPM])*collFactor;
-               f[dMMP] += (feq[dMMP]-f[dMMP])*collFactor;
-               f[dPMP] += (feq[dPMP]-f[dPMP])*collFactor;
-               f[dMPM] += (feq[dMPM]-f[dMPM])*collFactor;
-               f[dPMM] += (feq[dPMM]-f[dPMM])*collFactor;
-               f[dMPP] += (feq[dMPP]-f[dMPP])*collFactor;
-
-               //////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-               real rho_post = f[REST]+f[dP00]+f[W]+f[N]+f[S]+f[T]+f[B]
-                  +f[NE]+f[SW]+f[SE]+f[NW]+f[TE]+f[BW]+f[BE]
-                  +f[TW]+f[TN]+f[BS]+f[BN]+f[TS]+f[TNE]+f[TSW]
-                  +f[TSE]+f[TNW]+f[BNE]+f[BSW]+f[BSE]+f[BNW];
-               real dif = drho-rho_post;
-#ifdef SINGLEPRECISION
-               if (dif>10.0E-7||dif<-10.0E-7)
-#else
-               if (dif>10.0E-15||dif<-10.0E-15)
-#endif
-               {
-                  UB_THROW(UbException(UB_EXARGS, "rho is not correct"));
-               }
-#endif
-               //////////////////////////////////////////////////////////////////////////
-               //write distribution
-               //////////////////////////////////////////////////////////////////////////
-               (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[iP00];
-               (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[i0P0];
-               (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[i00P];
-               (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[iPP0];
-               (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = f[iMP0];
-               (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[iP0P];
-               (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = f[iM0P];
-               (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[i0PP];
-               (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = f[i0MP];
-               (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[iPPP];
-               (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = f[iMPP];
-               (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = f[iPMP];
-               (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[iMMP];
-
-               (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = f[iM00];
-               (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = f[i0M0];
-               (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = f[i00M];
-               (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = f[iMM0];
-               (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = f[iPM0];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = f[iM0M];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = f[iP0M];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = f[i0MM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = f[i0PM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[iMMM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[iPMM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[iMPM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[iPPM];
-
-               (*this->zeroDistributions)(x1, x2, x3) = f[d000];
-               //////////////////////////////////////////////////////////////////////////
-
-
-            }
-         }
-      }
-   }
-}
\ No newline at end of file
diff --git a/src/cpu/core/LBM/InitDensityLBMKernel.h b/src/cpu/core/LBM/InitDensityLBMKernel.h
deleted file mode 100644
index 33255f8f5517e6a030cdb060d8397a6cf6cd8580..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/InitDensityLBMKernel.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef InitDensityLBMKernel_h__
-#define InitDensityLBMKernel_h__
-
-#include "LBMKernel.h"
-#include "basics/utilities/UbTiming.h"
-#include "CbArray4D.h"
-#include "D3Q27System.h"
-#include "CbArray3D.h"
-
-class InitDensityLBMKernel :  public LBMKernel
-{
-public:
-   InitDensityLBMKernel();
-   ~InitDensityLBMKernel() override;
-   void calculate(int step) override;
-   SPtr<LBMKernel> clone() override;
-   void setVelocity(int x1, int x2, int x3, real vvx, real vvy, real vvz);
-   real getCalculationTime() override;
-protected:
-   void initDataSet();
-private:
-//   real f[D3Q27System::ENDF+1];
-   CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
-   CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
-   CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr   zeroDistributions;
-//   LBMReal OxyyMxzz;
-   CbArray4D<real, IndexerX4X3X2X1> v;
-};
-
-#endif // InitDensityLBMKernel_h__
-
diff --git a/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.cpp b/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.cpp
deleted file mode 100644
index de2e4a01fe7c272900d40a8daa58ba4d6c0fb8b4..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.cpp
+++ /dev/null
@@ -1,717 +0,0 @@
-#include "CompressibleOffsetInterpolator.h"
-#include "D3Q27System.h"
-
-//using namespace UbMath;
-using namespace vf::basics::constant;
-
-//////////////////////////////////////////////////////////////////////////
-CompressibleOffsetInterpolator::CompressibleOffsetInterpolator(real omegaC, real omegaF)
-   : omegaC(omegaC), omegaF(omegaF)
-{
-
-}
-
-//////////////////////////////////////////////////////////////////////////
-InterpolationProcessorPtr CompressibleOffsetInterpolator::clone()
-{
-   InterpolationProcessorPtr iproc = InterpolationProcessorPtr (new CompressibleOffsetInterpolator(this->omegaC, this->omegaF));
-   //dynamicPointerCast<D3Q27IncompressibleOffsetInterpolationProcessor>(iproc)->forcingC = forcingC;
-   //dynamicPointerCast<D3Q27IncompressibleOffsetInterpolationProcessor>(iproc)->forcingF = forcingF;
-   return iproc;
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetInterpolator::setOmegas( real omegaC, real omegaF )
-{
-   this->omegaC = omegaC;
-   this->omegaF = omegaF;
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetInterpolator::setOffsets(real xoff, real yoff, real zoff)
-{
-   this->xoff = xoff;
-   this->yoff = yoff;
-   this->zoff = zoff;     
-   this->xoff_sq = xoff * xoff;
-   this->yoff_sq = yoff * yoff;
-   this->zoff_sq = zoff * zoff;
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetInterpolator::interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF, real xoff, real yoff, real zoff)
-{
-   setOffsets(xoff, yoff, zoff);
-   calcInterpolatedCoefficiets(icellC, omegaC, c1o2);
-   calcInterpolatedNodeCF(icellF.BSW, omegaF, -c1o4, -c1o4, -c1o4, calcPressBSW(), -c1o1, -c1o1, -c1o1);
-   calcInterpolatedNodeCF(icellF.BNE, omegaF,  c1o4,  c1o4, -c1o4, calcPressBNE(),  c1o1,  c1o1, -c1o1);
-   calcInterpolatedNodeCF(icellF.TNW, omegaF, -c1o4,  c1o4,  c1o4, calcPressTNW(), -c1o1,  c1o1,  c1o1);
-   calcInterpolatedNodeCF(icellF.TSE, omegaF,  c1o4, -c1o4,  c1o4, calcPressTSE(),  c1o1, -c1o1,  c1o1);
-   calcInterpolatedNodeCF(icellF.BNW, omegaF, -c1o4,  c1o4, -c1o4, calcPressBNW(), -c1o1,  c1o1, -c1o1);
-   calcInterpolatedNodeCF(icellF.BSE, omegaF,  c1o4, -c1o4, -c1o4, calcPressBSE(),  c1o1, -c1o1, -c1o1);
-   calcInterpolatedNodeCF(icellF.TSW, omegaF, -c1o4, -c1o4,  c1o4, calcPressTSW(), -c1o1, -c1o1,  c1o1);
-   calcInterpolatedNodeCF(icellF.TNE, omegaF,  c1o4,  c1o4,  c1o4, calcPressTNE(),  c1o1,  c1o1,  c1o1);
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetInterpolator::interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC, real xoff, real yoff, real zoff)
-{
-   setOffsets(xoff, yoff, zoff);
-   calcInterpolatedCoefficiets(icellF, omegaF, c2o1);
-   calcInterpolatedNodeFC(icellC, omegaC);
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetInterpolator::calcMoments(const real* const f, real omega, real& press, real& vx1, real& vx2, real& vx3, 
-                                                    real& kxy, real& kyz, real& kxz, real& kxxMyy, real& kxxMzz)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-   using namespace vf::basics::constant;
-
-   real drho = c0o1;
-   D3Q27System::calcCompMacroscopicValues(f,drho,vx1,vx2,vx3);
-   
-   press = drho; //interpolate rho!
-
-   kxy   = -c3o1*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))/(c1o1 + drho)-(vx1*vx2));// might not be optimal MG 25.2.13
-   kyz   = -c3o1*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))/(c1o1 + drho)-(vx2*vx3));
-   kxz   = -c3o1*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))/(c1o1 + drho)-(vx1*vx3));
-   kxxMyy = -c3o1/c2o1*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))/(c1o1 + drho)-(vx1*vx1-vx2*vx2));
-   kxxMzz = -c3o1/c2o1*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))/(c1o1 + drho)-(vx1*vx1-vx3*vx3));
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetInterpolator::calcInterpolatedCoefficiets(const D3Q27ICell& icell, real omega, real eps_new)
-{
-   real        vx1_SWT,vx2_SWT,vx3_SWT;
-   real        vx1_NWT,vx2_NWT,vx3_NWT;
-   real        vx1_NET,vx2_NET,vx3_NET;
-   real        vx1_SET,vx2_SET,vx3_SET;
-   real        vx1_SWB,vx2_SWB,vx3_SWB;
-   real        vx1_NWB,vx2_NWB,vx3_NWB;
-   real        vx1_NEB,vx2_NEB,vx3_NEB;
-   real        vx1_SEB,vx2_SEB,vx3_SEB;
-
-   real        kxyFromfcNEQ_SWT, kyzFromfcNEQ_SWT, kxzFromfcNEQ_SWT, kxxMyyFromfcNEQ_SWT, kxxMzzFromfcNEQ_SWT;
-   real        kxyFromfcNEQ_NWT, kyzFromfcNEQ_NWT, kxzFromfcNEQ_NWT, kxxMyyFromfcNEQ_NWT, kxxMzzFromfcNEQ_NWT;
-   real        kxyFromfcNEQ_NET, kyzFromfcNEQ_NET, kxzFromfcNEQ_NET, kxxMyyFromfcNEQ_NET, kxxMzzFromfcNEQ_NET;
-   real        kxyFromfcNEQ_SET, kyzFromfcNEQ_SET, kxzFromfcNEQ_SET, kxxMyyFromfcNEQ_SET, kxxMzzFromfcNEQ_SET;
-   real        kxyFromfcNEQ_SWB, kyzFromfcNEQ_SWB, kxzFromfcNEQ_SWB, kxxMyyFromfcNEQ_SWB, kxxMzzFromfcNEQ_SWB;
-   real        kxyFromfcNEQ_NWB, kyzFromfcNEQ_NWB, kxzFromfcNEQ_NWB, kxxMyyFromfcNEQ_NWB, kxxMzzFromfcNEQ_NWB;
-   real        kxyFromfcNEQ_NEB, kyzFromfcNEQ_NEB, kxzFromfcNEQ_NEB, kxxMyyFromfcNEQ_NEB, kxxMzzFromfcNEQ_NEB;
-   real        kxyFromfcNEQ_SEB, kyzFromfcNEQ_SEB, kxzFromfcNEQ_SEB, kxxMyyFromfcNEQ_SEB, kxxMzzFromfcNEQ_SEB;
-
-   calcMoments(icell.TSW,omega,press_SWT,vx1_SWT,vx2_SWT,vx3_SWT, kxyFromfcNEQ_SWT, kyzFromfcNEQ_SWT, kxzFromfcNEQ_SWT, kxxMyyFromfcNEQ_SWT, kxxMzzFromfcNEQ_SWT);
-   calcMoments(icell.TNW,omega,press_NWT,vx1_NWT,vx2_NWT,vx3_NWT, kxyFromfcNEQ_NWT, kyzFromfcNEQ_NWT, kxzFromfcNEQ_NWT, kxxMyyFromfcNEQ_NWT, kxxMzzFromfcNEQ_NWT);
-   calcMoments(icell.TNE,omega,press_NET,vx1_NET,vx2_NET,vx3_NET, kxyFromfcNEQ_NET, kyzFromfcNEQ_NET, kxzFromfcNEQ_NET, kxxMyyFromfcNEQ_NET, kxxMzzFromfcNEQ_NET);
-   calcMoments(icell.TSE,omega,press_SET,vx1_SET,vx2_SET,vx3_SET, kxyFromfcNEQ_SET, kyzFromfcNEQ_SET, kxzFromfcNEQ_SET, kxxMyyFromfcNEQ_SET, kxxMzzFromfcNEQ_SET);
-   calcMoments(icell.BSW,omega,press_SWB,vx1_SWB,vx2_SWB,vx3_SWB, kxyFromfcNEQ_SWB, kyzFromfcNEQ_SWB, kxzFromfcNEQ_SWB, kxxMyyFromfcNEQ_SWB, kxxMzzFromfcNEQ_SWB);
-   calcMoments(icell.BNW,omega,press_NWB,vx1_NWB,vx2_NWB,vx3_NWB, kxyFromfcNEQ_NWB, kyzFromfcNEQ_NWB, kxzFromfcNEQ_NWB, kxxMyyFromfcNEQ_NWB, kxxMzzFromfcNEQ_NWB);
-   calcMoments(icell.BNE,omega,press_NEB,vx1_NEB,vx2_NEB,vx3_NEB, kxyFromfcNEQ_NEB, kyzFromfcNEQ_NEB, kxzFromfcNEQ_NEB, kxxMyyFromfcNEQ_NEB, kxxMzzFromfcNEQ_NEB);
-   calcMoments(icell.BSE,omega,press_SEB,vx1_SEB,vx2_SEB,vx3_SEB, kxyFromfcNEQ_SEB, kyzFromfcNEQ_SEB, kxzFromfcNEQ_SEB, kxxMyyFromfcNEQ_SEB, kxxMzzFromfcNEQ_SEB);
-
-   //LBMReal dxRho=c1o4*((press_NET-press_SWB)+(press_SET-press_NWB)+(press_NEB-press_SWT)+(press_SEB-press_NWT));
-   //LBMReal dyRho=c1o4*((press_NET-press_SWB)-(press_SET-press_NWB)+(press_NEB-press_SWT)-(press_SEB-press_NWT));
-   //LBMReal dzRho=c1o4*((press_NET-press_SWB)+(press_SET-press_NWB)-(press_NEB-press_SWT)-(press_SEB-press_NWT));
-
-   //   kxyFromfcNEQ_SWT+=vx1_SWT*dyRho+vx2_SWT*dxRho;
-   //   kxyFromfcNEQ_NWT+=vx1_NWT*dyRho+vx2_NWT*dxRho;
-   //   kxyFromfcNEQ_NET+=vx1_NET*dyRho+vx2_NET*dxRho;
-   //   kxyFromfcNEQ_SET+=vx1_SET*dyRho+vx2_SET*dxRho;
-   //   kxyFromfcNEQ_SWB+=vx1_SWB*dyRho+vx2_SWB*dxRho;
-   //   kxyFromfcNEQ_NWB+=vx1_NWB*dyRho+vx2_NWB*dxRho;
-   //   kxyFromfcNEQ_NEB+=vx1_NEB*dyRho+vx2_NEB*dxRho;
-   //   kxyFromfcNEQ_SEB+=vx1_SEB*dyRho+vx2_SEB*dxRho;
-
-   //   kyzFromfcNEQ_SWT+=vx3_SWT*dyRho+vx2_SWT*dzRho;
-   //   kyzFromfcNEQ_NWT+=vx3_NWT*dyRho+vx2_NWT*dzRho;
-   //   kyzFromfcNEQ_NET+=vx3_NET*dyRho+vx2_NET*dzRho;
-   //   kyzFromfcNEQ_SET+=vx3_SET*dyRho+vx2_SET*dzRho;
-   //   kyzFromfcNEQ_SWB+=vx3_SWB*dyRho+vx2_SWB*dzRho;
-   //   kyzFromfcNEQ_NWB+=vx3_NWB*dyRho+vx2_NWB*dzRho;
-   //   kyzFromfcNEQ_NEB+=vx3_NEB*dyRho+vx2_NEB*dzRho;
-   //   kyzFromfcNEQ_SEB+=vx3_SEB*dyRho+vx2_SEB*dzRho;
-
-   //   kxzFromfcNEQ_SWT+=vx1_SWT*dzRho+vx3_SWT*dxRho;
-   //   kxzFromfcNEQ_NWT+=vx1_NWT*dzRho+vx3_NWT*dxRho;
-   //   kxzFromfcNEQ_NET+=vx1_NET*dzRho+vx3_NET*dxRho;
-   //   kxzFromfcNEQ_SET+=vx1_SET*dzRho+vx3_SET*dxRho;
-   //   kxzFromfcNEQ_SWB+=vx1_SWB*dzRho+vx3_SWB*dxRho;
-   //   kxzFromfcNEQ_NWB+=vx1_NWB*dzRho+vx3_NWB*dxRho;
-   //   kxzFromfcNEQ_NEB+=vx1_NEB*dzRho+vx3_NEB*dxRho;
-   //   kxzFromfcNEQ_SEB+=vx1_SEB*dzRho+vx3_SEB*dxRho;
-
-   //   kxxMyyFromfcNEQ_SWT+=vx1_SWT*dxRho-vx2_SWT*dyRho;
-   //   kxxMyyFromfcNEQ_NWT+=vx1_NWT*dxRho-vx2_NWT*dyRho;
-   //   kxxMyyFromfcNEQ_NET+=vx1_NET*dxRho-vx2_NET*dyRho;
-   //   kxxMyyFromfcNEQ_SET+=vx1_SET*dxRho-vx2_SET*dyRho;
-   //   kxxMyyFromfcNEQ_SWB+=vx1_SWB*dxRho-vx2_SWB*dyRho;
-   //   kxxMyyFromfcNEQ_NWB+=vx1_NWB*dxRho-vx2_NWB*dyRho;
-   //   kxxMyyFromfcNEQ_NEB+=vx1_NEB*dxRho-vx2_NEB*dyRho;
-   //   kxxMyyFromfcNEQ_SEB+=vx1_SEB*dxRho-vx2_SEB*dyRho;
-
-   //   kxxMzzFromfcNEQ_SWT+=vx1_SWT*dxRho-vx3_SWT*dzRho;
-   //   kxxMzzFromfcNEQ_NWT+=vx1_NWT*dxRho-vx3_NWT*dzRho;
-   //   kxxMzzFromfcNEQ_NET+=vx1_NET*dxRho-vx3_NET*dzRho;
-   //   kxxMzzFromfcNEQ_SET+=vx1_SET*dxRho-vx3_SET*dzRho;
-   //   kxxMzzFromfcNEQ_SWB+=vx1_SWB*dxRho-vx3_SWB*dzRho;
-   //   kxxMzzFromfcNEQ_NWB+=vx1_NWB*dxRho-vx3_NWB*dzRho;
-   //   kxxMzzFromfcNEQ_NEB+=vx1_NEB*dxRho-vx3_NEB*dzRho;
-   //   kxxMzzFromfcNEQ_SEB+=vx1_SEB*dxRho-vx3_SEB*dzRho;
-
-
-      //kxxMzzFromfcNEQ_SWT=0.0;
-      //kxxMzzFromfcNEQ_NWT=0.0;
-      //kxxMzzFromfcNEQ_NET=0.0;
-      //kxxMzzFromfcNEQ_SET=0.0;
-      //kxxMzzFromfcNEQ_SWB=0.0;
-      //kxxMzzFromfcNEQ_NWB=0.0;
-      //kxxMzzFromfcNEQ_NEB=0.0;
-      //kxxMzzFromfcNEQ_SEB=0.0;
-
-
-
-   
-
-   a0 = (-kxxMyyFromfcNEQ_NEB - kxxMyyFromfcNEQ_NET + kxxMyyFromfcNEQ_NWB + kxxMyyFromfcNEQ_NWT -
-      kxxMyyFromfcNEQ_SEB - kxxMyyFromfcNEQ_SET + kxxMyyFromfcNEQ_SWB + kxxMyyFromfcNEQ_SWT -
-      kxxMzzFromfcNEQ_NEB - kxxMzzFromfcNEQ_NET + kxxMzzFromfcNEQ_NWB + kxxMzzFromfcNEQ_NWT -
-      kxxMzzFromfcNEQ_SEB - kxxMzzFromfcNEQ_SET + kxxMzzFromfcNEQ_SWB + kxxMzzFromfcNEQ_SWT -
-      c2o1*kxyFromfcNEQ_NEB - c2o1*kxyFromfcNEQ_NET - c2o1*kxyFromfcNEQ_NWB - c2o1*kxyFromfcNEQ_NWT +
-      c2o1*kxyFromfcNEQ_SEB + c2o1*kxyFromfcNEQ_SET + c2o1*kxyFromfcNEQ_SWB + c2o1*kxyFromfcNEQ_SWT +
-      c2o1*kxzFromfcNEQ_NEB - c2o1*kxzFromfcNEQ_NET + c2o1*kxzFromfcNEQ_NWB - c2o1*kxzFromfcNEQ_NWT +
-      c2o1*kxzFromfcNEQ_SEB - c2o1*kxzFromfcNEQ_SET + c2o1*kxzFromfcNEQ_SWB - c2o1*kxzFromfcNEQ_SWT +
-      c8o1*vx1_NEB + c8o1*vx1_NET + c8o1*vx1_NWB + c8o1*vx1_NWT + c8o1*vx1_SEB +
-      c8o1*vx1_SET + c8o1*vx1_SWB + c8o1*vx1_SWT + c2o1*vx2_NEB + c2o1*vx2_NET -
-      c2o1*vx2_NWB - c2o1*vx2_NWT - c2o1*vx2_SEB - c2o1*vx2_SET + c2o1*vx2_SWB +
-      c2o1*vx2_SWT - c2o1*vx3_NEB + c2o1*vx3_NET + c2o1*vx3_NWB - c2o1*vx3_NWT -
-      c2o1*vx3_SEB + c2o1*vx3_SET + c2o1*vx3_SWB - c2o1*vx3_SWT)/c64o1;
-   b0 = (c2o1*kxxMyyFromfcNEQ_NEB + c2o1*kxxMyyFromfcNEQ_NET + c2o1*kxxMyyFromfcNEQ_NWB + c2o1*kxxMyyFromfcNEQ_NWT -
-       c2o1*kxxMyyFromfcNEQ_SEB - c2o1*kxxMyyFromfcNEQ_SET - c2o1*kxxMyyFromfcNEQ_SWB - c2o1*kxxMyyFromfcNEQ_SWT -
-      kxxMzzFromfcNEQ_NEB - kxxMzzFromfcNEQ_NET - kxxMzzFromfcNEQ_NWB - kxxMzzFromfcNEQ_NWT +
-      kxxMzzFromfcNEQ_SEB + kxxMzzFromfcNEQ_SET + kxxMzzFromfcNEQ_SWB + kxxMzzFromfcNEQ_SWT -
-      c2o1*kxyFromfcNEQ_NEB - c2o1*kxyFromfcNEQ_NET + c2o1*kxyFromfcNEQ_NWB + c2o1*kxyFromfcNEQ_NWT -
-      c2o1*kxyFromfcNEQ_SEB - c2o1*kxyFromfcNEQ_SET + c2o1*kxyFromfcNEQ_SWB + c2o1*kxyFromfcNEQ_SWT +
-      c2o1*kyzFromfcNEQ_NEB - c2o1*kyzFromfcNEQ_NET + c2o1*kyzFromfcNEQ_NWB - c2o1*kyzFromfcNEQ_NWT +
-      c2o1*kyzFromfcNEQ_SEB - c2o1*kyzFromfcNEQ_SET + c2o1*kyzFromfcNEQ_SWB - c2o1*kyzFromfcNEQ_SWT +
-      c2o1*vx1_NEB + c2o1*vx1_NET - c2o1*vx1_NWB - c2o1*vx1_NWT -
-      c2o1*vx1_SEB - c2o1*vx1_SET + c2o1*vx1_SWB + c2o1*vx1_SWT +
-      c8o1*vx2_NEB + c8o1*vx2_NET + c8o1*vx2_NWB + c8o1*vx2_NWT +
-      c8o1*vx2_SEB + c8o1*vx2_SET + c8o1*vx2_SWB + c8o1*vx2_SWT -
-      c2o1*vx3_NEB + c2o1*vx3_NET - c2o1*vx3_NWB + c2o1*vx3_NWT +
-      c2o1*vx3_SEB - c2o1*vx3_SET + c2o1*vx3_SWB - c2o1*vx3_SWT)/c64o1;
-   c0 = (kxxMyyFromfcNEQ_NEB - kxxMyyFromfcNEQ_NET + kxxMyyFromfcNEQ_NWB - kxxMyyFromfcNEQ_NWT +
-      kxxMyyFromfcNEQ_SEB - kxxMyyFromfcNEQ_SET + kxxMyyFromfcNEQ_SWB - kxxMyyFromfcNEQ_SWT -
-      c2o1*kxxMzzFromfcNEQ_NEB + c2o1*kxxMzzFromfcNEQ_NET - c2o1*kxxMzzFromfcNEQ_NWB + c2o1*kxxMzzFromfcNEQ_NWT -
-      c2o1*kxxMzzFromfcNEQ_SEB + c2o1*kxxMzzFromfcNEQ_SET - c2o1*kxxMzzFromfcNEQ_SWB + c2o1*kxxMzzFromfcNEQ_SWT -
-      c2o1*kxzFromfcNEQ_NEB - c2o1*kxzFromfcNEQ_NET + c2o1*kxzFromfcNEQ_NWB + c2o1*kxzFromfcNEQ_NWT -
-      c2o1*kxzFromfcNEQ_SEB - c2o1*kxzFromfcNEQ_SET + c2o1*kxzFromfcNEQ_SWB + c2o1*kxzFromfcNEQ_SWT -
-      c2o1*kyzFromfcNEQ_NEB - c2o1*kyzFromfcNEQ_NET - c2o1*kyzFromfcNEQ_NWB - c2o1*kyzFromfcNEQ_NWT +
-      c2o1*kyzFromfcNEQ_SEB + c2o1*kyzFromfcNEQ_SET + c2o1*kyzFromfcNEQ_SWB + c2o1*kyzFromfcNEQ_SWT -
-      c2o1*vx1_NEB + c2o1*vx1_NET + c2o1*vx1_NWB - c2o1*vx1_NWT -
-      c2o1*vx1_SEB + c2o1*vx1_SET + c2o1*vx1_SWB - c2o1*vx1_SWT -
-      c2o1*vx2_NEB + c2o1*vx2_NET - c2o1*vx2_NWB + c2o1*vx2_NWT +
-      c2o1*vx2_SEB - c2o1*vx2_SET + c2o1*vx2_SWB - c2o1*vx2_SWT +
-      c8o1*vx3_NEB + c8o1*vx3_NET + c8o1*vx3_NWB + c8o1*vx3_NWT +
-      c8o1*vx3_SEB + c8o1*vx3_SET + c8o1*vx3_SWB + c8o1*vx3_SWT)/c64o1;
-   ax = (vx1_NEB + vx1_NET - vx1_NWB - vx1_NWT + vx1_SEB + vx1_SET - vx1_SWB - vx1_SWT)/c4o1;
-   bx = (vx2_NEB + vx2_NET - vx2_NWB - vx2_NWT + vx2_SEB + vx2_SET - vx2_SWB - vx2_SWT)/c4o1;
-   cx = (vx3_NEB + vx3_NET - vx3_NWB - vx3_NWT + vx3_SEB + vx3_SET - vx3_SWB - vx3_SWT)/c4o1;
-   axx= (kxxMyyFromfcNEQ_NEB + kxxMyyFromfcNEQ_NET - kxxMyyFromfcNEQ_NWB - kxxMyyFromfcNEQ_NWT +
-      kxxMyyFromfcNEQ_SEB + kxxMyyFromfcNEQ_SET - kxxMyyFromfcNEQ_SWB - kxxMyyFromfcNEQ_SWT +
-      kxxMzzFromfcNEQ_NEB + kxxMzzFromfcNEQ_NET - kxxMzzFromfcNEQ_NWB - kxxMzzFromfcNEQ_NWT +
-      kxxMzzFromfcNEQ_SEB + kxxMzzFromfcNEQ_SET - kxxMzzFromfcNEQ_SWB - kxxMzzFromfcNEQ_SWT +
-      c2o1*vx2_NEB + c2o1*vx2_NET - c2o1*vx2_NWB - c2o1*vx2_NWT -
-      c2o1*vx2_SEB - c2o1*vx2_SET + c2o1*vx2_SWB + c2o1*vx2_SWT -
-      c2o1*vx3_NEB + c2o1*vx3_NET + c2o1*vx3_NWB - c2o1*vx3_NWT -
-      c2o1*vx3_SEB + c2o1*vx3_SET + c2o1*vx3_SWB - c2o1*vx3_SWT)/c16o1;
-   bxx= (kxyFromfcNEQ_NEB + kxyFromfcNEQ_NET - kxyFromfcNEQ_NWB - kxyFromfcNEQ_NWT +
-      kxyFromfcNEQ_SEB + kxyFromfcNEQ_SET - kxyFromfcNEQ_SWB - kxyFromfcNEQ_SWT -
-      c2o1*vx1_NEB - c2o1*vx1_NET + c2o1*vx1_NWB + c2o1*vx1_NWT +
-      c2o1*vx1_SEB + c2o1*vx1_SET - c2o1*vx1_SWB - c2o1*vx1_SWT)/c8o1;
-   cxx= (kxzFromfcNEQ_NEB + kxzFromfcNEQ_NET - kxzFromfcNEQ_NWB - kxzFromfcNEQ_NWT +
-      kxzFromfcNEQ_SEB + kxzFromfcNEQ_SET - kxzFromfcNEQ_SWB - kxzFromfcNEQ_SWT +
-      c2o1*vx1_NEB - c2o1*vx1_NET - c2o1*vx1_NWB + c2o1*vx1_NWT +
-      c2o1*vx1_SEB - c2o1*vx1_SET - c2o1*vx1_SWB + c2o1*vx1_SWT)/c8o1;
-   ay = (vx1_NEB + vx1_NET + vx1_NWB + vx1_NWT - vx1_SEB - vx1_SET - vx1_SWB - vx1_SWT)/c4o1;
-   by = (vx2_NEB + vx2_NET + vx2_NWB + vx2_NWT - vx2_SEB - vx2_SET - vx2_SWB - vx2_SWT)/c4o1;
-   cy = (vx3_NEB + vx3_NET + vx3_NWB + vx3_NWT - vx3_SEB - vx3_SET - vx3_SWB - vx3_SWT)/c4o1;
-   ayy= (kxyFromfcNEQ_NEB + kxyFromfcNEQ_NET + kxyFromfcNEQ_NWB + kxyFromfcNEQ_NWT -
-      kxyFromfcNEQ_SEB - kxyFromfcNEQ_SET - kxyFromfcNEQ_SWB - kxyFromfcNEQ_SWT -
-      c2o1*vx2_NEB - c2o1*vx2_NET + c2o1*vx2_NWB + c2o1*vx2_NWT +
-      c2o1*vx2_SEB + c2o1*vx2_SET - c2o1*vx2_SWB - c2o1*vx2_SWT)/c8o1;
-   byy= (-c2o1*kxxMyyFromfcNEQ_NEB - c2o1*kxxMyyFromfcNEQ_NET - c2o1*kxxMyyFromfcNEQ_NWB - c2o1*kxxMyyFromfcNEQ_NWT +
-      c2o1*kxxMyyFromfcNEQ_SEB + c2o1*kxxMyyFromfcNEQ_SET + c2o1*kxxMyyFromfcNEQ_SWB + c2o1*kxxMyyFromfcNEQ_SWT +
-      kxxMzzFromfcNEQ_NEB + kxxMzzFromfcNEQ_NET + kxxMzzFromfcNEQ_NWB + kxxMzzFromfcNEQ_NWT -
-      kxxMzzFromfcNEQ_SEB - kxxMzzFromfcNEQ_SET - kxxMzzFromfcNEQ_SWB - kxxMzzFromfcNEQ_SWT +
-      c2o1*vx1_NEB + c2o1*vx1_NET - c2o1*vx1_NWB - c2o1*vx1_NWT -
-      c2o1*vx1_SEB - c2o1*vx1_SET + c2o1*vx1_SWB + c2o1*vx1_SWT -
-      c2o1*vx3_NEB + c2o1*vx3_NET - c2o1*vx3_NWB + c2o1*vx3_NWT +
-      c2o1*vx3_SEB - c2o1*vx3_SET + c2o1*vx3_SWB - c2o1*vx3_SWT)/c16o1;
-   cyy= (kyzFromfcNEQ_NEB + kyzFromfcNEQ_NET + kyzFromfcNEQ_NWB + kyzFromfcNEQ_NWT -
-      kyzFromfcNEQ_SEB - kyzFromfcNEQ_SET - kyzFromfcNEQ_SWB - kyzFromfcNEQ_SWT +
-      c2o1*vx2_NEB - c2o1*vx2_NET + c2o1*vx2_NWB - c2o1*vx2_NWT -
-      c2o1*vx2_SEB + c2o1*vx2_SET - c2o1*vx2_SWB + c2o1*vx2_SWT)/c8o1;
-   az = (-vx1_NEB + vx1_NET - vx1_NWB + vx1_NWT - vx1_SEB + vx1_SET - vx1_SWB + vx1_SWT)/c4o1;
-   bz = (-vx2_NEB + vx2_NET - vx2_NWB + vx2_NWT - vx2_SEB + vx2_SET - vx2_SWB + vx2_SWT)/c4o1;
-   cz = (-vx3_NEB + vx3_NET - vx3_NWB + vx3_NWT - vx3_SEB + vx3_SET - vx3_SWB + vx3_SWT)/c4o1;
-   azz= (-kxzFromfcNEQ_NEB + kxzFromfcNEQ_NET - kxzFromfcNEQ_NWB + kxzFromfcNEQ_NWT -
-      kxzFromfcNEQ_SEB + kxzFromfcNEQ_SET - kxzFromfcNEQ_SWB + kxzFromfcNEQ_SWT +
-      c2o1*vx3_NEB - c2o1*vx3_NET - c2o1*vx3_NWB + c2o1*vx3_NWT +
-      c2o1*vx3_SEB - c2o1*vx3_SET - c2o1*vx3_SWB + c2o1*vx3_SWT)/c8o1;
-   bzz= (-kyzFromfcNEQ_NEB + kyzFromfcNEQ_NET - kyzFromfcNEQ_NWB + kyzFromfcNEQ_NWT -
-      kyzFromfcNEQ_SEB + kyzFromfcNEQ_SET - kyzFromfcNEQ_SWB + kyzFromfcNEQ_SWT +
-      c2o1*vx3_NEB - c2o1*vx3_NET + c2o1*vx3_NWB - c2o1*vx3_NWT -
-      c2o1*vx3_SEB + c2o1*vx3_SET - c2o1*vx3_SWB + c2o1*vx3_SWT)/c8o1;
-   czz= (-kxxMyyFromfcNEQ_NEB + kxxMyyFromfcNEQ_NET - kxxMyyFromfcNEQ_NWB + kxxMyyFromfcNEQ_NWT -
-      kxxMyyFromfcNEQ_SEB + kxxMyyFromfcNEQ_SET - kxxMyyFromfcNEQ_SWB + kxxMyyFromfcNEQ_SWT +
-      c2o1*kxxMzzFromfcNEQ_NEB - c2o1*kxxMzzFromfcNEQ_NET + c2o1*kxxMzzFromfcNEQ_NWB - c2o1*kxxMzzFromfcNEQ_NWT +
-      c2o1*kxxMzzFromfcNEQ_SEB - c2o1*kxxMzzFromfcNEQ_SET + c2o1*kxxMzzFromfcNEQ_SWB - c2o1*kxxMzzFromfcNEQ_SWT -
-      c2o1*vx1_NEB + c2o1*vx1_NET + c2o1*vx1_NWB - c2o1*vx1_NWT -
-      c2o1*vx1_SEB + c2o1*vx1_SET + c2o1*vx1_SWB - c2o1*vx1_SWT -
-      c2o1*vx2_NEB + c2o1*vx2_NET - c2o1*vx2_NWB + c2o1*vx2_NWT +
-      c2o1*vx2_SEB - c2o1*vx2_SET + c2o1*vx2_SWB - c2o1*vx2_SWT)/c16o1;
-   axy= (vx1_NEB + vx1_NET - vx1_NWB - vx1_NWT - vx1_SEB - vx1_SET + vx1_SWB + vx1_SWT)/c2o1;
-   bxy= (vx2_NEB + vx2_NET - vx2_NWB - vx2_NWT - vx2_SEB - vx2_SET + vx2_SWB + vx2_SWT)/c2o1;
-   cxy= (vx3_NEB + vx3_NET - vx3_NWB - vx3_NWT - vx3_SEB - vx3_SET + vx3_SWB + vx3_SWT)/c2o1;
-   axz= (-vx1_NEB + vx1_NET + vx1_NWB - vx1_NWT - vx1_SEB + vx1_SET + vx1_SWB - vx1_SWT)/c2o1;
-   bxz= (-vx2_NEB + vx2_NET + vx2_NWB - vx2_NWT - vx2_SEB + vx2_SET + vx2_SWB - vx2_SWT)/c2o1;
-   cxz= (-vx3_NEB + vx3_NET + vx3_NWB - vx3_NWT - vx3_SEB + vx3_SET + vx3_SWB - vx3_SWT)/c2o1;
-   ayz= (-vx1_NEB + vx1_NET - vx1_NWB + vx1_NWT + vx1_SEB - vx1_SET + vx1_SWB - vx1_SWT)/c2o1;
-   byz= (-vx2_NEB + vx2_NET - vx2_NWB + vx2_NWT + vx2_SEB - vx2_SET + vx2_SWB - vx2_SWT)/c2o1;
-   cyz= (-vx3_NEB + vx3_NET - vx3_NWB + vx3_NWT + vx3_SEB - vx3_SET + vx3_SWB - vx3_SWT)/c2o1;
-   axyz=-vx1_NEB + vx1_NET + vx1_NWB - vx1_NWT + vx1_SEB - vx1_SET - vx1_SWB + vx1_SWT;
-   bxyz=-vx2_NEB + vx2_NET + vx2_NWB - vx2_NWT + vx2_SEB - vx2_SET - vx2_SWB + vx2_SWT;
-   cxyz=-vx3_NEB + vx3_NET + vx3_NWB - vx3_NWT + vx3_SEB - vx3_SET - vx3_SWB + vx3_SWT;
-
-
-   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   kxyAverage       = c0o1;//(kxyFromfcNEQ_SWB+
-                       //kxyFromfcNEQ_SWT+
-                       //kxyFromfcNEQ_SET+
-                       //kxyFromfcNEQ_SEB+
-                       //kxyFromfcNEQ_NWB+
-                       //kxyFromfcNEQ_NWT+
-                       //kxyFromfcNEQ_NET+
-                       //kxyFromfcNEQ_NEB)*c1o8-(ay+bx);
-   kyzAverage       = c0o1;//(kyzFromfcNEQ_SWB+
-                       //kyzFromfcNEQ_SWT+
-                       //kyzFromfcNEQ_SET+
-                       //kyzFromfcNEQ_SEB+
-                       //kyzFromfcNEQ_NWB+
-                       //kyzFromfcNEQ_NWT+
-                       //kyzFromfcNEQ_NET+
-                       //kyzFromfcNEQ_NEB)*c1o8-(bz+cy);
-   kxzAverage       = c0o1;//(kxzFromfcNEQ_SWB+
-                       //kxzFromfcNEQ_SWT+
-                       //kxzFromfcNEQ_SET+
-                       //kxzFromfcNEQ_SEB+
-                       //kxzFromfcNEQ_NWB+
-                       //kxzFromfcNEQ_NWT+
-                       //kxzFromfcNEQ_NET+
-                       //kxzFromfcNEQ_NEB)*c1o8-(az+cx);
-   kxxMyyAverage    = c0o1;//(kxxMyyFromfcNEQ_SWB+
-                       //kxxMyyFromfcNEQ_SWT+
-                       //kxxMyyFromfcNEQ_SET+
-                       //kxxMyyFromfcNEQ_SEB+
-                       //kxxMyyFromfcNEQ_NWB+
-                       //kxxMyyFromfcNEQ_NWT+
-                       //kxxMyyFromfcNEQ_NET+
-                       //kxxMyyFromfcNEQ_NEB)*c1o8-(ax-by);
-   kxxMzzAverage    = c0o1;//(kxxMzzFromfcNEQ_SWB+
-                       //kxxMzzFromfcNEQ_SWT+
-                       //kxxMzzFromfcNEQ_SET+
-                       //kxxMzzFromfcNEQ_SEB+
-                       //kxxMzzFromfcNEQ_NWB+
-                       //kxxMzzFromfcNEQ_NWT+
-                       //kxxMzzFromfcNEQ_NET+
-                       //kxxMzzFromfcNEQ_NEB)*c1o8-(ax-cz);
-   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //
-   // Bernd das Brot
-   //
-   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   a0 = a0 + xoff * ax + yoff * ay + zoff * az + xoff_sq * axx + yoff_sq * ayy + zoff_sq * azz + xoff*yoff*axy + xoff*zoff*axz + yoff*zoff*ayz + xoff*yoff*zoff*axyz ;
-   ax = ax + c2o1 * xoff * axx + yoff * axy + zoff * axz + yoff*zoff*axyz;
-   ay = ay + c2o1 * yoff * ayy + xoff * axy + zoff * ayz + xoff*zoff*axyz;
-   az = az + c2o1 * zoff * azz + xoff * axz + yoff * ayz + xoff*yoff*axyz;
-   b0 = b0 + xoff * bx + yoff * by + zoff * bz + xoff_sq * bxx + yoff_sq * byy + zoff_sq * bzz + xoff*yoff*bxy + xoff*zoff*bxz + yoff*zoff*byz + xoff*yoff*zoff*bxyz;
-   bx = bx + c2o1 * xoff * bxx + yoff * bxy + zoff * bxz + yoff*zoff*bxyz;
-   by = by + c2o1 * yoff * byy + xoff * bxy + zoff * byz + xoff*zoff*bxyz;
-   bz = bz + c2o1 * zoff * bzz + xoff * bxz + yoff * byz + xoff*yoff*bxyz;
-   c0 = c0 + xoff * cx + yoff * cy + zoff * cz + xoff_sq * cxx + yoff_sq * cyy + zoff_sq * czz + xoff*yoff*cxy + xoff*zoff*cxz + yoff*zoff*cyz + xoff*yoff*zoff*cxyz;
-   cx = cx + c2o1 * xoff * cxx + yoff * cxy + zoff * cxz + yoff*zoff*cxyz;
-   cy = cy + c2o1 * yoff * cyy + xoff * cxy + zoff * cyz + xoff*zoff*cxyz;
-   cz = cz + c2o1 * zoff * czz + xoff * cxz + yoff * cyz + xoff*yoff*cxyz;
-   axy= axy + zoff*axyz;
-   axz= axz + yoff*axyz;
-   ayz= ayz + xoff*axyz;
-   bxy= bxy + zoff*bxyz;
-   bxz= bxz + yoff*bxyz;
-   byz= byz + xoff*bxyz;
-   cxy= cxy + zoff*cxyz;
-   cxz= cxz + yoff*cxyz;
-   cyz= cyz + xoff*cxyz;
-   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-   const real o = omega;
-
-   f_E = eps_new*((c2o1*(-c2o1*ax + by + cz-kxxMzzAverage-kxxMyyAverage))/(c27o1*o));
-   f_N = eps_new*((c2o1*(ax - c2o1*by + cz+c2o1*kxxMyyAverage-kxxMzzAverage))/(c27o1*o));
-   f_T = eps_new*((c2o1*(ax + by - c2o1*cz-kxxMyyAverage+c2o1*kxxMzzAverage))/(c27o1*o));
-   f_NE = eps_new*(-(ax + c3o1*ay + c3o1*bx + by - c2o1*cz+c2o1*kxxMyyAverage-kxxMyyAverage+c3o1*kxyAverage)/(c54o1*o));
-   f_SE = eps_new*(-(ax - c3o1*ay - c3o1*bx + by - c2o1*cz+c2o1*kxxMyyAverage-kxxMyyAverage-c3o1*kxyAverage)/(c54o1*o));
-   f_TE = eps_new*(-(ax + c3o1*az - c2o1*by + c3o1*cx + cz+c2o1*kxxMyyAverage-kxxMzzAverage+c3o1*kxzAverage)/(c54o1*o));
-   f_BE = eps_new*(-(ax - c3o1*az - c2o1*by - c3o1*cx + cz+c2o1*kxxMyyAverage-kxxMzzAverage-c3o1*kxzAverage)/(c54o1*o));
-   f_TN = eps_new*(-(-c2o1*ax + by + c3o1*bz + c3o1*cy + cz-kxxMyyAverage-kxxMzzAverage+c3o1*kyzAverage)/(c54o1*o));
-   f_BN = eps_new*(-(-c2o1*ax + by - c3o1*bz - c3o1*cy + cz-kxxMyyAverage-kxxMzzAverage-c3o1*kyzAverage)/(c54o1*o));
-   f_ZERO = c0o1;
-   f_TNE = eps_new*(-(ay + az + bx + bz + cx + cy+kxyAverage+kxzAverage+kyzAverage)/(c72o1*o));
-   f_TSW = eps_new*((-ay + az - bx + bz + cx + cy-kxyAverage+kxzAverage+kyzAverage)/(c72o1*o));
-   f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(c72o1*o));
-   f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(c72o1*o));
-
-   x_E = c1o4*eps_new*((c2o1*(-c4o1*axx + bxy + cxz))/(c27o1*o));
-   x_N = c1o4*eps_new*((c2o1*(c2o1*axx - c2o1*bxy + cxz))/(c27o1*o));
-   x_T = c1o4*eps_new*((c2o1*(c2o1*axx + bxy - c2o1*cxz))/(c27o1*o));
-   x_NE = c1o4*eps_new*(-((c2o1*axx + c3o1*axy + c6o1*bxx + bxy - c2o1*cxz))/(c54o1*o));
-   x_SE = c1o4*eps_new*(-((c2o1*axx - c3o1*axy - c6o1*bxx + bxy - c2o1*cxz))/(c54o1*o));
-   x_TE = c1o4*eps_new*(-((c2o1*axx + c3o1*axz - c2o1*bxy + c6o1*cxx + cxz))/(c54o1*o));
-   x_BE = c1o4*eps_new*(-((c2o1*axx - c3o1*axz - c2o1*bxy - c6o1*cxx + cxz))/(c54o1*o));
-   x_TN = c1o4*eps_new*(-((-c4o1*axx + bxy + c3o1*bxz + c3o1*cxy + cxz))/(c54o1*o));
-   x_BN = c1o4*eps_new*(-((-c4o1*axx + bxy - c3o1*bxz - c3o1*cxy + cxz))/(c54o1*o));
-   x_ZERO = c0o1;
-   x_TNE = c1o4*eps_new*(-((axy + axz + c2o1*bxx + bxz + c2o1*cxx + cxy))/(c72o1*o));
-   x_TSW = c1o4*eps_new*(((-axy + axz - c2o1*bxx + bxz + c2o1*cxx + cxy))/(c72o1*o));
-   x_TSE = c1o4*eps_new*(((axy - axz + c2o1*bxx + bxz - c2o1*cxx + cxy))/(c72o1*o));
-   x_TNW = c1o4*eps_new*(((axy + axz + c2o1*bxx - bxz + c2o1*cxx - cxy))/(c72o1*o));
-
-   y_E = c1o4*eps_new*(c2o1*(-c2o1*axy + c2o1*byy + cyz))/(c27o1*o);
-   y_N = c1o4*eps_new*(c2o1*(axy - c4o1*byy + cyz))/(c27o1*o);
-   y_T = c1o4*eps_new*(c2o1*(axy + c2o1*byy - c2o1*cyz))/(c27o1*o);
-   y_NE = c1o4*eps_new*(-((axy + c6o1*ayy + c3o1*bxy + c2o1*byy - c2o1*cyz))/(c54o1*o));
-   y_SE = c1o4*eps_new*(-((axy - c6o1*ayy - c3o1*bxy + c2o1*byy - c2o1*cyz))/(c54o1*o));
-   y_TE = c1o4*eps_new*(-((axy + c3o1*ayz - c4o1*byy + c3o1*cxy + cyz))/(c54o1*o));
-   y_BE = c1o4*eps_new*(-((axy - c3o1*ayz - c4o1*byy - c3o1*cxy + cyz))/(c54o1*o));
-   y_TN = c1o4*eps_new*(-((-c2o1*axy + c2o1*byy + c3o1*byz + c6o1*cyy + cyz))/(c54o1*o));
-   y_BN = c1o4*eps_new*(-((-c2o1*axy + c2o1*byy - c3o1*byz - c6o1*cyy + cyz))/(c54o1*o));
-   y_ZERO = c0o1;
-   y_TNE = c1o4*eps_new*(-((c2o1*ayy + ayz + bxy + byz + cxy + c2o1*cyy))/(c72o1*o));
-   y_TSW = c1o4*eps_new*(((-c2o1*ayy + ayz - bxy + byz + cxy + c2o1*cyy))/(c72o1*o));
-   y_TSE = c1o4*eps_new*(((c2o1*ayy - ayz + bxy + byz - cxy + c2o1*cyy))/(c72o1*o));
-   y_TNW = c1o4*eps_new*(((c2o1*ayy + ayz + bxy - byz + cxy - c2o1*cyy))/(c72o1*o));
-
-   z_E = c1o4*eps_new*((c2o1*(-c2o1*axz + byz + c2o1*czz))/(c27o1*o));
-   z_N = c1o4*eps_new*((c2o1*(axz - c2o1*byz + c2o1*czz))/(c27o1*o));
-   z_T = c1o4*eps_new*((c2o1*(axz + byz - c4o1*czz))/(c27o1*o));
-   z_NE = c1o4*eps_new*(-((axz + c3o1*ayz + c3o1*bxz + byz - c4o1*czz))/(c54o1*o));
-   z_SE = c1o4*eps_new*(-((axz - c3o1*ayz - c3o1*bxz + byz - c4o1*czz))/(c54o1*o));
-   z_TE = c1o4*eps_new*(-((axz + c6o1*azz - c2o1*byz + c3o1*cxz + c2o1*czz))/(c54o1*o));
-   z_BE = c1o4*eps_new*(-((axz - c6o1*azz - c2o1*byz - c3o1*cxz + c2o1*czz))/(c54o1*o));
-   z_TN = c1o4*eps_new*(-((-c2o1*axz + byz + c6o1*bzz + c3o1*cyz + c2o1*czz))/(c54o1*o));
-   z_BN = c1o4*eps_new*(-((-c2o1*axz + byz - c6o1*bzz - c3o1*cyz + c2o1*czz))/(c54o1*o));
-   z_ZERO = c0o1;
-   z_TNE = c1o4*eps_new*(-((ayz + c2o1*azz + bxz + c2o1*bzz + cxz + cyz))/(c72o1*o));
-   z_TSW = c1o4*eps_new*(((-ayz + c2o1*azz - bxz + c2o1*bzz + cxz + cyz))/(c72o1*o));
-   z_TSE = c1o4*eps_new*(((ayz - c2o1*azz + bxz + c2o1*bzz - cxz + cyz))/(c72o1*o));
-   z_TNW = c1o4*eps_new*(((ayz + c2o1*azz + bxz - c2o1*bzz + cxz - cyz))/(c72o1*o));
-
-   xy_E   =   c1o16*eps_new *((                       c2o1*cxyz)/(c27o1*o));
-   xy_N   =   c1o16*eps_new *((                       c2o1*cxyz)/(c27o1*o));
-   xy_T   = -(c1o16*eps_new *((                       c4o1*cxyz)/(c27o1*o)));
-   xy_NE  =   c1o16*eps_new *(                            cxyz /(c27o1*o));
-   xy_SE  =   c1o16*eps_new *(                            cxyz /(c27o1*o));
-   xy_TE  = -(c1o16*eps_new *(( c3o1*axyz            +     cxyz)/(c54o1*o)));
-   xy_BE  = -(c1o16*eps_new *((-c3o1*axyz            +     cxyz)/(c54o1*o)));
-   xy_TN  = -(c1o16*eps_new *((            c3o1*bxyz +     cxyz)/(c54o1*o)));
-   xy_BN  = -(c1o16*eps_new *((          - c3o1*bxyz +     cxyz)/(c54o1*o)));
-   //xy_ZERO=   c1o16*eps_new;
-   xy_TNE = -(c1o16*eps_new *((     axyz +     bxyz           )/(c72o1*o)));
-   xy_TSW =   c1o16*eps_new *((     axyz +     bxyz           )/(c72o1*o));
-   xy_TSE =   c1o16*eps_new *((-    axyz +     bxyz           )/(c72o1*o));
-   xy_TNW =   c1o16*eps_new *((     axyz -     bxyz           )/(c72o1*o));
-
-   xz_E   =   c1o16*eps_new *((            c2o1*bxyz           )/(c27o1*o));
-   xz_N   = -(c1o16*eps_new *((            c4o1*bxyz           )/(c27o1*o)));
-   xz_T   =   c1o16*eps_new *((            c2o1*bxyz           )/(c27o1*o));
-   xz_NE  = -(c1o16*eps_new *(( c3o1*axyz +     bxyz           )/(c54o1*o)));
-   xz_SE  = -(c1o16*eps_new *((-c3o1*axyz +     bxyz           )/(c54o1*o)));
-   xz_TE  =   c1o16*eps_new *((                bxyz           )/(c27o1*o));
-   xz_BE  =   c1o16*eps_new *((                bxyz           )/(c27o1*o));
-   xz_TN  = -(c1o16*eps_new *((                bxyz + c3o1*cxyz)/(c54o1*o)));
-   xz_BN  = -(c1o16*eps_new *((                bxyz - c3o1*cxyz)/(c54o1*o)));
-   //xz_ZERO=   c1o16*eps_new;
-   xz_TNE = -(c1o16*eps_new *((     axyz            +     cxyz)/(c72o1*o)));
-   xz_TSW =   c1o16*eps_new *((-    axyz            +     cxyz)/(c72o1*o));
-   xz_TSE =   c1o16*eps_new *((     axyz            +     cxyz)/(c72o1*o));
-   xz_TNW =   c1o16*eps_new *((     axyz            -     cxyz)/(c72o1*o));
-
-   yz_E   = -(c1o16*eps_new *(( c4o1*axyz                      )/(c27o1*o)));
-   yz_N   =   c1o16*eps_new *(( c2o1*axyz                      )/(c27o1*o));
-   yz_T   =   c1o16*eps_new *(( c2o1*axyz                      )/(c27o1*o));
-   yz_NE  = -(c1o16*eps_new *((     axyz + c3o1*bxyz           )/(c54o1*o)));
-   yz_SE  = -(c1o16*eps_new *((     axyz - c3o1*bxyz           )/(c54o1*o)));
-   yz_TE  = -(c1o16*eps_new *((     axyz            + c3o1*cxyz)/(c54o1*o)));
-   yz_BE  = -(c1o16*eps_new *((     axyz            - c3o1*cxyz)/(c54o1*o)));
-   yz_TN  =   c1o16*eps_new *((     axyz                      )/(c27o1*o));
-   yz_BN  =   c1o16*eps_new *((     axyz                      )/(c27o1*o));
-   //yz_ZERO=   c1o16*eps_new;
-   yz_TNE = -(c1o16*eps_new *((                bxyz +     cxyz)/(c72o1*o)));
-   yz_TSW =   c1o16*eps_new *((          -     bxyz +     cxyz)/(c72o1*o));
-   yz_TSE =   c1o16*eps_new *((                bxyz -     cxyz)/(c72o1*o));
-   yz_TNW =   c1o16*eps_new *((                bxyz +     cxyz)/(c72o1*o));
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetInterpolator::calcInterpolatedNodeCF(real* f, real  /*omega*/, real  /*x*/, real  /*y*/, real  /*z*/, real press, real xs, real ys, real zs)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   real rho  = press ;//+ (2.*axx*x+axy*y+axz*z+axyz*y*z+ax + 2.*byy*y+bxy*x+byz*z+bxyz*x*z+by + 2.*czz*z+cxz*x+cyz*y+cxyz*x*y+cz)/3.;
-   real vx1  = a0 + c1o4*( xs*ax + ys*ay + zs*az) + c1o16*(axx + xs*ys*axy + xs*zs*axz + ayy + ys*zs*ayz + azz) + c1o64*(xs*ys*zs*axyz);
-   real vx2  = b0 + c1o4*( xs*bx + ys*by + zs*bz) + c1o16*(bxx + xs*ys*bxy + xs*zs*bxz + byy + ys*zs*byz + bzz) + c1o64*(xs*ys*zs*bxyz);
-   real vx3  = c0 + c1o4*( xs*cx + ys*cy + zs*cz) + c1o16*(cxx + xs*ys*cxy + xs*zs*cxz + cyy + ys*zs*cyz + czz) + c1o64*(xs*ys*zs*cxyz);
-
-   //////////////////////////////////////////////////////////////////////////
-   //DRAFT
-   //vx1 -= forcingF*0.5;
-   //////////////////////////////////////////////////////////////////////////
-
-   real feq[ENDF+1];
-   D3Q27System::calcCompFeq(feq,rho,vx1,vx2,vx3);
-
-   f[dP00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[dP00];
-   f[dM00]    = f_E    + xs*x_E    + ys*y_E    + zs*z_E    + xs*ys*xy_E    + xs*zs*xz_E    + ys*zs*yz_E    + feq[dM00];
-   f[d0P0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[d0P0];
-   f[d0M0]    = f_N    + xs*x_N    + ys*y_N    + zs*z_N    + xs*ys*xy_N    + xs*zs*xz_N    + ys*zs*yz_N    + feq[d0M0];
-   f[d00P]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[d00P];
-   f[d00M]    = f_T    + xs*x_T    + ys*y_T    + zs*z_T    + xs*ys*xy_T    + xs*zs*xz_T    + ys*zs*yz_T    + feq[d00M];
-   f[dPP0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[dPP0];
-   f[dMM0]   = f_NE   + xs*x_NE   + ys*y_NE   + zs*z_NE   + xs*ys*xy_NE   + xs*zs*xz_NE   + ys*zs*yz_NE   + feq[dMM0];
-   f[dPM0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[dPM0];
-   f[dMP0]   = f_SE   + xs*x_SE   + ys*y_SE   + zs*z_SE   + xs*ys*xy_SE   + xs*zs*xz_SE   + ys*zs*yz_SE   + feq[dMP0];
-   f[dP0P]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[dP0P];
-   f[dM0M]   = f_TE   + xs*x_TE   + ys*y_TE   + zs*z_TE   + xs*ys*xy_TE   + xs*zs*xz_TE   + ys*zs*yz_TE   + feq[dM0M];
-   f[dP0M]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[dP0M];
-   f[dM0P]   = f_BE   + xs*x_BE   + ys*y_BE   + zs*z_BE   + xs*ys*xy_BE   + xs*zs*xz_BE   + ys*zs*yz_BE   + feq[dM0P];
-   f[d0PP]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[d0PP];
-   f[d0MM]   = f_TN   + xs*x_TN   + ys*y_TN   + zs*z_TN   + xs*ys*xy_TN   + xs*zs*xz_TN   + ys*zs*yz_TN   + feq[d0MM];
-   f[d0PM]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[d0PM];
-   f[d0MP]   = f_BN   + xs*x_BN   + ys*y_BN   + zs*z_BN   + xs*ys*xy_BN   + xs*zs*xz_BN   + ys*zs*yz_BN   + feq[d0MP];
-   f[dPPP]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[dPPP];
-   f[dMMP]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[dMMP];
-   f[dPMP]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[dPMP];
-   f[dMPP]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[dMPP];
-   f[dPPM]  = f_TSW  + xs*x_TSW  + ys*y_TSW  + zs*z_TSW  + xs*ys*xy_TSW  + xs*zs*xz_TSW  + ys*zs*yz_TSW  + feq[dPPM];
-   f[dMMM]  = f_TNE  + xs*x_TNE  + ys*y_TNE  + zs*z_TNE  + xs*ys*xy_TNE  + xs*zs*xz_TNE  + ys*zs*yz_TNE  + feq[dMMM];
-   f[dPMM]  = f_TNW  + xs*x_TNW  + ys*y_TNW  + zs*z_TNW  + xs*ys*xy_TNW  + xs*zs*xz_TNW  + ys*zs*yz_TNW  + feq[dPMM];
-   f[dMPM]  = f_TSE  + xs*x_TSE  + ys*y_TSE  + zs*z_TSE  + xs*ys*xy_TSE  + xs*zs*xz_TSE  + ys*zs*yz_TSE  + feq[dMPM];
-   f[d000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO                                                 + feq[d000];
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SWB -0.25, -0.25, -0.25
-real CompressibleOffsetInterpolator::calcPressBSW()
-{
-   return   press_SWT * (c9o64 + c3o16 * xoff + c3o16 * yoff - c9o16 * zoff) +
-      press_NWT * (c3o64 + c1o16 * xoff - c3o16 * yoff - c3o16 * zoff) +
-      press_SET * (c3o64 - c3o16 * xoff + c1o16 * yoff - c3o16 * zoff) +
-      press_NET * (c1o64 - c1o16 * xoff - c1o16 * yoff - c1o16 * zoff) +
-      press_NEB * (c3o64 - c3o16 * xoff - c3o16 * yoff + c1o16 * zoff) +
-      press_NWB * (c9o64 + c3o16 * xoff - c9o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c9o64 - c9o16 * xoff + c3o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c27o64 + c9o16 * xoff + c9o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SWT -0.25, -0.25, 0.25
-real CompressibleOffsetInterpolator::calcPressTSW()
-{
-   return   press_SWT * (c27o64 + c9o16 * xoff + c9o16 * yoff - c9o16 * zoff) +
-      press_NWT * (c9o64 + c3o16 * xoff - c9o16 * yoff - c3o16 * zoff) +
-      press_SET * (c9o64 - c9o16 * xoff + c3o16 * yoff - c3o16 * zoff) +
-      press_NET * (c3o64 - c3o16 * xoff - c3o16 * yoff - c1o16 * zoff) +
-      press_NEB * (c1o64 - c1o16 * xoff - c1o16 * yoff + c1o16 * zoff) +
-      press_NWB * (c3o64 + c1o16 * xoff - c3o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c3o64 - c3o16 * xoff + c1o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c9o64 + c3o16 * xoff + c3o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SET 0.25, -0.25, 0.25
-real CompressibleOffsetInterpolator::calcPressTSE()
-{
-   return   press_SET * (c27o64 - c9o16 * xoff + c9o16 * yoff - c9o16 * zoff) +
-      press_NET * (c9o64 - c3o16 * xoff - c9o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c9o64 + c9o16 * xoff + c3o16 * yoff - c3o16 * zoff) +
-      press_NWT * (c3o64 + c3o16 * xoff - c3o16 * yoff - c1o16 * zoff) +
-      press_NWB * (c1o64 + c1o16 * xoff - c1o16 * yoff + c1o16 * zoff) +
-      press_NEB * (c3o64 - c1o16 * xoff - c3o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c3o64 + c3o16 * xoff + c1o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c9o64 - c3o16 * xoff + c3o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SEB 0.25, -0.25, -0.25
-real CompressibleOffsetInterpolator::calcPressBSE()
-{
-   return   press_SET * (c9o64 - c3o16 * xoff + c3o16 * yoff - c9o16 * zoff) +
-      press_NET * (c3o64 - c1o16 * xoff - c3o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c3o64 + c3o16 * xoff + c1o16 * yoff - c3o16 * zoff) +
-      press_NWT * (c1o64 + c1o16 * xoff - c1o16 * yoff - c1o16 * zoff) +
-      press_NWB * (c3o64 + c3o16 * xoff - c3o16 * yoff + c1o16 * zoff) +
-      press_NEB * (c9o64 - c3o16 * xoff - c9o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c9o64 + c9o16 * xoff + c3o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c27o64 - c9o16 * xoff + c9o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NWB -0.25, 0.25, -0.25
-real CompressibleOffsetInterpolator::calcPressBNW()
-{
-   return   press_NWT * (c9o64 + c3o16 * xoff - c3o16 * yoff - c9o16 * zoff) +
-      press_NET * (c3o64 - c3o16 * xoff - c1o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c3o64 + c1o16 * xoff + c3o16 * yoff - c3o16 * zoff) +
-      press_SET * (c1o64 - c1o16 * xoff + c1o16 * yoff - c1o16 * zoff) +
-      press_SEB * (c3o64 - c3o16 * xoff + c3o16 * yoff + c1o16 * zoff) +
-      press_NEB * (c9o64 - c9o16 * xoff - c3o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c9o64 + c3o16 * xoff + c9o16 * yoff + c3o16 * zoff) +
-      press_NWB * (c27o64 + c9o16 * xoff - c9o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NWT -0.25, 0.25, 0.25
-real CompressibleOffsetInterpolator::calcPressTNW()
-{
-   return   press_NWT * (c27o64 + c9o16 * xoff - c9o16 * yoff - c9o16 * zoff) +
-      press_NET * (c9o64 - c9o16 * xoff - c3o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c9o64 + c3o16 * xoff + c9o16 * yoff - c3o16 * zoff) +
-      press_SET * (c3o64 - c3o16 * xoff + c3o16 * yoff - c1o16 * zoff) +
-      press_SEB * (c1o64 - c1o16 * xoff + c1o16 * yoff + c1o16 * zoff) +
-      press_NEB * (c3o64 - c3o16 * xoff - c1o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c3o64 + c1o16 * xoff + c3o16 * yoff + c3o16 * zoff) +
-      press_NWB * (c9o64 + c3o16 * xoff - c3o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NET 0.25, 0.25, 0.25
-real CompressibleOffsetInterpolator::calcPressTNE()
-{
-   return   press_NET * (c27o64 - c9o16 * xoff - c9o16 * yoff - c9o16 * zoff) +
-      press_NWT * (c9o64 + c9o16 * xoff - c3o16 * yoff - c3o16 * zoff) +
-      press_SET * (c9o64 - c3o16 * xoff + c9o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c3o64 + c3o16 * xoff + c3o16 * yoff - c1o16 * zoff) +
-      press_SWB * (c1o64 + c1o16 * xoff + c1o16 * yoff + c1o16 * zoff) +
-      press_NWB * (c3o64 + c3o16 * xoff - c1o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c3o64 - c1o16 * xoff + c3o16 * yoff + c3o16 * zoff) +
-      press_NEB * (c9o64 - c3o16 * xoff - c3o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NEB 0.25, 0.25, -0.25
-real CompressibleOffsetInterpolator::calcPressBNE()
-{
-   return   press_NET * (c9o64 - c3o16 * xoff - c3o16 * yoff - c9o16 * zoff) +
-      press_NWT * (c3o64 + c3o16 * xoff - c1o16 * yoff - c3o16 * zoff) +
-      press_SET * (c3o64 - c1o16 * xoff + c3o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c1o64 + c1o16 * xoff + c1o16 * yoff - c1o16 * zoff) +
-      press_SWB * (c3o64 + c3o16 * xoff + c3o16 * yoff + c1o16 * zoff) +
-      press_NWB * (c9o64 + c9o16 * xoff - c3o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c9o64 - c3o16 * xoff + c9o16 * yoff + c3o16 * zoff) +
-      press_NEB * (c27o64 - c9o16 * xoff - c9o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position C 0.0, 0.0, 0.0
-void CompressibleOffsetInterpolator::calcInterpolatedNodeFC(real* f, real omega)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   real press  =  press_NET * (c4o32 - c1o4 * xoff - c1o4 * yoff - c1o4 * zoff) +
-      press_NWT * (c4o32 + c1o4 * xoff - c1o4 * yoff - c1o4 * zoff) +
-      press_SET * (c4o32 - c1o4 * xoff + c1o4 * yoff - c1o4 * zoff) +
-      press_SWT * (c4o32 + c1o4 * xoff + c1o4 * yoff - c1o4 * zoff) +
-      press_NEB * (c4o32 - c1o4 * xoff - c1o4 * yoff + c1o4 * zoff) +
-      press_NWB * (c4o32 + c1o4 * xoff - c1o4 * yoff + c1o4 * zoff) +
-      press_SEB * (c4o32 - c1o4 * xoff + c1o4 * yoff + c1o4 * zoff) +
-      press_SWB * (c4o32 + c1o4 * xoff + c1o4 * yoff + c1o4 * zoff);
-   real vx1  = a0;
-   real vx2  = b0;
-   real vx3  = c0;
-
-   real rho = press ;//+ (ax+by+cz)/3.;
-
-   //////////////////////////////////////////////////////////////////////////
-   //DRAFT
-   //vx1 -= forcingC*0.5;
-   //////////////////////////////////////////////////////////////////////////
-
-   real feq[ENDF+1];
-   D3Q27System::calcCompFeq(feq,rho,vx1,vx2,vx3);
-
-   real eps_new = c2o1;
-   real o  = omega;
-//   LBMReal op = 1.;
-
-   //f_E    = eps_new *((5.*ax*o + 5.*by*o + 5.*cz*o - 8.*ax*op + 4.*by*op + 4.*cz*op)/(54.*o*op));
-   //f_N    = f_E + eps_new *((2.*(ax - by))/(9.*o));
-   //f_T    = f_E + eps_new *((2.*(ax - cz))/(9.*o));
-   //f_NE   = eps_new *(-(5.*cz*o + 3.*(ay + bx)*op - 2.*cz*op + ax*(5.*o + op) + by*(5.*o + op))/(54.*o*op));
-   //f_SE   = f_NE + eps_new *((  ay + bx )/(9.*o));
-   //f_TE   = eps_new *(-(5.*cz*o + by*(5.*o - 2.*op) + 3.*(az + cx)*op + cz*op + ax*(5.*o + op))/(54.*o*op));
-   //f_BE   = f_TE + eps_new *((  az + cx )/(9.*o));
-   //f_TN   = eps_new *(-(5.*ax*o + 5.*by*o + 5.*cz*o - 2.*ax*op + by*op + 3.*bz*op + 3.*cy*op + cz*op)/(54.*o*op));
-   //f_BN   = f_TN + eps_new *((  bz + cy )/(9.*o));
-   //f_ZERO = eps_new *((5.*(ax + by + cz))/(9.*op));
-   //f_TNE  = eps_new *(-(ay + az + bx + bz + cx + cy)/(72.*o));
-   //f_TSW  = - eps_new *((ay + bx)/(36.*o)) - f_TNE;
-   //f_TSE  = - eps_new *((az + cx)/(36.*o)) - f_TNE;
-   //f_TNW  = - eps_new *((bz + cy)/(36.*o)) - f_TNE;
-
-   f_E = eps_new*((c2o1*(-c2o1*ax + by + cz-kxxMzzAverage-kxxMyyAverage))/(c27o1*o));
-   f_N = eps_new*((c2o1*(ax - c2o1*by + cz+c2o1*kxxMyyAverage-kxxMzzAverage))/(c27o1*o));
-   f_T = eps_new*((c2o1*(ax + by - c2o1*cz-kxxMyyAverage+c2o1*kxxMzzAverage))/(c27o1*o));
-   f_NE = eps_new*(-(ax + c3o1*ay + c3o1*bx + by - c2o1*cz+c2o1*kxxMyyAverage-kxxMyyAverage+c3o1*kxyAverage)/(c54o1*o));
-   f_SE = eps_new*(-(ax - c3o1*ay - c3o1*bx + by - c2o1*cz+c2o1*kxxMyyAverage-kxxMyyAverage-c3o1*kxyAverage)/(c54o1*o));
-   f_TE = eps_new*(-(ax + c3o1*az - c2o1*by + c3o1*cx + cz+c2o1*kxxMyyAverage-kxxMzzAverage+c3o1*kxzAverage)/(c54o1*o));
-   f_BE = eps_new*(-(ax - c3o1*az - c2o1*by - c3o1*cx + cz+c2o1*kxxMyyAverage-kxxMzzAverage-c3o1*kxzAverage)/(c54o1*o));
-   f_TN = eps_new*(-(-c2o1*ax + by + c3o1*bz + c3o1*cy + cz-kxxMyyAverage-kxxMzzAverage+c3o1*kyzAverage)/(c54o1*o));
-   f_BN = eps_new*(-(-c2o1*ax + by - c3o1*bz - c3o1*cy + cz-kxxMyyAverage-kxxMzzAverage-c3o1*kyzAverage)/(c54o1*o));
-   f_ZERO = c0o1;
-   f_TNE = eps_new*(-(ay + az + bx + bz + cx + cy+kxyAverage+kxzAverage+kyzAverage)/(c72o1*o));
-   f_TSW = eps_new*((-ay + az - bx + bz + cx + cy-kxyAverage+kxzAverage+kyzAverage)/(c72o1*o));
-   f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(c72o1*o));
-   f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(c72o1*o));
-
-   f[dP00]    = f_E    + feq[dP00];
-   f[dM00]    = f_E    + feq[dM00];
-   f[d0P0]    = f_N    + feq[d0P0];
-   f[d0M0]    = f_N    + feq[d0M0];
-   f[d00P]    = f_T    + feq[d00P];
-   f[d00M]    = f_T    + feq[d00M];
-   f[dPP0]   = f_NE   + feq[dPP0];
-   f[dMM0]   = f_NE   + feq[dMM0];
-   f[dPM0]   = f_SE   + feq[dPM0];
-   f[dMP0]   = f_SE   + feq[dMP0];
-   f[dP0P]   = f_TE   + feq[dP0P];
-   f[dM0M]   = f_TE   + feq[dM0M];
-   f[dP0M]   = f_BE   + feq[dP0M];
-   f[dM0P]   = f_BE   + feq[dM0P];
-   f[d0PP]   = f_TN   + feq[d0PP];
-   f[d0MM]   = f_TN   + feq[d0MM];
-   f[d0PM]   = f_BN   + feq[d0PM];
-   f[d0MP]   = f_BN   + feq[d0MP];
-   f[dPPP]  = f_TNE  + feq[dPPP];
-   f[dMPP]  = f_TNW  + feq[dMPP];
-   f[dPMP]  = f_TSE  + feq[dPMP];
-   f[dMMP]  = f_TSW  + feq[dMMP];
-   f[dPPM]  = f_TSW  + feq[dPPM];
-   f[dMPM]  = f_TSE  + feq[dMPM];
-   f[dPMM]  = f_TNW  + feq[dPMM];
-   f[dMMM]  = f_TNE  + feq[dMMM];
-   f[d000] = f_ZERO + feq[d000];
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3)
-{
-	vx1  = a0 + ax*x + ay*y + az*z + axx*x*x + ayy*y*y + azz*z*z + axy*x*y + axz*x*z + ayz*y*z+axyz*x*y*z;
-	vx2  = b0 + bx*x + by*y + bz*z + bxx*x*x + byy*y*y + bzz*z*z + bxy*x*y + bxz*x*z + byz*y*z+bxyz*x*y*z;
-	vx3  = c0 + cx*x + cy*y + cz*z + cxx*x*x + cyy*y*y + czz*z*z + cxy*x*y + cxz*x*z + cyz*y*z+cxyz*x*y*z;
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetInterpolator::calcInterpolatedShearStress(real x, real y, real z,real& tauxx, real& tauyy, real& tauzz,real& tauxy, real& tauxz, real& tauyz)
-{
-	tauxx=ax+c2o1*axx*x+axy*y+axz*z+axyz*y*z;
-	tauyy=by+c2o1*byy*y+bxy*x+byz*z+bxyz*x*z;
-	tauzz=cz+c2o1*czz*z+cxz*x+cyz*y+cxyz*x*y;
-	tauxy=c1o2*((ay+c2o1*ayy*y+axy*x+ayz*z+axyz*x*z)+(bx+c2o1*bxx*x+bxy*y+bxz*z+bxyz*y*z));
-	tauxz=c1o2*((az+c2o1*azz*z+axz*x+ayz*y+axyz*x*y)+(cx+c2o1*cxx*x+cxy*y+cxz*z+cxyz*y*z));
-	tauyz=c1o2*((bz+c2o1*bzz*z+bxz*x+byz*y+bxyz*x*y)+(cy+c2o1*cyy*y+cxy*x+cyz*z+cxyz*x*z));
-}
diff --git a/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.h b/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.h
deleted file mode 100644
index 8b295977773ad95c00b36a9ef775d45140fe34df..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.h
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef CompressibleOffsetInterpolationProcessor_H_
-#define CompressibleOffsetInterpolationProcessor_H_
-
-#include "Interpolator.h"
-#include "D3Q27System.h"
-
-//////////////////////////////////////////////////////////////////////////
-//it works only for cascaded LBM
-//super compact interpolation method by Martin Geier
-//////////////////////////////////////////////////////////////////////////
-
-class CompressibleOffsetInterpolator;
-
-class CompressibleOffsetInterpolator : public Interpolator
-{
-public:
-   CompressibleOffsetInterpolator() = default;
-   CompressibleOffsetInterpolator(real omegaC, real omegaF);
-   ~CompressibleOffsetInterpolator() override = default;
-
-   InterpolationProcessorPtr clone() override;
-   void setOmegas(real omegaC, real omegaF) override;
-   void interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF) override;
-   void interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF, real xoff, real yoff, real zoff) override;
-   void interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC) override; 
-   void interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC, real xoff, real yoff, real zoff) override; 
-   //LBMReal forcingC, forcingF;
-protected:   
-private:
-   real omegaC{0.0}, omegaF{0.0};
-   real a0, ax, ay, az, axx, ayy, azz, axy, axz, ayz, b0, bx, by, bz, bxx, byy, bzz, bxy, bxz, byz, c0, cx, cy, cz, cxx, cyy, czz, cxy, cxz, cyz, axyz, bxyz, cxyz;
-   real xoff,    yoff,    zoff;
-   real xoff_sq, yoff_sq, zoff_sq;
-   real press_SWT, press_NWT, press_NET, press_SET, press_SWB, press_NWB, press_NEB, press_SEB;
-
-   real  f_E,  f_N,  f_T,  f_NE,  f_SE,  f_BE,  f_TE,  f_TN,  f_BN,  f_TNE,  f_TNW,  f_TSE,  f_TSW,  f_ZERO;
-   real  x_E,  x_N,  x_T,  x_NE,  x_SE,  x_BE,  x_TE,  x_TN,  x_BN,  x_TNE,  x_TNW,  x_TSE,  x_TSW,  x_ZERO;
-   real  y_E,  y_N,  y_T,  y_NE,  y_SE,  y_BE,  y_TE,  y_TN,  y_BN,  y_TNE,  y_TNW,  y_TSE,  y_TSW,  y_ZERO;
-   real  z_E,  z_N,  z_T,  z_NE,  z_SE,  z_BE,  z_TE,  z_TN,  z_BN,  z_TNE,  z_TNW,  z_TSE,  z_TSW,  z_ZERO;
-   real xy_E, xy_N, xy_T, xy_NE, xy_SE, xy_BE, xy_TE, xy_TN, xy_BN, xy_TNE, xy_TNW, xy_TSE, xy_TSW/*, xy_ZERO*/;
-   real xz_E, xz_N, xz_T, xz_NE, xz_SE, xz_BE, xz_TE, xz_TN, xz_BN, xz_TNE, xz_TNW, xz_TSE, xz_TSW/*, xz_ZERO*/;
-   real yz_E, yz_N, yz_T, yz_NE, yz_SE, yz_BE, yz_TE, yz_TN, yz_BN, yz_TNE, yz_TNW, yz_TSE, yz_TSW/*, yz_ZERO*/;
-
-   real kxyAverage, kyzAverage, kxzAverage, kxxMyyAverage, kxxMzzAverage; 
-
-//   LBMReal a,b,c;
-
-   void setOffsets(real xoff, real yoff, real zoff) override;
-   void calcMoments(const real* const f, real omega, real& rho, real& vx1, real& vx2, real& vx3, 
-      real& kxy, real& kyz, real& kxz, real& kxxMyy, real& kxxMzz);
-   void calcInterpolatedCoefficiets(const D3Q27ICell& icell, real omega, real eps_new) override;
-   void calcInterpolatedNodeCF(real* f, real omega, real x, real y, real z, real press, real xs, real ys, real zs);
-   real calcPressBSW();
-   real calcPressTSW();
-   real calcPressTSE();
-   real calcPressBSE();
-   real calcPressBNW();
-   real calcPressTNW();
-   real calcPressTNE();
-   real calcPressBNE();
-   void calcInterpolatedNodeFC(real* f, real omega) override;
-   void calcInterpolatedVelocity(real x, real y, real z,real& vx1, real& vx2, real& vx3) override;
-   void calcInterpolatedShearStress(real x, real y, real z,real& tauxx, real& tauyy, real& tauzz,real& tauxy, real& tauxz, real& tauyz) override;
-};
-
-//////////////////////////////////////////////////////////////////////////
-inline void CompressibleOffsetInterpolator::interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF)
-{
-   this->interpolateCoarseToFine(icellC, icellF, 0.0, 0.0, 0.0);
-}
-//////////////////////////////////////////////////////////////////////////
-inline void CompressibleOffsetInterpolator::interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC)
-{
-   this->interpolateFineToCoarse(icellF, icellC, 0.0, 0.0, 0.0);
-}
-
-#endif
diff --git a/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp b/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp
deleted file mode 100644
index c7fba8407e71e423c5e5231cc4ae220b438fefc9..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp
+++ /dev/null
@@ -1,1290 +0,0 @@
-#include "CompressibleOffsetSquarePressureInterpolator.h"
-#include "D3Q27System.h"
-
-//using namespace UbMath;
-using namespace vf::basics::constant;
-
-CompressibleOffsetSquarePressureInterpolator::CompressibleOffsetSquarePressureInterpolator()
-    
-{
-   this->bulkOmegaToOmega = false;
-   this->OxxPyyPzzC = c1o1;
-   this->OxxPyyPzzF = c1o1;
-}
-//////////////////////////////////////////////////////////////////////////
-CompressibleOffsetSquarePressureInterpolator::CompressibleOffsetSquarePressureInterpolator(real omegaC, real omegaF)
-   : omegaC(omegaC), omegaF(omegaF)
-{
-   this->bulkOmegaToOmega = false;
-   this->OxxPyyPzzC = c1o1;
-   this->OxxPyyPzzF = c1o1;
-}
-//////////////////////////////////////////////////////////////////////////
-CompressibleOffsetSquarePressureInterpolator::~CompressibleOffsetSquarePressureInterpolator()
-= default;
-//////////////////////////////////////////////////////////////////////////
-InterpolationProcessorPtr CompressibleOffsetSquarePressureInterpolator::clone()
-{
-   InterpolationProcessorPtr iproc = InterpolationProcessorPtr (new CompressibleOffsetSquarePressureInterpolator(this->omegaC, this->omegaF));
-   if (bulkOmegaToOmega)
-   {
-      dynamicPointerCast<CompressibleOffsetSquarePressureInterpolator>(iproc)->OxxPyyPzzC = omegaC;
-      dynamicPointerCast<CompressibleOffsetSquarePressureInterpolator>(iproc)->OxxPyyPzzF = omegaF;
-   }
-   else
-   {
-      dynamicPointerCast<CompressibleOffsetSquarePressureInterpolator>(iproc)->OxxPyyPzzC = c1o1;
-      dynamicPointerCast<CompressibleOffsetSquarePressureInterpolator>(iproc)->OxxPyyPzzF = c1o1;
-   }
-   return iproc;
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetSquarePressureInterpolator::setOmegas( real omegaC, real omegaF )
-{
-   this->omegaC = omegaC;
-   this->omegaF = omegaF;
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetSquarePressureInterpolator::setOffsets(real xoff, real yoff, real zoff)
-{
-   this->xoff = xoff;
-   this->yoff = yoff;
-   this->zoff = zoff;     
-   this->xoff_sq = xoff * xoff;
-   this->yoff_sq = yoff * yoff;
-   this->zoff_sq = zoff * zoff;
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetSquarePressureInterpolator::interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF, real xoff, real yoff, real zoff)
-{
-   setOffsets(xoff, yoff, zoff);
-   calcInterpolatedCoefficiets(icellC, omegaC, c1o2);
-   calcInterpolatedNodeCF(icellF.BSW, omegaF, -c1o4, -c1o4, -c1o4, calcPressBSW(), -c1o1, -c1o1, -c1o1);
-   calcInterpolatedNodeCF(icellF.BNE, omegaF,  c1o4,  c1o4, -c1o4, calcPressBNE(),  c1o1,  c1o1, -c1o1);
-   calcInterpolatedNodeCF(icellF.TNW, omegaF, -c1o4,  c1o4,  c1o4, calcPressTNW(), -c1o1,  c1o1,  c1o1);
-   calcInterpolatedNodeCF(icellF.TSE, omegaF,  c1o4, -c1o4,  c1o4, calcPressTSE(),  c1o1, -c1o1,  c1o1);
-   calcInterpolatedNodeCF(icellF.BNW, omegaF, -c1o4,  c1o4, -c1o4, calcPressBNW(), -c1o1,  c1o1, -c1o1);
-   calcInterpolatedNodeCF(icellF.BSE, omegaF,  c1o4, -c1o4, -c1o4, calcPressBSE(),  c1o1, -c1o1, -c1o1);
-   calcInterpolatedNodeCF(icellF.TSW, omegaF, -c1o4, -c1o4,  c1o4, calcPressTSW(), -c1o1, -c1o1,  c1o1);
-   calcInterpolatedNodeCF(icellF.TNE, omegaF,  c1o4,  c1o4,  c1o4, calcPressTNE(),  c1o1,  c1o1,  c1o1);
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetSquarePressureInterpolator::interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC, real xoff, real yoff, real zoff)
-{
-   setOffsets(xoff, yoff, zoff);
-   calcInterpolatedCoefficiets(icellF, omegaF, c2o1);
-   calcInterpolatedNodeFC(icellC, omegaC);
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetSquarePressureInterpolator::calcMoments(const real* const f, real omega, real& press, real& vx1, real& vx2, real& vx3, 
-                                                    real& kxy, real& kyz, real& kxz, real& kxxMyy, real& kxxMzz)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   real drho = c0o1;
-   D3Q27System::calcCompMacroscopicValues(f,drho,vx1,vx2,vx3);
-   
-   press = drho; //interpolate rho!
-
-   kxy   = -c3o1*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))/(c1o1 + drho)-(vx1*vx2));// might not be optimal MG 25.2.13
-   kyz   = -c3o1*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))/(c1o1 + drho)-(vx2*vx3));
-   kxz   = -c3o1*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))/(c1o1 + drho)-(vx1*vx3));
-   kxxMyy = -c3o1/c2o1*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))/(c1o1 + drho)-(vx1*vx1-vx2*vx2));
-   kxxMzz = -c3o1/c2o1*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))/(c1o1 + drho)-(vx1*vx1-vx3*vx3));
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedCoefficiets(const D3Q27ICell& icell, real omega, real eps_new)
-{
-   real        vx1_SWT,vx2_SWT,vx3_SWT;
-   real        vx1_NWT,vx2_NWT,vx3_NWT;
-   real        vx1_NET,vx2_NET,vx3_NET;
-   real        vx1_SET,vx2_SET,vx3_SET;
-   real        vx1_SWB,vx2_SWB,vx3_SWB;
-   real        vx1_NWB,vx2_NWB,vx3_NWB;
-   real        vx1_NEB,vx2_NEB,vx3_NEB;
-   real        vx1_SEB,vx2_SEB,vx3_SEB;
-
-   real        kxyFromfcNEQ_SWT, kyzFromfcNEQ_SWT, kxzFromfcNEQ_SWT, kxxMyyFromfcNEQ_SWT, kxxMzzFromfcNEQ_SWT;
-   real        kxyFromfcNEQ_NWT, kyzFromfcNEQ_NWT, kxzFromfcNEQ_NWT, kxxMyyFromfcNEQ_NWT, kxxMzzFromfcNEQ_NWT;
-   real        kxyFromfcNEQ_NET, kyzFromfcNEQ_NET, kxzFromfcNEQ_NET, kxxMyyFromfcNEQ_NET, kxxMzzFromfcNEQ_NET;
-   real        kxyFromfcNEQ_SET, kyzFromfcNEQ_SET, kxzFromfcNEQ_SET, kxxMyyFromfcNEQ_SET, kxxMzzFromfcNEQ_SET;
-   real        kxyFromfcNEQ_SWB, kyzFromfcNEQ_SWB, kxzFromfcNEQ_SWB, kxxMyyFromfcNEQ_SWB, kxxMzzFromfcNEQ_SWB;
-   real        kxyFromfcNEQ_NWB, kyzFromfcNEQ_NWB, kxzFromfcNEQ_NWB, kxxMyyFromfcNEQ_NWB, kxxMzzFromfcNEQ_NWB;
-   real        kxyFromfcNEQ_NEB, kyzFromfcNEQ_NEB, kxzFromfcNEQ_NEB, kxxMyyFromfcNEQ_NEB, kxxMzzFromfcNEQ_NEB;
-   real        kxyFromfcNEQ_SEB, kyzFromfcNEQ_SEB, kxzFromfcNEQ_SEB, kxxMyyFromfcNEQ_SEB, kxxMzzFromfcNEQ_SEB;
-
-   calcMoments(icell.TSW,omega,press_SWT,vx1_SWT,vx2_SWT,vx3_SWT, kxyFromfcNEQ_SWT, kyzFromfcNEQ_SWT, kxzFromfcNEQ_SWT, kxxMyyFromfcNEQ_SWT, kxxMzzFromfcNEQ_SWT);
-   calcMoments(icell.TNW,omega,press_NWT,vx1_NWT,vx2_NWT,vx3_NWT, kxyFromfcNEQ_NWT, kyzFromfcNEQ_NWT, kxzFromfcNEQ_NWT, kxxMyyFromfcNEQ_NWT, kxxMzzFromfcNEQ_NWT);
-   calcMoments(icell.TNE,omega,press_NET,vx1_NET,vx2_NET,vx3_NET, kxyFromfcNEQ_NET, kyzFromfcNEQ_NET, kxzFromfcNEQ_NET, kxxMyyFromfcNEQ_NET, kxxMzzFromfcNEQ_NET);
-   calcMoments(icell.TSE,omega,press_SET,vx1_SET,vx2_SET,vx3_SET, kxyFromfcNEQ_SET, kyzFromfcNEQ_SET, kxzFromfcNEQ_SET, kxxMyyFromfcNEQ_SET, kxxMzzFromfcNEQ_SET);
-   calcMoments(icell.BSW,omega,press_SWB,vx1_SWB,vx2_SWB,vx3_SWB, kxyFromfcNEQ_SWB, kyzFromfcNEQ_SWB, kxzFromfcNEQ_SWB, kxxMyyFromfcNEQ_SWB, kxxMzzFromfcNEQ_SWB);
-   calcMoments(icell.BNW,omega,press_NWB,vx1_NWB,vx2_NWB,vx3_NWB, kxyFromfcNEQ_NWB, kyzFromfcNEQ_NWB, kxzFromfcNEQ_NWB, kxxMyyFromfcNEQ_NWB, kxxMzzFromfcNEQ_NWB);
-   calcMoments(icell.BNE,omega,press_NEB,vx1_NEB,vx2_NEB,vx3_NEB, kxyFromfcNEQ_NEB, kyzFromfcNEQ_NEB, kxzFromfcNEQ_NEB, kxxMyyFromfcNEQ_NEB, kxxMzzFromfcNEQ_NEB);
-   calcMoments(icell.BSE,omega,press_SEB,vx1_SEB,vx2_SEB,vx3_SEB, kxyFromfcNEQ_SEB, kyzFromfcNEQ_SEB, kxzFromfcNEQ_SEB, kxxMyyFromfcNEQ_SEB, kxxMzzFromfcNEQ_SEB);
-
-   //LBMReal dxRho=c1o4*((press_NET-press_SWB)+(press_SET-press_NWB)+(press_NEB-press_SWT)+(press_SEB-press_NWT));
-   //LBMReal dyRho=c1o4*((press_NET-press_SWB)-(press_SET-press_NWB)+(press_NEB-press_SWT)-(press_SEB-press_NWT));
-   //LBMReal dzRho=c1o4*((press_NET-press_SWB)+(press_SET-press_NWB)-(press_NEB-press_SWT)-(press_SEB-press_NWT));
-
-   //   kxyFromfcNEQ_SWT+=vx1_SWT*dyRho+vx2_SWT*dxRho;
-   //   kxyFromfcNEQ_NWT+=vx1_NWT*dyRho+vx2_NWT*dxRho;
-   //   kxyFromfcNEQ_NET+=vx1_NET*dyRho+vx2_NET*dxRho;
-   //   kxyFromfcNEQ_SET+=vx1_SET*dyRho+vx2_SET*dxRho;
-   //   kxyFromfcNEQ_SWB+=vx1_SWB*dyRho+vx2_SWB*dxRho;
-   //   kxyFromfcNEQ_NWB+=vx1_NWB*dyRho+vx2_NWB*dxRho;
-   //   kxyFromfcNEQ_NEB+=vx1_NEB*dyRho+vx2_NEB*dxRho;
-   //   kxyFromfcNEQ_SEB+=vx1_SEB*dyRho+vx2_SEB*dxRho;
-
-   //   kyzFromfcNEQ_SWT+=vx3_SWT*dyRho+vx2_SWT*dzRho;
-   //   kyzFromfcNEQ_NWT+=vx3_NWT*dyRho+vx2_NWT*dzRho;
-   //   kyzFromfcNEQ_NET+=vx3_NET*dyRho+vx2_NET*dzRho;
-   //   kyzFromfcNEQ_SET+=vx3_SET*dyRho+vx2_SET*dzRho;
-   //   kyzFromfcNEQ_SWB+=vx3_SWB*dyRho+vx2_SWB*dzRho;
-   //   kyzFromfcNEQ_NWB+=vx3_NWB*dyRho+vx2_NWB*dzRho;
-   //   kyzFromfcNEQ_NEB+=vx3_NEB*dyRho+vx2_NEB*dzRho;
-   //   kyzFromfcNEQ_SEB+=vx3_SEB*dyRho+vx2_SEB*dzRho;
-
-   //   kxzFromfcNEQ_SWT+=vx1_SWT*dzRho+vx3_SWT*dxRho;
-   //   kxzFromfcNEQ_NWT+=vx1_NWT*dzRho+vx3_NWT*dxRho;
-   //   kxzFromfcNEQ_NET+=vx1_NET*dzRho+vx3_NET*dxRho;
-   //   kxzFromfcNEQ_SET+=vx1_SET*dzRho+vx3_SET*dxRho;
-   //   kxzFromfcNEQ_SWB+=vx1_SWB*dzRho+vx3_SWB*dxRho;
-   //   kxzFromfcNEQ_NWB+=vx1_NWB*dzRho+vx3_NWB*dxRho;
-   //   kxzFromfcNEQ_NEB+=vx1_NEB*dzRho+vx3_NEB*dxRho;
-   //   kxzFromfcNEQ_SEB+=vx1_SEB*dzRho+vx3_SEB*dxRho;
-
-   //   kxxMyyFromfcNEQ_SWT+=vx1_SWT*dxRho-vx2_SWT*dyRho;
-   //   kxxMyyFromfcNEQ_NWT+=vx1_NWT*dxRho-vx2_NWT*dyRho;
-   //   kxxMyyFromfcNEQ_NET+=vx1_NET*dxRho-vx2_NET*dyRho;
-   //   kxxMyyFromfcNEQ_SET+=vx1_SET*dxRho-vx2_SET*dyRho;
-   //   kxxMyyFromfcNEQ_SWB+=vx1_SWB*dxRho-vx2_SWB*dyRho;
-   //   kxxMyyFromfcNEQ_NWB+=vx1_NWB*dxRho-vx2_NWB*dyRho;
-   //   kxxMyyFromfcNEQ_NEB+=vx1_NEB*dxRho-vx2_NEB*dyRho;
-   //   kxxMyyFromfcNEQ_SEB+=vx1_SEB*dxRho-vx2_SEB*dyRho;
-
-   //   kxxMzzFromfcNEQ_SWT+=vx1_SWT*dxRho-vx3_SWT*dzRho;
-   //   kxxMzzFromfcNEQ_NWT+=vx1_NWT*dxRho-vx3_NWT*dzRho;
-   //   kxxMzzFromfcNEQ_NET+=vx1_NET*dxRho-vx3_NET*dzRho;
-   //   kxxMzzFromfcNEQ_SET+=vx1_SET*dxRho-vx3_SET*dzRho;
-   //   kxxMzzFromfcNEQ_SWB+=vx1_SWB*dxRho-vx3_SWB*dzRho;
-   //   kxxMzzFromfcNEQ_NWB+=vx1_NWB*dxRho-vx3_NWB*dzRho;
-   //   kxxMzzFromfcNEQ_NEB+=vx1_NEB*dxRho-vx3_NEB*dzRho;
-   //   kxxMzzFromfcNEQ_SEB+=vx1_SEB*dxRho-vx3_SEB*dzRho;
-
-
-      //kxxMzzFromfcNEQ_SWT=0.0;
-      //kxxMzzFromfcNEQ_NWT=0.0;
-      //kxxMzzFromfcNEQ_NET=0.0;
-      //kxxMzzFromfcNEQ_SET=0.0;
-      //kxxMzzFromfcNEQ_SWB=0.0;
-      //kxxMzzFromfcNEQ_NWB=0.0;
-      //kxxMzzFromfcNEQ_NEB=0.0;
-      //kxxMzzFromfcNEQ_SEB=0.0;
-
-
-
-
-
-   a0 = (-kxxMyyFromfcNEQ_NEB - kxxMyyFromfcNEQ_NET + kxxMyyFromfcNEQ_NWB + kxxMyyFromfcNEQ_NWT -
-      kxxMyyFromfcNEQ_SEB - kxxMyyFromfcNEQ_SET + kxxMyyFromfcNEQ_SWB + kxxMyyFromfcNEQ_SWT -
-      kxxMzzFromfcNEQ_NEB - kxxMzzFromfcNEQ_NET + kxxMzzFromfcNEQ_NWB + kxxMzzFromfcNEQ_NWT -
-      kxxMzzFromfcNEQ_SEB - kxxMzzFromfcNEQ_SET + kxxMzzFromfcNEQ_SWB + kxxMzzFromfcNEQ_SWT -
-      c2o1*kxyFromfcNEQ_NEB - c2o1*kxyFromfcNEQ_NET - c2o1*kxyFromfcNEQ_NWB - c2o1*kxyFromfcNEQ_NWT +
-      c2o1*kxyFromfcNEQ_SEB + c2o1*kxyFromfcNEQ_SET + c2o1*kxyFromfcNEQ_SWB + c2o1*kxyFromfcNEQ_SWT +
-      c2o1*kxzFromfcNEQ_NEB - c2o1*kxzFromfcNEQ_NET + c2o1*kxzFromfcNEQ_NWB - c2o1*kxzFromfcNEQ_NWT +
-      c2o1*kxzFromfcNEQ_SEB - c2o1*kxzFromfcNEQ_SET + c2o1*kxzFromfcNEQ_SWB - c2o1*kxzFromfcNEQ_SWT +
-      c8o1*vx1_NEB + c8o1*vx1_NET + c8o1*vx1_NWB + c8o1*vx1_NWT + c8o1*vx1_SEB +
-      c8o1*vx1_SET + c8o1*vx1_SWB + c8o1*vx1_SWT + c2o1*vx2_NEB + c2o1*vx2_NET -
-      c2o1*vx2_NWB - c2o1*vx2_NWT - c2o1*vx2_SEB - c2o1*vx2_SET + c2o1*vx2_SWB +
-      c2o1*vx2_SWT - c2o1*vx3_NEB + c2o1*vx3_NET + c2o1*vx3_NWB - c2o1*vx3_NWT -
-      c2o1*vx3_SEB + c2o1*vx3_SET + c2o1*vx3_SWB - c2o1*vx3_SWT)/c64o1;
-   b0 = (c2o1*kxxMyyFromfcNEQ_NEB + c2o1*kxxMyyFromfcNEQ_NET + c2o1*kxxMyyFromfcNEQ_NWB + c2o1*kxxMyyFromfcNEQ_NWT -
-      c2o1*kxxMyyFromfcNEQ_SEB - c2o1*kxxMyyFromfcNEQ_SET - c2o1*kxxMyyFromfcNEQ_SWB - c2o1*kxxMyyFromfcNEQ_SWT -
-      kxxMzzFromfcNEQ_NEB - kxxMzzFromfcNEQ_NET - kxxMzzFromfcNEQ_NWB - kxxMzzFromfcNEQ_NWT +
-      kxxMzzFromfcNEQ_SEB + kxxMzzFromfcNEQ_SET + kxxMzzFromfcNEQ_SWB + kxxMzzFromfcNEQ_SWT -
-      c2o1*kxyFromfcNEQ_NEB - c2o1*kxyFromfcNEQ_NET + c2o1*kxyFromfcNEQ_NWB + c2o1*kxyFromfcNEQ_NWT -
-      c2o1*kxyFromfcNEQ_SEB - c2o1*kxyFromfcNEQ_SET + c2o1*kxyFromfcNEQ_SWB + c2o1*kxyFromfcNEQ_SWT +
-      c2o1*kyzFromfcNEQ_NEB - c2o1*kyzFromfcNEQ_NET + c2o1*kyzFromfcNEQ_NWB - c2o1*kyzFromfcNEQ_NWT +
-      c2o1*kyzFromfcNEQ_SEB - c2o1*kyzFromfcNEQ_SET + c2o1*kyzFromfcNEQ_SWB - c2o1*kyzFromfcNEQ_SWT +
-      c2o1*vx1_NEB + c2o1*vx1_NET - c2o1*vx1_NWB - c2o1*vx1_NWT -
-      c2o1*vx1_SEB - c2o1*vx1_SET + c2o1*vx1_SWB + c2o1*vx1_SWT +
-      c8o1*vx2_NEB + c8o1*vx2_NET + c8o1*vx2_NWB + c8o1*vx2_NWT +
-      c8o1*vx2_SEB + c8o1*vx2_SET + c8o1*vx2_SWB + c8o1*vx2_SWT -
-      c2o1*vx3_NEB + c2o1*vx3_NET - c2o1*vx3_NWB + c2o1*vx3_NWT +
-      c2o1*vx3_SEB - c2o1*vx3_SET + c2o1*vx3_SWB - c2o1*vx3_SWT)/c64o1;
-   c0 = (kxxMyyFromfcNEQ_NEB - kxxMyyFromfcNEQ_NET + kxxMyyFromfcNEQ_NWB - kxxMyyFromfcNEQ_NWT +
-      kxxMyyFromfcNEQ_SEB - kxxMyyFromfcNEQ_SET + kxxMyyFromfcNEQ_SWB - kxxMyyFromfcNEQ_SWT -
-      c2o1*kxxMzzFromfcNEQ_NEB + c2o1*kxxMzzFromfcNEQ_NET - c2o1*kxxMzzFromfcNEQ_NWB + c2o1*kxxMzzFromfcNEQ_NWT -
-      c2o1*kxxMzzFromfcNEQ_SEB + c2o1*kxxMzzFromfcNEQ_SET - c2o1*kxxMzzFromfcNEQ_SWB + c2o1*kxxMzzFromfcNEQ_SWT -
-      c2o1*kxzFromfcNEQ_NEB - c2o1*kxzFromfcNEQ_NET + c2o1*kxzFromfcNEQ_NWB + c2o1*kxzFromfcNEQ_NWT -
-      c2o1*kxzFromfcNEQ_SEB - c2o1*kxzFromfcNEQ_SET + c2o1*kxzFromfcNEQ_SWB + c2o1*kxzFromfcNEQ_SWT -
-      c2o1*kyzFromfcNEQ_NEB - c2o1*kyzFromfcNEQ_NET - c2o1*kyzFromfcNEQ_NWB - c2o1*kyzFromfcNEQ_NWT +
-      c2o1*kyzFromfcNEQ_SEB + c2o1*kyzFromfcNEQ_SET + c2o1*kyzFromfcNEQ_SWB + c2o1*kyzFromfcNEQ_SWT -
-      c2o1*vx1_NEB + c2o1*vx1_NET + c2o1*vx1_NWB - c2o1*vx1_NWT -
-      c2o1*vx1_SEB + c2o1*vx1_SET + c2o1*vx1_SWB - c2o1*vx1_SWT -
-      c2o1*vx2_NEB + c2o1*vx2_NET - c2o1*vx2_NWB + c2o1*vx2_NWT +
-      c2o1*vx2_SEB - c2o1*vx2_SET + c2o1*vx2_SWB - c2o1*vx2_SWT +
-      c8o1*vx3_NEB + c8o1*vx3_NET + c8o1*vx3_NWB + c8o1*vx3_NWT +
-      c8o1*vx3_SEB + c8o1*vx3_SET + c8o1*vx3_SWB + c8o1*vx3_SWT)/c64o1;
-   ax = (vx1_NEB + vx1_NET - vx1_NWB - vx1_NWT + vx1_SEB + vx1_SET - vx1_SWB - vx1_SWT)/c4o1;
-   bx = (vx2_NEB + vx2_NET - vx2_NWB - vx2_NWT + vx2_SEB + vx2_SET - vx2_SWB - vx2_SWT)/c4o1;
-   cx = (vx3_NEB + vx3_NET - vx3_NWB - vx3_NWT + vx3_SEB + vx3_SET - vx3_SWB - vx3_SWT)/c4o1;
-   axx= (kxxMyyFromfcNEQ_NEB + kxxMyyFromfcNEQ_NET - kxxMyyFromfcNEQ_NWB - kxxMyyFromfcNEQ_NWT +
-      kxxMyyFromfcNEQ_SEB + kxxMyyFromfcNEQ_SET - kxxMyyFromfcNEQ_SWB - kxxMyyFromfcNEQ_SWT +
-      kxxMzzFromfcNEQ_NEB + kxxMzzFromfcNEQ_NET - kxxMzzFromfcNEQ_NWB - kxxMzzFromfcNEQ_NWT +
-      kxxMzzFromfcNEQ_SEB + kxxMzzFromfcNEQ_SET - kxxMzzFromfcNEQ_SWB - kxxMzzFromfcNEQ_SWT +
-      c2o1*vx2_NEB + c2o1*vx2_NET - c2o1*vx2_NWB - c2o1*vx2_NWT -
-      c2o1*vx2_SEB - c2o1*vx2_SET + c2o1*vx2_SWB + c2o1*vx2_SWT -
-      c2o1*vx3_NEB + c2o1*vx3_NET + c2o1*vx3_NWB - c2o1*vx3_NWT -
-      c2o1*vx3_SEB + c2o1*vx3_SET + c2o1*vx3_SWB - c2o1*vx3_SWT)/c16o1;
-   bxx= (kxyFromfcNEQ_NEB + kxyFromfcNEQ_NET - kxyFromfcNEQ_NWB - kxyFromfcNEQ_NWT +
-      kxyFromfcNEQ_SEB + kxyFromfcNEQ_SET - kxyFromfcNEQ_SWB - kxyFromfcNEQ_SWT -
-      c2o1*vx1_NEB - c2o1*vx1_NET + c2o1*vx1_NWB + c2o1*vx1_NWT +
-      c2o1*vx1_SEB + c2o1*vx1_SET - c2o1*vx1_SWB - c2o1*vx1_SWT)/c8o1;
-   cxx= (kxzFromfcNEQ_NEB + kxzFromfcNEQ_NET - kxzFromfcNEQ_NWB - kxzFromfcNEQ_NWT +
-      kxzFromfcNEQ_SEB + kxzFromfcNEQ_SET - kxzFromfcNEQ_SWB - kxzFromfcNEQ_SWT +
-      c2o1*vx1_NEB - c2o1*vx1_NET - c2o1*vx1_NWB + c2o1*vx1_NWT +
-      c2o1*vx1_SEB - c2o1*vx1_SET - c2o1*vx1_SWB + c2o1*vx1_SWT)/c8o1;
-   ay = (vx1_NEB + vx1_NET + vx1_NWB + vx1_NWT - vx1_SEB - vx1_SET - vx1_SWB - vx1_SWT)/c4o1;
-   by = (vx2_NEB + vx2_NET + vx2_NWB + vx2_NWT - vx2_SEB - vx2_SET - vx2_SWB - vx2_SWT)/c4o1;
-   cy = (vx3_NEB + vx3_NET + vx3_NWB + vx3_NWT - vx3_SEB - vx3_SET - vx3_SWB - vx3_SWT)/c4o1;
-   ayy= (kxyFromfcNEQ_NEB + kxyFromfcNEQ_NET + kxyFromfcNEQ_NWB + kxyFromfcNEQ_NWT -
-      kxyFromfcNEQ_SEB - kxyFromfcNEQ_SET - kxyFromfcNEQ_SWB - kxyFromfcNEQ_SWT -
-      c2o1*vx2_NEB - c2o1*vx2_NET + c2o1*vx2_NWB + c2o1*vx2_NWT +
-      c2o1*vx2_SEB + c2o1*vx2_SET - c2o1*vx2_SWB - c2o1*vx2_SWT)/c8o1;
-   byy= (-c2o1*kxxMyyFromfcNEQ_NEB - c2o1*kxxMyyFromfcNEQ_NET - c2o1*kxxMyyFromfcNEQ_NWB - c2o1*kxxMyyFromfcNEQ_NWT +
-      c2o1*kxxMyyFromfcNEQ_SEB + c2o1*kxxMyyFromfcNEQ_SET + c2o1*kxxMyyFromfcNEQ_SWB + c2o1*kxxMyyFromfcNEQ_SWT +
-      kxxMzzFromfcNEQ_NEB + kxxMzzFromfcNEQ_NET + kxxMzzFromfcNEQ_NWB + kxxMzzFromfcNEQ_NWT -
-      kxxMzzFromfcNEQ_SEB - kxxMzzFromfcNEQ_SET - kxxMzzFromfcNEQ_SWB - kxxMzzFromfcNEQ_SWT +
-      c2o1*vx1_NEB + c2o1*vx1_NET - c2o1*vx1_NWB - c2o1*vx1_NWT -
-      c2o1*vx1_SEB - c2o1*vx1_SET + c2o1*vx1_SWB + c2o1*vx1_SWT -
-      c2o1*vx3_NEB + c2o1*vx3_NET - c2o1*vx3_NWB + c2o1*vx3_NWT +
-      c2o1*vx3_SEB - c2o1*vx3_SET + c2o1*vx3_SWB - c2o1*vx3_SWT)/c16o1;
-   cyy= (kyzFromfcNEQ_NEB + kyzFromfcNEQ_NET + kyzFromfcNEQ_NWB + kyzFromfcNEQ_NWT -
-      kyzFromfcNEQ_SEB - kyzFromfcNEQ_SET - kyzFromfcNEQ_SWB - kyzFromfcNEQ_SWT +
-      c2o1*vx2_NEB - c2o1*vx2_NET + c2o1*vx2_NWB - c2o1*vx2_NWT -
-      c2o1*vx2_SEB + c2o1*vx2_SET - c2o1*vx2_SWB + c2o1*vx2_SWT)/c8o1;
-   az = (-vx1_NEB + vx1_NET - vx1_NWB + vx1_NWT - vx1_SEB + vx1_SET - vx1_SWB + vx1_SWT)/c4o1;
-   bz = (-vx2_NEB + vx2_NET - vx2_NWB + vx2_NWT - vx2_SEB + vx2_SET - vx2_SWB + vx2_SWT)/c4o1;
-   cz = (-vx3_NEB + vx3_NET - vx3_NWB + vx3_NWT - vx3_SEB + vx3_SET - vx3_SWB + vx3_SWT)/c4o1;
-   azz= (-kxzFromfcNEQ_NEB + kxzFromfcNEQ_NET - kxzFromfcNEQ_NWB + kxzFromfcNEQ_NWT -
-      kxzFromfcNEQ_SEB + kxzFromfcNEQ_SET - kxzFromfcNEQ_SWB + kxzFromfcNEQ_SWT +
-      c2o1*vx3_NEB - c2o1*vx3_NET - c2o1*vx3_NWB + c2o1*vx3_NWT +
-      c2o1*vx3_SEB - c2o1*vx3_SET - c2o1*vx3_SWB + c2o1*vx3_SWT)/c8o1;
-   bzz= (-kyzFromfcNEQ_NEB + kyzFromfcNEQ_NET - kyzFromfcNEQ_NWB + kyzFromfcNEQ_NWT -
-      kyzFromfcNEQ_SEB + kyzFromfcNEQ_SET - kyzFromfcNEQ_SWB + kyzFromfcNEQ_SWT +
-      c2o1*vx3_NEB - c2o1*vx3_NET + c2o1*vx3_NWB - c2o1*vx3_NWT -
-      c2o1*vx3_SEB + c2o1*vx3_SET - c2o1*vx3_SWB + c2o1*vx3_SWT)/c8o1;
-   czz= (-kxxMyyFromfcNEQ_NEB + kxxMyyFromfcNEQ_NET - kxxMyyFromfcNEQ_NWB + kxxMyyFromfcNEQ_NWT -
-      kxxMyyFromfcNEQ_SEB + kxxMyyFromfcNEQ_SET - kxxMyyFromfcNEQ_SWB + kxxMyyFromfcNEQ_SWT +
-      c2o1*kxxMzzFromfcNEQ_NEB - c2o1*kxxMzzFromfcNEQ_NET + c2o1*kxxMzzFromfcNEQ_NWB - c2o1*kxxMzzFromfcNEQ_NWT +
-      c2o1*kxxMzzFromfcNEQ_SEB - c2o1*kxxMzzFromfcNEQ_SET + c2o1*kxxMzzFromfcNEQ_SWB - c2o1*kxxMzzFromfcNEQ_SWT -
-      c2o1*vx1_NEB + c2o1*vx1_NET + c2o1*vx1_NWB - c2o1*vx1_NWT -
-      c2o1*vx1_SEB + c2o1*vx1_SET + c2o1*vx1_SWB - c2o1*vx1_SWT -
-      c2o1*vx2_NEB + c2o1*vx2_NET - c2o1*vx2_NWB + c2o1*vx2_NWT +
-      c2o1*vx2_SEB - c2o1*vx2_SET + c2o1*vx2_SWB - c2o1*vx2_SWT)/c16o1;
-   axy= (vx1_NEB + vx1_NET - vx1_NWB - vx1_NWT - vx1_SEB - vx1_SET + vx1_SWB + vx1_SWT)/c2o1;
-   bxy= (vx2_NEB + vx2_NET - vx2_NWB - vx2_NWT - vx2_SEB - vx2_SET + vx2_SWB + vx2_SWT)/c2o1;
-   cxy= (vx3_NEB + vx3_NET - vx3_NWB - vx3_NWT - vx3_SEB - vx3_SET + vx3_SWB + vx3_SWT)/c2o1;
-   axz= (-vx1_NEB + vx1_NET + vx1_NWB - vx1_NWT - vx1_SEB + vx1_SET + vx1_SWB - vx1_SWT)/c2o1;
-   bxz= (-vx2_NEB + vx2_NET + vx2_NWB - vx2_NWT - vx2_SEB + vx2_SET + vx2_SWB - vx2_SWT)/c2o1;
-   cxz= (-vx3_NEB + vx3_NET + vx3_NWB - vx3_NWT - vx3_SEB + vx3_SET + vx3_SWB - vx3_SWT)/c2o1;
-   ayz= (-vx1_NEB + vx1_NET - vx1_NWB + vx1_NWT + vx1_SEB - vx1_SET + vx1_SWB - vx1_SWT)/c2o1;
-   byz= (-vx2_NEB + vx2_NET - vx2_NWB + vx2_NWT + vx2_SEB - vx2_SET + vx2_SWB - vx2_SWT)/c2o1;
-   cyz= (-vx3_NEB + vx3_NET - vx3_NWB + vx3_NWT + vx3_SEB - vx3_SET + vx3_SWB - vx3_SWT)/c2o1;
-   axyz=-vx1_NEB + vx1_NET + vx1_NWB - vx1_NWT + vx1_SEB - vx1_SET - vx1_SWB + vx1_SWT;
-   bxyz=-vx2_NEB + vx2_NET + vx2_NWB - vx2_NWT + vx2_SEB - vx2_SET - vx2_SWB + vx2_SWT;
-   cxyz=-vx3_NEB + vx3_NET + vx3_NWB - vx3_NWT + vx3_SEB - vx3_SET - vx3_SWB + vx3_SWT;
-
-
-   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   kxyAverage       = c0o1;//(kxyFromfcNEQ_SWB+
-                       //kxyFromfcNEQ_SWT+
-                       //kxyFromfcNEQ_SET+
-                       //kxyFromfcNEQ_SEB+
-                       //kxyFromfcNEQ_NWB+
-                       //kxyFromfcNEQ_NWT+
-                       //kxyFromfcNEQ_NET+
-                       //kxyFromfcNEQ_NEB)*c1o8-(ay+bx);
-   kyzAverage       = c0o1;//(kyzFromfcNEQ_SWB+
-                       //kyzFromfcNEQ_SWT+
-                       //kyzFromfcNEQ_SET+
-                       //kyzFromfcNEQ_SEB+
-                       //kyzFromfcNEQ_NWB+
-                       //kyzFromfcNEQ_NWT+
-                       //kyzFromfcNEQ_NET+
-                       //kyzFromfcNEQ_NEB)*c1o8-(bz+cy);
-   kxzAverage       = c0o1;//(kxzFromfcNEQ_SWB+
-                       //kxzFromfcNEQ_SWT+
-                       //kxzFromfcNEQ_SET+
-                       //kxzFromfcNEQ_SEB+
-                       //kxzFromfcNEQ_NWB+
-                       //kxzFromfcNEQ_NWT+
-                       //kxzFromfcNEQ_NET+
-                       //kxzFromfcNEQ_NEB)*c1o8-(az+cx);
-   kxxMyyAverage    = c0o1;//(kxxMyyFromfcNEQ_SWB+
-                       //kxxMyyFromfcNEQ_SWT+
-                       //kxxMyyFromfcNEQ_SET+
-                       //kxxMyyFromfcNEQ_SEB+
-                       //kxxMyyFromfcNEQ_NWB+
-                       //kxxMyyFromfcNEQ_NWT+
-                       //kxxMyyFromfcNEQ_NET+
-                       //kxxMyyFromfcNEQ_NEB)*c1o8-(ax-by);
-   kxxMzzAverage    = c0o1;//(kxxMzzFromfcNEQ_SWB+
-                       //kxxMzzFromfcNEQ_SWT+
-                       //kxxMzzFromfcNEQ_SET+
-                       //kxxMzzFromfcNEQ_SEB+
-                       //kxxMzzFromfcNEQ_NWB+
-                       //kxxMzzFromfcNEQ_NWT+
-                       //kxxMzzFromfcNEQ_NET+
-                       //kxxMzzFromfcNEQ_NEB)*c1o8-(ax-cz);
-   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //
-   // Bernd das Brot
-   //
-   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   a0 = a0 + xoff * ax + yoff * ay + zoff * az + xoff_sq * axx + yoff_sq * ayy + zoff_sq * azz + xoff*yoff*axy + xoff*zoff*axz + yoff*zoff*ayz + xoff*yoff*zoff*axyz ;
-   ax = ax + c2o1 * xoff * axx + yoff * axy + zoff * axz + yoff*zoff*axyz;
-   ay = ay + c2o1 * yoff * ayy + xoff * axy + zoff * ayz + xoff*zoff*axyz;
-   az = az + c2o1 * zoff * azz + xoff * axz + yoff * ayz + xoff*yoff*axyz;
-   b0 = b0 + xoff * bx + yoff * by + zoff * bz + xoff_sq * bxx + yoff_sq * byy + zoff_sq * bzz + xoff*yoff*bxy + xoff*zoff*bxz + yoff*zoff*byz + xoff*yoff*zoff*bxyz;
-   bx = bx + c2o1 * xoff * bxx + yoff * bxy + zoff * bxz + yoff*zoff*bxyz;
-   by = by + c2o1 * yoff * byy + xoff * bxy + zoff * byz + xoff*zoff*bxyz;
-   bz = bz + c2o1 * zoff * bzz + xoff * bxz + yoff * byz + xoff*yoff*bxyz;
-   c0 = c0 + xoff * cx + yoff * cy + zoff * cz + xoff_sq * cxx + yoff_sq * cyy + zoff_sq * czz + xoff*yoff*cxy + xoff*zoff*cxz + yoff*zoff*cyz + xoff*yoff*zoff*cxyz;
-   cx = cx + c2o1 * xoff * cxx + yoff * cxy + zoff * cxz + yoff*zoff*cxyz;
-   cy = cy + c2o1 * yoff * cyy + xoff * cxy + zoff * cyz + xoff*zoff*cxyz;
-   cz = cz + c2o1 * zoff * czz + xoff * cxz + yoff * cyz + xoff*yoff*cxyz;
-   axy= axy + zoff*axyz;
-   axz= axz + yoff*axyz;
-   ayz= ayz + xoff*axyz;
-   bxy= bxy + zoff*bxyz;
-   bxz= bxz + yoff*bxyz;
-   byz= byz + xoff*bxyz;
-   cxy= cxy + zoff*cxyz;
-   cxz= cxz + yoff*cxyz;
-   cyz= cyz + xoff*cxyz;
-   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-   const real o = omega;
-
-   f_E = eps_new*((c2o1*(-c2o1*ax + by + cz-kxxMzzAverage-kxxMyyAverage))/(c27o1*o));
-   f_N = eps_new*((c2o1*(ax - c2o1*by + cz+c2o1*kxxMyyAverage-kxxMzzAverage))/(c27o1*o));
-   f_T = eps_new*((c2o1*(ax + by - c2o1*cz-kxxMyyAverage+c2o1*kxxMzzAverage))/(c27o1*o));
-   f_NE = eps_new*(-(ax + c3o1*ay + c3o1*bx + by - c2o1*cz+c2o1*kxxMyyAverage-kxxMyyAverage+c3o1*kxyAverage)/(c54o1*o));
-   f_SE = eps_new*(-(ax - c3o1*ay - c3o1*bx + by - c2o1*cz+c2o1*kxxMyyAverage-kxxMyyAverage-c3o1*kxyAverage)/(c54o1*o));
-   f_TE = eps_new*(-(ax + c3o1*az - c2o1*by + c3o1*cx + cz+c2o1*kxxMyyAverage-kxxMzzAverage+c3o1*kxzAverage)/(c54o1*o));
-   f_BE = eps_new*(-(ax - c3o1*az - c2o1*by - c3o1*cx + cz+c2o1*kxxMyyAverage-kxxMzzAverage-c3o1*kxzAverage)/(c54o1*o));
-   f_TN = eps_new*(-(-c2o1*ax + by + c3o1*bz + c3o1*cy + cz-kxxMyyAverage-kxxMzzAverage+c3o1*kyzAverage)/(c54o1*o));
-   f_BN = eps_new*(-(-c2o1*ax + by - c3o1*bz - c3o1*cy + cz-kxxMyyAverage-kxxMzzAverage-c3o1*kyzAverage)/(c54o1*o));
-   f_ZERO = 0.;
-   f_TNE = eps_new*(-(ay + az + bx + bz + cx + cy+kxyAverage+kxzAverage+kyzAverage)/(c72o1*o));
-   f_TSW = eps_new*((-ay + az - bx + bz + cx + cy-kxyAverage+kxzAverage+kyzAverage)/(c72o1*o));
-   f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(c72o1*o));
-   f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(c72o1*o));
-
-   x_E = c1o4*eps_new*((c2o1*(-c4o1*axx + bxy + cxz))/(c27o1*o));
-   x_N = c1o4*eps_new*((c2o1*(c2o1*axx - c2o1*bxy + cxz))/(c27o1*o));
-   x_T = c1o4*eps_new*((c2o1*(c2o1*axx + bxy - c2o1*cxz))/(c27o1*o));
-   x_NE = c1o4*eps_new*(-((c2o1*axx + c3o1*axy + c6o1*bxx + bxy - c2o1*cxz))/(c54o1*o));
-   x_SE = c1o4*eps_new*(-((c2o1*axx - c3o1*axy - c6o1*bxx + bxy - c2o1*cxz))/(c54o1*o));
-   x_TE = c1o4*eps_new*(-((c2o1*axx + c3o1*axz - c2o1*bxy + c6o1*cxx + cxz))/(c54o1*o));
-   x_BE = c1o4*eps_new*(-((c2o1*axx - c3o1*axz - c2o1*bxy - c6o1*cxx + cxz))/(c54o1*o));
-   x_TN = c1o4*eps_new*(-((-c4o1*axx + bxy + c3o1*bxz + c3o1*cxy + cxz))/(c54o1*o));
-   x_BN = c1o4*eps_new*(-((-c4o1*axx + bxy - c3o1*bxz - c3o1*cxy + cxz))/(c54o1*o));
-   x_ZERO = 0.;
-   x_TNE = c1o4*eps_new*(-((axy + axz + c2o1*bxx + bxz + c2o1*cxx + cxy))/(c72o1*o));
-   x_TSW = c1o4*eps_new*(((-axy + axz - c2o1*bxx + bxz + c2o1*cxx + cxy))/(c72o1*o));
-   x_TSE = c1o4*eps_new*(((axy - axz + c2o1*bxx + bxz - c2o1*cxx + cxy))/(c72o1*o));
-   x_TNW = c1o4*eps_new*(((axy + axz + c2o1*bxx - bxz + c2o1*cxx - cxy))/(c72o1*o));
-
-   y_E = c1o4*eps_new*(c2o1*(-c2o1*axy + c2o1*byy + cyz))/(c27o1*o);
-   y_N = c1o4*eps_new*(c2o1*(axy - c4o1*byy + cyz))/(c27o1*o);
-   y_T = c1o4*eps_new*(c2o1*(axy + c2o1*byy - c2o1*cyz))/(c27o1*o);
-   y_NE = c1o4*eps_new*(-((axy + c6o1*ayy + c3o1*bxy + c2o1*byy - c2o1*cyz))/(c54o1*o));
-   y_SE = c1o4*eps_new*(-((axy - c6o1*ayy - c3o1*bxy + c2o1*byy - c2o1*cyz))/(c54o1*o));
-   y_TE = c1o4*eps_new*(-((axy + c3o1*ayz - c4o1*byy + c3o1*cxy + cyz))/(c54o1*o));
-   y_BE = c1o4*eps_new*(-((axy - c3o1*ayz - c4o1*byy - c3o1*cxy + cyz))/(c54o1*o));
-   y_TN = c1o4*eps_new*(-((-c2o1*axy + c2o1*byy + c3o1*byz + c6o1*cyy + cyz))/(c54o1*o));
-   y_BN = c1o4*eps_new*(-((-c2o1*axy + c2o1*byy - c3o1*byz - c6o1*cyy + cyz))/(c54o1*o));
-   y_ZERO = 0.;
-   y_TNE = c1o4*eps_new*(-((c2o1*ayy + ayz + bxy + byz + cxy + c2o1*cyy))/(c72o1*o));
-   y_TSW = c1o4*eps_new*(((-c2o1*ayy + ayz - bxy + byz + cxy + c2o1*cyy))/(c72o1*o));
-   y_TSE = c1o4*eps_new*(((c2o1*ayy - ayz + bxy + byz - cxy + c2o1*cyy))/(c72o1*o));
-   y_TNW = c1o4*eps_new*(((c2o1*ayy + ayz + bxy - byz + cxy - c2o1*cyy))/(c72o1*o));
-
-   z_E = c1o4*eps_new*((c2o1*(-c2o1*axz + byz + c2o1*czz))/(c27o1*o));
-   z_N = c1o4*eps_new*((c2o1*(axz - c2o1*byz + c2o1*czz))/(c27o1*o));
-   z_T = c1o4*eps_new*((c2o1*(axz + byz - c4o1*czz))/(c27o1*o));
-   z_NE = c1o4*eps_new*(-((axz + c3o1*ayz + c3o1*bxz + byz - c4o1*czz))/(c54o1*o));
-   z_SE = c1o4*eps_new*(-((axz - c3o1*ayz - c3o1*bxz + byz - c4o1*czz))/(c54o1*o));
-   z_TE = c1o4*eps_new*(-((axz + c6o1*azz - c2o1*byz + c3o1*cxz + c2o1*czz))/(c54o1*o));
-   z_BE = c1o4*eps_new*(-((axz - c6o1*azz - c2o1*byz - c3o1*cxz + c2o1*czz))/(c54o1*o));
-   z_TN = c1o4*eps_new*(-((-c2o1*axz + byz + c6o1*bzz + c3o1*cyz + c2o1*czz))/(c54o1*o));
-   z_BN = c1o4*eps_new*(-((-c2o1*axz + byz - c6o1*bzz - c3o1*cyz + c2o1*czz))/(c54o1*o));
-   z_ZERO = 0.;
-   z_TNE = c1o4*eps_new*(-((ayz + c2o1*azz + bxz + c2o1*bzz + cxz + cyz))/(c72o1*o));
-   z_TSW = c1o4*eps_new*(((-ayz + c2o1*azz - bxz + c2o1*bzz + cxz + cyz))/(c72o1*o));
-   z_TSE = c1o4*eps_new*(((ayz - c2o1*azz + bxz + c2o1*bzz - cxz + cyz))/(c72o1*o));
-   z_TNW = c1o4*eps_new*(((ayz + c2o1*azz + bxz - c2o1*bzz + cxz - cyz))/(c72o1*o));
-
-   xy_E   =   c1o16*eps_new *((                       c2o1*cxyz)/(c27o1*o));
-   xy_N   =   c1o16*eps_new *((                       c2o1*cxyz)/(c27o1*o));
-   xy_T   = -(c1o16*eps_new *((                       c4o1*cxyz)/(c27o1*o)));
-   xy_NE  =   c1o16*eps_new *(                            cxyz /(c27o1*o));
-   xy_SE  =   c1o16*eps_new *(                            cxyz /(c27o1*o));
-   xy_TE  = -(c1o16*eps_new *(( c3o1*axyz            +     cxyz)/(c54o1*o)));
-   xy_BE  = -(c1o16*eps_new *((-c3o1*axyz            +     cxyz)/(c54o1*o)));
-   xy_TN  = -(c1o16*eps_new *((            c3o1*bxyz +     cxyz)/(c54o1*o)));
-   xy_BN  = -(c1o16*eps_new *((          - c3o1*bxyz +     cxyz)/(c54o1*o)));
-   //xy_ZERO=   c1o16*eps_new;
-   xy_TNE = -(c1o16*eps_new *((     axyz +     bxyz           )/(c72o1*o)));
-   xy_TSW =   c1o16*eps_new *((     axyz +     bxyz           )/(c72o1*o));
-   xy_TSE =   c1o16*eps_new *((-    axyz +     bxyz           )/(c72o1*o));
-   xy_TNW =   c1o16*eps_new *((     axyz -     bxyz           )/(c72o1*o));
-
-   xz_E   =   c1o16*eps_new *((            c2o1*bxyz           )/(c27o1*o));
-   xz_N   = -(c1o16*eps_new *((            c4o1*bxyz           )/(c27o1*o)));
-   xz_T   =   c1o16*eps_new *((            c2o1*bxyz           )/(c27o1*o));
-   xz_NE  = -(c1o16*eps_new *(( c3o1*axyz +     bxyz           )/(c54o1*o)));
-   xz_SE  = -(c1o16*eps_new *((-c3o1*axyz +     bxyz           )/(c54o1*o)));
-   xz_TE  =   c1o16*eps_new *((                bxyz           )/(c27o1*o));
-   xz_BE  =   c1o16*eps_new *((                bxyz           )/(c27o1*o));
-   xz_TN  = -(c1o16*eps_new *((                bxyz + c3o1*cxyz)/(c54o1*o)));
-   xz_BN  = -(c1o16*eps_new *((                bxyz - c3o1*cxyz)/(c54o1*o)));
-   //xz_ZERO=   c1o16*eps_new;
-   xz_TNE = -(c1o16*eps_new *((     axyz            +     cxyz)/(c72o1*o)));
-   xz_TSW =   c1o16*eps_new *((-    axyz            +     cxyz)/(c72o1*o));
-   xz_TSE =   c1o16*eps_new *((     axyz            +     cxyz)/(c72o1*o));
-   xz_TNW =   c1o16*eps_new *((     axyz            -     cxyz)/(c72o1*o));
-
-   yz_E   = -(c1o16*eps_new *(( c4o1*axyz                      )/(c27o1*o)));
-   yz_N   =   c1o16*eps_new *(( c2o1*axyz                      )/(c27o1*o));
-   yz_T   =   c1o16*eps_new *(( c2o1*axyz                      )/(c27o1*o));
-   yz_NE  = -(c1o16*eps_new *((     axyz + c3o1*bxyz           )/(c54o1*o)));
-   yz_SE  = -(c1o16*eps_new *((     axyz - c3o1*bxyz           )/(c54o1*o)));
-   yz_TE  = -(c1o16*eps_new *((     axyz            + c3o1*cxyz)/(c54o1*o)));
-   yz_BE  = -(c1o16*eps_new *((     axyz            - c3o1*cxyz)/(c54o1*o)));
-   yz_TN  =   c1o16*eps_new *((     axyz                      )/(c27o1*o));
-   yz_BN  =   c1o16*eps_new *((     axyz                      )/(c27o1*o));
-   //yz_ZERO=   c1o16*eps_new;
-   yz_TNE = -(c1o16*eps_new *((                bxyz +     cxyz)/(c72o1*o)));
-   yz_TSW =   c1o16*eps_new *((          -     bxyz +     cxyz)/(c72o1*o));
-   yz_TSE =   c1o16*eps_new *((                bxyz -     cxyz)/(c72o1*o));
-   yz_TNW =   c1o16*eps_new *((                bxyz +     cxyz)/(c72o1*o));
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedNodeCF(real* f, real omega, real x, real y, real z, real press, real xs, real ys, real zs)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   real eps_new = c1o2;
-   real o = omega;
-   //bulk viscosity
-   real oP = OxxPyyPzzF;
-
-   real rho  = press ;//+ (c2o1*axx*x+axy*y+axz*z+axyz*y*z+ax + c2o1*byy*y+bxy*x+byz*z+bxyz*x*z+by + c2o1*czz*z+cxz*x+cyz*y+cxyz*x*y+cz)/3.;
-
-   real laplaceRho = (xoff!=c0o1 || yoff!=c0o1 || zoff!= c0o1) ? c0o1 :(-c3o1*(by*by+ax*ax+cz*cz)-c6o1*(ay*bx+bz*cy+az*cx))*(c1o1+rho);
-
-   rho=rho+laplaceRho*(c3o1/c16o1);
-
-   real vx1  = a0 + c1o4*( xs*ax + ys*ay + zs*az) + c1o16*(axx + xs*ys*axy + xs*zs*axz + ayy + ys*zs*ayz + azz) + c1o64*(xs*ys*zs*axyz);
-   real vx2  = b0 + c1o4*( xs*bx + ys*by + zs*bz) + c1o16*(bxx + xs*ys*bxy + xs*zs*bxz + byy + ys*zs*byz + bzz) + c1o64*(xs*ys*zs*bxyz);
-   real vx3  = c0 + c1o4*( xs*cx + ys*cy + zs*cz) + c1o16*(cxx + xs*ys*cxy + xs*zs*cxz + cyy + ys*zs*cyz + czz) + c1o64*(xs*ys*zs*cxyz);
-
-   real mfcbb = c0o1;
-   real mfabb = c0o1;
-   real mfbcb = c0o1;
-   real mfbab = c0o1;
-   real mfbbc = c0o1;
-   real mfbba = c0o1;
-   real mfccb = c0o1;
-   real mfaab = c0o1;
-   real mfcab = c0o1;
-   real mfacb = c0o1;
-   real mfcbc = c0o1;
-   real mfaba = c0o1;
-   real mfcba = c0o1;
-   real mfabc = c0o1;
-   real mfbcc = c0o1;
-   real mfbaa = c0o1;
-   real mfbca = c0o1;
-   real mfbac = c0o1;
-   real mfbbb = c0o1;
-   real mfccc = c0o1;
-   real mfaac = c0o1;
-   real mfcac = c0o1;
-   real mfacc = c0o1;
-   real mfcca = c0o1;
-   real mfaaa = c0o1;
-   real mfcaa = c0o1;
-   real mfaca = c0o1;
-
-   mfaaa = rho; // if drho is interpolated directly
-
-   real vx1Sq = vx1*vx1;
-   real vx2Sq = vx2*vx2;
-   real vx3Sq = vx3*vx3;
-   real oMdrho = c1o1;
-
-   //2.f
-
-   // linear combinations
-   real mxxPyyPzz = mfaaa - c2o3*(ax + by + c2o1*axx*x + bxy*x + axy*y + c2o1*byy*y + axz*z + byz*z + bxyz*x*z + axyz*y*z + cz - cxz*x + cyz*y + cxyz*x*y + c2o1*czz*z)*eps_new / oP* (c1o1 + press);
-   real mxxMyy    = -c2o3*(ax - by + kxxMyyAverage + c2o1*axx*x - bxy*x + axy*y - c2o1*byy*y + axz*z - byz*z - bxyz*x*z + axyz*y*z)*eps_new/o * (c1o1 + press);
-   real mxxMzz    = -c2o3*(ax - cz + kxxMzzAverage + c2o1*axx*x - cxz*x + axy*y - cyz*y - cxyz*x*y + axz*z - c2o1*czz*z + axyz*y*z)*eps_new/o * (c1o1 + press);
-
-   mfabb     = -c1o3 * (bz + cy + kyzAverage + bxz*x + cxy*x + byz*y + c2o1*cyy*y + bxyz*x*y + c2o1*bzz*z + cyz*z + cxyz*x*z)*eps_new/o * (c1o1 + press);
-   mfbab     = -c1o3 * (az + cx + kxzAverage + axz*x + c2o1*cxx*x + ayz*y + cxy*y + axyz*x*y + c2o1*azz*z + cxz*z + cxyz*y*z)*eps_new/o * (c1o1 + press);
-   mfbba     = -c1o3 * (ay + bx + kxyAverage + axy*x + c2o1*bxx*x + c2o1*ayy*y + bxy*y + ayz*z + bxz*z + axyz*x*z + bxyz*y*z)*eps_new/o * (c1o1 + press);
-
-   // linear combinations back
-   mfcaa = c1o3 * (mxxMyy +       mxxMzz + mxxPyyPzz) ;
-   mfaca = c1o3 * (-c2o1 * mxxMyy +       mxxMzz + mxxPyyPzz) ;
-   mfaac = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz) ;
-
-   //three
-   mfbbb = c0o1;
-   real mxxyPyzz = c0o1;
-   real mxxyMyzz = c0o1;
-   real mxxzPyyz = c0o1;
-   real mxxzMyyz = c0o1;
-   real mxyyPxzz =  c0o1;
-   real mxyyMxzz = c0o1;
-
-   // linear combinations back
-   mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-   mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-   mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-   mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-   mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-   mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-   //4.f
-   mfacc = mfaaa*c1o9;
-   mfcac = mfacc;
-   mfcca = mfacc;
-
-   //5.
-
-   //6.
-
-   mfccc = mfaaa*c1o27;
-   ////////////////////////////////////////////////////////////////////////////////////
-   //back
-   ////////////////////////////////////////////////////////////////////////////////////
-   //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Z - Dir
-   real m0 =  mfaac * c1o2 +      mfaab * (vx3 - c1o2) + (mfaaa + c1o1 * oMdrho) * (vx3Sq - vx3) * c1o2;
-   real m1 = -mfaac        - c2o1 * mfaab *  vx3         +  mfaaa                * (c1o1 - vx3Sq)              - c1o1 * oMdrho * vx3Sq;
-   real m2 =  mfaac * c1o2 +      mfaab * (vx3 + c1o2) + (mfaaa + c1o1 * oMdrho) * (vx3Sq + vx3) * c1o2;
-   mfaaa = m0;
-   mfaab = m1;
-   mfaac = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfabc * c1o2 +      mfabb * (vx3 - c1o2) + mfaba * (vx3Sq - vx3) * c1o2;
-   m1 = -mfabc        - c2o1 * mfabb *  vx3         + mfaba * (c1o1 - vx3Sq);
-   m2 =  mfabc * c1o2 +      mfabb * (vx3 + c1o2) + mfaba * (vx3Sq + vx3) * c1o2;
-   mfaba = m0;
-   mfabb = m1;
-   mfabc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfacc * c1o2 +      mfacb * (vx3 - c1o2) + (mfaca + c1o3 * oMdrho) * (vx3Sq - vx3) * c1o2;
-   m1 = -mfacc        - c2o1 * mfacb *  vx3         +  mfaca                  * (c1o1 - vx3Sq)              - c1o3 * oMdrho * vx3Sq;
-   m2 =  mfacc * c1o2 +      mfacb * (vx3 + c1o2) + (mfaca + c1o3 * oMdrho) * (vx3Sq + vx3) * c1o2;
-   mfaca = m0;
-   mfacb = m1;
-   mfacc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfbac * c1o2 +      mfbab * (vx3 - c1o2) + mfbaa * (vx3Sq - vx3) * c1o2;
-   m1 = -mfbac        - c2o1 * mfbab *  vx3         + mfbaa * (c1o1 - vx3Sq);
-   m2 =  mfbac * c1o2 +      mfbab * (vx3 + c1o2) + mfbaa * (vx3Sq + vx3) * c1o2;
-   mfbaa = m0;
-   mfbab = m1;
-   mfbac = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 =  mfbbc * c1o2 +      mfbbb * (vx3 - c1o2) + mfbba * (vx3Sq - vx3) * c1o2;
-   m1 = -mfbbc        - c2o1 * mfbbb *  vx3         + mfbba * (c1o1 - vx3Sq);
-   m2 =  mfbbc * c1o2 +      mfbbb * (vx3 + c1o2) + mfbba * (vx3Sq + vx3) * c1o2;
-   mfbba = m0;
-   mfbbb = m1;
-   mfbbc = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 =  mfbcc * c1o2 +      mfbcb * (vx3 - c1o2) + mfbca * (vx3Sq - vx3) * c1o2;
-   m1 = -mfbcc        - c2o1 * mfbcb *  vx3         + mfbca * (c1o1 - vx3Sq);
-   m2 =  mfbcc * c1o2 +      mfbcb * (vx3 + c1o2) + mfbca * (vx3Sq + vx3) * c1o2;
-   mfbca = m0;
-   mfbcb = m1;
-   mfbcc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcac * c1o2 +      mfcab * (vx3 - c1o2) + (mfcaa + c1o3 * oMdrho) * (vx3Sq - vx3) * c1o2;
-   m1 = -mfcac        - c2o1 * mfcab *  vx3         +  mfcaa                  * (c1o1 - vx3Sq)              - c1o3 * oMdrho * vx3Sq;
-   m2 =  mfcac * c1o2 +      mfcab * (vx3 + c1o2) + (mfcaa + c1o3 * oMdrho) * (vx3Sq + vx3) * c1o2;
-   mfcaa = m0;
-   mfcab = m1;
-   mfcac = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 =  mfcbc * c1o2 +      mfcbb * (vx3 - c1o2) + mfcba * (vx3Sq - vx3) * c1o2;
-   m1 = -mfcbc        - c2o1 * mfcbb *  vx3         + mfcba * (c1o1 - vx3Sq);
-   m2 =  mfcbc * c1o2 +      mfcbb * (vx3 + c1o2) + mfcba * (vx3Sq + vx3) * c1o2;
-   mfcba = m0;
-   mfcbb = m1;
-   mfcbc = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 =  mfccc * c1o2 +      mfccb * (vx3 - c1o2) + (mfcca + c1o9 * oMdrho) * (vx3Sq - vx3) * c1o2;
-   m1 = -mfccc        - c2o1 * mfccb *  vx3         +  mfcca                  * (c1o1 - vx3Sq)              - c1o9 * oMdrho * vx3Sq;
-   m2 =  mfccc * c1o2 +      mfccb * (vx3 + c1o2) + (mfcca + c1o9 * oMdrho) * (vx3Sq + vx3) * c1o2;
-   mfcca = m0;
-   mfccb = m1;
-   mfccc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Y - Dir
-   m0 =  mfaca * c1o2 +      mfaba * (vx2 - c1o2) + (mfaaa + c1o6 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfaca        - c2o1 * mfaba *  vx2         +  mfaaa                  * (c1o1 - vx2Sq)              - c1o6 * oMdrho * vx2Sq;
-   m2 =  mfaca * c1o2 +      mfaba * (vx2 + c1o2) + (mfaaa + c1o6 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfaaa = m0;
-   mfaba = m1;
-   mfaca = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfacb * c1o2 +      mfabb * (vx2 - c1o2) + (mfaab + c2o3 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfacb        - c2o1 * mfabb *  vx2         +  mfaab                  * (c1o1 - vx2Sq)              - c2o3 * oMdrho * vx2Sq;
-   m2 =  mfacb * c1o2 +      mfabb * (vx2 + c1o2) + (mfaab + c2o3 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfaab = m0;
-   mfabb = m1;
-   mfacb = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfacc * c1o2 +      mfabc * (vx2 - c1o2) + (mfaac + c1o6 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfacc        - c2o1 * mfabc *  vx2         +  mfaac                  * (c1o1 - vx2Sq)              - c1o6 * oMdrho * vx2Sq;
-   m2 =  mfacc * c1o2 +      mfabc * (vx2 + c1o2) + (mfaac + c1o6 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfaac = m0;
-   mfabc = m1;
-   mfacc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfbca * c1o2 +      mfbba * (vx2 - c1o2) + mfbaa * (vx2Sq - vx2) * c1o2;
-   m1 = -mfbca        - c2o1 * mfbba *  vx2         + mfbaa * (c1o1 - vx2Sq);
-   m2 =  mfbca * c1o2 +      mfbba * (vx2 + c1o2) + mfbaa * (vx2Sq + vx2) * c1o2;
-   mfbaa = m0;
-   mfbba = m1;
-   mfbca = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 =  mfbcb * c1o2 +      mfbbb * (vx2 - c1o2) + mfbab * (vx2Sq - vx2) * c1o2;
-   m1 = -mfbcb        - c2o1 * mfbbb *  vx2         + mfbab * (c1o1 - vx2Sq);
-   m2 =  mfbcb * c1o2 +      mfbbb * (vx2 + c1o2) + mfbab * (vx2Sq + vx2) * c1o2;
-   mfbab = m0;
-   mfbbb = m1;
-   mfbcb = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 =  mfbcc * c1o2 +      mfbbc * (vx2 - c1o2) + mfbac * (vx2Sq - vx2) * c1o2;
-   m1 = -mfbcc        - c2o1 * mfbbc *  vx2         + mfbac * (c1o1 - vx2Sq);
-   m2 =  mfbcc * c1o2 +      mfbbc * (vx2 + c1o2) + mfbac * (vx2Sq + vx2) * c1o2;
-   mfbac = m0;
-   mfbbc = m1;
-   mfbcc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcca * c1o2 +      mfcba * (vx2 - c1o2) + (mfcaa + c1o18 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfcca        - c2o1 * mfcba *  vx2         +  mfcaa                   * (c1o1 - vx2Sq)              - c1o18 * oMdrho * vx2Sq;
-   m2 =  mfcca * c1o2 +      mfcba * (vx2 + c1o2) + (mfcaa + c1o18 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfcaa = m0;
-   mfcba = m1;
-   mfcca = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 =  mfccb * c1o2 +      mfcbb * (vx2 - c1o2) + (mfcab + c2o9 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfccb        - c2o1 * mfcbb *  vx2         +  mfcab                  * (c1o1 - vx2Sq)              - c2o9 * oMdrho * vx2Sq;
-   m2 =  mfccb * c1o2 +      mfcbb * (vx2 + c1o2) + (mfcab + c2o9 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfcab = m0;
-   mfcbb = m1;
-   mfccb = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 =  mfccc * c1o2 +      mfcbc * (vx2 - c1o2) + (mfcac + c1o18 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfccc        - c2o1 * mfcbc *  vx2         +  mfcac                   * (c1o1 - vx2Sq)              - c1o18 * oMdrho * vx2Sq;
-   m2 =  mfccc * c1o2 +      mfcbc * (vx2 + c1o2) + (mfcac + c1o18 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfcac = m0;
-   mfcbc = m1;
-   mfccc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-   ////////////////////////////////////////////////////////////////////////////////////
-   // X - Dir
-   m0 =  mfcaa * c1o2 +      mfbaa * (vx1 - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcaa        - c2o1 * mfbaa *  vx1         +  mfaaa                   * (c1o1 - vx1Sq)              - c1o36 * oMdrho * vx1Sq;
-   m2 =  mfcaa * c1o2 +      mfbaa * (vx1 + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfaaa = m0;
-   mfbaa = m1;
-   mfcaa = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcba * c1o2 +      mfbba * (vx1 - c1o2) + (mfaba + c1o9 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcba        - c2o1 * mfbba *  vx1         +  mfaba                  * (c1o1 - vx1Sq)              - c1o9 * oMdrho * vx1Sq;
-   m2 =  mfcba * c1o2 +      mfbba * (vx1 + c1o2) + (mfaba + c1o9 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfaba = m0;
-   mfbba = m1;
-   mfcba = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcca * c1o2 +      mfbca * (vx1 - c1o2) + (mfaca + c1o36 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcca        - c2o1 * mfbca *  vx1         +  mfaca                   * (c1o1 - vx1Sq)              - c1o36 * oMdrho * vx1Sq;
-   m2 =  mfcca * c1o2 +      mfbca * (vx1 + c1o2) + (mfaca + c1o36 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfaca = m0;
-   mfbca = m1;
-   mfcca = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcab * c1o2 +      mfbab * (vx1 - c1o2) + (mfaab + c1o9 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcab        - c2o1 * mfbab *  vx1         +  mfaab                  * (c1o1 - vx1Sq)              - c1o9 * oMdrho * vx1Sq;
-   m2 =  mfcab * c1o2 +      mfbab * (vx1 + c1o2) + (mfaab + c1o9 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfaab = m0;
-   mfbab = m1;
-   mfcab = m2;
-   ///////////b////////////////////////////////////////////////////////////////////////
-   m0 =  mfcbb * c1o2 +      mfbbb * (vx1 - c1o2) + (mfabb + c4o9 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcbb        - c2o1 * mfbbb *  vx1         +  mfabb                  * (c1o1 - vx1Sq)              - c4o9 * oMdrho * vx1Sq;
-   m2 =  mfcbb * c1o2 +      mfbbb * (vx1 + c1o2) + (mfabb + c4o9 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfabb = m0;
-   mfbbb = m1;
-   mfcbb = m2;
-   ///////////b////////////////////////////////////////////////////////////////////////
-   m0 =  mfccb * c1o2 +      mfbcb * (vx1 - c1o2) + (mfacb + c1o9 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfccb        - c2o1 * mfbcb *  vx1         +  mfacb                  * (c1o1 - vx1Sq)              - c1o9 * oMdrho * vx1Sq;
-   m2 =  mfccb * c1o2 +      mfbcb * (vx1 + c1o2) + (mfacb + c1o9 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfacb = m0;
-   mfbcb = m1;
-   mfccb = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcac * c1o2 +      mfbac * (vx1 - c1o2) + (mfaac + c1o36 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcac        - c2o1 * mfbac *  vx1         +  mfaac                   * (c1o1 - vx1Sq)              - c1o36 * oMdrho * vx1Sq;
-   m2 =  mfcac * c1o2 +      mfbac * (vx1 + c1o2) + (mfaac + c1o36 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfaac = m0;
-   mfbac = m1;
-   mfcac = m2;
-   ///////////c////////////////////////////////////////////////////////////////////////
-   m0 =  mfcbc * c1o2 +      mfbbc * (vx1 - c1o2) + (mfabc + c1o9 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcbc        - c2o1 * mfbbc *  vx1         +  mfabc                  * (c1o1 - vx1Sq)              - c1o9 * oMdrho * vx1Sq;
-   m2 =  mfcbc * c1o2 +      mfbbc * (vx1 + c1o2) + (mfabc + c1o9 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfabc = m0;
-   mfbbc = m1;
-   mfcbc = m2;
-   ///////////c////////////////////////////////////////////////////////////////////////
-   m0 =  mfccc * c1o2 +      mfbcc * (vx1 - c1o2) + (mfacc + c1o36 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfccc        - c2o1 * mfbcc *  vx1         +  mfacc                   * (c1o1 - vx1Sq)              - c1o36 * oMdrho * vx1Sq;
-   m2 =  mfccc * c1o2 +      mfbcc * (vx1 + c1o2) + (mfacc + c1o36 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfacc = m0;
-   mfbcc = m1;
-   mfccc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-
-   f[dP00]    = mfcbb;
-   f[dM00]    = mfabb;
-   f[d0P0]    = mfbcb;
-   f[d0M0]    = mfbab;
-   f[d00P]    = mfbbc;
-   f[d00M]    = mfbba;
-   f[dPP0]   = mfccb;
-   f[dMM0]   = mfaab;
-   f[dPM0]   = mfcab;
-   f[dMP0]   = mfacb;
-   f[dP0P]   = mfcbc;
-   f[dM0M]   = mfaba;
-   f[dP0M]   = mfcba;
-   f[dM0P]   = mfabc;
-   f[d0PP]   = mfbcc;
-   f[d0MM]   = mfbaa;
-   f[d0PM]   = mfbca;
-   f[d0MP]   = mfbac;
-   f[d000] = mfbbb;
-   f[dPPP]  = mfccc;
-   f[dPMP]  = mfcac;
-   f[dPPM]  = mfcca;
-   f[dPMM]  = mfcaa;
-   f[dMPP]  = mfacc;
-   f[dMMP]  = mfaac;
-   f[dMPM]  = mfaca;
-   f[dMMM]  = mfaaa;
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SWB -0.25, -0.25, -0.25
-real CompressibleOffsetSquarePressureInterpolator::calcPressBSW()
-{
-   return   press_SWT * (c9o64 + c3o16 * xoff + c3o16 * yoff - c9o16 * zoff) +
-      press_NWT * (c3o64 + c1o16 * xoff - c3o16 * yoff - c3o16 * zoff) +
-      press_SET * (c3o64 - c3o16 * xoff + c1o16 * yoff - c3o16 * zoff) +
-      press_NET * (c1o64 - c1o16 * xoff - c1o16 * yoff - c1o16 * zoff) +
-      press_NEB * (c3o64 - c3o16 * xoff - c3o16 * yoff + c1o16 * zoff) +
-      press_NWB * (c9o64 + c3o16 * xoff - c9o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c9o64 - c9o16 * xoff + c3o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c27o64 + c9o16 * xoff + c9o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SWT -0.25, -0.25, 0.25
-real CompressibleOffsetSquarePressureInterpolator::calcPressTSW()
-{
-   return   press_SWT * (c27o64 + c9o16 * xoff + c9o16 * yoff - c9o16 * zoff) +
-      press_NWT * (c9o64 + c3o16 * xoff - c9o16 * yoff - c3o16 * zoff) +
-      press_SET * (c9o64 - c9o16 * xoff + c3o16 * yoff - c3o16 * zoff) +
-      press_NET * (c3o64 - c3o16 * xoff - c3o16 * yoff - c1o16 * zoff) +
-      press_NEB * (c1o64 - c1o16 * xoff - c1o16 * yoff + c1o16 * zoff) +
-      press_NWB * (c3o64 + c1o16 * xoff - c3o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c3o64 - c3o16 * xoff + c1o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c9o64 + c3o16 * xoff + c3o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SET 0.25, -0.25, 0.25
-real CompressibleOffsetSquarePressureInterpolator::calcPressTSE()
-{
-   return   press_SET * (c27o64 - c9o16 * xoff + c9o16 * yoff - c9o16 * zoff) +
-      press_NET * (c9o64 - c3o16 * xoff - c9o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c9o64 + c9o16 * xoff + c3o16 * yoff - c3o16 * zoff) +
-      press_NWT * (c3o64 + c3o16 * xoff - c3o16 * yoff - c1o16 * zoff) +
-      press_NWB * (c1o64 + c1o16 * xoff - c1o16 * yoff + c1o16 * zoff) +
-      press_NEB * (c3o64 - c1o16 * xoff - c3o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c3o64 + c3o16 * xoff + c1o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c9o64 - c3o16 * xoff + c3o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position SEB 0.25, -0.25, -0.25
-real CompressibleOffsetSquarePressureInterpolator::calcPressBSE()
-{
-   return   press_SET * (c9o64 - c3o16 * xoff + c3o16 * yoff - c9o16 * zoff) +
-      press_NET * (c3o64 - c1o16 * xoff - c3o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c3o64 + c3o16 * xoff + c1o16 * yoff - c3o16 * zoff) +
-      press_NWT * (c1o64 + c1o16 * xoff - c1o16 * yoff - c1o16 * zoff) +
-      press_NWB * (c3o64 + c3o16 * xoff - c3o16 * yoff + c1o16 * zoff) +
-      press_NEB * (c9o64 - c3o16 * xoff - c9o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c9o64 + c9o16 * xoff + c3o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c27o64 - c9o16 * xoff + c9o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NWB -0.25, 0.25, -0.25
-real CompressibleOffsetSquarePressureInterpolator::calcPressBNW()
-{
-   return   press_NWT * (c9o64 + c3o16 * xoff - c3o16 * yoff - c9o16 * zoff) +
-      press_NET * (c3o64 - c3o16 * xoff - c1o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c3o64 + c1o16 * xoff + c3o16 * yoff - c3o16 * zoff) +
-      press_SET * (c1o64 - c1o16 * xoff + c1o16 * yoff - c1o16 * zoff) +
-      press_SEB * (c3o64 - c3o16 * xoff + c3o16 * yoff + c1o16 * zoff) +
-      press_NEB * (c9o64 - c9o16 * xoff - c3o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c9o64 + c3o16 * xoff + c9o16 * yoff + c3o16 * zoff) +
-      press_NWB * (c27o64 + c9o16 * xoff - c9o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NWT -0.25, 0.25, 0.25
-real CompressibleOffsetSquarePressureInterpolator::calcPressTNW()
-{
-   return   press_NWT * (c27o64 + c9o16 * xoff - c9o16 * yoff - c9o16 * zoff) +
-      press_NET * (c9o64 - c9o16 * xoff - c3o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c9o64 + c3o16 * xoff + c9o16 * yoff - c3o16 * zoff) +
-      press_SET * (c3o64 - c3o16 * xoff + c3o16 * yoff - c1o16 * zoff) +
-      press_SEB * (c1o64 - c1o16 * xoff + c1o16 * yoff + c1o16 * zoff) +
-      press_NEB * (c3o64 - c3o16 * xoff - c1o16 * yoff + c3o16 * zoff) +
-      press_SWB * (c3o64 + c1o16 * xoff + c3o16 * yoff + c3o16 * zoff) +
-      press_NWB * (c9o64 + c3o16 * xoff - c3o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NET 0.25, 0.25, 0.25
-real CompressibleOffsetSquarePressureInterpolator::calcPressTNE()
-{
-   return   press_NET * (c27o64 - c9o16 * xoff - c9o16 * yoff - c9o16 * zoff) +
-      press_NWT * (c9o64 + c9o16 * xoff - c3o16 * yoff - c3o16 * zoff) +
-      press_SET * (c9o64 - c3o16 * xoff + c9o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c3o64 + c3o16 * xoff + c3o16 * yoff - c1o16 * zoff) +
-      press_SWB * (c1o64 + c1o16 * xoff + c1o16 * yoff + c1o16 * zoff) +
-      press_NWB * (c3o64 + c3o16 * xoff - c1o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c3o64 - c1o16 * xoff + c3o16 * yoff + c3o16 * zoff) +
-      press_NEB * (c9o64 - c3o16 * xoff - c3o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position NEB 0.25, 0.25, -0.25
-real CompressibleOffsetSquarePressureInterpolator::calcPressBNE()
-{
-   return   press_NET * (c9o64 - c3o16 * xoff - c3o16 * yoff - c9o16 * zoff) +
-      press_NWT * (c3o64 + c3o16 * xoff - c1o16 * yoff - c3o16 * zoff) +
-      press_SET * (c3o64 - c1o16 * xoff + c3o16 * yoff - c3o16 * zoff) +
-      press_SWT * (c1o64 + c1o16 * xoff + c1o16 * yoff - c1o16 * zoff) +
-      press_SWB * (c3o64 + c3o16 * xoff + c3o16 * yoff + c1o16 * zoff) +
-      press_NWB * (c9o64 + c9o16 * xoff - c3o16 * yoff + c3o16 * zoff) +
-      press_SEB * (c9o64 - c3o16 * xoff + c9o16 * yoff + c3o16 * zoff) +
-      press_NEB * (c27o64 - c9o16 * xoff - c9o16 * yoff + c9o16 * zoff);
-}
-//////////////////////////////////////////////////////////////////////////
-//Position C 0.0, 0.0, 0.0
-void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedNodeFC(real* f, real omega)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   real press  =  press_NET * (c1o8 - c1o4 * xoff - c1o4 * yoff - c1o4 * zoff) +
-      press_NWT * (c1o8 + c1o4 * xoff - c1o4 * yoff - c1o4 * zoff) +
-      press_SET * (c1o8 - c1o4 * xoff + c1o4 * yoff - c1o4 * zoff) +
-      press_SWT * (c1o8 + c1o4 * xoff + c1o4 * yoff - c1o4 * zoff) +
-      press_NEB * (c1o8 - c1o4 * xoff - c1o4 * yoff + c1o4 * zoff) +
-      press_NWB * (c1o8 + c1o4 * xoff - c1o4 * yoff + c1o4 * zoff) +
-      press_SEB * (c1o8 - c1o4 * xoff + c1o4 * yoff + c1o4 * zoff) +
-      press_SWB * (c1o8 + c1o4 * xoff + c1o4 * yoff + c1o4 * zoff);
-   real vx1  = a0;
-   real vx2  = b0;
-   real vx3  = c0;
-  
-   
-   real rho = press ;//+ (ax+by+cz)/3.;
-
-   real laplaceRho = (xoff!=c0o1 || yoff!=c0o1 || zoff!= c0o1) ? c0o1 :(-c3o1*(by*by+ax*ax+cz*cz)-c6o1*(ay*bx+bz*cy+az*cx))*(c1o1+rho);
-
-   rho=rho-laplaceRho*c1o4;
-
-   real eps_new = c2o1;
-   real o  = omega;
-   //bulk viscosity
-   real oP = OxxPyyPzzC;
-
-   real mfcbb = c0o1;
-   real mfabb = c0o1;
-   real mfbcb = c0o1;
-   real mfbab = c0o1;
-   real mfbbc = c0o1;
-   real mfbba = c0o1;
-   real mfccb = c0o1;
-   real mfaab = c0o1;
-   real mfcab = c0o1;
-   real mfacb = c0o1;
-   real mfcbc = c0o1;
-   real mfaba = c0o1;
-   real mfcba = c0o1;
-   real mfabc = c0o1;
-   real mfbcc = c0o1;
-   real mfbaa = c0o1;
-   real mfbca = c0o1;
-   real mfbac = c0o1;
-   real mfbbb = c0o1;
-   real mfccc = c0o1;
-   real mfaac = c0o1;
-   real mfcac = c0o1;
-   real mfacc = c0o1;
-   real mfcca = c0o1;
-   real mfaaa = c0o1;
-   real mfcaa = c0o1;
-   real mfaca = c0o1;
-
-   mfaaa = rho; // if drho is interpolated directly
-
-   real vx1Sq = vx1*vx1;
-   real vx2Sq = vx2*vx2;
-   real vx3Sq = vx3*vx3;
-   real oMdrho = c1o1;
-   //oMdrho = c1o1 - mfaaa;
-
-   //2.f
-   // linear combinations
-
-/////////////////////////
-   real mxxPyyPzz = mfaaa    -c2o3*(ax+by+cz)*eps_new/oP*(c1o1+press);
-
-   real mxxMyy    = -c2o3*((ax - by)+kxxMyyAverage)*eps_new/o * (c1o1 + press);
-   real mxxMzz    = -c2o3*((ax - cz)+kxxMzzAverage)*eps_new/o * (c1o1 + press);
-
-   mfabb     = -c1o3 * ((bz + cy)+kyzAverage)*eps_new/o * (c1o1 + press);
-   mfbab     = -c1o3 * ((az + cx)+kxzAverage)*eps_new/o * (c1o1 + press);
-   mfbba     = -c1o3 * ((ay + bx)+kxyAverage)*eps_new/o * (c1o1 + press);
-
-   ////////////////////////
-   // linear combinations back
-   mfcaa = c1o3 * (mxxMyy +       mxxMzz + mxxPyyPzz);
-   mfaca = c1o3 * (-c2o1 * mxxMyy +       mxxMzz + mxxPyyPzz);
-   mfaac = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz);
-
-   //three
-   mfbbb = c0o1;
-
-   real mxxyPyzz = c0o1;
-   real mxxyMyzz = c0o1;
-   real mxxzPyyz = c0o1;
-   real mxxzMyyz = c0o1;
-   real mxyyPxzz = c0o1;
-   real mxyyMxzz = c0o1;
-
-   // linear combinations back
-   mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
-   mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
-   mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
-   mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
-   mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
-   mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
-
-   //4.f
-   mfacc = mfaaa*c1o9;
-   mfcac = mfacc;
-   mfcca = mfacc;
-   //5.
-
-   //6.
-   mfccc = mfaaa*c1o27;
-   ////////////////////////////////////////////////////////////////////////////////////
-   //back
-   ////////////////////////////////////////////////////////////////////////////////////
-   //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Z - Dir
-   real m0 =  mfaac * c1o2 +      mfaab * (vx3 - c1o2) + (mfaaa + c1o1 * oMdrho) * (vx3Sq - vx3) * c1o2;
-   real m1 = -mfaac        - c2o1 * mfaab *  vx3         +  mfaaa                * (c1o1 - vx3Sq)              - c1o1 * oMdrho * vx3Sq;
-   real m2 =  mfaac * c1o2 +      mfaab * (vx3 + c1o2) + (mfaaa + c1o1 * oMdrho) * (vx3Sq + vx3) * c1o2;
-   mfaaa = m0;
-   mfaab = m1;
-   mfaac = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfabc * c1o2 +      mfabb * (vx3 - c1o2) + mfaba * (vx3Sq - vx3) * c1o2;
-   m1 = -mfabc        - c2o1 * mfabb *  vx3         + mfaba * (c1o1 - vx3Sq);
-   m2 =  mfabc * c1o2 +      mfabb * (vx3 + c1o2) + mfaba * (vx3Sq + vx3) * c1o2;
-   mfaba = m0;
-   mfabb = m1;
-   mfabc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfacc * c1o2 +      mfacb * (vx3 - c1o2) + (mfaca + c1o3 * oMdrho) * (vx3Sq - vx3) * c1o2;
-   m1 = -mfacc        - c2o1 * mfacb *  vx3         +  mfaca                  * (c1o1 - vx3Sq)              - c1o3 * oMdrho * vx3Sq;
-   m2 =  mfacc * c1o2 +      mfacb * (vx3 + c1o2) + (mfaca + c1o3 * oMdrho) * (vx3Sq + vx3) * c1o2;
-   mfaca = m0;
-   mfacb = m1;
-   mfacc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfbac * c1o2 +      mfbab * (vx3 - c1o2) + mfbaa * (vx3Sq - vx3) * c1o2;
-   m1 = -mfbac        - c2o1 * mfbab *  vx3         + mfbaa * (c1o1 - vx3Sq);
-   m2 =  mfbac * c1o2 +      mfbab * (vx3 + c1o2) + mfbaa * (vx3Sq + vx3) * c1o2;
-   mfbaa = m0;
-   mfbab = m1;
-   mfbac = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 =  mfbbc * c1o2 +      mfbbb * (vx3 - c1o2) + mfbba * (vx3Sq - vx3) * c1o2;
-   m1 = -mfbbc        - c2o1 * mfbbb *  vx3         + mfbba * (c1o1 - vx3Sq);
-   m2 =  mfbbc * c1o2 +      mfbbb * (vx3 + c1o2) + mfbba * (vx3Sq + vx3) * c1o2;
-   mfbba = m0;
-   mfbbb = m1;
-   mfbbc = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 =  mfbcc * c1o2 +      mfbcb * (vx3 - c1o2) + mfbca * (vx3Sq - vx3) * c1o2;
-   m1 = -mfbcc        - c2o1 * mfbcb *  vx3         + mfbca * (c1o1 - vx3Sq);
-   m2 =  mfbcc * c1o2 +      mfbcb * (vx3 + c1o2) + mfbca * (vx3Sq + vx3) * c1o2;
-   mfbca = m0;
-   mfbcb = m1;
-   mfbcc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcac * c1o2 +      mfcab * (vx3 - c1o2) + (mfcaa + c1o3 * oMdrho) * (vx3Sq - vx3) * c1o2;
-   m1 = -mfcac        - c2o1 * mfcab *  vx3         +  mfcaa                  * (c1o1 - vx3Sq)              - c1o3 * oMdrho * vx3Sq;
-   m2 =  mfcac * c1o2 +      mfcab * (vx3 + c1o2) + (mfcaa + c1o3 * oMdrho) * (vx3Sq + vx3) * c1o2;
-   mfcaa = m0;
-   mfcab = m1;
-   mfcac = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 =  mfcbc * c1o2 +      mfcbb * (vx3 - c1o2) + mfcba * (vx3Sq - vx3) * c1o2;
-   m1 = -mfcbc        - c2o1 * mfcbb *  vx3         + mfcba * (c1o1 - vx3Sq);
-   m2 =  mfcbc * c1o2 +      mfcbb * (vx3 + c1o2) + mfcba * (vx3Sq + vx3) * c1o2;
-   mfcba = m0;
-   mfcbb = m1;
-   mfcbc = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 =  mfccc * c1o2 +      mfccb * (vx3 - c1o2) + (mfcca + c1o9 * oMdrho) * (vx3Sq - vx3) * c1o2;
-   m1 = -mfccc        - c2o1 * mfccb *  vx3         +  mfcca                  * (c1o1 - vx3Sq)              - c1o9 * oMdrho * vx3Sq;
-   m2 =  mfccc * c1o2 +      mfccb * (vx3 + c1o2) + (mfcca + c1o9 * oMdrho) * (vx3Sq + vx3) * c1o2;
-   mfcca = m0;
-   mfccb = m1;
-   mfccc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
-   ////////////////////////////////////////////////////////////////////////////////////
-   // Y - Dir
-   m0 =  mfaca * c1o2 +      mfaba * (vx2 - c1o2) + (mfaaa + c1o6 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfaca        - c2o1 * mfaba *  vx2         +  mfaaa                  * (c1o1 - vx2Sq)              - c1o6 * oMdrho * vx2Sq;
-   m2 =  mfaca * c1o2 +      mfaba * (vx2 + c1o2) + (mfaaa + c1o6 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfaaa = m0;
-   mfaba = m1;
-   mfaca = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfacb * c1o2 +      mfabb * (vx2 - c1o2) + (mfaab + c2o3 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfacb        - c2o1 * mfabb *  vx2         +  mfaab                  * (c1o1 - vx2Sq)              - c2o3 * oMdrho * vx2Sq;
-   m2 =  mfacb * c1o2 +      mfabb * (vx2 + c1o2) + (mfaab + c2o3 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfaab = m0;
-   mfabb = m1;
-   mfacb = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfacc * c1o2 +      mfabc * (vx2 - c1o2) + (mfaac + c1o6 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfacc        - c2o1 * mfabc *  vx2         +  mfaac                  * (c1o1 - vx2Sq)              - c1o6 * oMdrho * vx2Sq;
-   m2 =  mfacc * c1o2 +      mfabc * (vx2 + c1o2) + (mfaac + c1o6 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfaac = m0;
-   mfabc = m1;
-   mfacc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfbca * c1o2 +      mfbba * (vx2 - c1o2) + mfbaa * (vx2Sq - vx2) * c1o2;
-   m1 = -mfbca        - c2o1 * mfbba *  vx2         + mfbaa * (c1o1 - vx2Sq);
-   m2 =  mfbca * c1o2 +      mfbba * (vx2 + c1o2) + mfbaa * (vx2Sq + vx2) * c1o2;
-   mfbaa = m0;
-   mfbba = m1;
-   mfbca = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 =  mfbcb * c1o2 +      mfbbb * (vx2 - c1o2) + mfbab * (vx2Sq - vx2) * c1o2;
-   m1 = -mfbcb        - c2o1 * mfbbb *  vx2         + mfbab * (c1o1 - vx2Sq);
-   m2 =  mfbcb * c1o2 +      mfbbb * (vx2 + c1o2) + mfbab * (vx2Sq + vx2) * c1o2;
-   mfbab = m0;
-   mfbbb = m1;
-   mfbcb = m2;
-   /////////b//////////////////////////////////////////////////////////////////////////
-   m0 =  mfbcc * c1o2 +      mfbbc * (vx2 - c1o2) + mfbac * (vx2Sq - vx2) * c1o2;
-   m1 = -mfbcc        - c2o1 * mfbbc *  vx2         + mfbac * (c1o1 - vx2Sq);
-   m2 =  mfbcc * c1o2 +      mfbbc * (vx2 + c1o2) + mfbac * (vx2Sq + vx2) * c1o2;
-   mfbac = m0;
-   mfbbc = m1;
-   mfbcc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcca * c1o2 +      mfcba * (vx2 - c1o2) + (mfcaa + c1o18 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfcca        - c2o1 * mfcba *  vx2         +  mfcaa                   * (c1o1 - vx2Sq)              - c1o18 * oMdrho * vx2Sq;
-   m2 =  mfcca * c1o2 +      mfcba * (vx2 + c1o2) + (mfcaa + c1o18 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfcaa = m0;
-   mfcba = m1;
-   mfcca = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 =  mfccb * c1o2 +      mfcbb * (vx2 - c1o2) + (mfcab + c2o9 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfccb        - c2o1 * mfcbb *  vx2         +  mfcab                  * (c1o1 - vx2Sq)              - c2o9 * oMdrho * vx2Sq;
-   m2 =  mfccb * c1o2 +      mfcbb * (vx2 + c1o2) + (mfcab + c2o9 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfcab = m0;
-   mfcbb = m1;
-   mfccb = m2;
-   /////////c//////////////////////////////////////////////////////////////////////////
-   m0 =  mfccc * c1o2 +      mfcbc * (vx2 - c1o2) + (mfcac + c1o18 * oMdrho) * (vx2Sq - vx2) * c1o2;
-   m1 = -mfccc        - c2o1 * mfcbc *  vx2         +  mfcac                   * (c1o1 - vx2Sq)              - c1o18 * oMdrho * vx2Sq;
-   m2 =  mfccc * c1o2 +      mfcbc * (vx2 + c1o2) + (mfcac + c1o18 * oMdrho) * (vx2Sq + vx2) * c1o2;
-   mfcac = m0;
-   mfcbc = m1;
-   mfccc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
-   ////////////////////////////////////////////////////////////////////////////////////
-   // X - Dir
-   m0 =  mfcaa * c1o2 +      mfbaa * (vx1 - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcaa        - c2o1 * mfbaa *  vx1         +  mfaaa                   * (c1o1 - vx1Sq)              - c1o36 * oMdrho * vx1Sq;
-   m2 =  mfcaa * c1o2 +      mfbaa * (vx1 + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfaaa = m0;
-   mfbaa = m1;
-   mfcaa = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcba * c1o2 +      mfbba * (vx1 - c1o2) + (mfaba + c1o9 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcba        - c2o1 * mfbba *  vx1         +  mfaba                  * (c1o1 - vx1Sq)              - c1o9 * oMdrho * vx1Sq;
-   m2 =  mfcba * c1o2 +      mfbba * (vx1 + c1o2) + (mfaba + c1o9 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfaba = m0;
-   mfbba = m1;
-   mfcba = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcca * c1o2 +      mfbca * (vx1 - c1o2) + (mfaca + c1o36 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcca        - c2o1 * mfbca *  vx1         +  mfaca                   * (c1o1 - vx1Sq)              - c1o36 * oMdrho * vx1Sq;
-   m2 =  mfcca * c1o2 +      mfbca * (vx1 + c1o2) + (mfaca + c1o36 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfaca = m0;
-   mfbca = m1;
-   mfcca = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcab * c1o2 +      mfbab * (vx1 - c1o2) + (mfaab + c1o9 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcab        - c2o1 * mfbab *  vx1         +  mfaab                  * (c1o1 - vx1Sq)              - c1o9 * oMdrho * vx1Sq;
-   m2 =  mfcab * c1o2 +      mfbab * (vx1 + c1o2) + (mfaab + c1o9 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfaab = m0;
-   mfbab = m1;
-   mfcab = m2;
-   ///////////b////////////////////////////////////////////////////////////////////////
-   m0 =  mfcbb * c1o2 +      mfbbb * (vx1 - c1o2) + (mfabb + c4o9 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcbb        - c2o1 * mfbbb *  vx1         +  mfabb                  * (c1o1 - vx1Sq)              - c4o9 * oMdrho * vx1Sq;
-   m2 =  mfcbb * c1o2 +      mfbbb * (vx1 + c1o2) + (mfabb + c4o9 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfabb = m0;
-   mfbbb = m1;
-   mfcbb = m2;
-   ///////////b////////////////////////////////////////////////////////////////////////
-   m0 =  mfccb * c1o2 +      mfbcb * (vx1 - c1o2) + (mfacb + c1o9 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfccb        - c2o1 * mfbcb *  vx1         +  mfacb                  * (c1o1 - vx1Sq)              - c1o9 * oMdrho * vx1Sq;
-   m2 =  mfccb * c1o2 +      mfbcb * (vx1 + c1o2) + (mfacb + c1o9 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfacb = m0;
-   mfbcb = m1;
-   mfccb = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-   ////////////////////////////////////////////////////////////////////////////////////
-   m0 =  mfcac * c1o2 +      mfbac * (vx1 - c1o2) + (mfaac + c1o36 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcac        - c2o1 * mfbac *  vx1         +  mfaac                   * (c1o1 - vx1Sq)              - c1o36 * oMdrho * vx1Sq;
-   m2 =  mfcac * c1o2 +      mfbac * (vx1 + c1o2) + (mfaac + c1o36 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfaac = m0;
-   mfbac = m1;
-   mfcac = m2;
-   ///////////c////////////////////////////////////////////////////////////////////////
-   m0 =  mfcbc * c1o2 +      mfbbc * (vx1 - c1o2) + (mfabc + c1o9 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfcbc        - c2o1 * mfbbc *  vx1         +  mfabc                  * (c1o1 - vx1Sq)              - c1o9 * oMdrho * vx1Sq;
-   m2 =  mfcbc * c1o2 +      mfbbc * (vx1 + c1o2) + (mfabc + c1o9 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfabc = m0;
-   mfbbc = m1;
-   mfcbc = m2;
-   ///////////c////////////////////////////////////////////////////////////////////////
-   m0 =  mfccc * c1o2 +      mfbcc * (vx1 - c1o2) + (mfacc + c1o36 * oMdrho) * (vx1Sq - vx1) * c1o2;
-   m1 = -mfccc        - c2o1 * mfbcc *  vx1         +  mfacc                   * (c1o1 - vx1Sq)              - c1o36 * oMdrho * vx1Sq;
-   m2 =  mfccc * c1o2 +      mfbcc * (vx1 + c1o2) + (mfacc + c1o36 * oMdrho) * (vx1Sq + vx1) * c1o2;
-   mfacc = m0;
-   mfbcc = m1;
-   mfccc = m2;
-   ////////////////////////////////////////////////////////////////////////////////////
-
-   f[dP00]    = mfcbb;
-   f[dM00]    = mfabb;
-   f[d0P0]    = mfbcb;
-   f[d0M0]    = mfbab;
-   f[d00P]    = mfbbc;
-   f[d00M]    = mfbba;
-   f[dPP0]   = mfccb;
-   f[dMM0]   = mfaab;
-   f[dPM0]   = mfcab;
-   f[dMP0]   = mfacb;
-   f[dP0P]   = mfcbc;
-   f[dM0M]   = mfaba;
-   f[dP0M]   = mfcba;
-   f[dM0P]   = mfabc;
-   f[d0PP]   = mfbcc;
-   f[d0MM]   = mfbaa;
-   f[d0PM]   = mfbca;
-   f[d0MP]   = mfbac;
-   f[d000] = mfbbb;
-   f[dPPP]  = mfccc;
-   f[dPMP]  = mfcac;
-   f[dPPM]  = mfcca;
-   f[dPMM]  = mfcaa;
-   f[dMPP]  = mfacc;
-   f[dMMP]  = mfaac;
-   f[dMPM]  = mfaca;
-   f[dMMM]  = mfaaa;
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3)
-{
-	vx1  = a0 + ax*x + ay*y + az*z + axx*x*x + ayy*y*y + azz*z*z + axy*x*y + axz*x*z + ayz*y*z+axyz*x*y*z;
-	vx2  = b0 + bx*x + by*y + bz*z + bxx*x*x + byy*y*y + bzz*z*z + bxy*x*y + bxz*x*z + byz*y*z+bxyz*x*y*z;
-	vx3  = c0 + cx*x + cy*y + cz*z + cxx*x*x + cyy*y*y + czz*z*z + cxy*x*y + cxz*x*z + cyz*y*z+cxyz*x*y*z;
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedShearStress(real x, real y, real z,real& tauxx, real& tauyy, real& tauzz,real& tauxy, real& tauxz, real& tauyz)
-{
-	tauxx=ax+c2o1*axx*x+axy*y+axz*z+axyz*y*z;
-	tauyy=by+c2o1*byy*y+bxy*x+byz*z+bxyz*x*z;
-	tauzz=cz+c2o1*czz*z+cxz*x+cyz*y+cxyz*x*y;
-	tauxy=c1o2*((ay+c2o1*ayy*y+axy*x+ayz*z+axyz*x*z)+(bx+c2o1*bxx*x+bxy*y+bxz*z+bxyz*y*z));
-	tauxz=c1o2*((az+c2o1*azz*z+axz*x+ayz*y+axyz*x*y)+(cx+c2o1*cxx*x+cxy*y+cxz*z+cxyz*y*z));
-	tauyz=c1o2*((bz+c2o1*bzz*z+bxz*x+byz*y+bxyz*x*y)+(cy+c2o1*cyy*y+cxy*x+cyz*z+cxyz*x*z));
-}
-//////////////////////////////////////////////////////////////////////////
-void CompressibleOffsetSquarePressureInterpolator::setBulkOmegaToOmega(bool value)
-{
-   bulkOmegaToOmega = value;
-}
-
diff --git a/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h b/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h
deleted file mode 100644
index 8a6308f947f79305079b1fa45edff0fb9c703a55..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h
+++ /dev/null
@@ -1,81 +0,0 @@
-#ifndef CompressibleOffsetSquarePressureInterpolationProcessor_H_
-#define CompressibleOffsetSquarePressureInterpolationProcessor_H_
-
-#include "Interpolator.h"
-#include "D3Q27System.h"
-
-//////////////////////////////////////////////////////////////////////////
-//it works only for cascaded LBM
-//super compact interpolation method by Martin Geier
-//////////////////////////////////////////////////////////////////////////
-
-class CompressibleOffsetSquarePressureInterpolator;
-
-class CompressibleOffsetSquarePressureInterpolator : public Interpolator
-{
-public:
-   CompressibleOffsetSquarePressureInterpolator();
-   CompressibleOffsetSquarePressureInterpolator(real omegaC, real omegaF);
-   ~CompressibleOffsetSquarePressureInterpolator() override;
-   InterpolationProcessorPtr clone() override;
-   void setOmegas(real omegaC, real omegaF) override;
-   void interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF) override;
-   void interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF, real xoff, real yoff, real zoff) override;
-   void interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC) override; 
-   void interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC, real xoff, real yoff, real zoff) override; 
-   void setBulkOmegaToOmega(bool value);
-protected:   
-private:
-   real omegaC{0.0}, omegaF{0.0};
-   real a0, ax, ay, az, axx, ayy, azz, axy, axz, ayz, b0, bx, by, bz, bxx, byy, bzz, bxy, bxz, byz, c0, cx, cy, cz, cxx, cyy, czz, cxy, cxz, cyz, axyz, bxyz, cxyz;
-   real xoff,    yoff,    zoff;
-   real xoff_sq, yoff_sq, zoff_sq;
-   real press_SWT, press_NWT, press_NET, press_SET, press_SWB, press_NWB, press_NEB, press_SEB;
-
-   real  f_E,  f_N,  f_T,  f_NE,  f_SE,  f_BE,  f_TE,  f_TN,  f_BN,  f_TNE,  f_TNW,  f_TSE,  f_TSW,  f_ZERO;
-   real  x_E,  x_N,  x_T,  x_NE,  x_SE,  x_BE,  x_TE,  x_TN,  x_BN,  x_TNE,  x_TNW,  x_TSE,  x_TSW,  x_ZERO;
-   real  y_E,  y_N,  y_T,  y_NE,  y_SE,  y_BE,  y_TE,  y_TN,  y_BN,  y_TNE,  y_TNW,  y_TSE,  y_TSW,  y_ZERO;
-   real  z_E,  z_N,  z_T,  z_NE,  z_SE,  z_BE,  z_TE,  z_TN,  z_BN,  z_TNE,  z_TNW,  z_TSE,  z_TSW,  z_ZERO;
-   real xy_E, xy_N, xy_T, xy_NE, xy_SE, xy_BE, xy_TE, xy_TN, xy_BN, xy_TNE, xy_TNW, xy_TSE, xy_TSW/*, xy_ZERO*/;
-   real xz_E, xz_N, xz_T, xz_NE, xz_SE, xz_BE, xz_TE, xz_TN, xz_BN, xz_TNE, xz_TNW, xz_TSE, xz_TSW/*, xz_ZERO*/;
-   real yz_E, yz_N, yz_T, yz_NE, yz_SE, yz_BE, yz_TE, yz_TN, yz_BN, yz_TNE, yz_TNW, yz_TSE, yz_TSW/*, yz_ZERO*/;
-
-   real kxyAverage, kyzAverage, kxzAverage, kxxMyyAverage, kxxMzzAverage; 
-
-//   real a,b,c;
-
-   // bulk viscosity
-   bool bulkOmegaToOmega;
-   real OxxPyyPzzC;
-   real OxxPyyPzzF;
-
-   void setOffsets(real xoff, real yoff, real zoff) override;
-   void calcMoments(const real* const f, real omega, real& rho, real& vx1, real& vx2, real& vx3, 
-      real& kxy, real& kyz, real& kxz, real& kxxMyy, real& kxxMzz);
-   void calcInterpolatedCoefficiets(const D3Q27ICell& icell, real omega, real eps_new) override;
-   void calcInterpolatedNodeCF(real* f, real omega, real x, real y, real z, real press, real xs, real ys, real zs);
-   real calcPressBSW();
-   real calcPressTSW();
-   real calcPressTSE();
-   real calcPressBSE();
-   real calcPressBNW();
-   real calcPressTNW();
-   real calcPressTNE();
-   real calcPressBNE();
-   void calcInterpolatedNodeFC(real* f, real omega) override;
-   void calcInterpolatedVelocity(real x, real y, real z,real& vx1, real& vx2, real& vx3) override;
-   void calcInterpolatedShearStress(real x, real y, real z,real& tauxx, real& tauyy, real& tauzz,real& tauxy, real& tauxz, real& tauyz) override;
-};
-
-//////////////////////////////////////////////////////////////////////////
-inline void CompressibleOffsetSquarePressureInterpolator::interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF)
-{
-   this->interpolateCoarseToFine(icellC, icellF, 0.0, 0.0, 0.0);
-}
-//////////////////////////////////////////////////////////////////////////
-inline void CompressibleOffsetSquarePressureInterpolator::interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC)
-{
-   this->interpolateFineToCoarse(icellF, icellC, 0.0, 0.0, 0.0);
-}
-
-#endif
diff --git a/src/cpu/core/LBM/ICell.h b/src/cpu/core/LBM/Interpolation/ICell.h
similarity index 100%
rename from src/cpu/core/LBM/ICell.h
rename to src/cpu/core/LBM/Interpolation/ICell.h
diff --git a/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp b/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp
index d8f7efac4cfab144e163bb0263993dc8ba997d17..5858172934a1fd6f0e0e0de270cb9c436d0d2f17 100644
--- a/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp
+++ b/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp
@@ -135,9 +135,9 @@ void IncompressibleOffsetInterpolator::calcInterpolatedCoefficiets(const D3Q27IC
    calcMoments(icell.BNE,omega,press_NEB,vx1_NEB,vx2_NEB,vx3_NEB, kxyFromfcNEQ_NEB, kyzFromfcNEQ_NEB, kxzFromfcNEQ_NEB, kxxMyyFromfcNEQ_NEB, kxxMzzFromfcNEQ_NEB);
    calcMoments(icell.BSE,omega,press_SEB,vx1_SEB,vx2_SEB,vx3_SEB, kxyFromfcNEQ_SEB, kyzFromfcNEQ_SEB, kxzFromfcNEQ_SEB, kxxMyyFromfcNEQ_SEB, kxxMzzFromfcNEQ_SEB);
 
-   //LBMReal dxRho=c1o4*((press_NET-press_SWB)+(press_SET-press_NWB)+(press_NEB-press_SWT)+(press_SEB-press_NWT));
-   //LBMReal dyRho=c1o4*((press_NET-press_SWB)-(press_SET-press_NWB)+(press_NEB-press_SWT)-(press_SEB-press_NWT));
-   //LBMReal dzRho=c1o4*((press_NET-press_SWB)+(press_SET-press_NWB)-(press_NEB-press_SWT)-(press_SEB-press_NWT));
+   //real dxRho=c1o4*((press_NET-press_SWB)+(press_SET-press_NWB)+(press_NEB-press_SWT)+(press_SEB-press_NWT));
+   //real dyRho=c1o4*((press_NET-press_SWB)-(press_SET-press_NWB)+(press_NEB-press_SWT)-(press_SEB-press_NWT));
+   //real dzRho=c1o4*((press_NET-press_SWB)+(press_SET-press_NWB)-(press_NEB-press_SWT)-(press_SEB-press_NWT));
 
    //   kxyFromfcNEQ_SWT+=vx1_SWT*dyRho+vx2_SWT*dxRho;
    //   kxyFromfcNEQ_NWT+=vx1_NWT*dyRho+vx2_NWT*dxRho;
@@ -731,7 +731,7 @@ void IncompressibleOffsetInterpolator::calcInterpolatedNodeFC(real* f, real omeg
 
    real eps_new = c2o1;
    real o  = omega;
-//   LBMReal op = 1.;
+//   real op = 1.;
 
    //f_E    = eps_new *((5.*ax*o + 5.*by*o + 5.*cz*o - 8.*ax*op + 4.*by*op + 4.*cz*op)/(54.*o*op));
    //f_N    = f_E + eps_new *((2.*(ax - by))/(9.*o));
@@ -794,19 +794,19 @@ void IncompressibleOffsetInterpolator::calcInterpolatedNodeFC(real* f, real omeg
 //////////////////////////////////////////////////////////////////////////
 void IncompressibleOffsetInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3)
 {
-	vx1  = a0 + ax*x + ay*y + az*z + axx*x*x + ayy*y*y + azz*z*z + axy*x*y + axz*x*z + ayz*y*z+axyz*x*y*z;
-	vx2  = b0 + bx*x + by*y + bz*z + bxx*x*x + byy*y*y + bzz*z*z + bxy*x*y + bxz*x*z + byz*y*z+bxyz*x*y*z;
-	vx3  = c0 + cx*x + cy*y + cz*z + cxx*x*x + cyy*y*y + czz*z*z + cxy*x*y + cxz*x*z + cyz*y*z+cxyz*x*y*z;
+    vx1  = a0 + ax*x + ay*y + az*z + axx*x*x + ayy*y*y + azz*z*z + axy*x*y + axz*x*z + ayz*y*z+axyz*x*y*z;
+    vx2  = b0 + bx*x + by*y + bz*z + bxx*x*x + byy*y*y + bzz*z*z + bxy*x*y + bxz*x*z + byz*y*z+bxyz*x*y*z;
+    vx3  = c0 + cx*x + cy*y + cz*z + cxx*x*x + cyy*y*y + czz*z*z + cxy*x*y + cxz*x*z + cyz*y*z+cxyz*x*y*z;
 }
 //////////////////////////////////////////////////////////////////////////
 void IncompressibleOffsetInterpolator::calcInterpolatedShearStress(real x, real y, real z,real& tauxx, real& tauyy, real& tauzz,real& tauxy, real& tauxz, real& tauyz)
 {
     using namespace vf::basics::constant;
 
-	tauxx=ax+c2o1*axx*x+axy*y+axz*z+axyz*y*z;
-	tauyy=by+c2o1*byy*y+bxy*x+byz*z+bxyz*x*z;
-	tauzz=cz+c2o1*czz*z+cxz*x+cyz*y+cxyz*x*y;
-	tauxy=c1o2*((ay+c2o1*ayy*y+axy*x+ayz*z+axyz*x*z)+(bx+c2o1*bxx*x+bxy*y+bxz*z+bxyz*y*z));
-	tauxz=c1o2*((az+c2o1*azz*z+axz*x+ayz*y+axyz*x*y)+(cx+c2o1*cxx*x+cxy*y+cxz*z+cxyz*y*z));
-	tauyz=c1o2*((bz+c2o1*bzz*z+bxz*x+byz*y+bxyz*x*y)+(cy+c2o1*cyy*y+cxy*x+cyz*z+cxyz*x*z));
+    tauxx=ax+c2o1*axx*x+axy*y+axz*z+axyz*y*z;
+    tauyy=by+c2o1*byy*y+bxy*x+byz*z+bxyz*x*z;
+    tauzz=cz+c2o1*czz*z+cxz*x+cyz*y+cxyz*x*y;
+    tauxy=c1o2*((ay+c2o1*ayy*y+axy*x+ayz*z+axyz*x*z)+(bx+c2o1*bxx*x+bxy*y+bxz*z+bxyz*y*z));
+    tauxz=c1o2*((az+c2o1*azz*z+axz*x+ayz*y+axyz*x*y)+(cx+c2o1*cxx*x+cxy*y+cxz*z+cxyz*y*z));
+    tauyz=c1o2*((bz+c2o1*bzz*z+bxz*x+byz*y+bxyz*x*y)+(cy+c2o1*cyy*y+cxy*x+cyz*z+cxyz*x*z));
 }
diff --git a/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.h b/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.h
index 2fee5d62c30162e0f2af514e3551c8aa93ca9dab..1944199fd22857bd80c84cb6fcaba43ed4133827 100644
--- a/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.h
+++ b/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.h
@@ -43,7 +43,7 @@ private:
 
    real kxyAverage, kyzAverage, kxzAverage, kxxMyyAverage, kxxMzzAverage; 
 
-//   LBMReal a,b,c;
+//   real a,b,c;
 
    void setOffsets(real xoff, real yoff, real zoff) override;
    void calcMoments(const real* const f, real omega, real& rho, real& vx1, real& vx2, real& vx3, 
diff --git a/src/cpu/core/LBM/CompressibleCumulantLBMKernel.cpp b/src/cpu/core/LBM/K15CompressibleNavierStokes.cpp
similarity index 72%
rename from src/cpu/core/LBM/CompressibleCumulantLBMKernel.cpp
rename to src/cpu/core/LBM/K15CompressibleNavierStokes.cpp
index ded8dff43910db33bd591cd4546f1dc73cc1110b..afbeb1b630b6853c85c5565fbbfdf5009a09e3ad 100644
--- a/src/cpu/core/LBM/CompressibleCumulantLBMKernel.cpp
+++ b/src/cpu/core/LBM/K15CompressibleNavierStokes.cpp
@@ -1,7 +1,7 @@
-#include "CompressibleCumulantLBMKernel.h"
+#include "K15CompressibleNavierStokes.h"
 #include "D3Q27System.h"
 #include "Interpolator.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "DataSet3D.h"
 #include "Block3D.h"
 
@@ -11,29 +11,29 @@
 using namespace vf::basics::constant;
 
 //////////////////////////////////////////////////////////////////////////
-CompressibleCumulantLBMKernel::CompressibleCumulantLBMKernel()
+K15CompressibleNavierStokes::K15CompressibleNavierStokes()
 {
    this->compressible = true;
-   this->parameter = CompressibleCumulantLBMKernel::NORMAL;
+   this->parameter = K15CompressibleNavierStokes::NORMAL;
    this->OxyyMxzz = c1o1;
    this->bulkOmegaToOmega = false;
    this->OxxPyyPzz = c1o1;
 }
 //////////////////////////////////////////////////////////////////////////
-CompressibleCumulantLBMKernel::~CompressibleCumulantLBMKernel(void)
+K15CompressibleNavierStokes::~K15CompressibleNavierStokes(void)
 = default;
 //////////////////////////////////////////////////////////////////////////
-void CompressibleCumulantLBMKernel::initDataSet()
+void K15CompressibleNavierStokes::initDataSet()
 {
-   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
+   SPtr<DistributionArray3D> d(new EsoSplit(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
    dataSet->setFdistributions(d);
 }
 //////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> CompressibleCumulantLBMKernel::clone()
+SPtr<LBMKernel> K15CompressibleNavierStokes::clone()
 {
-   SPtr<LBMKernel> kernel(new CompressibleCumulantLBMKernel());
+   SPtr<LBMKernel> kernel(new K15CompressibleNavierStokes());
    kernel->setNX(nx);
-   dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->initDataSet();
+   dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->initDataSet();
    kernel->setCollisionFactor(this->collFactor);
    kernel->setBCSet(bcSet->clone(kernel));
    kernel->setWithForcing(withForcing);
@@ -47,30 +47,31 @@ SPtr<LBMKernel> CompressibleCumulantLBMKernel::clone()
    switch (parameter)
    {
    case NORMAL:
-      dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->OxyyMxzz = c1o1;
+      dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->OxyyMxzz = c1o1;
       break;
    case MAGIC:
-      dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->OxyyMxzz = c2o1 +(-collFactor);
+      dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->OxyyMxzz = c2o1 +(-collFactor);
       break;
    }
 
    if (bulkOmegaToOmega)
    {
-      dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->OxxPyyPzz = collFactor;
+      dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->OxxPyyPzz = collFactor;
    }
    else
    {
-      dynamicPointerCast<CompressibleCumulantLBMKernel>(kernel)->OxxPyyPzz = c1o1;
+      dynamicPointerCast<K15CompressibleNavierStokes>(kernel)->OxxPyyPzz = c1o1;
    }
    return kernel;
 }
 //////////////////////////////////////////////////////////////////////////
-void CompressibleCumulantLBMKernel::calculate(int step)
+void K15CompressibleNavierStokes::calculate(int step)
 {
    using namespace D3Q27System;
    using namespace std;
+   using namespace vf::lbm::dir;
 
-   //timer.resetAndStart();
+   //timer.start();
 
    //initializing of forcing stuff 
    if (withForcing)
@@ -91,15 +92,15 @@ void CompressibleCumulantLBMKernel::calculate(int step)
       muForcingX2.DefineVar("nu", &muNu);
       muForcingX3.DefineVar("nu", &muNu);
 
-//      LBMReal forcingX1 = 0;
-//      LBMReal forcingX2 = 0;
-//      LBMReal forcingX3 = 0;
+//      real forcingX1 = 0;
+//      real forcingX2 = 0;
+//      real forcingX3 = 0;
    }
    /////////////////////////////////////
 
-   localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
+   localDistributions = dynamicPointerCast<EsoSplit>(dataSet->getFdistributions())->getLocalDistributions();
+   nonLocalDistributions = dynamicPointerCast<EsoSplit>(dataSet->getFdistributions())->getNonLocalDistributions();
+   zeroDistributions = dynamicPointerCast<EsoSplit>(dataSet->getFdistributions())->getZeroDistributions();
 
    SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
@@ -116,13 +117,6 @@ void CompressibleCumulantLBMKernel::calculate(int step)
 
    real omega = collFactor;
 
-
-   //#pragma omp parallel num_threads(8)
-   {
-      //   int i = omp_get_thread_num();
-      //   printf_s("Hello from thread %d\n", i);
-      //}
-   //#pragma omp for 
       for (int x3 = minX3; x3 < maxX3; x3++)
       {
          for (int x2 = minX2; x2 < maxX2; x2++)
@@ -155,33 +149,33 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   // a b c
                   //-1 0 1
 
-                  real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-                  real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-                  real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-                  real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-                  real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-                  real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-                  real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-                  real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-                  real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-                  real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-                  real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-                  real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-                  real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                  real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-                  real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-                  real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-                  real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-                  real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-                  real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-                  real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-                  real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-                  real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-                  real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                  real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                  real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                  real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
+                  real mfcbb = (*this->localDistributions)(eP00, x1, x2, x3);
+                  real mfbcb = (*this->localDistributions)(e0P0, x1, x2, x3);
+                  real mfbbc = (*this->localDistributions)(e00P, x1, x2, x3);
+                  real mfccb = (*this->localDistributions)(ePP0, x1, x2, x3);
+                  real mfacb = (*this->localDistributions)(eMP0, x1p, x2, x3);
+                  real mfcbc = (*this->localDistributions)(eP0P, x1, x2, x3);
+                  real mfabc = (*this->localDistributions)(eM0P, x1p, x2, x3);
+                  real mfbcc = (*this->localDistributions)(e0PP, x1, x2, x3);
+                  real mfbac = (*this->localDistributions)(e0MP, x1, x2p, x3);
+                  real mfccc = (*this->localDistributions)(ePPP, x1, x2, x3);
+                  real mfacc = (*this->localDistributions)(eMPP, x1p, x2, x3);
+                  real mfcac = (*this->localDistributions)(ePMP, x1, x2p, x3);
+                  real mfaac = (*this->localDistributions)(eMMP, x1p, x2p, x3);
+
+                  real mfabb = (*this->nonLocalDistributions)(eM00, x1p, x2, x3);
+                  real mfbab = (*this->nonLocalDistributions)(e0M0, x1, x2p, x3);
+                  real mfbba = (*this->nonLocalDistributions)(e00M, x1, x2, x3p);
+                  real mfaab = (*this->nonLocalDistributions)(eMM0, x1p, x2p, x3);
+                  real mfcab = (*this->nonLocalDistributions)(ePM0, x1, x2p, x3);
+                  real mfaba = (*this->nonLocalDistributions)(eM0M, x1p, x2, x3p);
+                  real mfcba = (*this->nonLocalDistributions)(eP0M, x1, x2, x3p);
+                  real mfbaa = (*this->nonLocalDistributions)(e0MM, x1, x2p, x3p);
+                  real mfbca = (*this->nonLocalDistributions)(e0PM, x1, x2, x3p);
+                  real mfaaa = (*this->nonLocalDistributions)(eMMM, x1p, x2p, x3p);
+                  real mfcaa = (*this->nonLocalDistributions)(ePMM, x1, x2p, x3p);
+                  real mfaca = (*this->nonLocalDistributions)(eMPM, x1p, x2, x3p);
+                  real mfcca = (*this->nonLocalDistributions)(ePPM, x1, x2, x3p);
 
                   real mfbbb = (*this->zeroDistributions)(x1, x2, x3);
 
@@ -231,14 +225,6 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   vy2 = vvy*vvy;
                   vz2 = vvz*vvz;
                   ////////////////////////////////////////////////////////////////////////////////////
-                  //LBMReal wadjust;
-                  //LBMReal qudricLimitP = 0.01f;// * 0.0001f;
-                  //LBMReal qudricLimitM = 0.01f;// * 0.0001f;
-                  //LBMReal qudricLimitD = 0.01f;// * 0.001f;
-                  //LBMReal s9 = minusomega;
-                  //test
-                  //s9 = 0.;
-                  ////////////////////////////////////////////////////////////////////////////////////
                   //Hin
                   ////////////////////////////////////////////////////////////////////////////////////
                   // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
@@ -250,7 +236,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfaaa = m0;
                   m0 += c1o36 * oMdrho;
                   mfaab = m1-m0 * vvz;
-                  mfaac = m2-c2o1*	m1 * vvz+vz2 * m0;
+                  mfaac = m2-c2o1*    m1 * vvz+vz2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfaba+mfabc;
                   m1 = mfabc-mfaba;
@@ -258,7 +244,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfaba = m0;
                   m0 += c1o9 * oMdrho;
                   mfabb = m1-m0 * vvz;
-                  mfabc = m2-c2o1*	m1 * vvz+vz2 * m0;
+                  mfabc = m2-c2o1*    m1 * vvz+vz2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfaca+mfacc;
                   m1 = mfacc-mfaca;
@@ -266,7 +252,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfaca = m0;
                   m0 += c1o36 * oMdrho;
                   mfacb = m1-m0 * vvz;
-                  mfacc = m2-c2o1*	m1 * vvz+vz2 * m0;
+                  mfacc = m2-c2o1*    m1 * vvz+vz2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfbaa+mfbac;
@@ -275,7 +261,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfbaa = m0;
                   m0 += c1o9 * oMdrho;
                   mfbab = m1-m0 * vvz;
-                  mfbac = m2-c2o1*	m1 * vvz+vz2 * m0;
+                  mfbac = m2-c2o1*    m1 * vvz+vz2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfbba+mfbbc;
                   m1 = mfbbc-mfbba;
@@ -283,7 +269,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfbba = m0;
                   m0 += c4o9 * oMdrho;
                   mfbbb = m1-m0 * vvz;
-                  mfbbc = m2-c2o1*	m1 * vvz+vz2 * m0;
+                  mfbbc = m2-c2o1*    m1 * vvz+vz2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfbca+mfbcc;
                   m1 = mfbcc-mfbca;
@@ -291,7 +277,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfbca = m0;
                   m0 += c1o9 * oMdrho;
                   mfbcb = m1-m0 * vvz;
-                  mfbcc = m2-c2o1*	m1 * vvz+vz2 * m0;
+                  mfbcc = m2-c2o1*    m1 * vvz+vz2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfcaa+mfcac;
@@ -300,7 +286,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfcaa = m0;
                   m0 += c1o36 * oMdrho;
                   mfcab = m1-m0 * vvz;
-                  mfcac = m2-c2o1*	m1 * vvz+vz2 * m0;
+                  mfcac = m2-c2o1*    m1 * vvz+vz2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfcba+mfcbc;
                   m1 = mfcbc-mfcba;
@@ -308,7 +294,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfcba = m0;
                   m0 += c1o9 * oMdrho;
                   mfcbb = m1-m0 * vvz;
-                  mfcbc = m2-c2o1*	m1 * vvz+vz2 * m0;
+                  mfcbc = m2-c2o1*    m1 * vvz+vz2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfcca+mfccc;
                   m1 = mfccc-mfcca;
@@ -316,7 +302,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfcca = m0;
                   m0 += c1o36 * oMdrho;
                   mfccb = m1-m0 * vvz;
-                  mfccc = m2-c2o1*	m1 * vvz+vz2 * m0;
+                  mfccc = m2-c2o1*    m1 * vvz+vz2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   ////////////////////////////////////////////////////////////////////////////////////
                   // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
@@ -328,14 +314,14 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfaaa = m0;
                   m0 += c1o6 * oMdrho;
                   mfaba = m1-m0 * vvy;
-                  mfaca = m2-c2o1*	m1 * vvy+vy2 * m0;
+                  mfaca = m2-c2o1*    m1 * vvy+vy2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfaab+mfacb;
                   m1 = mfacb-mfaab;
                   m0 = m2+mfabb;
                   mfaab = m0;
                   mfabb = m1-m0 * vvy;
-                  mfacb = m2-c2o1*	m1 * vvy+vy2 * m0;
+                  mfacb = m2-c2o1*    m1 * vvy+vy2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfaac+mfacc;
                   m1 = mfacc-mfaac;
@@ -343,7 +329,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfaac = m0;
                   m0 += c1o18 * oMdrho;
                   mfabc = m1-m0 * vvy;
-                  mfacc = m2-c2o1*	m1 * vvy+vy2 * m0;
+                  mfacc = m2-c2o1*    m1 * vvy+vy2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfbaa+mfbca;
@@ -352,14 +338,14 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfbaa = m0;
                   m0 += c2o3 * oMdrho;
                   mfbba = m1-m0 * vvy;
-                  mfbca = m2-c2o1*	m1 * vvy+vy2 * m0;
+                  mfbca = m2-c2o1*    m1 * vvy+vy2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfbab+mfbcb;
                   m1 = mfbcb-mfbab;
                   m0 = m2+mfbbb;
                   mfbab = m0;
                   mfbbb = m1-m0 * vvy;
-                  mfbcb = m2-c2o1*	m1 * vvy+vy2 * m0;
+                  mfbcb = m2-c2o1*    m1 * vvy+vy2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfbac+mfbcc;
                   m1 = mfbcc-mfbac;
@@ -367,7 +353,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfbac = m0;
                   m0 += c2o9 * oMdrho;
                   mfbbc = m1-m0 * vvy;
-                  mfbcc = m2-c2o1*	m1 * vvy+vy2 * m0;
+                  mfbcc = m2-c2o1*    m1 * vvy+vy2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfcaa+mfcca;
@@ -376,14 +362,14 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfcaa = m0;
                   m0 += c1o6 * oMdrho;
                   mfcba = m1-m0 * vvy;
-                  mfcca = m2-c2o1*	m1 * vvy+vy2 * m0;
+                  mfcca = m2-c2o1*    m1 * vvy+vy2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfcab+mfccb;
                   m1 = mfccb-mfcab;
                   m0 = m2+mfcbb;
                   mfcab = m0;
                   mfcbb = m1-m0 * vvy;
-                  mfccb = m2-c2o1*	m1 * vvy+vy2 * m0;
+                  mfccb = m2-c2o1*    m1 * vvy+vy2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfcac+mfccc;
                   m1 = mfccc-mfcac;
@@ -391,10 +377,10 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfcac = m0;
                   m0 += c1o18 * oMdrho;
                   mfcbc = m1-m0 * vvy;
-                  mfccc = m2-c2o1*	m1 * vvy+vy2 * m0;
+                  mfccc = m2-c2o1*    m1 * vvy+vy2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   ////////////////////////////////////////////////////////////////////////////////////
-                  // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9		Konditionieren
+                  // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9        Konditionieren
                   ////////////////////////////////////////////////////////////////////////////////////
                   // X - Dir
                   m2 = mfaaa+mfcaa;
@@ -403,14 +389,14 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfaaa = m0;
                   m0 += c1o1* oMdrho;
                   mfbaa = m1-m0 * vvx;
-                  mfcaa = m2-c2o1*	m1 * vvx+vx2 * m0;
+                  mfcaa = m2-c2o1*    m1 * vvx+vx2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfaba+mfcba;
                   m1 = mfcba-mfaba;
                   m0 = m2+mfbba;
                   mfaba = m0;
                   mfbba = m1-m0 * vvx;
-                  mfcba = m2-c2o1*	m1 * vvx+vx2 * m0;
+                  mfcba = m2-c2o1*    m1 * vvx+vx2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfaca+mfcca;
                   m1 = mfcca-mfaca;
@@ -418,7 +404,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfaca = m0;
                   m0 += c1o3 * oMdrho;
                   mfbca = m1-m0 * vvx;
-                  mfcca = m2-c2o1*	m1 * vvx+vx2 * m0;
+                  mfcca = m2-c2o1*    m1 * vvx+vx2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfaab+mfcab;
@@ -426,21 +412,21 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   m0 = m2+mfbab;
                   mfaab = m0;
                   mfbab = m1-m0 * vvx;
-                  mfcab = m2-c2o1*	m1 * vvx+vx2 * m0;
+                  mfcab = m2-c2o1*    m1 * vvx+vx2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfabb+mfcbb;
                   m1 = mfcbb-mfabb;
                   m0 = m2+mfbbb;
                   mfabb = m0;
                   mfbbb = m1-m0 * vvx;
-                  mfcbb = m2-c2o1*	m1 * vvx+vx2 * m0;
+                  mfcbb = m2-c2o1*    m1 * vvx+vx2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfacb+mfccb;
                   m1 = mfccb-mfacb;
                   m0 = m2+mfbcb;
                   mfacb = m0;
                   mfbcb = m1-m0 * vvx;
-                  mfccb = m2-c2o1*	m1 * vvx+vx2 * m0;
+                  mfccb = m2-c2o1*    m1 * vvx+vx2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfaac+mfcac;
@@ -449,14 +435,14 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfaac = m0;
                   m0 += c1o3 * oMdrho;
                   mfbac = m1-m0 * vvx;
-                  mfcac = m2-c2o1*	m1 * vvx+vx2 * m0;
+                  mfcac = m2-c2o1*    m1 * vvx+vx2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfabc+mfcbc;
                   m1 = mfcbc-mfabc;
                   m0 = m2+mfbbc;
                   mfabc = m0;
                   mfbbc = m1-m0 * vvx;
-                  mfcbc = m2-c2o1*	m1 * vvx+vx2 * m0;
+                  mfcbc = m2-c2o1*    m1 * vvx+vx2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   m2 = mfacc+mfccc;
                   m1 = mfccc-mfacc;
@@ -464,7 +450,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   mfacc = m0;
                   m0 += c1o9 * oMdrho;
                   mfbcc = m1-m0 * vvx;
-                  mfccc = m2-c2o1*	m1 * vvx+vx2 * m0;
+                  mfccc = m2-c2o1*    m1 * vvx+vx2 * m0;
                   ////////////////////////////////////////////////////////////////////////////////////
                   ////////////////////////////////////////////////////////////////////////////////////
 
@@ -473,32 +459,12 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   // Cumulants
                   ////////////////////////////////////////////////////////////////////////////////////
  
-                  //LBMReal OxxPyyPzz = one; // bulk viscosity
+                  //real OxxPyyPzz = one; // bulk viscosity
 
                   ////////////////////////////////////////////////////////////
                   //3.
                   //////////////////////////////
-                  real OxyyPxzz = c1o1;//three  * (two - omega) / (three  - omega);//
-                  //LBMReal OxyyMxzz = one;//six    * (two - omega) / (six    - omega);//
-//                  LBMReal Oxyz = one;//twelve * (two - omega) / (twelve + omega);//
-                  //////////////////////////////
-                  //LBMReal OxyyPxzz  = two-omega;//
-                  //LBMReal OxyyMxzz  = two-omega;//
-                  //////////////////////////////
-                  //LBMReal OxyyPxzz  = (eight * (omega - two)) / (omega - eight);//Ginzburg
-                  //LBMReal OxyyMxzz  = (eight * (omega - two)) / (omega - eight);//Ginzburg
-                  //////////////////////////////
-                  //LBMReal OxyyPxzz  = omega;//BGK
-                  //LBMReal OxyyMxzz  = omega;//BGK
-                  //////////////////////////////
-                  //LBMReal OxyyPxzz  = (one + omega) / two;//1P5
-                  //LBMReal OxyyMxzz  = (one + omega) / two;//1P5
-                  //////////////////////////////
-                  //LBMReal OxyyPxzz  = (three - omega) / two;//0P5
-                  //LBMReal OxyyMxzz  = (three - omega) / two;//0P5
-                  //////////////////////////////
-                  //LBMReal OxyyPxzz  = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car
-                  //LBMReal OxyyMxzz  = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car
+                  real OxyyPxzz = c1o1;
                   ////////////////////////////////////////////////////////////
                   //4.
                   //////////////////////////////
@@ -518,7 +484,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
 
                   //central moments to cumulants
                   //4.
-                  real CUMcbb = mfcbb-((mfcaa+c1o3) * mfabb+c2o1 * mfbba * mfbab)/rho;	//ab 15.05.2015 verwendet
+                  real CUMcbb = mfcbb-((mfcaa+c1o3) * mfabb+c2o1 * mfbba * mfbab)/rho;    //ab 15.05.2015 verwendet
                   real CUMbcb = mfbcb-((mfaca+c1o3) * mfbab+c2o1 * mfbba * mfabb)/rho; //ab 15.05.2015 verwendet
                   real CUMbbc = mfbbc-((mfaac+c1o3) * mfbba+c2o1 * mfbab * mfabb)/rho; //ab 15.05.2015 verwendet
 
@@ -556,43 +522,8 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   real mxxMyy = mfcaa-mfaca;
                   real mxxMzz = mfcaa-mfaac;
 
-                  //////////////////////////////////////////////////////////////////////////
-         // 			LBMReal magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.;
-
-                  //////////////////////////////////////////////////////////////////////////
-                  //limiter-Scheise Teil 1
-                  //LBMReal oxxyy,oxxzz,oxy,oxz,oyz;
-                  //LBMReal smag=0.001;
-                  //oxxyy    = omega+(one-omega)*fabs(mxxMyy)/(fabs(mxxMyy)+smag);
-                  //oxxzz    = omega+(one-omega)*fabs(mxxMzz)/(fabs(mxxMzz)+smag);
-                  //oxy      = omega+(one-omega)*fabs(mfbba)/(fabs(mfbba)+smag);
-                  //oxz      = omega+(one-omega)*fabs(mfbab)/(fabs(mfbab)+smag);
-                  //oyz      = omega+(one-omega)*fabs(mfabb)/(fabs(mfabb)+smag);
-
-                  ////////////////////////////////////////////////////////////////////////////
-                  ////Teil 1b
-                  //LBMReal constante = 1000.0;
-                  //LBMReal nuEddi = constante * fabs(mxxPyyPzz);
-                  //LBMReal omegaLimit = one / (one / omega + three * nuEddi);
-
-                  //{
-                  //	LBMReal dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) +  OxxPyyPzz * (mfaaa - mxxPyyPzz);
-                  //	LBMReal dyuy = dxux + omegaLimit * c3o2 * mxxMyy;
-                  //	LBMReal dzuz = dxux + omegaLimit * c3o2 * mxxMzz;
-
-                     ////relax
-                     //mxxPyyPzz += OxxPyyPzz*(mfaaa  - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
-                     //mxxMyy    += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy);
-                     //mxxMzz    += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz);
-
-                  //}
-                  //mfabb     += omegaLimit * (-mfabb);
-                  //mfbab     += omegaLimit * (-mfbab);
-                  //mfbba     += omegaLimit * (-mfbba);
-                  ////////////////////////////////////////////////////////////////////////////
-
                   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                  //incl. correction		(hat noch nicht so gut funktioniert...Optimierungsbedarf??)
+                  //incl. correction        (hat noch nicht so gut funktioniert...Optimierungsbedarf??)
                   {
                      real dxux = c1o2 * (-omega) *(mxxMyy+mxxMzz)+c1o2 *  OxxPyyPzz * (mfaaa-mxxPyyPzz);
                      real dyuy = dxux+omega * c3o2 * mxxMyy;
@@ -603,32 +534,13 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                      mxxMyy += omega * (-mxxMyy)- c3o1 * (c1o1+c1o2 * (-omega)) * (vx2 * dxux-vy2 * dyuy);
                      mxxMzz += omega * (-mxxMzz)- c3o1 * (c1o1+c1o2 * (-omega)) * (vx2 * dxux-vz2 * dzuz);
 
-                     //////////////////////////////////////////////////////////////////////////
-                     //limiter-Scheise Teil 2
-                     //mxxMyy    += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy);
-                     //mxxMzz    += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz);
-                     //////////////////////////////////////////////////////////////////////////
-
                   }
-                  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-                  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-                  ////no correction
-                  //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz;
-                  //mxxMyy    += -(-omega) * (-mxxMyy);
-                  //mxxMzz    += -(-omega) * (-mxxMzz);
                   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                   mfabb += omega * (-mfabb);
                   mfbab += omega * (-mfbab);
                   mfbba += omega * (-mfbba);
 
-                  //////////////////////////////////////////////////////////////////////////
-                  //limiter-Scheise Teil 3
-                  //mfabb     += oyz * (-mfabb);
-                  //mfbab     += oxz * (-mfbab);
-                  //mfbba     += oxy * (-mfbba);
-                  //////////////////////////////////////////////////////////////////////////
-
                   // linear combinations back
                   mfcaa = c1o3 * (mxxMyy+mxxMzz+mxxPyyPzz);
                   mfaca = c1o3 * (-c2o1*  mxxMyy+mxxMzz+mxxPyyPzz);
@@ -648,22 +560,6 @@ void CompressibleCumulantLBMKernel::calculate(int step)
 
                   //relax
                   //////////////////////////////////////////////////////////////////////////
-                  //das ist der limiter
-                  //wadjust = Oxyz+(one-Oxyz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimitD);
-                  //mfbbb += wadjust * (-mfbbb);
-                  //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimitP);
-                  //mxxyPyzz += wadjust * (-mxxyPyzz);
-                  //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimitM);
-                  //mxxyMyzz += wadjust * (-mxxyMyzz);
-                  //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimitP);
-                  //mxxzPyyz += wadjust * (-mxxzPyyz);
-                  //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimitM);
-                  //mxxzMyyz += wadjust * (-mxxzMyyz);
-                  //wadjust = OxyyPxzz+(one-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimitP);
-                  //mxyyPxzz += wadjust * (-mxyyPxzz);
-                  //wadjust = OxyyMxzz+(one-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimitM);
-                  //mxyyMxzz += wadjust * (-mxyyMxzz);
-                  //////////////////////////////////////////////////////////////////////////
                   //ohne limiter
                   mfbbb     += OxyyMxzz * (-mfbbb);
                   mxxyPyzz  += OxyyPxzz * (-mxxyPyzz);
@@ -684,21 +580,6 @@ void CompressibleCumulantLBMKernel::calculate(int step)
 
                   //4.
                   //////////////////////////////////////////////////////////////////////////
-                  //mit limiter
-               //	wadjust    = O4+(one-O4)*fabs(CUMacc)/(fabs(CUMacc)+qudricLimit);
-                  //CUMacc    += wadjust * (-CUMacc);
-               //	wadjust    = O4+(one-O4)*fabs(CUMcac)/(fabs(CUMcac)+qudricLimit);
-                  //CUMcac    += wadjust * (-CUMcac); 
-               //	wadjust    = O4+(one-O4)*fabs(CUMcca)/(fabs(CUMcca)+qudricLimit);
-                  //CUMcca    += wadjust * (-CUMcca); 
-
-               //	wadjust    = O4+(one-O4)*fabs(CUMbbc)/(fabs(CUMbbc)+qudricLimit);
-                  //CUMbbc    += wadjust * (-CUMbbc); 
-               //	wadjust    = O4+(one-O4)*fabs(CUMbcb)/(fabs(CUMbcb)+qudricLimit);
-                  //CUMbcb    += wadjust * (-CUMbcb); 
-               //	wadjust    = O4+(one-O4)*fabs(CUMcbb)/(fabs(CUMcbb)+qudricLimit);
-                  //CUMcbb    += wadjust * (-CUMcbb); 
-                  //////////////////////////////////////////////////////////////////////////
                   //ohne limiter
                   CUMacc += O4 * (-CUMacc);
                   CUMcac += O4 * (-CUMcac);
@@ -973,7 +854,7 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   real 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 = fabs(rho - rho_post);
+                  //real dif = fabs(rho - rho_post);
                   real dif = drho - drho_post;
 #ifdef SINGLEPRECISION
                   if (dif > 10.0E-7 || dif < -10.0E-7)
@@ -990,33 +871,33 @@ void CompressibleCumulantLBMKernel::calculate(int step)
                   //////////////////////////////////////////////////////////////////////////
                   //write distribution
                   //////////////////////////////////////////////////////////////////////////
-                  (*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->localDistributions)(eP00, x1, x2, x3)    = mfabb;
+                  (*this->localDistributions)(e0P0, x1, x2, x3)    = mfbab;
+                  (*this->localDistributions)(e00P, x1, x2, x3)    = mfbba;
+                  (*this->localDistributions)(ePP0, x1, x2, x3)   = mfaab;
+                  (*this->localDistributions)(eMP0, x1p, x2, x3)   = mfcab;
+                  (*this->localDistributions)(eP0P, x1, x2, x3)   = mfaba;
+                  (*this->localDistributions)(eM0P, x1p, x2, x3)   = mfcba;
+                  (*this->localDistributions)(e0PP, x1, x2, x3)   = mfbaa;
+                  (*this->localDistributions)(e0MP, x1, x2p, x3)   = mfbca;
+                  (*this->localDistributions)(ePPP, x1, x2, x3)  = mfaaa;
+                  (*this->localDistributions)(eMPP, x1p, x2, x3)  = mfcaa;
+                  (*this->localDistributions)(ePMP, x1, x2p, x3)  = mfaca;
+                  (*this->localDistributions)(eMMP, x1p, x2p, x3)  = mfcca;
+
+                  (*this->nonLocalDistributions)(eM00, x1p, x2, x3) = mfcbb;
+                  (*this->nonLocalDistributions)(e0M0, x1, x2p, x3) = mfbcb;
+                  (*this->nonLocalDistributions)(e00M, x1, x2, x3p) = mfbbc;
+                  (*this->nonLocalDistributions)(eMM0, x1p, x2p, x3) = mfccb;
+                  (*this->nonLocalDistributions)(ePM0, x1, x2p, x3) = mfacb;
+                  (*this->nonLocalDistributions)(eM0M, x1p, x2, x3p) = mfcbc;
+                  (*this->nonLocalDistributions)(eP0M, x1, x2, x3p) = mfabc;
+                  (*this->nonLocalDistributions)(e0MM, x1, x2p, x3p) = mfbcc;
+                  (*this->nonLocalDistributions)(e0PM, x1, x2, x3p) = mfbac;
+                  (*this->nonLocalDistributions)(eMMM, x1p, x2p, x3p) = mfccc;
+                  (*this->nonLocalDistributions)(ePMM, x1, x2p, x3p) = mfacc;
+                  (*this->nonLocalDistributions)(eMPM, x1p, x2, x3p) = mfcac;
+                  (*this->nonLocalDistributions)(ePPM, x1, x2, x3p) = mfaac;
 
                   (*this->zeroDistributions)(x1, x2, x3) = mfbbb;
                   //////////////////////////////////////////////////////////////////////////
@@ -1026,23 +907,22 @@ void CompressibleCumulantLBMKernel::calculate(int step)
          }
       }
 
-   }
 
-   //timer.stop();
+
+   //timer.end();
 }
 //////////////////////////////////////////////////////////////////////////
-real CompressibleCumulantLBMKernel::getCalculationTime()
+real K15CompressibleNavierStokes::getCalculationTime()
 {
-   //return timer.getDuration();
-   return timer.getTotalTime();
+   return timer.getTimeInSeconds();
 }
 //////////////////////////////////////////////////////////////////////////
-void CompressibleCumulantLBMKernel::setBulkOmegaToOmega(bool value)
+void K15CompressibleNavierStokes::setBulkOmegaToOmega(bool value)
 {
    bulkOmegaToOmega = value;
 }
 //////////////////////////////////////////////////////////////////////////
-void CompressibleCumulantLBMKernel::setRelaxationParameter(Parameter p)
+void K15CompressibleNavierStokes::setRelaxationParameter(Parameter p)
 {
    parameter = p;
 }
diff --git a/src/cpu/core/LBM/CompressibleCumulantLBMKernel.h b/src/cpu/core/LBM/K15CompressibleNavierStokes.h
similarity index 78%
rename from src/cpu/core/LBM/CompressibleCumulantLBMKernel.h
rename to src/cpu/core/LBM/K15CompressibleNavierStokes.h
index 84910ef267efcba7f4cb90cba8a7514642461420..fd0b4e9e6005a844108778a7b9fdfa7dd7dded28 100644
--- a/src/cpu/core/LBM/CompressibleCumulantLBMKernel.h
+++ b/src/cpu/core/LBM/K15CompressibleNavierStokes.h
@@ -1,24 +1,25 @@
-#ifndef CompressibleCumulantLBMKernel_h__
-#define CompressibleCumulantLBMKernel_h__
+#ifndef K15CompressibleNavierStokes_h__
+#define K15CompressibleNavierStokes_h__
+
+#include <basics/Timer/Timer.h>
 
 #include "LBMKernel.h"
 #include "BCSet.h"
 #include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
 #include "basics/container/CbArray4D.h"
 #include "basics/container/CbArray3D.h"
 
 //! \brief   compressible cumulant LBM kernel. 
 //! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
 //! \author  K. Kutscher, M. Geier
-class CompressibleCumulantLBMKernel :  public LBMKernel
+class K15CompressibleNavierStokes :  public LBMKernel
 {
 public:
    //! This option set relaxation parameter: NORMAL  
    enum Parameter{NORMAL, MAGIC};
 public:
-   CompressibleCumulantLBMKernel();
-   ~CompressibleCumulantLBMKernel() override;
+   K15CompressibleNavierStokes();
+   ~K15CompressibleNavierStokes() override;
    void calculate(int step) override;
    SPtr<LBMKernel> clone() override;
    real getCalculationTime() override;
@@ -28,7 +29,7 @@ protected:
    virtual void initDataSet();
    real f[D3Q27System::ENDF+1];
 
-   UbTimer timer;
+   vf::basics::Timer timer;
 
    real OxyyMxzz;
    Parameter parameter;
@@ -48,6 +49,6 @@ protected:
    bool bulkOmegaToOmega;
    real OxxPyyPzz; 
 };
-#endif // CompressibleCumulantLBMKernel_h__
+#endif // K15CompressibleNavierStokes_h__
 
 
diff --git a/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.cpp b/src/cpu/core/LBM/K16IncompressibleNavierStokes.cpp
similarity index 87%
rename from src/cpu/core/LBM/IncompressibleCumulantLBMKernel.cpp
rename to src/cpu/core/LBM/K16IncompressibleNavierStokes.cpp
index 39d6fd268a56f4824babaccea3449ea097c85bf2..171b60d2c135aa5da5273b382fb70bff35cbe9a8 100644
--- a/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.cpp
+++ b/src/cpu/core/LBM/K16IncompressibleNavierStokes.cpp
@@ -1,7 +1,7 @@
-#include "IncompressibleCumulantLBMKernel.h"
+#include "K16IncompressibleNavierStokes.h"
 #include "D3Q27System.h"
 #include "Interpolator.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "DataSet3D.h"
 #include <cmath>
 #include "Block3D.h"
@@ -12,27 +12,27 @@
 using namespace vf::basics::constant;
 
 //////////////////////////////////////////////////////////////////////////
-IncompressibleCumulantLBMKernel::IncompressibleCumulantLBMKernel()
+K16IncompressibleNavierStokes::K16IncompressibleNavierStokes()
 {
    this->parameter = NORMAL;
    this->OxyyMxzz = c1o1;
    this->compressible = false;
 }
 //////////////////////////////////////////////////////////////////////////
-IncompressibleCumulantLBMKernel::~IncompressibleCumulantLBMKernel(void)
+K16IncompressibleNavierStokes::~K16IncompressibleNavierStokes(void)
 = default;
 //////////////////////////////////////////////////////////////////////////
-void IncompressibleCumulantLBMKernel::initDataSet()
+void K16IncompressibleNavierStokes::initDataSet()
 {
-   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
+   SPtr<DistributionArray3D> d(new EsoSplit(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
    dataSet->setFdistributions(d);
 }
 //////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> IncompressibleCumulantLBMKernel::clone()
+SPtr<LBMKernel> K16IncompressibleNavierStokes::clone()
 {
-   SPtr<LBMKernel> kernel(new IncompressibleCumulantLBMKernel());
+   SPtr<LBMKernel> kernel(new K16IncompressibleNavierStokes());
    kernel->setNX(nx);
-   dynamicPointerCast<IncompressibleCumulantLBMKernel>(kernel)->initDataSet();
+   dynamicPointerCast<K16IncompressibleNavierStokes>(kernel)->initDataSet();
    kernel->setCollisionFactor(this->collFactor);
    kernel->setBCSet(bcSet->clone(kernel));
    kernel->setWithForcing(withForcing);
@@ -46,21 +46,22 @@ SPtr<LBMKernel> IncompressibleCumulantLBMKernel::clone()
    switch (parameter)
    {
    case NORMAL:
-      dynamicPointerCast<IncompressibleCumulantLBMKernel>(kernel)->OxyyMxzz = c1o1;
+      dynamicPointerCast<K16IncompressibleNavierStokes>(kernel)->OxyyMxzz = c1o1;
       break;
    case MAGIC:
-      dynamicPointerCast<IncompressibleCumulantLBMKernel>(kernel)->OxyyMxzz = c2o1 +(-collFactor);
+      dynamicPointerCast<K16IncompressibleNavierStokes>(kernel)->OxyyMxzz = c2o1 +(-collFactor);
       break;
    }
    return kernel;
 }
 //////////////////////////////////////////////////////////////////////////
-void IncompressibleCumulantLBMKernel::calculate(int step)
+void K16IncompressibleNavierStokes::calculate(int step)
 {
    using namespace D3Q27System;
    using namespace std;
+   using namespace vf::lbm::dir;
 
-   //timer.resetAndStart();
+   //timer.start();
 
    //initializing of forcing stuff 
    if (withForcing)
@@ -81,15 +82,15 @@ void IncompressibleCumulantLBMKernel::calculate(int step)
       muForcingX2.DefineVar("nu", &muNu);
       muForcingX3.DefineVar("nu", &muNu);
 
-//      LBMReal forcingX1 = 0;
-//      LBMReal forcingX2 = 0;
-//      LBMReal forcingX3 = 0;
+//      real forcingX1 = 0;
+//      real forcingX2 = 0;
+//      real forcingX3 = 0;
    }
    /////////////////////////////////////
 
-   localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
+   localDistributions = dynamicPointerCast<EsoSplit>(dataSet->getFdistributions())->getLocalDistributions();
+   nonLocalDistributions = dynamicPointerCast<EsoSplit>(dataSet->getFdistributions())->getNonLocalDistributions();
+   zeroDistributions = dynamicPointerCast<EsoSplit>(dataSet->getFdistributions())->getZeroDistributions();
 
    SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
@@ -136,33 +137,33 @@ void IncompressibleCumulantLBMKernel::calculate(int step)
                // a b c
                //-1 0 1
 
-               real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3);
-               real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3);
-               real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3);
-               real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3);
-               real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3);
-               real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3);
-               real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3);
-               real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3);
-               real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3);
-               real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3);
-               real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3);
-               real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3);
-               real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-               real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3);
-               real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3);
-               real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p);
-               real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3);
-               real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3);
-               real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p);
-               real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p);
-               real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p);
-               real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p);
-               real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-               real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p);
-               real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p);
-               real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p);
+               real mfcbb = (*this->localDistributions)(eP00, x1, x2, x3);
+               real mfbcb = (*this->localDistributions)(e0P0, x1, x2, x3);
+               real mfbbc = (*this->localDistributions)(e00P, x1, x2, x3);
+               real mfccb = (*this->localDistributions)(ePP0, x1, x2, x3);
+               real mfacb = (*this->localDistributions)(eMP0, x1p, x2, x3);
+               real mfcbc = (*this->localDistributions)(eP0P, x1, x2, x3);
+               real mfabc = (*this->localDistributions)(eM0P, x1p, x2, x3);
+               real mfbcc = (*this->localDistributions)(e0PP, x1, x2, x3);
+               real mfbac = (*this->localDistributions)(e0MP, x1, x2p, x3);
+               real mfccc = (*this->localDistributions)(ePPP, x1, x2, x3);
+               real mfacc = (*this->localDistributions)(eMPP, x1p, x2, x3);
+               real mfcac = (*this->localDistributions)(ePMP, x1, x2p, x3);
+               real mfaac = (*this->localDistributions)(eMMP, x1p, x2p, x3);
+
+               real mfabb = (*this->nonLocalDistributions)(eM00, x1p, x2, x3);
+               real mfbab = (*this->nonLocalDistributions)(e0M0, x1, x2p, x3);
+               real mfbba = (*this->nonLocalDistributions)(e00M, x1, x2, x3p);
+               real mfaab = (*this->nonLocalDistributions)(eMM0, x1p, x2p, x3);
+               real mfcab = (*this->nonLocalDistributions)(ePM0, x1, x2p, x3);
+               real mfaba = (*this->nonLocalDistributions)(eM0M, x1p, x2, x3p);
+               real mfcba = (*this->nonLocalDistributions)(eP0M, x1, x2, x3p);
+               real mfbaa = (*this->nonLocalDistributions)(e0MM, x1, x2p, x3p);
+               real mfbca = (*this->nonLocalDistributions)(e0PM, x1, x2, x3p);
+               real mfaaa = (*this->nonLocalDistributions)(eMMM, x1p, x2p, x3p);
+               real mfcaa = (*this->nonLocalDistributions)(ePMM, x1, x2p, x3p);
+               real mfaca = (*this->nonLocalDistributions)(eMPM, x1p, x2, x3p);
+               real mfcca = (*this->nonLocalDistributions)(ePPM, x1, x2, x3p);
 
                real mfbbb = (*this->zeroDistributions)(x1, x2, x3);
 
@@ -474,9 +475,9 @@ void IncompressibleCumulantLBMKernel::calculate(int step)
                real O6        = c1o1;
 
                //Cum 4.
-               //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
-               //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
-               //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
+               //real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
+               //real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
+               //real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
 
                real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab);
                real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb);
@@ -852,33 +853,33 @@ void IncompressibleCumulantLBMKernel::calculate(int step)
                //////////////////////////////////////////////////////////////////////////
                //write distribution
                //////////////////////////////////////////////////////////////////////////
-               (*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->localDistributions)(eP00, x1, x2, x3)    = mfabb;
+               (*this->localDistributions)(e0P0, x1, x2, x3)    = mfbab;
+               (*this->localDistributions)(e00P, x1, x2, x3)    = mfbba;
+               (*this->localDistributions)(ePP0, x1, x2, x3)   = mfaab;
+               (*this->localDistributions)(eMP0, x1p, x2, x3)   = mfcab;
+               (*this->localDistributions)(eP0P, x1, x2, x3)   = mfaba;
+               (*this->localDistributions)(eM0P, x1p, x2, x3)   = mfcba;
+               (*this->localDistributions)(e0PP, x1, x2, x3)   = mfbaa;
+               (*this->localDistributions)(e0MP, x1, x2p, x3)   = mfbca;
+               (*this->localDistributions)(ePPP, x1, x2, x3)  = mfaaa;
+               (*this->localDistributions)(eMPP, x1p, x2, x3)  = mfcaa;
+               (*this->localDistributions)(ePMP, x1, x2p, x3)  = mfaca;
+               (*this->localDistributions)(eMMP, x1p, x2p, x3)  = mfcca;
+
+               (*this->nonLocalDistributions)(eM00, x1p, x2, x3) = mfcbb;
+               (*this->nonLocalDistributions)(e0M0, x1, x2p, x3) = mfbcb;
+               (*this->nonLocalDistributions)(e00M, x1, x2, x3p) = mfbbc;
+               (*this->nonLocalDistributions)(eMM0, x1p, x2p, x3) = mfccb;
+               (*this->nonLocalDistributions)(ePM0, x1, x2p, x3) = mfacb;
+               (*this->nonLocalDistributions)(eM0M, x1p, x2, x3p) = mfcbc;
+               (*this->nonLocalDistributions)(eP0M, x1, x2, x3p) = mfabc;
+               (*this->nonLocalDistributions)(e0MM, x1, x2p, x3p) = mfbcc;
+               (*this->nonLocalDistributions)(e0PM, x1, x2, x3p) = mfbac;
+               (*this->nonLocalDistributions)(eMMM, x1p, x2p, x3p) = mfccc;
+               (*this->nonLocalDistributions)(ePMM, x1, x2p, x3p) = mfacc;
+               (*this->nonLocalDistributions)(eMPM, x1p, x2, x3p) = mfcac;
+               (*this->nonLocalDistributions)(ePPM, x1, x2, x3p) = mfaac;
 
                (*this->zeroDistributions)(x1, x2, x3) = mfbbb;
                //////////////////////////////////////////////////////////////////////////
@@ -890,13 +891,12 @@ void IncompressibleCumulantLBMKernel::calculate(int step)
    //timer.stop();
 }
 //////////////////////////////////////////////////////////////////////////
-real IncompressibleCumulantLBMKernel::getCalculationTime()
+real K16IncompressibleNavierStokes::getCalculationTime()
 {
-   //return timer.getDuration();
-   return timer.getTotalTime();
+   return timer.getTimeInSeconds();
 }
 //////////////////////////////////////////////////////////////////////////
-void IncompressibleCumulantLBMKernel::setRelaxationParameter(Parameter p)
+void K16IncompressibleNavierStokes::setRelaxationParameter(Parameter p)
 {
    parameter = p;
 }
diff --git a/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.h b/src/cpu/core/LBM/K16IncompressibleNavierStokes.h
similarity index 79%
rename from src/cpu/core/LBM/IncompressibleCumulantLBMKernel.h
rename to src/cpu/core/LBM/K16IncompressibleNavierStokes.h
index 99e64ce0cac5a0a1e53a40f1eb4a4ab36cfa2f81..f7c8a1dc0329150f1847c12c2c2c52c636e46b21 100644
--- a/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.h
+++ b/src/cpu/core/LBM/K16IncompressibleNavierStokes.h
@@ -1,26 +1,27 @@
 //Cascaded Cumulant LBM
 
-#ifndef IncompressibleCumulantLBMKernel_H
-#define IncompressibleCumulantLBMKernel_H
+#ifndef K16IncompressibleNavierStokes_H
+#define K16IncompressibleNavierStokes_H
+
+#include <basics/Timer/Timer.h>
 
 #include "LBMKernel.h"
 #include "BCSet.h"
 #include "D3Q27System.h"
-#include "basics/utilities/UbTiming.h"
 #include "basics/container/CbArray4D.h"
 #include "basics/container/CbArray3D.h"
 
 //! \brief   Cascaded Cumulant LBM kernel. 
 //! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
 //! \author  K. Kutscher, M. Geier
-class IncompressibleCumulantLBMKernel :  public LBMKernel
+class K16IncompressibleNavierStokes : public LBMKernel
 {
 public:
    //! This option set relaxation parameter: NORMAL  
    enum Parameter{NORMAL, MAGIC};
 public:
-   IncompressibleCumulantLBMKernel();
-   ~IncompressibleCumulantLBMKernel() override;
+   K16IncompressibleNavierStokes();
+   ~K16IncompressibleNavierStokes() override;
    void calculate(int step) override;
    SPtr<LBMKernel> clone() override;
    real getCalculationTime() override;
@@ -29,7 +30,7 @@ protected:
    virtual void initDataSet();
    real f[D3Q27System::ENDF+1];
 
-   UbTimer timer;
+   vf::basics::Timer timer;
 
    real OxyyMxzz;
    Parameter parameter;
diff --git a/src/cpu/core/LBM/K17CompressibleNavierStokes.cpp b/src/cpu/core/LBM/K17CompressibleNavierStokes.cpp
index 4287254015ad9ee8c6d1250636c15989cd81242b..6d8cfb7ec48721b20c371427221388bbac959a3b 100644
--- a/src/cpu/core/LBM/K17CompressibleNavierStokes.cpp
+++ b/src/cpu/core/LBM/K17CompressibleNavierStokes.cpp
@@ -39,7 +39,7 @@
 #include "BCArray3D.h"
 #include "BCSet.h"
 #include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "D3Q27System.h"
 #include "DataSet3D.h"
 #include "LBMKernel.h"
@@ -51,7 +51,7 @@ K17CompressibleNavierStokes::K17CompressibleNavierStokes()
 
 void K17CompressibleNavierStokes::initDataSet()
 {
-    SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
+    SPtr<DistributionArray3D> d(new EsoSplit(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
     dataSet->setFdistributions(d);
 }
 
@@ -99,9 +99,9 @@ void K17CompressibleNavierStokes::calculate(int step)
         muForcingX3.DefineVar("nu", &muNu);
     }
 
-    auto localDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-    auto nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-    auto restDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
+    auto localDistributions = std::dynamic_pointer_cast<EsoSplit>(dataSet->getFdistributions())->getLocalDistributions();
+    auto nonLocalDistributions = std::dynamic_pointer_cast<EsoSplit>(dataSet->getFdistributions())->getNonLocalDistributions();
+    auto restDistributions = std::dynamic_pointer_cast<EsoSplit>(dataSet->getFdistributions())->getZeroDistributions();
 
     SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
 
diff --git a/src/cpu/core/LBM/LBMKernel.cpp b/src/cpu/core/LBM/LBMKernel.cpp
index 3b817afff909e587ac4f35c9184076339bde9b2b..369bcd8c9880c6304e83056d25fc23983b16d5b7 100644
--- a/src/cpu/core/LBM/LBMKernel.cpp
+++ b/src/cpu/core/LBM/LBMKernel.cpp
@@ -59,18 +59,18 @@ real LBMKernel::getCollisionFactor() const { return collFactor; }
 //////////////////////////////////////////////////////////////////////////
 void LBMKernel::setForcingX1(real forcingX1)
 {
-    this->muForcingX1.SetExpr(UbSystem::toString(forcingX1, LBMRealLim::digits10));
+    this->muForcingX1.SetExpr(UbSystem::toString(forcingX1, realLim::digits10));
     this->checkFunction(muForcingX1);
 }
 //////////////////////////////////////////////////////////////////////////
 void LBMKernel::setForcingX2(real forcingX2)
 {
-    this->muForcingX2.SetExpr(UbSystem::toString(forcingX2, LBMRealLim::digits10));
+    this->muForcingX2.SetExpr(UbSystem::toString(forcingX2, realLim::digits10));
     this->checkFunction(muForcingX2);
 }
 void LBMKernel::setForcingX3(real forcingX3)
 {
-    this->muForcingX3.SetExpr(UbSystem::toString(forcingX3, LBMRealLim::digits10));
+    this->muForcingX3.SetExpr(UbSystem::toString(forcingX3, realLim::digits10));
     this->checkFunction(muForcingX3);
 }
 //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/core/LBM/LBMKernel.h b/src/cpu/core/LBM/LBMKernel.h
index 74906998dfdbc06536387adfc7f155bbe677368e..97eb9c644247628633e7961727269826e5cd1e4b 100644
--- a/src/cpu/core/LBM/LBMKernel.h
+++ b/src/cpu/core/LBM/LBMKernel.h
@@ -48,9 +48,6 @@ class Block3D;
 //! \brief A base class provides basic functionality for LBM kernel
 class LBMKernel : public ILBMKernel, public enableSharedFromThis<LBMKernel>
 {
-public:
-    using LBMRealLim = std::numeric_limits<real>;
-
 public:
     LBMKernel();
 
diff --git a/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp b/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp
deleted file mode 100644
index a154ee477b83d13c1d65a4acd53f9e8fe75e63a8..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp
+++ /dev/null
@@ -1,303 +0,0 @@
-#include "LBMKernelETD3Q27BGK.h"
-#include "D3Q27System.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
-#include "D3Q27EsoTwist3DSoA.h"
-#include "DataSet3D.h"
-#include "BCSet.h"
-#include "BCArray3D.h"
-#include "basics/constants/NumericConstants.h"
-
-using namespace vf::basics::constant;
-//using namespace UbMath;
-
-//#define PROOF_CORRECTNESS
-
-
-//////////////////////////////////////////////////////////////////////////
-LBMKernelETD3Q27BGK::LBMKernelETD3Q27BGK() 
-{
-   this->compressible = false;
-}
-//////////////////////////////////////////////////////////////////////////
-LBMKernelETD3Q27BGK::~LBMKernelETD3Q27BGK(void)
-= default;
-//////////////////////////////////////////////////////////////////////////
-void LBMKernelETD3Q27BGK::initDataSet()
-{
-   SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9));
-   dataSet->setFdistributions(d);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> LBMKernelETD3Q27BGK::clone()
-{
-   SPtr<LBMKernel> kernel(new LBMKernelETD3Q27BGK());
-   std::dynamic_pointer_cast<LBMKernelETD3Q27BGK>(kernel)->initDataSet();
-   kernel->setCollisionFactor(this->collFactor);
-   kernel->setBCSet(bcSet->clone(kernel));
-   kernel->setWithForcing(withForcing);
-   kernel->setForcingX1(muForcingX1);
-   kernel->setForcingX2(muForcingX2);
-   kernel->setForcingX3(muForcingX3);
-   kernel->setIndex(ix1, ix2, ix3);
-   return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void LBMKernelETD3Q27BGK::calculate(int  /*step*/)
-{
-   using namespace D3Q27System;
-   using namespace vf::lbm::dir;
-
-   //initializing of forcing stuff 
-   if (withForcing)
-   {
-      muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3);
-      muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3);
-      muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3);
-      forcingX1 = c0o1;
-      forcingX2 = c0o1;
-      forcingX3 = c0o1;
-   }
-   /////////////////////////////////////
-
-   localDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
-   nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
-   zeroDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
-
-   SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray();
-   real f[D3Q27System::ENDF+1];
-   real feq[D3Q27System::ENDF+1];
-   real drho,vx1,vx2,vx3;
-   const int bcArrayMaxX1 = (int)bcArray->getNX1();
-   const int bcArrayMaxX2 = (int)bcArray->getNX2();
-   const int bcArrayMaxX3 = (int)bcArray->getNX3();
-
-   int minX1 = ghostLayerWidth;
-   int minX2 = ghostLayerWidth;
-   int minX3 = ghostLayerWidth;
-   int maxX1 = bcArrayMaxX1-ghostLayerWidth;
-   int maxX2 = bcArrayMaxX2-ghostLayerWidth;
-   int maxX3 = bcArrayMaxX3-ghostLayerWidth;
-
-   for(int x3 = minX3; x3 < maxX3; x3++)
-   {
-      for(int x2 = minX2; x2 < maxX2; x2++)
-      {
-         for(int x1 = minX1; x1 < maxX1; x1++)
-         {
-            if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
-            {
-               int x1p = x1 + 1;
-               int x2p = x2 + 1;
-               int x3p = x3 + 1;
-               //////////////////////////////////////////////////////////////////////////
-               //read distribution
-               ////////////////////////////////////////////////////////////////////////////
-               f[d000] = (*this->zeroDistributions)(x1,x2,x3);
-
-               f[dP00] = (*this->localDistributions)(D3Q27System::ET_E, x1,x2,x3);
-               f[d0P0] = (*this->localDistributions)(D3Q27System::ET_N,x1,x2,x3);
-               f[d00P] = (*this->localDistributions)(D3Q27System::ET_T,x1,x2,x3);
-               f[dPP0] = (*this->localDistributions)(D3Q27System::ET_NE,x1,x2,x3);
-               f[dMP0] = (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,x3);
-               f[dP0P] = (*this->localDistributions)(D3Q27System::ET_TE,x1,x2,x3);
-               f[dM0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p,x2,x3);
-               f[d0PP] = (*this->localDistributions)(D3Q27System::ET_TN,x1,x2,x3);
-               f[d0MP] = (*this->localDistributions)(D3Q27System::ET_TS,x1,x2p,x3);
-               f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE,x1,x2,x3);
-               f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,x3);
-               f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE,x1,x2p,x3);
-               f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3);
-
-               f[dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,x3  );
-               f[d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,x2p,x3  );
-               f[d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,x2,x3p  );
-               f[dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 );
-               f[dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,x2p,x3 );
-               f[dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,x3p );
-               f[dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,x2,x3p );
-               f[d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,x2p,x3p );
-               f[d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,x2,x3p );
-               f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p);
-               f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,x2p,x3p);
-               f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,x3p);
-               f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,x2,x3p);
-               //////////////////////////////////////////////////////////////////////////
-
-               drho = f[d000] + f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M]
-               + f[dPP0] + f[dMM0] + f[dPM0] + f[dMP0] + f[dP0P] + f[dM0M] + f[dP0M]
-               + f[dM0P] + f[d0PP] + f[d0MM] + f[d0PM] + f[d0MP] + f[dPPP] + f[dMMP]
-               + f[dPMP] + f[dMPP] + f[dPPM] + f[dMMM] + f[dPMM] + f[dMPM];
-
-               vx1 = f[dP00] - f[dM00] + f[dPP0] - f[dMM0] + f[dPM0] - f[dMP0] + f[dP0P] - f[dM0M]
-               + f[dP0M] - f[dM0P] + f[dPPP] - f[dMMP] + f[dPMP] - f[dMPP] + f[dPPM] - f[dMMM]
-               + f[dPMM] - f[dMPM]; 
-
-               vx2 = f[d0P0] - f[d0M0] + f[dPP0] - f[dMM0] - f[dPM0] + f[dMP0] + f[d0PP] - f[d0MM] + f[d0PM]
-               - f[d0MP] + f[dPPP] - f[dMMP] - f[dPMP] + f[dMPP] + f[dPPM] - f[dMMM] - f[dPMM] 
-               + f[dMPM]; 
-
-               vx3 = f[d00P] - f[d00M] + f[dP0P] - f[dM0M] - f[dP0M] + f[dM0P] + f[d0PP] - f[d0MM] - f[d0PM]
-               + f[d0MP] + f[dPPP] + f[dMMP] + f[dPMP] + f[dMPP] - f[dPPM] - f[dMMM] - f[dPMM] 
-               - f[dMPM];
-
-               real cu_sq= c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-               feq[d000] =  c8o27*(drho-cu_sq);
-               feq[dP00] =  c2o27*(drho+c3o1*( vx1   )+c9o2*( vx1   )*( vx1   )-cu_sq);
-               feq[dM00] =  c2o27*(drho+c3o1*(-vx1   )+c9o2*(-vx1   )*(-vx1   )-cu_sq);
-               feq[d0P0] =  c2o27*(drho+c3o1*(    vx2)+c9o2*(    vx2)*(    vx2)-cu_sq);
-               feq[d0M0] =  c2o27*(drho+c3o1*(   -vx2)+c9o2*(   -vx2)*(   -vx2)-cu_sq);
-               feq[d00P] =  c2o27*(drho+c3o1*( vx3   )+c9o2*(    vx3)*(    vx3)-cu_sq);
-               feq[d00M] =  c2o27*(drho+c3o1*(   -vx3)+c9o2*(   -vx3)*(   -vx3)-cu_sq);
-               feq[dPP0] = c1o54*(drho+c3o1*( vx1+vx2)+c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq);
-               feq[dMM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq);
-               feq[dPM0] = c1o54*(drho+c3o1*( vx1-vx2)+c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq);
-               feq[dMP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq);
-               feq[dP0P] = c1o54*(drho+c3o1*( vx1+vx3)+c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq);
-               feq[dM0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq);
-               feq[dP0M] = c1o54*(drho+c3o1*( vx1-vx3)+c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq);
-               feq[dM0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq);
-               feq[d0PP] = c1o54*(drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq);
-               feq[d0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq);
-               feq[d0PM] = c1o54*(drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq);
-               feq[d0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq);
-               feq[dPPP]= c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-               feq[dMMM]= c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-               feq[dPPM]= c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-               feq[dMMP]= c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-               feq[dPMP]= c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-               feq[dMPM]= c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-               feq[dPMM]= c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-               feq[dMPP]= c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-
-               //Relaxation
-               f[d000] += (feq[d000]-f[d000])*collFactor;
-               f[dP00] += (feq[dP00]-f[dP00])*collFactor;
-               f[dM00] += (feq[dM00]-f[dM00])*collFactor;
-               f[d0P0] += (feq[d0P0]-f[d0P0])*collFactor;
-               f[d0M0] += (feq[d0M0]-f[d0M0])*collFactor;
-               f[d00P] += (feq[d00P]-f[d00P])*collFactor;
-               f[d00M] += (feq[d00M]-f[d00M])*collFactor;
-               f[dPP0] += (feq[dPP0]-f[dPP0])*collFactor;
-               f[dMM0] += (feq[dMM0]-f[dMM0])*collFactor;
-               f[dPM0] += (feq[dPM0]-f[dPM0])*collFactor;
-               f[dMP0] += (feq[dMP0]-f[dMP0])*collFactor;
-               f[dP0P] += (feq[dP0P]-f[dP0P])*collFactor;
-               f[dM0M] += (feq[dM0M]-f[dM0M])*collFactor;
-               f[dP0M] += (feq[dP0M]-f[dP0M])*collFactor;
-               f[dM0P] += (feq[dM0P]-f[dM0P])*collFactor;
-               f[d0PP] += (feq[d0PP]-f[d0PP])*collFactor;
-               f[d0MM] += (feq[d0MM]-f[d0MM])*collFactor;
-               f[d0PM] += (feq[d0PM]-f[d0PM])*collFactor;
-               f[d0MP] += (feq[d0MP]-f[d0MP])*collFactor;
-
-               f[dPPP] += (feq[dPPP]-f[dPPP])*collFactor;
-               f[dMMM] += (feq[dMMM]-f[dMMM])*collFactor;
-               f[dPPM] += (feq[dPPM]-f[dPPM])*collFactor;
-               f[dMMP] += (feq[dMMP]-f[dMMP])*collFactor;
-               f[dPMP] += (feq[dPMP]-f[dPMP])*collFactor;
-               f[dMPM] += (feq[dMPM]-f[dMPM])*collFactor;
-               f[dPMM] += (feq[dPMM]-f[dPMM])*collFactor;
-               f[dMPP] += (feq[dMPP]-f[dMPP])*collFactor;
-
-               //////////////////////////////////////////////////////////////////////////
-               //forcing
-               if (withForcing)
-               {
-                  muX1 = x1+ix1*bcArrayMaxX1;
-                  muX2 = x2+ix2*bcArrayMaxX2;
-                  muX3 = x3+ix3*bcArrayMaxX3;
-
-                  forcingX1 = muForcingX1.Eval();
-                  forcingX2 = muForcingX2.Eval();
-                  forcingX3 = muForcingX3.Eval();
-
-                  f[d000] += c0o1;
-                  f[dP00] +=  c3o1*c2o27  *  (forcingX1)                    ;
-                  f[dM00] +=  c3o1*c2o27  *  (-forcingX1)                   ;
-                  f[d0P0] +=  c3o1*c2o27  *             (forcingX2)         ;
-                  f[d0M0] +=  c3o1*c2o27  *             (-forcingX2)        ;
-                  f[d00P] +=  c3o1*c2o27  *                     (forcingX3) ;
-                  f[d00M] +=  c3o1*c2o27  *                     (-forcingX3);
-                  f[dPP0] +=  c3o1*c1o54 * ( forcingX1+forcingX2          ) ;
-                  f[dMM0 ] +=  c3o1*c1o54 * (-forcingX1-forcingX2          ) ;
-                  f[dPM0 ] +=  c3o1*c1o54 * ( forcingX1-forcingX2          ) ;
-                  f[dMP0 ] +=  c3o1*c1o54 * (-forcingX1+forcingX2          ) ;
-                  f[dP0P ] +=  c3o1*c1o54 * ( forcingX1          +forcingX3) ;
-                  f[dM0M ] +=  c3o1*c1o54 * (-forcingX1          -forcingX3) ;
-                  f[dP0M ] +=  c3o1*c1o54 * ( forcingX1          -forcingX3) ;
-                  f[dM0P ] +=  c3o1*c1o54 * (-forcingX1          +forcingX3) ;
-                  f[d0PP ] +=  c3o1*c1o54 * (           forcingX2+forcingX3) ;
-                  f[d0MM ] +=  c3o1*c1o54 * (          -forcingX2-forcingX3) ;
-                  f[d0PM ] +=  c3o1*c1o54 * (           forcingX2-forcingX3) ;
-                  f[d0MP ] +=  c3o1*c1o54 * (          -forcingX2+forcingX3) ;
-                  f[dPPP] +=  c3o1*c1o216* ( forcingX1+forcingX2+forcingX3) ;
-                  f[dMMM] +=  c3o1*c1o216* (-forcingX1-forcingX2-forcingX3) ;
-                  f[dPPM] +=  c3o1*c1o216* ( forcingX1+forcingX2-forcingX3) ;
-                  f[dMMP] +=  c3o1*c1o216* (-forcingX1-forcingX2+forcingX3) ;
-                  f[dPMP] +=  c3o1*c1o216* ( forcingX1-forcingX2+forcingX3) ;
-                  f[dMPM] +=  c3o1*c1o216* (-forcingX1+forcingX2-forcingX3) ;
-                  f[dPMM] +=  c3o1*c1o216* ( forcingX1-forcingX2-forcingX3) ;
-                  f[dMPP] +=  c3o1*c1o216* (-forcingX1+forcingX2+forcingX3) ;
-               }
-               //////////////////////////////////////////////////////////////////////////
-#ifdef  PROOF_CORRECTNESS
-               real rho_post = f[REST] + f[dP00] + f[W] + f[N] + f[S] + f[T] + f[B] 
-               + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE]
-               + f[TW] + f[TN] + f[BS] + f[BN] + f[TS] + f[TNE] + f[TSW]
-               + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW];
-               real dif = drho - rho_post;
-#ifdef SINGLEPRECISION
-               if(dif > 10.0E-7 || dif < -10.0E-7)
-#else
-               if(dif > 10.0E-15 || dif < -10.0E-15)
-#endif
-               {
-                  UB_THROW(UbException(UB_EXARGS,"rho is not correct"));
-               }
-#endif
-               //////////////////////////////////////////////////////////////////////////
-               //write distribution
-               //////////////////////////////////////////////////////////////////////////
-               (*this->localDistributions)(D3Q27System::ET_E,x1,  x2,  x3) = f[iP00];
-               (*this->localDistributions)(D3Q27System::ET_N,x1,  x2,  x3) = f[i0P0];
-               (*this->localDistributions)(D3Q27System::ET_T,x1,  x2,  x3) = f[i00P];
-               (*this->localDistributions)(D3Q27System::ET_NE,x1,  x2,  x3) = f[iPP0];
-               (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,  x3) = f[iMP0];
-               (*this->localDistributions)(D3Q27System::ET_TE,x1,  x2,  x3) = f[iP0P];
-               (*this->localDistributions)(D3Q27System::ET_TW,x1p,x2,  x3) = f[iM0P];
-               (*this->localDistributions)(D3Q27System::ET_TN,x1,  x2,  x3) = f[i0PP];
-               (*this->localDistributions)(D3Q27System::ET_TS,x1,  x2p,x3) = f[i0MP];
-               (*this->localDistributions)(D3Q27System::ET_TNE,x1,  x2,  x3) = f[iPPP];
-               (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,  x3) = f[iMPP];
-               (*this->localDistributions)(D3Q27System::ET_TSE,x1,  x2p,x3) = f[iPMP];
-               (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3) = f[iMMP];
-
-               (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,  x3    ) = f[iM00 ];
-               (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,  x2p,x3    ) = f[i0M0 ];
-               (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,  x2,  x3p  ) = f[i00M ];
-               (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3   ) = f[iMM0];
-               (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,  x2p,x3   ) = f[iPM0];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,  x3p ) = f[iM0M];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,  x2,  x3p ) = f[iP0M];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,  x2p,x3p ) = f[i0MM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,  x2,  x3p ) = f[i0PM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p) = f[iMMM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,  x2p,x3p) = f[iPMM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,  x3p) = f[iMPM];
-               (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,  x2,  x3p) = f[iPPM];
-
-               (*this->zeroDistributions)(x1,x2,x3) = f[d000];
-               //////////////////////////////////////////////////////////////////////////
-
-
-            }
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-real LBMKernelETD3Q27BGK::getCalculationTime()
-{
-   return c0o1;
-}
diff --git a/src/cpu/core/LBM/LBMKernelETD3Q27BGK.h b/src/cpu/core/LBM/LBMKernelETD3Q27BGK.h
deleted file mode 100644
index c02725698d64e129f2fc8d5858d8598b8db6682f..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/LBMKernelETD3Q27BGK.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef LBMKERNELETD3Q27BGK_H
-#define LBMKERNELETD3Q27BGK_H
-
-#include "LBMKernel.h"
-#include "basics/container/CbArray4D.h"
-#include "basics/container/CbArray3D.h"
-
-
-
-class LBMKernelETD3Q27BGK :  public LBMKernel
-{
-public:
-   LBMKernelETD3Q27BGK();
-   ~LBMKernelETD3Q27BGK() override;
-   void calculate(int step)override;
-   SPtr<LBMKernel> clone()override;
-   real getCalculationTime() override;
-
-private:
-   void initDataSet();
-   //void collideAllCompressible();
-   //void collideAllIncompressible();
-
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
-   CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
-   CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr   zeroDistributions;
-
-   mu::value_type muX1,muX2,muX3;
-   real forcingX1;
-   real forcingX2;
-   real forcingX3;
-
-
-};
-
-#endif
diff --git a/src/cpu/core/LBM/LBMSystem.h b/src/cpu/core/LBM/LBMSystem.h
index 5cea71cd2054cc6755266e1b0b9b314ea06cb476..208ea0f1ea9206155b50b7140aeaeba34d50686a 100644
--- a/src/cpu/core/LBM/LBMSystem.h
+++ b/src/cpu/core/LBM/LBMSystem.h
@@ -83,8 +83,4 @@ static real calcOmega2(real viscosity, int level)
 static real calcOmega2(real viscosity, real deltaT) { return REAL_CAST(1.0 / (4.5 * viscosity / deltaT + 0.5)); }
 } // namespace LBMSystem
 
-// some typedefs for global namespace
-//using LBMReal = LBMSystem::real;
-using LBMReal = real;
-
 #endif
diff --git a/src/cpu/core/LBM/VoidLBMKernel.cpp b/src/cpu/core/LBM/VoidLBMKernel.cpp
deleted file mode 100644
index 7ab956494af3121eedfb56a22cb638a04c08efba..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/VoidLBMKernel.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "VoidLBMKernel.h"
-#include "BCSet.h"
-#include "DataSet3D.h"
-#include "VoidData3D.h"
-#include "D3Q27System.h"
-
-VoidLBMKernel::VoidLBMKernel() = default;
-//////////////////////////////////////////////////////////////////////////
-VoidLBMKernel::~VoidLBMKernel() = default;
-//////////////////////////////////////////////////////////////////////////
-void VoidLBMKernel::initDataSet()
-{
-    SPtr<DistributionArray3D> d(new VoidData3D(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
-    dataSet->setFdistributions(d);
-}
-//////////////////////////////////////////////////////////////////////////
-SPtr<LBMKernel> VoidLBMKernel::clone()
-{
-    SPtr<LBMKernel> kernel(new VoidLBMKernel());
-    kernel->setNX(nx);
-    dynamicPointerCast<VoidLBMKernel>(kernel)->initDataSet();
-    kernel->setCollisionFactor(this->collFactor);
-    kernel->setBCSet(bcSet->clone(kernel));
-    kernel->setWithForcing(withForcing);
-    kernel->setForcingX1(muForcingX1);
-    kernel->setForcingX2(muForcingX2);
-    kernel->setForcingX3(muForcingX3);
-    kernel->setIndex(ix1, ix2, ix3);
-    kernel->setDeltaT(deltaT);
-    return kernel;
-}
-//////////////////////////////////////////////////////////////////////////
-void VoidLBMKernel::calculate(int step) {}
-//////////////////////////////////////////////////////////////////////////
-real VoidLBMKernel::getCalculationTime() { return vf::basics::constant::c0o1; }
diff --git a/src/cpu/core/LBM/VoidLBMKernel.h b/src/cpu/core/LBM/VoidLBMKernel.h
deleted file mode 100644
index 0984cab144021c3895bf8cb85f50efbc94476e6b..0000000000000000000000000000000000000000
--- a/src/cpu/core/LBM/VoidLBMKernel.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef VoidLBMKernel_h__
-#define VoidLBMKernel_h__
-
-#include "LBMKernel.h"
-
-class VoidLBMKernel : public LBMKernel
-{
-public:
-    VoidLBMKernel();
-    ~VoidLBMKernel() override;
-    SPtr<LBMKernel> clone() override;
-    void calculate(int step) override;
-    real getCalculationTime() override;
-    void initDataSet();
-
-protected:
-};
-#endif // VoidLBMKernel_h__
diff --git a/src/cpu/core/Parallel/MPIIODataStructures.h b/src/cpu/core/Parallel/MPIIODataStructures.h
index dd5b9935a99e6ad1da05cb48a18b0c5ef12090ac..aa10500fb3acf71e74afb8f5d7a22aadccf84e53 100644
--- a/src/cpu/core/Parallel/MPIIODataStructures.h
+++ b/src/cpu/core/Parallel/MPIIODataStructures.h
@@ -109,7 +109,7 @@ struct DataSetSmallMigration {
 //! \details The structure is used to write data describing boundary conditions of the blocks when saving the grid
 //! and to read it when restoring the grid
 struct BoundaryCondition {
-    long long noslipBoundaryFlags; //	MPI_LONG_LONG
+    long long noslipBoundaryFlags; //    MPI_LONG_LONG
     long long slipBoundaryFlags;
     long long velocityBoundaryFlags;
     long long densityBoundaryFlags;
@@ -124,7 +124,7 @@ struct BoundaryCondition {
     float nx1, nx2, nx3;    //  not double!!!
     float  q[26];           //  not double!!!
 
-    char algorithmType;
+    char bcStrategyKey;
 };
 
 //! \struct boundCondParam
@@ -141,11 +141,11 @@ struct boundCondParam {
 //! \brief Structure describes parameters of the BCAdd in MPIIORestartSimulationObserver format
 //! \details The structure is used when reading from the file
 struct BCAddRestart {
-    int x1; //	to find the right block
+    int x1; //    to find the right block
     int x2;
     int x3;
     int level;
-    int boundCond_count;      //	how many BoundaryCondition-structures are in this block
+    int boundCond_count;      //    how many BoundaryCondition-structures are in this block
     int indexContainer_count; // how many indexContainer-values are in this block
 };
 
@@ -156,7 +156,7 @@ struct BCAddRestart {
 //! and to set common parameters
 struct BCAddMigration {
     int globalID;
-    int boundCond_count;      //	how many BoundaryCondition-structures are in this block
+    int boundCond_count;      //    how many BoundaryCondition-structures are in this block
     int indexContainer_count; // how many indexContainer-values are in this block
 };
 
diff --git a/src/cpu/core/Simulation/Grid3D.cpp b/src/cpu/core/Simulation/Grid3D.cpp
index faa3d793b72f4e1c51c7c6d87d060c68dfbed7d9..635f92ad6cb9ee90151c06509b9d329601d83998 100644
--- a/src/cpu/core/Simulation/Grid3D.cpp
+++ b/src/cpu/core/Simulation/Grid3D.cpp
@@ -165,7 +165,7 @@ void Grid3D::deleteBlocks()
     int maxInitLevel = D3Q27System::MAXLEVEL;
     for (int level = minInitLevel; level < maxInitLevel; level++) {
         getBlocks(level, blocksVector[level]);
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
             deleteBlock(block);
     }
 }
@@ -239,7 +239,7 @@ SPtr<Block3D> Grid3D::getSuperBlock(int ix1, int ix2, int ix3, int level)
     if (level < 1)
         throw UbException(UB_EXARGS, "level <1");
 
-    // from Lower Level to higher:	 >> 	1 in x1,x2,x3
+    // from Lower Level to higher:     >>     1 in x1,x2,x3
     SPtr<Block3D> block;
     for (int l = level - 1; l >= 0; l--) {
         ix1 = ix1 >> 1;
diff --git a/src/cpu/core/Simulation/Simulation.cpp b/src/cpu/core/Simulation/Simulation.cpp
index e3b0169847d43efd62bdf7dabf80fdc009027d46..c4766c8cfd0865880fa2df2a76e9a28036915dea 100644
--- a/src/cpu/core/Simulation/Simulation.cpp
+++ b/src/cpu/core/Simulation/Simulation.cpp
@@ -49,7 +49,10 @@
 #define OMP_SCHEDULE guided
 
 // #define TIMING
-// #include "UbTiming.h"
+#ifdef TIMING
+#include <basics/Timer/Timer.h>
+using namespace vf::basics;
+#endif
 
 #include <basics/utilities/UbException.h>
 
@@ -254,7 +257,7 @@ void Simulation::run()
         int threshold;
 
 #ifdef TIMING
-        UbTimer timer;
+        Timer timer;
         real time[6];
 #endif
 
@@ -272,8 +275,8 @@ void Simulation::run()
                     for (straightStartLevel = maxInitLevel, threshold = 1; (staggeredStep & threshold) != threshold; straightStartLevel--, threshold <<= 1)
                         ;
                 }
-#ifdef TIMING
-                timer.resetAndStart();
+#ifdef TIMING   
+                timer.start();
 #endif
                 //////////////////////////////////////////////////////////////////////////
                 applyPreCollisionBC(straightStartLevel, maxInitLevel);
@@ -282,8 +285,9 @@ void Simulation::run()
                 calculateBlocks(straightStartLevel, maxInitLevel, calcStep);
                 //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-                time[0] = timer.stop();
+                time[0] = timer.getCurrentRuntimeInSeconds();
                 UBLOG(logINFO, "calculateBlocks time = " << time[0]);
+                timer.start();
 #endif
                 //////////////////////////////////////////////////////////////////////////
                 //////////////////////////////////////////////////////////////////////////
@@ -291,31 +295,35 @@ void Simulation::run()
                 exchangeBlockData(straightStartLevel, maxInitLevel);
                 //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-                time[1] = timer.stop();
+                time[1] = timer.getCurrentRuntimeInSeconds();
                 UBLOG(logINFO, "exchangeBlockData time = " << time[1]);
+                timer.start();
 #endif
                 //////////////////////////////////////////////////////////////////////////
                 applyPostCollisionBC(straightStartLevel, maxInitLevel);
                 //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-                time[2] = timer.stop();
+                time[2] = timer.getCurrentRuntimeInSeconds();
                 UBLOG(logINFO, "applyBCs time = " << time[2]);
+                timer.start();
 #endif
                 //////////////////////////////////////////////////////////////////////////
                 // swap distributions in kernel
                 swapDistributions(straightStartLevel, maxInitLevel);
                 //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-                time[3] = timer.stop();
+                time[3] = timer.getCurrentRuntimeInSeconds();
                 UBLOG(logINFO, "swapDistributions time = " << time[3]);
+                timer.start();
 #endif
                 //////////////////////////////////////////////////////////////////////////
                 if (refinement) {
                     if (straightStartLevel < maxInitLevel) exchangeBlockData(straightStartLevel, maxInitLevel);
                         //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-                    time[4] = timer.stop();
+                    time[4] = timer.getCurrentRuntimeInSeconds();
                     UBLOG(logINFO, "refinement exchangeBlockData time = " << time[4]);
+                    timer.start();
 #endif
                     //////////////////////////////////////////////////////////////////////////
                     // now ghost nodes have actual values
@@ -323,8 +331,9 @@ void Simulation::run()
                     interpolation(straightStartLevel, maxInitLevel);
                     //////////////////////////////////////////////////////////////////////////
 #ifdef TIMING
-                    time[5] = timer.stop();
+                    time[5] = timer.getCurrentRuntimeInSeconds();
                     UBLOG(logINFO, "refinement interpolation time = " << time[5]);
+                    timer.start();
 #endif
                     //////////////////////////////////////////////////////////////////////////
                 }
@@ -362,7 +371,10 @@ void Simulation::calculateBlocks(int startLevel, int maxInitLevel, int calcStep)
         SPtr<Block3D> blockTemp;
         // startLevel bis maxInitLevel
         for (int level = startLevel; level <= maxInitLevel; level++) {
-            // timer.resetAndStart();
+#ifdef TIMING
+            Timer timer;
+            timer.start();
+#endif
             // call LBM kernel
             int size = (int)blocks[level].size();
 #ifdef _OPENMP
@@ -378,9 +390,11 @@ void Simulation::calculateBlocks(int startLevel, int maxInitLevel, int calcStep)
                     std::exit(EXIT_FAILURE);
                 }
             }
-            // timer.stop();
-            // UBLOG(logINFO, "level = " << level << " blocks = " << blocks[level].size() << " collision time = " <<
-            // timer.getTotalTime());
+#ifdef TIMING
+            timer.end();
+            UBLOG(logINFO, "level = " << level << " blocks = " << blocks[level].size()
+                                      << " collision time = " << timer.getTimeInSeconds());
+#endif
         }
     }
 }
diff --git a/src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.cpp
index 4542a2837b7c08653e138e73df18493a67b96bde..f0e2d84af4fa33ae7fc2145a1a94a130eaa1136e 100644
--- a/src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.cpp
@@ -221,7 +221,7 @@ void AverageValuesSimulationObserver::clearData()
 void AverageValuesSimulationObserver::addData(const SPtr<Block3D> block)
 {
     UbTupleDouble3 org = grid->getBlockWorldCoordinates(block);
-    //	UbTupleDouble3 blockLengths = grid->getBlockLengths(block);
+    //    UbTupleDouble3 blockLengths = grid->getBlockLengths(block);
     UbTupleDouble3 nodeOffset = grid->getNodeOffset(block);
     real dx                 = grid->getDeltaX(block);
 
@@ -454,97 +454,97 @@ void AverageValuesSimulationObserver::calculateAverageValues(real timeStep)
 // void AverageValuesSimulationObserver::initPlotData(double step)
 //{
 //   std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::Communicator::getInstance();
-//	if (comm->getProcessID() == comm->getRoot())
-//	{
-//		std::ofstream ostr;
-//		string fname = path + "_PlotData_" + UbSystem::toString(step) + ".txt";
-//		ostr.open(fname.c_str(), std::ios_base::out);
-//		if(!ostr)
-//		{
-//			ostr.clear();
-//			string path = UbSystem::getPathFromString(fname);
-//			if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out);}
-//			if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname);
-//		}
-//		ostr << "Time"<< "\t" <<"Ref.Time"<<"\t"<< "Z_Coor"<< "\t" << "Pore fraction" << "\t";
-//		ostr << "Vx"  << "\t" << "Vy" << "\t" << "Vz" << "\t";
-//		ostr << "TSx" << "\t" << "TSy"<< "\t" << "TSz"<< "TSxz";
-//		ostr << endl;
-//		ostr.close();
-//	}
+//    if (comm->getProcessID() == comm->getRoot())
+//    {
+//        std::ofstream ostr;
+//        string fname = path + "_PlotData_" + UbSystem::toString(step) + ".txt";
+//        ostr.open(fname.c_str(), std::ios_base::out);
+//        if(!ostr)
+//        {
+//            ostr.clear();
+//            string path = UbSystem::getPathFromString(fname);
+//            if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out);}
+//            if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname);
+//        }
+//        ostr << "Time"<< "\t" <<"Ref.Time"<<"\t"<< "Z_Coor"<< "\t" << "Pore fraction" << "\t";
+//        ostr << "Vx"  << "\t" << "Vy" << "\t" << "Vz" << "\t";
+//        ostr << "TSx" << "\t" << "TSy"<< "\t" << "TSz"<< "TSxz";
+//        ostr << endl;
+//        ostr.close();
+//    }
 //}
 //////////////////////////////////////////////////////////////////////////////
 // void AverageValuesSimulationObserver::collectPlotData(double step)
 //{
 //
-//	double hminX1 = 0.9;
-//	double hminX2 = 0.0;
-//	double hmaxX1 = 0.95;
-//	double hmaxX2 = 0.01; //systemabmessungen world units
+//    double hminX1 = 0.9;
+//    double hminX2 = 0.0;
+//    double hmaxX1 = 0.95;
+//    double hmaxX2 = 0.01; //systemabmessungen world units
 //
-//	// 3 level platte standard:
-//	double hX3_level[] = {0.305, 0.309,0.3365,0.35};
-//	//0.004, 0,0365,0.045
-//	//musis: 3 level refinement
-//	//double hX3_level[] = {0.42, 0.28, 0.105, 0.0}; //refinement coords
-//	                    //bsislevel von 0.42-0.28,... (level 0 bis 2 , 3 insgesamt)
-//	//musis: 4 level refinement
-//	//double hX3_level[] = {0.42, 0.3, 0.195, 0.078, 0.0};
-//	//musis: 5 level refinement
-//	//double hX3_level[] = {0.396, 0.28, 0.18, 0.08, 0.006, 0.0};
+//    // 3 level platte standard:
+//    double hX3_level[] = {0.305, 0.309,0.3365,0.35};
+//    //0.004, 0,0365,0.045
+//    //musis: 3 level refinement
+//    //double hX3_level[] = {0.42, 0.28, 0.105, 0.0}; //refinement coords
+//                        //bsislevel von 0.42-0.28,... (level 0 bis 2 , 3 insgesamt)
+//    //musis: 4 level refinement
+//    //double hX3_level[] = {0.42, 0.3, 0.195, 0.078, 0.0};
+//    //musis: 5 level refinement
+//    //double hX3_level[] = {0.396, 0.28, 0.18, 0.08, 0.006, 0.0};
 //
-//	ostringstream Str;
-//	Str << step;
-//	string step2string(Str.str());
-//	string fname = path + "_PlotZ_" + step2string + ".txt";
+//    ostringstream Str;
+//    Str << step;
+//    string step2string(Str.str());
+//    string fname = path + "_PlotZ_" + step2string + ".txt";
 //
 //
-//	for(int level = minInitLevel; level<=maxInitLevel;level++)
-//	{
-//		double dx = grid->getDeltaX(level);
+//    for(int level = minInitLevel; level<=maxInitLevel;level++)
+//    {
+//        double dx = grid->getDeltaX(level);
 //
-//		for (double hi =hX3_level[level]; hi >= hX3_level[level+1]; hi=hi-dx ){
-//			D3Q27IntegrateValuesHelper h1(grid, comm,
-//				hminX1, hminX2, hi,
-//				hmaxX1, hmaxX2, hi-dx);
+//        for (double hi =hX3_level[level]; hi >= hX3_level[level+1]; hi=hi-dx ){
+//            D3Q27IntegrateValuesHelper h1(grid, comm,
+//                hminX1, hminX2, hi,
+//                hmaxX1, hmaxX2, hi-dx);
 //
-//			h1.calculateAV();
-//			double nn1 = h1.getNumberOfNodes();
-//			double ns1 = h1.getNumberOfSolids();
-//			if (nn1 > 0.0){
-//				// get data and write into txt files
-//				if (comm->getProcessID() == comm->getRoot())
-//				{
-//					int istep = static_cast<int>(step);
-//					std::ofstream ostr;
+//            h1.calculateAV();
+//            double nn1 = h1.getNumberOfNodes();
+//            double ns1 = h1.getNumberOfSolids();
+//            if (nn1 > 0.0){
+//                // get data and write into txt files
+//                if (comm->getProcessID() == comm->getRoot())
+//                {
+//                    int istep = static_cast<int>(step);
+//                    std::ofstream ostr;
 //
-//					double AvVx1 = h1.getAvVx1()/nn1;
-//					double AvVx2 = h1.getAvVx2()/nn1;
-//					double AvVx3 = h1.getAvVx3()/nn1;
+//                    double AvVx1 = h1.getAvVx1()/nn1;
+//                    double AvVx2 = h1.getAvVx2()/nn1;
+//                    double AvVx3 = h1.getAvVx3()/nn1;
 //
-//					double AvTSx1 = h1.getTSx1()/nn1;
-//					double AvTSx2 = h1.getTSx2()/nn1;
-//					double AvTSx3 = h1.getTSx3()/nn1;
+//                    double AvTSx1 = h1.getTSx1()/nn1;
+//                    double AvTSx2 = h1.getTSx2()/nn1;
+//                    double AvTSx3 = h1.getTSx3()/nn1;
 //
-//					double AvTSx1x3 = h1.getTSx1x3()/nn1;
+//                    double AvTSx1x3 = h1.getTSx1x3()/nn1;
 //
-//					ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);
-//					if(!ostr)
-//					{
-//						ostr.clear();
-//						string path = UbSystem::getPathFromString(fname);
-//						if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out |
-//std::ios_base::app);} 						if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname);
-//					}
-//					ostr << istep << "\t" << resetStep << "\t" << hi+0.5*dx << "\t" << nn1/(nn1+ns1)*100.0 << "%\t";
-//					ostr << AvVx1 << "\t" << AvVx2 << "\t" << AvVx3 << "\t";
-//					ostr << AvTSx1<< "\t" << AvTSx2<< "\t" << AvTSx3<< "\t" << AvTSx1x3;
-//					ostr << endl;
-//					ostr.close();
+//                    ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);
+//                    if(!ostr)
+//                    {
+//                        ostr.clear();
+//                        string path = UbSystem::getPathFromString(fname);
+//                        if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out |
+//std::ios_base::app);}                         if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname);
+//                    }
+//                    ostr << istep << "\t" << resetStep << "\t" << hi+0.5*dx << "\t" << nn1/(nn1+ns1)*100.0 << "%\t";
+//                    ostr << AvVx1 << "\t" << AvVx2 << "\t" << AvVx3 << "\t";
+//                    ostr << AvTSx1<< "\t" << AvTSx2<< "\t" << AvTSx3<< "\t" << AvTSx1x3;
+//                    ostr << endl;
+//                    ostr.close();
 //
-//				}
-//			}
-//		}
+//                }
+//            }
+//        }
 //
-//	}
+//    }
 //}
diff --git a/src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.cpp
index cfda41094095255a1b263a0f00ce607e8715bbab..5ee3e47bf6e2a9cae5d8e322f5e713252f25ed84 100644
--- a/src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.cpp
@@ -203,10 +203,10 @@ UbTupleDouble3 CalculateForcesSimulationObserver::getForces(int x1, int x2, int
         for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
             if (bc->hasNoSlipBoundaryFlag(fdir)) {
                 const int invDir = D3Q27System::INVDIR[fdir];
-                f = dynamicPointerCast<EsoTwist3D>(distributions)->getDistributionInvForDirection(x1, x2, x3, invDir);
+                f = dynamicPointerCast<EsoTwist3D>(distributions)->getPostCollisionDistributionForDirection(x1, x2, x3, invDir);
                 fnbr =
                     dynamicPointerCast<EsoTwist3D>(distributions)
-                        ->getDistributionInvForDirection(x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir],
+                        ->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir],
                                                          x3 + D3Q27System::DX3[invDir], fdir);
 
                 forceX1 += (f + fnbr) * D3Q27System::DX1[invDir];
diff --git a/src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp b/src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp
deleted file mode 100644
index 7d9d22bd7dcac7b7216a7cf8d6fe7b54bc0fba50..0000000000000000000000000000000000000000
--- a/src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp
+++ /dev/null
@@ -1,298 +0,0 @@
-#include "NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.h"
-#include "BCSet.h"
-
-#include <parallel/Communicator.h>
-#include "D3Q27Interactor.h"
-#include "UbScheduler.h"
-#include "Grid3D.h"
-#include "BoundaryConditions.h"
-#include "DataSet3D.h"
-#include "Block3D.h"
-#include "LBMKernel.h"
-#include "BCArray3D.h"
-#include "EsoTwist3D.h"
-#include "DistributionArray3D.h"
-#include "NonNewtonianFluids/LBM/Rheology.h"
-
-CalculateTorqueSimulationObserver::CalculateTorqueSimulationObserver( SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path_, std::shared_ptr<vf::parallel::Communicator> comm) : SimulationObserver(grid, s), path(path_), comm(comm), torqueX1global(0), torqueX2global(0), torqueX3global(0)
-{
-   if (comm->getProcessID() == comm->getRoot())
-   {
-      std::ofstream ostr;
-       std::string fname = path_;
-      ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);
-      if(!ostr)
-      { 
-         ostr.clear();
-         const std::string path = UbSystem::getPathFromString(fname);
-         if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);}
-         if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname);
-      }
-
-      ostr << "step;";
-      ostr << "Tx;";
-      ostr << "Ty;";
-      ostr << "Tz" << std::endl;
-      ostr.close();
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-CalculateTorqueSimulationObserver::~CalculateTorqueSimulationObserver()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void CalculateTorqueSimulationObserver::update( real step )
-{
-   if(scheduler->isDue(step) )
-      collectData(step);
-
-   UBLOG(logDEBUG3, "D3Q27ForcesSimulationObserver::update:" << step);
-}
-//////////////////////////////////////////////////////////////////////////
-void CalculateTorqueSimulationObserver::collectData( real step )
-{
-   calculateForces();
-
-   if (comm->getProcessID() == comm->getRoot())
-   {
-      int istep = static_cast<int>(step);
-      std::ofstream ostr;
-      std::string fname = path;
-      ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);
-      if(!ostr)
-      { 
-         ostr.clear();
-         std::string path = UbSystem::getPathFromString(fname);
-         if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);}
-         if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname);
-      }
-
-      ostr << istep << ";";
-      ostr << torqueX1global << ";";
-      ostr << torqueX2global << ";";
-      ostr << torqueX3global << ";";
-      ostr << Fx << ";";
-      ostr << Fy << ";";
-      ostr << Fz;
-      ostr << std::endl;
-      ostr.close();
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void CalculateTorqueSimulationObserver::calculateForces()
-{
-    using namespace  vf::basics::constant;
-
-   torqueX1global = c0o1;
-   torqueX2global = c0o1;
-   torqueX3global = c0o1;
-
-   for(SPtr<D3Q27Interactor> interactor : interactors)
-   {
-      real x1Centre = interactor->getGbObject3D()->getX1Centroid();
-      real x2Centre = interactor->getGbObject3D()->getX2Centroid();
-      real x3Centre = interactor->getGbObject3D()->getX3Centroid();
-
-      for(BcNodeIndicesMap::value_type t : interactor->getBcNodeIndicesMap())
-      {
-         real torqueX1 = c0o1;
-         real torqueX2 = c0o1;
-         real torqueX3 = c0o1;
-
-         SPtr<Block3D> block = t.first;
-         std::set< std::vector<int> >& transNodeIndicesSet = t.second;
-
-         real deltaX = grid->getDeltaX(block);
-
-         SPtr<ILBMKernel> kernel = block->getKernel();
-
-         SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray();          
-         SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); 
-
-         int ghostLayerWidth = kernel->getGhostLayerWidth();
-         int minX1 = ghostLayerWidth;
-         int maxX1 = (int)bcArray->getNX1() - 1 - ghostLayerWidth;
-         int minX2 = ghostLayerWidth;
-         int maxX2 = (int)bcArray->getNX2() - 1 - ghostLayerWidth;
-         int minX3 = ghostLayerWidth;
-         int maxX3 = (int)bcArray->getNX3() - 1 - ghostLayerWidth;
-
-         for(std::vector<int> node : transNodeIndicesSet)
-         {
-            int x1 = node[0];
-            int x2 = node[1];
-            int x3 = node[2];
-
-            //without ghost nodes
-            if (x1 < minX1 || x1 > maxX1 || x2 < minX2 || x2 > maxX2 ||x3 < minX3 || x3 > maxX3 ) continue;
-
-            if(bcArray->isFluid(x1,x2,x3)) //es kann sein, dass der node von einem anderen interactor z.B. als solid gemarkt wurde!!!
-            {
-               SPtr<BoundaryConditions> bc = bcArray->getBC(x1,x2,x3);
-               
-               Vector3D worldCoordinates = grid->getNodeCoordinates(block, x1, x2, x3);
-               real rx = (worldCoordinates[0] - x1Centre) / deltaX;
-               real ry = (worldCoordinates[1] - x2Centre) / deltaX;
-               real rz = (worldCoordinates[2] - x3Centre) / deltaX;
-
-               // real nx = rx / sqrt(rx * rx + ry * ry + rz * rz);
-               // real ny = ry / sqrt(rx * rx + ry * ry + rz * rz);
-               // real nz = rz / sqrt(rx * rx + ry * ry + rz * rz);
-
-               UbTupleDouble3 forceVec = getForces(x1, x2, x3, distributions, bc);
-               //UbTupleDouble3 forceVec = getForcesFromMoments(x1, x2, x3, kernel, distributions, bc, nx, ny, nz);
-               //UbTupleDouble3 forceVec = getForcesFromStressTensor(x1, x2, x3, kernel, distributions, bc, nx, ny, nz);
-               /*real*/ Fx                   = val<1>(forceVec);
-               /*real*/ Fy                   = val<2>(forceVec);
-               /*real*/ Fz                   = val<3>(forceVec);
-              
-
-
-               torqueX1 += ry * Fz - rz * Fy;
-               torqueX2 += rz * Fx - rx * Fz;
-               torqueX3 += rx * Fy - ry * Fx;
-            }
-         }
-
-         torqueX1global += torqueX1;
-         torqueX2global += torqueX2;
-         torqueX3global += torqueX3;
-      }
-   }
-   std::vector<real> values;
-   std::vector<real> rvalues;
-   values.push_back(torqueX1global);
-   values.push_back(torqueX2global);
-   values.push_back(torqueX3global);
-
-   rvalues = comm->gather(values);
-   if (comm->getProcessID() == comm->getRoot())
-   {
-      torqueX1global = c0o1;
-      torqueX2global = c0o1;
-      torqueX3global = c0o1;
-      
-      for (int i = 0; i < (int)rvalues.size(); i+=3)
-      {
-         torqueX1global += rvalues[i];
-         torqueX2global += rvalues[i+1];
-         torqueX3global += rvalues[i+2];
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-UbTupleDouble3 CalculateTorqueSimulationObserver::getForces(int x1, int x2, int x3,  SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc)
-{
-    using namespace  vf::basics::constant;
-
-   UbTupleDouble3 force(c0o1,c0o1,c0o1);
-
-   if(bc)
-   {
-      //references to tuple "force"
-      real& forceX1 = val<1>(force);
-      real& forceX2 = val<2>(force);
-      real& forceX3 = val<3>(force);
-      real f,  fnbr;
-
-      dynamicPointerCast<EsoTwist3D>(distributions)->swap();
-
-      for(int fdir=D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
-      {
-         if(bc->hasNoSlipBoundaryFlag(fdir) || bc->hasVelocityBoundaryFlag(fdir))
-         {
-            const int invDir = D3Q27System::INVDIR[fdir];
-            f = dynamicPointerCast<EsoTwist3D>(distributions)->getDistributionInvForDirection(x1, x2, x3, invDir);
-            fnbr = dynamicPointerCast<EsoTwist3D>(distributions)->getDistributionInvForDirection(x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-
-            forceX1 += (f + fnbr) * D3Q27System::DX1[invDir];
-            forceX2 += (f + fnbr) * D3Q27System::DX2[invDir];
-            forceX3 += (f + fnbr) * D3Q27System::DX3[invDir];
-         }
-      }
-
-      dynamicPointerCast<EsoTwist3D>(distributions)->swap();
-   }
-
-   return force;
-}
-//////////////////////////////////////////////////////////////////////////
-UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromMoments(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz)
-{
-   using namespace vf::basics::constant;
-   UbTupleDouble3 force(c0o1, c0o1, c0o1);
-
-
-   if (bc) {
-      real f[D3Q27System::ENDF + 1];
-      distributions->getPreCollisionDistribution(f, x1, x2, x3);
-      real collFactor = kernel->getCollisionFactor();
-      real shearRate = D3Q27System::getShearRate(f, collFactor);
-      real rho = D3Q27System::getDensity(f);
-      real omega = Rheology::getBinghamCollFactor(collFactor, shearRate, rho);
-      std::array<real, 6> moments = D3Q27System::getSecondMoments(f, omega);
-
-      // references to tuple "force"
-      real &forceX1 = val<1>(force);
-      real &forceX2 = val<2>(force);
-      real &forceX3 = val<3>(force);
-
-      real mxx = (moments[0] + moments[1] + moments[2])*c1o3;
-      real myy = (-c2o1 * moments[1] + moments[2] + moments[0]) * c1o3; 
-      real mzz = (-c2o1 * moments[2] + moments[1] + moments[0]) * c1o3;
-      real mxy = moments[3];
-      real mxz = moments[4];
-      real myz = moments[5];
-      
-      forceX1 = mxx *nx + mxy*ny + mxz*nz;
-      forceX2 = mxy *nx + myy*ny + myz*nz;
-      forceX3 = mxz *nx + myz*ny + mzz*nz;
-   }
-
-   return force;
-}
-//////////////////////////////////////////////////////////////////////////
-UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromStressTensor(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz)
-{
-   using namespace vf::basics::constant;
-   UbTupleDouble3 force(c0o1, c0o1, c0o1);
-
-   if (bc) {
-      real f[D3Q27System::ENDF + 1];
-      distributions->getPreCollisionDistribution(f, x1, x2, x3);
-      real collFactor = kernel->getCollisionFactor();
-      real shearRate = D3Q27System::getShearRate(f, collFactor);
-      real rho = D3Q27System::getDensity(f);
-      real omega = Rheology::getBinghamCollFactor(collFactor, shearRate, rho);
-      std::array<real, 6> stress = D3Q27System::getStressTensor(f, omega);
-
-      // references to tuple "force"
-      real &forceX1 = val<1>(force);
-      real &forceX2 = val<2>(force);
-      real &forceX3 = val<3>(force);
-
-      real &tauXX = stress[0];
-      real &tauYY = stress[1];
-      real &tauZZ = stress[2];
-      real &tauXY = stress[3];
-      real &tauXZ = stress[4];
-      real &tauYZ = stress[5];
-
-      //https: // journals.aps.org/pre/pdf/10.1103/PhysRevE.88.013303
-
-      forceX1 = tauXX * nx + tauXY * ny + tauXZ * nz;
-      forceX2 = tauXY * nx + tauYY * ny + tauYZ * nz;
-      forceX3 = tauXZ * nx + tauYZ * ny + tauZZ * nz;
-   }
-
-   return force;
-}
-//////////////////////////////////////////////////////////////////////////
-void CalculateTorqueSimulationObserver::addInteractor( SPtr<D3Q27Interactor> interactor )
-{
-   interactors.push_back(interactor);
-}
-
-
-
diff --git a/src/cpu/core/SimulationObservers/ForceCalculator.cpp b/src/cpu/core/SimulationObservers/ForceCalculator.cpp
index e3f0816589c4ef758f897b92c25d721ac8837abe..6b57cf6f99c66e219d619ada02d9f0e299a088ee 100644
--- a/src/cpu/core/SimulationObservers/ForceCalculator.cpp
+++ b/src/cpu/core/SimulationObservers/ForceCalculator.cpp
@@ -29,8 +29,8 @@ Vector3D ForceCalculator::getForces(int x1, int x2, int x3, SPtr<DistributionArr
         for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {
             if (bc->hasNoSlipBoundaryFlag(fdir) || bc->hasVelocityBoundaryFlag(fdir)) {
                 const int invDir  = D3Q27System::INVDIR[fdir];
-                const real f    = distributions->getDistributionInvForDirection(x1, x2, x3, invDir);
-                const real fnbr = distributions->getDistributionInvForDirection(
+                const real f    = distributions->getPostCollisionDistributionForDirection(x1, x2, x3, invDir);
+                const real fnbr = distributions->getPostCollisionDistributionForDirection(
                     x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
 
                 real correction[3] = { c0o1, c0o1, c0o1 };
diff --git a/src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.cpp b/src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.cpp
index 07a27f074c7ac9cc9850db90f94fec19687fa4cb..07040524541aa8168cd186c98d7a7882be1a332a 100644
--- a/src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.cpp
@@ -223,8 +223,8 @@ void InSituCatalystSimulationObserver::addVTKGridData(SPtr<Block3D> block)
     int SWB, SEB, NEB, NWB, SWT, SET, NET, NWT;
 
     // Funktionszeiger
-    // typedef void(*CalcMacrosFct)(const LBMReal* const& /*feq[27]*/, LBMReal& /*(d)rho*/, LBMReal& /*vx1*/, LBMReal&
-    // /*vx2*/, LBMReal& /*vx3*/);
+    // typedef void(*CalcMacrosFct)(const real* const& /*feq[27]*/, real& /*(d)rho*/, real& /*vx1*/, real&
+    // /*vx2*/, real& /*vx3*/);
 
     // CalcMacrosFct calcMacros = NULL;
 
diff --git a/src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.cpp b/src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.cpp
index 2dbdcb6373e24a57ebeafe6243db4ccaa083e932..6728a96f1eccc0cf4a7eaf51e8b8baf53e1b4528 100644
--- a/src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.cpp
@@ -191,7 +191,7 @@ void InSituVTKSimulationObserver::addData(SPtr<Block3D> block)
 
                     nodeNumbers(ix1, ix2, ix3) = nr++;
 
-                    distributions->getDistribution(f, ix1, ix2, ix3);
+                    distributions->getPreCollisionDistribution(f, ix1, ix2, ix3);
                     calcMacros(f, rho, vx1, vx2, vx3);
                     real press = D3Q27System::calcPress(f, rho, vx1, vx2, vx3);
 
diff --git a/src/cpu/core/SimulationObservers/IntegrateValuesHelper.h b/src/cpu/core/SimulationObservers/IntegrateValuesHelper.h
index 6404ca7bfab37599c6c833b53798f9048c5e265b..a5cfc4aa67fa1759d2bf73b8bea5592633825d77 100644
--- a/src/cpu/core/SimulationObservers/IntegrateValuesHelper.h
+++ b/src/cpu/core/SimulationObservers/IntegrateValuesHelper.h
@@ -12,8 +12,8 @@
 
 // struct CalcNodes
 //{
-//	SPtr<Block3D> block;
-//	std::vector<UbTupleInt3> nodes;
+//    SPtr<Block3D> block;
+//    std::vector<UbTupleInt3> nodes;
 //};
 //
 // struct Nodes
@@ -51,8 +51,8 @@ public:
     real getVx2() { return sVx2; }
     real getVx3() { return sVx3; }
     real getCellsVolume() { return sCellVolume; }
-    //  LBMReal getVm() { return sVm; }
-    // LBMReal getPress() {return sPress;}
+    //  real getVm() { return sVm; }
+    // real getPress() {return sPress;}
     real getAvVx1() { return sAvVx1; }
     real getAvVx2() { return sAvVx2; }
     real getAvVx3() { return sAvVx3; }
diff --git a/src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp
index 68ec072e59f5ba3739637db6b529e1d26d7fb78b..091044960b2513bf25f63a23086153d8e98dbfb4 100644
--- a/src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp
@@ -4,7 +4,7 @@
 
 #include "Block3D.h"
 #include <parallel/Communicator.h>
-#include "CompressibleCumulantLBMKernel.h"
+#include "K15CompressibleNavierStokes.h"
 #include "CoordinateTransformation3D.h"
 #include "DataSet3D.h"
 #include "GbLine3D.h"
diff --git a/src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp
index 456c92eb08414655764bcd41f90c6f1973aa4fc8..6fa22199a61e01fb5266418343d4f978c83bab22 100644
--- a/src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp
@@ -5,7 +5,7 @@
 #include "BoundaryConditions.h"
 #include <parallel/Communicator.h>
 #include "CoordinateTransformation3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "D3Q27System.h"
 #include "DataSet3D.h"
 #include "Grid3D.h"
@@ -130,21 +130,21 @@ void MPIIOMigrationBESimulationObserver::writeDataSet(int step)
     DSArraysPresence arrPresence;
     bool firstBlock        = true;
     int doubleCountInBlock = 0;
-    SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtrF = 0, D3Q27EsoTwist3DSplittedVectorPtrH1 = 0, D3Q27EsoTwist3DSplittedVectorPtrH2 = 0;
+    SPtr<EsoSplit> D3Q27EsoTwist3DSplittedVectorPtrF = 0, D3Q27EsoTwist3DSplittedVectorPtrH1 = 0, D3Q27EsoTwist3DSplittedVectorPtrH2 = 0;
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF = 0, localDistributionsH1 = 0, localDistributionsH2 = 0;
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF = 0, nonLocalDistributionsH1 = 0, nonLocalDistributionsH2 = 0;
     CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF = 0, zeroDistributionsH1 = 0, zeroDistributionsH2 = 0;
     
     for (int level = minInitLevel; level <= maxInitLevel; level++) 
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
-            D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(block->getKernel()->getDataSet()->getFdistributions());
+            D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<EsoSplit>(block->getKernel()->getDataSet()->getFdistributions());
             localDistributionsF    = D3Q27EsoTwist3DSplittedVectorPtrF->getLocalDistributions();
             nonLocalDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getNonLocalDistributions();
             zeroDistributionsF     = D3Q27EsoTwist3DSplittedVectorPtrF->getZeroDistributions();
  
-            D3Q27EsoTwist3DSplittedVectorPtrH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(block->getKernel()->getDataSet()->getHdistributions());
+            D3Q27EsoTwist3DSplittedVectorPtrH1 = dynamicPointerCast<EsoSplit>(block->getKernel()->getDataSet()->getHdistributions());
             if (D3Q27EsoTwist3DSplittedVectorPtrH1 != 0)
             {
                 multiPhase1 = true;
@@ -153,7 +153,7 @@ void MPIIOMigrationBESimulationObserver::writeDataSet(int step)
                 zeroDistributionsH1 = D3Q27EsoTwist3DSplittedVectorPtrH1->getZeroDistributions();
             }
 
-            D3Q27EsoTwist3DSplittedVectorPtrH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(block->getKernel()->getDataSet()->getH2distributions());
+            D3Q27EsoTwist3DSplittedVectorPtrH2 = dynamicPointerCast<EsoSplit>(block->getKernel()->getDataSet()->getH2distributions());
             if (D3Q27EsoTwist3DSplittedVectorPtrH2 != 0)
             {
                 multiPhase2 = true;
@@ -438,7 +438,7 @@ void MPIIOMigrationBESimulationObserver::write4DArray(int step, Arrays arrayType
 
     for (int level = minInitLevel; level <= maxInitLevel; level++) 
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             switch (arrayType) 
             {
@@ -554,7 +554,7 @@ void MPIIOMigrationBESimulationObserver::write3DArray(int step, Arrays arrayType
 
     for (int level = minInitLevel; level <= maxInitLevel; level++) 
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             switch (arrayType) 
             {
@@ -705,7 +705,7 @@ void MPIIOMigrationBESimulationObserver::writeBoundaryConds(int step)
                     bouCond->nx3                    = bcArr->bcvector[bc]->nx3;
                     for (int iq = 0; iq < 26; iq++)
                         bouCond->q[iq] = bcArr->bcvector[bc]->getQ(iq);
-                    bouCond->algorithmType = bcArr->bcvector[bc]->getBCStrategyType();
+                    bouCond->bcStrategyKey = bcArr->bcvector[bc]->getBCStrategyKey();
                 }
 
                 bcVector[ic].push_back(*bouCond);
@@ -1171,46 +1171,46 @@ void MPIIOMigrationBESimulationObserver::readDataSet(int step)
                 vectorsOfValuesH23.assign(rawDataReceiveH2[r].data() + index, rawDataReceiveH2[r].data() + index + vectorSize3);
             index += vectorSize3;
 
-            SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector());
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+            SPtr<DistributionArray3D> mFdistributions(new EsoSplit());
+            dynamicPointerCast<EsoSplit>(mFdistributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                     new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesF1, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3])));
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+            dynamicPointerCast<EsoSplit>(mFdistributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                     new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesF2, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3])));
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
+            dynamicPointerCast<EsoSplit>(mFdistributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
                         vectorsOfValuesF3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX1(dataSetParamStr1.nx1);
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX2(dataSetParamStr1.nx2);
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX3(dataSetParamStr1.nx3);
+            dynamicPointerCast<EsoSplit>(mFdistributions)->setNX1(dataSetParamStr1.nx1);
+            dynamicPointerCast<EsoSplit>(mFdistributions)->setNX2(dataSetParamStr1.nx2);
+            dynamicPointerCast<EsoSplit>(mFdistributions)->setNX3(dataSetParamStr1.nx3);
 
-            SPtr<DistributionArray3D> mH1distributions(new D3Q27EsoTwist3DSplittedVector());
+            SPtr<DistributionArray3D> mH1distributions(new EsoSplit());
             if (multiPhase1)
             {
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+                dynamicPointerCast<EsoSplit>(mH1distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                     new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH11, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3])));
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+                dynamicPointerCast<EsoSplit>(mH1distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                     new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH12, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3])));
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
+                dynamicPointerCast<EsoSplit>(mH1distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
                     vectorsOfValuesH13, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNX1(dataSetParamStr1.nx1);
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNX2(dataSetParamStr1.nx2);
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNX3(dataSetParamStr1.nx3);
+                dynamicPointerCast<EsoSplit>(mH1distributions)->setNX1(dataSetParamStr1.nx1);
+                dynamicPointerCast<EsoSplit>(mH1distributions)->setNX2(dataSetParamStr1.nx2);
+                dynamicPointerCast<EsoSplit>(mH1distributions)->setNX3(dataSetParamStr1.nx3);
             }
 
-            SPtr<DistributionArray3D> mH2distributions(new D3Q27EsoTwist3DSplittedVector());
+            SPtr<DistributionArray3D> mH2distributions(new EsoSplit());
             if (multiPhase2)
             {
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+                dynamicPointerCast<EsoSplit>(mH2distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                     new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH21, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3])));
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+                dynamicPointerCast<EsoSplit>(mH2distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                         new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH22, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3])));
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
+                dynamicPointerCast<EsoSplit>(mH2distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
                         vectorsOfValuesH23, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNX1(dataSetParamStr1.nx1);
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNX2(dataSetParamStr1.nx2);
-                dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNX3(dataSetParamStr1.nx3);
+                dynamicPointerCast<EsoSplit>(mH2distributions)->setNX1(dataSetParamStr1.nx1);
+                dynamicPointerCast<EsoSplit>(mH2distributions)->setNX2(dataSetParamStr1.nx2);
+                dynamicPointerCast<EsoSplit>(mH2distributions)->setNX3(dataSetParamStr1.nx3);
             }
 
             // find the nesessary block and fill it
@@ -1668,7 +1668,7 @@ void MPIIOMigrationBESimulationObserver::readBoundaryConds(int step)
                     bc->nx3 = bcArray[ibc].nx3;
                     for (int iq = 0; iq < 26; iq++)
                         bc->setQ(bcArray[ibc].q[iq], iq);
-                    bc->setBCStrategyType(bcArray[ibc].algorithmType);
+                    bc->setBCStrategyKey(bcArray[ibc].bcStrategyKey);
                 }
 
                 bcVector.push_back(bc);
diff --git a/src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.cpp
index 590a2812be5ad2a211200023dc14da17ecae1619..6c031011d400870abfa0ed95fd3312f973a98626 100644
--- a/src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.cpp
@@ -5,7 +5,7 @@
 #include "BoundaryConditions.h"
 #include <parallel/Communicator.h>
 #include "CoordinateTransformation3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "D3Q27System.h"
 #include "DataSet3D.h"
 #include "Grid3D.h"
@@ -150,7 +150,7 @@ void MPIIOMigrationSimulationObserver::writeDataSet(int step)
     bool firstBlock           = true;
     size_t doubleCountInBlock = 0;
     int ic                    = 0;
-    SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtrF = 0, D3Q27EsoTwist3DSplittedVectorPtrH1 = 0, D3Q27EsoTwist3DSplittedVectorPtrH2 = 0;
+    SPtr<EsoSplit> D3Q27EsoTwist3DSplittedVectorPtrF = 0, D3Q27EsoTwist3DSplittedVectorPtrH1 = 0, D3Q27EsoTwist3DSplittedVectorPtrH2 = 0;
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF = 0, localDistributionsH1 = 0, localDistributionsH2 = 0;
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF = 0, nonLocalDistributionsH1 = 0, nonLocalDistributionsH2 = 0;
     CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF = 0, zeroDistributionsH1 = 0, zeroDistributionsH2 = 0;
@@ -159,7 +159,7 @@ void MPIIOMigrationSimulationObserver::writeDataSet(int step)
 
     for (int level = minInitLevel; level <= maxInitLevel; level++) 
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             kernel = dynamicPointerCast<LBMKernel>(block->getKernel());
 
@@ -173,12 +173,12 @@ void MPIIOMigrationSimulationObserver::writeDataSet(int step)
             dataSetArray[ic].collFactorG = kernel->getCollisionFactorG();
             dataSetArray[ic].densityRatio = kernel->getDensityRatio();
 
-            D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(block->getKernel()->getDataSet()->getFdistributions());
+            D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<EsoSplit>(block->getKernel()->getDataSet()->getFdistributions());
             localDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getLocalDistributions();
             nonLocalDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getNonLocalDistributions();
             zeroDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getZeroDistributions();
 
-            D3Q27EsoTwist3DSplittedVectorPtrH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(block->getKernel()->getDataSet()->getHdistributions());
+            D3Q27EsoTwist3DSplittedVectorPtrH1 = dynamicPointerCast<EsoSplit>(block->getKernel()->getDataSet()->getHdistributions());
             if (D3Q27EsoTwist3DSplittedVectorPtrH1 != 0)
             {
                 multiPhase1 = true;
@@ -187,7 +187,7 @@ void MPIIOMigrationSimulationObserver::writeDataSet(int step)
                 zeroDistributionsH1 = D3Q27EsoTwist3DSplittedVectorPtrH1->getZeroDistributions();
             }
 
-            D3Q27EsoTwist3DSplittedVectorPtrH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(block->getKernel()->getDataSet()->getH2distributions());
+            D3Q27EsoTwist3DSplittedVectorPtrH2 = dynamicPointerCast<EsoSplit>(block->getKernel()->getDataSet()->getH2distributions());
             if (D3Q27EsoTwist3DSplittedVectorPtrH2 != 0)
             {
                 multiPhase2 = true;
@@ -487,7 +487,7 @@ void MPIIOMigrationSimulationObserver::write4DArray(int step, Arrays arrayType,
 
     for (int level = minInitLevel; level <= maxInitLevel; level++) 
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             dataSetSmallArray[ic].globalID = block->getGlobalID(); // id of the block needed to find it while regenerating the grid
 
@@ -617,7 +617,7 @@ void MPIIOMigrationSimulationObserver::write3DArray(int step, Arrays arrayType,
 
     for (int level = minInitLevel; level <= maxInitLevel; level++) 
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             dataSetSmallArray[ic].globalID = block->getGlobalID(); // id of the block needed to find it while regenerating the grid
 
@@ -786,7 +786,7 @@ void MPIIOMigrationSimulationObserver::writeBoundaryConds(int step)
                     bouCond->nx3                    = bcArr->bcvector[bc]->nx3;
                     for (int iq = 0; iq < 26; iq++)
                         bouCond->q[iq] = bcArr->bcvector[bc]->getQ(iq);
-                    bouCond->algorithmType = bcArr->bcvector[bc]->getBCStrategyType();
+                    bouCond->bcStrategyKey = bcArr->bcvector[bc]->getBCStrategyKey();
                 }
 
                 bcVector[ic].push_back(*bouCond);
@@ -987,7 +987,7 @@ void MPIIOMigrationSimulationObserver::readDataSet(int step)
 
     for (int level = minInitLevel; level <= maxInitLevel; level++) 
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             read_offset = (MPI_Offset)(3 * sizeof(dataSetParam) + block->getGlobalID() * sizeofOneDataSet);
             MPI_File_read_at(file_handler, read_offset, &dataSetArray[ic], 1, dataSetType, MPI_STATUS_IGNORE);
@@ -1016,7 +1016,7 @@ void MPIIOMigrationSimulationObserver::readDataSet(int step)
 
         for (int level = minInitLevel; level <= maxInitLevel; level++)
         {
-            for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+            for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
             {
                 read_offset = (MPI_Offset)(block->getGlobalID() * sizeofOneDataSet);
                 MPI_File_read_at(file_handler, read_offset, &doubleValuesArrayH1[ic * doubleCountInBlock], 1, dataSetDoubleType, MPI_STATUS_IGNORE);
@@ -1043,7 +1043,7 @@ void MPIIOMigrationSimulationObserver::readDataSet(int step)
 
         for (int level = minInitLevel; level <= maxInitLevel; level++)
         {
-            for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+            for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
             {
                 read_offset = (MPI_Offset)(block->getGlobalID() * sizeofOneDataSet);
                 MPI_File_read_at(file_handler, read_offset, &doubleValuesArrayH2[ic * doubleCountInBlock], 1, dataSetDoubleType, MPI_STATUS_IGNORE);
@@ -1096,48 +1096,48 @@ void MPIIOMigrationSimulationObserver::readDataSet(int step)
             vectorsOfValuesH23.assign(doubleValuesArrayH2.data() + index, doubleValuesArrayH2.data() + index + vectorSize3);
         index += vectorSize3;
  
-        SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector());
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+        SPtr<DistributionArray3D> mFdistributions(new EsoSplit());
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
             new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesF1, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3])));
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
             new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesF2, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3])));
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
             vectorsOfValuesF3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
         
         //----------------------------------------- H1 ----------------------------------------------------
-       SPtr<DistributionArray3D> mH1distributions(new D3Q27EsoTwist3DSplittedVector());
+       SPtr<DistributionArray3D> mH1distributions(new EsoSplit());
        if (multiPhase1)
         {
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                 new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH11, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3])));
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                 new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH12, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3])));
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
                 vectorsOfValuesH13, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNX1(dataSetParamStr1.nx1);
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNX2(dataSetParamStr1.nx2);
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNX3(dataSetParamStr1.nx3);
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setNX1(dataSetParamStr1.nx1);
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setNX2(dataSetParamStr1.nx2);
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setNX3(dataSetParamStr1.nx3);
          }
 
-        SPtr<DistributionArray3D> mH2distributions(new D3Q27EsoTwist3DSplittedVector());
+        SPtr<DistributionArray3D> mH2distributions(new EsoSplit());
         if (multiPhase2)
         {
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                 new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH21, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3])));
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                     new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH22, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3])));
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
                     vectorsOfValuesH23, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNX1(dataSetParamStr1.nx1);
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNX2(dataSetParamStr1.nx2);
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNX3(dataSetParamStr1.nx3);
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setNX1(dataSetParamStr1.nx1);
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setNX2(dataSetParamStr1.nx2);
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setNX3(dataSetParamStr1.nx3);
         }
 
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX1(dataSetParamStr1.nx1);
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX2(dataSetParamStr1.nx2);
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX3(dataSetParamStr1.nx3);
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setNX1(dataSetParamStr1.nx1);
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setNX2(dataSetParamStr1.nx2);
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setNX3(dataSetParamStr1.nx3);
 
         // find the nesessary block and fill it
         SPtr<Block3D> block = grid->getBlock(dataSetArray[n].globalID);
@@ -1265,7 +1265,7 @@ void MPIIOMigrationSimulationObserver::readArray(int step, Arrays arrType, std::
 
     for (int level = minInitLevel; level <= maxInitLevel; level++) 
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             read_offset = (MPI_Offset)(sizeof(dataSetParam) + block->getGlobalID() * sizeofOneDataSet);
             MPI_File_read_at(file_handler, read_offset, &dataSetSmallArray[ic], 1, dataSetSmallType, MPI_STATUS_IGNORE);
@@ -1425,7 +1425,7 @@ void MPIIOMigrationSimulationObserver::readBoundaryConds(int step)
     MPI_Offset read_offset1, read_offset2;
     for (int level = minInitLevel; level <= maxInitLevel; level++) 
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             read_offset1 = (MPI_Offset)(sizeof(boundCondParam) + block->getGlobalID() * sizeof(size_t));
 
@@ -1477,7 +1477,7 @@ void MPIIOMigrationSimulationObserver::readBoundaryConds(int step)
                     bc->nx3 = bcArray[ibc].nx3;
                     for (int iq = 0; iq < 26; iq++)
                         bc->setQ(bcArray[ibc].q[iq], iq);
-                    bc->setBCStrategyType(bcArray[ibc].algorithmType);
+                    bc->setBCStrategyKey(bcArray[ibc].bcStrategyKey);
                 }
 
                 bcVector.push_back(bc);
diff --git a/src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.cpp
index 07a63a48bee9d81d467af672c290a7528008a7eb..af43f64a68167372f98e4046cf14f6ca915b3ea3 100644
--- a/src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.cpp
@@ -5,7 +5,7 @@
 #include "BoundaryConditions.h"
 #include <parallel/Communicator.h>
 #include "CoordinateTransformation3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "D3Q27System.h"
 #include "DataSet3D.h"
 #include "Grid3D.h"
@@ -155,7 +155,7 @@ void MPIIORestartSimulationObserver::writeDataSet(int step)
     int doubleCountInBlock = 0;
     int ic                 = 0;
 
-    SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtrF, D3Q27EsoTwist3DSplittedVectorPtrH1, D3Q27EsoTwist3DSplittedVectorPtrH2;
+    SPtr<EsoSplit> D3Q27EsoTwist3DSplittedVectorPtrF, D3Q27EsoTwist3DSplittedVectorPtrH1, D3Q27EsoTwist3DSplittedVectorPtrH2;
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF, localDistributionsH1, localDistributionsH2;
     CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF, nonLocalDistributionsH1, nonLocalDistributionsH2;
     CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF, zeroDistributionsH1, zeroDistributionsH2;
@@ -164,7 +164,7 @@ void MPIIORestartSimulationObserver::writeDataSet(int step)
 
     for (int level = minInitLevel; level <= maxInitLevel; level++) 
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             kernel = dynamicPointerCast<LBMKernel>(block->getKernel());
 
@@ -181,12 +181,12 @@ void MPIIORestartSimulationObserver::writeDataSet(int step)
             dataSetArray[ic].collFactorG = kernel->getCollisionFactorG();
             dataSetArray[ic].densityRatio = kernel->getDensityRatio();
 
-            D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(block->getKernel()->getDataSet()->getFdistributions());
+            D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<EsoSplit>(block->getKernel()->getDataSet()->getFdistributions());
             localDistributionsF    = D3Q27EsoTwist3DSplittedVectorPtrF->getLocalDistributions();
             nonLocalDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getNonLocalDistributions();
             zeroDistributionsF     = D3Q27EsoTwist3DSplittedVectorPtrF->getZeroDistributions();
 
-            D3Q27EsoTwist3DSplittedVectorPtrH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(block->getKernel()->getDataSet()->getHdistributions());
+            D3Q27EsoTwist3DSplittedVectorPtrH1 = dynamicPointerCast<EsoSplit>(block->getKernel()->getDataSet()->getHdistributions());
             if (D3Q27EsoTwist3DSplittedVectorPtrH1 != 0)
             {
                 multiPhase1 = true;
@@ -195,7 +195,7 @@ void MPIIORestartSimulationObserver::writeDataSet(int step)
                 zeroDistributionsH1 = D3Q27EsoTwist3DSplittedVectorPtrH1->getZeroDistributions();
             }
 
-            D3Q27EsoTwist3DSplittedVectorPtrH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(block->getKernel()->getDataSet()->getH2distributions());
+            D3Q27EsoTwist3DSplittedVectorPtrH2 = dynamicPointerCast<EsoSplit>(block->getKernel()->getDataSet()->getH2distributions());
             if (D3Q27EsoTwist3DSplittedVectorPtrH2 != 0)
             {
                 multiPhase2 = true;
@@ -508,7 +508,7 @@ void MPIIORestartSimulationObserver::write4DArray(int step, Arrays arrayType, st
 
     for (int level = minInitLevel; level <= maxInitLevel; level++)
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             dataSetSmallArray[ic].x1 = block->getX1(); // coordinates of the block needed to find it while regenerating the grid
             dataSetSmallArray[ic].x2 = block->getX2();
@@ -665,7 +665,7 @@ void MPIIORestartSimulationObserver::write3DArray(int step, Arrays arrayType, st
 
     for (int level = minInitLevel; level <= maxInitLevel; level++)
     {
-        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
         {
             dataSetSmallArray[ic].x1 = block->getX1(); // coordinates of the block needed to find it while regenerating the grid
             dataSetSmallArray[ic].x2 = block->getX2();
@@ -859,7 +859,7 @@ void MPIIORestartSimulationObserver::writeBoundaryConds(int step)
                     bouCond->nx3                    = bcArr->bcvector[bc]->nx3;
                     for (int iq = 0; iq < 26; iq++)
                         bouCond->q[iq] = bcArr->bcvector[bc]->getQ(iq);
-                    bouCond->algorithmType = bcArr->bcvector[bc]->getBCStrategyType();
+                    bouCond->bcStrategyKey = bcArr->bcvector[bc]->getBCStrategyKey();
                 }
 
                 bcVector.push_back(*bouCond);
@@ -1156,46 +1156,46 @@ void MPIIORestartSimulationObserver::readDataSet(int step)
             vectorsOfValuesH23.assign(doubleValuesArrayH2.data() + index, doubleValuesArrayH2.data() + index + vectorSize3);
         index += vectorSize3;
 
-        SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector());
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+        SPtr<DistributionArray3D> mFdistributions(new EsoSplit());
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                 new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesF1, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3])));
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                 new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesF2, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3])));
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
                     vectorsOfValuesF3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX1(dataSetParamStr1.nx1);
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX2(dataSetParamStr1.nx2);
-        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX3(dataSetParamStr1.nx3);
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setNX1(dataSetParamStr1.nx1);
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setNX2(dataSetParamStr1.nx2);
+        dynamicPointerCast<EsoSplit>(mFdistributions)->setNX3(dataSetParamStr1.nx3);
 
-        SPtr<DistributionArray3D> mH1distributions(new D3Q27EsoTwist3DSplittedVector());
+        SPtr<DistributionArray3D> mH1distributions(new EsoSplit());
         if (multiPhase1)
         {
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                 new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH11, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3])));
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                 new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH12, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3])));
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
                 vectorsOfValuesH13, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNX1(dataSetParamStr1.nx1);
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNX2(dataSetParamStr1.nx2);
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH1distributions)->setNX3(dataSetParamStr1.nx3);
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setNX1(dataSetParamStr1.nx1);
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setNX2(dataSetParamStr1.nx2);
+            dynamicPointerCast<EsoSplit>(mH1distributions)->setNX3(dataSetParamStr1.nx3);
         }
 
-        SPtr<DistributionArray3D> mH2distributions(new D3Q27EsoTwist3DSplittedVector());
+        SPtr<DistributionArray3D> mH2distributions(new EsoSplit());
         if (multiPhase2)
         {
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                     new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH21, dataSetParamStr1.nx[0], dataSetParamStr1.nx[1], dataSetParamStr1.nx[2], dataSetParamStr1.nx[3])));
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setNonLocalDistributions(CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr(
                     new CbArray4D<real, IndexerX4X3X2X1>(vectorsOfValuesH22, dataSetParamStr2.nx[0], dataSetParamStr2.nx[1], dataSetParamStr2.nx[2], dataSetParamStr2.nx[3])));
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setZeroDistributions(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(
                     vectorsOfValuesH23, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNX1(dataSetParamStr1.nx1);
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNX2(dataSetParamStr1.nx2);
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mH2distributions)->setNX3(dataSetParamStr1.nx3);
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setNX1(dataSetParamStr1.nx1);
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setNX2(dataSetParamStr1.nx2);
+            dynamicPointerCast<EsoSplit>(mH2distributions)->setNX3(dataSetParamStr1.nx3);
         }
 
         // find the nesessary block and fill it
@@ -1546,7 +1546,7 @@ void MPIIORestartSimulationObserver::readBoundaryConds(int step)
                 bc->nx3 = bcArray[index].nx3;
                 for (int iq = 0; iq < 26; iq++)
                     bc->setQ(bcArray[index].q[iq], iq);
-                bc->setBCStrategyType(bcArray[index].algorithmType);
+                bc->setBCStrategyKey(bcArray[index].bcStrategyKey);
             }
 
             bcVector.push_back(bc);
diff --git a/src/cpu/core/SimulationObservers/MPIIOSimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIOSimulationObserver.cpp
index 19ea0482a1528a2c8a0e64d4d9f7c85e1a8ed612..644a420531fed62b9da51effe0293fd4c21ef0f4 100644
--- a/src/cpu/core/SimulationObservers/MPIIOSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/MPIIOSimulationObserver.cpp
@@ -164,7 +164,7 @@ void MPIIOSimulationObserver::writeBlocks(int step)
     Block3d *block3dArray = new Block3d[blocksCount];
     int ic                = 0;
     for (int level = minInitLevel; level <= maxInitLevel; level++) {
-        for (SPtr<Block3D> block : blocksVector[level]) //	all the blocks of the current level
+        for (SPtr<Block3D> block : blocksVector[level]) //    all the blocks of the current level
         {
             // save data describing the block
             block3dArray[ic].x1                  = block->getX1();
diff --git a/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.cpp b/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.cpp
index 81d7217c4b848ae3a6510fc1920c7621ee71c0aa..9fd7a3bef5375969d7f79da0b5d8478d369eb241 100644
--- a/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.cpp
@@ -42,7 +42,7 @@ NUPSCounterSimulationObserver::NUPSCounterSimulationObserver(SPtr<Grid3D> grid,
     : SimulationObserver(grid, s), numOfThreads(numOfThreads), nup(0), nup_t(0), nupsStep(0.0), comm(comm)
 {
     if (comm->getProcessID() == comm->getRoot()) {
-        timer.resetAndStart();
+        timer.start();
 
         real nop          = comm->getNumberOfProcesses();
         int minInitLevel    = grid->getCoarsestInitializedLevel();
@@ -70,16 +70,17 @@ void NUPSCounterSimulationObserver::update(real step)
 void NUPSCounterSimulationObserver::collectData(real step)
 {
     if (comm->getProcessID() == comm->getRoot()) {
-        real time   = timer.stop();
-        real nups_t = nup_t * (step - nupsStep) / time;
-        real nups   = nup * (step - nupsStep) / time;
-        real tnups  = nups / (real)numOfThreads;
+        timer.end();
+        double time = timer.getCurrentRuntimeInSeconds();
+        double nups_t = nup_t * (step - nupsStep) / time;
+        double nups = nup * (step - nupsStep) / time;
+        double tnups = nups / (double)numOfThreads;
         UBLOG(logINFO, "Calculation step = " << step);
         UBLOG(logINFO, "Total performance = " << nups_t << " NUPS");
         UBLOG(logINFO, "Performance per update = " << nups << " NUPS");
         UBLOG(logINFO, "Performance per thread = " << tnups << " NUPS");
         UBLOG(logINFO, "Time for " << step - nupsStep << " steps = " << time << " s");
         nupsStep = step;
-        timer.resetAndStart();
+        timer.start();
     }
 }
diff --git a/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.h b/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.h
index f0585bbdb911e3dd33262d1a790a10b97da789de..29be2c4c40eeb363ca5eabeadb17b79fb556345d 100644
--- a/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.h
+++ b/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.h
@@ -37,7 +37,8 @@
 #include <PointerDefinitions.h>
 
 #include "SimulationObserver.h"
-#include "basics/utilities/UbTiming.h"
+
+#include <basics/Timer/Timer.h>
 
 namespace vf::parallel {class Communicator;}
 class Grid3D;
@@ -63,7 +64,7 @@ protected:
     //! Collect data for calculation of NUPS
     //! \param step is a time step
     void collectData(real step);
-    UbTimer timer;
+    vf::basics::Timer timer;
     int numOfThreads;
     real numberOfNodes;
     real numberOfBlocks;
diff --git a/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp b/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp
index 397f576f63b99a4107d55bfce4e884dc987830b0..e6689b697cfef95636f882018d5bf9e81a6d9309 100644
--- a/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp
@@ -92,7 +92,7 @@ void QCriterionSimulationObserver::addData(const SPtr<Block3D> block)
     using namespace vf::basics::constant;
 
     UbTupleDouble3 org = grid->getBlockWorldCoordinates(block);
-    //	UbTupleDouble3 blockLengths = grid->getBlockLengths(block);
+    //    UbTupleDouble3 blockLengths = grid->getBlockLengths(block);
     UbTupleDouble3 nodeOffset = grid->getNodeOffset(block);
     real dx                 = grid->getDeltaX(block);
 
@@ -213,9 +213,9 @@ void QCriterionSimulationObserver::getNeighborVelocities(int offx, int offy, int
 
     bool compressible = block->getKernel()->getCompressible();
 
-    //	int minX1 = 0;
-    //	int minX2 = 0;
-    //	int minX3 = 0;
+    //    int minX1 = 0;
+    //    int minX2 = 0;
+    //    int minX3 = 0;
 
     int maxX1 = (int)(distributions->getNX1());
     // int maxX2 = (int)(distributions->getNX2());
diff --git a/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.h b/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.h
index 45eddf04a2b838cfa52a64b10fd5fb4cfed88c29..806829092ff3b0ff8fb77b5d50264c6a11d527c3 100644
--- a/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.h
+++ b/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.h
@@ -22,7 +22,7 @@ class Block3D;
 //! \brief  Computes the value Q with which vortices can be visualized as isocontours to Q=0, writes to .vtk, For
 //! uniform, serial setups only! \details writes at given time intervals specified in scheduler (s)
 //!          Processing: paraview, take isolines of entry for Q-criterion vortex detection
-//!			 Q-Criterion: Visualize Vorteces as regions where Vorticity is larger than strain rate (Hunt, 1988)
+//!             Q-Criterion: Visualize Vorteces as regions where Vorticity is larger than strain rate (Hunt, 1988)
 //! \author  Sonja Uphoff
 
 class QCriterionSimulationObserver : public SimulationObserver
diff --git a/src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp b/src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp
index 7bc7923f3c26dcf496e7111ce9383bc7907dcf57..c6818f3663146e4e93c8ef383d90606e64ea1863 100644
--- a/src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp
@@ -203,7 +203,7 @@ void ShearStressSimulationObserver::calculateShearStress(real timeStep)
                                      ((((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) - ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) +
                                       ((f[dP00] + f[dM00]) - (f[d00P] + f[d00M])) - vx * vx + vz * vz);
 
-                    // LBMReal dyyMzz =3.0/2.0 *collFactor/(collFactor-1.0)*((((f[NE] + f[SW]) + (f[SE] +
+                    // real dyyMzz =3.0/2.0 *collFactor/(collFactor-1.0)*((((f[NE] + f[SW]) + (f[SE] +
                     // f[NW]))-((f[TE] + f[BW])+(f[BE]+ f[TW])))
                     //    +((f[N] + f[S])-(f[T] + f[B])) -vy*vy +vz*vz);
 
diff --git a/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp
index 733d9d80672c483696b84b0b1ae14be660ed4866..99f67c6e2a9bfcae1b639966b55d86306d39a784 100644
--- a/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp
@@ -238,7 +238,7 @@ void WriteMacroscopicQuantitiesPlusMassSimulationObserver::addDataMQ(SPtr<Block3
 
                     // shearRate = D3Q27System::getShearRate(f, collFactor);
 
-                    // LBMReal collFactorF = RheologyBinghamModelLBMKernel::getBinghamCollFactor(collFactor, yieldStress,
+                    // real collFactorF = RheologyBinghamModelLBMKernel::getBinghamCollFactor(collFactor, yieldStress,
                     // shearRate, rho);
 
                     // data[index++].push_back(shearRate);
diff --git a/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp
index 704f09ce2eb6ceae11d604ecd9cf22fc0d3fb83c..6a6203e1ea0d979c226ac822b22e51da4f37822d 100644
--- a/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp
+++ b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp
@@ -238,7 +238,7 @@ void WriteMacroscopicQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block
 
                     // shearRate = D3Q27System::getShearRate(f, collFactor);
 
-                    // LBMReal collFactorF = RheologyBinghamModelLBMKernel::getBinghamCollFactor(collFactor, yieldStress,
+                    // real collFactorF = RheologyBinghamModelLBMKernel::getBinghamCollFactor(collFactor, yieldStress,
                     // shearRate, rho);
 
                     // data[index++].push_back(shearRate);
diff --git a/src/cpu/core/Utilities/ChangeRandomQs.hpp b/src/cpu/core/Utilities/ChangeRandomQs.hpp
index 0c0f84b27f55d194b155688cdcae29c3e8397d83..ff1c30c741e2cf02171b611c6d1eda2d234ab9ac 100644
--- a/src/cpu/core/Utilities/ChangeRandomQs.hpp
+++ b/src/cpu/core/Utilities/ChangeRandomQs.hpp
@@ -22,8 +22,8 @@ namespace Utilities
             SPtr<BoundaryConditions> bc = bcArray->getBC(val<1>(node), val<2>(node), val<3>(node));
             if (bc)
             {
-	            for (int fdir=D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
-	            {
+                for (int fdir=D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
+                {
                   if (bc->hasNoSlipBoundaryFlag(fdir))
                   {
                      const int invDir = D3Q27System::INVDIR[fdir];
@@ -41,7 +41,7 @@ namespace Utilities
                      }
                      bc->setQ(q_temp, fdir);
                   }
-	            }
+                }
             }
          }
       }
diff --git a/src/cpu/core/Utilities/CheckpointConverter.cpp b/src/cpu/core/Utilities/CheckpointConverter.cpp
index 0f41364ad614cf8ffb511461d713336e58fd0d1c..f882fd5678eb7b118f4abff78252dc058180e773 100644
--- a/src/cpu/core/Utilities/CheckpointConverter.cpp
+++ b/src/cpu/core/Utilities/CheckpointConverter.cpp
@@ -177,7 +177,7 @@ void CheckpointConverter::convertBlocks(int step, int procCount)
         int maxInitLevel = this->grid->getFinestInitializedLevel();
         for (int level = minInitLevel; level <= maxInitLevel; level++) {
             grid->getBlocks(level, blocksVector[level]);
-            for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+            for (SPtr<Block3D> block : blocksVector[level]) //    blocks of the current level
                 grid->deleteBlock(block);
         }
     }
diff --git a/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.cpp b/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.cpp
index db18f090ab566bad0f4bb39493216e8db7c7be2c..4782937be85e40806b7476cd25fa324bbd410ffb 100644
--- a/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.cpp
@@ -36,7 +36,7 @@
 #include "BCArray3D.h"
 #include "BCSet.h"
 #include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "DataSet3D.h"
 #include "Grid3D.h"
 #include "D3Q27System.h"
@@ -88,8 +88,8 @@ void BoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> bloc
                 for (int x1 = minX1; x1 < maxX1; x1++) {
                     if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
                         if ((bcPtr = bcArray->getBC(x1, x2, x3)) != NULL) {
-                            char alg              = bcPtr->getBCStrategyType();
-                            SPtr<BCStrategy> bca = bcMap[alg];
+                            char bcStrategyKey = bcPtr->getBCStrategyKey();
+                            SPtr<BCStrategy> bca = BCStrategyRegistry::getInstance()->getBCStrategy(bcStrategyKey);
 
                             if (bca) {
                                 bca = bca->clone();
@@ -109,8 +109,4 @@ void BoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> bloc
         }
     }
 }
-//////////////////////////////////////////////////////////////////////////
-void BoundaryConditionsBlockVisitor::addBC(SPtr<BC> bc)
-{
-    bcMap.insert(std::make_pair(bc->getBCStrategyType(), bc->getAlgorithm()));
-}
+
diff --git a/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.h b/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.h
index 8954bf73a6a459a795e916f24192f5db698b1426..61697735b617ec5480c138286dd4146e56f0b1f2 100644
--- a/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.h
+++ b/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.h
@@ -35,14 +35,11 @@
 #define BoundaryConditionBlockVisitor_h__
 
 #include <PointerDefinitions.h>
-#include <map>
-
 #include "Block3DVisitor.h"
 
 class Grid3D;
 class Block3D;
-class BCStrategy;
-class BC;
+
 
 //! \brief set boundary conditions
 class BoundaryConditionsBlockVisitor : public Block3DVisitor
@@ -52,10 +49,6 @@ public:
     ~BoundaryConditionsBlockVisitor() override;
 
     void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
-    void addBC(SPtr<BC> bc);
 
-protected:
-private:
-    std::map<char, SPtr<BCStrategy>> bcMap;
 };
 #endif // BoundaryConditionBlockVisitor_h__
diff --git a/src/cpu/core/Visitors/CreateTransmittersHelper.h b/src/cpu/core/Visitors/CreateTransmittersHelper.h
index 1a52078fa081b17ffc7e30c8f3cb154e9d698657..91a75489726ecab668bce58a905543806a74fb71 100644
--- a/src/cpu/core/Visitors/CreateTransmittersHelper.h
+++ b/src/cpu/core/Visitors/CreateTransmittersHelper.h
@@ -40,8 +40,9 @@
 #include "LBMSystem.h"
 
 #include <basics/container/CbVector.h>
-#include <basics/transmitter/TbTransmitter.h>
-#include <basics/transmitter/TbTransmitterMpiPool.h>
+
+#include <parallel/transmitter/TbTransmitter.h>
+#include <parallel/transmitter/TbTransmitterMpiPool.h>
 
 //! \brief The class helps to create Transmitters.
 //! \details It is created two types of Transmitters: MPI and BOND
diff --git a/src/cpu/core/Visitors/InitDistributionsBlockVisitor.cpp b/src/cpu/core/Visitors/InitDistributionsBlockVisitor.cpp
index daef0aa7eea9c0d5180845f5fc3bd88bb9f1d4ba..6a306e26caa0423e51e12444d57ab045a3734072 100644
--- a/src/cpu/core/Visitors/InitDistributionsBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/InitDistributionsBlockVisitor.cpp
@@ -101,25 +101,25 @@ void InitDistributionsBlockVisitor::setRho(const std::string &muParserString)
 //////////////////////////////////////////////////////////////////////////
 void InitDistributionsBlockVisitor::setVx1(real vx1)
 {
-    this->muVx1.SetExpr(UbSystem::toString(vx1, D3Q27RealLim::digits10));
+    this->muVx1.SetExpr(UbSystem::toString(vx1, realLim::digits10));
     this->checkFunction(muVx1);
 }
 //////////////////////////////////////////////////////////////////////////
 void InitDistributionsBlockVisitor::setVx2(real vx2)
 {
-    this->muVx2.SetExpr(UbSystem::toString(vx2, D3Q27RealLim::digits10));
+    this->muVx2.SetExpr(UbSystem::toString(vx2, realLim::digits10));
     this->checkFunction(muVx2);
 }
 //////////////////////////////////////////////////////////////////////////
 void InitDistributionsBlockVisitor::setVx3(real vx3)
 {
-    this->muVx3.SetExpr(UbSystem::toString(vx3, D3Q27RealLim::digits10));
+    this->muVx3.SetExpr(UbSystem::toString(vx3, realLim::digits10));
     this->checkFunction(muVx3);
 }
 //////////////////////////////////////////////////////////////////////////
 void InitDistributionsBlockVisitor::setRho(real rho)
 {
-    this->muRho.SetExpr(UbSystem::toString(rho, D3Q27RealLim::digits10));
+    this->muRho.SetExpr(UbSystem::toString(rho, realLim::digits10));
     this->checkFunction(muRho);
 }
 //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/core/Visitors/InitDistributionsBlockVisitor.h b/src/cpu/core/Visitors/InitDistributionsBlockVisitor.h
index 68ba69f8388fe1dffe7ed1acad8d54619f799eb2..9360f42a1bd70ff6c35446d71fb854f7076c7283 100644
--- a/src/cpu/core/Visitors/InitDistributionsBlockVisitor.h
+++ b/src/cpu/core/Visitors/InitDistributionsBlockVisitor.h
@@ -63,7 +63,7 @@ class Block3D;
 class InitDistributionsBlockVisitor : public Block3DVisitor
 {
 public:
-    using D3Q27RealLim = std::numeric_limits<real>;
+    using realLim = std::numeric_limits<real>;
 
 public:
     InitDistributionsBlockVisitor();
diff --git a/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp b/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp
deleted file mode 100644
index e3e058b2810719d0466afd1276c8aaa342d185a0..0000000000000000000000000000000000000000
--- a/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp
+++ /dev/null
@@ -1,241 +0,0 @@
-#include "InitDistributionsFromFileBlockVisitor.h"
-#include "BCArray3D.h"
-#include "BCSet.h"
-#include "Block3D.h"
-#include "DataSet3D.h"
-#include "EsoTwist3D.h"
-#include "Grid3D.h"
-#include "D3Q27System.h"
-#include "InitDensityLBMKernel.h"
-#include "LBMKernel.h"
-#include <basics/utilities/UbFileInputASCII.h>
-
-InitDistributionsFromFileBlockVisitor::InitDistributionsFromFileBlockVisitor(/*LBMReal nu, */ real rho,
-                                                                             std::string filename)
-    : Block3DVisitor(0, D3Q27System::MAXLEVEL), /*nu(nu),*/ rho(rho)
-{
-    UbFileInputASCII in(filename);
-    if (!in) {
-        throw UbException(UB_EXARGS, "could not open file " + filename);
-    }
-
-    int nodesX1 = in.readInteger();
-    int nodesX2 = in.readInteger();
-    int nodesX3 = in.readInteger();
-
-    matrix = CbArray4D<real, IndexerX4X3X2X1>(3, nodesX1, nodesX2, nodesX3, 0);
-
-    for (int x3 = 0; x3 < nodesX3; x3++)
-        for (int x2 = 0; x2 < nodesX2; x2++)
-            for (int x1 = 0; x1 < nodesX1; x1++) {
-                // for (int x1 = 0; x1<nodesX1; x1++)
-                //   for (int x2 = 0; x2<nodesX2; x2++)
-                //      for (int x3 = 0; x3<nodesX3; x3++)
-                //      {
-                matrix(Vx1, x1, x2, x3) = in.readDouble();
-                matrix(Vx2, x1, x2, x3) = in.readDouble();
-                matrix(Vx3, x1, x2, x3) = in.readDouble();
-            }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void InitDistributionsFromFileBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D> block)
-{
-    using namespace D3Q27System;
-
-    if (!block)
-        UB_THROW(UbException(UB_EXARGS, "block is not exist"));
-
-    //   UbTupleDouble3 blockLengths = grid->getBlockLengths(block);
-    //   UbTupleDouble3 nodeOffset = grid->getNodeOffset(block);
-    //   double dx = grid->getDeltaX(block);
-    //   LBMReal o = LBMSystem::calcCollisionFactor(nu, block->getLevel());
-
-    // Funktionszeiger
-    typedef void (*CalcFeqsFct)(real *const & /*feq[27]*/, const real & /*(d)rho*/, const real & /*vx1*/,
-                                const real & /*vx2*/, const real & /*vx3*/);
-    CalcFeqsFct calcFeqsFct = NULL;
-
-    real vx1, vx2, vx3;
-
-    int gridRank  = grid->getRank();
-    int blockRank = block->getRank();
-
-    if (blockRank == gridRank && block->isActive()) {
-        SPtr<ILBMKernel> kernel = block->getKernel();
-        if (!kernel)
-            throw UbException(UB_EXARGS, "The LBM kernel isn't exist in block: " + block->toString());
-
-        if (kernel->getCompressible())
-            calcFeqsFct = &D3Q27System::calcCompFeq;
-        else
-            calcFeqsFct = &D3Q27System::calcIncompFeq;
-
-        //      UbTupleDouble3 org = grid->getBlockWorldCoordinates(block);
-
-        SPtr<BCArray3D> bcArray        = kernel->getBCSet()->getBCArray();
-        SPtr<EsoTwist3D> distributions = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getFdistributions());
-
-        real f[D3Q27System::ENDF + 1];
-
-        //      size_t nx1 = distributions->getNX1();
-        //      size_t nx2 = distributions->getNX2();
-        //      size_t nx3 = distributions->getNX3();
-
-        int minX1 = 0;
-        int minX2 = 0;
-        //      int minX3 = 0;
-
-        int maxX1 = (int)bcArray->getNX1();
-        int maxX2 = (int)bcArray->getNX2();
-        int maxX3 = (int)bcArray->getNX3();
-
-        int maxMX1 = (int)matrix.getNX2();
-        int maxMX2 = (int)matrix.getNX3();
-        int maxMX3 = (int)matrix.getNX4();
-
-        int blockix1 = block->getX1();
-        int blockix2 = block->getX2();
-        int blockix3 = block->getX3();
-
-        UbTupleInt3 blockNx = grid->getBlockNX();
-
-        for (int ix3 = minX1; ix3 < maxX3; ix3++)
-            for (int ix2 = minX2; ix2 < maxX2; ix2++)
-                for (int ix1 = minX1; ix1 < maxX1; ix1++) {
-                    int x1 = blockix1 * val<1>(blockNx) + ix1 - 1;
-                    int x2 = blockix2 * val<2>(blockNx) + ix2 - 1;
-                    int x3 = blockix3 * val<3>(blockNx) + ix3 - 1;
-
-                    if (x1 == -1) {
-                        x1 = maxMX1 - 1;
-                    }
-                    if (x2 == -1) {
-                        x2 = maxMX2 - 1;
-                    }
-                    if (x3 == -1) {
-                        x3 = maxMX3 - 1;
-                    }
-
-                    if (x1 == maxMX1) {
-                        x1 = 1;
-                    }
-                    if (x2 == maxMX2) {
-                        x2 = 1;
-                    }
-                    if (x3 == maxMX3) {
-                        x3 = 1;
-                    }
-
-                    vx1 = matrix(Vx1, x1, x2, x3);
-                    vx2 = matrix(Vx2, x1, x2, x3);
-                    vx3 = matrix(Vx3, x1, x2, x3);
-
-                    // int x1p, x2p, x3p;
-
-                    ////x-derivative
-                    // if (x1+1 >= maxMX1) x1p = x1;
-                    // else  x1p = x1+1;
-                    // double vx1Plusx1 = matrix(Vx1, x1p, x2, x3);
-                    // double vx2Plusx1 = matrix(Vx2, x1p, x2, x3);
-                    // double vx3Plusx1 = matrix(Vx3, x1p, x2, x3);
-
-                    // if (x1-1 < minX1) x1p = x1;
-                    // else  x1p = x1-1;
-                    // double vx1Minusx1 = matrix(Vx1, x1p, x2, x3);
-                    // double vx2Minusx1 = matrix(Vx2, x1p, x2, x3);
-                    // double vx3Minusx1 = matrix(Vx3, x1p, x2, x3);
-
-                    ////y-derivative
-                    // if (x2+1 >= maxMX2) x2p = x2;
-                    // else  x2p = x2+1;
-                    // double vx1Plusx2 = matrix(Vx1, x1, x2p, x3);
-                    // double vx2Plusx2 = matrix(Vx2, x1, x2p, x3);
-                    // double vx3Plusx2 = matrix(Vx3, x1, x2p, x3);
-
-                    // if (x2-1 < minX2) x2p = x2;
-                    // else  x2p = x2-1;
-                    // double vx1Minusx2 = matrix(Vx1, x1, x2p, x3);
-                    // double vx2Minusx2 = matrix(Vx2, x1, x2p, x3);
-                    // double vx3Minusx2 = matrix(Vx3, x1, x2p, x3);
-
-                    ////z-derivative
-                    // if (x3+1 >= maxMX3) x3p = x3;
-                    // else  x3p = x3+1;
-                    // double vx1Plusx3 = matrix(Vx1, x1, x2, x3p);
-                    // double vx2Plusx3 = matrix(Vx2, x1, x2, x3p);
-                    // double vx3Plusx3 = matrix(Vx3, x1, x2, x3p);
-
-                    // if (x3-1 < minX3) x3p = x3;
-                    // else  x3p = x3-1;
-                    // double vx1Minusx3 = matrix(Vx1, x1, x2, x3);
-                    // double vx2Minusx3 = matrix(Vx2, x1, x2, x3);
-                    // double vx3Minusx3 = matrix(Vx3, x1, x2, x3);
-
-                    // double ax = (vx1Plusx1 - vx1Minusx1) / (2.0);
-                    // double bx = (vx2Plusx1 - vx2Minusx1) / (2.0);
-                    // double cx = (vx3Plusx1 - vx3Minusx1) / (2.0);
-
-                    // double ay = (vx1Plusx2 - vx1Minusx2) / (2.0);
-                    // double by = (vx2Plusx2 - vx2Minusx2) / (2.0);
-                    // double cy = (vx3Plusx2 - vx3Minusx2) / (2.0);
-
-                    // double az = (vx1Plusx3 - vx1Minusx3) / (2.0);
-                    // double bz = (vx2Plusx3 - vx2Minusx3) / (2.0);
-                    // double cz = (vx3Plusx3 - vx3Minusx3) / (2.0);
-                    // double eps_new = 1.0;
-                    // LBMReal op = 1.;
-
-                    // LBMReal feq[27];
-
-                    // calcFeqsFct(feq, rho, vx1, vx2, vx3);
-
-                    // double f_E = eps_new *((5.*ax*o + 5.*by*o + 5.*cz*o - 8.*ax*op + 4.*by*op + 4.*cz*op) /
-                    // (54.*o*op)); double f_N = f_E + eps_new *((2.*(ax - by)) / (9.*o)); double f_T = f_E + eps_new
-                    // *((2.*(ax - cz)) / (9.*o)); double f_NE = eps_new *(-(5.*cz*o + 3.*(ay + bx)*op - 2.*cz*op +
-                    // ax*(5.*o + op) + by*(5.*o + op)) / (54.*o*op)); double f_SE = f_NE + eps_new *((ay + bx) /
-                    // (9.*o)); double f_TE = eps_new *(-(5.*cz*o + by*(5.*o - 2.*op) + 3.*(az + cx)*op + cz*op +
-                    // ax*(5.*o + op)) / (54.*o*op)); double f_BE = f_TE + eps_new *((az + cx) / (9.*o)); double f_TN =
-                    // eps_new *(-(5.*ax*o + 5.*by*o + 5.*cz*o - 2.*ax*op + by*op + 3.*bz*op + 3.*cy*op + cz*op) /
-                    // (54.*o*op)); double f_BN = f_TN + eps_new *((bz + cy) / (9.*o)); double f_ZERO = eps_new *((5.*(ax
-                    // + by + cz)) / (9.*op)); double f_TNE = eps_new *(-(ay + az + bx + bz + cx + cy) / (72.*o)); double
-                    // f_TSW = -eps_new *((ay + bx) / (36.*o)) - f_TNE; double f_TSE = -eps_new *((az + cx) / (36.*o)) -
-                    // f_TNE; double f_TNW = -eps_new *((bz + cy) / (36.*o)) - f_TNE;
-
-                    // f[dP00] = f_E + feq[dP00];
-                    // f[W] = f_E + feq[W];
-                    // f[N] = f_N + feq[N];
-                    // f[S] = f_N + feq[S];
-                    // f[T] = f_T + feq[T];
-                    // f[B] = f_T + feq[B];
-                    // f[NE] = f_NE + feq[NE];
-                    // f[SW] = f_NE + feq[SW];
-                    // f[SE] = f_SE + feq[SE];
-                    // f[NW] = f_SE + feq[NW];
-                    // f[TE] = f_TE + feq[TE];
-                    // f[BW] = f_TE + feq[BW];
-                    // f[BE] = f_BE + feq[BE];
-                    // f[TW] = f_BE + feq[TW];
-                    // f[TN] = f_TN + feq[TN];
-                    // f[BS] = f_TN + feq[BS];
-                    // f[BN] = f_BN + feq[BN];
-                    // f[TS] = f_BN + feq[TS];
-                    // f[TNE] = f_TNE + feq[TNE];
-                    // f[TNW] = f_TNW + feq[TNW];
-                    // f[TSE] = f_TSE + feq[TSE];
-                    // f[TSW] = f_TSW + feq[TSW];
-                    // f[BNE] = f_TSW + feq[BNE];
-                    // f[BNW] = f_TSE + feq[BNW];
-                    // f[BSE] = f_TNW + feq[BSE];
-                    // f[BSW] = f_TNE + feq[BSW];
-                    // f[REST] = f_ZERO + feq[REST];
-
-                    calcFeqsFct(f, rho, vx1, vx2, vx3);
-
-                    distributions->setPostCollisionDistribution(f, ix1, ix2, ix3);
-                    distributions->setPreCollisionDistribution(f, ix1, ix2, ix3);
-                    dynamicPointerCast<InitDensityLBMKernel>(kernel)->setVelocity(ix1, ix2, ix3, vx1, vx2, vx3);
-                }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h b/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h
deleted file mode 100644
index cc7acc395d8b17358cc567692e46c67738328436..0000000000000000000000000000000000000000
--- a/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef InitDistributionsFromFileBlockVisitor_h__
-#define InitDistributionsFromFileBlockVisitor_h__
-
-#include "Block3DVisitor.h"
-#include "LBMSystem.h"
-
-#include "CbArray4D.h"
-
-class Grid3D;
-class Block3D;
-
-class InitDistributionsFromFileBlockVisitor : public Block3DVisitor
-{
-public:
-    InitDistributionsFromFileBlockVisitor(/*real nu, */ real rho, std::string file);
-
-    void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
-
-private:
-    CbArray4D<real, IndexerX4X3X2X1> matrix;
-    enum Velocity { Vx1, Vx2, Vx3 };
-    //   LBMReal nu;
-    real rho;
-};
-#endif // InitDistributionsFromFileBlockVisitor_h__
diff --git a/src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp b/src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp
index e6ab0193cdbc417c28fa90fa83fa897570048ae3..6874c3dcab52601665605d2521372e934dbfd6df 100644
--- a/src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp
+++ b/src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp
@@ -4,7 +4,7 @@
 
 #include "BCSet.h"
 #include "Block3D.h"
-#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "EsoSplit.h"
 #include "DataSet3D.h"
 #include "Grid3D.h"
 #include "D3Q27System.h"
@@ -120,11 +120,11 @@ void InitDistributionsWithInterpolationGridVisitor::copyRemoteBlock(SPtr<Block3D
             dynamicPointerCast<EsoTwist3D>(oldKernel->getDataSet()->getFdistributions());
 
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getLocalDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getLocalDistributions();
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getNonLocalDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getNonLocalDistributions();
         CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getZeroDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getZeroDistributions();
 
         MPI_Send(localDistributions->getStartAdressOfSortedArray(0, 0, 0, 0),
                  (int)localDistributions->getDataVector().size(), MPI_DOUBLE, newBlockRank, 0, MPI_COMM_WORLD);
@@ -142,11 +142,11 @@ void InitDistributionsWithInterpolationGridVisitor::copyRemoteBlock(SPtr<Block3D
             dynamicPointerCast<EsoTwist3D>(newKernel->getDataSet()->getFdistributions());
 
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(newDistributions)->getLocalDistributions();
+            dynamicPointerCast<EsoSplit>(newDistributions)->getLocalDistributions();
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(newDistributions)->getNonLocalDistributions();
+            dynamicPointerCast<EsoSplit>(newDistributions)->getNonLocalDistributions();
         CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(newDistributions)->getZeroDistributions();
+            dynamicPointerCast<EsoSplit>(newDistributions)->getZeroDistributions();
 
         MPI_Recv(localDistributions->getStartAdressOfSortedArray(0, 0, 0, 0),
                  (int)localDistributions->getDataVector().size(), MPI_DOUBLE, oldBlockRank, 0, MPI_COMM_WORLD,
@@ -270,11 +270,11 @@ void InitDistributionsWithInterpolationGridVisitor::interpolateRemoteBlockCoarse
             dynamicPointerCast<EsoTwist3D>(oldKernel->getDataSet()->getFdistributions());
 
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getLocalDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getLocalDistributions();
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getNonLocalDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getNonLocalDistributions();
         CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getZeroDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getZeroDistributions();
 
         MPI_Send(localDistributions->getStartAdressOfSortedArray(0, 0, 0, 0),
                  (int)localDistributions->getDataVector().size(), MPI_DOUBLE, newBlockRank, 0, MPI_COMM_WORLD);
@@ -315,14 +315,14 @@ void InitDistributionsWithInterpolationGridVisitor::interpolateRemoteBlockCoarse
         int bMaxX2 = (int)newDistributions->getNX2();
         int bMaxX3 = (int)newDistributions->getNX3();
 
-        SPtr<EsoTwist3D> oldDistributions(new D3Q27EsoTwist3DSplittedVector(bMaxX1, bMaxX2, bMaxX3, 0));
+        SPtr<EsoTwist3D> oldDistributions(new EsoSplit(bMaxX1, bMaxX2, bMaxX3, 0));
 
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getLocalDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getLocalDistributions();
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getNonLocalDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getNonLocalDistributions();
         CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getZeroDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getZeroDistributions();
 
         MPI_Recv(localDistributions->getStartAdressOfSortedArray(0, 0, 0, 0),
                  (int)localDistributions->getDataVector().size(), MPI_DOUBLE, oldBlockRank, 0, MPI_COMM_WORLD,
@@ -505,11 +505,11 @@ void InitDistributionsWithInterpolationGridVisitor::interpolateRemoteBlockFineTo
             dynamicPointerCast<EsoTwist3D>(oldKernel->getDataSet()->getFdistributions());
 
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getLocalDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getLocalDistributions();
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getNonLocalDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getNonLocalDistributions();
         CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getZeroDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getZeroDistributions();
 
         MPI_Send(localDistributions->getStartAdressOfSortedArray(0, 0, 0, 0),
                  (int)localDistributions->getDataVector().size(), MPI_DOUBLE, newBlockRank, 0, MPI_COMM_WORLD);
@@ -550,14 +550,14 @@ void InitDistributionsWithInterpolationGridVisitor::interpolateRemoteBlockFineTo
         int bMaxX2 = (int)newDistributions->getNX2();
         int bMaxX3 = (int)newDistributions->getNX3();
 
-        SPtr<EsoTwist3D> oldDistributions(new D3Q27EsoTwist3DSplittedVector(bMaxX1, bMaxX2, bMaxX3, 0));
+        SPtr<EsoTwist3D> oldDistributions(new EsoSplit(bMaxX1, bMaxX2, bMaxX3, 0));
 
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getLocalDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getLocalDistributions();
         CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getNonLocalDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getNonLocalDistributions();
         CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributions =
-            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(oldDistributions)->getZeroDistributions();
+            dynamicPointerCast<EsoSplit>(oldDistributions)->getZeroDistributions();
 
         MPI_Recv(localDistributions->getStartAdressOfSortedArray(0, 0, 0, 0),
                  (int)localDistributions->getDataVector().size(), MPI_DOUBLE, oldBlockRank, 0, MPI_COMM_WORLD,
diff --git a/src/cpu/core/Visitors/InitThixotropyBlockVisitor.cpp b/src/cpu/core/Visitors/InitThixotropyBlockVisitor.cpp
index 00d0e9e7f26d6d50caa9ec5f46f7984ab7c3b1c8..8a85982a65913380f951186b2902fb107ba25ed2 100644
--- a/src/cpu/core/Visitors/InitThixotropyBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/InitThixotropyBlockVisitor.cpp
@@ -57,20 +57,20 @@ InitThixotropyBlockVisitor::InitThixotropyBlockVisitor()
    this->setLambda(c0o1);
 }
 //////////////////////////////////////////////////////////////////////////
-//InitThixotropyBlockVisitor::InitThixotropyBlockVisitor(LBMReal lambda /*LBMReal nu, LBMReal D, LBMReal rho, LBMReal vx1, LBMReal vx2, LBMReal vx3, LBMReal c, LBMReal f1, LBMReal f2, LBMReal f3*/)
-//	: Block3DVisitor(0, D3Q27System::MAXLEVEL)
+//InitThixotropyBlockVisitor::InitThixotropyBlockVisitor(real lambda /*real nu, real D, real rho, real vx1, real vx2, real vx3, real c, real f1, real f2, real f3*/)
+//    : Block3DVisitor(0, D3Q27System::MAXLEVEL)
 //{
-//	//this->setVx1(vx1);
-//	//this->setVx2(vx2);
-//	//this->setVx3(vx3);
-//	//this->setRho(rho);
-//	//this->setf1(vx1);
-//	//this->setf2(vx2);
-//	//this->setf3(vx3);
-//	//this->setConcentration(rho);
-//	//this->setNu(nu);
-//	//this->setD(D);
-//	this->setLambda(lambda);
+//    //this->setVx1(vx1);
+//    //this->setVx2(vx2);
+//    //this->setVx3(vx3);
+//    //this->setRho(rho);
+//    //this->setf1(vx1);
+//    //this->setf2(vx2);
+//    //this->setf3(vx3);
+//    //this->setConcentration(rho);
+//    //this->setNu(nu);
+//    //this->setD(D);
+//    this->setLambda(lambda);
 //}
 //////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setVx1(const mu::Parser& parser)
@@ -93,26 +93,26 @@ InitThixotropyBlockVisitor::InitThixotropyBlockVisitor()
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setRho(const mu::Parser& parser)
 //{
-//	this->checkFunction(parser);
-//	this->muRho = parser;
+//    this->checkFunction(parser);
+//    this->muRho = parser;
 //}
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setf1(const mu::Parser& parser)
 //{
-//	this->checkFunction(parser);
-//	this->muf1 = parser;
+//    this->checkFunction(parser);
+//    this->muf1 = parser;
 //}
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setf2(const mu::Parser& parser)
 //{
-//	this->checkFunction(parser);
-//	this->muf2 = parser;
+//    this->checkFunction(parser);
+//    this->muf2 = parser;
 //}
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setf3(const mu::Parser& parser)
 //{
-//	this->checkFunction(parser);
-//	this->muf3 = parser;
+//    this->checkFunction(parser);
+//    this->muf3 = parser;
 //}
 ////////////////////////////////////////////////////////////////////////////
 void InitThixotropyBlockVisitor::setLambda(const mu::Parser& parser)
@@ -123,44 +123,44 @@ void InitThixotropyBlockVisitor::setLambda(const mu::Parser& parser)
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setVx1(const std::string& muParserString)
 //{
-//	this->muVx1.SetExpr(muParserString);
-//	this->checkFunction(muVx1);
+//    this->muVx1.SetExpr(muParserString);
+//    this->checkFunction(muVx1);
 //}
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setVx2(const std::string& muParserString)
 //{
-//	this->muVx2.SetExpr(muParserString);
-//	this->checkFunction(muVx2);
+//    this->muVx2.SetExpr(muParserString);
+//    this->checkFunction(muVx2);
 //}
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setVx3(const std::string& muParserString)
 //{
-//	this->muVx3.SetExpr(muParserString);
-//	this->checkFunction(muVx3);
+//    this->muVx3.SetExpr(muParserString);
+//    this->checkFunction(muVx3);
 //}
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setRho(const std::string& muParserString)
 //{
-//	this->muRho.SetExpr(muParserString);
-//	this->checkFunction(muRho);
+//    this->muRho.SetExpr(muParserString);
+//    this->checkFunction(muRho);
 //}
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setf1(const std::string& muParserString)
 //{
-//	this->muf1.SetExpr(muParserString);
-//	this->checkFunction(muf1);
+//    this->muf1.SetExpr(muParserString);
+//    this->checkFunction(muf1);
 //}
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setf2(const std::string& muParserString)
 //{
-//	this->muf2.SetExpr(muParserString);
-//	this->checkFunction(muf2);
+//    this->muf2.SetExpr(muParserString);
+//    this->checkFunction(muf2);
 //}
 ////////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::setf3(const std::string& muParserString)
 //{
-//	this->muf3.SetExpr(muParserString);
-//	this->checkFunction(muf3);
+//    this->muf3.SetExpr(muParserString);
+//    this->checkFunction(muf3);
 //}
 ////////////////////////////////////////////////////////////////////////////
 void InitThixotropyBlockVisitor::setLambda(const std::string& muParserString)
@@ -169,51 +169,51 @@ void InitThixotropyBlockVisitor::setLambda(const std::string& muParserString)
    this->checkFunction(muLambda);
 }
 ////////////////////////////////////////////////////////////////////////////
-//void InitThixotropyBlockVisitor::setVx1(LBMReal vx1)
+//void InitThixotropyBlockVisitor::setVx1(real vx1)
 //{
-//	this->muVx1.SetExpr(UbSystem::toString(vx1, D3Q27RealLim::digits10));
-//	this->checkFunction(muVx1);
+//    this->muVx1.SetExpr(UbSystem::toString(vx1, realLim::digits10));
+//    this->checkFunction(muVx1);
 //}
 ////////////////////////////////////////////////////////////////////////////
-//void InitThixotropyBlockVisitor::setVx2(LBMReal vx2)
+//void InitThixotropyBlockVisitor::setVx2(real vx2)
 //{
-//	this->muVx2.SetExpr(UbSystem::toString(vx2, D3Q27RealLim::digits10));
-//	this->checkFunction(muVx2);
+//    this->muVx2.SetExpr(UbSystem::toString(vx2, realLim::digits10));
+//    this->checkFunction(muVx2);
 //}
 ////////////////////////////////////////////////////////////////////////////
-//void InitThixotropyBlockVisitor::setVx3(LBMReal vx3)
+//void InitThixotropyBlockVisitor::setVx3(real vx3)
 //{
-//	this->muVx3.SetExpr(UbSystem::toString(vx3, D3Q27RealLim::digits10));
-//	this->checkFunction(muVx3);
+//    this->muVx3.SetExpr(UbSystem::toString(vx3, realLim::digits10));
+//    this->checkFunction(muVx3);
 //}
 ////////////////////////////////////////////////////////////////////////////
-//void InitThixotropyBlockVisitor::setRho(LBMReal rho)
+//void InitThixotropyBlockVisitor::setRho(real rho)
 //{
-//	this->muRho.SetExpr(UbSystem::toString(rho, D3Q27RealLim::digits10));
-//	this->checkFunction(muRho);
+//    this->muRho.SetExpr(UbSystem::toString(rho, realLim::digits10));
+//    this->checkFunction(muRho);
 //}
 ////////////////////////////////////////////////////////////////////////////
-//void InitThixotropyBlockVisitor::setf1(LBMReal f1)
+//void InitThixotropyBlockVisitor::setf1(real f1)
 //{
-//	this->muf1.SetExpr(UbSystem::toString(f1, D3Q27RealLim::digits10));
-//	this->checkFunction(muf1);
+//    this->muf1.SetExpr(UbSystem::toString(f1, realLim::digits10));
+//    this->checkFunction(muf1);
 //}
 ////////////////////////////////////////////////////////////////////////////
-//void InitThixotropyBlockVisitor::setf2(LBMReal f2)
+//void InitThixotropyBlockVisitor::setf2(real f2)
 //{
-//	this->muf2.SetExpr(UbSystem::toString(f2, D3Q27RealLim::digits10));
-//	this->checkFunction(muf2);
+//    this->muf2.SetExpr(UbSystem::toString(f2, realLim::digits10));
+//    this->checkFunction(muf2);
 //}
 ////////////////////////////////////////////////////////////////////////////
-//void InitThixotropyBlockVisitor::setf3(LBMReal f3)
+//void InitThixotropyBlockVisitor::setf3(real f3)
 //{
-//	this->muf3.SetExpr(UbSystem::toString(f3, D3Q27RealLim::digits10));
-//	this->checkFunction(muf3);
+//    this->muf3.SetExpr(UbSystem::toString(f3, realLim::digits10));
+//    this->checkFunction(muf3);
 //}
 //////////////////////////////////////////////////////////////////////////
 void InitThixotropyBlockVisitor::setLambda(real lambda)
 {
-   this->muLambda.SetExpr(UbSystem::toString(lambda, D3Q27RealLim::digits10));
+   this->muLambda.SetExpr(UbSystem::toString(lambda, realLim::digits10));
    this->checkFunction(muLambda);
 }
 //////////////////////////////////////////////////////////////////////////
@@ -323,27 +323,27 @@ void InitThixotropyBlockVisitor::checkFunction(mu::Parser fct)
    }
 }
 //////////////////////////////////////////////////////////////////////////
-//void InitThixotropyBlockVisitor::setNu(LBMReal nu)
+//void InitThixotropyBlockVisitor::setNu(real nu)
 //{
-//	this->nu = nu;
+//    this->nu = nu;
 //}
 ////////////////////////////////////////////////////////////////////////////
-//void InitThixotropyBlockVisitor::setD(LBMReal D)
+//void InitThixotropyBlockVisitor::setD(real D)
 //{
-//	this->D = D;
+//    this->D = D;
 //}
 //////////////////////////////////////////////////////////////////////////
 //void InitThixotropyBlockVisitor::initialize(double* f, double x1, double x2, double x3, double vx1, double vx2, double vx3, double rho, UbTupleDouble3 coords, double dx, double o, bool NSE)
 //{
 //   using namespace D3Q27System;
 //   //Funktionszeiger
-//   typedef void(*CalcFeqsFct)(LBMReal* const& /*feq[27]*/, const LBMReal& /*(d)rho*/, const LBMReal& /*vx1*/, const LBMReal& /*vx2*/, const LBMReal& /*vx3*/);
+//   typedef void(*CalcFeqsFct)(real* const& /*feq[27]*/, const real& /*(d)rho*/, const real& /*vx1*/, const real& /*vx2*/, const real& /*vx3*/);
 //   CalcFeqsFct   calcFeqsFct = NULL;
 //
 //
 //   //if (NSE)
 //   //{
-//   //	calcFeqsFct = &D3Q27System::calcIncompFeq;
+//   //    calcFeqsFct = &D3Q27System::calcIncompFeq;
 //
 //   //}
 //   //else
@@ -407,9 +407,9 @@ void InitThixotropyBlockVisitor::checkFunction(mu::Parser fct)
 //   double bz = (vx2Plusx3 - vx2Minusx3) / (2.0 * deltaX) * dx;
 //   double cz = (vx3Plusx3 - vx3Minusx3) / (2.0 * deltaX) * dx;
 //   double eps_new = 1.0;
-//   LBMReal op = 1.;
+//   real op = 1.;
 //
-//   LBMReal feq[27];
+//   real feq[27];
 //
 //   calcFeqsFct(feq, rho, vx1, vx2, vx3);
 //
diff --git a/src/cpu/core/Visitors/InitThixotropyBlockVisitor.h b/src/cpu/core/Visitors/InitThixotropyBlockVisitor.h
index eb35a9ad7d7718bb0f22ec16c71ebbd7cb646eb0..b883e33f10eb0043d02791b9cf0adeb391af6f70 100644
--- a/src/cpu/core/Visitors/InitThixotropyBlockVisitor.h
+++ b/src/cpu/core/Visitors/InitThixotropyBlockVisitor.h
@@ -41,86 +41,76 @@
 
 #include <muParser.h>
 
-/*================================================================================*/
-/*  D3Q27ETInitThixotropyBlockVisitor                                             */
-/*                                                                                */
-
-
-
-
 class InitThixotropyBlockVisitor : public Block3DVisitor
 {
 public:
-	typedef std::numeric_limits<real> D3Q27RealLim;
-
-public:
-	InitThixotropyBlockVisitor();
-	//D3Q27ETInitThixotropyBlockVisitor(LBMReal rho, LBMReal vx1=0.0, LBMReal vx2=0.0, LBMReal vx3=0.0);
-	//! Constructor
-	//! \param nu - viscosity
-	//! \param rho - density
-	//! \param vx1 - velocity in x
-	//! \param vx2 - velocity in y
-	//! \param vx3 - velocity in z
-	//InitThixotropyBlockVisitor(LBMReal lambda /*LBMReal nu, LBMReal D, LBMReal rho, LBMReal vx1 = 0.0, LBMReal vx2 = 0.0, LBMReal vx3 = 0.0, LBMReal c=0.0, LBMReal f1 = 0.0, LBMReal f2 = 0.0, LBMReal f3 = 0.0*/);
-	//////////////////////////////////////////////////////////////////////////
-	//automatic vars are: x1,x2, x3
-	//ussage example: setVx1("x1*0.01+x2*0.003")
-	//////////////////////////////////////////////////////////////////////////
-	//void setVx1(const mu::Parser& parser);
-	//void setVx2(const mu::Parser& parser);
-	//void setVx3(const mu::Parser& parser);
-	//void setRho(const mu::Parser& parser);
-
-	//void setVx1(const std::string& muParserString);
-	//void setVx2(const std::string& muParserString);
-	//void setVx3(const std::string& muParserString);
-	//void setRho(const std::string& muParserString);
-	////////////////////////////////////////////////////////////////////////////
-	//void setVx1(LBMReal vx1);
-	//void setVx2(LBMReal vx2);
-	//void setVx3(LBMReal vx3);
-	//void setRho(LBMReal rho);
-	//void setNu(LBMReal nu);
-
-	//////////////////////////////////////////////////////////////////////////
-	//////////////////////////////////////////////////////////////////////////
-	//void setf1(const mu::Parser& parser);
-	//void setf2(const mu::Parser& parser);
-	//void setf3(const mu::Parser& parser);
-	void setLambda(const mu::Parser& parser);
-
-	//void setf1(const std::string& muParserString);
-	//void setf2(const std::string& muParserString);
-	//void setf3(const std::string& muParserString);
-	void setLambda(const std::string& muParserString);
-	//////////////////////////////////////////////////////////////////////////
-	//void setf1(LBMReal f1);
-	//void setf2(LBMReal f2);
-	//void setf3(LBMReal f3);
-	void setLambda(real lambda);
-	//void setD(LBMReal D);
-
-	//void initialize(double* f, double x1, double x2, double x3, double vx1, double vx2, double vx3, double rho, UbTupleDouble3 coords, double dx, double o, bool NSE);
-
-	void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
+    InitThixotropyBlockVisitor();
+    //D3Q27ETInitThixotropyBlockVisitor(real rho, real vx1=0.0, real vx2=0.0, real vx3=0.0);
+    //! Constructor
+    //! \param nu - viscosity
+    //! \param rho - density
+    //! \param vx1 - velocity in x
+    //! \param vx2 - velocity in y
+    //! \param vx3 - velocity in z
+    //InitThixotropyBlockVisitor(real lambda /*real nu, real D, real rho, real vx1 = 0.0, real vx2 = 0.0, real vx3 = 0.0, real c=0.0, real f1 = 0.0, real f2 = 0.0, real f3 = 0.0*/);
+    //////////////////////////////////////////////////////////////////////////
+    //automatic vars are: x1,x2, x3
+    //ussage example: setVx1("x1*0.01+x2*0.003")
+    //////////////////////////////////////////////////////////////////////////
+    //void setVx1(const mu::Parser& parser);
+    //void setVx2(const mu::Parser& parser);
+    //void setVx3(const mu::Parser& parser);
+    //void setRho(const mu::Parser& parser);
+
+    //void setVx1(const std::string& muParserString);
+    //void setVx2(const std::string& muParserString);
+    //void setVx3(const std::string& muParserString);
+    //void setRho(const std::string& muParserString);
+    ////////////////////////////////////////////////////////////////////////////
+    //void setVx1(real vx1);
+    //void setVx2(real vx2);
+    //void setVx3(real vx3);
+    //void setRho(real rho);
+    //void setNu(real nu);
+
+    //////////////////////////////////////////////////////////////////////////
+    //////////////////////////////////////////////////////////////////////////
+    //void setf1(const mu::Parser& parser);
+    //void setf2(const mu::Parser& parser);
+    //void setf3(const mu::Parser& parser);
+    void setLambda(const mu::Parser& parser);
+
+    //void setf1(const std::string& muParserString);
+    //void setf2(const std::string& muParserString);
+    //void setf3(const std::string& muParserString);
+    void setLambda(const std::string& muParserString);
+    //////////////////////////////////////////////////////////////////////////
+    //void setf1(real f1);
+    //void setf2(real f2);
+    //void setf3(real f3);
+    void setLambda(real lambda);
+    //void setD(real D);
+
+    //void initialize(double* f, double x1, double x2, double x3, double vx1, double vx2, double vx3, double rho, UbTupleDouble3 coords, double dx, double o, bool NSE);
+
+    void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
 
 protected:
-	void checkFunction(mu::Parser fct);
-	typedef void(*CalcFeqsFct)(real* const& /*feq[27]*/, const real& /*(d)rho*/, const real& /*vx1*/, const real& /*vx2*/, const real& /*vx3*/);
+    void checkFunction(mu::Parser fct);
+    typedef void(*CalcFeqsFct)(real* const& /*feq[27]*/, const real& /*(d)rho*/, const real& /*vx1*/, const real& /*vx2*/, const real& /*vx3*/);
 
 private:
-	mu::Parser muVx1;
-	mu::Parser muVx2;
-	mu::Parser muVx3;
-	//mu::Parser muRho;
-	//LBMReal nu;
-
-	//mu::Parser muf1;
-	//mu::Parser muf2;
-	//mu::Parser muf3;
-	mu::Parser muLambda;
-	//LBMReal D;
+    mu::Parser muVx1;
+    mu::Parser muVx2;
+    mu::Parser muVx3;
+    //mu::Parser muRho;
+    //real nu;
+
+    //mu::Parser muf1;
+    //mu::Parser muf2;
+    //mu::Parser muf3;
+    mu::Parser muLambda;
+    //real D;
 };
 
 #endif //D3Q27INITDISTRIBUTIONSPATCHVISITOR_H
diff --git a/src/cpu/core/Visitors/SetConnectorsBlockVisitor.h b/src/cpu/core/Visitors/SetConnectorsBlockVisitor.h
index f54f3f210dd8a62a30de03f08948c7cd6de7ff7f..3185ddc79ba133ccf5c824e4c30ad44e57a63049 100644
--- a/src/cpu/core/Visitors/SetConnectorsBlockVisitor.h
+++ b/src/cpu/core/Visitors/SetConnectorsBlockVisitor.h
@@ -52,7 +52,8 @@
 #include "ThreeDistributionsFullVectorConnector.h"
 #include "ThreeDistributionsDoubleGhostLayerFullDirectConnector.h"
 #include "ThreeDistributionsDoubleGhostLayerFullVectorConnector.h"
-#include <basics/transmitter/TbTransmitterLocal.h>
+
+#include <parallel/transmitter/TbTransmitterLocal.h>
 
 //! \brief  A class sets connectors between blocks.
 template <class T1, class T2>
diff --git a/src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp b/src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp
index c8d9fa7cb803ea922cd37914d2e51beeab685240..4f882353f1ce6d7675271e753bd1ebf9f9962c8e 100644
--- a/src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp
+++ b/src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp
@@ -37,16 +37,17 @@
 #include "TwoDistributionsFullDirectConnector.h"
 #include "TwoDistributionsFullVectorConnector.h"
 #include "D3Q27System.h"
-#include <basics/transmitter/TbTransmitterLocal.h>
 
 #include <parallel/Communicator.h>
+#include <parallel/transmitter/TbTransmitterLocal.h>
+
 #include "Interpolator.h"
 
 SetInterpolationConnectorsBlockVisitor::SetInterpolationConnectorsBlockVisitor(std::shared_ptr<vf::parallel::Communicator> comm, real nue, SPtr<Interpolator> iProcessor) :
 Block3DVisitor(0, D3Q27System::MAXLEVEL), 
-	comm(comm),
-	nue(nue),
-	iProcessor(iProcessor)
+    comm(comm),
+    nue(nue),
+    iProcessor(iProcessor)
 {
 }
 //////////////////////////////////////////////////////////////////////////
@@ -56,203 +57,203 @@ SetInterpolationConnectorsBlockVisitor::~SetInterpolationConnectorsBlockVisitor(
 //////////////////////////////////////////////////////////////////////////
 void SetInterpolationConnectorsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block)
 {
-	if(!block) return;
+    if(!block) return;
 
-	UBLOG(logDEBUG5, "SetInterpolationConnectorsBlockVisitor::visit() - start");
+    UBLOG(logDEBUG5, "SetInterpolationConnectorsBlockVisitor::visit() - start");
     UBLOG(logDEBUG5, block->toString());
 
-	gridRank = comm->getProcessID();
-	grid->setRank(gridRank);
+    gridRank = comm->getProcessID();
+    grid->setRank(gridRank);
 
-	if(grid->getFinestInitializedLevel() > grid->getCoarsestInitializedLevel())
-		setInterpolationConnectors(grid, block);
+    if(grid->getFinestInitializedLevel() > grid->getCoarsestInitializedLevel())
+        setInterpolationConnectors(grid, block);
 
-	UBLOG(logDEBUG5, "SetInterpolationConnectorsBlockVisitor::visit() - end");
+    UBLOG(logDEBUG5, "SetInterpolationConnectorsBlockVisitor::visit() - end");
 }
 //////////////////////////////////////////////////////////////////////////
 void SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors(SPtr<Grid3D> grid, SPtr<Block3D> block)
 {
-	using namespace vf::lbm::dir;
+    using namespace vf::lbm::dir;
 
    UBLOG(logDEBUG5, "SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors() - start");
 
-	//search for all blocks with different ranks
-	if (block->hasInterpolationFlagCF() && block->isActive())
-	{
-		int fbx1 = block->getX1() << 1;
-		int fbx2 = block->getX2() << 1;
-		int fbx3 = block->getX3() << 1;
-		int level = block->getLevel() + 1;
-
-		if( block->hasInterpolationFlagCF(dP00))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
-			SPtr<Block3D> fblockNW = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
-			SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP00);
-		}
-		if( block->hasInterpolationFlagCF(dM00))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3,level);
-			SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2,fbx3+1,level);
-			SPtr<Block3D> fblockNE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM00);
-		}
-		if( block->hasInterpolationFlagCF(d0P0))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+1,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
-			SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
-			SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0P0);
-		}
-		if( block->hasInterpolationFlagCF(d0M0))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level);
-			SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2,fbx3+1,level);
-			SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0M0);
-		}
-		if( block->hasInterpolationFlagCF(d00P))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3+1,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
-			SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
-			SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d00P);
-		}
-		if( block->hasInterpolationFlagCF(d00M))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level);
-			SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3,level);
-			SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d00M);
-		}
-
-		//////NE-NW-SE-SW
-		if( block->hasInterpolationFlagCF(dPP0)&&!block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dP00))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+1,fbx3+0,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPP0);
-		}
-		if( block->hasInterpolationFlagCF(dMM0)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d0M0))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2,fbx3+1,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2, fbx3+1, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2, fbx3+1, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMM0);
-		}
-		if( block->hasInterpolationFlagCF(dPM0)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d0M0))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2,fbx3+0,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPM0);
-		}
-		if( block->hasInterpolationFlagCF(dMP0)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dM00))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+1,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMP0);
-		}
-
-		/////////TE-BW-BE-TW 1-0
-		if( block->hasInterpolationFlagCF(dP0P)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d00P))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+0,fbx3+1,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+0, fbx3+1, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP0P);
-		}
-		if( block->hasInterpolationFlagCF(dM0M)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d00M))
-		{
-
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+0,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+0, fbx3, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM0M);
-		}
-		if( block->hasInterpolationFlagCF(dP0M)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d00M))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+0,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+0, fbx3, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP0M);
-		}
-		if( block->hasInterpolationFlagCF(dM0P)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d00P))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+0,fbx3+1,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+0, fbx3+1, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM0P);
-		}
-
-		//////TN-BS-BN-TS
-		if( block->hasInterpolationFlagCF(d0PP)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(d00P))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2+1,fbx3+1,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2+1, fbx3+1, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0PP);
-		}
-		if( block->hasInterpolationFlagCF(d0MM)&& !block->hasInterpolationFlagCF(d0M0) && !block->hasInterpolationFlagCF(d00M))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2, fbx3, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0MM);
-		}
-		if( block->hasInterpolationFlagCF(d0PM)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(d00M))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2+1,fbx3,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2+1, fbx3, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0PM);
-		}
-		if( block->hasInterpolationFlagCF(d0MP)&& !block->hasInterpolationFlagCF(d0M0) && !block->hasInterpolationFlagCF(d00P))
-		{
-			SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2,fbx3+1,level);
-			SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
-			SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2, fbx3+1, level);
-			SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
-
-			setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0MP);
-		}
+    //search for all blocks with different ranks
+    if (block->hasInterpolationFlagCF() && block->isActive())
+    {
+        int fbx1 = block->getX1() << 1;
+        int fbx2 = block->getX2() << 1;
+        int fbx3 = block->getX3() << 1;
+        int level = block->getLevel() + 1;
+
+        if( block->hasInterpolationFlagCF(dP00))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
+            SPtr<Block3D> fblockNW = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
+            SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP00);
+        }
+        if( block->hasInterpolationFlagCF(dM00))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3,level);
+            SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2,fbx3+1,level);
+            SPtr<Block3D> fblockNE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM00);
+        }
+        if( block->hasInterpolationFlagCF(d0P0))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+1,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
+            SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
+            SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0P0);
+        }
+        if( block->hasInterpolationFlagCF(d0M0))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level);
+            SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2,fbx3+1,level);
+            SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0M0);
+        }
+        if( block->hasInterpolationFlagCF(d00P))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3+1,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
+            SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
+            SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d00P);
+        }
+        if( block->hasInterpolationFlagCF(d00M))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level);
+            SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3,level);
+            SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d00M);
+        }
+
+        //////NE-NW-SE-SW
+        if( block->hasInterpolationFlagCF(dPP0)&&!block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dP00))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+1,fbx3+0,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPP0);
+        }
+        if( block->hasInterpolationFlagCF(dMM0)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d0M0))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2,fbx3+1,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2, fbx3+1, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2, fbx3+1, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMM0);
+        }
+        if( block->hasInterpolationFlagCF(dPM0)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d0M0))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2,fbx3+0,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPM0);
+        }
+        if( block->hasInterpolationFlagCF(dMP0)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dM00))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+1,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMP0);
+        }
+
+        /////////TE-BW-BE-TW 1-0
+        if( block->hasInterpolationFlagCF(dP0P)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d00P))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+0,fbx3+1,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+0, fbx3+1, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP0P);
+        }
+        if( block->hasInterpolationFlagCF(dM0M)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d00M))
+        {
+
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+0,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+0, fbx3, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM0M);
+        }
+        if( block->hasInterpolationFlagCF(dP0M)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d00M))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+0,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+0, fbx3, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP0M);
+        }
+        if( block->hasInterpolationFlagCF(dM0P)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d00P))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+0,fbx3+1,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+0, fbx3+1, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM0P);
+        }
+
+        //////TN-BS-BN-TS
+        if( block->hasInterpolationFlagCF(d0PP)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(d00P))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2+1,fbx3+1,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2+1, fbx3+1, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0PP);
+        }
+        if( block->hasInterpolationFlagCF(d0MM)&& !block->hasInterpolationFlagCF(d0M0) && !block->hasInterpolationFlagCF(d00M))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2, fbx3, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0MM);
+        }
+        if( block->hasInterpolationFlagCF(d0PM)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(d00M))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2+1,fbx3,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2+1, fbx3, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0PM);
+        }
+        if( block->hasInterpolationFlagCF(d0MP)&& !block->hasInterpolationFlagCF(d0M0) && !block->hasInterpolationFlagCF(d00P))
+        {
+            SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2,fbx3+1,level);
+            SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level);
+            SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2, fbx3+1, level);
+            SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level);
+
+            setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0MP);
+        }
 
 
 
@@ -331,107 +332,107 @@ void SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors(SPtr<Gri
          setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMPM);
       }
 
-	}
+    }
    UBLOG(logDEBUG5, "SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors() - end");
 }
 //////////////////////////////////////////////////////////////////////////
 void SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors(SPtr<Block3D> fBlockSW, SPtr<Block3D> fBlockSE, SPtr<Block3D> fBlockNW, SPtr<Block3D> fBlockNE, SPtr<Block3D> cBlock, int dir)
 {
    UBLOG(logDEBUG5, "SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors(...) - start");
-	int fBlockSWRank = -999, fBlockSERank = -999, fBlockNWRank = -999, fBlockNERank = -999;
-	if(fBlockSW) fBlockSWRank = fBlockSW->getRank();
-	if(fBlockNW) fBlockNWRank = fBlockNW->getRank();
-	if(fBlockSE) fBlockSERank = fBlockSE->getRank();
-	if(fBlockNE) fBlockNERank = fBlockNE->getRank();
-	int cBlockRank   = cBlock->getRank();
-
-	real omegaF {0.0};
-	if(fBlockSW) omegaF =LBMSystem::calcCollisionFactor(nue, fBlockSW->getLevel());
-	if(fBlockNW) omegaF =LBMSystem::calcCollisionFactor(nue, fBlockNW->getLevel());
-	if(fBlockSE) omegaF =LBMSystem::calcCollisionFactor(nue, fBlockSE->getLevel());
-	if(fBlockNE) omegaF =LBMSystem::calcCollisionFactor(nue, fBlockNE->getLevel());
-	real omegaC = LBMSystem::calcCollisionFactor(nue, cBlock->getLevel());
-	iProcessor->setOmegas(omegaC, omegaF);
-
-	InterpolationProcessorPtr cIProcessor(iProcessor->clone());
-	InterpolationProcessorPtr fIProcessorSW(iProcessor->clone());
-	InterpolationProcessorPtr fIProcessorSE(iProcessor->clone());
-	InterpolationProcessorPtr fIProcessorNW(iProcessor->clone());
-	InterpolationProcessorPtr fIProcessorNE(iProcessor->clone());
-
-	CreateTransmittersHelper::TransmitterPtr senderCFevenEvenSW, receiverCFevenEvenSW, 
-		senderCFevenOddNW,  receiverCFevenOddNW, 
-		senderCFoddEvenSE,  receiverCFoddEvenSE, 
-		senderCFoddOddNE,   receiverCFoddOddNE,
-		senderFCevenEvenSW, receiverFCevenEvenSW, 
-		senderFCevenOddNW,  receiverFCevenOddNW, 
-		senderFCoddEvenSE,  receiverFCoddEvenSE, 
-		senderFCoddOddNE,   receiverFCoddOddNE;
-
-	if(fBlockSW) createTransmitters(cBlock, fBlockSW, dir, CreateTransmittersHelper::SW, senderCFevenEvenSW, receiverCFevenEvenSW, senderFCevenEvenSW, receiverFCevenEvenSW);
-	if(fBlockNW) createTransmitters(cBlock, fBlockNW, dir, CreateTransmittersHelper::NW, senderCFevenOddNW, receiverCFevenOddNW, senderFCevenOddNW, receiverFCevenOddNW);
-	if(fBlockSE) createTransmitters(cBlock, fBlockSE, dir, CreateTransmittersHelper::SE, senderCFoddEvenSE, receiverCFoddEvenSE, senderFCoddEvenSE, receiverFCoddEvenSE);
-	if(fBlockNE) createTransmitters(cBlock, fBlockNE, dir, CreateTransmittersHelper::NE, senderCFoddOddNE, receiverCFoddOddNE, senderFCoddOddNE, receiverFCoddOddNE);
-
-	if(cBlockRank == gridRank)
-	{
+    int fBlockSWRank = -999, fBlockSERank = -999, fBlockNWRank = -999, fBlockNERank = -999;
+    if(fBlockSW) fBlockSWRank = fBlockSW->getRank();
+    if(fBlockNW) fBlockNWRank = fBlockNW->getRank();
+    if(fBlockSE) fBlockSERank = fBlockSE->getRank();
+    if(fBlockNE) fBlockNERank = fBlockNE->getRank();
+    int cBlockRank   = cBlock->getRank();
+
+    real omegaF {0.0};
+    if(fBlockSW) omegaF =LBMSystem::calcCollisionFactor(nue, fBlockSW->getLevel());
+    if(fBlockNW) omegaF =LBMSystem::calcCollisionFactor(nue, fBlockNW->getLevel());
+    if(fBlockSE) omegaF =LBMSystem::calcCollisionFactor(nue, fBlockSE->getLevel());
+    if(fBlockNE) omegaF =LBMSystem::calcCollisionFactor(nue, fBlockNE->getLevel());
+    real omegaC = LBMSystem::calcCollisionFactor(nue, cBlock->getLevel());
+    iProcessor->setOmegas(omegaC, omegaF);
+
+    InterpolationProcessorPtr cIProcessor(iProcessor->clone());
+    InterpolationProcessorPtr fIProcessorSW(iProcessor->clone());
+    InterpolationProcessorPtr fIProcessorSE(iProcessor->clone());
+    InterpolationProcessorPtr fIProcessorNW(iProcessor->clone());
+    InterpolationProcessorPtr fIProcessorNE(iProcessor->clone());
+
+    CreateTransmittersHelper::TransmitterPtr senderCFevenEvenSW, receiverCFevenEvenSW, 
+        senderCFevenOddNW,  receiverCFevenOddNW, 
+        senderCFoddEvenSE,  receiverCFoddEvenSE, 
+        senderCFoddOddNE,   receiverCFoddOddNE,
+        senderFCevenEvenSW, receiverFCevenEvenSW, 
+        senderFCevenOddNW,  receiverFCevenOddNW, 
+        senderFCoddEvenSE,  receiverFCoddEvenSE, 
+        senderFCoddOddNE,   receiverFCoddOddNE;
+
+    if(fBlockSW) createTransmitters(cBlock, fBlockSW, dir, CreateTransmittersHelper::SW, senderCFevenEvenSW, receiverCFevenEvenSW, senderFCevenEvenSW, receiverFCevenEvenSW);
+    if(fBlockNW) createTransmitters(cBlock, fBlockNW, dir, CreateTransmittersHelper::NW, senderCFevenOddNW, receiverCFevenOddNW, senderFCevenOddNW, receiverFCevenOddNW);
+    if(fBlockSE) createTransmitters(cBlock, fBlockSE, dir, CreateTransmittersHelper::SE, senderCFoddEvenSE, receiverCFoddEvenSE, senderFCoddEvenSE, receiverFCoddEvenSE);
+    if(fBlockNE) createTransmitters(cBlock, fBlockNE, dir, CreateTransmittersHelper::NE, senderCFoddOddNE, receiverCFoddOddNE, senderFCoddOddNE, receiverFCoddOddNE);
+
+    if(cBlockRank == gridRank)
+    {
       SPtr<Block3DConnector> connector(new CoarseToFineVectorConnector< TbTransmitter< CbVector< real > > >(cBlock,
-			senderCFevenEvenSW, receiverCFevenEvenSW, senderCFevenOddNW,  receiverCFevenOddNW, 
-			senderCFoddEvenSE,  receiverCFoddEvenSE,  senderCFoddOddNE,   receiverCFoddOddNE, 
-			dir, cIProcessor) );
-		cBlock->setConnector(connector);
-	}
-	if(fBlockSW && fBlockSWRank == gridRank)
-	{
-		SPtr<Block3DConnector> connector( new FineToCoarseVectorConnector< TbTransmitter< CbVector< real > > >(fBlockSW, 
-			senderFCevenEvenSW, receiverFCevenEvenSW, dir, fIProcessorSW, EvenEvenSW) );
-		fBlockSW->setConnector(connector);
-	}
-	if(fBlockNW && fBlockNWRank == gridRank)
-	{
-		SPtr<Block3DConnector> connector( new FineToCoarseVectorConnector< TbTransmitter< CbVector< real > > >(fBlockNW, 
-			senderFCevenOddNW, receiverFCevenOddNW, dir, fIProcessorNW, EvenOddNW) );
-		fBlockNW->setConnector(connector);
-	}
-	if(fBlockSE && fBlockSERank == gridRank)
-	{
-		SPtr<Block3DConnector> connector( new FineToCoarseVectorConnector< TbTransmitter< CbVector< real > > >(fBlockSE, 
-			senderFCoddEvenSE, receiverFCoddEvenSE, dir, fIProcessorSE, OddEvenSE) );
-		fBlockSE->setConnector(connector);
-	}
-	if(fBlockNE && fBlockNERank == gridRank)
-	{
-		SPtr<Block3DConnector> connector( new FineToCoarseVectorConnector< TbTransmitter< CbVector< real > > >(fBlockNE, 
-			senderFCoddOddNE, receiverFCoddOddNE, dir, fIProcessorNE, OddOddNE) );
-		fBlockNE->setConnector(connector);
-	}
+            senderCFevenEvenSW, receiverCFevenEvenSW, senderCFevenOddNW,  receiverCFevenOddNW, 
+            senderCFoddEvenSE,  receiverCFoddEvenSE,  senderCFoddOddNE,   receiverCFoddOddNE, 
+            dir, cIProcessor) );
+        cBlock->setConnector(connector);
+    }
+    if(fBlockSW && fBlockSWRank == gridRank)
+    {
+        SPtr<Block3DConnector> connector( new FineToCoarseVectorConnector< TbTransmitter< CbVector< real > > >(fBlockSW, 
+            senderFCevenEvenSW, receiverFCevenEvenSW, dir, fIProcessorSW, EvenEvenSW) );
+        fBlockSW->setConnector(connector);
+    }
+    if(fBlockNW && fBlockNWRank == gridRank)
+    {
+        SPtr<Block3DConnector> connector( new FineToCoarseVectorConnector< TbTransmitter< CbVector< real > > >(fBlockNW, 
+            senderFCevenOddNW, receiverFCevenOddNW, dir, fIProcessorNW, EvenOddNW) );
+        fBlockNW->setConnector(connector);
+    }
+    if(fBlockSE && fBlockSERank == gridRank)
+    {
+        SPtr<Block3DConnector> connector( new FineToCoarseVectorConnector< TbTransmitter< CbVector< real > > >(fBlockSE, 
+            senderFCoddEvenSE, receiverFCoddEvenSE, dir, fIProcessorSE, OddEvenSE) );
+        fBlockSE->setConnector(connector);
+    }
+    if(fBlockNE && fBlockNERank == gridRank)
+    {
+        SPtr<Block3DConnector> connector( new FineToCoarseVectorConnector< TbTransmitter< CbVector< real > > >(fBlockNE, 
+            senderFCoddOddNE, receiverFCoddOddNE, dir, fIProcessorNE, OddOddNE) );
+        fBlockNE->setConnector(connector);
+    }
    UBLOG(logDEBUG5, "SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors(...) - end");
 }
 //////////////////////////////////////////////////////////////////////////
 void SetInterpolationConnectorsBlockVisitor::createTransmitters(SPtr<Block3D> cBlock, SPtr<Block3D> fBlock, int dir, 
                                                         CreateTransmittersHelper::IBlock ib, 
-														              CreateTransmittersHelper::TransmitterPtr& senderCF, 
-														              CreateTransmittersHelper::TransmitterPtr& receiverCF, 
-														              CreateTransmittersHelper::TransmitterPtr& senderFC, 
-														              CreateTransmittersHelper::TransmitterPtr& receiverFC)
+                                                                      CreateTransmittersHelper::TransmitterPtr& senderCF, 
+                                                                      CreateTransmittersHelper::TransmitterPtr& receiverCF, 
+                                                                      CreateTransmittersHelper::TransmitterPtr& senderFC, 
+                                                                      CreateTransmittersHelper::TransmitterPtr& receiverFC)
 {
    UBLOG(logDEBUG5, "SetInterpolationConnectorsBlockVisitor::createTransmitters(...) - start");
-	CreateTransmittersHelper helper;
-	int fBlockRank = fBlock->getRank();
-	int cBlockRank = cBlock->getRank();
-	if(fBlockRank == cBlockRank && fBlockRank == gridRank)
-	{
-		senderCF = receiverFC = CreateTransmittersHelper::TransmitterPtr( new TbLocalTransmitter< CbVector< real > >());
-		senderFC = receiverCF = CreateTransmittersHelper::TransmitterPtr( new TbLocalTransmitter< CbVector< real > >());
-	}
-	else if(cBlockRank == gridRank)
-	{
-		helper.createTransmitters(cBlock, fBlock, dir, ib, senderCF, receiverCF, comm, CreateTransmittersHelper::MPI);
-	}
-	else if(fBlockRank == gridRank)
-	{
-		helper.createTransmitters(fBlock, cBlock, dir, ib, senderFC, receiverFC, comm, CreateTransmittersHelper::MPI);
-	}
+    CreateTransmittersHelper helper;
+    int fBlockRank = fBlock->getRank();
+    int cBlockRank = cBlock->getRank();
+    if(fBlockRank == cBlockRank && fBlockRank == gridRank)
+    {
+        senderCF = receiverFC = CreateTransmittersHelper::TransmitterPtr( new TbLocalTransmitter< CbVector< real > >());
+        senderFC = receiverCF = CreateTransmittersHelper::TransmitterPtr( new TbLocalTransmitter< CbVector< real > >());
+    }
+    else if(cBlockRank == gridRank)
+    {
+        helper.createTransmitters(cBlock, fBlock, dir, ib, senderCF, receiverCF, comm, CreateTransmittersHelper::MPI);
+    }
+    else if(fBlockRank == gridRank)
+    {
+        helper.createTransmitters(fBlock, cBlock, dir, ib, senderFC, receiverFC, comm, CreateTransmittersHelper::MPI);
+    }
    UBLOG(logDEBUG5, "SetInterpolationConnectorsBlockVisitor::createTransmitters(...) - end");
 }
 
diff --git a/src/cpu/simulationconfig/KernelFactory.cpp b/src/cpu/simulationconfig/KernelFactory.cpp
index 87e6912bf974a97278965480c293f5408ee475fa..4e935435ec4a453b6d7a06547b6abf6192c1b409 100644
--- a/src/cpu/simulationconfig/KernelFactory.cpp
+++ b/src/cpu/simulationconfig/KernelFactory.cpp
@@ -1,6 +1,6 @@
 #include <LBM/LBMKernel.h>
-#include <LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h>
-#include <LBM/BGKLBMKernel.h>
+#include <LBM/K17CompressibleNavierStokes.h>
+#include <LBM/B92IncompressibleNavierStokes.h>
 #include <simulationconfig/D3Q27LBMSystem.h>
 #include "simulationconfig/KernelFactory.h"
 
@@ -8,9 +8,9 @@ std::shared_ptr<LBMKernel> KernelFactory::makeKernel(KernelType kernelType)
 {
     switch (kernelType) {
         case BGK:
-            return std::shared_ptr<LBMKernel>(new BGKLBMKernel());
+            return std::shared_ptr<LBMKernel>(new B92IncompressibleNavierStokes());
         case COMPRESSIBLE_CUMULANT_4TH_ORDER_VISCOSITY:
-            return std::shared_ptr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
+            return std::shared_ptr<LBMKernel>(new K17CompressibleNavierStokes());
         default:
             throw std::logic_error("No such kernel type");
     }
diff --git a/src/cpu/simulationconfig/Simulation.cpp b/src/cpu/simulationconfig/Simulation.cpp
index 35fca4a47253c2ff50b93ea341409792a4b7f6a0..5bb43990d960f9272fb68291a49f774162cdf608 100644
--- a/src/cpu/simulationconfig/Simulation.cpp
+++ b/src/cpu/simulationconfig/Simulation.cpp
@@ -77,7 +77,6 @@ void CPUSimulation::addObject(const std::shared_ptr<GbObject3D> &object, const s
 void CPUSimulation::addBCAdapter(const std::shared_ptr<BC> &bcAdapter)
 {
     registeredAdapters.insert(bcAdapter);
-    this->bcVisitor.addBC(bcAdapter);
 }
 
 void CPUSimulation::setKernelConfiguration(const std::shared_ptr<LBMKernelConfiguration> &kernel)
diff --git a/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.cpp b/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.cpp
index 14b35e69b7fb6e2f76f93909e1ebe81af320bc74..949220d07df0ea14c098db03509b629393a59e1c 100644
--- a/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.cpp
+++ b/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.cpp
@@ -72,12 +72,12 @@ SPtr<Object> Conglomerate::clone() const
     return conglomerate;
 }
 
-double Conglomerate::getX1Centroid()
+double Conglomerate::getX1Centroid() const
 {
     return (getX1Minimum() + getX1Maximum()) * 0.5;
 }
 
-double Conglomerate::getX1Minimum()
+double Conglomerate::getX1Minimum() const
 {
     double minimum = addObjects[0]->getX1Minimum();
     for(uint i = 1; i < numberOfAddObjects; i++)
@@ -85,7 +85,7 @@ double Conglomerate::getX1Minimum()
     return minimum;
 }
 
-double Conglomerate::getX1Maximum()
+double Conglomerate::getX1Maximum() const
 {
     double maximum = addObjects[0]->getX1Maximum();
     for (uint i = 1; i < numberOfAddObjects; i++)
@@ -93,12 +93,12 @@ double Conglomerate::getX1Maximum()
     return maximum;
 }
 
-double Conglomerate::getX2Centroid()
+double Conglomerate::getX2Centroid() const
 {
     return (getX2Minimum() + getX2Maximum()) * 0.5;
 }
 
-double Conglomerate::getX2Minimum()
+double Conglomerate::getX2Minimum() const
 {
     double minimum = addObjects[0]->getX2Minimum();
     for (uint i = 1; i < numberOfAddObjects; i++)
@@ -106,7 +106,7 @@ double Conglomerate::getX2Minimum()
     return minimum;
 }    
 
-double Conglomerate::getX2Maximum()
+double Conglomerate::getX2Maximum() const
 {
     double maximum = addObjects[0]->getX2Maximum();
     for (uint i = 1; i < numberOfAddObjects; i++)
@@ -114,12 +114,12 @@ double Conglomerate::getX2Maximum()
     return maximum;
 }
 
-double Conglomerate::getX3Centroid()
+double Conglomerate::getX3Centroid() const
 {
     return (getX3Minimum() + getX3Maximum()) * 0.5;
 }
 
-double Conglomerate::getX3Minimum()
+double Conglomerate::getX3Minimum() const
 {
     double minimum = addObjects[0]->getX3Minimum();
     for (uint i = 1; i < numberOfAddObjects; i++)
@@ -127,7 +127,7 @@ double Conglomerate::getX3Minimum()
     return minimum;
 }    
 
-double Conglomerate::getX3Maximum()
+double Conglomerate::getX3Maximum() const
 {
     double maximum = addObjects[0]->getX3Maximum();
     for (uint i = 1; i < numberOfAddObjects; i++)
@@ -162,13 +162,13 @@ bool Conglomerate::isPointInObject(const double& x1, const double& x2, const dou
     return false;
 }
 
-void Conglomerate::scale(double delta)
+void Conglomerate::changeSizeByDelta(double delta)
 {
     for (uint i = 0; i < numberOfAddObjects; i++)
-        addObjects[i]->scale(delta);
+        addObjects[i]->changeSizeByDelta(delta);
 
     for (uint i = 0; i < numberOfSubtractObjects; i++)
-        subtractObjects[i]->scale(delta);
+        subtractObjects[i]->changeSizeByDelta(delta);
 }
 
 void Conglomerate::findInnerNodes(SPtr<GridImp> grid)
diff --git a/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.h b/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.h
index 0b3f7ad7b67554b72ad78188d68d9570bf21e090..a8eb1a7ca1ea97cf0e0b7ad41201ac60ef6f35d1 100644
--- a/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.h
+++ b/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.h
@@ -53,17 +53,17 @@ public:
 
     SPtr<Object> clone() const override;
 
-    double getX1Centroid() override;
-    double getX1Minimum() override;
-    double getX1Maximum() override;
-    double getX2Centroid() override;
-    double getX2Minimum() override;
-    double getX2Maximum() override;
-    double getX3Centroid() override;
-    double getX3Minimum() override;
-    double getX3Maximum() override;
-
-    void scale(double delta) override;
+    double getX1Centroid() const override;
+    double getX1Minimum() const override;
+    double getX1Maximum() const override;
+    double getX2Centroid() const override;
+    double getX2Minimum() const override;
+    double getX2Maximum() const override;
+    double getX3Centroid() const override;
+    double getX3Minimum() const override;
+    double getX3Maximum() const override;
+
+    void changeSizeByDelta(double delta) override;
 
     bool isPointInObject(const double& x1, const double& x2, const double& x3, const double& minOffset, const double& maxOffset) override;
 
diff --git a/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.cpp b/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.cpp
index fde944bc8a035caf0bbf19de01ec8d9f9005031d..de8afcd87802cc18f9e76ceb3d514997519dc404 100644
--- a/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.cpp
+++ b/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.cpp
@@ -46,47 +46,47 @@ SPtr<Object> Cuboid::clone() const
     return std::make_shared<Cuboid>(minX1, minX2, minX3, maxX1, maxX2, maxX3);
 }
 
-double Cuboid::getX1Centroid()
+double Cuboid::getX1Centroid() const
 {
    return getCenter(minX1, maxX1);
 }
 
-double Cuboid::getX1Minimum()
+double Cuboid::getX1Minimum() const
 {
     return getMinimum(minX1, maxX1);
 }
 
-double Cuboid::getX1Maximum()
+double Cuboid::getX1Maximum() const
 {
     return getMaximum(minX1, maxX1);
 }
 
-double Cuboid::getX2Centroid()
+double Cuboid::getX2Centroid() const
 {
     return getCenter(minX2, maxX2);
 }
 
-double Cuboid::getX2Minimum()
+double Cuboid::getX2Minimum() const
 {
     return getMinimum(minX2, maxX2);
 }    
 
-double Cuboid::getX2Maximum()
+double Cuboid::getX2Maximum() const
 {
     return getMaximum(minX2, maxX2);
 }
 
-double Cuboid::getX3Centroid()
+double Cuboid::getX3Centroid() const
 {
     return getCenter(minX3, maxX3);
 }
 
-double Cuboid::getX3Minimum()
-{    
+double Cuboid::getX3Minimum() const
+{
     return getMinimum(minX3, maxX3);
 }    
 
-double Cuboid::getX3Maximum()
+double Cuboid::getX3Maximum() const
 {
     return getMaximum(minX3, maxX3);
 }
@@ -131,7 +131,7 @@ bool Cuboid::isBetween(const real& coord, const real& start, const real& end)
 }
 
 
-void Cuboid::scale(double delta)
+void Cuboid::changeSizeByDelta(double delta)
 {
     this->minX1 -= delta;
     this->minX2 -= delta;
diff --git a/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.h b/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.h
index 7ff5c14c2f17b4ed80f4f1e0c03d26ea1a2eb196..35d5d04c77f0b0928f214160910e69c6290172f0 100644
--- a/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.h
+++ b/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.h
@@ -44,17 +44,17 @@ public:
 
     SPtr<Object> clone() const override;
 
-    double getX1Centroid() override;
-    double getX1Minimum() override;
-    double getX1Maximum() override;
-    double getX2Centroid() override;
-    double getX2Minimum() override;
-    double getX2Maximum() override;
-    double getX3Centroid() override;
-    double getX3Minimum() override;
-    double getX3Maximum() override;
+    double getX1Centroid() const override;
+    double getX1Minimum() const override;
+    double getX1Maximum() const override;
+    double getX2Centroid() const override;
+    double getX2Minimum() const override;
+    double getX2Maximum() const override;
+    double getX3Centroid() const override;
+    double getX3Minimum() const override;
+    double getX3Maximum() const override;
 
-    void scale(double delta) override;
+    void changeSizeByDelta(double delta) override;
 
     bool isPointInObject(const double& x1, const double& x2, const double& x3, const double& minOffset, const double& maxOffset) override;
 
diff --git a/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.cpp b/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a82e8e01f71f315d9eba3d69f268bfe268ebce43
--- /dev/null
+++ b/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.cpp
@@ -0,0 +1,133 @@
+#include "Cylinder.h"
+#include <numeric>
+
+Cylinder::Cylinder(double centerX, double centerY, double centerZ, double radius, double height, Axis rotationalAxis)
+    : center({ centerX, centerY, centerZ }), radius(radius), height(height), rotationalAxis(rotationalAxis)
+{
+}
+
+Cylinder::Cylinder(std::array<double, 3> center, double radius, double height, Axis axis)
+    : center(center), radius(radius), height(height), rotationalAxis(axis)
+{
+}
+
+SPtr<Object> Cylinder::clone() const
+{
+    return std::make_shared<Cylinder>(center, radius, height, rotationalAxis);
+}
+
+double Cylinder::getCentroidCoordinate(Axis coordinateDirection) const
+{
+    return center.at(coordinateDirection);
+}
+
+double Cylinder::getMinimunCoordinate(Axis coordinateDirection) const
+{
+    const auto unitVector = unitVectors.at(rotationalAxis);
+    return center.at(coordinateDirection) - 0.5 * height * unitVector.at(coordinateDirection) +
+           radius * (unitVector.at(coordinateDirection) - 1);
+}
+
+double Cylinder::getMaximumCoordinate(Axis coordinateDirection) const
+{
+    const auto unitVector = unitVectors.at(rotationalAxis);
+    return center.at(coordinateDirection) + 0.5 * height * unitVector.at(coordinateDirection) -
+           radius * (unitVector.at(coordinateDirection) - 1);
+}
+
+double Cylinder::getX1Centroid() const
+{
+    return getCentroidCoordinate(x);
+}
+
+double Cylinder::getX1Minimum() const
+{
+    return getMinimunCoordinate(x);
+}
+
+double Cylinder::getX1Maximum() const
+{
+    return getMaximumCoordinate(x);
+}
+
+double Cylinder::getX2Centroid() const
+{
+    return getCentroidCoordinate(y);
+}
+
+double Cylinder::getX2Minimum() const
+{
+    return getMinimunCoordinate(y);
+}
+
+double Cylinder::getX2Maximum() const
+{
+    return getMaximumCoordinate(y);
+}
+
+double Cylinder::getX3Centroid() const
+{
+    return getCentroidCoordinate(z);
+}
+
+double Cylinder::getX3Minimum() const
+{
+    return getMinimunCoordinate(z);
+}
+
+double Cylinder::getX3Maximum() const
+{
+    return getMaximumCoordinate(z);
+}
+
+double Cylinder::getRadius() const
+{
+    return radius;
+}
+
+double Cylinder::getHeight() const
+{
+    return height;
+}
+
+Axis Cylinder::getRotationalAxis() const
+{
+    return rotationalAxis;
+}
+
+bool Cylinder::isInCircle(double delta1, double delta2, double offset) const
+{
+    return (delta1 * delta1 + delta2 * delta2) < ((this->radius - offset) * (this->radius - offset));
+}
+
+bool Cylinder::isPointInObject(const double &x1, const double &x2, const double &x3, const double &minOffset,
+                               const double &maxOffset)
+{
+    double offset = maxOffset;
+    if (x1 < center.at(x) || x2 < center.at(y) || x3 < center.at(z)) offset = minOffset;
+
+    const double deltaX1 = x1 - center.at(x);
+    const double deltaX2 = x2 - center.at(y);
+    const double deltaX3 = x3 - center.at(z);
+
+    switch (rotationalAxis) {
+        case x:
+            if (deltaX1 > 0.5 * height || deltaX1 < -0.5 * height) return false;
+            return isInCircle(deltaX2, deltaX3, offset);
+        case y:
+            if (deltaX2 > 0.5 * height || deltaX2 < -0.5 * height) return false;
+            return isInCircle(deltaX1, deltaX3, offset);
+        case z:
+            if (deltaX3 > 0.5 * height || deltaX3 < -0.5 * height) return false;
+            return isInCircle(deltaX1, deltaX2, offset);
+    }
+
+    VF_LOG_CRITICAL("Unknown rotational axis in Cylinder.");
+    return false;
+}
+
+void Cylinder::changeSizeByDelta(double delta)
+{
+    this->radius += delta;
+    this->height += 2 * delta;
+}
\ No newline at end of file
diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h b/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.h
similarity index 56%
rename from src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h
rename to src/gpu/GridGenerator/geometries/Cylinder/Cylinder.h
index cc04246d411dfc91f225598c269c1a10893817f5..7a42ec86f2aa185ae11c488a0d86f5952157f2c2 100644
--- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h
+++ b/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.h
@@ -26,30 +26,61 @@
 //  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 MultiphaseBoundaryConditionsBlockVisitor.h
-//! \ingroup Visitors
-//! \author Hesameddin Safari
+//! \file Cylinder.h
+//! \ingroup geometries
+//! \author Anna Wellmann
 //=======================================================================================
 
-#ifndef MultiphaseBoundaryConditionsBlockVisitor_h__
-#define MultiphaseBoundaryConditionsBlockVisitor_h__
 
-#include "Block3DVisitor.h"
+#ifndef CYLINDER_H
+#define CYLINDER_H
+
 #include <map>
 
-class BC;
-class BCStrategy;
+#include <basics/geometry3d/GbCylinder3D.h>
+#include <basics/geometry3d/Axis.h>
+
+#include "geometries/Object.h"
 
-class MultiphaseBoundaryConditionsBlockVisitor : public Block3DVisitor
+class GRIDGENERATOR_EXPORT Cylinder : public Object
 {
 public:
-   MultiphaseBoundaryConditionsBlockVisitor();
-   virtual ~MultiphaseBoundaryConditionsBlockVisitor();
-   
-   void visit(SPtr<Grid3D> grid, SPtr<Block3D> block);
-   void addBC(SPtr<BC> bc);
-protected:
+
+    Cylinder(double centerX, double centerY, double centerZ, double radius, double height, Axis rotationalAxis);
+    Cylinder(std::array<double, 3> center, double radius, double height, Axis axis);
+
+    SPtr<Object> clone() const override;
+
+    double getX1Centroid() const override;
+    double getX1Minimum() const override;
+    double getX1Maximum() const override;
+    double getX2Centroid() const override;
+    double getX2Minimum() const override;
+    double getX2Maximum() const override;
+    double getX3Centroid() const override;
+    double getX3Minimum() const override;
+    double getX3Maximum() const override;
+
+    double getRadius() const;
+    double getHeight() const;
+    Axis getRotationalAxis() const;
+
+    bool isPointInObject(const double &x1, const double &x2, const double &x3, const double &minOffset,
+                         const double &maxOffset) override;
+    void changeSizeByDelta(double delta) override;
+
 private:
-   std::map<char, SPtr<BCStrategy>> bcMap;
+    double getCentroidCoordinate(Axis coordinateDirection) const;
+    double getMinimunCoordinate(Axis coordinateDirection) const;
+    double getMaximumCoordinate(Axis coordinateDirection) const;
+
+    bool isInCircle(double delta1, double delta2, double offset) const;
+
+    Axis rotationalAxis;
+    const std::array<double, 3> center;
+
+    double radius;
+    double height;
 };
-#endif // MultiphaseBoundaryConditionsBlockVisitor_h__
+
+#endif
\ No newline at end of file
diff --git a/src/gpu/GridGenerator/geometries/Cylinder/CylinderTest.cpp b/src/gpu/GridGenerator/geometries/Cylinder/CylinderTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1f23df544c7d92d614405b1681eb0997fc13bebd
--- /dev/null
+++ b/src/gpu/GridGenerator/geometries/Cylinder/CylinderTest.cpp
@@ -0,0 +1,212 @@
+#include <gmock/gmock.h>
+
+#include "Cylinder.h"
+
+
+void testChangeSizeByDelta(Cylinder &cylinder)
+{
+    const double delta = 0.2;
+    const double tolerance = 0.0000000001;
+    const double oldRadius = cylinder.getRadius();
+    const double oldHeight = cylinder.getHeight();
+    const double oldMinimumX1 = cylinder.getX1Minimum();
+    const double oldMinimumX2 = cylinder.getX2Minimum();
+    const double oldMinimumX3 = cylinder.getX3Minimum();
+    const double oldMaximumX1 = cylinder.getX1Maximum();
+    const double oldMaximumX2 = cylinder.getX2Maximum();
+    const double oldMaximumX3 = cylinder.getX3Maximum();
+
+    cylinder.changeSizeByDelta(delta);
+
+    EXPECT_THAT(cylinder.getRadius(), testing::Eq(oldRadius + delta));
+    EXPECT_THAT(cylinder.getHeight(), testing::Eq(oldHeight + 2 * delta));
+    EXPECT_THAT(cylinder.getX1Minimum(), testing::DoubleNear(oldMinimumX1 - delta, tolerance));
+    EXPECT_THAT(cylinder.getX2Minimum(), testing::DoubleNear(oldMinimumX2 - delta, tolerance));
+    EXPECT_THAT(cylinder.getX3Minimum(), testing::DoubleNear(oldMinimumX3 - delta, tolerance));
+    EXPECT_THAT(cylinder.getX1Maximum(), testing::DoubleNear(oldMaximumX1 + delta, tolerance));
+    EXPECT_THAT(cylinder.getX2Maximum(), testing::DoubleNear(oldMaximumX2 + delta, tolerance));
+    EXPECT_THAT(cylinder.getX3Maximum(), testing::DoubleNear(oldMaximumX3 + delta, tolerance));
+}
+
+// CylinderTestAxisNormalToX ////////////////////////////////////////////////
+
+class CylinderTestAxisNormalToX : public testing::Test
+{
+public:
+    std::array<double, 3> center = { 0.1, 0.2, 0.3 };
+    double radius = 2.0;
+    double height = 8.0;
+    Cylinder cylinder = Cylinder(center[0], center[1], center[2], radius, height, Axis::x);
+};
+
+TEST_F(CylinderTestAxisNormalToX, getCentroid)
+{
+    EXPECT_THAT(cylinder.getX1Centroid(), testing::Eq(center[0]));
+    EXPECT_THAT(cylinder.getX2Centroid(), testing::Eq(center[1]));
+    EXPECT_THAT(cylinder.getX3Centroid(), testing::Eq(center[2]));
+}
+
+TEST_F(CylinderTestAxisNormalToX, getMinimum)
+{
+    EXPECT_THAT(cylinder.getX1Minimum(), testing::Eq(-0.5 * height + center[0]));
+    EXPECT_THAT(cylinder.getX2Minimum(), testing::Eq(-radius + center[1]));
+    EXPECT_THAT(cylinder.getX3Minimum(), testing::Eq(-radius + center[2]));
+}
+
+TEST_F(CylinderTestAxisNormalToX, getMaximum)
+{
+    EXPECT_THAT(cylinder.getX1Maximum(), testing::Eq(0.5 * height + center[0]));
+    EXPECT_THAT(cylinder.getX2Maximum(), testing::Eq(radius + center[1]));
+    EXPECT_THAT(cylinder.getX3Maximum(), testing::Eq(radius + center[2]));
+}
+
+TEST_F(CylinderTestAxisNormalToX, isPointInObject)
+{
+    double epsilon = 0.0001;
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2], 0.0, 0.0));
+
+    // x
+    EXPECT_TRUE(cylinder.isPointInObject(center[0] - 0.5 * height + epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0] - 0.5 * height - epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0] + 0.5 * height - epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0] + 0.5 * height + epsilon, center[1], center[2], 0.0, 0.0));
+
+    // y
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1] - radius + epsilon, center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1] - radius - epsilon, center[2], 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1] + radius - epsilon, center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1] + radius + epsilon, center[2], 0.0, 0.0));
+
+    // z
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2] - radius + epsilon, 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1], center[2] - radius - epsilon, 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2] + radius - epsilon, 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1], center[2] + radius + epsilon, 0.0, 0.0));
+}
+
+TEST_F(CylinderTestAxisNormalToX, changeSizeByDelta)
+{
+    testChangeSizeByDelta(cylinder);
+}
+
+// CylinderTestAxisNormalToY ////////////////////////////////////////////////
+
+class CylinderTestAxisNormalToY : public testing::Test
+{
+protected:
+    std::array<double, 3> center = { 0.1, 0.2, 0.3 };
+    double radius = 2.0;
+    double height = 8.0;
+    Cylinder cylinder = Cylinder({ center[0], center[1], center[2] }, radius, height, Axis::y);
+};
+
+TEST_F(CylinderTestAxisNormalToY, getCentroid)
+{
+    EXPECT_THAT(cylinder.getX1Centroid(), testing::Eq(center[0]));
+    EXPECT_THAT(cylinder.getX2Centroid(), testing::Eq(center[1]));
+    EXPECT_THAT(cylinder.getX3Centroid(), testing::Eq(center[2]));
+}
+
+TEST_F(CylinderTestAxisNormalToY, getMinimum)
+{
+    EXPECT_THAT(cylinder.getX1Minimum(), testing::Eq(-radius + center[0]));
+    EXPECT_THAT(cylinder.getX2Minimum(), testing::Eq(-0.5 * height + center[1]));
+    EXPECT_THAT(cylinder.getX3Minimum(), testing::Eq(-radius + center[2]));
+}
+
+TEST_F(CylinderTestAxisNormalToY, getMaximum)
+{
+    EXPECT_THAT(cylinder.getX1Maximum(), testing::Eq(radius + center[0]));
+    EXPECT_THAT(cylinder.getX2Maximum(), testing::Eq(0.5 * height + center[1]));
+    EXPECT_THAT(cylinder.getX3Maximum(), testing::Eq(radius + center[2]));
+}
+
+TEST_F(CylinderTestAxisNormalToY, isPointInObject)
+{
+    double epsilon = 0.0001;
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2], 0.0, 0.0));
+
+    // x
+    EXPECT_TRUE(cylinder.isPointInObject(center[0] - radius + epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0] - radius - epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0] + radius - epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0] + radius + epsilon, center[1], center[2], 0.0, 0.0));
+
+    // y
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1] - 0.5 * height + epsilon, center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1] - 0.5 * height - epsilon, center[2], 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1] + 0.5 * height - epsilon, center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1] + 0.5 * height + epsilon, center[2], 0.0, 0.0));
+
+    // z
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2] - radius + epsilon, 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1], center[2] - radius - epsilon, 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2] + radius - epsilon, 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1], center[2] + radius + epsilon, 0.0, 0.0));
+}
+
+TEST_F(CylinderTestAxisNormalToY, changeSizeByDelta)
+{
+    testChangeSizeByDelta(cylinder);
+}
+
+// CylinderTestAxisNormalToZ ////////////////////////////////////////////////
+
+class CylinderTestAxisNormalToZ : public testing::Test
+{
+protected:
+    std::array<double, 3> center = { 0.1, 0.2, 0.3 };
+    double radius = 2.0;
+    double height = 8.0;
+    Cylinder cylinder = Cylinder({ center[0], center[1], center[2] }, radius, height, Axis::z);
+};
+
+TEST_F(CylinderTestAxisNormalToZ, getCentroid)
+{
+    EXPECT_THAT(cylinder.getX1Centroid(), testing::Eq(center[0]));
+    EXPECT_THAT(cylinder.getX2Centroid(), testing::Eq(center[1]));
+    EXPECT_THAT(cylinder.getX3Centroid(), testing::Eq(center[2]));
+}
+
+TEST_F(CylinderTestAxisNormalToZ, getMinimum)
+{
+    EXPECT_THAT(cylinder.getX1Minimum(), testing::Eq(-radius + center[0]));
+    EXPECT_THAT(cylinder.getX2Minimum(), testing::Eq(-radius + center[1]));
+    EXPECT_THAT(cylinder.getX3Minimum(), testing::Eq(-0.5 * height + center[2]));
+}
+
+TEST_F(CylinderTestAxisNormalToZ, getMaximum)
+{
+    EXPECT_THAT(cylinder.getX1Maximum(), testing::Eq(radius + center[0]));
+    EXPECT_THAT(cylinder.getX2Maximum(), testing::Eq(radius + center[1]));
+    EXPECT_THAT(cylinder.getX3Maximum(), testing::Eq(0.5 * height + center[2]));
+}
+
+TEST_F(CylinderTestAxisNormalToZ, isPointInObject)
+{
+    double epsilon = 0.0001;
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2], 0.0, 0.0));
+
+    // x
+    EXPECT_TRUE(cylinder.isPointInObject(center[0] - radius + epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0] - radius - epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0] + radius - epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0] + radius + epsilon, center[1], center[2], 0.0, 0.0));
+
+    // y
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1] - radius + epsilon, center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1] - radius - epsilon, center[2], 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1] + radius - epsilon, center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1] + radius + epsilon, center[2], 0.0, 0.0));
+
+    // z
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2] - 0.5 * height + epsilon, 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1], center[2] - 0.5 * height - epsilon, 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2] + 0.5 * height - epsilon, 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1], center[2] + 0.5 * height + epsilon, 0.0, 0.0));
+}
+
+TEST_F(CylinderTestAxisNormalToZ, changeSizeByDelta)
+{
+    testChangeSizeByDelta(cylinder);
+}
diff --git a/src/gpu/GridGenerator/geometries/Object.h b/src/gpu/GridGenerator/geometries/Object.h
index 8bb0a35d5e38df1f7db390fdf5ee750295788395..116bb8fc2f7b972b22f05352fe5128841752d187 100644
--- a/src/gpu/GridGenerator/geometries/Object.h
+++ b/src/gpu/GridGenerator/geometries/Object.h
@@ -46,20 +46,20 @@ public:
     virtual ~Object() = default;
     virtual SPtr<Object> clone() const = 0;
 
-    virtual double getX1Centroid() = 0;
-    virtual double getX1Minimum()  = 0;
-    virtual double getX1Maximum()  = 0;
+    virtual double getX1Centroid() const = 0;
+    virtual double getX1Minimum() const  = 0;
+    virtual double getX1Maximum() const  = 0;
 
-    virtual double getX2Centroid() = 0;
-    virtual double getX2Minimum()  = 0;
-    virtual double getX2Maximum()  = 0;
+    virtual double getX2Centroid() const = 0;
+    virtual double getX2Minimum() const  = 0;
+    virtual double getX2Maximum() const  = 0;
 
-    virtual double getX3Centroid() = 0;
-    virtual double getX3Minimum()  = 0;
-    virtual double getX3Maximum()  = 0;
+    virtual double getX3Centroid() const = 0;
+    virtual double getX3Minimum() const  = 0;
+    virtual double getX3Maximum() const  = 0;
 
 
-    virtual void scale(double delta) = 0;
+    virtual void changeSizeByDelta(double delta) = 0;
 
 
     virtual bool isPointInObject(const double& x1, const double& x2, const double& x3, const double& minOffset, const double& maxOffset) = 0;
diff --git a/src/gpu/GridGenerator/geometries/Sphere/Sphere.cpp b/src/gpu/GridGenerator/geometries/Sphere/Sphere.cpp
index 4669bbcfb9848a910bc86f9331a394daf6c55dd5..2a54c710c32e7d5ec36ce79357ddcb04da52658d 100644
--- a/src/gpu/GridGenerator/geometries/Sphere/Sphere.cpp
+++ b/src/gpu/GridGenerator/geometries/Sphere/Sphere.cpp
@@ -54,47 +54,47 @@ SPtr<Object> Sphere::clone() const
     return std::make_shared<Sphere>(centerX, centerY, centerZ, radius);
 }
 
-double Sphere::getX1Centroid()
+double Sphere::getX1Centroid() const
 {
     return centerX;
 }
 
-double Sphere::getX1Minimum()
+double Sphere::getX1Minimum() const
 {
     return centerX - radius;
 }
 
-double Sphere::getX1Maximum()
+double Sphere::getX1Maximum() const
 {
     return centerX + radius;
 }
 
-double Sphere::getX2Centroid()
+double Sphere::getX2Centroid() const
 {
     return centerY;
 }
 
-double Sphere::getX2Minimum()
+double Sphere::getX2Minimum() const
 {
     return centerY - radius;
 }
 
-double Sphere::getX2Maximum()
+double Sphere::getX2Maximum() const
 {
     return centerY + radius;
 }
 
-double Sphere::getX3Centroid()
+double Sphere::getX3Centroid() const
 {
     return centerZ;
 }
 
-double Sphere::getX3Minimum()
+double Sphere::getX3Minimum() const
 {
     return centerZ - radius;
 }
 
-double Sphere::getX3Maximum()
+double Sphere::getX3Maximum() const
 {
     return centerZ + radius;
 }
@@ -115,7 +115,7 @@ bool Sphere::isPointInObject(const double& x1, const double& x2, const double& x
 }
 
 
-void Sphere::scale(double delta)
+void Sphere::changeSizeByDelta(double delta)
 {
     this->radius += delta;
 }
diff --git a/src/gpu/GridGenerator/geometries/Sphere/Sphere.h b/src/gpu/GridGenerator/geometries/Sphere/Sphere.h
index 9ac8821a9c95fce8de16c22688ef3c585197804a..92f600d203a30ca504542161c6f6305d9d2e9ac0 100644
--- a/src/gpu/GridGenerator/geometries/Sphere/Sphere.h
+++ b/src/gpu/GridGenerator/geometries/Sphere/Sphere.h
@@ -46,20 +46,20 @@ public:
 
     SPtr<Object> clone() const override;
 
-    double getX1Centroid() override;
-    double getX1Minimum() override;
-    double getX1Maximum() override;
-    double getX2Centroid() override;
-    double getX2Minimum() override;
-    double getX2Maximum() override;
-    double getX3Centroid() override;
-    double getX3Minimum() override;
-    double getX3Maximum() override;
+    double getX1Centroid() const override;
+    double getX1Minimum() const override;
+    double getX1Maximum() const override;
+    double getX2Centroid() const override;
+    double getX2Minimum() const override;
+    double getX2Maximum() const override;
+    double getX3Centroid() const override;
+    double getX3Minimum() const override;
+    double getX3Maximum() const override;
 
     bool isPointInObject(const double& x1, const double& x2, const double& x3, const double& minOffset, const double& maxOffset) override;
 
 
-    void scale(double delta) override;
+    void changeSizeByDelta(double delta) override;
     
     int getIntersection(const Vertex &P, const Vertex &direction, Vertex &pointOnObject, real &qVal) override;
 
diff --git a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.cpp b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.cpp
index 91bb8f030e76fa6e083e7765feb18c7ccc517ee1..0caaff55becfe5d59d9abc70340f9b6c770f8f45 100644
--- a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.cpp
+++ b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.cpp
@@ -97,13 +97,14 @@ void TriangularMesh::findNeighbors()
 {
     VF_LOG_INFO("start finding neighbors ...");
 
-    auto t = Timer::makeStart();
+    vf::basics::Timer t;
+    t.start();
 
     TriangleNeighborFinder finder(triangles, size);
     finder.fillWithNeighborAngles(this);
 
-    t->end();
-    VF_LOG_INFO("time finding neighbors = {}", t->getTimeInSeconds());
+    t.end();
+    VF_LOG_INFO("time finding neighbors = {}", t.getTimeInSeconds());
 }
 
 void TriangularMesh::setTriangles(std::vector<Triangle> triangles)
@@ -185,7 +186,7 @@ bool intersectPlane(const Vertex &normal, const Vertex &pointOnPlane, const Vert
     return false;
 }
 
-void TriangularMesh::scale(double offset)
+void TriangularMesh::changeSizeByDelta(double offset)
 {
     std::vector<Triangle> triangles = this->triangleVec;
 
diff --git a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.h b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
index 7c050dd70b3908f3e4b021872887c74833594a26..14ff453951b4b74ca28378a7ad7cea31095a4c87 100644
--- a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
+++ b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
@@ -88,16 +88,16 @@ private:
 
 public:
     SPtr<Object> clone() const override;
-    double getX1Centroid() override { throw "Not implemented in TriangularMesh"; }
-    double getX1Minimum() override { return minmax.minX; }
-    double getX1Maximum() override { return minmax.maxX; }
-    double getX2Centroid() override { throw "Not implemented in TriangularMesh"; }
-    double getX2Minimum() override { return minmax.minY; }
-    double getX2Maximum() override { return minmax.maxY; }
-    double getX3Centroid() override { throw "Not implemented in TriangularMesh"; }
-    double getX3Minimum() override { return minmax.minZ; }
-    double getX3Maximum() override { return minmax.maxZ; }
-    void scale(double delta) override;
+    double getX1Centroid() const override { throw "Not implemented in TriangularMesh"; }
+    double getX1Minimum() const override { return minmax.minX; }
+    double getX1Maximum() const override { return minmax.maxX; }
+    double getX2Centroid() const override { throw "Not implemented in TriangularMesh"; }
+    double getX2Minimum() const override { return minmax.minY; }
+    double getX2Maximum() const override { return minmax.maxY; }
+    double getX3Centroid() const override { throw "Not implemented in TriangularMesh"; }
+    double getX3Minimum() const override { return minmax.minZ; }
+    double getX3Maximum() const override { return minmax.maxZ; }
+    void changeSizeByDelta(double delta) override;
     bool isPointInObject(const double& x1, const double& x2, const double& x3, const double& minOffset,
         const double& maxOffset) override {
         return false;
diff --git a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.cpp b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.cpp
index 6d12a19cc097c0b8e98c59a938380be97dc0b15c..03a0ec30ab60075a08007de65a2e349b2b6d93e7 100644
--- a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.cpp
+++ b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.cpp
@@ -61,7 +61,8 @@ void PointInObjectDiscretizationStrategy::doDiscretize(TriangularMesh* triangula
     // trigger the GbTriFaceMesh3D to generate a kd-tree
     triangularMesh->getGbTriFaceMesh3D()->isPointInGbObject3D(0.0, 0.0, 0.0);
 
-    auto timer = Timer::makeStart();
+    vf::basics::Timer timer;
+    timer.start();
 
     real outputTime = 60.0;
     
@@ -78,9 +79,9 @@ void PointInObjectDiscretizationStrategy::doDiscretize(TriangularMesh* triangula
         //else
         //    grid->setNodeTo(i, OuterType);
 
-        if( timer->getCurrentRuntimeInSeconds() > outputTime ){
+        if( timer.getCurrentRuntimeInSeconds() > outputTime ){
             VF_LOG_INFO("    {} / {} nodes tested", index, grid->getSize());
-            timer->start();
+            timer.start();
         }
     }
     VF_LOG_INFO("Done Point-In-Object Test");
diff --git a/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.cpp b/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.cpp
index 5019f2a7547c509df6b7afd034cae179356c74ec..909651be66e1d10974822c62cc3ca158985f420b 100644
--- a/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.cpp
+++ b/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.cpp
@@ -48,47 +48,47 @@ SPtr<Object> VerticalCylinder::clone() const
     return std::make_shared<VerticalCylinder>(centerX, centerY, centerZ, radius, height);
 }
 
-double VerticalCylinder::getX1Centroid()
+double VerticalCylinder::getX1Centroid() const
 {
     return centerX;
 }
 
-double VerticalCylinder::getX1Minimum()
+double VerticalCylinder::getX1Minimum() const
 {
     return centerX - radius;
 }
 
-double VerticalCylinder::getX1Maximum()
+double VerticalCylinder::getX1Maximum() const
 {
     return centerX + radius;
 }
 
-double VerticalCylinder::getX2Centroid()
+double VerticalCylinder::getX2Centroid() const
 {
     return centerY;
 }
 
-double VerticalCylinder::getX2Minimum()
+double VerticalCylinder::getX2Minimum() const
 {
     return centerY - radius;
 }
 
-double VerticalCylinder::getX2Maximum()
+double VerticalCylinder::getX2Maximum() const
 {
     return centerY + radius;
 }
 
-double VerticalCylinder::getX3Centroid()
+double VerticalCylinder::getX3Centroid() const
 {
     return centerZ;
 }
 
-double VerticalCylinder::getX3Minimum()
+double VerticalCylinder::getX3Minimum() const
 {
     return centerZ - 0.5 * height;
 }
 
-double VerticalCylinder::getX3Maximum()
+double VerticalCylinder::getX3Maximum() const
 {
     return centerZ + 0.5 * height;
 }
@@ -111,8 +111,18 @@ bool VerticalCylinder::isPointInObject(const double& x1, const double& x2, const
 }
 
 
-void VerticalCylinder::scale(double delta)
+void VerticalCylinder::changeSizeByDelta(double delta)
 {
     this->radius += delta;
-    this->height += delta;
+    this->height += 2 * delta;
 }
+
+double VerticalCylinder::getRadius() const
+{
+    return radius;
+}
+
+double VerticalCylinder::getHeight() const
+{
+    return height;
+}
\ No newline at end of file
diff --git a/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h b/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h
index 64cdecef5824388a31a4f545c85b1194d3f4c77b..f312df8f6b6d666098a8729c6494f4701f40b63c 100644
--- a/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h
+++ b/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h
@@ -40,26 +40,30 @@ class GRIDGENERATOR_EXPORT VerticalCylinder : public Object
 {
 public:
     VerticalCylinder(const double& centerX, const double& centerY, const double& centerZ, const double& radius, const double& height);
+    // the axis is in the z-direction
 
     static SPtr<VerticalCylinder> makeShared(double centerX, double centerY, double centerZ, double radius, double height);
 
     SPtr<Object> clone() const override;
 
-    double getX1Centroid() override;
-    double getX1Minimum() override;
-    double getX1Maximum() override;
-    double getX2Centroid() override;
-    double getX2Minimum() override;
-    double getX2Maximum() override;
-    double getX3Centroid() override;
-    double getX3Minimum() override;
-    double getX3Maximum() override;
+    double getX1Centroid() const override;
+    double getX1Minimum() const override;
+    double getX1Maximum() const override;
+    double getX2Centroid() const override;
+    double getX2Minimum() const override;
+    double getX2Maximum() const override;
+    double getX3Centroid() const override;
+    double getX3Minimum() const override;
+    double getX3Maximum() const override;
+
+    double getRadius() const;
+    double getHeight() const;
 
     bool isPointInObject(const double& x1, const double& x2, const double& x3, const double& minOffset, const double& maxOffset) override;
 
 
-    void scale(double delta) override;
-   
+    void changeSizeByDelta(double delta) override;
+
 protected:
     double centerX;
     double centerY;
diff --git a/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinderTest.cpp b/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinderTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a079b00e732643af8d1575cc55705b0ddc2498fe
--- /dev/null
+++ b/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinderTest.cpp
@@ -0,0 +1,58 @@
+#include <gmock/gmock.h>
+#include <array>
+
+#include "VerticalCylinder.h"
+
+class VerticalCylinderTest : public testing::Test
+{
+protected:
+    std::array<double, 3> center = { 0.1, 0.2, 0.3 };
+    double radius = 2.0;
+    double height = 8.0;
+    VerticalCylinder cylinder = VerticalCylinder(center[0], center[1], center[2], radius, height);
+};
+
+TEST_F(VerticalCylinderTest, getCentroid)
+{
+    EXPECT_THAT(cylinder.getX1Centroid(), testing::Eq(center[0]));
+    EXPECT_THAT(cylinder.getX2Centroid(), testing::Eq(center[1]));
+    EXPECT_THAT(cylinder.getX3Centroid(), testing::Eq(center[2]));
+}
+
+TEST_F(VerticalCylinderTest, getMinimum)
+{
+    EXPECT_THAT(cylinder.getX1Minimum(), testing::Eq(-radius + center[0]));
+    EXPECT_THAT(cylinder.getX2Minimum(), testing::Eq(-radius + center[1]));
+    EXPECT_THAT(cylinder.getX3Minimum(), testing::Eq(-0.5 * height + center[2]));
+}
+
+TEST_F(VerticalCylinderTest, getMaximum)
+{
+    EXPECT_THAT(cylinder.getX1Maximum(), testing::Eq(radius + center[0]));
+    EXPECT_THAT(cylinder.getX2Maximum(), testing::Eq(radius + center[1]));
+    EXPECT_THAT(cylinder.getX3Maximum(), testing::Eq(0.5 * height + center[2]));
+}
+
+TEST_F(VerticalCylinderTest, isPointInObject)
+{
+    double epsilon = 0.0001;
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2], 0.0, 0.0));
+
+    // x
+    EXPECT_TRUE(cylinder.isPointInObject(center[0] - radius + epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0] - radius - epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0] + radius - epsilon, center[1], center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0] + radius + epsilon, center[1], center[2], 0.0, 0.0));
+
+    // y
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1] - radius + epsilon, center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1] - radius - epsilon, center[2], 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1] + radius - epsilon, center[2], 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1] + radius + epsilon, center[2], 0.0, 0.0));
+
+    // z
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2] - 0.5 * height + epsilon, 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1], center[2] - 0.5 * height - epsilon, 0.0, 0.0));
+    EXPECT_TRUE(cylinder.isPointInObject(center[0], center[1], center[2] + 0.5 * height - epsilon, 0.0, 0.0));
+    EXPECT_FALSE(cylinder.isPointInObject(center[0], center[1], center[2] + 0.5 * height + epsilon, 0.0, 0.0));
+}
\ No newline at end of file
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
index 31eec205fd92cd1aa991cccd72fac489debf31cd..2cf20863c199a47a27e51ae8a5364daa6e81c9a5 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
+++ b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
@@ -86,7 +86,7 @@ void MultipleGridBuilder::addGeometry(SPtr<Object> solidObject, uint level)
 {
     this->solidObject = solidObject;
     auto gridShape = solidObject->clone();
-    gridShape->scale(4.0);
+    gridShape->changeSizeByDelta(4.0);
 
     this->addGrid(gridShape, level);
 }
@@ -151,9 +151,9 @@ void MultipleGridBuilder::addIntermediateGridsToList(uint levelDifference, uint
         uint level = getNumberOfLevels();
         for (int i = levelDifference - 1; i >= 0; i--)
         {
-            const real scalingFactor = nodesBetweenGrids * spacings[i] * calculateDelta(levelFine);
+            const real deltaToNewSize = nodesBetweenGrids * spacings[i] * calculateDelta(levelFine);
             SPtr<Object> gridShapeClone = gridShape->clone();
-            gridShapeClone->scale(scalingFactor);
+            gridShapeClone->changeSizeByDelta(deltaToNewSize);
 
             const auto grid = makeGrid(gridShapeClone, level++, 0);
             grids.push_back(grid);
diff --git a/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp b/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp
index d3a467b0511f7f4b40d06b4c6d9b57ff09b9694a..333462abd76e548a26fb72392ecbd635619a8b4e 100644
--- a/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp
+++ b/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp
@@ -60,11 +60,12 @@ void SimulationFileWriter::write(const std::string& folder, SPtr<GridBuilder> bu
     SimulationFileWriter::folder = folder;
 
     VF_LOG_INFO("Start writing simulation files to {}", folder);
-    auto timer = Timer::makeStart();
+    vf::basics::Timer timer;
+    timer.start();
 
     write(builder, format);
 
-    VF_LOG_INFO("    Time writing files: {} sec", timer->getCurrentRuntimeInSeconds());
+    VF_LOG_INFO("    Time writing files: {} sec", timer.getCurrentRuntimeInSeconds());
     VF_LOG_INFO("Done writing simulation Files!");
 }
 
diff --git a/src/gpu/core/BoundaryConditions/BCKernelManagerTest.cpp b/src/gpu/core/BoundaryConditions/BCKernelManagerTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1f20350d314360df8675a0bf62ed03017980e8f9
--- /dev/null
+++ b/src/gpu/core/BoundaryConditions/BCKernelManagerTest.cpp
@@ -0,0 +1,141 @@
+
+#include <gmock/gmock.h>
+#include <stdexcept>
+
+#include "BoundaryConditionKernelManager.h"
+#include "BoundaryConditions/BoundaryConditionFactory.h"
+#include "Parameter/Parameter.h"
+#include <basics/PointerDefinitions.h>
+
+class BoundaryConditionKernelManagerTest_BCsNotSpecified : public testing::Test
+{
+protected:
+    BoundaryConditionFactory bcFactory;
+    SPtr<Parameter> para = std::make_shared<Parameter>();
+
+    void SetUp() override
+    {
+        para->initLBMSimulationParameter();
+    }
+};
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, velocityBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
+{
+    para->getParD(0)->velocityBC.numberOfBCnodes = 0;
+    EXPECT_NO_THROW(BoundaryConditionKernelManager(para, &bcFactory));
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, velocityBoundaryConditionPostNotSpecified_withBoundaryNodes_throws)
+{
+    para->getParD(0)->velocityBC.numberOfBCnodes = 1;
+    EXPECT_THROW(BoundaryConditionKernelManager(para, &bcFactory), std::runtime_error);
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, noSlipBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
+{
+    para->getParD(0)->noSlipBC.numberOfBCnodes = 0;
+    EXPECT_NO_THROW(BoundaryConditionKernelManager(para, &bcFactory));
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, noSlipBoundaryConditionPostNotSpecified_withBoundaryNodes_doesNotThrow)
+{
+    para->getParD(0)->noSlipBC.numberOfBCnodes = 1;
+    EXPECT_NO_THROW(BoundaryConditionKernelManager(para, &bcFactory)); // no throw, as a default is specified
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, slipBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
+{
+    para->getParD(0)->slipBC.numberOfBCnodes = 0;
+    EXPECT_NO_THROW(BoundaryConditionKernelManager(para, &bcFactory));
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, slipBoundaryConditionPostNotSpecified_withBoundaryNodes_throws)
+{
+    para->getParD(0)->slipBC.numberOfBCnodes = 1;
+    EXPECT_THROW(BoundaryConditionKernelManager(para, &bcFactory), std::runtime_error);
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, pressureBoundaryConditionPreNotSpecified_noBoundaryNodes_doesNotThrow)
+{
+    para->getParD(0)->pressureBC.numberOfBCnodes = 0;
+    EXPECT_NO_THROW(BoundaryConditionKernelManager(para, &bcFactory));
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, pressureBoundaryConditionPreNotSpecified_withBoundaryNodes_throws)
+{
+    para->getParD(0)->pressureBC.numberOfBCnodes = 1;
+    EXPECT_THROW(BoundaryConditionKernelManager(para, &bcFactory), std::runtime_error);
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, geometryBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
+{
+    para->getParD(0)->geometryBC.numberOfBCnodes = 0;
+    EXPECT_NO_THROW(BoundaryConditionKernelManager(para, &bcFactory));
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, geometryBoundaryConditionPostNotSpecified_withBoundaryNodes_doesNotThrow)
+{
+    para->getParD(0)->geometryBC.numberOfBCnodes = 1;
+    EXPECT_NO_THROW(BoundaryConditionKernelManager(para, &bcFactory)); // no throw, as a default is specified
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, stressBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
+{
+    para->getParD(0)->stressBC.numberOfBCnodes = 0;
+    EXPECT_NO_THROW(BoundaryConditionKernelManager(para, &bcFactory));
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, stressBoundaryConditionPostNotSpecified_withBoundaryNodes_throws)
+{
+    para->getParD(0)->stressBC.numberOfBCnodes = 1;
+    EXPECT_THROW(BoundaryConditionKernelManager(para, &bcFactory), std::runtime_error);
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, precursorBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
+{
+    para->getParD(0)->precursorBC.numberOfBCnodes = 0;
+    EXPECT_NO_THROW(BoundaryConditionKernelManager(para, &bcFactory));
+}
+
+TEST_F(BoundaryConditionKernelManagerTest_BCsNotSpecified, precursorBoundaryConditionPostNotSpecified_withBoundaryNodes_throws)
+{
+    para->getParD(0)->precursorBC.numberOfBCnodes = 1;
+    EXPECT_THROW(BoundaryConditionKernelManager(para, &bcFactory), std::runtime_error);
+}
+
+class BoundaryConditionFactoryMock : public BoundaryConditionFactory
+{
+public:
+    mutable uint numberOfCalls = 0;
+
+    [[nodiscard]] boundaryCondition getVelocityBoundaryConditionPost(bool) const override
+    {
+        return [this](LBMSimulationParameter *, QforBoundaryConditions *) { numberOfCalls++; };
+    }
+};
+
+class BoundaryConditionKernelManagerTest_runBCs : public testing::Test
+{
+protected:
+    BoundaryConditionFactoryMock bcFactory;
+    SPtr<Parameter> para = std::make_shared<Parameter>();
+    UPtr<BoundaryConditionKernelManager> sut;
+
+    void SetUp() override
+    {
+        para->initLBMSimulationParameter();
+        sut = std::make_unique<BoundaryConditionKernelManager>(para, &bcFactory);
+    }
+};
+
+TEST_F(BoundaryConditionKernelManagerTest_runBCs, runVelocityBCKernelPost)
+{
+    para->getParD(0)->velocityBC.numberOfBCnodes = 1;
+    sut->runVelocityBCKernelPost(0);
+    EXPECT_THAT(bcFactory.numberOfCalls, testing::Eq(1));
+
+    bcFactory.numberOfCalls = 0;
+    para->getParD(0)->velocityBC.numberOfBCnodes = 0;
+    sut->runVelocityBCKernelPost(0);
+    EXPECT_THAT(bcFactory.numberOfCalls, testing::Eq(0));
+}
diff --git a/src/gpu/core/Factories/BoundaryConditionFactory.cpp b/src/gpu/core/BoundaryConditions/BoundaryConditionFactory.cpp
similarity index 100%
rename from src/gpu/core/Factories/BoundaryConditionFactory.cpp
rename to src/gpu/core/BoundaryConditions/BoundaryConditionFactory.cpp
diff --git a/src/gpu/core/Factories/BoundaryConditionFactory.h b/src/gpu/core/BoundaryConditions/BoundaryConditionFactory.h
similarity index 100%
rename from src/gpu/core/Factories/BoundaryConditionFactory.h
rename to src/gpu/core/BoundaryConditions/BoundaryConditionFactory.h
diff --git a/src/gpu/core/Factories/BoundaryConditionFactoryTest.cpp b/src/gpu/core/BoundaryConditions/BoundaryConditionFactoryTest.cpp
similarity index 100%
rename from src/gpu/core/Factories/BoundaryConditionFactoryTest.cpp
rename to src/gpu/core/BoundaryConditions/BoundaryConditionFactoryTest.cpp
diff --git a/src/gpu/core/KernelManager/BCKernelManager.cpp b/src/gpu/core/BoundaryConditions/BoundaryConditionKernelManager.cpp
similarity index 94%
rename from src/gpu/core/KernelManager/BCKernelManager.cpp
rename to src/gpu/core/BoundaryConditions/BoundaryConditionKernelManager.cpp
index 1c1e65fa34720a1f9d19b5ef02e4afda167b323f..60cd1f1138f7aa9362c07332f7307cd13d5ce3c1 100644
--- a/src/gpu/core/KernelManager/BCKernelManager.cpp
+++ b/src/gpu/core/BoundaryConditions/BoundaryConditionKernelManager.cpp
@@ -36,15 +36,15 @@
 #include <stdexcept>
 #include <string>
 
-#include "BCKernelManager.h"
-#include "Factories/BoundaryConditionFactory.h"
+#include "BoundaryConditionKernelManager.h"
+#include "BoundaryConditions/BoundaryConditionFactory.h"
 #include "GridGenerator/TransientBCSetter/TransientBCSetter.h"
 #include "Calculation/Cp.h"
 #include "Calculation/DragLift.h"
 #include "GPU/GPU_Interface.h"
 #include "Parameter/Parameter.h"
 
-BCKernelManager::BCKernelManager(SPtr<Parameter> parameter, BoundaryConditionFactory *bcFactory) : para(parameter)
+BoundaryConditionKernelManager::BoundaryConditionKernelManager(SPtr<Parameter> parameter, BoundaryConditionFactory *bcFactory) : para(parameter)
 {
     this->velocityBoundaryConditionPost = bcFactory->getVelocityBoundaryConditionPost();
     this->noSlipBoundaryConditionPost   = bcFactory->getNoSlipBoundaryConditionPost();
@@ -70,7 +70,7 @@ BCKernelManager::BCKernelManager(SPtr<Parameter> parameter, BoundaryConditionFac
                            "precursorBoundaryConditionPost");
 }
 
-void BCKernelManager::runVelocityBCKernelPre(const int level) const
+void BoundaryConditionKernelManager::runVelocityBCKernelPre(const int level) const
 {
     if (para->getParD(level)->velocityBC.numberOfBCnodes > 0)
     {
@@ -124,7 +124,7 @@ void BCKernelManager::runVelocityBCKernelPre(const int level) const
     }
 }
 
-void BCKernelManager::runVelocityBCKernelPost(const int level) const
+void BoundaryConditionKernelManager::runVelocityBCKernelPost(const int level) const
 {
      if (para->getParD(level)->velocityBC.numberOfBCnodes > 0)
      {
@@ -146,7 +146,7 @@ void BCKernelManager::runVelocityBCKernelPost(const int level) const
      }
 }
 
-void BCKernelManager::runGeoBCKernelPre(const int level, unsigned int t, CudaMemoryManager* cudaMemoryManager) const{
+void BoundaryConditionKernelManager::runGeoBCKernelPre(const int level, unsigned int t, CudaMemoryManager* cudaMemoryManager) const{
     if (para->getParD(level)->geometryBC.numberOfBCnodes > 0){
         if (para->getCalcDragLift())
         {
@@ -254,7 +254,7 @@ void BCKernelManager::runGeoBCKernelPre(const int level, unsigned int t, CudaMem
     }
 }
 
-void BCKernelManager::runGeoBCKernelPost(const int level) const
+void BoundaryConditionKernelManager::runGeoBCKernelPost(const int level) const
 {
     if (para->getParD(level)->geometryBC.numberOfBCnodes > 0)
     {
@@ -318,7 +318,7 @@ void BCKernelManager::runGeoBCKernelPost(const int level) const
     }
 }
 
-void BCKernelManager::runOutflowBCKernelPre(const int level) const{
+void BoundaryConditionKernelManager::runOutflowBCKernelPre(const int level) const{
     if (para->getParD(level)->outflowBC.numberOfBCnodes > 0)
     {
         QPressNoRhoDev27(para->getParD(level).get(), &(para->getParD(level)->outflowBC));
@@ -345,14 +345,14 @@ void BCKernelManager::runOutflowBCKernelPre(const int level) const{
     }
 }
 
-void BCKernelManager::runPressureBCKernelPre(const int level) const{
+void BoundaryConditionKernelManager::runPressureBCKernelPre(const int level) const{
     if (para->getParD(level)->pressureBC.numberOfBCnodes > 0)
     {
         this->pressureBoundaryConditionPre(para->getParD(level).get(), &(para->getParD(level)->pressureBC));
     }
 }
 
-void BCKernelManager::runPressureBCKernelPost(const int level) const{
+void BoundaryConditionKernelManager::runPressureBCKernelPost(const int level) const{
     if (para->getParD(level)->pressureBC.numberOfBCnodes > 0)
     {
         // QPressDev27_IntBB(
@@ -371,28 +371,28 @@ void BCKernelManager::runPressureBCKernelPost(const int level) const{
     }
 }
 
-void BCKernelManager::runStressWallModelKernelPost(const int level) const{
+void BoundaryConditionKernelManager::runStressWallModelKernelPost(const int level) const{
     if (para->getParD(level)->stressBC.numberOfBCnodes > 0)
     {
         stressBoundaryConditionPost(para.get(), &(para->getParD(level)->stressBC), level);
     }
 }
 
-void BCKernelManager::runSlipBCKernelPost(const int level) const{
+void BoundaryConditionKernelManager::runSlipBCKernelPost(const int level) const{
     if (para->getParD(level)->slipBC.numberOfBCnodes > 0)
     {
         slipBoundaryConditionPost(para->getParD(level).get(), &(para->getParD(level)->slipBC));
     }
 }
 
-void BCKernelManager::runNoSlipBCKernelPost(const int level) const{
+void BoundaryConditionKernelManager::runNoSlipBCKernelPost(const int level) const{
     if (para->getParD(level)->noSlipBC.numberOfBCnodes > 0)
     {
         noSlipBoundaryConditionPost(para->getParD(level).get(), &(para->getParD(level)->noSlipBC));
     }
 }
 
-void BCKernelManager::runPrecursorBCKernelPost(int level, uint t, CudaMemoryManager* cudaMemoryManager)
+void BoundaryConditionKernelManager::runPrecursorBCKernelPost(int level, uint t, CudaMemoryManager* cudaMemoryManager)
 {
     if(para->getParH(level)->precursorBC.numberOfBCnodes == 0) return;
 
diff --git a/src/gpu/core/KernelManager/BCKernelManager.h b/src/gpu/core/BoundaryConditions/BoundaryConditionKernelManager.h
similarity index 96%
rename from src/gpu/core/KernelManager/BCKernelManager.h
rename to src/gpu/core/BoundaryConditions/BoundaryConditionKernelManager.h
index 1dd48f0221743f6ac6461c9db3c8a7a9fc97404d..ece5947b461c2ebfa5c4100c77fa60aedcba5c9f 100644
--- a/src/gpu/core/KernelManager/BCKernelManager.h
+++ b/src/gpu/core/BoundaryConditions/BoundaryConditionKernelManager.h
@@ -26,12 +26,10 @@
 //  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 BCKernelManager.h
-//! \ingroup KernelManager
 //! \author Martin Schoenherr, Anna Wellmann
 //=======================================================================================
-#ifndef BCKernelManager_H
-#define BCKernelManager_H
+#ifndef BoundaryConditionKernelManager_H
+#define BoundaryConditionKernelManager_H
 
 #include <functional>
 #include <memory>
@@ -54,13 +52,13 @@ using precursorBoundaryCondition = std::function<void(LBMSimulationParameter *,
 //! \class BCKernelManager
 //! \brief manage the cuda kernel calls to boundary conditions
 //! \details This class stores the boundary conditions and manages the calls to the boundary condition kernels.
-class BCKernelManager
+class BoundaryConditionKernelManager
 {
 public:
     //! Class constructor
     //! \param parameter shared pointer to instance of class Parameter
     //! \throws std::runtime_error when the user forgets to specify a boundary condition
-    BCKernelManager(SPtr<Parameter> parameter, BoundaryConditionFactory *bcFactory);
+    BoundaryConditionKernelManager(SPtr<Parameter> parameter, BoundaryConditionFactory *bcFactory);
 
     //! \brief calls the device function of the velocity boundary condition (post-collision)
     void runVelocityBCKernelPost(const int level) const;
diff --git a/src/gpu/core/CMakeLists.txt b/src/gpu/core/CMakeLists.txt
index 52c0ba96d4ac37f0ae9f6af76537155d5b24a063..e7c17fd5335bf00c0dc3ac5180d2d2e46537d17e 100644
--- a/src/gpu/core/CMakeLists.txt
+++ b/src/gpu/core/CMakeLists.txt
@@ -21,12 +21,12 @@ if(BUILD_VF_UNIT_TESTS)
     target_include_directories(gpu_coreTests PRIVATE "${VF_THIRD_DIR}/cuda_samples/")
     target_include_directories(gpu_coreTests PRIVATE "${VF_ROOT_DIR}/src/gpu/GridGenerator/")
     set_source_files_properties(Communication/ExchangeData27Test.cpp PROPERTIES LANGUAGE CUDA)
-    set_source_files_properties(Factories/BoundaryConditionFactoryTest.cpp PROPERTIES LANGUAGE CUDA)
+    set_source_files_properties(BoundaryConditions/BoundaryConditionFactoryTest.cpp PROPERTIES LANGUAGE CUDA)
     set_source_files_properties(DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp PROPERTIES LANGUAGE CUDA)
     set_source_files_properties(DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp PROPERTIES LANGUAGE CUDA)
     set_source_files_properties(Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17/CumulantK17Test.cpp PROPERTIES LANGUAGE CUDA)
     set_source_files_properties(LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp PROPERTIES LANGUAGE CUDA)
     set_source_files_properties(Output/DistributionDebugWriterTest.cpp PROPERTIES LANGUAGE CUDA)
     set_source_files_properties(Parameter/ParameterTest.cpp PROPERTIES LANGUAGE CUDA)
-    set_source_files_properties(PreCollisionInteractor/ActuatorFarmInlinesTest.cpp PROPERTIES LANGUAGE CUDA)
+    set_source_files_properties(PreCollisionInteractor/Actuator/ActuatorFarmInlinesTest.cpp PROPERTIES LANGUAGE CUDA)
 endif()
diff --git a/src/gpu/core/Calculation/UpdateGrid27.cpp b/src/gpu/core/Calculation/UpdateGrid27.cpp
index ebf43d5bfa2fa949baf5824b257543510708fa82..be4d637c2e62e4bfc9ef8cc29c906955fd3945fc 100644
--- a/src/gpu/core/Calculation/UpdateGrid27.cpp
+++ b/src/gpu/core/Calculation/UpdateGrid27.cpp
@@ -4,9 +4,9 @@
 
 #include "Communication/ExchangeData27.h"
 #include "Parameter/CudaStreamManager.h"
-#include "KernelManager/BCKernelManager.h"
-#include "KernelManager/ADKernelManager.h"
-#include "KernelManager/GridScalingKernelManager.h"
+#include "Kernel/ADKernelManager.h"
+#include "GridScaling/GridScalingKernelManager.h"
+#include "BoundaryConditions/BoundaryConditionKernelManager.h"
 #include "TurbulenceModels/TurbulenceModelFactory.h"
 #include "Kernel/Kernel.h"
 
@@ -355,7 +355,7 @@ UpdateGrid27::UpdateGrid27(SPtr<Parameter> para, vf::parallel::Communicator &com
     this->collision = getFunctionForCollisionAndExchange(para->getUseStreams(), para->getNumprocs(), para->getKernelNeedsFluidNodeIndicesToRun());
     this->refinement = getFunctionForRefinementAndExchange(para->getUseStreams(), para->getNumprocs(), para->getMaxLevel(), para->useReducedCommunicationAfterFtoC);
 
-    this->bcKernelManager = std::make_shared<BCKernelManager>(para, bcFactory);
+    this->bcKernelManager = std::make_shared<BoundaryConditionKernelManager>(para, bcFactory);
     this->adKernelManager = std::make_shared<ADKernelManager>(para, adkernels);
     this->gridScalingKernelManager = std::make_shared<GridScalingKernelManager>(para, scalingFactory);
 }
diff --git a/src/gpu/core/Calculation/UpdateGrid27.h b/src/gpu/core/Calculation/UpdateGrid27.h
index bcc0a9e5a2edabeec8e2ebb3fb7996a506055b50..dc98fcd348581c6b323f1846b41f683aa25329bc 100644
--- a/src/gpu/core/Calculation/UpdateGrid27.h
+++ b/src/gpu/core/Calculation/UpdateGrid27.h
@@ -15,7 +15,7 @@ namespace vf::parallel
 class Communicator;
 }
 
-class BCKernelManager;
+class BoundaryConditionKernelManager;
 class ADKernelManager;
 class GridScalingKernelManager;
 class Kernel;
@@ -82,7 +82,7 @@ private:
     SPtr<CudaMemoryManager> cudaMemoryManager;
     std::vector<SPtr<Kernel>> kernels;
     //! \property lbKernelManager is a shared pointer to an object of LBKernelManager
-    std::shared_ptr<BCKernelManager> bcKernelManager;
+    std::shared_ptr<BoundaryConditionKernelManager> bcKernelManager;
     //! \property adKernelManager is a shared pointer to an object of ADKernelManager
     std::shared_ptr<ADKernelManager> adKernelManager;
     //! \property gridScalingKernelManager is a shared pointer to an object of GridScalingKernelManager
diff --git a/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp
index fbacf99d460fe64a83aa5aec0db4b43600d00941..463701ca86971218416e58c781a4c438fbd16fe4 100644
--- a/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp
+++ b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp
@@ -30,7 +30,7 @@ public:
     {
         uint process = 0;
         if (direction != CommunicationDirections::MX)
-            process = INVALID_INDEX;
+            process = (uint)INVALID_INDEX;
         return process;
     }
 
diff --git a/src/gpu/core/GPU/CudaMemoryManager.cpp b/src/gpu/core/GPU/CudaMemoryManager.cpp
index 312e379c476b54e868e97e2d1b5fb88311bb4158..450e1faaef6ff08b6fd07a1f58d4112e5ebff9cb 100644
--- a/src/gpu/core/GPU/CudaMemoryManager.cpp
+++ b/src/gpu/core/GPU/CudaMemoryManager.cpp
@@ -7,7 +7,7 @@
 #include <Parameter/Parameter.h>
 
 #include "Parameter/CudaStreamManager.h"
-#include "PreCollisionInteractor/ActuatorFarm.h"
+#include "PreCollisionInteractor/Actuator/ActuatorFarm.h"
 #include "PreCollisionInteractor/Probes/Probe.h"
 #include <PreCollisionInteractor/PrecursorWriter.h>
 
@@ -1863,82 +1863,6 @@ void CudaMemoryManager::cudaFreePressX1(int lev)
     checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->QpressX1.RhoBC  ));
     checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->QpressX1.deltaVz));
 }
-//Propeller Velocity
-void CudaMemoryManager::cudaAllocVeloPropeller(int lev)
-{
-    unsigned int mem_size_Propeller_k = sizeof(int)*parameter->getParH(lev)->propellerBC.numberOfBCnodes;
-    unsigned int mem_size_Propeller_q = sizeof(real)*parameter->getParH(lev)->propellerBC.numberOfBCnodes;
-
-    //Host
-    //checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->propellerBC.q27[0]),  parameter->getD3Qxx()*mem_size_Propeller_q ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->propellerBC.k),                  mem_size_Propeller_k ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->propellerBC.Vx),                 mem_size_Propeller_q ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->propellerBC.Vy),                 mem_size_Propeller_q ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->propellerBC.Vz),                 mem_size_Propeller_q ));
-    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->propellerBC.RhoBC),              mem_size_Propeller_q ));
-
-    //Device
-    //checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->propellerBC.q27[0]),      parameter->getD3Qxx()*mem_size_Propeller_q ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->propellerBC.k),                      mem_size_Propeller_k ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->propellerBC.Vx),                     mem_size_Propeller_q ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->propellerBC.Vy),                     mem_size_Propeller_q ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->propellerBC.Vz),                     mem_size_Propeller_q ));
-    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->propellerBC.RhoBC),                  mem_size_Propeller_q ));
-
-    //////////////////////////////////////////////////////////////////////////
-    double tmp = (double)mem_size_Propeller_k + 4. * (double)mem_size_Propeller_q;
-    setMemsizeGPU(tmp, false);
-}
-void CudaMemoryManager::cudaCopyVeloPropeller(int lev)
-{
-    unsigned int mem_size_Propeller_k = sizeof(int)*parameter->getParH(lev)->propellerBC.numberOfBCnodes;
-    unsigned int mem_size_Propeller_q = sizeof(real)*parameter->getParH(lev)->propellerBC.numberOfBCnodes;
-
-    //checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->propellerBC.q27[0],  parameter->getParH(lev)->propellerBC.q27[0], parameter->getD3Qxx()* mem_size_Propeller_q,  cudaMemcpyHostToDevice));
-    checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->propellerBC.k,       parameter->getParH(lev)->propellerBC.k,                  mem_size_Propeller_k,  cudaMemcpyHostToDevice));
-    checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->propellerBC.Vx,      parameter->getParH(lev)->propellerBC.Vx,                 mem_size_Propeller_q,  cudaMemcpyHostToDevice));
-    checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->propellerBC.Vy,      parameter->getParH(lev)->propellerBC.Vy,                 mem_size_Propeller_q,  cudaMemcpyHostToDevice));
-    checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->propellerBC.Vz,      parameter->getParH(lev)->propellerBC.Vz,                 mem_size_Propeller_q,  cudaMemcpyHostToDevice));
-    checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->propellerBC.RhoBC,   parameter->getParH(lev)->propellerBC.RhoBC,              mem_size_Propeller_q,  cudaMemcpyHostToDevice));
-}
-void CudaMemoryManager::cudaFreeVeloPropeller(int lev)
-{
-    //checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->propellerBC.q27[0] ));
-    checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->propellerBC.k      ));
-    checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->propellerBC.Vx     ));
-    checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->propellerBC.Vy     ));
-    checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->propellerBC.Vz     ));
-    checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->propellerBC.RhoBC  ));
-}
-//Measure Points
-//void CudaMemoryManager::cudaAllocMeasurePoints(int lev, int i)
-//{
-//    //Host
-//    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->MP[i].Vx),                 parameter->getParH(lev)->memSizerealMP ));
-//    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->MP[i].Vy),                 parameter->getParH(lev)->memSizerealMP ));
-//    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->MP[i].Vz),                 parameter->getParH(lev)->memSizerealMP ));
-//    checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->MP[i].Rho),                parameter->getParH(lev)->memSizerealMP ));
-//
-//    //Device
-//    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->MP[i].Vx),                     parameter->getParD(lev)->memSizerealMP ));
-//    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->MP[i].Vy),                     parameter->getParD(lev)->memSizerealMP ));
-//    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->MP[i].Vz),                     parameter->getParD(lev)->memSizerealMP ));
-//    checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->MP[i].Rho),                    parameter->getParD(lev)->memSizerealMP ));
-//}
-//void CudaMemoryManager::cudaCopyMeasurePoints(int lev, int i)
-//{
-//    checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->MP[i].Vx,      parameter->getParH(lev)->MP[i].Vx,           parameter->getParH(lev)->memSizerealMP,  cudaMemcpyHostToDevice));
-//    checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->MP[i].Vy,      parameter->getParH(lev)->MP[i].Vy,           parameter->getParH(lev)->memSizerealMP,  cudaMemcpyHostToDevice));
-//    checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->MP[i].Vz,      parameter->getParH(lev)->MP[i].Vz,           parameter->getParH(lev)->memSizerealMP,  cudaMemcpyHostToDevice));
-//    checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->MP[i].Rho,     parameter->getParH(lev)->MP[i].Rho,          parameter->getParH(lev)->memSizerealMP,  cudaMemcpyHostToDevice));
-//}
-//void CudaMemoryManager::cudaFreeMeasurePoints(int lev, int i)
-//{
-//    checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->MP[i].Vx     ));
-//    checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->MP[i].Vy     ));
-//    checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->MP[i].Vz     ));
-//    checkCudaErrors( cudaFreeHost(parameter->getParH(lev)->MP[i].Rho    ));
-//}
 void CudaMemoryManager::cudaAllocMeasurePointsIndex(int lev)
 {
     //Host
@@ -2987,26 +2911,20 @@ void CudaMemoryManager::cudaFreeTaggedFluidNodeIndices(CollisionTemplate tag, in
 ///////////////////////////////////////////////////////////////////////////////
 void CudaMemoryManager::cudaAllocBladeGeometries(ActuatorFarm* actuatorFarm)
 {
-    uint sizeRealTurbine = sizeof(real)*actuatorFarm->getNumberOfTurbines();
-    checkCudaErrors( cudaMallocHost((void**) &actuatorFarm->bladeRadiiH, sizeRealTurbine*actuatorFarm->getNumberOfNodesPerBlade()) );
-    checkCudaErrors( cudaMallocHost((void**) &actuatorFarm->diametersH, sizeRealTurbine) );
+    const uint sizeRealTurbine = sizeof(real)*actuatorFarm->getNumberOfTurbines();
     checkCudaErrors( cudaMallocHost((void**) &actuatorFarm->turbinePosXH, sizeRealTurbine) );
     checkCudaErrors( cudaMallocHost((void**) &actuatorFarm->turbinePosYH, sizeRealTurbine) );
     checkCudaErrors( cudaMallocHost((void**) &actuatorFarm->turbinePosZH, sizeRealTurbine) );
 
-    checkCudaErrors( cudaMalloc((void**) &actuatorFarm->bladeRadiiD, sizeRealTurbine*actuatorFarm->getNumberOfNodesPerBlade()) );
-    checkCudaErrors( cudaMalloc((void**) &actuatorFarm->diametersD, sizeRealTurbine) );
     checkCudaErrors( cudaMalloc((void**) &actuatorFarm->turbinePosXD, sizeRealTurbine) );
     checkCudaErrors( cudaMalloc((void**) &actuatorFarm->turbinePosYD, sizeRealTurbine) );
     checkCudaErrors( cudaMalloc((void**) &actuatorFarm->turbinePosZD, sizeRealTurbine) );
-    setMemsizeGPU(sizeof(real)*(actuatorFarm->getNumberOfNodesPerBlade()+4)*actuatorFarm->getNumberOfTurbines(), false);
+    setMemsizeGPU(sizeof(real)*4.f*actuatorFarm->getNumberOfTurbines(), false);
 
 }
 void CudaMemoryManager::cudaCopyBladeGeometriesHtoD(ActuatorFarm* actuatorFarm)
 {
-    uint sizeRealTurbine = sizeof(real)*actuatorFarm->getNumberOfTurbines();
-    checkCudaErrors( cudaMemcpy(actuatorFarm->bladeRadiiD, actuatorFarm->bladeRadiiH, sizeRealTurbine*actuatorFarm->getNumberOfNodesPerBlade(), cudaMemcpyHostToDevice) );
-    checkCudaErrors( cudaMemcpy(actuatorFarm->diametersD, actuatorFarm->diametersH, sizeRealTurbine, cudaMemcpyHostToDevice) );
+    const uint sizeRealTurbine = sizeof(real)*actuatorFarm->getNumberOfTurbines();
     checkCudaErrors( cudaMemcpy(actuatorFarm->turbinePosXD, actuatorFarm->turbinePosXH, sizeRealTurbine, cudaMemcpyHostToDevice) );
     checkCudaErrors( cudaMemcpy(actuatorFarm->turbinePosYD, actuatorFarm->turbinePosYH, sizeRealTurbine, cudaMemcpyHostToDevice) );
     checkCudaErrors( cudaMemcpy(actuatorFarm->turbinePosZD, actuatorFarm->turbinePosZH, sizeRealTurbine, cudaMemcpyHostToDevice) );
@@ -3015,8 +2933,6 @@ void CudaMemoryManager::cudaCopyBladeGeometriesHtoD(ActuatorFarm* actuatorFarm)
 void CudaMemoryManager::cudaCopyBladeGeometriesDtoH(ActuatorFarm* actuatorFarm)
 {
     uint sizeRealTurbine = sizeof(real)*actuatorFarm->getNumberOfTurbines();
-    checkCudaErrors( cudaMemcpy(actuatorFarm->bladeRadiiH, actuatorFarm->bladeRadiiD, sizeRealTurbine*actuatorFarm->getNumberOfNodesPerBlade(), cudaMemcpyDeviceToHost) );
-    checkCudaErrors( cudaMemcpy(actuatorFarm->diametersH, actuatorFarm->diametersD, sizeRealTurbine, cudaMemcpyDeviceToHost) );
     checkCudaErrors( cudaMemcpy(actuatorFarm->turbinePosXH, actuatorFarm->turbinePosXD, sizeRealTurbine, cudaMemcpyDeviceToHost) );
     checkCudaErrors( cudaMemcpy(actuatorFarm->turbinePosYH, actuatorFarm->turbinePosYD, sizeRealTurbine, cudaMemcpyDeviceToHost) );
     checkCudaErrors( cudaMemcpy(actuatorFarm->turbinePosZH, actuatorFarm->turbinePosZD, sizeRealTurbine, cudaMemcpyDeviceToHost) );
@@ -3024,59 +2940,15 @@ void CudaMemoryManager::cudaCopyBladeGeometriesDtoH(ActuatorFarm* actuatorFarm)
 }
 void CudaMemoryManager::cudaFreeBladeGeometries(ActuatorFarm* actuatorFarm)
 {
-    checkCudaErrors( cudaFree(actuatorFarm->bladeRadiiD) );
-    checkCudaErrors( cudaFree(actuatorFarm->diametersD) );
     checkCudaErrors( cudaFree(actuatorFarm->turbinePosXD) );
     checkCudaErrors( cudaFree(actuatorFarm->turbinePosYD) );
     checkCudaErrors( cudaFree(actuatorFarm->turbinePosZD) );    
     
-    checkCudaErrors( cudaFreeHost(actuatorFarm->bladeRadiiH) );
-    checkCudaErrors( cudaFreeHost(actuatorFarm->diametersH) );
     checkCudaErrors( cudaFreeHost(actuatorFarm->turbinePosXH) );
     checkCudaErrors( cudaFreeHost(actuatorFarm->turbinePosYH) );
     checkCudaErrors( cudaFreeHost(actuatorFarm->turbinePosZH) );
 }
 
-void CudaMemoryManager::cudaAllocBladeOrientations(ActuatorFarm* actuatorFarm)
-{
-    uint sizeRealTurbine = sizeof(real)*actuatorFarm->getNumberOfTurbines();
-    checkCudaErrors( cudaMallocHost((void**) &actuatorFarm->omegasH, sizeRealTurbine) );
-    checkCudaErrors( cudaMallocHost((void**) &actuatorFarm->azimuthsH, sizeRealTurbine) );
-    checkCudaErrors( cudaMallocHost((void**) &actuatorFarm->yawsH, sizeRealTurbine) );
-
-    checkCudaErrors( cudaMalloc((void**) &actuatorFarm->omegasD, sizeRealTurbine) );
-    checkCudaErrors( cudaMalloc((void**) &actuatorFarm->azimuthsD, sizeRealTurbine) );
-    checkCudaErrors( cudaMalloc((void**) &actuatorFarm->yawsD, sizeRealTurbine) );
-
-    setMemsizeGPU(3*sizeRealTurbine, false);
-
-}
-void CudaMemoryManager::cudaCopyBladeOrientationsHtoD(ActuatorFarm* actuatorFarm)
-{
-    uint sizeRealTurbine = sizeof(real)*actuatorFarm->getNumberOfTurbines();
-    checkCudaErrors( cudaMemcpy(actuatorFarm->omegasD, actuatorFarm->omegasH, sizeRealTurbine, cudaMemcpyHostToDevice) );
-    checkCudaErrors( cudaMemcpy(actuatorFarm->azimuthsD, actuatorFarm->azimuthsH, sizeRealTurbine, cudaMemcpyHostToDevice) );
-    checkCudaErrors( cudaMemcpy(actuatorFarm->yawsD, actuatorFarm->yawsH, sizeRealTurbine, cudaMemcpyHostToDevice) );
-
-}
-void CudaMemoryManager::cudaCopyBladeOrientationsDtoH(ActuatorFarm* actuatorFarm)
-{
-    uint sizeRealTurbine = sizeof(real)*actuatorFarm->getNumberOfTurbines();
-    checkCudaErrors( cudaMemcpy(actuatorFarm->omegasH, actuatorFarm->omegasD, sizeRealTurbine, cudaMemcpyDeviceToHost) );
-    checkCudaErrors( cudaMemcpy(actuatorFarm->azimuthsH, actuatorFarm->azimuthsD, sizeRealTurbine, cudaMemcpyDeviceToHost) );
-    checkCudaErrors( cudaMemcpy(actuatorFarm->yawsH, actuatorFarm->yawsD, sizeRealTurbine, cudaMemcpyDeviceToHost) );
-}
-void CudaMemoryManager::cudaFreeBladeOrientations(ActuatorFarm* actuatorFarm)
-{
-    checkCudaErrors( cudaFree((void**) &actuatorFarm->omegasD) );
-    checkCudaErrors( cudaFree((void**) &actuatorFarm->azimuthsD) );
-    checkCudaErrors( cudaFree((void**) &actuatorFarm->yawsD) );
-
-    checkCudaErrors( cudaFreeHost((void**) &actuatorFarm->omegasH) );
-    checkCudaErrors( cudaFreeHost((void**) &actuatorFarm->azimuthsH) );
-    checkCudaErrors( cudaFreeHost((void**) &actuatorFarm->yawsH) );
-}
-
 void CudaMemoryManager::cudaAllocBladeCoords(ActuatorFarm* actuatorFarm)
 {
     checkCudaErrors( cudaMallocHost((void**) &actuatorFarm->bladeCoordsXH, sizeof(real)*actuatorFarm->getNumberOfGridNodes()) );
diff --git a/src/gpu/core/GPU/CudaMemoryManager.h b/src/gpu/core/GPU/CudaMemoryManager.h
index dcdfecd6aad6ace700bc5e83e1d6e3f14e1f1bcc..89fed68436e4d40be2bf1abc9959825301a41488 100644
--- a/src/gpu/core/GPU/CudaMemoryManager.h
+++ b/src/gpu/core/GPU/CudaMemoryManager.h
@@ -38,9 +38,6 @@ public:
     void setMemsizeGPU(double admem, bool reset);
     double getMemsizeGPU();
 
-    //void cudaAllocFull(int lev); //DEPRECATED: related to full matrix
-    //void cudaFreeFull(int lev);  //DEPRECATED: related to full matrix
-
     void cudaCopyPrint(int lev);
     void cudaCopyMedianPrint(int lev);
 
@@ -251,14 +248,6 @@ public:
     void cudaCopyPressX1(int lev);
     void cudaFreePressX1(int lev);
 
-    void cudaAllocVeloPropeller(int lev);
-    void cudaCopyVeloPropeller(int lev);
-    void cudaFreeVeloPropeller(int lev);
-
-    void cudaAllocMeasurePoints(int lev, int i);
-    void cudaCopyMeasurePoints(int lev, int i);
-    void cudaFreeMeasurePoints(int lev, int i);
-
     void cudaAllocMeasurePointsIndex(int lev);
     void cudaCopyMeasurePointsIndex(int lev);
     void cudaCopyMeasurePointsToHost(int lev);
diff --git a/src/gpu/core/GPU/GPU_Interface.h b/src/gpu/core/GPU/GPU_Interface.h
index 72e839bcf741b9966a4e38a7b78c1085b20132e2..2f25f5f15cb5f9334c1cef070ba9c32a7c11c68b 100644
--- a/src/gpu/core/GPU/GPU_Interface.h
+++ b/src/gpu/core/GPU/GPU_Interface.h
@@ -933,21 +933,6 @@ void QADPressIncompDev27(  unsigned int numberOfThreads,
                                       unsigned long long numberOfLBnodes, 
                                       bool isEvenTimestep);
 
-void PropVelo(   unsigned int numberOfThreads,
-                            unsigned int* neighborX,
-                            unsigned int* neighborY,
-                            unsigned int* neighborZ,
-                            real* rho,
-                            real* ux,
-                            real* uy,
-                            real* uz,
-                            int* k_Q, 
-                            unsigned int size_Prop,
-                            unsigned long long numberOfLBnodes,
-                            unsigned int* bcMatD,
-                            real* DD,
-                            bool EvenOrOdd);
-
 void ScaleCF27( real* DC, 
                            real* DF, 
                            unsigned int* neighborCX,
diff --git a/src/gpu/core/GPU/GPU_Kernels.cuh b/src/gpu/core/GPU/GPU_Kernels.cuh
index ab8ab0fa3564de523e8fc8e6985f6d98c09fb404..6e007fb6ced0b4301b0f212d4b0199ae4988b728 100644
--- a/src/gpu/core/GPU/GPU_Kernels.cuh
+++ b/src/gpu/core/GPU/GPU_Kernels.cuh
@@ -1264,21 +1264,6 @@ __global__ void QADPressIncomp27(   real* DD,
                                                unsigned long long numberOfLBnodes,
                                                bool isEvenTimestep);
 
-//Propeller BC
-__global__ void PropellerBC(unsigned int* neighborX,
-                                       unsigned int* neighborY,
-                                       unsigned int* neighborZ,
-                                       real* rho,
-                                       real* ux,
-                                       real* uy,
-                                       real* uz,
-                                       int* k_Q,
-                                       unsigned int size_Prop,
-                                       unsigned long long numberOfLBnodes,
-                                       unsigned int* bcMatD,
-                                       real* DD,
-                                       bool EvenOrOdd);
-
 
 
 //coarse to fine
diff --git a/src/gpu/core/GPU/GeometryUtils.h b/src/gpu/core/GPU/GeometryUtils.h
index 37fe00b6b67e1376e79500f4430db47736f18c46..688f11134108f5b00ff6287fddbbef1f49db20b3 100644
--- a/src/gpu/core/GPU/GeometryUtils.h
+++ b/src/gpu/core/GPU/GeometryUtils.h
@@ -5,7 +5,7 @@
 
 __inline__ __host__ __device__ void getNeighborIndicesOfBSW(  uint k, //index of dMMM node
                                         uint &ke, uint &kn, uint &kt, uint &kne, uint &kte,uint &ktn, uint &ktne,
-                                        uint* neighborX, uint* neighborY, uint* neighborZ)
+                                        const uint* neighborX, const uint* neighborY, const uint* neighborZ)
 {
     ke   = neighborX[k];
     kn   = neighborY[k];
@@ -16,10 +16,10 @@ __inline__ __host__ __device__ void getNeighborIndicesOfBSW(  uint k, //index of
     ktne = neighborX[ktn];
 }
 
-__inline__ __host__ __device__ uint findNearestCellBSW(uint index, 
-                                              real* coordsX, real* coordsY, real* coordsZ, 
-                                              real posX, real posY, real posZ, 
-                                              uint* neighborsX, uint* neighborsY, uint* neighborsZ, uint* neighborsWSB)
+__inline__ __host__ __device__ uint findNearestCellBSW(const uint index, 
+                                              const real* coordsX, const real* coordsY, const real* coordsZ, 
+                                              const real posX, const real posY, const real posZ,
+                                              const uint* neighborsX, const uint* neighborsY, const uint* neighborsZ, const uint* neighborsWSB)
 {
     uint new_index = index;
 
@@ -53,7 +53,7 @@ __inline__ __host__ __device__ void getInterpolationWeights(real &dW, real &dE,
 
 __inline__ __host__ __device__ real trilinearInterpolation( real dW, real dE, real dN, real dS, real dT, real dB,
                                         uint k,  uint ke, uint kn, uint kt, uint kne, uint kte, uint ktn, uint ktne,
-                                        real* quantity )
+                                        const real* quantity )
 {
     return  (   dE*dN*dT*quantity[k]    + dW*dN*dT*quantity[ke]
               + dE*dS*dT*quantity[kn]   + dW*dS*dT*quantity[kne]
diff --git a/src/gpu/core/GPU/LBMKernel.cu b/src/gpu/core/GPU/LBMKernel.cu
index 403ed748f3d525bb5eaefe35b44ef26391230fcd..a870d43bb36811441afa654a01f4eeb7671ba28e 100644
--- a/src/gpu/core/GPU/LBMKernel.cu
+++ b/src/gpu/core/GPU/LBMKernel.cu
@@ -2688,41 +2688,6 @@ void QPrecursorDevDistributions( LBMSimulationParameter* parameterDevice,
 
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void PropVelo(
-    unsigned int numberOfThreads,
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    real* rho,
-    real* ux,
-    real* uy,
-    real* uz,
-    int* k_Q,
-    unsigned int size_Prop,
-    unsigned long long numberOfLBnodes,
-    unsigned int* bcMatD,
-    real* DD,
-    bool EvenOrOdd)
-{
-    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, size_Prop);
-
-    PropellerBC<<< grid.grid, grid.threads >>>(
-        neighborX,
-        neighborY,
-        neighborZ,
-        rho,
-        ux,
-        uy,
-        uz,
-        k_Q,
-        size_Prop,
-        numberOfLBnodes,
-        bcMatD,
-        DD,
-        EvenOrOdd);
-    getLastCudaError("PropellerBC execution failed");
-}
-//////////////////////////////////////////////////////////////////////////
 void ScaleCF27(
     real* DC,
     real* DF,
diff --git a/src/gpu/core/GPU/VelocityBCs27.cu b/src/gpu/core/GPU/VelocityBCs27.cu
index d1798e84490ffed3e803717e22cc8dbbaccf2222..437c19d81e513c70fbdddbb8e20819933d1c42d0 100644
--- a/src/gpu/core/GPU/VelocityBCs27.cu
+++ b/src/gpu/core/GPU/VelocityBCs27.cu
@@ -5444,401 +5444,3 @@ __global__ void QVelDevice27(
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-__global__ void PropellerBC(
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    real* rho,
-    real* ux,
-    real* uy,
-    real* uz,
-    int* k_Q, 
-    unsigned int size_Prop,
-    unsigned long long numberOfLBnodes,
-    unsigned int* bcMatD,
-    real* DD,
-    bool EvenOrOdd)
-{
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<size_Prop)
-   {
-    ////////////////////////////////////////////////////////////////////////////////
-        Distributions27 D;
-        if (EvenOrOdd==true)
-        {
-            D.f[dP00] = &DD[dP00 * numberOfLBnodes];
-            D.f[dM00] = &DD[dM00 * numberOfLBnodes];
-            D.f[d0P0] = &DD[d0P0 * numberOfLBnodes];
-            D.f[d0M0] = &DD[d0M0 * numberOfLBnodes];
-            D.f[d00P] = &DD[d00P * numberOfLBnodes];
-            D.f[d00M] = &DD[d00M * numberOfLBnodes];
-            D.f[dPP0] = &DD[dPP0 * numberOfLBnodes];
-            D.f[dMM0] = &DD[dMM0 * numberOfLBnodes];
-            D.f[dPM0] = &DD[dPM0 * numberOfLBnodes];
-            D.f[dMP0] = &DD[dMP0 * numberOfLBnodes];
-            D.f[dP0P] = &DD[dP0P * numberOfLBnodes];
-            D.f[dM0M] = &DD[dM0M * numberOfLBnodes];
-            D.f[dP0M] = &DD[dP0M * numberOfLBnodes];
-            D.f[dM0P] = &DD[dM0P * numberOfLBnodes];
-            D.f[d0PP] = &DD[d0PP * numberOfLBnodes];
-            D.f[d0MM] = &DD[d0MM * numberOfLBnodes];
-            D.f[d0PM] = &DD[d0PM * numberOfLBnodes];
-            D.f[d0MP] = &DD[d0MP * numberOfLBnodes];
-            D.f[d000] = &DD[d000 * numberOfLBnodes];
-            D.f[dPPP] = &DD[dPPP * numberOfLBnodes];
-            D.f[dMMP] = &DD[dMMP * numberOfLBnodes];
-            D.f[dPMP] = &DD[dPMP * numberOfLBnodes];
-            D.f[dMPP] = &DD[dMPP * numberOfLBnodes];
-            D.f[dPPM] = &DD[dPPM * numberOfLBnodes];
-            D.f[dMMM] = &DD[dMMM * numberOfLBnodes];
-            D.f[dPMM] = &DD[dPMM * numberOfLBnodes];
-            D.f[dMPM] = &DD[dMPM * numberOfLBnodes];
-        }
-        else
-        {
-            D.f[dM00] = &DD[dP00 * numberOfLBnodes];
-            D.f[dP00] = &DD[dM00 * numberOfLBnodes];
-            D.f[d0M0] = &DD[d0P0 * numberOfLBnodes];
-            D.f[d0P0] = &DD[d0M0 * numberOfLBnodes];
-            D.f[d00M] = &DD[d00P * numberOfLBnodes];
-            D.f[d00P] = &DD[d00M * numberOfLBnodes];
-            D.f[dMM0] = &DD[dPP0 * numberOfLBnodes];
-            D.f[dPP0] = &DD[dMM0 * numberOfLBnodes];
-            D.f[dMP0] = &DD[dPM0 * numberOfLBnodes];
-            D.f[dPM0] = &DD[dMP0 * numberOfLBnodes];
-            D.f[dM0M] = &DD[dP0P * numberOfLBnodes];
-            D.f[dP0P] = &DD[dM0M * numberOfLBnodes];
-            D.f[dM0P] = &DD[dP0M * numberOfLBnodes];
-            D.f[dP0M] = &DD[dM0P * numberOfLBnodes];
-            D.f[d0MM] = &DD[d0PP * numberOfLBnodes];
-            D.f[d0PP] = &DD[d0MM * numberOfLBnodes];
-            D.f[d0MP] = &DD[d0PM * numberOfLBnodes];
-            D.f[d0PM] = &DD[d0MP * numberOfLBnodes];
-            D.f[d000] = &DD[d000 * numberOfLBnodes];
-            D.f[dMMM] = &DD[dPPP * numberOfLBnodes];
-            D.f[dPPM] = &DD[dMMP * numberOfLBnodes];
-            D.f[dMPM] = &DD[dPMP * numberOfLBnodes];
-            D.f[dPMM] = &DD[dMPP * numberOfLBnodes];
-            D.f[dMMP] = &DD[dPPM * numberOfLBnodes];
-            D.f[dPPP] = &DD[dMMM * numberOfLBnodes];
-            D.f[dMPP] = &DD[dPMM * numberOfLBnodes];
-            D.f[dPMP] = &DD[dMPM * numberOfLBnodes];
-        }
-        //////////////////////////////////////////////////////////////////////////
-        unsigned int KQK = k_Q[k];
-        unsigned int BC  = bcMatD[KQK];
-        if( (BC != GEO_SOLID) && (BC != GEO_VOID))
-        {        
-        //////////////////////////////////////////////////////////////////////////
-        real  vx1 = ux[k];
-        real  vx2 = uy[k];
-        real  vx3 = uz[k];
-        //real  vx1 = -c1o100;
-        //real  vx2 = zero;
-        //real  vx3 = zero;
-        //////////////////////////////////////////////////////////////////////////
-        //index
-        //////////////////////////////////////////////////////////////////////////
-        unsigned int kzero= KQK;
-        unsigned int ke   = KQK;
-        unsigned int kw   = neighborX[KQK];
-        unsigned int kn   = KQK;
-        unsigned int ks   = neighborY[KQK];
-        unsigned int kt   = KQK;
-        unsigned int kb   = neighborZ[KQK];
-        unsigned int ksw  = neighborY[kw];
-        unsigned int kne  = KQK;
-        unsigned int kse  = ks;
-        unsigned int knw  = kw;
-        unsigned int kbw  = neighborZ[kw];
-        unsigned int kte  = KQK;
-        unsigned int kbe  = kb;
-        unsigned int ktw  = kw;
-        unsigned int kbs  = neighborZ[ks];
-        unsigned int ktn  = KQK;
-        unsigned int kbn  = kb;
-        unsigned int kts  = ks;
-        unsigned int ktse = ks;
-        unsigned int kbnw = kbw;
-        unsigned int ktnw = kw;
-        unsigned int kbse = kbs;
-        unsigned int ktsw = ksw;
-        unsigned int kbne = kb;
-        unsigned int ktne = KQK;
-        unsigned int kbsw = neighborZ[ksw];
-        //////////////////////////////////////////////////////////////////////////
-        real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
-        f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW, f_ZERO;
-
-        f_ZERO= (D.f[d000])[kzero];
-        f_E   = (D.f[dP00])[ke   ];
-        f_W   = (D.f[dM00])[kw   ];
-        f_N   = (D.f[d0P0])[kn   ];
-        f_S   = (D.f[d0M0])[ks   ];
-        f_T   = (D.f[d00P])[kt   ];
-        f_B   = (D.f[d00M])[kb   ];
-        f_NE  = (D.f[dPP0])[kne  ];
-        f_SW  = (D.f[dMM0])[ksw  ];
-        f_SE  = (D.f[dPM0])[kse  ];
-        f_NW  = (D.f[dMP0])[knw  ];
-        f_TE  = (D.f[dP0P])[kte  ];
-        f_BW  = (D.f[dM0M])[kbw  ];
-        f_BE  = (D.f[dP0M])[kbe  ];
-        f_TW  = (D.f[dM0P])[ktw  ];
-        f_TN  = (D.f[d0PP])[ktn  ];
-        f_BS  = (D.f[d0MM])[kbs  ];
-        f_BN  = (D.f[d0PM])[kbn  ];
-        f_TS  = (D.f[d0MP])[kts  ];
-        f_TNE = (D.f[dPPP])[ktne ];
-        f_BSW = (D.f[dMMM])[kbsw ];
-        f_BNE = (D.f[dPPM])[kbne ];
-        f_TSW = (D.f[dMMP])[ktsw ];
-        f_TSE = (D.f[dPMP])[ktse ];
-        f_BNW = (D.f[dMPM])[kbnw ];
-        f_BSE = (D.f[dPMM])[kbse ];
-        f_TNW = (D.f[dMPP])[ktnw ];
-        //f_W    = (D.f[dP00])[ke   ];
-        //f_E    = (D.f[dM00])[kw   ];
-        //f_S    = (D.f[d0P0])[kn   ];
-        //f_N    = (D.f[d0M0])[ks   ];
-        //f_B    = (D.f[d00P])[kt   ];
-        //f_T    = (D.f[d00M])[kb   ];
-        //f_SW   = (D.f[dPP0])[kne  ];
-        //f_NE   = (D.f[dMM0])[ksw  ];
-        //f_NW   = (D.f[dPM0])[kse  ];
-        //f_SE   = (D.f[dMP0])[knw  ];
-        //f_BW   = (D.f[dP0P])[kte  ];
-        //f_TE   = (D.f[dM0M])[kbw  ];
-        //f_TW   = (D.f[dP0M])[kbe  ];
-        //f_BE   = (D.f[dM0P])[ktw  ];
-        //f_BS   = (D.f[d0PP])[ktn  ];
-        //f_TN   = (D.f[d0MM])[kbs  ];
-        //f_TS   = (D.f[d0PM])[kbn  ];
-        //f_BN   = (D.f[d0MP])[kts  ];
-        //f_BSW  = (D.f[dPPP])[ktne ];
-        //f_TNE  = (D.f[dMMM])[kbsw ];
-        //f_TSW  = (D.f[dPPM])[kbne ];
-        //f_BNE  = (D.f[dMMP])[ktsw ];
-        //f_BNW  = (D.f[dPMP])[ktse ];
-        //f_TSE  = (D.f[dMPM])[kbnw ];
-        //f_TNW  = (D.f[dPMM])[kbse ];
-        //f_BSE  = (D.f[dMPP])[ktnw ];
-        //////////////////////////////////////////////////////////////////////////////////
-        real vxo1, vxo2, vxo3, drho;
-        drho   =  /*zero;*/f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
-                  f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                  f_T + f_B + f_N + f_S + f_E + f_W + f_ZERO; 
-
-        vxo1   =   (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
-                    ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
-                    (f_E - f_W) )/ (c1o1 + drho); 
-        
-
-        vxo2   =   ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
-                    ((f_BN - f_TS)   + (f_TN - f_BS))    + (-(f_SE - f_NW)  + (f_NE - f_SW)) +
-                    (f_N - f_S) )/ (c1o1 + drho); 
-
-        vxo3   =   (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
-                     (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
-                    (f_T - f_B) )/ (c1o1 + drho); 
-
-        real cusq=c3o2*(vxo1*vxo1+vxo2*vxo2+vxo3*vxo3);
-        //vx1 = vx1 * two - vxo1;
-        //vx2 = vx2 * two - vxo2;
-        //vx3 = vx3 * two - vxo3;
-        real cusq2=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-         //f_ZERO = ((one+drho) * (   c8over27 *(one+(-cusq2)))) - c8over27;
-         //f_E    = ((one+drho) * (   c2over27 *(one+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq2))) - c2over27 ;
-         //f_W    = ((one+drho) * (   c2over27 *(one+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq2))) - c2over27 ;
-         //f_N    = ((one+drho) * (   c2over27 *(one+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq2))) - c2over27 ;
-         //f_S    = ((one+drho) * (   c2over27 *(one+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq2))) - c2over27 ;
-         //f_T    = ((one+drho) * (   c2over27 *(one+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq2))) - c2over27 ;
-         //f_B    = ((one+drho) * (   c2over27 *(one+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq2))) - c2over27 ;
-         //f_NE   = ((one+drho) * (   c1over54 *(one+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq2))) - c1over54 ;
-         //f_SW   = ((one+drho) * (   c1over54 *(one+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq2))) - c1over54 ;
-         //f_SE   = ((one+drho) * (   c1over54 *(one+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq2))) - c1over54 ;
-         //f_NW   = ((one+drho) * (   c1over54 *(one+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq2))) - c1over54 ;
-         //f_TE   = ((one+drho) * (   c1over54 *(one+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq2))) - c1over54 ;
-         //f_BW   = ((one+drho) * (   c1over54 *(one+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq2))) - c1over54 ;
-         //f_BE   = ((one+drho) * (   c1over54 *(one+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq2))) - c1over54 ;
-         //f_TW   = ((one+drho) * (   c1over54 *(one+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq2))) - c1over54 ;
-         //f_TN   = ((one+drho) * (   c1over54 *(one+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq2))) - c1over54 ;
-         //f_BS   = ((one+drho) * (   c1over54 *(one+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq2))) - c1over54 ;
-         //f_BN   = ((one+drho) * (   c1over54 *(one+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq2))) - c1over54 ;
-         //f_TS   = ((one+drho) * (   c1over54 *(one+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq2))) - c1over54 ;
-         //f_TNE  = ((one+drho) * (   c1over216*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq2))) - c1over216;
-         //f_BSW  = ((one+drho) * (   c1over216*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq2))) - c1over216;
-         //f_BNE  = ((one+drho) * (   c1over216*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq2))) - c1over216;
-         //f_TSW  = ((one+drho) * (   c1over216*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq2))) - c1over216;
-         //f_TSE  = ((one+drho) * (   c1over216*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq2))) - c1over216;
-         //f_BNW  = ((one+drho) * (   c1over216*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq2))) - c1over216;
-         //f_BSE  = ((one+drho) * (   c1over216*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq2))) - c1over216;
-         //f_TNW  = ((one+drho) * (   c1over216*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq2))) - c1over216;
-         f_ZERO = f_ZERO + ((c1o1+drho) * (-  c8o27* (-cusq)                                                                   +   c8o27* (-cusq2)));
-         f_E    = f_E    + ((c1o1+drho) * (-  c2o27* (c3o1*( vxo1          )+c9o2*( vxo1          )*( vxo1          )-cusq) +   c2o27* (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cusq2)));
-         f_W    = f_W    + ((c1o1+drho) * (-  c2o27* (c3o1*(-vxo1          )+c9o2*(-vxo1          )*(-vxo1          )-cusq) +   c2o27* (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cusq2)));
-         f_N    = f_N    + ((c1o1+drho) * (-  c2o27* (c3o1*(      vxo2     )+c9o2*(      vxo2     )*(      vxo2     )-cusq) +   c2o27* (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cusq2)));
-         f_S    = f_S    + ((c1o1+drho) * (-  c2o27* (c3o1*(     -vxo2     )+c9o2*(     -vxo2     )*(     -vxo2     )-cusq) +   c2o27* (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cusq2)));
-         f_T    = f_T    + ((c1o1+drho) * (-  c2o27* (c3o1*(           vxo3)+c9o2*(           vxo3)*(           vxo3)-cusq) +   c2o27* (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cusq2)));
-         f_B    = f_B    + ((c1o1+drho) * (-  c2o27* (c3o1*(          -vxo3)+c9o2*(          -vxo3)*(          -vxo3)-cusq) +   c2o27* (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cusq2)));
-         f_NE   = f_NE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1+vxo2     )+c9o2*( vxo1+vxo2     )*( vxo1+vxo2     )-cusq) +   c1o54* (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cusq2)));
-         f_SW   = f_SW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1-vxo2     )+c9o2*(-vxo1-vxo2     )*(-vxo1-vxo2     )-cusq) +   c1o54* (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cusq2)));
-         f_SE   = f_SE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1-vxo2     )+c9o2*( vxo1-vxo2     )*( vxo1-vxo2     )-cusq) +   c1o54* (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cusq2)));
-         f_NW   = f_NW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1+vxo2     )+c9o2*(-vxo1+vxo2     )*(-vxo1+vxo2     )-cusq) +   c1o54* (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cusq2)));
-         f_TE   = f_TE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1     +vxo3)+c9o2*( vxo1     +vxo3)*( vxo1     +vxo3)-cusq) +   c1o54* (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cusq2)));
-         f_BW   = f_BW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1     -vxo3)+c9o2*(-vxo1     -vxo3)*(-vxo1     -vxo3)-cusq) +   c1o54* (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cusq2)));
-         f_BE   = f_BE   + ((c1o1+drho) * (-  c1o54* (c3o1*( vxo1     -vxo3)+c9o2*( vxo1     -vxo3)*( vxo1     -vxo3)-cusq) +   c1o54* (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cusq2)));
-         f_TW   = f_TW   + ((c1o1+drho) * (-  c1o54* (c3o1*(-vxo1     +vxo3)+c9o2*(-vxo1     +vxo3)*(-vxo1     +vxo3)-cusq) +   c1o54* (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cusq2)));
-         f_TN   = f_TN   + ((c1o1+drho) * (-  c1o54* (c3o1*(      vxo2+vxo3)+c9o2*(      vxo2+vxo3)*(      vxo2+vxo3)-cusq) +   c1o54* (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cusq2)));
-         f_BS   = f_BS   + ((c1o1+drho) * (-  c1o54* (c3o1*(     -vxo2-vxo3)+c9o2*(     -vxo2-vxo3)*(     -vxo2-vxo3)-cusq) +   c1o54* (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cusq2)));
-         f_BN   = f_BN   + ((c1o1+drho) * (-  c1o54* (c3o1*(      vxo2-vxo3)+c9o2*(      vxo2-vxo3)*(      vxo2-vxo3)-cusq) +   c1o54* (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cusq2)));
-         f_TS   = f_TS   + ((c1o1+drho) * (-  c1o54* (c3o1*(     -vxo2+vxo3)+c9o2*(     -vxo2+vxo3)*(     -vxo2+vxo3)-cusq) +   c1o54* (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cusq2)));
-         f_TNE  = f_TNE  + ((c1o1+drho) * (-  c1o216*(c3o1*( vxo1+vxo2+vxo3)+c9o2*( vxo1+vxo2+vxo3)*( vxo1+vxo2+vxo3)-cusq) +   c1o216*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq2)));
-         f_BSW  = f_BSW  + ((c1o1+drho) * (-  c1o216*(c3o1*(-vxo1-vxo2-vxo3)+c9o2*(-vxo1-vxo2-vxo3)*(-vxo1-vxo2-vxo3)-cusq) +   c1o216*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq2)));
-         f_BNE  = f_BNE  + ((c1o1+drho) * (-  c1o216*(c3o1*( vxo1+vxo2-vxo3)+c9o2*( vxo1+vxo2-vxo3)*( vxo1+vxo2-vxo3)-cusq) +   c1o216*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq2)));
-         f_TSW  = f_TSW  + ((c1o1+drho) * (-  c1o216*(c3o1*(-vxo1-vxo2+vxo3)+c9o2*(-vxo1-vxo2+vxo3)*(-vxo1-vxo2+vxo3)-cusq) +   c1o216*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq2)));
-         f_TSE  = f_TSE  + ((c1o1+drho) * (-  c1o216*(c3o1*( vxo1-vxo2+vxo3)+c9o2*( vxo1-vxo2+vxo3)*( vxo1-vxo2+vxo3)-cusq) +   c1o216*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq2)));
-         f_BNW  = f_BNW  + ((c1o1+drho) * (-  c1o216*(c3o1*(-vxo1+vxo2-vxo3)+c9o2*(-vxo1+vxo2-vxo3)*(-vxo1+vxo2-vxo3)-cusq) +   c1o216*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq2)));
-         f_BSE  = f_BSE  + ((c1o1+drho) * (-  c1o216*(c3o1*( vxo1-vxo2-vxo3)+c9o2*( vxo1-vxo2-vxo3)*( vxo1-vxo2-vxo3)-cusq) +   c1o216*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq2)));
-         f_TNW  = f_TNW  + ((c1o1+drho) * (-  c1o216*(c3o1*(-vxo1+vxo2+vxo3)+c9o2*(-vxo1+vxo2+vxo3)*(-vxo1+vxo2+vxo3)-cusq) +   c1o216*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq2)));
-
-        (D.f[d000])[kzero] =  f_ZERO;
-        (D.f[dP00])[ke   ] =  f_E   ;    // f_W   ;//        
-        (D.f[dM00])[kw   ] =  f_W   ;    // f_E   ;//        
-        (D.f[d0P0])[kn   ] =  f_N   ;    // f_S   ;//        
-        (D.f[d0M0])[ks   ] =  f_S   ;    // f_N   ;//        
-        (D.f[d00P])[kt   ] =  f_T   ;    // f_B   ;//        
-        (D.f[d00M])[kb   ] =  f_B   ;    // f_T   ;//        
-        (D.f[dPP0])[kne  ] =  f_NE  ;    // f_SW  ;//        
-        (D.f[dMM0])[ksw  ] =  f_SW  ;    // f_NE  ;//        
-        (D.f[dPM0])[kse  ] =  f_SE  ;    // f_NW  ;//        
-        (D.f[dMP0])[knw  ] =  f_NW  ;    // f_SE  ;//        
-        (D.f[dP0P])[kte  ] =  f_TE  ;    // f_BW  ;//        
-        (D.f[dM0M])[kbw  ] =  f_BW  ;    // f_TE  ;//        
-        (D.f[dP0M])[kbe  ] =  f_BE  ;    // f_TW  ;//        
-        (D.f[dM0P])[ktw  ] =  f_TW  ;    // f_BE  ;//        
-        (D.f[d0PP])[ktn  ] =  f_TN  ;    // f_BS  ;//        
-        (D.f[d0MM])[kbs  ] =  f_BS  ;    // f_TN  ;//        
-        (D.f[d0PM])[kbn  ] =  f_BN  ;    // f_TS  ;//        
-        (D.f[d0MP])[kts  ] =  f_TS  ;    // f_BN  ;//        
-        (D.f[dPPP])[ktne ] =  f_TNE ;    // f_BSW ;//        
-        (D.f[dMMM])[kbsw ] =  f_BSW ;    // f_BNE ;//        
-        (D.f[dPPM])[kbne ] =  f_BNE ;    // f_BNW ;//        
-        (D.f[dMMP])[ktsw ] =  f_TSW ;    // f_BSE ;//        
-        (D.f[dPMP])[ktse ] =  f_TSE ;    // f_TSW ;//        
-        (D.f[dMPM])[kbnw ] =  f_BNW ;    // f_TNE ;//        
-        (D.f[dPMM])[kbse ] =  f_BSE ;    // f_TNW ;//        
-        (D.f[dMPP])[ktnw ] =  f_TNW ;    // f_TSE ;//        
-
-        //////////////////////////////////////////////////////////////////////////
-        ////(D.f[d000])[kzero] =   c8over27* (drho-cu_sq);
-        //(D.f[dP00])[ke   ] =   three*c2over27* ( vx1        );        //six
-        //(D.f[dM00])[kw   ] =   three*c2over27* (-vx1        );        //six
-        //(D.f[d0P0])[kn   ] =   three*c2over27* (     vx2    );        //six
-        //(D.f[d0M0])[ks   ] =   three*c2over27* (    -vx2    );        //six
-        //(D.f[d00P])[kt   ] =   three*c2over27* (         vx3);        //six
-        //(D.f[d00M])[kb   ] =   three*c2over27* (        -vx3);        //six
-        //(D.f[dPP0])[kne  ] =   three*c1over54* ( vx1+vx2    );        //six
-        //(D.f[dMM0])[ksw  ] =   three*c1over54* (-vx1-vx2    );        //six
-        //(D.f[dPM0])[kse  ] =   three*c1over54* ( vx1-vx2    );        //six
-        //(D.f[dMP0])[knw  ] =   three*c1over54* (-vx1+vx2    );        //six
-        //(D.f[dP0P])[kte  ] =   three*c1over54* ( vx1    +vx3);        //six
-        //(D.f[dM0M])[kbw  ] =   three*c1over54* (-vx1    -vx3);        //six
-        //(D.f[dP0M])[kbe  ] =   three*c1over54* ( vx1    -vx3);        //six
-        //(D.f[dM0P])[ktw  ] =   three*c1over54* (-vx1    +vx3);        //six
-        //(D.f[d0PP])[ktn  ] =   three*c1over54* (     vx2+vx3);        //six
-        //(D.f[d0MM])[kbs  ] =   three*c1over54* (    -vx2-vx3);        //six
-        //(D.f[d0PM])[kbn  ] =   three*c1over54* (     vx2-vx3);        //six
-        //(D.f[d0MP])[kts  ] =   three*c1over54* (    -vx2+vx3);        //six
-        //(D.f[dPPP])[ktne ] =   three*c1over216*( vx1+vx2+vx3);        //six
-        //(D.f[dMMM])[kbsw ] =   three*c1over216*(-vx1-vx2-vx3);        //six
-        //(D.f[dPPM])[kbne ] =   three*c1over216*( vx1+vx2-vx3);        //six
-        //(D.f[dMMP])[ktsw ] =   three*c1over216*(-vx1-vx2+vx3);        //six
-        //(D.f[dPMP])[ktse ] =   three*c1over216*( vx1-vx2+vx3);        //six
-        //(D.f[dMPM])[kbnw ] =   three*c1over216*(-vx1+vx2-vx3);        //six
-        //(D.f[dPMM])[kbse ] =   three*c1over216*( vx1-vx2-vx3);        //six
-        //(D.f[dMPP])[ktnw ] =   three*c1over216*(-vx1+vx2+vx3);        //six
-        //(D.f[d000])[kzero] =   c8over27* (drho-cu_sq);
-        //(D.f[dP00])[ke   ] =   c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq);
-        //(D.f[dM00])[kw   ] =   c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq);
-        //(D.f[d0P0])[kn   ] =   c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq);
-        //(D.f[d0M0])[ks   ] =   c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq);
-        //(D.f[d00P])[kt   ] =   c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq);
-        //(D.f[d00M])[kb   ] =   c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq);
-        //(D.f[dPP0])[kne  ] =   c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-        //(D.f[dMM0])[ksw  ] =   c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-        //(D.f[dPM0])[kse  ] =   c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-        //(D.f[dMP0])[knw  ] =   c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-        //(D.f[dP0P])[kte  ] =   c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-        //(D.f[dM0M])[kbw  ] =   c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-        //(D.f[dP0M])[kbe  ] =   c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-        //(D.f[dM0P])[ktw  ] =   c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-        //(D.f[d0PP])[ktn  ] =   c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-        //(D.f[d0MM])[kbs  ] =   c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-        //(D.f[d0PM])[kbn  ] =   c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-        //(D.f[d0MP])[kts  ] =   c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-        //(D.f[dPPP])[ktne ] =   c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-        //(D.f[dMMM])[kbsw ] =   c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-        //(D.f[dPPM])[kbne ] =   c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-        //(D.f[dMMP])[ktsw ] =   c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-        //(D.f[dPMP])[ktse ] =   c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-        //(D.f[dMPM])[kbnw ] =   c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-        //(D.f[dPMM])[kbse ] =   c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-        //(D.f[dMPP])[ktnw ] =   c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
-        }
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-
diff --git a/src/gpu/core/Factories/GridScalingFactory.cpp b/src/gpu/core/GridScaling/GridScalingFactory.cpp
similarity index 100%
rename from src/gpu/core/Factories/GridScalingFactory.cpp
rename to src/gpu/core/GridScaling/GridScalingFactory.cpp
diff --git a/src/gpu/core/Factories/GridScalingFactory.h b/src/gpu/core/GridScaling/GridScalingFactory.h
similarity index 100%
rename from src/gpu/core/Factories/GridScalingFactory.h
rename to src/gpu/core/GridScaling/GridScalingFactory.h
diff --git a/src/gpu/core/KernelManager/GridScalingKernelManager.cpp b/src/gpu/core/GridScaling/GridScalingKernelManager.cpp
similarity index 99%
rename from src/gpu/core/KernelManager/GridScalingKernelManager.cpp
rename to src/gpu/core/GridScaling/GridScalingKernelManager.cpp
index 4c168389d189726b47ded9176b6ad27d84063881..30f377851a7f21442aa88fa4798775a3531f5079 100644
--- a/src/gpu/core/KernelManager/GridScalingKernelManager.cpp
+++ b/src/gpu/core/GridScaling/GridScalingKernelManager.cpp
@@ -30,14 +30,14 @@
 //! \ingroup KernelManager
 //! \author Martin Schoenherr
 //=======================================================================================
-#include "KernelManager/GridScalingKernelManager.h"
+#include "GridScaling/GridScalingKernelManager.h"
 #include "GPU/CudaMemoryManager.h"
 #include "GPU/GPU_Interface.h"
 #include "Logger.h"
 #include "Parameter/Parameter.h"
 #include "Parameter/CudaStreamManager.h"
 #include "PreCollisionInteractor/PreCollisionInteractor.h"
-#include "Factories/GridScalingFactory.h"
+#include "GridScaling/GridScalingFactory.h"
 #include <stdexcept>
 
 GridScalingKernelManager::GridScalingKernelManager(SPtr<Parameter> parameter, GridScalingFactory *gridScalingFactory)
diff --git a/src/gpu/core/KernelManager/GridScalingKernelManager.h b/src/gpu/core/GridScaling/GridScalingKernelManager.h
similarity index 100%
rename from src/gpu/core/KernelManager/GridScalingKernelManager.h
rename to src/gpu/core/GridScaling/GridScalingKernelManager.h
diff --git a/src/gpu/core/KernelManager/GridScalingKernelManagerTest.cpp b/src/gpu/core/GridScaling/GridScalingKernelManagerTest.cpp
similarity index 98%
rename from src/gpu/core/KernelManager/GridScalingKernelManagerTest.cpp
rename to src/gpu/core/GridScaling/GridScalingKernelManagerTest.cpp
index 6972cec264e9407f79641618cbe08a4077e70b6b..bb1daf2aa2c145a3052268070c1acf883dfbec9b 100644
--- a/src/gpu/core/KernelManager/GridScalingKernelManagerTest.cpp
+++ b/src/gpu/core/GridScaling/GridScalingKernelManagerTest.cpp
@@ -2,7 +2,7 @@
 #include <stdexcept>
 
 #include "GridScalingKernelManager.h"
-#include "Factories/GridScalingFactory.h"
+#include "GridScaling/GridScalingFactory.h"
 #include "Parameter/Parameter.h"
 #include <basics/PointerDefinitions.h>
 
diff --git a/src/gpu/core/GPU/GridScaling/ScaleCF27.cu b/src/gpu/core/GridScaling/ScaleCF27.cu
similarity index 100%
rename from src/gpu/core/GPU/GridScaling/ScaleCF27.cu
rename to src/gpu/core/GridScaling/ScaleCF27.cu
diff --git a/src/gpu/core/GPU/GridScaling/ScaleCF_F3_27.cu b/src/gpu/core/GridScaling/ScaleCF_F3_27.cu
similarity index 100%
rename from src/gpu/core/GPU/GridScaling/ScaleCF_F3_27.cu
rename to src/gpu/core/GridScaling/ScaleCF_F3_27.cu
diff --git a/src/gpu/core/GPU/GridScaling/ScaleFC27.cu b/src/gpu/core/GridScaling/ScaleFC27.cu
similarity index 100%
rename from src/gpu/core/GPU/GridScaling/ScaleFC27.cu
rename to src/gpu/core/GridScaling/ScaleFC27.cu
diff --git a/src/gpu/core/GPU/GridScaling/ScaleFC_F3_27.cu b/src/gpu/core/GridScaling/ScaleFC_F3_27.cu
similarity index 100%
rename from src/gpu/core/GPU/GridScaling/ScaleFC_F3_27.cu
rename to src/gpu/core/GridScaling/ScaleFC_F3_27.cu
diff --git a/src/gpu/core/GPU/GridScaling/scaleCF_compressible.cu b/src/gpu/core/GridScaling/scaleCF_compressible.cu
similarity index 100%
rename from src/gpu/core/GPU/GridScaling/scaleCF_compressible.cu
rename to src/gpu/core/GridScaling/scaleCF_compressible.cu
diff --git a/src/gpu/core/GPU/GridScaling/scaleFC_compressible.cu b/src/gpu/core/GridScaling/scaleFC_compressible.cu
similarity index 100%
rename from src/gpu/core/GPU/GridScaling/scaleFC_compressible.cu
rename to src/gpu/core/GridScaling/scaleFC_compressible.cu
diff --git a/src/gpu/core/Init/PositionReader.cpp b/src/gpu/core/Init/PositionReader.cpp
deleted file mode 100644
index c94ea46acb9aa1d9b86feb77ebbc58c2aa47e431..0000000000000000000000000000000000000000
--- a/src/gpu/core/Init/PositionReader.cpp
+++ /dev/null
@@ -1,214 +0,0 @@
-#include "PositionReader.h"
-
-#include "Parameter/Parameter.h"
-
-#include <basics/utilities/UbFileInputASCII.h>
-
-using namespace vf::lbm::dir;
-
-//////////////////////////////////////////////////////////////////////////
-void PositionReader::readFilePropellerCylinderForAlloc(Parameter* para)
-{
-    UbFileInputASCII in(para->getpropellerCylinder());
-    int test = 0, count = 0;
-    int maxlevel = in.readInteger();
-    in.readLine();
-
-    for (int level = 0; level < maxlevel; level++)
-    {
-        para->getParH(level)->propellerBC.numberOfBCnodes = in.readInteger();
-        para->getParD(level)->propellerBC.numberOfBCnodes = para->getParH(level)->propellerBC.numberOfBCnodes;
-        in.readLine();
-        if (level == para->getFine())
-        {
-            for(uint u=0; u<para->getParH(level)->propellerBC.numberOfBCnodes; u++)
-            {
-                test = in.readInteger();
-                if (para->getParH(level)->typeOfGridNode[test] == GEO_FLUID)
-                {
-                    count++;
-                }
-                ////////////////////////////////////////////////////////////////////////
-                //for(unsigned int ix3=0; ix3<para->getParH(level)->nz; ix3++)
-                //{
-                //    for(unsigned int ix2=0; ix2<para->getParH(level)->ny; ix2++)
-                //    {
-                //        for(unsigned int ix1=0; ix1<para->getParH(level)->nx; ix1++)
-                //        {
-                //            unsigned int m = para->getParH(level)->nx*(para->getParH(level)->ny*ix3 + ix2) + ix1;
-                //            if (para->getParH(level)->k[m] == test)
-                //            {
-                //                if(para->getParH(level)->geo[m] == 1)
-                //                {
-                //                    count++;                                    
-                //                }
-                //            }
-                //        }
-                //    }
-                //}
-                //count++;
-                ////////////////////////////////////////////////////////////////////////
-                in.readDouble();
-                in.readDouble();
-                in.readDouble();
-                in.readLine();
-            }
-        }
-        else
-        {
-            for(uint u=0; u<para->getParH(level)->propellerBC.numberOfBCnodes; u++)
-            {
-                in.readInteger();
-                in.readDouble();
-                in.readDouble();
-                in.readDouble();
-                in.readLine();
-            }
-        }
-        para->getParH(level)->propellerBC.numberOfBCnodes = count;
-        para->getParD(level)->propellerBC.numberOfBCnodes = para->getParH(level)->propellerBC.numberOfBCnodes;
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-
-//////////////////////////////////////////////////////////////////////////
-void PositionReader::readFilePropellerCylinder(Parameter* para)
-{
-    UbFileInputASCII in(para->getpropellerCylinder());
-    int test = 0, count = 0;
-    int maxlevel = in.readInteger();
-    in.readLine();
-
-    for (int level = 0; level < maxlevel; level++)
-    {
-        int allnodes = in.readInteger();
-        in.readLine();
-        if (level == para->getFine())
-        {
-            for(int u=0; u<allnodes; u++)
-            {
-                test = in.readInteger();
-                ////////////////////////////////////////////////////////////////////////
-                if (para->getParH(level)->typeOfGridNode[test] == GEO_FLUID)
-                {
-                    para->getParH(level)->propellerBC.k[count] = test; 
-                    para->getParH(level)->propellerBC.Vx[count] = (real)in.readDouble();
-                    para->getParH(level)->propellerBC.Vy[count] = (real)in.readDouble();
-                    para->getParH(level)->propellerBC.Vz[count] = (real)in.readDouble();
-                    para->getParH(level)->propellerBC.RhoBC[count] = 0.0f;                                    
-                    count++;
-                }
-                else
-                {
-                    in.readDouble();
-                    in.readDouble();
-                    in.readDouble();
-                }
-                //para->getParH(level)->propellerBC.k[count] = test; 
-                //para->getParH(level)->propellerBC.Vx[count] = (real)in.readDouble();
-                //para->getParH(level)->propellerBC.Vy[count] = (real)in.readDouble();
-                //para->getParH(level)->propellerBC.Vz[count] = (real)in.readDouble();
-                //para->getParH(level)->propellerBC.Vx[count]      = 0.07f;
-                //para->getParH(level)->propellerBC.Vy[count]      = 0.0f;
-                //para->getParH(level)->propellerBC.Vz[count]      = 0.0f;
-                in.readLine();
-            }
-        } 
-        else
-        {
-            for(int u=0; u<allnodes; u++)
-            {
-                in.readInteger(); 
-                in.readDouble();
-                in.readDouble();
-                in.readDouble();
-                in.readLine();
-            }
-        }
-        printf("allnodes = %d, count = %d\n", allnodes, count);
-    }
-}
-//////////////////////////////////////////////////////////////////////////
-
-
-//////////////////////////////////////////////////////////////////////////
-void PositionReader::definePropellerQs(Parameter* para)
-{
-    //////////////////////////////////////////////////////////////////
-    //preprocessing
-    real* QQ                  = para->getParH(para->getFine())->propellerBC.q27[0]; 
-    unsigned int sizeQ           = para->getParH(para->getFine())->propellerBC.numberOfBCnodes; 
-    QforBoundaryConditions Q;
-    Q.q27[dP00   ] = &QQ[dP00   *sizeQ];
-    Q.q27[dM00   ] = &QQ[dM00   *sizeQ];
-    Q.q27[d0P0   ] = &QQ[d0P0   *sizeQ];
-    Q.q27[d0M0   ] = &QQ[d0M0   *sizeQ];
-    Q.q27[d00P   ] = &QQ[d00P   *sizeQ];
-    Q.q27[d00M   ] = &QQ[d00M   *sizeQ];
-    Q.q27[dPP0  ] = &QQ[dPP0  *sizeQ];
-    Q.q27[dMM0  ] = &QQ[dMM0  *sizeQ];
-    Q.q27[dPM0  ] = &QQ[dPM0  *sizeQ];
-    Q.q27[dMP0  ] = &QQ[dMP0  *sizeQ];
-    Q.q27[dP0P  ] = &QQ[dP0P  *sizeQ];
-    Q.q27[dM0M  ] = &QQ[dM0M  *sizeQ];
-    Q.q27[dP0M  ] = &QQ[dP0M  *sizeQ];
-    Q.q27[dM0P  ] = &QQ[dM0P  *sizeQ];
-    Q.q27[d0PP  ] = &QQ[d0PP  *sizeQ];
-    Q.q27[d0MM  ] = &QQ[d0MM  *sizeQ];
-    Q.q27[d0PM  ] = &QQ[d0PM  *sizeQ];
-    Q.q27[d0MP  ] = &QQ[d0MP  *sizeQ];
-    Q.q27[d000] = &QQ[d000*sizeQ];
-    Q.q27[dPPP ] = &QQ[dPPP *sizeQ];
-    Q.q27[dMMP ] = &QQ[dMMP *sizeQ];
-    Q.q27[dPMP ] = &QQ[dPMP *sizeQ];
-    Q.q27[dMPP ] = &QQ[dMPP *sizeQ];
-    Q.q27[dPPM ] = &QQ[dPPM *sizeQ];
-    Q.q27[dMMM ] = &QQ[dMMM *sizeQ];
-    Q.q27[dPMM ] = &QQ[dPMM *sizeQ];
-    Q.q27[dMPM ] = &QQ[dMPM *sizeQ];
-    //////////////////////////////////////////////////////////////////
-    for(uint u=0; u<para->getParH(para->getFine())->propellerBC.numberOfBCnodes; u++)
-    {
-        for (size_t dir = dP00; dir<=dMMM; dir++)
-        {
-            if ((dir==dP00)  || 
-                (dir==dPP0) || (dir==dPM0) || (dir==dP0P) || (dir==dP0M) ||
-                (dir==dPPP)|| (dir==dPPM)|| (dir==dPMP)|| (dir==dPMM))
-            {
-                Q.q27[dir][u] = 1.0f;
-            } 
-            else
-            {
-                Q.q27[dir][u] = -1.0f;
-            }
-        }
-    }
-    //////////////////////////////////////////////////////////////////
-}
-//////////////////////////////////////////////////////////////////////////
-
-
-//////////////////////////////////////////////////////////////////////////
-void PositionReader::readMeasurePoints( Parameter* para ) 
-{
-    UbFileInputASCII in(para->getmeasurePoints());
-    int numberOfAllNodes = in.readInteger();
-    in.readLine();
-    int tempLevel;
-    MeasurePoints tempMP;
-    //printf("done, init the values...\n");
-    for (int u = 0; u < numberOfAllNodes; u++)
-    {
-        tempMP.name = in.readString();         
-        //printf("done, read the name...\n");
-        tempMP.k = in.readInteger();
-        //printf("done, read k...\n");
-        tempLevel = in.readInteger();
-        //printf("done, read level...\n");
-        in.readLine();
-        //printf("done, read the values...\n");
-        para->getParH(tempLevel)->MP.push_back(tempMP);
-        //printf("done, put it into a vector...\n");
-    }
-}
diff --git a/src/gpu/core/Init/PositionReader.h b/src/gpu/core/Init/PositionReader.h
deleted file mode 100644
index b12a17c8148f4b5b1d5b656e0c9ea04d88eee89f..0000000000000000000000000000000000000000
--- a/src/gpu/core/Init/PositionReader.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef POSITION_READER_H
-#define POSITION_READER_H
-
-class Parameter;
-
-class PositionReader
-{
-public:
-   static void readFilePropellerCylinderForAlloc(Parameter* para);
-   static void readFilePropellerCylinder(Parameter* para);
-   static void definePropellerQs(Parameter* para);
-   static void readMeasurePoints(Parameter* para);
-};
-
-#endif
\ No newline at end of file
diff --git a/src/gpu/core/Init/VfReader.cpp b/src/gpu/core/Init/VfReader.cpp
deleted file mode 100644
index 8a567200863cfa5ff78c24b04a619cfccf6fa036..0000000000000000000000000000000000000000
--- a/src/gpu/core/Init/VfReader.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-#include "Init/VfReader.h"
-
-#include "Parameter/Parameter.h"
-#include "Init/PositionReader.h"
-#include "GPU/CudaMemoryManager.h"
-
-////////////////////////////////////////////////////////////////////////////////
-void readPropellerCylinder(Parameter* para, CudaMemoryManager* cudaMemoryManager)
-{
-    PositionReader::readFilePropellerCylinderForAlloc(para);
-
-    cudaMemoryManager->cudaAllocVeloPropeller(para->getFine());
-
-    PositionReader::readFilePropellerCylinder(para);
-    //PositionReader::definePropellerQs(para);
-
-    cudaMemoryManager->cudaCopyVeloPropeller(para->getFine());
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void readMeasurePoints(Parameter* para, CudaMemoryManager* cudaMemoryManager)
-{
-    //read measure points from file
-    PositionReader::readMeasurePoints(para);
-    //printf("done, reading the file...\n");
-    //level loop
-    for (int lev = 0; lev <= para->getMaxLevel(); lev++)
-    {
-        //set Memory Size and malloc of the indices and macroscopic values per level
-        para->getParH(lev)->numberOfValuesMP = (unsigned int)para->getParH(lev)->MP.size()*(unsigned int)para->getclockCycleForMP()/((unsigned int)para->getTimestepForMP());
-        para->getParD(lev)->numberOfValuesMP = para->getParH(lev)->numberOfValuesMP;
-
-        para->getParH(lev)->numberOfPointskMP = (int)para->getParH(lev)->MP.size();
-        para->getParD(lev)->numberOfPointskMP = para->getParH(lev)->numberOfPointskMP;
-
-        para->getParH(lev)->memSizeIntkMP = sizeof(unsigned int)*(int)para->getParH(lev)->MP.size();
-        para->getParD(lev)->memSizeIntkMP = para->getParH(lev)->memSizeIntkMP;
-
-        para->getParH(lev)->memSizerealkMP = sizeof(real)*para->getParH(lev)->numberOfValuesMP;
-        para->getParD(lev)->memSizerealkMP = para->getParH(lev)->memSizerealkMP;        
-        
-        printf("Level: %d, numberOfValuesMP: %d, memSizeIntkMP: %d, memSizerealkMP: %d\n",lev,para->getParH(lev)->numberOfValuesMP,para->getParH(lev)->memSizeIntkMP, para->getParD(lev)->memSizerealkMP);
-
-        cudaMemoryManager->cudaAllocMeasurePointsIndex(lev);
-
-        //loop over all measure points per level 
-        for(int index = 0; index < (int)para->getParH(lev)->MP.size(); index++)
-        {
-            //set indices
-            para->getParH(lev)->kMP[index] = para->getParH(lev)->MP[index].k;
-        }
-        //loop over all measure points per level times MPClockCycle
-        for(int index = 0; index < (int)para->getParH(lev)->numberOfValuesMP; index++)
-        {
-            //init values
-            para->getParH(lev)->VxMP[index]  = (real)0.0;
-            para->getParH(lev)->VyMP[index]  = (real)0.0;
-            para->getParH(lev)->VzMP[index]  = (real)0.0;
-            para->getParH(lev)->RhoMP[index] = (real)0.0;
-        }
-
-        //copy indices-arrays
-        cudaMemoryManager->cudaCopyMeasurePointsIndex(lev);
-    }
-}
-////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-
-
diff --git a/src/gpu/core/Init/VfReader.h b/src/gpu/core/Init/VfReader.h
deleted file mode 100644
index f8f792375f58edd61b9ec4e876245ad3a334dd81..0000000000000000000000000000000000000000
--- a/src/gpu/core/Init/VfReader.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef VF_READER_H
-#define VF_READER_H
-
-
-class CudaMemoryManager;
-class Parameter;
-
-
-void readPropellerCylinder(Parameter* para, CudaMemoryManager* cudaMemoryManager);
-
-void readMeasurePoints(Parameter* para, CudaMemoryManager* cudaMemoryManager);
-
-#endif
diff --git a/src/gpu/core/KernelManager/ADKernelManager.cpp b/src/gpu/core/Kernel/ADKernelManager.cpp
similarity index 99%
rename from src/gpu/core/KernelManager/ADKernelManager.cpp
rename to src/gpu/core/Kernel/ADKernelManager.cpp
index 7b867dc84acc245633ac65d785f198b48e2979ee..cce56d123216cb2501a254f5d99c1c3832f21aa1 100644
--- a/src/gpu/core/KernelManager/ADKernelManager.cpp
+++ b/src/gpu/core/Kernel/ADKernelManager.cpp
@@ -30,7 +30,7 @@
 //! \ingroup KernelManager
 //! \author Martin Schoenherr
 //=======================================================================================
-#include "KernelManager/ADKernelManager.h"
+#include "Kernel/ADKernelManager.h"
 #include "GPU/CudaMemoryManager.h"
 #include "GPU/GPU_Interface.h"
 #include "Parameter/Parameter.h"
diff --git a/src/gpu/core/KernelManager/ADKernelManager.h b/src/gpu/core/Kernel/ADKernelManager.h
similarity index 100%
rename from src/gpu/core/KernelManager/ADKernelManager.h
rename to src/gpu/core/Kernel/ADKernelManager.h
diff --git a/src/gpu/core/KernelManager/BCKernelManagerTest.cpp b/src/gpu/core/KernelManager/BCKernelManagerTest.cpp
deleted file mode 100644
index 3cb6138ca203f70fb65dad44cb1d317c098cb3b2..0000000000000000000000000000000000000000
--- a/src/gpu/core/KernelManager/BCKernelManagerTest.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-
-#include <gmock/gmock.h>
-#include <stdexcept>
-
-#include "BCKernelManager.h"
-#include "Factories/BoundaryConditionFactory.h"
-#include "Parameter/Parameter.h"
-#include <basics/PointerDefinitions.h>
-
-class BCKernelManagerTest_BCsNotSpecified : public testing::Test
-{
-protected:
-    BoundaryConditionFactory bcFactory;
-    SPtr<Parameter> para = std::make_shared<Parameter>();
-
-    void SetUp() override
-    {
-        para->initLBMSimulationParameter();
-    }
-};
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, velocityBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
-{
-    para->getParD(0)->velocityBC.numberOfBCnodes = 0;
-    EXPECT_NO_THROW(BCKernelManager(para, &bcFactory));
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, velocityBoundaryConditionPostNotSpecified_withBoundaryNodes_throws)
-{
-    para->getParD(0)->velocityBC.numberOfBCnodes = 1;
-    EXPECT_THROW(BCKernelManager(para, &bcFactory), std::runtime_error);
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, noSlipBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
-{
-    para->getParD(0)->noSlipBC.numberOfBCnodes = 0;
-    EXPECT_NO_THROW(BCKernelManager(para, &bcFactory));
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, noSlipBoundaryConditionPostNotSpecified_withBoundaryNodes_doesNotThrow)
-{
-    para->getParD(0)->noSlipBC.numberOfBCnodes = 1;
-    EXPECT_NO_THROW(BCKernelManager(para, &bcFactory)); // no throw, as a default is specified
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, slipBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
-{
-    para->getParD(0)->slipBC.numberOfBCnodes = 0;
-    EXPECT_NO_THROW(BCKernelManager(para, &bcFactory));
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, slipBoundaryConditionPostNotSpecified_withBoundaryNodes_throws)
-{
-    para->getParD(0)->slipBC.numberOfBCnodes = 1;
-    EXPECT_THROW(BCKernelManager(para, &bcFactory), std::runtime_error);
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, pressureBoundaryConditionPreNotSpecified_noBoundaryNodes_doesNotThrow)
-{
-    para->getParD(0)->pressureBC.numberOfBCnodes = 0;
-    EXPECT_NO_THROW(BCKernelManager(para, &bcFactory));
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, pressureBoundaryConditionPreNotSpecified_withBoundaryNodes_throws)
-{
-    para->getParD(0)->pressureBC.numberOfBCnodes = 1;
-    EXPECT_THROW(BCKernelManager(para, &bcFactory), std::runtime_error);
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, geometryBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
-{
-    para->getParD(0)->geometryBC.numberOfBCnodes = 0;
-    EXPECT_NO_THROW(BCKernelManager(para, &bcFactory));
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, geometryBoundaryConditionPostNotSpecified_withBoundaryNodes_doesNotThrow)
-{
-    para->getParD(0)->geometryBC.numberOfBCnodes = 1;
-    EXPECT_NO_THROW(BCKernelManager(para, &bcFactory)); // no throw, as a default is specified
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, stressBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
-{
-    para->getParD(0)->stressBC.numberOfBCnodes = 0;
-    EXPECT_NO_THROW(BCKernelManager(para, &bcFactory));
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, stressBoundaryConditionPostNotSpecified_withBoundaryNodes_throws)
-{
-    para->getParD(0)->stressBC.numberOfBCnodes = 1;
-    EXPECT_THROW(BCKernelManager(para, &bcFactory), std::runtime_error);
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, precursorBoundaryConditionPostNotSpecified_noBoundaryNodes_doesNotThrow)
-{
-    para->getParD(0)->precursorBC.numberOfBCnodes = 0;
-    EXPECT_NO_THROW(BCKernelManager(para, &bcFactory));
-}
-
-TEST_F(BCKernelManagerTest_BCsNotSpecified, precursorBoundaryConditionPostNotSpecified_withBoundaryNodes_throws)
-{
-    para->getParD(0)->precursorBC.numberOfBCnodes = 1;
-    EXPECT_THROW(BCKernelManager(para, &bcFactory), std::runtime_error);
-}
-
-class BoundaryConditionFactoryMock : public BoundaryConditionFactory
-{
-public:
-    mutable uint numberOfCalls = 0;
-
-    [[nodiscard]] boundaryCondition getVelocityBoundaryConditionPost(bool) const override
-    {
-        return [this](LBMSimulationParameter *, QforBoundaryConditions *) { numberOfCalls++; };
-    }
-};
-
-class BCKernelManagerTest_runBCs : public testing::Test
-{
-protected:
-    BoundaryConditionFactoryMock bcFactory;
-    SPtr<Parameter> para = std::make_shared<Parameter>();
-    UPtr<BCKernelManager> sut;
-
-    void SetUp() override
-    {
-        para->initLBMSimulationParameter();
-        sut = std::make_unique<BCKernelManager>(para, &bcFactory);
-    }
-};
-
-TEST_F(BCKernelManagerTest_runBCs, runVelocityBCKernelPost)
-{
-    para->getParD(0)->velocityBC.numberOfBCnodes = 1;
-    sut->runVelocityBCKernelPost(0);
-    EXPECT_THAT(bcFactory.numberOfCalls, testing::Eq(1));
-
-    bcFactory.numberOfCalls = 0;
-    para->getParD(0)->velocityBC.numberOfBCnodes = 0;
-    sut->runVelocityBCKernelPost(0);
-    EXPECT_THAT(bcFactory.numberOfCalls, testing::Eq(0));
-}
diff --git a/src/gpu/core/LBM/Simulation.cpp b/src/gpu/core/LBM/Simulation.cpp
index 3566c26f8849e586bcdadbc6c916f0815b8d54cf..a02f69b16b8d8f50b43b19a7f4a09567dd9b9ca0 100644
--- a/src/gpu/core/LBM/Simulation.cpp
+++ b/src/gpu/core/LBM/Simulation.cpp
@@ -4,7 +4,7 @@
 
 #include <helper_timer.h>
 
-#include "Factories/GridScalingFactory.h"
+#include "GridScaling/GridScalingFactory.h"
 #include "LBM/LB.h"
 #include "Communication/ExchangeData27.h"
 #include "Parameter/Parameter.h"
@@ -25,8 +25,8 @@
 #include "Utilities/Buffer2D.hpp"
 #include "StringUtilities/StringUtil.h"
 //////////////////////////////////////////////////////////////////////////
-#include "Init/InitLattice.h"
-#include "Init/VfReader.h"
+#include "PreProcessor/InitLattice.h"
+#include "PreProcessor/ReaderMeasurePoints.h"
 //////////////////////////////////////////////////////////////////////////
 #include "FindQ/FindQ.h"
 #include "FindQ/DefineBCs.h"
@@ -245,7 +245,7 @@ void Simulation::init(GridProvider &gridProvider, BoundaryConditionFactory *bcFa
     //////////////////////////////////////////////////////////////////////////
     if (para->getUseMeasurePoints()) {
         VF_LOG_INFO("read measure points");
-        readMeasurePoints(para.get(), cudaMemoryManager.get());
+        ReaderMeasurePoints::readMeasurePoints(para.get(), cudaMemoryManager.get());
     }
 
     //////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/core/Parameter/Parameter.cpp b/src/gpu/core/Parameter/Parameter.cpp
index 4177aa2fc9bb5475f025700c8217a36ab4387eca..14aacb94a6da732d581b9820b2d34390b1472aff 100644
--- a/src/gpu/core/Parameter/Parameter.cpp
+++ b/src/gpu/core/Parameter/Parameter.cpp
@@ -397,7 +397,6 @@ void Parameter::initGridPaths(){
     this->setnumberNodes(gridPath + "numberNodes.dat");
     this->setLBMvsSI(gridPath + "LBMvsSI.dat");
     this->setmeasurePoints(gridPath + "measurePoints.dat");
-    this->setpropellerValues(gridPath + "propellerValues.dat");
     this->setcpTop(gridPath + "cpTop.dat");
     this->setcpBottom(gridPath + "cpBottom.dat");
     this->setcpBottom2(gridPath + "cpBottom2.dat");
@@ -957,10 +956,6 @@ void Parameter::setIsOutflowNormal(bool isOutflowNormal)
 {
     this->isOutflowNormal = isOutflowNormal;
 }
-void Parameter::setIsProp(bool isProp)
-{
-    this->isProp = isProp;
-}
 void Parameter::setIsCp(bool isCp)
 {
     this->isCp = isCp;
@@ -1288,18 +1283,6 @@ void Parameter::setperiodicBcValues(std::string periodicBcValues)
 {
     this->periodicBcValues = periodicBcValues;
 }
-void Parameter::setpropellerQs(std::string propellerQs)
-{
-    this->propellerQs = propellerQs;
-}
-void Parameter::setpropellerValues(std::string propellerValues)
-{
-    this->propellerValues = propellerValues;
-}
-void Parameter::setpropellerCylinder(std::string propellerCylinder)
-{
-    this->propellerCylinder = propellerCylinder;
-}
 void Parameter::setmeasurePoints(std::string measurePoints)
 {
     this->measurePoints = measurePoints;
@@ -1356,8 +1339,6 @@ void Parameter::setObj(std::string str, bool isObj)
 {
     if (str == "geo") {
         this->setIsGeo(isObj);
-    } else if (str == "prop") {
-        this->setIsProp(isObj);
     } else if (str == "cp") {
         this->setIsCp(isObj);
     } else if (str == "geoNormal") {
@@ -2246,18 +2227,6 @@ std::string Parameter::getperiodicBcValues()
 {
     return this->periodicBcValues;
 }
-std::string Parameter::getpropellerQs()
-{
-    return this->propellerQs;
-}
-std::string Parameter::getpropellerValues()
-{
-    return this->propellerValues;
-}
-std::string Parameter::getpropellerCylinder()
-{
-    return this->propellerCylinder;
-}
 std::string Parameter::getmeasurePoints()
 {
     return this->measurePoints;
@@ -2409,10 +2378,6 @@ bool Parameter::getCalcHighOrderMoments()
 {
     return this->isHighOrderMoments;
 }
-bool Parameter::getIsProp()
-{
-    return this->isProp;
-}
 bool Parameter::overWritingRestart(uint t)
 {
     return t == getTimeDoRestart();
diff --git a/src/gpu/core/Parameter/Parameter.h b/src/gpu/core/Parameter/Parameter.h
index cc062e2d96b5e049c7a2e692860da026e49ab5b5..35c638878fbd235480132e363df0df0e8e858c08 100644
--- a/src/gpu/core/Parameter/Parameter.h
+++ b/src/gpu/core/Parameter/Parameter.h
@@ -373,7 +373,6 @@ struct LBMSimulationParameter {
     QforBoundaryConditions QInlet, QOutlet, QPeriodic; // DEPRECATED BCs that are not used any more
     unsigned int kInletQread, kOutletQread;            // DEPRECATED
 
-    QforBoundaryConditions propellerBC;                                                 // DEPRECATED
     QforBoundaryConditions geometryBCnormalX, geometryBCnormalY, geometryBCnormalZ;     // DEPRECATED
     QforBoundaryConditions inflowBCnormalX, inflowBCnormalY, inflowBCnormalZ;           // DEPRECATED
     QforBoundaryConditions outflowBCnormalX, outflowBCnormalY, outflowBCnormalZ;        // DEPRECATED
@@ -571,9 +570,6 @@ public:
     void setwallBcValues(std::string wallBcValues);
     void setperiodicBcQs(std::string periodicBcQs);
     void setperiodicBcValues(std::string periodicBcValues);
-    void setpropellerCylinder(std::string propellerCylinder);
-    void setpropellerValues(std::string propellerValues);
-    void setpropellerQs(std::string propellerQs);
     void setmeasurePoints(std::string measurePoints);
     void setnumberNodes(std::string numberNodes);
     void setLBMvsSI(std::string LBMvsSI);
@@ -599,7 +595,6 @@ public:
     void setIsGeoNormal(bool isGeoNormal);
     void setIsInflowNormal(bool isInflowNormal);
     void setIsOutflowNormal(bool isOutflowNormal);
-    void setIsProp(bool isProp);
     void setIsCp(bool isCp);
     void setConcFile(bool concFile);
     void setUseMeasurePoints(bool useMeasurePoints);
@@ -785,9 +780,6 @@ public:
     std::string getwallBcValues();
     std::string getperiodicBcQs();
     std::string getperiodicBcValues();
-    std::string getpropellerQs();
-    std::string getpropellerCylinder();
-    std::string getpropellerValues();
     std::string getmeasurePoints();
     std::string getnumberNodes();
     std::string getLBMvsSI();
@@ -885,7 +877,6 @@ public:
     bool getIsGeoNormal();
     bool getIsInflowNormal();
     bool getIsOutflowNormal();
-    bool getIsProp();
     bool getIsCp();
     bool getIsGeometryValues();
     bool getCalc2ndOrderMoments();
@@ -1003,7 +994,6 @@ private:
     bool doCheckPoint{ false };
     bool readGeo{ false };
     bool isGeo;
-    bool isProp;
     bool isCp;
     bool GeometryValues{ false };
     bool is2ndOrderMoments{ false };
@@ -1060,7 +1050,7 @@ private:
     std::string pressBcPos, pressBcQs, pressBcValue;
     std::string geomBoundaryBcQs, velBcQs;
     std::string geomBoundaryBcValues, velBcValues, pressBcValues, noSlipBcValues;
-    std::string propellerCylinder, propellerValues, propellerQs, measurePoints;
+    std::string measurePoints;
     std::string inletBcQs, inletBcValues;
     std::string outletBcQs, outletBcValues;
     std::string topBcQs, topBcValues;
diff --git a/src/gpu/core/Parameter/ParameterTest.cpp b/src/gpu/core/Parameter/ParameterTest.cpp
index 6210c510b84bcbe0c90987a2e463eafa94eb4311..a73233d4315ebbf677be49f260646ccb2dae3955 100644
--- a/src/gpu/core/Parameter/ParameterTest.cpp
+++ b/src/gpu/core/Parameter/ParameterTest.cpp
@@ -10,8 +10,8 @@
 #include "basics/config/ConfigurationFile.h"
 
 #include "DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
-#include "Factories/BoundaryConditionFactory.h"
-#include "Factories/GridScalingFactory.h"
+#include "GridScaling/GridScalingFactory.h"
+#include "BoundaryConditions/BoundaryConditionFactory.h"
 #include "GPU/CudaMemoryManager.h"
 #include "gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h"
 #include "gpu/core/Kernel/KernelTypes.h"
diff --git a/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarm.cu b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarm.cu
new file mode 100644
index 0000000000000000000000000000000000000000..ee72fb189c6a7a41b3cdd991599e9485f60682cc
--- /dev/null
+++ b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarm.cu
@@ -0,0 +1,467 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 ActuatorFarm.cu
+//! \ingroup PreCollisionInteractor
+//! \author Henrik Asmuth, Henry Korb
+//======================================================================================
+#include "ActuatorFarm.h"
+#include "ActuatorFarmInlines.h"
+
+#include <cuda.h>
+#include <cuda_runtime.h>
+#include <helper_cuda.h>
+
+#include <basics/constants/NumericConstants.h>
+#include <basics/writer/WbWriterVtkXmlBinary.h>
+#include <cuda_helper/CudaGrid.h>
+#include <logger/Logger.h>
+
+#include "DataStructureInitializer/GridProvider.h"
+#include "GPU/CudaMemoryManager.h"
+#include "GPU/GeometryUtils.h"
+#include "LBM/GPUHelperFunctions/KernelUtilities.h"
+#include "Parameter/CudaStreamManager.h"
+#include "Parameter/Parameter.h"
+
+using namespace vf::basics::constant;
+
+struct GridData
+{
+    const uint* indices;
+    const uint nIndices;
+    const real *coordsX, *coordsY, *coordsZ;
+    const uint *neighborsX, *neighborsY, *neighborsZ, *neighborsWSB;
+    const real *vx, *vy, *vz;
+    real *fx, *fy, *fz;
+    const real inverseDeltaX, velocityRatio;
+};
+
+struct TurbineData
+{
+    const real *posX, *posY, *posZ;
+    const uint numberOfTurbines;
+    const real smearingWidth, factorGaussian;
+};
+
+struct ComponentData
+{
+    const real referenceLength;
+    const uint numberOfNodesPerTurbine;
+    const real *coordsX, *coordsY, *coordsZ;
+    real *velocitiesX, *velocitiesY, *velocitiesZ;
+    const real *forcesX, *forcesY, *forcesZ;
+    uint* gridIndices;
+};
+
+__global__ void interpolateVelocities(const GridData gridData, const TurbineData turbineData, ComponentData componentData)
+{
+    const unsigned nodeIndex = vf::gpu::getNodeIndex();
+
+    if (nodeIndex >= componentData.numberOfNodesPerTurbine * turbineData.numberOfTurbines)
+        return;
+
+    const real coordX = componentData.coordsX[nodeIndex];
+    const real coordY = componentData.coordsY[nodeIndex];
+    const real coordZ = componentData.coordsZ[nodeIndex];
+
+    uint k, ke, kn, kt;
+    uint kne, kte, ktn, ktne;
+
+    k = findNearestCellBSW(componentData.gridIndices[nodeIndex],
+                           gridData.coordsX, gridData.coordsY, gridData.coordsZ,
+                           coordX, coordY, coordZ,
+                           gridData.neighborsX, gridData.neighborsY, gridData.neighborsZ, gridData.neighborsWSB);
+
+    componentData.gridIndices[nodeIndex] = k;
+
+    getNeighborIndicesOfBSW(k, ke, kn, kt, kne, kte, ktn, ktne, gridData.neighborsX, gridData.neighborsY,
+                            gridData.neighborsZ);
+
+    real dW, dE, dN, dS, dT, dB;
+
+    const real distX = gridData.inverseDeltaX * (coordX - gridData.coordsX[k]);
+    const real distY = gridData.inverseDeltaX * (coordY - gridData.coordsY[k]);
+    const real distZ = gridData.inverseDeltaX * (coordZ - gridData.coordsZ[k]);
+
+    getInterpolationWeights(dW, dE, dN, dS, dT, dB, distX, distY, distZ);
+
+    componentData.velocitiesX[nodeIndex] =
+        trilinearInterpolation(dW, dE, dN, dS, dT, dB, k, ke, kn, kt, kne, kte, ktn, ktne, gridData.vx) *
+        gridData.velocityRatio;
+    componentData.velocitiesY[nodeIndex] =
+        trilinearInterpolation(dW, dE, dN, dS, dT, dB, k, ke, kn, kt, kne, kte, ktn, ktne, gridData.vy) *
+        gridData.velocityRatio;
+    componentData.velocitiesZ[nodeIndex] =
+        trilinearInterpolation(dW, dE, dN, dS, dT, dB, k, ke, kn, kt, kne, kte, ktn, ktne, gridData.vz) *
+        gridData.velocityRatio;
+}
+
+__global__ void applyBodyForces(GridData gridData, const TurbineData turbineData, const ComponentData componentData)
+{
+
+    const uint index = vf::gpu::getNodeIndex();
+
+    if (index >= gridData.nIndices)
+        return;
+
+    const uint gridIndex = gridData.indices[index];
+    const real gridCoordX = gridData.coordsX[gridIndex];
+    const real gridCoordY = gridData.coordsY[gridIndex];
+    const real gridCoordZ = gridData.coordsZ[gridIndex];
+
+    real gridForceX = c0o1;
+    real gridForceY = c0o1;
+    real gridForceZ = c0o1;
+
+    for (uint turbine = 0; turbine < turbineData.numberOfTurbines; turbine++) {
+        const real distToHubX = gridCoordX - turbineData.posX[turbine];
+        const real distToHubY = gridCoordY - turbineData.posY[turbine];
+        const real distToHubZ = gridCoordZ - turbineData.posZ[turbine];
+
+        if (!inBoundingSphere(distToHubX, distToHubY, distToHubZ, componentData.referenceLength, turbineData.smearingWidth))
+            continue;
+
+        for (uint turbineNode = 0; turbineNode < componentData.numberOfNodesPerTurbine; turbineNode++) {
+            const uint node = turbine * componentData.numberOfNodesPerTurbine + turbineNode;
+
+            const real distX = componentData.coordsX[node] - gridCoordX;
+            const real distY = componentData.coordsY[node] - gridCoordY;
+            const real distZ = componentData.coordsZ[node] - gridCoordZ;
+
+            const real eta = gaussianSmearing(distX, distY, distZ, turbineData.smearingWidth, turbineData.factorGaussian);
+            gridForceX += componentData.forcesX[node] * eta;
+            gridForceY += componentData.forcesY[node] * eta;
+            gridForceZ += componentData.forcesZ[node] * eta;
+        }
+    }
+    gridData.fx[gridIndex] += gridForceX;
+    gridData.fy[gridIndex] += gridForceY;
+    gridData.fz[gridIndex] += gridForceZ;
+}
+
+void ActuatorFarm::init(Parameter* para, GridProvider* gridProvider, CudaMemoryManager* cudaManager)
+{
+    if (!para->getIsBodyForce())
+        throw std::runtime_error("try to allocate ActuatorFarm but BodyForce is not set in Parameter.");
+    this->forceRatio = para->getForceRatio();
+    this->initTurbineGeometries(cudaManager);
+    this->initBladeCoords(cudaManager);
+    this->initBladeIndices(cudaManager);
+    this->initBladeVelocities(cudaManager);
+    this->initBladeForces(cudaManager);
+    this->initBoundingSpheres(para, cudaManager);
+    this->streamIndex = para->getStreamManager()->registerAndLaunchStream(CudaStreamIndex::ActuatorFarm);
+}
+
+void ActuatorFarm::interact(Parameter* para, CudaMemoryManager* cudaManager, int level, unsigned int t)
+{
+    if (level != this->level)
+        return;
+
+    cudaStream_t stream = para->getStreamManager()->getStream(CudaStreamIndex::ActuatorFarm, this->streamIndex);
+
+    if (useHostArrays)
+        cudaManager->cudaCopyBladeCoordsHtoD(this);
+
+    if (this->writeOutput && ((t - this->tStartOut) % this->tOut == 0)) {
+        if (!useHostArrays) {
+            cudaManager->cudaCopyBladeCoordsDtoH(this);
+            cudaManager->cudaCopyBladeVelocitiesDtoH(this);
+            cudaManager->cudaCopyBladeForcesDtoH(this);
+        }
+        this->write(this->getFilename(para, t));
+    }
+
+    const GridData gridData {
+        this->boundingSphereIndicesD, this->numberOfIndices,
+        para->getParD(this->level)->coordinateX, para->getParD(this->level)->coordinateY, para->getParD(this->level)->coordinateZ,
+        para->getParD(this->level)->neighborX, para->getParD(this->level)->neighborY, para->getParD(this->level)->neighborZ, para->getParD(this->level)->neighborInverse,
+        para->getParD(this->level)->velocityX, para->getParD(this->level)->velocityY, para->getParD(this->level)->velocityZ,
+        para->getParD(this->level)->forceX_SP,para->getParD(this->level)->forceY_SP,para->getParD(this->level)->forceZ_SP,
+        this->invDeltaX, para->getVelocityRatio()};
+
+    const TurbineData turbineData {
+        this->turbinePosXD, this->turbinePosYD, this->turbinePosZD,
+        this->numberOfTurbines,
+        this->smearingWidth, this->factorGaussian};
+    
+    const ComponentData bladeData {
+        this->diameter, this->numberOfNodesPerTurbine,
+        this->bladeCoordsXDCurrentTimestep, this->bladeCoordsYDCurrentTimestep, this->bladeCoordsZDCurrentTimestep, 
+        this->bladeVelocitiesXDCurrentTimestep, this->bladeVelocitiesYDCurrentTimestep, this->bladeVelocitiesZDCurrentTimestep, 
+        this->bladeForcesXDCurrentTimestep, this->bladeForcesYDCurrentTimestep, this->bladeForcesZDCurrentTimestep,
+        this->bladeIndicesD};
+
+    vf::cuda::CudaGrid bladeGrid = vf::cuda::CudaGrid(para->getParH(level)->numberofthreads, this->numberOfGridNodes);
+    interpolateVelocities<<<bladeGrid.grid, bladeGrid.threads, 0, stream>>>(gridData, turbineData, bladeData);
+    cudaStreamSynchronize(stream);
+
+    if (useHostArrays)
+        cudaManager->cudaCopyBladeVelocitiesDtoH(this);
+
+    this->updateForcesAndCoordinates();
+    this->swapDeviceArrays();
+
+    if (useHostArrays)
+        cudaManager->cudaCopyBladeForcesHtoD(this);
+
+    vf::cuda::CudaGrid sphereGrid = vf::cuda::CudaGrid(para->getParH(level)->numberofthreads, this->numberOfIndices);
+
+    applyBodyForces<<<sphereGrid.grid, sphereGrid.threads, 0, stream>>>(gridData, turbineData, bladeData);
+    cudaStreamSynchronize(stream);
+}
+
+void ActuatorFarm::free(Parameter* para, CudaMemoryManager* cudaManager)
+{
+    cudaManager->cudaFreeBladeGeometries(this);
+    cudaManager->cudaFreeBladeCoords(this);
+    cudaManager->cudaFreeBladeVelocities(this);
+    cudaManager->cudaFreeBladeForces(this);
+    cudaManager->cudaFreeBladeIndices(this);
+    cudaManager->cudaFreeSphereIndices(this);
+}
+
+void ActuatorFarm::getTaggedFluidNodes(Parameter* para, GridProvider* gridProvider)
+{
+    std::vector<uint> indicesInSphere(this->boundingSphereIndicesH, this->boundingSphereIndicesH + this->numberOfIndices);
+    gridProvider->tagFluidNodeIndices(indicesInSphere, CollisionTemplate::AllFeatures, this->level);
+}
+
+void ActuatorFarm::initTurbineGeometries(CudaMemoryManager* cudaManager)
+{
+    this->numberOfGridNodes = this->numberOfTurbines * this->numberOfNodesPerTurbine;
+
+    cudaManager->cudaAllocBladeGeometries(this);
+
+    std::copy(initialTurbinePositionsX.begin(), initialTurbinePositionsX.end(), turbinePosXH);
+    std::copy(initialTurbinePositionsY.begin(), initialTurbinePositionsY.end(), turbinePosYH);
+    std::copy(initialTurbinePositionsZ.begin(), initialTurbinePositionsZ.end(), turbinePosZH);
+
+    cudaManager->cudaCopyBladeGeometriesHtoD(this);
+
+    this->factorGaussian = pow(this->smearingWidth * sqrt(cPi), -c3o1) / this->forceRatio;
+}
+
+void ActuatorFarm::initBladeCoords(CudaMemoryManager* cudaManager)
+{
+    cudaManager->cudaAllocBladeCoords(this);
+
+    for (uint turbine = 0; turbine < this->numberOfTurbines; turbine++) {
+        for (uint blade = 0; blade < ActuatorFarm::numberOfBlades; blade++) {
+            const real local_azimuth = this->azimuths[turbine] + blade * c2Pi / ActuatorFarm::numberOfBlades;
+
+            for (uint bladeNode = 0; bladeNode < this->numberOfNodesPerBlade; bladeNode++) {
+                const uint node = calcNodeIndexInBladeArrays({ turbine, blade, bladeNode }, this->numberOfNodesPerBlade,
+                                                             ActuatorFarm::numberOfBlades);
+
+                real x, y, z;
+                rotateFromBladeToGlobal(c0o1, c0o1, this->bladeRadii[bladeNode], x, y, z, local_azimuth);
+                bladeCoordsXH[node] = x + this->turbinePosXH[turbine];
+                bladeCoordsYH[node] = y + this->turbinePosYH[turbine];
+                bladeCoordsZH[node] = z + this->turbinePosZH[turbine];
+            }
+        }
+    }
+    cudaManager->cudaCopyBladeCoordsHtoD(this);
+    swapArrays(this->bladeCoordsXDCurrentTimestep, this->bladeCoordsXDPreviousTimestep);
+    swapArrays(this->bladeCoordsYDCurrentTimestep, this->bladeCoordsYDPreviousTimestep);
+    swapArrays(this->bladeCoordsZDCurrentTimestep, this->bladeCoordsZDPreviousTimestep);
+    cudaManager->cudaCopyBladeCoordsHtoD(this);
+}
+
+void ActuatorFarm::initBladeVelocities(CudaMemoryManager* cudaManager)
+{
+    cudaManager->cudaAllocBladeVelocities(this);
+
+    std::fill_n(this->bladeVelocitiesXH, this->numberOfGridNodes, c0o1);
+    std::fill_n(this->bladeVelocitiesYH, this->numberOfGridNodes, c0o1);
+    std::fill_n(this->bladeVelocitiesZH, this->numberOfGridNodes, c0o1);
+
+    cudaManager->cudaCopyBladeVelocitiesHtoD(this);
+    swapArrays(this->bladeVelocitiesXDCurrentTimestep, this->bladeVelocitiesXDPreviousTimestep);
+    swapArrays(this->bladeVelocitiesYDCurrentTimestep, this->bladeVelocitiesYDPreviousTimestep);
+    swapArrays(this->bladeVelocitiesZDCurrentTimestep, this->bladeVelocitiesZDPreviousTimestep);
+    cudaManager->cudaCopyBladeVelocitiesHtoD(this);
+}
+
+void ActuatorFarm::initBladeForces(CudaMemoryManager* cudaManager)
+{
+    cudaManager->cudaAllocBladeForces(this);
+
+    std::fill_n(this->bladeForcesXH, this->numberOfGridNodes, c0o1);
+    std::fill_n(this->bladeForcesYH, this->numberOfGridNodes, c0o1);
+    std::fill_n(this->bladeForcesZH, this->numberOfGridNodes, c0o1);
+
+    cudaManager->cudaCopyBladeForcesHtoD(this);
+    swapArrays(this->bladeForcesXDCurrentTimestep, this->bladeForcesXDPreviousTimestep);
+    swapArrays(this->bladeForcesYDCurrentTimestep, this->bladeForcesYDPreviousTimestep);
+    swapArrays(this->bladeForcesZDCurrentTimestep, this->bladeForcesZDPreviousTimestep);
+    cudaManager->cudaCopyBladeForcesHtoD(this);
+}
+
+void ActuatorFarm::initBladeIndices(CudaMemoryManager* cudaManager)
+{
+    cudaManager->cudaAllocBladeIndices(this);
+
+    std::fill_n(this->bladeIndicesH, this->numberOfGridNodes, 1);
+
+    cudaManager->cudaCopyBladeIndicesHtoD(this);
+}
+
+void ActuatorFarm::initBoundingSpheres(Parameter* para, CudaMemoryManager* cudaManager)
+{
+    std::vector<int> nodesInSpheres;
+    const real sphereRadius = getBoundingSphereRadius(this->diameter, this->smearingWidth);
+    const real sphereRadiusSqrd = sphereRadius * sphereRadius;
+    const uint minimumNumberOfNodesPerSphere =
+        (uint)(c4o3 * cPi * pow(sphereRadius - this->deltaX, c3o1) / pow(this->deltaX, c3o1));
+
+    for (uint turbine = 0; turbine < this->numberOfTurbines; turbine++) {
+
+        const real posX = this->turbinePosXH[turbine];
+        const real posY = this->turbinePosYH[turbine];
+        const real posZ = this->turbinePosZH[turbine];
+
+        uint nodesInThisSphere = 0;
+
+        for (size_t pos = 1; pos <= para->getParH(this->level)->numberOfNodes; pos++) {
+            const real distX = para->getParH(this->level)->coordinateX[pos] - posX;
+            const real distY = para->getParH(this->level)->coordinateY[pos] - posY;
+            const real distZ = para->getParH(this->level)->coordinateZ[pos] - posZ;
+            if (distSqrd(distX, distY, distZ) < sphereRadiusSqrd) {
+                nodesInSpheres.push_back((int)pos);
+                nodesInThisSphere++;
+            }
+        }
+
+        if (nodesInThisSphere < minimumNumberOfNodesPerSphere) {
+            VF_LOG_CRITICAL("Found only {} nodes in bounding sphere of turbine no. {}, expected at least {}!",
+                            nodesInThisSphere, turbine, minimumNumberOfNodesPerSphere);
+            throw std::runtime_error("ActuatorFarm::initBoundingSpheres: Turbine bounding sphere partially out of domain.");
+        }
+    }
+
+    this->numberOfIndices = uint(nodesInSpheres.size());
+
+    cudaManager->cudaAllocSphereIndices(this);
+    std::copy(nodesInSpheres.begin(), nodesInSpheres.end(), this->boundingSphereIndicesH);
+    cudaManager->cudaCopySphereIndicesHtoD(this);
+}
+
+void ActuatorFarm::setAllBladeCoords(const real* _bladeCoordsX, const real* _bladeCoordsY, const real* _bladeCoordsZ)
+{
+    std::copy_n(_bladeCoordsX, this->numberOfGridNodes, this->bladeCoordsXH);
+    std::copy_n(_bladeCoordsY, this->numberOfGridNodes, this->bladeCoordsYH);
+    std::copy_n(_bladeCoordsZ, this->numberOfGridNodes, this->bladeCoordsZH);
+}
+
+void ActuatorFarm::setAllBladeVelocities(const real* _bladeVelocitiesX, const real* _bladeVelocitiesY,
+                                         const real* _bladeVelocitiesZ)
+{
+    std::copy_n(_bladeVelocitiesX, this->numberOfGridNodes, this->bladeVelocitiesXH);
+    std::copy_n(_bladeVelocitiesY, this->numberOfGridNodes, this->bladeVelocitiesYH);
+    std::copy_n(_bladeVelocitiesZ, this->numberOfGridNodes, this->bladeVelocitiesZH);
+}
+
+void ActuatorFarm::setAllBladeForces(const real* _bladeForcesX, const real* _bladeForcesY, const real* _bladeForcesZ)
+{
+    std::copy_n(_bladeForcesX, this->numberOfGridNodes, this->bladeForcesXH);
+    std::copy_n(_bladeForcesY, this->numberOfGridNodes, this->bladeForcesYH);
+    std::copy_n(_bladeForcesZ, this->numberOfGridNodes, this->bladeForcesZH);
+}
+
+void ActuatorFarm::setTurbineBladeCoords(uint turbine, const real* _bladeCoordsX, const real* _bladeCoordsY,
+                                         const real* _bladeCoordsZ)
+{
+    std::copy_n(_bladeCoordsX, this->numberOfNodesPerTurbine, &this->bladeCoordsXH[turbine * this->numberOfNodesPerTurbine]);
+    std::copy_n(_bladeCoordsY, this->numberOfNodesPerTurbine, &this->bladeCoordsYH[turbine * this->numberOfNodesPerTurbine]);
+    std::copy_n(_bladeCoordsZ, this->numberOfNodesPerTurbine, &this->bladeCoordsZH[turbine * this->numberOfNodesPerTurbine]);
+}
+
+void ActuatorFarm::setTurbineBladeVelocities(uint turbine, const real* _bladeVelocitiesX, const real* _bladeVelocitiesY,
+                                             const real* _bladeVelocitiesZ)
+{
+    std::copy_n(_bladeVelocitiesX, this->numberOfNodesPerTurbine, &this->bladeVelocitiesXH[turbine * this->numberOfNodesPerTurbine]);
+    std::copy_n(_bladeVelocitiesY, this->numberOfNodesPerTurbine, &this->bladeVelocitiesYH[turbine * this->numberOfNodesPerTurbine]);
+    std::copy_n(_bladeVelocitiesZ, this->numberOfNodesPerTurbine, &this->bladeVelocitiesZH[turbine * this->numberOfNodesPerTurbine]);
+}
+
+void ActuatorFarm::setTurbineBladeForces(uint turbine, const real* _bladeForcesX, const real* _bladeForcesY,
+                                         const real* _bladeForcesZ)
+{
+    std::copy_n(_bladeForcesX, this->numberOfNodesPerTurbine, &this->bladeForcesXH[turbine * this->numberOfNodesPerTurbine]);
+    std::copy_n(_bladeForcesY, this->numberOfNodesPerTurbine, &this->bladeForcesYH[turbine * this->numberOfNodesPerTurbine]);
+    std::copy_n(_bladeForcesZ, this->numberOfNodesPerTurbine, &this->bladeForcesZH[turbine * this->numberOfNodesPerTurbine]);
+}
+
+void ActuatorFarm::swapDeviceArrays()
+{
+    swapArrays(this->bladeCoordsXDPreviousTimestep, this->bladeCoordsXDCurrentTimestep);
+    swapArrays(this->bladeCoordsYDPreviousTimestep, this->bladeCoordsYDCurrentTimestep);
+    swapArrays(this->bladeCoordsZDPreviousTimestep, this->bladeCoordsZDCurrentTimestep);
+
+    swapArrays(this->bladeVelocitiesXDPreviousTimestep, this->bladeVelocitiesXDCurrentTimestep);
+    swapArrays(this->bladeVelocitiesYDPreviousTimestep, this->bladeVelocitiesYDCurrentTimestep);
+    swapArrays(this->bladeVelocitiesZDPreviousTimestep, this->bladeVelocitiesZDCurrentTimestep);
+
+    swapArrays(this->bladeForcesXDPreviousTimestep, this->bladeForcesXDCurrentTimestep);
+    swapArrays(this->bladeForcesYDPreviousTimestep, this->bladeForcesYDCurrentTimestep);
+    swapArrays(this->bladeForcesZDPreviousTimestep, this->bladeForcesZDCurrentTimestep);
+}
+
+std::string ActuatorFarm::getFilename(Parameter* para, uint t) const
+{
+    return para->getOutputPath() + this->outputName + "_t_" + std::to_string(t);
+}
+
+void ActuatorFarm::write(const std::string& filename) const
+{
+    std::vector<std::string> dataNames = {
+        "bladeVelocitiesX",
+        "bladeVelocitiesY",
+        "bladeVelocitiesZ",
+        "bladeForcesX",
+        "bladeForcesY",
+        "bladeForcesZ",
+    };
+    std::vector<UbTupleFloat3> nodes(numberOfGridNodes);
+    std::vector<std::vector<double>> nodeData(6);
+    for (auto& data : nodeData)
+        data.resize(numberOfGridNodes);
+    for (uint i = 0; i < numberOfGridNodes; i++) {
+        nodes[i] = UbTupleFloat3(this->bladeCoordsXH[i], this->bladeCoordsYH[i], this->bladeCoordsZH[i]);
+        nodeData[0][i] = this->bladeVelocitiesXH[i];
+        nodeData[1][i] = this->bladeVelocitiesYH[i];
+        nodeData[2][i] = this->bladeVelocitiesZH[i];
+        nodeData[3][i] = this->bladeForcesXH[i];
+        nodeData[4][i] = this->bladeForcesYH[i];
+        nodeData[5][i] = this->bladeForcesZH[i];
+    }
+    WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filename, nodes, dataNames, nodeData);
+}
diff --git a/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarm.h b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarm.h
new file mode 100644
index 0000000000000000000000000000000000000000..d89be8fffaed41ff472550fe4fb83b4e23295c2e
--- /dev/null
+++ b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarm.h
@@ -0,0 +1,189 @@
+#ifndef ActuatorFarm_H
+#define ActuatorFarm_H
+
+#include "PreCollisionInteractor/PreCollisionInteractor.h"
+#include <basics/DataTypes.h>
+#include <basics/constants/NumericConstants.h>
+#include <stdexcept>
+
+class Parameter;
+class GridProvider;
+using namespace vf::basics::constant;
+
+class ActuatorFarm : public PreCollisionInteractor
+{
+public:
+    ActuatorFarm(
+        const real diameter,
+        const std::vector<real> bladeRadii,
+        const std::vector<real> turbinePositionsX,
+        const std::vector<real> turbinePositionsY,
+        const std::vector<real> turbinePositionsZ,
+        const real density,
+        const real smearingWidth,
+        const int level,
+        const real deltaT,
+        const real deltaX,
+        const bool useHostArrays
+    ) :
+        diameter(diameter),
+        bladeRadii(bladeRadii),
+        numberOfNodesPerBlade(static_cast<uint>(bladeRadii.size())),
+        numberOfNodesPerTurbine(numberOfNodesPerBlade*numberOfBlades),
+        numberOfTurbines(static_cast<uint>(turbinePositionsX.size())),
+        initialTurbinePositionsX(turbinePositionsX),
+        initialTurbinePositionsY(turbinePositionsY),
+        initialTurbinePositionsZ(turbinePositionsZ),
+        density(density),
+        smearingWidth(smearingWidth),
+        level(level),
+        useHostArrays(useHostArrays),
+        deltaT(deltaT*exp2(-level)),
+        deltaX(deltaX*exp2(-level)),
+        invDeltaX(c1o1/deltaX)
+    {
+        if(this->smearingWidth < this->deltaX)
+            throw std::runtime_error("ActuatorFarm::ActuatorFarm: smearing width needs to be larger than dx!");
+        if(numberOfTurbines != turbinePositionsY.size() || numberOfTurbines != turbinePositionsZ.size())
+            throw std::runtime_error("ActuatorFarm::ActuatorFarm: turbine positions need to have the same length!");
+        azimuths = std::vector<real>(numberOfTurbines, 0.0);
+    }
+
+    ~ActuatorFarm() override = default;
+    void init(Parameter* para, GridProvider* gridProvider, CudaMemoryManager* cudaManager) override;
+    void interact(Parameter* para, CudaMemoryManager* cudaManager, int level, uint t) override;
+    void free(Parameter* para, CudaMemoryManager* cudaManager) override;
+    void getTaggedFluidNodes(Parameter *para, GridProvider* gridProvider) override;
+
+    void enableOutput(const std::string outputName, uint tStart, uint tOut) {
+        this->outputName = outputName;
+        this->writeOutput = true;
+        this->tStartOut = tStart;
+        this->tOut = tOut;
+    }
+
+    void write(const std::string& filename) const;
+
+    real getDensity() const { return this->density; };
+    real getDeltaT() const { return this->deltaT; };
+    real getDeltaX() const { return this->deltaX; };
+
+    uint getNumberOfTurbines() const { return this->numberOfTurbines; };
+    uint getNumberOfNodesPerTurbine() const { return this->numberOfNodesPerTurbine; };
+    uint getNumberOfNodesPerBlade() const { return this->numberOfNodesPerBlade; };
+    uint getNumberOfBladesPerTurbine() const { return ActuatorFarm::numberOfBlades; };
+
+    uint getNumberOfIndices() const { return this->numberOfIndices; };
+    uint getNumberOfGridNodes() const { return this->numberOfGridNodes; };
+
+    real* getAllTurbinePosX() const { return turbinePosXH; };
+    real* getAllTurbinePosY() const { return turbinePosYH; };
+    real* getAllTurbinePosZ() const { return turbinePosZH; };
+
+    real getTurbinePosX(uint turbine) const { return turbinePosXH[turbine]; };
+    real getTurbinePosY(uint turbine) const { return turbinePosYH[turbine]; };
+    real getTurbinePosZ(uint turbine) const { return turbinePosZH[turbine]; };
+
+    real* getAllBladeCoordsX() const { return this->bladeCoordsXH; };
+    real* getAllBladeCoordsY() const { return this->bladeCoordsYH; };
+    real* getAllBladeCoordsZ() const { return this->bladeCoordsZH; };
+    real* getAllBladeVelocitiesX() const { return this->bladeVelocitiesXH; };
+    real* getAllBladeVelocitiesY() const { return this->bladeVelocitiesYH; };
+    real* getAllBladeVelocitiesZ() const { return this->bladeVelocitiesZH; };
+    real* getAllBladeForcesX() const { return this->bladeForcesXH; };
+    real* getAllBladeForcesY() const { return this->bladeForcesYH; };
+    real* getAllBladeForcesZ() const { return this->bladeForcesZH; };
+
+    real* getTurbineBladeCoordsX(uint turbine) const { return &this->bladeCoordsXH[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeCoordsY(uint turbine) const { return &this->bladeCoordsYH[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeCoordsZ(uint turbine) const { return &this->bladeCoordsZH[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeVelocitiesX(uint turbine) const { return &this->bladeVelocitiesXH[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeVelocitiesY(uint turbine) const { return &this->bladeVelocitiesYH[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeVelocitiesZ(uint turbine) const { return &this->bladeVelocitiesZH[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeForcesX(uint turbine) const { return &this->bladeForcesXH[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeForcesY(uint turbine) const { return &this->bladeForcesYH[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeForcesZ(uint turbine) const { return &this->bladeForcesZH[turbine*numberOfNodesPerTurbine]; };
+
+    real* getAllBladeCoordsXDevice() const { return this->bladeCoordsXDCurrentTimestep; };
+    real* getAllBladeCoordsYDevice() const { return this->bladeCoordsYDCurrentTimestep; };
+    real* getAllBladeCoordsZDevice() const { return this->bladeCoordsZDCurrentTimestep; };
+    real* getAllBladeVelocitiesXDevice() const { return this->bladeVelocitiesXDCurrentTimestep; };
+    real* getAllBladeVelocitiesYDevice() const { return this->bladeVelocitiesYDCurrentTimestep; };
+    real* getAllBladeVelocitiesZDevice() const { return this->bladeVelocitiesZDCurrentTimestep; };
+    real* getAllBladeForcesXDevice() const { return this->bladeForcesXDCurrentTimestep; };
+    real* getAllBladeForcesYDevice() const { return this->bladeForcesYDCurrentTimestep; };
+    real* getAllBladeForcesZDevice() const { return this->bladeForcesZDCurrentTimestep; };
+
+    real* getTurbineBladeCoordsXDevice(uint turbine) const { return &this->bladeCoordsXDCurrentTimestep[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeCoordsYDevice(uint turbine) const { return &this->bladeCoordsYDCurrentTimestep[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeCoordsZDevice(uint turbine) const { return &this->bladeCoordsZDCurrentTimestep[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeVelocitiesXDevice(uint turbine) const { return &this->bladeVelocitiesXDCurrentTimestep[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeVelocitiesYDevice(uint turbine) const { return &this->bladeVelocitiesYDCurrentTimestep[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeVelocitiesZDevice(uint turbine) const { return &this->bladeVelocitiesZDCurrentTimestep[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeForcesXDevice(uint turbine) const { return &this->bladeForcesXDCurrentTimestep[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeForcesYDevice(uint turbine) const { return &this->bladeForcesYDCurrentTimestep[turbine*numberOfNodesPerTurbine]; };
+    real* getTurbineBladeForcesZDevice(uint turbine) const { return &this->bladeForcesZDCurrentTimestep[turbine*numberOfNodesPerTurbine]; };
+
+    void setAllBladeCoords(const real* _bladeCoordsX, const real* _bladeCoordsY, const real* _bladeCoordsZ);
+    void setAllBladeVelocities(const real* _bladeVelocitiesX, const real* _bladeVelocitiesY, const real* _bladeVelocitiesZ);
+    void setAllBladeForces(const real* _bladeForcesX, const real* _bladeForcesY, const real* _bladeForcesZ);
+
+    void setTurbineBladeCoords(uint turbine, const real* _bladeCoordsX, const real* _bladeCoordsY, const real* _bladeCoordsZ);
+    void setTurbineBladeVelocities(uint turbine, const real* _bladeVelocitiesX, const real* _bladeVelocitiesY, const real* _bladeVelocitiesZ);
+    void setTurbineBladeForces(uint turbine, const real* _bladeForcesX, const real* _bladeForcesY, const real* _bladeForcesZ);
+
+    void setTurbineAzimuth(uint turbine, real azimuth){azimuths[turbine] = azimuth;}
+
+    virtual void updateForcesAndCoordinates()=0;
+
+private:
+    void initTurbineGeometries(CudaMemoryManager* cudaManager);
+    void initBoundingSpheres(Parameter* para, CudaMemoryManager* cudaManager);
+    void initBladeCoords(CudaMemoryManager* cudaManager);
+    void initBladeVelocities(CudaMemoryManager* cudaManager);
+    void initBladeForces(CudaMemoryManager* cudaManager);
+    void initBladeIndices(CudaMemoryManager* cudaManager);
+    std::string getFilename(Parameter* para, uint t) const;
+    void swapDeviceArrays();
+
+public:
+    real* bladeCoordsXH, * bladeCoordsYH, * bladeCoordsZH;
+    real* bladeCoordsXDPreviousTimestep, * bladeCoordsYDPreviousTimestep, * bladeCoordsZDPreviousTimestep;
+    real* bladeCoordsXDCurrentTimestep, * bladeCoordsYDCurrentTimestep, * bladeCoordsZDCurrentTimestep;    
+    real* bladeVelocitiesXH, * bladeVelocitiesYH, * bladeVelocitiesZH;
+    real* bladeVelocitiesXDPreviousTimestep, * bladeVelocitiesYDPreviousTimestep, * bladeVelocitiesZDPreviousTimestep;
+    real* bladeVelocitiesXDCurrentTimestep, * bladeVelocitiesYDCurrentTimestep, * bladeVelocitiesZDCurrentTimestep;
+    real* bladeForcesXH, * bladeForcesYH, * bladeForcesZH;
+    real* bladeForcesXDPreviousTimestep, * bladeForcesYDPreviousTimestep, * bladeForcesZDPreviousTimestep;
+    real* bladeForcesXDCurrentTimestep, * bladeForcesYDCurrentTimestep, * bladeForcesZDCurrentTimestep;
+    uint* bladeIndicesH;
+    uint* bladeIndicesD; 
+    uint* boundingSphereIndicesH;
+    uint* boundingSphereIndicesD;
+    real* turbinePosXH, *turbinePosYH, *turbinePosZH;
+    real* turbinePosXD, *turbinePosYD, *turbinePosZD;
+
+protected:
+    static constexpr uint numberOfBlades{3};
+    std::vector<real> bladeRadii, initialTurbinePositionsX, initialTurbinePositionsY, initialTurbinePositionsZ;
+    std::vector<real> azimuths;
+    const real diameter;
+    const bool useHostArrays;
+    const real density;
+    const real deltaT, deltaX, invDeltaX;
+    const uint numberOfTurbines, numberOfNodesPerBlade, numberOfNodesPerTurbine;
+    const real smearingWidth; // in m
+    const int level;
+    uint numberOfIndices{0};
+    uint numberOfGridNodes{0};
+
+    real forceRatio, factorGaussian;
+    int streamIndex;
+
+    bool writeOutput{false};
+    std::string outputName;
+    uint tOut{0};
+    uint tStartOut{0};
+};
+
+#endif
diff --git a/src/gpu/core/PreCollisionInteractor/ActuatorFarmInlines.h b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmInlines.h
similarity index 64%
rename from src/gpu/core/PreCollisionInteractor/ActuatorFarmInlines.h
rename to src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmInlines.h
index cc151088db963f00d3d39af705c80d22337701c9..943ab708b6158400f236f496b2b42d876adcbaec 100644
--- a/src/gpu/core/PreCollisionInteractor/ActuatorFarmInlines.h
+++ b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmInlines.h
@@ -26,7 +26,7 @@
 //  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 ActuatorFarm.cu
+//! \file ActuatorFarmInlines.cu
 //! \ingroup PreCollisionInteractor
 //! \author Henrik Asmuth, Henry Korb, Anna Wellmann
 //======================================================================================
@@ -34,7 +34,11 @@
 #ifndef ACTUATOR_FARM_INLINES
 #define ACTUATOR_FARM_INLINES
 
-#include "basics/DataTypes.h"
+#include <basics/DataTypes.h>
+#include <basics/constants/NumericConstants.h>
+#include "GPU/GeometryUtils.h"
+
+using namespace vf::basics::constant;
 
 struct TurbineNodeIndex {
     uint turbine;
@@ -57,11 +61,12 @@ __host__ __device__ __inline__ void calcTurbineBladeAndBladeNode(uint node, uint
 {
     // see https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/merge_requests/248 for visualization
     turbine = node / (numberOfNodesPerBlade * numberOfBlades);
-    uint x_off = turbine * numberOfNodesPerBlade * numberOfBlades;
+    const uint x_off = turbine * numberOfNodesPerBlade * numberOfBlades;
     blade = (node - x_off) / numberOfNodesPerBlade;
-    uint y_off = numberOfNodesPerBlade * blade + x_off;
+    const uint y_off = numberOfNodesPerBlade * blade + x_off;
     bladeNode = node - y_off;
 }
+
 __host__ __device__ __inline__ TurbineNodeIndex calcTurbineBladeAndBladeNode(uint node, uint numberOfNodesPerBlade, uint numberOfBlades)
 {
     uint turbine;
@@ -71,4 +76,47 @@ __host__ __device__ __inline__ TurbineNodeIndex calcTurbineBladeAndBladeNode(uin
     return { /*.turbine = */ turbine, /*.blade = */ blade, /*.bladeNode = */ bladeNode }; // Designated initializers are a C++ 20 feature
 }
 
+__host__ __device__ __inline__ void rotateFromBladeToGlobal(
+                            real bladeCoordX_BF, real bladeCoordY_BF, real bladeCoordZ_BF, 
+                            real& bladeCoordX_GF, real& bladeCoordY_GF, real& bladeCoordZ_GF,
+                            real azimuth)
+{
+    rotateAboutX3D(azimuth, bladeCoordX_BF, bladeCoordY_BF, bladeCoordZ_BF, bladeCoordX_GF, bladeCoordY_GF, bladeCoordZ_GF);
+}
+
+__host__ __device__ __inline__ void rotateFromGlobalToBlade(
+                            real& bladeCoordX_BF, real& bladeCoordY_BF, real& bladeCoordZ_BF, 
+                            real bladeCoordX_GF, real bladeCoordY_GF, real bladeCoordZ_GF,
+                            real azimuth)
+{
+    invRotateAboutX3D(azimuth, bladeCoordX_GF, bladeCoordY_GF, bladeCoordZ_GF, bladeCoordX_BF, bladeCoordY_BF, bladeCoordZ_BF);
+}
+__host__ __device__ __inline__ real distSqrd(real distX, real distY, real distZ)
+{
+    return distX * distX + distY * distY + distZ * distZ;
+}
+
+__host__ __device__ __inline__ real getBoundingSphereRadius(real diameter, real smearingWidth)
+{
+    return c1o2 * diameter + c3o2 * smearingWidth;
+}
+
+__host__ __device__ __inline__ bool inBoundingSphere(real distX, real distY, real distZ, real diameter, real smearingWidth)
+{
+    const real boundingSphereRadius = getBoundingSphereRadius(diameter, smearingWidth);
+    return distSqrd(distX, distY, distZ) < boundingSphereRadius * boundingSphereRadius;
+}
+
+__host__ __device__ __inline__ real gaussianSmearing(real distX, real distY, real distZ, real epsilon, real factorGaussian)
+{
+    return factorGaussian * exp(-distSqrd(distX, distY, distZ) / (epsilon * epsilon));
+}
+
+__inline__ void swapArrays(real* &arr1, real* &arr2)
+{
+    real* tmp = arr1;
+    arr1 = arr2;
+    arr2 = tmp;
+}
+
 #endif
diff --git a/src/gpu/core/PreCollisionInteractor/ActuatorFarmInlinesTest.cpp b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmInlinesTest.cpp
similarity index 100%
rename from src/gpu/core/PreCollisionInteractor/ActuatorFarmInlinesTest.cpp
rename to src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmInlinesTest.cpp
diff --git a/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmStandalone.cu b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmStandalone.cu
new file mode 100644
index 0000000000000000000000000000000000000000..6e577d1f06967ccf0e80db9474b9b7c3b8861c50
--- /dev/null
+++ b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmStandalone.cu
@@ -0,0 +1,124 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 ActuatorFarm.cu
+//! \ingroup PreCollisionInteractor
+//! \author Henrik Asmuth, Henry Korb
+//======================================================================================
+#include "ActuatorFarmInlines.h"
+#include "ActuatorFarmStandalone.h"
+
+#include <cuda.h>
+#include <cuda_runtime.h>
+#include <helper_cuda.h>
+
+#include <logger/Logger.h>
+#include <cuda_helper/CudaGrid.h>
+#include <basics/constants/NumericConstants.h>
+#include <basics/writer/WbWriterVtkXmlBinary.h>
+
+#include "GPU/GeometryUtils.h"
+#include "LBM/GPUHelperFunctions/KernelUtilities.h"
+#include "Parameter/Parameter.h"
+#include "Parameter/CudaStreamManager.h"
+#include "DataStructureInitializer/GridProvider.h"
+#include "GPU/CudaMemoryManager.h"
+
+using namespace vf::basics::constant;
+
+std::vector<real> ActuatorFarmStandalone::computeBladeRadii(const real diameter, const uint numberOfNodesPerBlade)
+{
+    const real dr = c1o2 * diameter / numberOfNodesPerBlade;
+    std::vector<real> blade_radii(numberOfNodesPerBlade);
+    for (uint node = 0; node < numberOfNodesPerBlade; node++)
+        blade_radii[node] = dr * (node + 0.5);
+    return blade_radii;
+}
+
+void ActuatorFarmStandalone::updateForcesAndCoordinates()
+{
+    const real lift_coefficient = c1o1;
+    const real drag_coefficient = c0o1;
+    const real c0 = 20 * c1o10;
+    const real delta_azimuth = c2Pi / this->numberOfBlades;
+
+    for (uint turbine = 0; turbine < this->numberOfTurbines; turbine++) {
+        const real rotor_speed = this->rotorSpeeds[turbine];
+        const real azimuth_old = this->azimuths[turbine];
+        const real azimuth_new = azimuth_old + deltaT * rotor_speed;
+        this->azimuths[turbine] = azimuth_new > c2Pi ? azimuth_new - c2Pi : azimuth_new;
+
+        for (uint blade = 0; blade < this->numberOfBlades; blade++) {
+            const real local_azimuth_new = azimuth_new + blade * delta_azimuth;
+
+            real last_node_radius = c0o1;
+            real current_node_radius = c0o1;
+            real next_node_radius = this->bladeRadii[0];
+
+            for (uint bladeNode = 0; bladeNode < this->numberOfNodesPerBlade; bladeNode++) {
+                const uint node = calcNodeIndexInBladeArrays({ turbine, blade, bladeNode }, this->numberOfNodesPerBlade,
+                                                             this->numberOfBlades);
+
+                real u_rel, v_rel, w_rel;
+                rotateFromGlobalToBlade(u_rel, v_rel, w_rel,
+                                        this->bladeVelocitiesXH[node],
+                                        this->bladeVelocitiesYH[node],
+                                        this->bladeVelocitiesZH[node],
+                                        azimuth_old + delta_azimuth);
+
+                last_node_radius = current_node_radius;
+                current_node_radius = next_node_radius;
+                next_node_radius =
+                    bladeNode < this->numberOfNodesPerBlade - 1 ? this->bladeRadii[bladeNode + 1] : this->diameter * c1o2;
+
+                const real dr = c1o2 * (next_node_radius - last_node_radius);
+
+                v_rel += current_node_radius * rotor_speed;
+                const real u_rel_sq = u_rel * u_rel + v_rel * v_rel;
+                const real phi = atan2(u_rel, v_rel);
+
+                const real tmp = c4o1 * current_node_radius / this->diameter - c1o1;
+                const real chord = c0 * sqrt(c1o1 - tmp * tmp);
+                const real normal_coefficient = lift_coefficient * cos(phi) + drag_coefficient * sin(phi);
+                const real tangential_coefficient = lift_coefficient * sin(phi) - drag_coefficient * cos(phi);
+                const real fx = -c1o2 * u_rel_sq * chord * this->density * normal_coefficient * dr;
+                const real fy = -c1o2 * u_rel_sq * chord * this->density * tangential_coefficient * dr;
+
+                rotateFromBladeToGlobal(fx, fy, c0o1,
+                                        this->bladeForcesXH[node], this->bladeForcesYH[node], this->bladeForcesZH[node],
+                                        local_azimuth_new);
+                rotateFromBladeToGlobal(c0o1, c0o1, current_node_radius,
+                                        this->bladeCoordsXH[node], this->bladeCoordsYH[node], this->bladeCoordsZH[node],
+                                        local_azimuth_new);
+                bladeCoordsXH[node] += this->turbinePosXH[turbine];
+                bladeCoordsYH[node] += this->turbinePosYH[turbine];
+                bladeCoordsZH[node] += this->turbinePosZH[turbine];
+            }
+        }
+    }
+}
diff --git a/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmStandalone.h b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmStandalone.h
new file mode 100644
index 0000000000000000000000000000000000000000..78f0ebf67e0cfd60683be7f36f25bf97eb839035
--- /dev/null
+++ b/src/gpu/core/PreCollisionInteractor/Actuator/ActuatorFarmStandalone.h
@@ -0,0 +1,34 @@
+#ifndef ActuatorFarmStandalone_H
+#define ActuatorFarmStandalone_H
+
+#include "ActuatorFarm.h"
+#include "basics/DataTypes.h"
+
+class ActuatorFarmStandalone : public ActuatorFarm
+{
+public:
+    ActuatorFarmStandalone(
+        const real diameter,
+        const uint numberOfNodesPerBlade,
+        const std::vector<real> turbinePositionsX,
+        const std::vector<real> turbinePositionsY,
+        const std::vector<real> turbinePositionsZ,
+        const std::vector<real> rotorSpeeds,
+        const real density,
+        const real smearingWidth,
+        const int level,
+        const real deltaT,
+        const real deltaX
+    ) : rotorSpeeds(rotorSpeeds),
+        ActuatorFarm(diameter, computeBladeRadii(diameter, numberOfNodesPerBlade), turbinePositionsX, turbinePositionsY, turbinePositionsZ, density, smearingWidth, level, deltaT, deltaX, true)
+    {}
+
+    void updateForcesAndCoordinates() override;
+    static std::vector<real> computeBladeRadii(const real diameter, const uint numberOfNodesPerBlade);
+    
+private:
+    std::vector<real> rotorSpeeds;
+
+};
+
+#endif
diff --git a/src/gpu/core/PreCollisionInteractor/ActuatorFarm.cu b/src/gpu/core/PreCollisionInteractor/ActuatorFarm.cu
deleted file mode 100644
index fac6b3cb70c8bb2694f89e886b9192dfeed86782..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreCollisionInteractor/ActuatorFarm.cu
+++ /dev/null
@@ -1,629 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \file ActuatorFarm.cu
-//! \ingroup PreCollisionInteractor
-//! \author Henrik Asmuth, Henry Korb
-//======================================================================================
-#include "ActuatorFarm.h"
-#include "ActuatorFarmInlines.h"
-
-#include <cuda.h>
-#include <cuda_runtime.h>
-#include <helper_cuda.h>
-
-#include <logger/Logger.h>
-#include <cuda_helper/CudaGrid.h>
-#include <basics/constants/NumericConstants.h>
-#include <basics/writer/WbWriterVtkXmlBinary.h>
-
-#include "gpu/core/GPU/GeometryUtils.h"
-#include "LBM/GPUHelperFunctions/KernelUtilities.h"
-#include "Parameter/Parameter.h"
-#include "Parameter/CudaStreamManager.h"
-#include "DataStructureInitializer/GridProvider.h"
-#include "GPU/CudaMemoryManager.h"
-
-using namespace vf::basics::constant;
-
-__host__ __device__ __forceinline__ real distSqrd(real distX, real distY, real distZ)
-{
-    return distX * distX + distY * distY + distZ * distZ;
-}
-
-void swapArrays(real* &arr1, real* &arr2)
-{
-    real* tmp = arr1;
-    arr1 = arr2;
-    arr2 = tmp;
-}
-
-__host__ __device__ __inline__ void rotateFromBladeToGlobal(
-                            real bladeCoordX_BF, real bladeCoordY_BF, real bladeCoordZ_BF, 
-                            real& bladeCoordX_GF, real& bladeCoordY_GF, real& bladeCoordZ_GF,
-                            real azimuth, real yaw)
-{
-    real tmpX, tmpY, tmpZ;
-
-    rotateAboutX3D(azimuth, bladeCoordX_BF, bladeCoordY_BF, bladeCoordZ_BF, tmpX, tmpY, tmpZ);
-    rotateAboutZ3D(yaw, tmpX, tmpY, tmpZ, bladeCoordX_GF, bladeCoordY_GF, bladeCoordZ_GF);
-
-}
-
-__host__ __device__ __inline__ void rotateFromGlobalToBlade(
-                            real& bladeCoordX_BF, real& bladeCoordY_BF, real& bladeCoordZ_BF, 
-                            real bladeCoordX_GF, real bladeCoordY_GF, real bladeCoordZ_GF,
-                            real azimuth, real yaw)
-{
-    real tmpX, tmpY, tmpZ;
-
-    invRotateAboutZ3D(yaw, bladeCoordX_GF, bladeCoordY_GF, bladeCoordZ_GF, tmpX, tmpY, tmpZ);
-    invRotateAboutX3D(azimuth, tmpX, tmpY, tmpZ, bladeCoordX_BF, bladeCoordY_BF, bladeCoordZ_BF);
-}
-
-__host__ __device__ __inline__ void calcCoordinateOfBladeNodeInGridFrameOfReference(uint bladeNodeIndex, uint turbine, real localAzimuth, real yaw,
-                                                                                    const real* bladeCoordsX, const real* bladeCoordsY, const real* bladeCoordsZ,
-                                                                                    const real* turbPosX, const real* turbPosY, const real* turbPosZ,
-                                                                                    real& bladeCoordX_GF, real& bladeCoordY_GF, real& bladeCoordZ_GF)
-{
-
-    const real bladeCoordX_BF = bladeCoordsX[bladeNodeIndex];
-    const real bladeCoordY_BF = bladeCoordsY[bladeNodeIndex];
-    const real bladeCoordZ_BF = bladeCoordsZ[bladeNodeIndex];
-
-    rotateFromBladeToGlobal(bladeCoordX_BF, bladeCoordY_BF, bladeCoordZ_BF, bladeCoordX_GF, bladeCoordY_GF,
-                            bladeCoordZ_GF, localAzimuth, yaw);
-
-    bladeCoordX_GF += turbPosX[turbine];
-    bladeCoordY_GF += turbPosY[turbine];
-    bladeCoordZ_GF += turbPosZ[turbine];
-}
-
-__global__ void interpolateVelocities(real* gridCoordsX, real* gridCoordsY, real* gridCoordsZ,
-                                      uint* neighborsX, uint* neighborsY, uint* neighborsZ, uint* neighborsWSB,
-                                      real* vx, real* vy, real* vz,
-                                      real* bladeCoordsX, real* bladeCoordsY, real* bladeCoordsZ,
-                                      real* bladeVelocitiesX, real* bladeVelocitiesY, real* bladeVelocitiesZ,
-                                      uint numberOfTurbines, uint numberOfBlades, uint numberOfBladeNodes,
-                                      real* azimuths, real* yaws, real* omegas,
-                                      real* turbPosX, real* turbPosY, real* turbPosZ,
-                                      uint* bladeIndices, real velocityRatio, real invDeltaX)
-{
-
-    ////////////////////////////////////////////////////////////////////////////////
-    //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
-    //!
-    const unsigned nodeIndex = vf::gpu::getNodeIndex();
-
-    if (nodeIndex >= numberOfBladeNodes * numberOfBlades * numberOfTurbines) return;
-
-    auto [turbine, blade, bladeNodeIndexOnBlade] = calcTurbineBladeAndBladeNode(nodeIndex, numberOfBladeNodes, numberOfBlades);
-
-    const real localAzimuth = azimuths[turbine] + blade * c2Pi / numberOfBlades;
-    const real yaw = yaws[turbine];
-
-    real bladeCoordX_GF, bladeCoordY_GF, bladeCoordZ_GF;
-    calcCoordinateOfBladeNodeInGridFrameOfReference(nodeIndex, turbine, localAzimuth, yaw,
-                                                    bladeCoordsX, bladeCoordsY, bladeCoordsZ,
-                                                    turbPosX, turbPosY, turbPosZ,
-                                                    bladeCoordX_GF, bladeCoordY_GF, bladeCoordZ_GF);
-
-    uint k, ke, kn, kt;
-    uint kne, kte, ktn, ktne;
-
-    k = findNearestCellBSW(bladeIndices[nodeIndex],
-                           gridCoordsX, gridCoordsY, gridCoordsZ,
-                           bladeCoordX_GF, bladeCoordY_GF, bladeCoordZ_GF,
-                           neighborsX, neighborsY, neighborsZ, neighborsWSB);
-
-    bladeIndices[nodeIndex] = k;
-
-    getNeighborIndicesOfBSW(k, ke, kn, kt, kne, kte, ktn, ktne, neighborsX, neighborsY, neighborsZ);
-
-    real dW, dE, dN, dS, dT, dB;
-
-    real distX = invDeltaX * (bladeCoordX_GF - gridCoordsX[k]);
-    real distY = invDeltaX * (bladeCoordY_GF - gridCoordsY[k]);
-    real distZ = invDeltaX * (bladeCoordZ_GF - gridCoordsZ[k]);
-
-    getInterpolationWeights(dW, dE, dN, dS, dT, dB, distX, distY, distZ);
-
-    real bladeVelX_GF = trilinearInterpolation(dW, dE, dN, dS, dT, dB, k, ke, kn, kt, kne, kte, ktn, ktne, vx) * velocityRatio;
-    real bladeVelY_GF = trilinearInterpolation(dW, dE, dN, dS, dT, dB, k, ke, kn, kt, kne, kte, ktn, ktne, vy) * velocityRatio;
-    real bladeVelZ_GF = trilinearInterpolation(dW, dE, dN, dS, dT, dB, k, ke, kn, kt, kne, kte, ktn, ktne, vz) * velocityRatio;
-
-    real bladeVelX_BF, bladeVelY_BF, bladeVelZ_BF;
-
-    rotateFromGlobalToBlade(bladeVelX_BF, bladeVelY_BF, bladeVelZ_BF,
-                            bladeVelX_GF, bladeVelY_GF, bladeVelZ_GF,
-                            localAzimuth, yaw);
-
-    bladeVelocitiesX[nodeIndex] = bladeVelX_BF;
-    bladeVelocitiesY[nodeIndex] = bladeVelY_BF + omegas[turbine] * bladeCoordsZ[nodeIndex];
-    bladeVelocitiesZ[nodeIndex] = bladeVelZ_BF;
-}
-
-__global__ void applyBodyForces(real* gridCoordsX, real* gridCoordsY, real* gridCoordsZ,
-                                real* gridForcesX, real* gridForcesY, real* gridForcesZ, 
-                                real* bladeCoordsX, real* bladeCoordsY, real* bladeCoordsZ, 
-                                real* bladeForcesX, real* bladeForcesY, real* bladeForcesZ,
-                                const uint numberOfTurbines, const uint numberOfBlades, const uint numberOfBladeNodes,
-                                real* azimuths, real* yaws, real* diameters,
-                                real* turbPosX, real* turbPosY, real* turbPosZ,
-                                uint* gridIndices, uint nIndices, 
-                                const real invEpsilonSqrd, const real factorGaussian)
-{
-
-    const uint index = vf::gpu::getNodeIndex();
-
-    if (index >= nIndices) return;
-
-    uint gridIndex = gridIndices[index];
-
-    real gridCoordX_GF = gridCoordsX[gridIndex];
-    real gridCoordY_GF = gridCoordsY[gridIndex];
-    real gridCoordZ_GF = gridCoordsZ[gridIndex];
-
-    real gridForceX_RF = c0o1;
-    real gridForceY_RF = c0o1;
-    real gridForceZ_RF = c0o1;
-
-    real dAzimuth = c2Pi / numberOfBlades;
-
-    for (uint turbine = 0; turbine < numberOfTurbines; turbine++) {
-        real radius = c1o2 * diameters[turbine];
-        real gridCoordX_RF = gridCoordX_GF - turbPosX[turbine];
-        real gridCoordY_RF = gridCoordY_GF - turbPosY[turbine];
-        real gridCoordZ_RF = gridCoordZ_GF - turbPosZ[turbine];
-
-        if (distSqrd(gridCoordX_RF, gridCoordY_RF, gridCoordZ_RF) * invEpsilonSqrd > radius * radius * invEpsilonSqrd + c7o1) continue;
-
-        real azimuth = azimuths[turbine];
-        real yaw = yaws[turbine];
-
-        for (uint blade = 0; blade < numberOfBlades; blade++) {
-            real localAzimuth = azimuth + blade * dAzimuth;
-
-            real gridCoordX_BF, gridCoordY_BF, gridCoordZ_BF;
-
-            rotateFromGlobalToBlade(gridCoordX_BF, gridCoordY_BF, gridCoordZ_BF,
-                                    gridCoordX_RF, gridCoordY_RF, gridCoordZ_RF,
-                                    localAzimuth, yaw);
-
-            uint node;
-            uint nextNode = calcNodeIndexInBladeArrays({ /*.turbine = */ turbine, /* .blade = */ blade, /*.bladeNode =*/0 }, numberOfBladeNodes, numberOfBlades);
-
-            real last_z = c0o1;
-            real current_z = c0o1;
-            real next_z = bladeCoordsZ[nextNode];
-
-            real x, y, dz, eta, forceX_RF, forceY_RF, forceZ_RF;
-
-            for (uint bladeNode = 0; bladeNode < numberOfBladeNodes - 1; bladeNode++) {
-                node = nextNode;
-                nextNode = calcNodeIndexInBladeArrays({ /*.turbine = */ turbine, /* .blade = */ blade, /*.bladeNode =*/bladeNode + 1 }, numberOfBladeNodes, numberOfBlades);
-
-                x = bladeCoordsX[node];
-                y = bladeCoordsY[node];
-                last_z = current_z;
-                current_z = next_z;
-                next_z = bladeCoordsZ[nextNode];
-
-                dz = c1o2 * (next_z - last_z);
-
-                eta = dz * factorGaussian * exp(-distSqrd(x - gridCoordX_BF, y - gridCoordY_BF, current_z - gridCoordZ_BF) * invEpsilonSqrd);
-                rotateFromBladeToGlobal(bladeForcesX[node], bladeForcesY[node], bladeForcesZ[node], forceX_RF, forceY_RF, forceZ_RF, localAzimuth, yaw);
-
-                gridForceX_RF += forceX_RF * eta;
-                gridForceY_RF += forceY_RF * eta;
-                gridForceZ_RF += forceZ_RF * eta;
-            }
-
-            // Handle last node separately
-
-            node = nextNode;
-
-            x = bladeCoordsX[node];
-            y = bladeCoordsY[node];
-            last_z = current_z;
-            current_z = next_z;
-
-            dz = c1o2 * (radius - last_z);
-
-            eta = dz * factorGaussian * exp(-distSqrd(x - gridCoordX_BF, y - gridCoordY_BF, current_z - gridCoordZ_BF) * invEpsilonSqrd);
-
-            rotateFromBladeToGlobal(bladeForcesX[node], bladeForcesY[node], bladeForcesZ[node],
-                                    forceX_RF, forceY_RF, forceZ_RF,
-                                    localAzimuth, yaw);
-
-            gridForceX_RF += forceX_RF * eta;
-            gridForceY_RF += forceY_RF * eta;
-            gridForceZ_RF += forceZ_RF * eta;
-        }
-    }
-
-    gridForcesX[gridIndex] += gridForceX_RF;
-    gridForcesY[gridIndex] += gridForceY_RF;
-    gridForcesZ[gridIndex] += gridForceZ_RF;
-}
-
-void ActuatorFarm::addTurbine(real posX, real posY, real posZ, real diameter, real omega, real azimuth, real yaw, std::vector<real> bladeRadii)
-{
-    preInitPosX.push_back(posX);
-    preInitPosY.push_back(posY);
-    preInitPosZ.push_back(posZ);
-    preInitOmegas.push_back(omega);
-    preInitAzimuths.push_back(azimuth);
-    preInitYaws.push_back(yaw);
-    preInitDiameters.push_back(diameter);
-    preInitBladeRadii.push_back(bladeRadii);
-}
-
-void ActuatorFarm::init(Parameter *para, GridProvider *gridProvider, CudaMemoryManager *cudaMemoryManager)
-{
-    if (!para->getIsBodyForce()) throw std::runtime_error("try to allocate ActuatorFarm but BodyForce is not set in Parameter.");
-    this->forceRatio = para->getForceRatio();
-    this->initTurbineGeometries(cudaMemoryManager);
-    this->initBladeCoords(cudaMemoryManager);
-    this->initBladeIndices(para, cudaMemoryManager);
-    this->initBladeVelocities(cudaMemoryManager);
-    this->initBladeForces(cudaMemoryManager);
-    this->initBoundingSpheres(para, cudaMemoryManager);
-    this->streamIndex = para->getStreamManager()->registerAndLaunchStream(CudaStreamIndex::ActuatorFarm);
-}
-
-void ActuatorFarm::interact(Parameter *para, CudaMemoryManager *cudaMemoryManager, int level, unsigned int t)
-{
-    if (level != this->level) return;
-
-    cudaStream_t stream = para->getStreamManager()->getStream(CudaStreamIndex::ActuatorFarm, this->streamIndex);
-
-    if (useHostArrays) cudaMemoryManager->cudaCopyBladeCoordsHtoD(this);
-
-    vf::cuda::CudaGrid bladeGrid = vf::cuda::CudaGrid(para->getParH(level)->numberofthreads, this->numberOfGridNodes);
-
-    // if (t == 0) this->writeBladeCoordsToVtkForDebug("output/ALM/bladecoords_" + std::to_string(t));
-
-    interpolateVelocities<<< bladeGrid.grid, bladeGrid.threads, 0, stream >>>(
-        para->getParD(this->level)->coordinateX, para->getParD(this->level)->coordinateY, para->getParD(this->level)->coordinateZ,
-        para->getParD(this->level)->neighborX, para->getParD(this->level)->neighborY, para->getParD(this->level)->neighborZ, para->getParD(this->level)->neighborInverse,
-        para->getParD(this->level)->velocityX, para->getParD(this->level)->velocityY, para->getParD(this->level)->velocityZ,
-        this->bladeCoordsXDCurrentTimestep, this->bladeCoordsYDCurrentTimestep, this->bladeCoordsZDCurrentTimestep,  
-        this->bladeVelocitiesXDCurrentTimestep, this->bladeVelocitiesYDCurrentTimestep, this->bladeVelocitiesZDCurrentTimestep,
-        this->numberOfTurbines, this->numberOfBlades, this->numberOfBladeNodes,
-        this->azimuthsD, this->yawsD, this->omegasD, 
-        this->turbinePosXD, this->turbinePosYD, this->turbinePosZD,
-        this->bladeIndicesD, para->getVelocityRatio(), this->invDeltaX);
-
-    cudaStreamSynchronize(stream);
-    if (useHostArrays) cudaMemoryManager->cudaCopyBladeVelocitiesDtoH(this);
-    this->calcBladeForces();
-    this->swapDeviceArrays();
-
-    if (useHostArrays) cudaMemoryManager->cudaCopyBladeForcesHtoD(this);
-
-    vf::cuda::CudaGrid sphereGrid = vf::cuda::CudaGrid(para->getParH(level)->numberofthreads, this->numberOfIndices);
-
-    applyBodyForces<<<sphereGrid.grid, sphereGrid.threads, 0, stream>>>(
-        para->getParD(this->level)->coordinateX, para->getParD(this->level)->coordinateY, para->getParD(this->level)->coordinateZ,
-        para->getParD(this->level)->forceX_SP, para->getParD(this->level)->forceY_SP, para->getParD(this->level)->forceZ_SP,
-        this->bladeCoordsXDCurrentTimestep, this->bladeCoordsYDCurrentTimestep, this->bladeCoordsZDCurrentTimestep,
-        this->bladeForcesXDCurrentTimestep, this->bladeForcesYDCurrentTimestep, this->bladeForcesZDCurrentTimestep,
-        this->numberOfTurbines, this->numberOfBlades, this->numberOfBladeNodes,
-        this->azimuthsD, this->yawsD, this->diametersD,
-        this->turbinePosXD, this->turbinePosYD, this->turbinePosZD,
-        this->boundingSphereIndicesD, this->numberOfIndices,
-        this->invEpsilonSqrd, this->factorGaussian);
-    cudaMemoryManager->cudaCopyBladeOrientationsHtoD(this);
-    cudaStreamSynchronize(stream);
-}
-
-void ActuatorFarm::free(Parameter *para, CudaMemoryManager *cudaMemoryManager)
-{
-    cudaMemoryManager->cudaFreeBladeGeometries(this);
-    cudaMemoryManager->cudaFreeBladeOrientations(this);
-    cudaMemoryManager->cudaFreeBladeCoords(this);
-    cudaMemoryManager->cudaFreeBladeVelocities(this);
-    cudaMemoryManager->cudaFreeBladeForces(this);
-    cudaMemoryManager->cudaFreeBladeIndices(this);
-    cudaMemoryManager->cudaFreeSphereIndices(this);
-}
-
-void ActuatorFarm::calcForcesEllipticWing()
-{
-    real u_rel, v_rel, u_rel_sq;
-    real phi;
-    real Cl = c1o1;
-    real Cd = c0o1;
-    real c0 = 20 * c1o10;
-    real c, Cn, Ct;
-
-    for (uint turbine = 0; turbine < this->numberOfTurbines; turbine++)
-    {
-        real diameter = this->diametersH[turbine];
-        for (uint blade = 0; blade < this->numberOfBlades; blade++)
-        {
-            for (uint bladeNode = 0; bladeNode < this->numberOfBladeNodes; bladeNode++)
-            {
-                uint node = calcNodeIndexInBladeArrays({ /*.turbine = */ turbine, /* .blade = */ blade, /*.bladeNode =*/bladeNode }, this->numberOfBladeNodes, this->numberOfBlades);
-
-                u_rel = this->bladeVelocitiesXH[node];
-                v_rel = this->bladeVelocitiesYH[node];
-                u_rel_sq = u_rel * u_rel + v_rel * v_rel;
-                phi = atan2(u_rel, v_rel);
-
-                real tmp = c4o1 * this->bladeRadiiH[bladeNode] / diameter - c1o1;
-                c = c0 * sqrt(c1o1 - tmp * tmp);
-                Cn = Cl * cos(phi) + Cd * sin(phi);
-                Ct = Cl * sin(phi) - Cd * cos(phi);
-                real fx = c1o2 * u_rel_sq * c * this->density * Cn;
-                real fy = c1o2 * u_rel_sq * c * this->density * Ct;
-                this->bladeForcesXH[node] = -fx;
-                this->bladeForcesYH[node] = -fy;
-                this->bladeForcesZH[node] = c0o1;
-                // printf("u %f v %f fx %f fy %f \n", u_rel, v_rel, fx, fy);
-            }
-        }
-        azimuthsH[turbine] = azimuthsH[turbine] + deltaT * omegasH[turbine];
-    }
-}
-
-void ActuatorFarm::calcBladeForces()
-{
-    this->calcForcesEllipticWing();
-}
-
-void ActuatorFarm::getTaggedFluidNodes(Parameter *para, GridProvider *gridProvider)
-{
-    std::vector<uint> indicesInSphere(this->boundingSphereIndicesH, this->boundingSphereIndicesH + this->numberOfIndices);
-    gridProvider->tagFluidNodeIndices(indicesInSphere, CollisionTemplate::AllFeatures, this->level);
-}
-
-void ActuatorFarm::initTurbineGeometries(CudaMemoryManager *cudaMemoryManager)
-{
-    this->numberOfTurbines = uint(this->preInitDiameters.size());
-    this->numberOfGridNodes = numberOfTurbines * numberOfBladeNodes * numberOfBlades;
-
-    cudaMemoryManager->cudaAllocBladeGeometries(this);
-    cudaMemoryManager->cudaAllocBladeOrientations(this);
-
-    for (uint turbine = 0; turbine < this->numberOfTurbines; turbine++) {
-        for (uint node = 0; node < this->numberOfBladeNodes; node++) {
-            this->bladeRadiiH[calcNodeIndexInBladeArrays({ /*.turbine = */ turbine, /* .blade = */ 0, /*.bladeNode =*/node }, numberOfBladeNodes, 1)] = this->preInitBladeRadii[turbine][node];
-        }
-    }
-    std::copy(preInitPosX.begin(), preInitPosX.end(), turbinePosXH);
-    std::copy(preInitPosY.begin(), preInitPosY.end(), turbinePosYH);
-    std::copy(preInitPosZ.begin(), preInitPosZ.end(), turbinePosZH);
-    std::copy(preInitDiameters.begin(), preInitDiameters.end(), diametersH);
-
-    cudaMemoryManager->cudaCopyBladeGeometriesHtoD(this);
-    std::copy(preInitAzimuths.begin(), preInitAzimuths.end(), this->azimuthsH);
-    std::copy(preInitOmegas.begin(), preInitOmegas.end(), this->omegasH);
-    std::copy(preInitYaws.begin(), preInitYaws.end(), this->yawsH);
-
-    cudaMemoryManager->cudaCopyBladeOrientationsHtoD(this);
-    this->factorGaussian = pow(this->epsilon * sqrt(cPi), -c3o1) / this->forceRatio;
-}
-
-void ActuatorFarm::initBladeCoords(CudaMemoryManager *cudaMemoryManager)
-{
-    cudaMemoryManager->cudaAllocBladeCoords(this);
-
-    for (uint turbine = 0; turbine < numberOfTurbines; turbine++)
-    {
-        for (uint blade = 0; blade < this->numberOfBlades; blade++)
-        {
-            for (uint bladeNode = 0; bladeNode < this->numberOfBladeNodes; bladeNode++) {
-                uint node = calcNodeIndexInBladeArrays({ /*.turbine = */ turbine, /* .blade = */ blade, /*.bladeNode =*/bladeNode }, this->numberOfBladeNodes, this->numberOfBlades);
-
-                this->bladeCoordsXH[node] = c0o1;
-                this->bladeCoordsYH[node] = c0o1;
-                this->bladeCoordsZH[node] = this->bladeRadiiH[calcNodeIndexInBladeArrays({ /*.turbine = */ turbine, /* .blade = */ 0, /*.bladeNode =*/bladeNode }, numberOfBladeNodes, 1)];
-            }
-        }
-    }
-    cudaMemoryManager->cudaCopyBladeCoordsHtoD(this);
-    swapArrays(this->bladeCoordsXDCurrentTimestep, this->bladeCoordsXDPreviousTimestep);
-    swapArrays(this->bladeCoordsYDCurrentTimestep, this->bladeCoordsYDPreviousTimestep);
-    swapArrays(this->bladeCoordsZDCurrentTimestep, this->bladeCoordsZDPreviousTimestep);
-    cudaMemoryManager->cudaCopyBladeCoordsHtoD(this);
-}
-
-void ActuatorFarm::initBladeVelocities(CudaMemoryManager *cudaMemoryManager)
-{
-    cudaMemoryManager->cudaAllocBladeVelocities(this);
-
-    std::fill_n(this->bladeVelocitiesXH, this->numberOfGridNodes, c0o1);
-    std::fill_n(this->bladeVelocitiesYH, this->numberOfGridNodes, c0o1);
-    std::fill_n(this->bladeVelocitiesZH, this->numberOfGridNodes, c0o1);
-
-    cudaMemoryManager->cudaCopyBladeVelocitiesHtoD(this);
-    swapArrays(this->bladeVelocitiesXDCurrentTimestep, this->bladeVelocitiesXDPreviousTimestep);
-    swapArrays(this->bladeVelocitiesYDCurrentTimestep, this->bladeVelocitiesYDPreviousTimestep);
-    swapArrays(this->bladeVelocitiesZDCurrentTimestep, this->bladeVelocitiesZDPreviousTimestep);
-    cudaMemoryManager->cudaCopyBladeVelocitiesHtoD(this);
-}
-
-void ActuatorFarm::initBladeForces(CudaMemoryManager *cudaMemoryManager)
-{
-    cudaMemoryManager->cudaAllocBladeForces(this);
-
-    std::fill_n(this->bladeForcesXH, this->numberOfGridNodes, c0o1);
-    std::fill_n(this->bladeForcesYH, this->numberOfGridNodes, c0o1);
-    std::fill_n(this->bladeForcesZH, this->numberOfGridNodes, c0o1);
-
-    cudaMemoryManager->cudaCopyBladeForcesHtoD(this);
-    swapArrays(this->bladeForcesXDCurrentTimestep, this->bladeForcesXDPreviousTimestep);
-    swapArrays(this->bladeForcesYDCurrentTimestep, this->bladeForcesYDPreviousTimestep);
-    swapArrays(this->bladeForcesZDCurrentTimestep, this->bladeForcesZDPreviousTimestep);
-    cudaMemoryManager->cudaCopyBladeForcesHtoD(this);
-}
-
-void ActuatorFarm::initBladeIndices(Parameter *para, CudaMemoryManager *cudaMemoryManager)
-{
-    cudaMemoryManager->cudaAllocBladeIndices(this);
-
-    std::fill_n(this->bladeIndicesH, this->numberOfGridNodes, 1);
-
-    cudaMemoryManager->cudaCopyBladeIndicesHtoD(this);
-}
-
-void ActuatorFarm::initBoundingSpheres(Parameter *para, CudaMemoryManager *cudaMemoryManager)
-{
-    std::vector<int> nodesInSpheres;
-
-    for (uint turbine = 0; turbine < this->numberOfTurbines; turbine++) {
-        real sphereRadius = c1o2 * this->diametersH[turbine] + c4o1 * this->epsilon;
-
-        real posX = this->turbinePosXH[turbine];
-        real posY = this->turbinePosYH[turbine];
-        real posZ = this->turbinePosZH[turbine];
-
-        real sphereRadiusSqrd = sphereRadius * sphereRadius;
-
-        uint minimumNumberOfNodesPerSphere =
-            (uint)(c4o3 * cPi * pow(sphereRadius - this->deltaX, c3o1) / pow(this->deltaX, c3o1));
-        uint nodesInThisSphere = 0;
-
-        for (size_t pos = 1; pos <= para->getParH(this->level)->numberOfNodes; pos++) {
-            const real distX = para->getParH(this->level)->coordinateX[pos] - posX;
-            const real distY = para->getParH(this->level)->coordinateY[pos] - posY;
-            const real distZ = para->getParH(this->level)->coordinateZ[pos] - posZ;
-            if (distSqrd(distX, distY, distZ) < sphereRadiusSqrd) {
-                nodesInSpheres.push_back((int)pos);
-                nodesInThisSphere++;
-            }
-        }
-
-        if (nodesInThisSphere < minimumNumberOfNodesPerSphere) {
-            VF_LOG_CRITICAL("Found only {} nodes in bounding sphere of turbine no. {}, expected at least {}!", nodesInThisSphere, turbine, minimumNumberOfNodesPerSphere);
-            throw std::runtime_error("ActuatorFarm::initBoundingSpheres: Turbine bounding sphere partially out of domain.");
-        }
-    }
-
-    this->numberOfIndices = uint(nodesInSpheres.size());
-
-    cudaMemoryManager->cudaAllocSphereIndices(this);
-    std::copy(nodesInSpheres.begin(), nodesInSpheres.end(), this->boundingSphereIndicesH);
-    cudaMemoryManager->cudaCopySphereIndicesHtoD(this);
-}
-
-void ActuatorFarm::setAllAzimuths(real *_azimuths)
-{
-    std::copy_n(_azimuths, this->numberOfTurbines, this->azimuthsH);
-}
-
-void ActuatorFarm::setAllOmegas(real *_omegas)
-{
-    std::copy_n(_omegas, this->numberOfTurbines, this->omegasH);
-}
-
-void ActuatorFarm::setAllYaws(real *_yaws)
-{
-    std::copy_n(_yaws, this->numberOfTurbines, this->yawsH);
-}
-
-void ActuatorFarm::setAllBladeCoords(real *_bladeCoordsX, real *_bladeCoordsY, real *_bladeCoordsZ)
-{
-    std::copy_n(_bladeCoordsX, this->numberOfGridNodes, this->bladeCoordsXH);
-    std::copy_n(_bladeCoordsY, this->numberOfGridNodes, this->bladeCoordsYH);
-    std::copy_n(_bladeCoordsZ, this->numberOfGridNodes, this->bladeCoordsZH);
-}
-
-void ActuatorFarm::setAllBladeVelocities(real *_bladeVelocitiesX, real *_bladeVelocitiesY, real *_bladeVelocitiesZ)
-{
-    std::copy_n(_bladeVelocitiesX, this->numberOfGridNodes, this->bladeVelocitiesXH);
-    std::copy_n(_bladeVelocitiesY, this->numberOfGridNodes, this->bladeVelocitiesYH);
-    std::copy_n(_bladeVelocitiesZ, this->numberOfGridNodes, this->bladeVelocitiesZH);
-}
-
-void ActuatorFarm::setAllBladeForces(real *_bladeForcesX, real *_bladeForcesY, real *_bladeForcesZ)
-{
-    std::copy_n(_bladeForcesX, this->numberOfGridNodes, this->bladeForcesXH);
-    std::copy_n(_bladeForcesY, this->numberOfGridNodes, this->bladeForcesYH);
-    std::copy_n(_bladeForcesZ, this->numberOfGridNodes, this->bladeForcesZH);
-}
-void ActuatorFarm::setTurbineBladeCoords(uint turbine, real *_bladeCoordsX, real *_bladeCoordsY, real *_bladeCoordsZ)
-{
-    std::copy_n(_bladeCoordsX, numberOfBladeNodes * numberOfBlades, &this->bladeCoordsXH[turbine * numberOfBladeNodes * numberOfBlades]);
-    std::copy_n(_bladeCoordsY, numberOfBladeNodes * numberOfBlades, &this->bladeCoordsYH[turbine * numberOfBladeNodes * numberOfBlades]);
-    std::copy_n(_bladeCoordsZ, numberOfBladeNodes * numberOfBlades, &this->bladeCoordsZH[turbine * numberOfBladeNodes * numberOfBlades]);
-}
-
-void ActuatorFarm::setTurbineBladeVelocities(uint turbine, real *_bladeVelocitiesX, real *_bladeVelocitiesY, real *_bladeVelocitiesZ)
-{
-    std::copy_n(_bladeVelocitiesX, numberOfBladeNodes * numberOfBlades, &this->bladeVelocitiesXH[turbine * numberOfBladeNodes * numberOfBlades]);
-    std::copy_n(_bladeVelocitiesY, numberOfBladeNodes * numberOfBlades, &this->bladeVelocitiesYH[turbine * numberOfBladeNodes * numberOfBlades]);
-    std::copy_n(_bladeVelocitiesZ, numberOfBladeNodes * numberOfBlades, &this->bladeVelocitiesZH[turbine * numberOfBladeNodes * numberOfBlades]);
-}
-
-void ActuatorFarm::setTurbineBladeForces(uint turbine, real *_bladeForcesX, real *_bladeForcesY, real *_bladeForcesZ)
-{
-    std::copy_n(_bladeForcesX, numberOfBladeNodes * numberOfBlades, &this->bladeForcesXH[turbine * numberOfBladeNodes * numberOfBlades]);
-    std::copy_n(_bladeForcesY, numberOfBladeNodes * numberOfBlades, &this->bladeForcesYH[turbine * numberOfBladeNodes * numberOfBlades]);
-    std::copy_n(_bladeForcesZ, numberOfBladeNodes * numberOfBlades, &this->bladeForcesZH[turbine * numberOfBladeNodes * numberOfBlades]);
-}
-
-void ActuatorFarm::swapDeviceArrays()
-{
-    swapArrays(this->bladeCoordsXDPreviousTimestep, this->bladeCoordsXDCurrentTimestep);
-    swapArrays(this->bladeCoordsYDPreviousTimestep, this->bladeCoordsYDCurrentTimestep);
-    swapArrays(this->bladeCoordsZDPreviousTimestep, this->bladeCoordsZDCurrentTimestep);
-
-    swapArrays(this->bladeVelocitiesXDPreviousTimestep, this->bladeVelocitiesXDCurrentTimestep);
-    swapArrays(this->bladeVelocitiesYDPreviousTimestep, this->bladeVelocitiesYDCurrentTimestep);
-    swapArrays(this->bladeVelocitiesZDPreviousTimestep, this->bladeVelocitiesZDCurrentTimestep);
-
-    swapArrays(this->bladeForcesXDPreviousTimestep, this->bladeForcesXDCurrentTimestep);
-    swapArrays(this->bladeForcesYDPreviousTimestep, this->bladeForcesYDCurrentTimestep);
-    swapArrays(this->bladeForcesZDPreviousTimestep, this->bladeForcesZDCurrentTimestep);
-}
-
-void ActuatorFarm::writeBladeCoordsToVtkForDebug(const std::string &filename)
-{
-    std::vector<real> coordsX(numberOfGridNodes);
-    std::vector<real> coordsY(numberOfGridNodes);
-    std::vector<real> coordsZ(numberOfGridNodes);
-
-    for (uint nodeIndex = 0; nodeIndex < numberOfGridNodes; nodeIndex++) {
-        auto [turbine, blade, bladeNodeIndexOnBlade] = calcTurbineBladeAndBladeNode(nodeIndex, numberOfBladeNodes, numberOfBlades);
-
-        const real localAzimuth = this->getTurbineAzimuth(turbine) + blade * c2Pi / numberOfBlades;
-        const real yaw = this->getTurbineYaw(turbine);
-        real bladeCoordX_GF;
-        real bladeCoordY_GF;
-        real bladeCoordZ_GF;
-        calcCoordinateOfBladeNodeInGridFrameOfReference(nodeIndex, turbine, localAzimuth, yaw, this->bladeCoordsXH, this->bladeCoordsYH, this->bladeCoordsZH, this->turbinePosXH, this->turbinePosYH, this->turbinePosZH, bladeCoordX_GF, bladeCoordY_GF, bladeCoordZ_GF);
-        coordsX[nodeIndex] = bladeCoordX_GF;
-        coordsY[nodeIndex] = bladeCoordY_GF;
-        coordsZ[nodeIndex] = bladeCoordZ_GF;
-    }
-
-    WbWriterVtkXmlBinary::getInstance()->writePolyLines(filename, coordsX, coordsY, coordsZ);
-}
\ No newline at end of file
diff --git a/src/gpu/core/PreCollisionInteractor/ActuatorFarm.h b/src/gpu/core/PreCollisionInteractor/ActuatorFarm.h
deleted file mode 100644
index 74f23f3e6a4dc9e3e798ca13aa3632171d0e3bd0..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreCollisionInteractor/ActuatorFarm.h
+++ /dev/null
@@ -1,198 +0,0 @@
-#ifndef ActuatorFarm_H
-#define ActuatorFarm_H
-
-#include "PreCollisionInteractor.h"
-#include <basics/PointerDefinitions.h>
-#include "basics/constants/NumericConstants.h"
-#include <stdexcept>
-
-using namespace vf::basics::constant;
-
-class Parameter;
-class GridProvider;
-using namespace vf::basics::constant;
-
-class ActuatorFarm : public PreCollisionInteractor
-{
-public:
-    ActuatorFarm(
-        const uint _nBlades,
-        const real _density,
-        const uint _nBladeNodes,
-        const real _epsilon,
-        int _level,
-        const real _deltaT,
-        const real _deltaX,
-        const bool _useHostArrays
-    ) :
-        numberOfBlades(_nBlades),
-        density(_density),
-        numberOfBladeNodes(_nBladeNodes), 
-        epsilon(_epsilon),
-        level(_level),
-        useHostArrays(_useHostArrays),
-        numberOfTurbines(0),
-        numberOfGridNodes(0),
-        PreCollisionInteractor()
-    {
-        this->deltaT = _deltaT*exp2(-this->level);
-        this->deltaX = _deltaX*exp2(-this->level);
-        this->invEpsilonSqrd = 1/(epsilon*epsilon);
-        this->invDeltaX = c1o1/this->deltaX;
-     
-        if(this->epsilon<this->deltaX)
-            throw std::runtime_error("ActuatorFarm::ActuatorFarm: epsilon needs to be larger than dx!");
-    }
-
-    ~ActuatorFarm() override = default;
-    void addTurbine(real turbinePosX, real turbinePosY, real turbinePosZ, real diameter, real omega, real azimuth, real yaw, std::vector<real> bladeRadii);
-    void init(Parameter* para, GridProvider* gridProvider, CudaMemoryManager* cudaManager) override;
-    void interact(Parameter* para, CudaMemoryManager* cudaManager, int level, uint t) override;
-    void free(Parameter* para, CudaMemoryManager* cudaManager) override;
-    void getTaggedFluidNodes(Parameter *para, GridProvider* gridProvider) override;
-
-    void write(uint t);
-
-    real getDensity(){ return this->density; };
-    real getDeltaT(){ return this->deltaT; };
-    real getDeltaX(){ return this->deltaX; };
-
-    uint getNumberOfTurbines(){ return this->numberOfTurbines; };
-    uint getNumberOfNodesPerBlade(){ return this->numberOfBladeNodes; };
-    uint getNumberOfBladesPerTurbine(){ return this->numberOfBlades; };
-
-    uint getNumberOfIndices(){ return this->numberOfIndices; };
-    uint getNumberOfGridNodes(){ return this->numberOfGridNodes; };
-
-    real* getAllAzimuths(){ return azimuthsH; };
-    real* getAllOmegas(){ return omegasH; };
-    real* getAllYaws(){ return yawsH; };
-
-    real* getAllTurbinePosX(){ return turbinePosXH; };
-    real* getAllTurbinePosY(){ return turbinePosYH; };
-    real* getAllTurbinePosZ(){ return turbinePosZH; };
-
-    real getTurbineAzimuth(uint turbine){ return azimuthsH[turbine]; };
-    real getTurbineOmega  (uint turbine){ return omegasH[turbine];   };
-    real getTurbineYaw    (uint turbine){ return yawsH[turbine];     };
-
-    real getTurbinePosX(uint turbine){ return turbinePosXH[turbine]; };
-    real getTurbinePosY(uint turbine){ return turbinePosYH[turbine]; };
-    real getTurbinePosZ(uint turbine){ return turbinePosZH[turbine]; };
-
-    real* getAllBladeRadii(){ return this->bladeRadiiH; };
-    real* getAllBladeCoordsX(){ return this->bladeCoordsXH; };
-    real* getAllBladeCoordsY(){ return this->bladeCoordsYH; };
-    real* getAllBladeCoordsZ(){ return this->bladeCoordsZH; };
-    real* getAllBladeVelocitiesX(){ return this->bladeVelocitiesXH; };
-    real* getAllBladeVelocitiesY(){ return this->bladeVelocitiesYH; };
-    real* getAllBladeVelocitiesZ(){ return this->bladeVelocitiesZH; };
-    real* getAllBladeForcesX(){ return this->bladeForcesXH; };
-    real* getAllBladeForcesY(){ return this->bladeForcesYH; };
-    real* getAllBladeForcesZ(){ return this->bladeForcesZH; };
-
-    real* getTurbineBladeRadii(uint turbine){ return &this->bladeRadiiH[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeCoordsX(uint turbine){ return &this->bladeCoordsXH[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeCoordsY(uint turbine){ return &this->bladeCoordsYH[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeCoordsZ(uint turbine){ return &this->bladeCoordsZH[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeVelocitiesX(uint turbine){ return &this->bladeVelocitiesXH[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeVelocitiesY(uint turbine){ return &this->bladeVelocitiesYH[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeVelocitiesZ(uint turbine){ return &this->bladeVelocitiesZH[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeForcesX(uint turbine){ return &this->bladeForcesXH[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeForcesY(uint turbine){ return &this->bladeForcesYH[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeForcesZ(uint turbine){ return &this->bladeForcesZH[turbine*numberOfBladeNodes*numberOfBlades]; };
-
-    real* getAllBladeRadiiDevice(){ return this->bladeRadiiD; };
-    real* getAllBladeCoordsXDevice(){ return this->bladeCoordsXDCurrentTimestep; };
-    real* getAllBladeCoordsYDevice(){ return this->bladeCoordsYDCurrentTimestep; };
-    real* getAllBladeCoordsZDevice(){ return this->bladeCoordsZDCurrentTimestep; };
-    real* getAllBladeVelocitiesXDevice(){ return this->bladeVelocitiesXDCurrentTimestep; };
-    real* getAllBladeVelocitiesYDevice(){ return this->bladeVelocitiesYDCurrentTimestep; };
-    real* getAllBladeVelocitiesZDevice(){ return this->bladeVelocitiesZDCurrentTimestep; };
-    real* getAllBladeForcesXDevice(){ return this->bladeForcesXDCurrentTimestep; };
-    real* getAllBladeForcesYDevice(){ return this->bladeForcesYDCurrentTimestep; };
-    real* getAllBladeForcesZDevice(){ return this->bladeForcesZDCurrentTimestep; };
-
-    real* getTurbineBladeRadiiDevice(uint turbine){ return &this->bladeRadiiD[turbine*numberOfBladeNodes]; };
-    real* getTurbineBladeCoordsXDevice(uint turbine){ return &this->bladeCoordsXDCurrentTimestep[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeCoordsYDevice(uint turbine){ return &this->bladeCoordsYDCurrentTimestep[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeCoordsZDevice(uint turbine){ return &this->bladeCoordsZDCurrentTimestep[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeVelocitiesXDevice(uint turbine){ return &this->bladeVelocitiesXDCurrentTimestep[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeVelocitiesYDevice(uint turbine){ return &this->bladeVelocitiesYDCurrentTimestep[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeVelocitiesZDevice(uint turbine){ return &this->bladeVelocitiesZDCurrentTimestep[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeForcesXDevice(uint turbine){ return &this->bladeForcesXDCurrentTimestep[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeForcesYDevice(uint turbine){ return &this->bladeForcesYDCurrentTimestep[turbine*numberOfBladeNodes*numberOfBlades]; };
-    real* getTurbineBladeForcesZDevice(uint turbine){ return &this->bladeForcesZDCurrentTimestep[turbine*numberOfBladeNodes*numberOfBlades]; };
-
-    void setAllAzimuths(real* _azimuth);
-    void setAllOmegas(real* _omegas);
-    void setAllYaws(real* yaws);
-    
-    void setTurbineAzimuth(uint turbine, real azimuth){ azimuthsH[turbine] = azimuth; };
-    void setTurbineYaw(uint turbine, real yaw){ yawsH[turbine] = yaw; };
-    void setTurbineOmega(uint turbine, real omega){ omegasH[turbine] = omega; };
-
-    void setAllBladeCoords(real* _bladeCoordsX, real* _bladeCoordsY, real* _bladeCoordsZ);
-    void setAllBladeVelocities(real* _bladeVelocitiesX, real* _bladeVelocitiesY, real* _bladeVelocitiesZ);
-    void setAllBladeForces(real* _bladeForcesX, real* _bladeForcesY, real* _bladeForcesZ);
-
-    void setTurbineBladeCoords(uint turbine, real* _bladeCoordsX, real* _bladeCoordsY, real* _bladeCoordsZ);
-    void setTurbineBladeVelocities(uint turbine, real* _bladeVelocitiesX, real* _bladeVelocitiesY, real* _bladeVelocitiesZ);
-    void setTurbineBladeForces(uint turbine, real* _bladeForcesX, real* _bladeForcesY, real* _bladeForcesZ);
-
-    virtual void calcBladeForces();
-
-private:
-    void initTurbineGeometries(CudaMemoryManager* cudaManager);
-    void initBoundingSpheres(Parameter* para, CudaMemoryManager* cudaManager);
-    void initBladeCoords(CudaMemoryManager* cudaManager);
-    void initBladeVelocities(CudaMemoryManager* cudaManager);
-    void initBladeForces(CudaMemoryManager* cudaManager);
-    void initBladeIndices(Parameter* para, CudaMemoryManager* cudaManager);
-
-    void calcForcesEllipticWing();
-    void rotateBlades(real angle, uint turbineID);
-
-    void writeBladeCoords(uint t);
-    void writeBladeCoordsToVtkForDebug(const std::string& filename);
-    void writeBladeForces(uint t);
-    void writeBladeVelocities(uint t);
-
-    void swapDeviceArrays();
-
-public:
-    real* bladeRadiiH;
-    real* bladeRadiiD;
-    real* bladeCoordsXH, * bladeCoordsYH, * bladeCoordsZH;
-    real* bladeCoordsXDPreviousTimestep, * bladeCoordsYDPreviousTimestep, * bladeCoordsZDPreviousTimestep;
-    real* bladeCoordsXDCurrentTimestep, * bladeCoordsYDCurrentTimestep, * bladeCoordsZDCurrentTimestep;    
-    real* bladeVelocitiesXH, * bladeVelocitiesYH, * bladeVelocitiesZH;
-    real* bladeVelocitiesXDPreviousTimestep, * bladeVelocitiesYDPreviousTimestep, * bladeVelocitiesZDPreviousTimestep;
-    real* bladeVelocitiesXDCurrentTimestep, * bladeVelocitiesYDCurrentTimestep, * bladeVelocitiesZDCurrentTimestep;
-    real* bladeForcesXH, * bladeForcesYH, * bladeForcesZH;
-    real* bladeForcesXDPreviousTimestep, * bladeForcesYDPreviousTimestep, * bladeForcesZDPreviousTimestep;
-    real* bladeForcesXDCurrentTimestep, * bladeForcesYDCurrentTimestep, * bladeForcesZDCurrentTimestep;
-    uint* bladeIndicesH;
-    uint* bladeIndicesD; 
-    uint* boundingSphereIndicesH;
-    uint* boundingSphereIndicesD;
-    real* turbinePosXH, *turbinePosYH, *turbinePosZH, *omegasH, *azimuthsH, *yawsH, *diametersH;
-    real* turbinePosXD, *turbinePosYD, *turbinePosZD, *omegasD, *azimuthsD, *yawsD, *diametersD;
-    
-private:
-    std::vector<real> preInitPosX, preInitPosY, preInitPosZ, preInitDiameters, preInitOmegas, preInitAzimuths, preInitYaws;
-    std::vector<std::vector<real>> preInitBladeRadii;
-    const bool useHostArrays;
-    const real density;
-    real deltaT, deltaX;
-    const uint numberOfBladeNodes, numberOfBlades;
-    uint numberOfTurbines;
-    const real epsilon; // in m
-    const int level;
-    uint numberOfIndices;
-    uint numberOfGridNodes;
-    real forceRatio, factorGaussian, invEpsilonSqrd, invDeltaX;
-    int streamIndex;
-};
-
-#endif
diff --git a/src/gpu/core/Init/InitLattice.cpp b/src/gpu/core/PreProcessor/InitLattice.cpp
similarity index 99%
rename from src/gpu/core/Init/InitLattice.cpp
rename to src/gpu/core/PreProcessor/InitLattice.cpp
index f8e00006e3b6438080c23b3a24bb9d30aa17fe48..1702e4e44fa6b04f59cb517d92df61f35104c9ba 100644
--- a/src/gpu/core/Init/InitLattice.cpp
+++ b/src/gpu/core/PreProcessor/InitLattice.cpp
@@ -30,7 +30,7 @@
 //! \ingroup Init
 //! \author Martin Schoenherr
 //=======================================================================================
-#include "Init/InitLattice.h"
+#include "PreProcessor/InitLattice.h"
 
 #include "GPU/CudaMemoryManager.h"
 #include "GPU/GPU_Interface.h"
diff --git a/src/gpu/core/Init/InitLattice.h b/src/gpu/core/PreProcessor/InitLattice.h
similarity index 100%
rename from src/gpu/core/Init/InitLattice.h
rename to src/gpu/core/PreProcessor/InitLattice.h
diff --git a/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp
index 18a1d4e7023e92cc0ac3be5dc2a57d1de64ac5cc..10fdf377bfb738f48d8083d40aedb6db6e2f627e 100644
--- a/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp
+++ b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp
@@ -32,12 +32,9 @@
 
 #include "PreProcessor/PreProcessorImp.h"
 
-#include "PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7.h"
 #include "PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressible/InitAdvectionDiffusionCompressible.h"
 #include "PreProcessor/PreProcessorStrategy/InitNavierStokesCompressible/InitNavierStokesCompressible.h"
-#include "PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible.h"
 #include "PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressible/InitAdvectionDiffusionIncompressible.h"
-#include "PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7.h"
 #include "PreProcessor/PreProcessorStrategy/InitNavierStokesIncompressible/InitNavierStokesIncompressible.h"
 
 
@@ -61,18 +58,9 @@ std::shared_ptr<PreProcessorStrategy> PreProcessorFactoryImp::makePreProcessorSt
     case InitNavierStokesCompressible:
         return InitNavierStokesCompressible::getNewInstance(para);
         break;
-    case InitK18K20NavierStokesCompressible:
-        return InitK18K20NavierStokesCompressible::getNewInstance(para);
-        break;
-    case InitAdvectionDiffusionIncompressibleD3Q7:
-        return InitAdvectionDiffusionIncompressibleD3Q7::getNewInstance(para);
-        break;
     case InitAdvectionDiffusionIncompressible:
         return InitAdvectionDiffusionIncompressible::getNewInstance(para);
         break;
-    case InitAdvectionDiffusionCompressibleD3Q7:
-        return InitAdvectionDiffusionCompressibleD3Q7::getNewInstance(para);
-        break;
     case InitAdvectionDiffusionCompressible:
         return InitAdvectionDiffusionCompressible::getNewInstance(para);
         break;
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7.cu
deleted file mode 100644
index 2db77de45d67a0f74d80c50b6d875aa39d7b2d6d..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7.cu
+++ /dev/null
@@ -1,73 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#include "InitAdvectionDiffusionCompressibleD3Q7.h"
-
-#include "InitAdvectionDiffusionCompressibleD3Q7_Device.cuh"
-#include "Parameter/Parameter.h"
-#include <cuda_helper/CudaGrid.h>
-
-std::shared_ptr<InitAdvectionDiffusionCompressibleD3Q7> InitAdvectionDiffusionCompressibleD3Q7::getNewInstance(std::shared_ptr<Parameter> para)
-{
-    return std::shared_ptr<InitAdvectionDiffusionCompressibleD3Q7>(new InitAdvectionDiffusionCompressibleD3Q7(para));
-}
-
-void InitAdvectionDiffusionCompressibleD3Q7::init(int level)
-{
-    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
-
-    InitAdvectionDiffusionCompressibleD3Q7_Device <<< grid.grid, grid.threads >>>(
-        para->getParD(level)->neighborX,
-        para->getParD(level)->neighborY,
-        para->getParD(level)->neighborZ,
-        para->getParD(level)->typeOfGridNode,
-        para->getParD(level)->concentration,
-        para->getParD(level)->velocityX,
-        para->getParD(level)->velocityY,
-        para->getParD(level)->velocityZ,
-        para->getParD(level)->numberOfNodes,
-        para->getParD(level)->distributionsAD7.f[0],
-        para->getParD(level)->isEvenTimestep);
-    getLastCudaError("InitAdvectionDiffusionCompressibleD3Q7_Device execution failed");
-}
-
-bool InitAdvectionDiffusionCompressibleD3Q7::checkParameter()
-{
-    return false;
-}
-
-InitAdvectionDiffusionCompressibleD3Q7::InitAdvectionDiffusionCompressibleD3Q7(std::shared_ptr<Parameter> para)
-{
-    this->para = para;
-}
-
-InitAdvectionDiffusionCompressibleD3Q7::InitAdvectionDiffusionCompressibleD3Q7()
-{
-}
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7.h
deleted file mode 100644
index 2c68fca2fde9d70075ceb1dc9f0e0f238e39fb40..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7.h
+++ /dev/null
@@ -1,52 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#ifndef InitAdvectionDiffusionCompressibleD3Q7_H
-#define InitAdvectionDiffusionCompressibleD3Q7_H
-
-#include "PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h"
-
-#include <memory>
-
-class Parameter;
-
-class InitAdvectionDiffusionCompressibleD3Q7 : public PreProcessorStrategy
-{
-public:
-    static std::shared_ptr<InitAdvectionDiffusionCompressibleD3Q7> getNewInstance(std::shared_ptr< Parameter> para);
-    void init(int level);
-    bool checkParameter();
-
-private:
-    InitAdvectionDiffusionCompressibleD3Q7();
-    InitAdvectionDiffusionCompressibleD3Q7(std::shared_ptr< Parameter> para);
-    std::shared_ptr< Parameter> para;
-};
-#endif 
\ No newline at end of file
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7_Device.cu
deleted file mode 100644
index b9265e83bb1202a1126a1f2bb342bae3f10e842a..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7_Device.cu
+++ /dev/null
@@ -1,125 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-#include "math.h"
-
-__global__ void InitAdvectionDiffusionCompressibleD3Q7_Device(unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned int* geoD,
-    real* Conc,
-    real* ux,
-    real* uy,
-    real* uz,
-    unsigned int size_Mat,
-    real* DD7,
-    bool EvenOrOdd)
-{
-    ////////////////////////////////////////////////////////////////////////////////
-    const unsigned  x = threadIdx.x;  // Globaler x-Index 
-    const unsigned  y = blockIdx.x;   // Globaler y-Index 
-    const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-    const unsigned nx = blockDim.x;
-    const unsigned ny = gridDim.x;
-
-    const unsigned k = nx*(ny*z + y) + x;
-    //////////////////////////////////////////////////////////////////////////
-
-    if (k<size_Mat)
-    {
-        ////////////////////////////////////////////////////////////////////////////////
-        unsigned int BC;
-        BC = geoD[k];
-
-        if (BC != GEO_SOLID && BC != GEO_VOID)
-        {
-            Distributions7 D7;
-            if (EvenOrOdd == true)
-            {
-                D7.f[0] = &DD7[0 * size_Mat];
-                D7.f[1] = &DD7[1 * size_Mat];
-                D7.f[2] = &DD7[2 * size_Mat];
-                D7.f[3] = &DD7[3 * size_Mat];
-                D7.f[4] = &DD7[4 * size_Mat];
-                D7.f[5] = &DD7[5 * size_Mat];
-                D7.f[6] = &DD7[6 * size_Mat];
-            }
-            else
-            {
-                D7.f[0] = &DD7[0 * size_Mat];
-                D7.f[2] = &DD7[1 * size_Mat];
-                D7.f[1] = &DD7[2 * size_Mat];
-                D7.f[4] = &DD7[3 * size_Mat];
-                D7.f[3] = &DD7[4 * size_Mat];
-                D7.f[6] = &DD7[5 * size_Mat];
-                D7.f[5] = &DD7[6 * size_Mat];
-            }
-            //////////////////////////////////////////////////////////////////////////
-            real ConcD = Conc[k];
-            real   vx1 = ux[k];
-            real   vx2 = uy[k];
-            real   vx3 = uz[k];
-            real lambdaD = -c3o1 + sqrt(c3o1);
-            real Diffusivity = c1o20;
-            real Lam = -(c1o2 + c1o1 / lambdaD);
-            real nue_d = Lam / c3o1;
-            real ae = Diffusivity / nue_d - c1o1;
-            real ux_sq = vx1 * vx1;
-            real uy_sq = vx2 * vx2;
-            real uz_sq = vx3 * vx3;
-            //////////////////////////////////////////////////////////////////////////
-            //index
-            //////////////////////////////////////////////////////////////////////////
-            unsigned int kzero = k;
-            unsigned int ke = k;
-            unsigned int kw = neighborX[k];
-            unsigned int kn = k;
-            unsigned int ks = neighborY[k];
-            unsigned int kt = k;
-            unsigned int kb = neighborZ[k];
-            //////////////////////////////////////////////////////////////////////////
-
-            (D7.f[0])[kzero] = ConcD*(c1o3*(ae*(-c3o1)) - (ux_sq + uy_sq + uz_sq));
-            (D7.f[1])[ke] = ConcD*(c1o6*(ae + c1o1) + c1o2*(ux_sq)+vx1*c1o2);
-            (D7.f[2])[kw] = ConcD*(c1o6*(ae + c1o1) + c1o2*(ux_sq)-vx1*c1o2);
-            (D7.f[3])[kn] = ConcD*(c1o6*(ae + c1o1) + c1o2*(uy_sq)+vx2*c1o2);
-            (D7.f[4])[ks] = ConcD*(c1o6*(ae + c1o1) + c1o2*(uy_sq)-vx2*c1o2);
-            (D7.f[5])[kt] = ConcD*(c1o6*(ae + c1o1) + c1o2*(uz_sq)+vx3*c1o2);
-            (D7.f[6])[kb] = ConcD*(c1o6*(ae + c1o1) + c1o2*(uz_sq)-vx3*c1o2);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7_Device.cuh
deleted file mode 100644
index fca4430fe935cc082692d2da837d7e7ea3fe6bec..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionCompressibleD3Q7/InitAdvectionDiffusionCompressibleD3Q7_Device.cuh
+++ /dev/null
@@ -1,50 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#ifndef InitAdvectionDiffusionCompressibleD3Q7_Device_H
-#define InitAdvectionDiffusionCompressibleD3Q7_Device_H
-
-#include <DataTypes.h>
-#include <curand.h>
-
-__global__ void InitAdvectionDiffusionCompressibleD3Q7_Device(
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned int* geoD,
-    real* Conc,
-    real* ux,
-    real* uy,
-    real* uz,
-    unsigned int size_Mat,
-    real* DD7,
-    bool EvenOrOdd);
-
-#endif
\ No newline at end of file
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7.cu
deleted file mode 100644
index 94d7da3bcdc6296bfaaa03c5ce81508c5c3c53e2..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7.cu
+++ /dev/null
@@ -1,73 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#include "InitAdvectionDiffusionIncompressibleD3Q7.h"
-
-#include "InitAdvectionDiffusionIncompressibleD3Q7_Device.cuh"
-#include "Parameter/Parameter.h"
-#include <cuda_helper/CudaGrid.h>
-
-std::shared_ptr<PreProcessorStrategy> InitAdvectionDiffusionIncompressibleD3Q7::getNewInstance(std::shared_ptr<Parameter> para)
-{
-    return std::shared_ptr<PreProcessorStrategy>(new InitAdvectionDiffusionIncompressibleD3Q7(para));
-}
-
-void InitAdvectionDiffusionIncompressibleD3Q7::init(int level)
-{
-    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
-
-    InitAdvectionDiffusionIncompressibleD3Q7_Device <<< grid.grid, grid.threads >>>(
-        para->getParD(level)->neighborX,
-        para->getParD(level)->neighborY,
-        para->getParD(level)->neighborZ,
-        para->getParD(level)->typeOfGridNode,
-        para->getParD(level)->concentration,
-        para->getParD(level)->velocityX,
-        para->getParD(level)->velocityY,
-        para->getParD(level)->velocityZ,
-        para->getParD(level)->numberOfNodes,
-        para->getParD(level)->distributionsAD.f[0],
-        para->getParD(level)->isEvenTimestep);
-    getLastCudaError("InitAdvectionDiffusionIncompressibleD3Q7_Device execution failed");
-}
-
-bool InitAdvectionDiffusionIncompressibleD3Q7::checkParameter()
-{
-    return false;
-}
-
-InitAdvectionDiffusionIncompressibleD3Q7::InitAdvectionDiffusionIncompressibleD3Q7(std::shared_ptr<Parameter> para)
-{
-    this->para = para;
-}
-
-InitAdvectionDiffusionIncompressibleD3Q7::InitAdvectionDiffusionIncompressibleD3Q7()
-{
-}
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7.h
deleted file mode 100644
index 4ece3ee7dd8c889ec373bcc08a5e47c255b7be5b..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7.h
+++ /dev/null
@@ -1,53 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#ifndef InitAdvectionDiffusionIncompressibleD3Q7_H
-#define InitAdvectionDiffusionIncompressibleD3Q7_H
-
-#include "PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h"
-
-#include <memory>
-
-class Parameter;
-
-class InitAdvectionDiffusionIncompressibleD3Q7 : public PreProcessorStrategy
-{
-public:
-    static std::shared_ptr<PreProcessorStrategy> getNewInstance(std::shared_ptr< Parameter> para);
-    void init(int level);
-    bool checkParameter();
-
-private:
-    InitAdvectionDiffusionIncompressibleD3Q7();
-    InitAdvectionDiffusionIncompressibleD3Q7(std::shared_ptr< Parameter> para);
-    std::shared_ptr< Parameter> para;
-};
-
-#endif 
\ No newline at end of file
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7_Device.cu
deleted file mode 100644
index 441e8c7adcc18d891615d0374fe5bfaa56d92652..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7_Device.cu
+++ /dev/null
@@ -1,126 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-#include "math.h"
-
-__global__ void InitAdvectionDiffusionIncompressibleD3Q7_Device(
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned int* geoD,
-    real* Conc,
-    real* ux,
-    real* uy,
-    real* uz,
-    unsigned int size_Mat,
-    real* DD7,
-    bool EvenOrOdd)
-{
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-   const unsigned nx = blockDim.x;
-   const unsigned ny = gridDim.x;
-
-   const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
-
-   if(k<size_Mat)
-   {
-      ////////////////////////////////////////////////////////////////////////////////
-      unsigned int BC;
-      BC        =   geoD[k];
-
-      if( BC != GEO_SOLID && BC != GEO_VOID)
-      {
-         Distributions7 D7;
-         if (EvenOrOdd==true)
-         {
-            D7.f[0] = &DD7[0*size_Mat];
-            D7.f[1] = &DD7[1*size_Mat];
-            D7.f[2] = &DD7[2*size_Mat];
-            D7.f[3] = &DD7[3*size_Mat];
-            D7.f[4] = &DD7[4*size_Mat];
-            D7.f[5] = &DD7[5*size_Mat];
-            D7.f[6] = &DD7[6*size_Mat];
-         }
-         else
-         {
-            D7.f[0] = &DD7[0*size_Mat];
-            D7.f[2] = &DD7[1*size_Mat];
-            D7.f[1] = &DD7[2*size_Mat];
-            D7.f[4] = &DD7[3*size_Mat];
-            D7.f[3] = &DD7[4*size_Mat];
-            D7.f[6] = &DD7[5*size_Mat];
-            D7.f[5] = &DD7[6*size_Mat];
-         }
-         //////////////////////////////////////////////////////////////////////////
-         real ConcD = Conc[k];
-         real   vx1 = ux[k];
-         real   vx2 = uy[k];
-         real   vx3 = uz[k];
-         real lambdaD     = -c3o1 + sqrt(c3o1);
-         real Diffusivity = c1o20;
-         real Lam         = -(c1o2+c1o1/lambdaD);
-         real nue_d       = Lam/c3o1;
-         real ae          = Diffusivity/nue_d - c1o1;
-         real ux_sq       = vx1 * vx1;
-         real uy_sq       = vx2 * vx2;
-         real uz_sq       = vx3 * vx3;
-         //////////////////////////////////////////////////////////////////////////
-         //index
-         //////////////////////////////////////////////////////////////////////////
-         unsigned int kzero= k;
-         unsigned int ke   = k;
-         unsigned int kw   = neighborX[k];
-         unsigned int kn   = k;
-         unsigned int ks   = neighborY[k];
-         unsigned int kt   = k;
-         unsigned int kb   = neighborZ[k];
-         //////////////////////////////////////////////////////////////////////////
-
-         (D7.f[0])[kzero] = ConcD*(c1o3*(ae*(-c3o1))-(ux_sq+uy_sq+uz_sq));
-         (D7.f[1])[ke   ] = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)+vx1*c1o2);
-         (D7.f[2])[kw   ] = ConcD*(c1o6*(ae+c1o1)+c1o2*(ux_sq)-vx1*c1o2);
-         (D7.f[3])[kn   ] = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)+vx2*c1o2);
-         (D7.f[4])[ks   ] = ConcD*(c1o6*(ae+c1o1)+c1o2*(uy_sq)-vx2*c1o2);
-         (D7.f[5])[kt   ] = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)+vx3*c1o2);
-         (D7.f[6])[kb   ] = ConcD*(c1o6*(ae+c1o1)+c1o2*(uz_sq)-vx3*c1o2);
-      }
-   }
-}
\ No newline at end of file
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7_Device.cuh
deleted file mode 100644
index 3d0efb3a80edc645020226ca7fe88256a6c5097e..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitAdvectionDiffusionIncompressibleD3Q7/InitAdvectionDiffusionIncompressibleD3Q7_Device.cuh
+++ /dev/null
@@ -1,50 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#ifndef InitAdvectionDiffusionIncompressibleD3Q7_Device_H
-#define InitAdvectionDiffusionIncompressibleD3Q7_Device_H
-
-#include <DataTypes.h>
-#include <curand.h>
-
-__global__ void InitAdvectionDiffusionIncompressibleD3Q7_Device(
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned int* geoD,
-    real* Conc,
-    real* ux,
-    real* uy,
-    real* uz,
-    unsigned int size_Mat,
-    real* DD7,
-    bool EvenOrOdd);
-
-#endif
\ No newline at end of file
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible.cu
deleted file mode 100644
index b3f298988f64f4726743d8429f6df52da8eb8227..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible.cu
+++ /dev/null
@@ -1,73 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#include "InitK18K20NavierStokesCompressible.h"
-
-#include "InitK18K20NavierStokesCompressible_Device.cuh"
-#include "Parameter/Parameter.h"
-#include <cuda_helper/CudaGrid.h>
-
-std::shared_ptr<PreProcessorStrategy> InitK18K20NavierStokesCompressible::getNewInstance(std::shared_ptr<Parameter> para)
-{
-    return std::shared_ptr<PreProcessorStrategy>(new InitK18K20NavierStokesCompressible(para));
-}
-
-void InitK18K20NavierStokesCompressible::init(int level)
-{
-    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes);
-
-    InitK18K20NavierStokesCompressible_Device <<< grid.grid, grid.threads >>>(
-        para->getParD(level)->neighborX,
-        para->getParD(level)->neighborY,
-        para->getParD(level)->neighborZ,
-        para->getParD(level)->typeOfGridNode,
-        para->getParD(level)->rho,
-        para->getParD(level)->velocityX,
-        para->getParD(level)->velocityY,
-        para->getParD(level)->velocityZ,
-        para->getParD(level)->numberOfNodes,
-        para->getParD(level)->g6.g[0],
-        para->getParD(level)->isEvenTimestep);
-    getLastCudaError("InitK18K20NavierStokesCompressible_Device execution failed");
-}
-
-bool InitK18K20NavierStokesCompressible::checkParameter()
-{
-    return false;
-}
-
-InitK18K20NavierStokesCompressible::InitK18K20NavierStokesCompressible(std::shared_ptr<Parameter> para)
-{
-    this->para = para;
-}
-
-InitK18K20NavierStokesCompressible::InitK18K20NavierStokesCompressible()
-{
-}
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible.h
deleted file mode 100644
index 403dc4f0cac889af75f40da0cf92f8b821692407..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible.h
+++ /dev/null
@@ -1,53 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#ifndef InitK18K20NavierStokesCompressible_H
-#define InitK18K20NavierStokesCompressible_H
-
-#include "PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h"
-
-#include <memory>
-
-class Parameter;
-
-class InitK18K20NavierStokesCompressible : public PreProcessorStrategy
-{
-public:
-    static std::shared_ptr<PreProcessorStrategy> getNewInstance(std::shared_ptr< Parameter> para);
-    void init(int level);
-    bool checkParameter();
-
-private:
-    InitK18K20NavierStokesCompressible();
-    InitK18K20NavierStokesCompressible(std::shared_ptr< Parameter> para);
-    std::shared_ptr< Parameter> para;
-};
-
-#endif 
\ No newline at end of file
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible_Device.cu
deleted file mode 100644
index 6beb4ad8574236857b16cebf035c2796312bdf82..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible_Device.cu
+++ /dev/null
@@ -1,110 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#include "LBM/LB.h" 
-#include "lbm/constants/D3Q27.h"
-#include <basics/constants/NumericConstants.h>
-
-using namespace vf::basics::constant;
-using namespace vf::lbm::dir;
-#include "math.h"
-
-
-__global__ void InitK18K20NavierStokesCompressible_Device(unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned int* geoD,
-    real* rho,
-    real* ux,
-    real* uy,
-    real* uz,
-    unsigned int size_Mat,
-    real* G6,
-    bool EvenOrOdd)
-{
-    ////////////////////////////////////////////////////////////////////////////////
-    const unsigned  x = threadIdx.x;  // Globaler x-Index 
-    const unsigned  y = blockIdx.x;   // Globaler y-Index 
-    const unsigned  z = blockIdx.y;   // Globaler z-Index 
-
-    const unsigned nx = blockDim.x;
-    const unsigned ny = gridDim.x;
-
-    const unsigned k = nx*(ny*z + y) + x;
-    //////////////////////////////////////////////////////////////////////////
-
-    if (k < size_Mat)
-    {
-        ////////////////////////////////////////////////////////////////////////////////
-        unsigned int BC;
-        BC = geoD[k];
-
-        if (BC != GEO_SOLID &&  BC != GEO_VOID)
-        {
-            Distributions6 D;
-            if (EvenOrOdd == true)
-            {
-                D.g[dP00] = &G6[dP00   *size_Mat];
-                D.g[dM00] = &G6[dM00   *size_Mat];
-                D.g[d0P0] = &G6[d0P0   *size_Mat];
-                D.g[d0M0] = &G6[d0M0   *size_Mat];
-                D.g[d00P] = &G6[d00P   *size_Mat];
-                D.g[d00M] = &G6[d00M   *size_Mat];
-            }
-            else
-            {
-                D.g[dM00] = &G6[dP00   *size_Mat];
-                D.g[dP00] = &G6[dM00   *size_Mat];
-                D.g[d0M0] = &G6[d0P0   *size_Mat];
-                D.g[d0P0] = &G6[d0M0   *size_Mat];
-                D.g[d00M] = &G6[d00P   *size_Mat];
-                D.g[d00P] = &G6[d00M   *size_Mat];
-            }
-            //////////////////////////////////////////////////////////////////////////
-            //index
-            //////////////////////////////////////////////////////////////////////////
-            // unsigned int kzero = k;
-            unsigned int ke = k;
-            unsigned int kw = neighborX[k];
-            unsigned int kn = k;
-            unsigned int ks = neighborY[k];
-            unsigned int kt = k;
-            unsigned int kb = neighborZ[k];
-            //////////////////////////////////////////////////////////////////////////
-
-            (D.g[dP00])[ke] = 0.0f;
-            (D.g[dM00])[kw] = 0.0f;
-            (D.g[d0P0])[kn] = 0.0f;
-            (D.g[d0M0])[ks] = 0.0f;
-            (D.g[d00P])[kt] = 0.0f;
-            (D.g[d00M])[kb] = 0.0f;
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible_Device.cuh
deleted file mode 100644
index 90ecb070533a0bf40522bdf246f59921149caaa3..0000000000000000000000000000000000000000
--- a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitK18K20NavierStokesCompressible/InitK18K20NavierStokesCompressible_Device.cuh
+++ /dev/null
@@ -1,50 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  This file is part of VirtualFluids. VirtualFluids is free software: you can
-//  redistribute it and/or modify it under the terms of the GNU General Public
-//  License as published by the Free Software Foundation, either version 3 of
-//  the License, or (at your option) any later version.
-//
-//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
-//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-//  for more details.
-//
-//  You should have received a copy of the GNU General Public License along
-//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
-//
-//! \author Martin Schoenherr
-//=======================================================================================
-#ifndef InitK18K20NavierStokesCompressible_Device_H
-#define InitK18K20NavierStokesCompressible_Device_H
-
-#include <DataTypes.h>
-#include <curand.h>
-
-__global__ void InitK18K20NavierStokesCompressible_Device(
-    unsigned int* neighborX,
-    unsigned int* neighborY,
-    unsigned int* neighborZ,
-    unsigned int* geoD,
-    real* rho,
-    real* ux,
-    real* uy,
-    real* uz,
-    unsigned int size_Mat,
-    real* G6,
-    bool EvenOrOdd);
-
-#endif
\ No newline at end of file
diff --git a/src/gpu/core/PreProcessor/PreProcessorType.h b/src/gpu/core/PreProcessor/PreProcessorType.h
index 20230c4b08817352f60cb5567dd99fdd19ce6438..88c4f2bfb35abb19d80380035df0b6cfe6020bfa 100644
--- a/src/gpu/core/PreProcessor/PreProcessorType.h
+++ b/src/gpu/core/PreProcessor/PreProcessorType.h
@@ -35,10 +35,7 @@ enum PreProcessorType
 {
     InitNavierStokesIncompressible,
     InitNavierStokesCompressible,
-    InitK18K20NavierStokesCompressible,
-    InitAdvectionDiffusionIncompressibleD3Q7,
     InitAdvectionDiffusionIncompressible,
-    InitAdvectionDiffusionCompressibleD3Q7,
     InitAdvectionDiffusionCompressible
 };
 #endif
\ No newline at end of file
diff --git a/src/gpu/core/PreProcessor/ReaderMeasurePoints.cpp b/src/gpu/core/PreProcessor/ReaderMeasurePoints.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..59835b1f6ff95de78ac8885e3e30a34626a80350
--- /dev/null
+++ b/src/gpu/core/PreProcessor/ReaderMeasurePoints.cpp
@@ -0,0 +1,80 @@
+#include "ReaderMeasurePoints.h"
+
+#include "Parameter/Parameter.h"
+#include "GPU/CudaMemoryManager.h"
+
+#include <basics/utilities/UbFileInputASCII.h>
+
+using namespace vf::lbm::dir;
+
+//////////////////////////////////////////////////////////////////////////
+void ReaderMeasurePoints::readMeasurePoints( Parameter* para ) 
+{
+    UbFileInputASCII in(para->getmeasurePoints());
+    int numberOfAllNodes = in.readInteger();
+    in.readLine();
+    int tempLevel;
+    MeasurePoints tempMP;
+    //printf("done, init the values...\n");
+    for (int u = 0; u < numberOfAllNodes; u++)
+    {
+        tempMP.name = in.readString();         
+        //printf("done, read the name...\n");
+        tempMP.k = in.readInteger();
+        //printf("done, read k...\n");
+        tempLevel = in.readInteger();
+        //printf("done, read level...\n");
+        in.readLine();
+        //printf("done, read the values...\n");
+        para->getParH(tempLevel)->MP.push_back(tempMP);
+        //printf("done, put it into a vector...\n");
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void ReaderMeasurePoints::readMeasurePoints(Parameter* para, CudaMemoryManager* cudaMemoryManager)
+{
+    // read measure points from file
+    ReaderMeasurePoints::readMeasurePoints(para);
+    // printf("done, reading the file...\n");
+    // level loop
+    for (int lev = 0; lev <= para->getMaxLevel(); lev++) {
+        // set Memory Size and malloc of the indices and macroscopic values per level
+        para->getParH(lev)->numberOfValuesMP = (unsigned int)para->getParH(lev)->MP.size() *
+                                               (unsigned int)para->getclockCycleForMP() /
+                                               ((unsigned int)para->getTimestepForMP());
+        para->getParD(lev)->numberOfValuesMP = para->getParH(lev)->numberOfValuesMP;
+
+        para->getParH(lev)->numberOfPointskMP = (int)para->getParH(lev)->MP.size();
+        para->getParD(lev)->numberOfPointskMP = para->getParH(lev)->numberOfPointskMP;
+
+        para->getParH(lev)->memSizeIntkMP = sizeof(unsigned int) * (int)para->getParH(lev)->MP.size();
+        para->getParD(lev)->memSizeIntkMP = para->getParH(lev)->memSizeIntkMP;
+
+        para->getParH(lev)->memSizerealkMP = sizeof(real) * para->getParH(lev)->numberOfValuesMP;
+        para->getParD(lev)->memSizerealkMP = para->getParH(lev)->memSizerealkMP;
+
+        printf("Level: %d, numberOfValuesMP: %d, memSizeIntkMP: %d, memSizerealkMP: %d\n", lev,
+               para->getParH(lev)->numberOfValuesMP, para->getParH(lev)->memSizeIntkMP, para->getParD(lev)->memSizerealkMP);
+
+        cudaMemoryManager->cudaAllocMeasurePointsIndex(lev);
+
+        // loop over all measure points per level
+        for (int index = 0; index < (int)para->getParH(lev)->MP.size(); index++) {
+            // set indices
+            para->getParH(lev)->kMP[index] = para->getParH(lev)->MP[index].k;
+        }
+        // loop over all measure points per level times MPClockCycle
+        for (int index = 0; index < (int)para->getParH(lev)->numberOfValuesMP; index++) {
+            // init values
+            para->getParH(lev)->VxMP[index] = (real)0.0;
+            para->getParH(lev)->VyMP[index] = (real)0.0;
+            para->getParH(lev)->VzMP[index] = (real)0.0;
+            para->getParH(lev)->RhoMP[index] = (real)0.0;
+        }
+
+        // copy indices-arrays
+        cudaMemoryManager->cudaCopyMeasurePointsIndex(lev);
+    }
+}
+////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/core/PreProcessor/ReaderMeasurePoints.h b/src/gpu/core/PreProcessor/ReaderMeasurePoints.h
new file mode 100644
index 0000000000000000000000000000000000000000..62dd9446c0ad9d0e3b1d1e5c34eb80d53ff8038a
--- /dev/null
+++ b/src/gpu/core/PreProcessor/ReaderMeasurePoints.h
@@ -0,0 +1,16 @@
+#ifndef POSITION_READER_H
+#define POSITION_READER_H
+
+class Parameter;
+class CudaMemoryManager;
+
+class ReaderMeasurePoints
+{
+private:
+    static void readMeasurePoints(Parameter* para);
+
+public:
+    static void readMeasurePoints(Parameter* para, CudaMemoryManager* cudaMemoryManager);
+};
+
+#endif
\ No newline at end of file
diff --git a/src/lbm/ChimeraTransformation.h b/src/lbm/ChimeraTransformation.h
index 8e54d47a42e164a89060f5009c112f5a69afd257..cf59d32a6b599e4a6640b51b4a0f03669fb62bb5 100644
--- a/src/lbm/ChimeraTransformation.h
+++ b/src/lbm/ChimeraTransformation.h
@@ -98,10 +98,10 @@ inline __host__ __device__ void forwardChimeraWithK(real &mfa, real &mfb, real &
     mfa = m0;
     //m0     += K;
     mfb = (m1 - K*vv) - m0 * vv;
-    mfc = ((m2 - c2o1*	m1 * vv) + v2*K) + v2 * m0;
+    mfc = ((m2 - c2o1*    m1 * vv) + v2*K) + v2 * m0;
     //m0 += K;
     //mfb = m1 - m0 * vv;
-    //mfc = m2 - two*	m1 * vv + v2 * m0;
+    //mfc = m2 - two*    m1 * vv + v2 * m0;
 }
 
 
diff --git a/src/lbm/constants/D3Q27.h b/src/lbm/constants/D3Q27.h
index 292af239e333b79d118150f0cfee5477e895d200..cd40c42786ab760e1b7c77dc229a5e40d7aebc84 100644
--- a/src/lbm/constants/D3Q27.h
+++ b/src/lbm/constants/D3Q27.h
@@ -64,5 +64,61 @@ static constexpr size_t iMPM = dPMP;
 static constexpr size_t iPMM = dMPP;
 static constexpr size_t iMMM = dPPP;
 
+static constexpr size_t eP00 = 0;
+static constexpr size_t eM00 = 0;
+static constexpr size_t e0P0 = 1;
+static constexpr size_t e0M0 = 1;
+static constexpr size_t e00P = 2;
+static constexpr size_t e00M = 2;
+static constexpr size_t ePP0 = 3;
+static constexpr size_t eMM0 = 3;
+static constexpr size_t ePM0 = 4;
+static constexpr size_t eMP0 = 4;
+static constexpr size_t eP0P = 5;
+static constexpr size_t eM0M = 5;
+static constexpr size_t eP0M = 6;
+static constexpr size_t eM0P = 6;
+static constexpr size_t e0PP = 7;
+static constexpr size_t e0MM = 7;
+static constexpr size_t e0PM = 8;
+static constexpr size_t e0MP = 8;
+static constexpr size_t ePPP = 9;
+static constexpr size_t eMMM = 9;
+static constexpr size_t eMPP = 10;
+static constexpr size_t ePMM = 10;
+static constexpr size_t ePMP = 11;
+static constexpr size_t eMPM = 11;
+static constexpr size_t eMMP = 12;
+static constexpr size_t ePPM = 12;
+
+static constexpr unsigned long int et000 = 1;
+static constexpr unsigned long int etP00 = 2;      
+static constexpr unsigned long int etM00 = 4;      
+static constexpr unsigned long int et0P0 = 8;      
+static constexpr unsigned long int et0M0 = 16;     
+static constexpr unsigned long int et00P = 32;     
+static constexpr unsigned long int et00M = 64;     
+static constexpr unsigned long int etPP0 = 128;    
+static constexpr unsigned long int etMM0 = 256;    
+static constexpr unsigned long int etPM0 = 512;    
+static constexpr unsigned long int etMP0 = 1024;   
+static constexpr unsigned long int etP0P = 2048;   
+static constexpr unsigned long int etM0M = 4096;   
+static constexpr unsigned long int etP0M = 8192;   
+static constexpr unsigned long int etM0P = 16384;  
+static constexpr unsigned long int et0PP = 32768;  
+static constexpr unsigned long int et0MM = 65536;  
+static constexpr unsigned long int et0PM = 131072; 
+static constexpr unsigned long int et0MP = 262144; 
+static constexpr unsigned long int etPPP = 524288;
+static constexpr unsigned long int etMPP = 1048576;
+static constexpr unsigned long int etPMP = 2097152;
+static constexpr unsigned long int etMMP = 4194304;
+static constexpr unsigned long int etPPM = 8388608;
+static constexpr unsigned long int etMPM = 16777216;
+static constexpr unsigned long int etPMM = 33554432;
+static constexpr unsigned long int etMMM = 67108864;
+ 
+
 } // namespace vf::lbm::dir
 #endif
diff --git a/src/parallel/CMakeLists.txt b/src/parallel/CMakeLists.txt
index 742ebc3631ed3419bae3ebf1a67b40baf6a5be28..4f4498404d8fc7d93b57c8d4b8936d81b92ceeff 100644
--- a/src/parallel/CMakeLists.txt
+++ b/src/parallel/CMakeLists.txt
@@ -1,6 +1,11 @@
 
-vf_add_library(PUBLIC_LINK logger MPI::MPI_CXX basics)
+vf_add_library(PUBLIC_LINK logger basics)
 
 if(MSVC)
     target_link_libraries(parallel PRIVATE ws2_32)
 endif()
+
+# TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/139
+# if(BUILD_USE_MPI)
+    target_link_libraries(parallel PUBLIC MPI::MPI_CXX)
+# endif()
diff --git a/src/parallel/Communicator.h b/src/parallel/Communicator.h
index 23a760981944cfa143d7521275255f39a92bb7fe..815f5540039d8ed905b0d928d663f6dfba60b95a 100644
--- a/src/parallel/Communicator.h
+++ b/src/parallel/Communicator.h
@@ -55,6 +55,8 @@ public:
 
     virtual ~Communicator() = default;
 
+
+    virtual double Wtime() = 0;
     virtual int getBundleID() const                      = 0;
     virtual int getNumberOfBundles() const               = 0;
     virtual int getProcessID() const                     = 0;
diff --git a/src/parallel/MPICommunicator.cpp b/src/parallel/MPICommunicator.cpp
index 8ae7ea66387f5e02b2e90dcacefbc324e81ca564..4aff91ea2b746ff241ad54583d4e6c0d13ec2066 100644
--- a/src/parallel/MPICommunicator.cpp
+++ b/src/parallel/MPICommunicator.cpp
@@ -17,6 +17,11 @@ using namespace std;
 
 namespace vf::parallel
 {
+//////////////////////////////////////////////////////////////////////////
+double MPICommunicator::Wtime()
+{
+    return MPI_Wtime();
+}
 std::shared_ptr<Communicator> MPICommunicator::getInstance()
 {
     std::lock_guard<std::mutex> myLock(instantiation_mutex);
diff --git a/src/parallel/MPICommunicator.h b/src/parallel/MPICommunicator.h
index 466a3c3f8d311c743b546116a0a4ca9a23735488..66e00893473b4861f2af21e39d1e44c64348d7e8 100644
--- a/src/parallel/MPICommunicator.h
+++ b/src/parallel/MPICommunicator.h
@@ -33,6 +33,7 @@ public:
 
     ~MPICommunicator() override;
     static std::shared_ptr<Communicator> getInstance();
+    double Wtime() override;
     int getBundleID() const override;
     int getNumberOfBundles() const override;
     int getProcessID() const override;
diff --git a/src/parallel/NullCommunicator.cpp b/src/parallel/NullCommunicator.cpp
index 56c17a8c3c466dae3299d0b32f9e918c68cc1610..3bac9fe2c80d63871476e9741ae5599f4a977d07 100644
--- a/src/parallel/NullCommunicator.cpp
+++ b/src/parallel/NullCommunicator.cpp
@@ -47,6 +47,11 @@ std::shared_ptr<Communicator> NullCommunicator::getInstance()
     return instance;
 }
 //////////////////////////////////////////////////////////////////////////
+double NullCommunicator::Wtime()
+{
+    return 0;
+}
+//////////////////////////////////////////////////////////////////////////
 int NullCommunicator::getBundleID() const
 {
     return 0;
diff --git a/src/parallel/NullCommunicator.h b/src/parallel/NullCommunicator.h
index 295f946dbe8dd05c89ec57b733aa84867b5bea70..dc49fb3b7fae0b277e960d8f04c54abfc0731a13 100644
--- a/src/parallel/NullCommunicator.h
+++ b/src/parallel/NullCommunicator.h
@@ -46,6 +46,7 @@ class NullCommunicator : public Communicator
 public:
     static std::shared_ptr<Communicator> getInstance();
 
+    double Wtime() override;
     int getBundleID() const override;
     int getNumberOfBundles() const override;
     int getProcessID() const override;
diff --git a/src/basics/transmitter/TbTransmitter.h b/src/parallel/transmitter/TbTransmitter.h
similarity index 86%
rename from src/basics/transmitter/TbTransmitter.h
rename to src/parallel/transmitter/TbTransmitter.h
index 22fff52a1d1a9d2219b78e933d63e3e1c208897f..ad58295359127370d6fa327dc612de8abeb29c2f 100644
--- a/src/basics/transmitter/TbTransmitter.h
+++ b/src/parallel/transmitter/TbTransmitter.h
@@ -26,29 +26,13 @@
 //  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 TbTransmitter.h
-//! \ingroup transmitter
 //! \author Soeren Freudiger, Sebastian Geller
 //=======================================================================================
-#ifndef TBTRANSMITTER_H
-#define TBTRANSMITTER_H
+#ifndef PARALLEL_TBTRANSMITTER_H
+#define PARALLEL_TBTRANSMITTER_H
 
 #include <string>
 
-/*================================================================================*/
-/*  TbTransmitter                                                                 */
-/*                                                                                */
-/**
-This Class provides the base for sending and receiving of data.
-<BR><BR>
-@author <A HREF="mailto:muffmolch@gmx.de">S. Freudiger</A>
-@version 1.0 - 08.11.07
-*/
-
-/*
-usage: ...
-*/
-
 //////////////////////////////////////////////////////////////////////////
 // Transmitter
 // macht nichts ausser daten senden und empfangen
diff --git a/src/basics/transmitter/TbTransmitterLocal.h b/src/parallel/transmitter/TbTransmitterLocal.h
similarity index 89%
rename from src/basics/transmitter/TbTransmitterLocal.h
rename to src/parallel/transmitter/TbTransmitterLocal.h
index 39a2592c19cbb23d56c880ef501a89b506b974d7..7272abe5eb16e89c262f0ade5dc7723e33c452b9 100644
--- a/src/basics/transmitter/TbTransmitterLocal.h
+++ b/src/parallel/transmitter/TbTransmitterLocal.h
@@ -26,30 +26,15 @@
 //  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 TbTransmitterLocal.h
-//! \ingroup transmitter
 //! \author Soeren Freudiger, Sebastian Geller
 //=======================================================================================
-#ifndef TOTRANSMITTERLOCAL_H
-#define TOTRANSMITTERLOCAL_H
+#ifndef PARALLEL_TOTRANSMITTERLOCAL_H
+#define PARALLEL_TOTRANSMITTERLOCAL_H
 
-#include <PointerDefinitions.h>
-#include <basics/transmitter/TbTransmitter.h>
+#include <basics/PointerDefinitions.h>
 #include <basics/utilities/UbException.h>
 
-/*================================================================================*/
-/*   TbLocalTransmitter, TbVectorSenderLocal, TbVectorReceiverLocal               */
-/*                                                                                */
-/**
-This Class provides the base for exception handling.
-<BR><BR>
-@author <A HREF="mailto:muffmolch@gmx.de">S. Freudiger</A>
-@version 1.0 - 08.11.07
-*/
-
-/*
-usage: ...
-*/
+#include "parallel/transmitter/TbTransmitter.h"
 
 //////////////////////////////////////////////////////////////////////////
 // LocalTransmitter lokalen Datenaustausch
diff --git a/src/basics/transmitter/TbTransmitterMpiPool.h b/src/parallel/transmitter/TbTransmitterMpiPool.h
similarity index 99%
rename from src/basics/transmitter/TbTransmitterMpiPool.h
rename to src/parallel/transmitter/TbTransmitterMpiPool.h
index 83c0b1e396364840d4ec03a666f482791e098462..e8bb469625bd74faf179d7d29b9b881a98c62713 100644
--- a/src/basics/transmitter/TbTransmitterMpiPool.h
+++ b/src/parallel/transmitter/TbTransmitterMpiPool.h
@@ -26,12 +26,10 @@
 //  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 TbTransmitterMpiPool.h
-//! \ingroup transmitter
 //! \author Soeren Freudiger, Sebastian Geller
 //=======================================================================================
-#ifndef TBTRANSMITTERMPIPOOL_H
-#define TBTRANSMITTERMPIPOOL_H
+#ifndef PARALLEL_TBTRANSMITTERMPIPOOL_H
+#define PARALLEL_TBTRANSMITTERMPIPOOL_H
 
 #ifdef VF_MPI
 
@@ -43,11 +41,12 @@
 
 #include <mpi.h>
 
+#include <basics/PointerDefinitions.h>
 #include <basics/container/CbVector.h>
 #include <basics/container/CbVectorPool.h>
-#include <basics/transmitter/TbTransmitter.h>
 
-#include <PointerDefinitions.h>
+#include "parallel/transmitter/TbTransmitter.h"
+
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 // TbCbVectorMpiPoolSender/Receiver